Anfang Januar 2014 wurde von Samba die aktuelle Version 4.1.4 herausgegeben. Diese bietet einige Vorteile und Fixes gegenüber älteren Versionen und läuft zumindest bei mir deutlich stabiler, wenn es um große Datenmengen geht. Man denkt sich, dass das doch kein Problem ist. Bei Debian (ähnlichen) Systemen reicht ein apt-get update && apt-get upgrade und schon kommt das neueste samba rein. Theoretisch.
Praktisch finde ich nicht die neueste Version vor. Meine angeblich aktuelle Version ist Samba 3.x, was aber nicht ganz richtig ist, weil ich schon gerne Samba 4 hätte.

Samba 3 läuft doch stabil

In der Tat, samba3 tat bei mir über längere Zeit wunderbare Dienste. Bis ich die externe Festplatte (mein Share) tauschte (Never touch a running system ist mal wieder bestätigt). Ergebnis war nun, dass, sobald ich größere Datenmengen kopieren wollte, samba keine Lust mehr hatte und die Verbindung abbrach. Ebenso kam ich nicht mal mehr auf die externe Festplatte drauf (nicht mal vom Terminal / PuTTY). Der Grund, warum letzteres geschah, gibt es in einem eigenen Blogartikel, hier geht es mehr um samba4.

Warum samba4?

Da ich Fehlerquellen für die neue externe Festplatte ausschließen wollte, nahm ich mir auch samba vor. Schließlich können so Probleme mit einer veralteten Programmversion auftreten. Nach längerem suchen fand ich in den Repositories samba4, jedoch in der Version samba 4.0.0 beta2. Beta-Version, nein danke, ich suche was stabiles! Der aktuelle Stand (21. Januar 2014) ist nach wie vor Version 4.0.0 beta2 in den Debian Packages.
Also bleibt einem nur noch der Weg über das eigene kompilieren, was ich hier zeigen möchte. Und warum genau samba4, abgesehen von meinem Fehlerquellen ausschließen?

because samba 4 is a very powerful full featured needed monster
Naaano auf ubunuforums.org

Dieses Zitat sollte meinen Beweggrund wohl gut darstellen. Aber nun zu unserem eigentlichen Thema: Wir basteln uns unser eigenes samba4!

Für wen ist diese Anleitung geeignet?

Diese Anleitung richtet sich an jeden, der sein eigenes Samba in der neuesten Version kompilieren möchte. Der Weg sollte auf jedem System laufen, auf dem die nötigen Pakete zum kompilieren installiert sind (make, build-essentials, gcc usw.), lediglich das deinstallieren der aktuellen Version kann anders sein. Dementsprechend müsste das auch auf dem Raspberry Pi
und Konsorten laufen.

Herunterladen, kompilieren, installieren

Zu erst möchten wir einmal die alte Version von samba, in meinem Falle samba 3.x, deinstallieren. Dies ist bei Debian / Ubuntu / etc. sehr einfach möglich:

$ apt-get remove samba*

Das Dollar-Zeichen ($) steht nur für den Eingabe-Prompt vom Terminal. Mit diesem Befehl werden sämtliche samba Pakete deinstalliert, aber die Konfigurationsdateien werden beibehalten. Dies bevorzuge ich immer wieder, da ich so z.B. noch auf die smb.conf zugreifen kann. Oder, falls sich samba4 als nicht viel besser heraus stellt, kann man einfach wieder über apt-get samba installieren und hat gleich seine alte Konfiguration zurück.

Als nächstes möchten wir samba in der aktuellsten Version herunterladen, also in dem Falle die Quell-Dateien, aus denen wir unser Programm kompilieren. Dazu wird zunächst ein Ordner erstellt, in dem wir arbeiten (mkdir) und schließlich holen wir uns die neueste samba Version vom Server und entpacken diese:

$ mkdir /home/sven/samba
$ cd /home/sven/samba
$ wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz
$ tar -xzvf samba-latest.tar.gz
$ cd samba-4.1.4

Den Ordner habe ich einfach in meinem Homeverzeichnis (/home/sven) erstellt, aber dies kann auch überall sonst statt finden. Der Pfad bei wget sollte immer zur neuesten samba Version führen, lediglich beim entpacken der .tar.gz Datei entsteht dann ein Ordner mit der Version (4.1.4), welche in Zukunft abweichen kann. Ebenso kann der Download ein bisschen brauchen, denn es handelt sich um die 22MB bei der Version 4.1.4.

Beginnen wir nun mit dem klasisschen Linux-Dreisatz (wurde mal in einem Linuxforum so genannt): ./configure, make und make install.
Mit dem ersten Befehl wird geschaut, ob alles notwendige vorhanden ist, ob alle Abhängigkeiten erfüllt sind und alles wird so konfiguriert, dass es auf diesem System fehlerfrei laufen soll. Treten hier fehler auf, dann muss man nach diesen googlen oder die entsprechenden Pakete nachinstallieren. Gleiches gilt später für den make Befehl. Die ganzen Befehle müssen im Stamm-Verzeichnis des Programmcodes ausgeführt werden. Einfach daran zu erkennen, dass in dem Ordner die Datei „configure“ liegt und evtl. schon eine „Makefile“.

$ ./configure
[...]
'configure' finished successfully (7m11.511s)

Nach vielen Zeilen Text kommt dann die unterste Ausgabe. configure ist erfolgreich fertig geworden nach etwas mehr als 7 Minuten auf meinem Futro S400. Also können wir mit „make“ weiter machen. Uns erwartet viel grüne Schrift, manchmal auch blau, und hoffentlich keine Fehler. Hier wird nun alles kompiliert, was seine Zeit beansprucht…

$ make
[...]
Waf: Leaving directory '/home/sven/samba/samba-4.1.4/bin'
'build' finished successfully (1h18m51.340s)

Wie wir hier sehen können, kann man (insofern keine Abbrüche zu erwarten sind und alles notwendige installiert ist) in Ruhe zu Abend essen gehen. Da reicht keine lange Kaffeepause aus… Aber auch Rechnern mit mehr Leistung als dem Futro S400 sollte das auch dementsprechend schneller laufen. Waf ist übrigens die Umgebung, unter der make bei samba läuft.

Im nächsten Schritt können wir nun das ganze installieren. Damit kommen alle Dateien an den Platz, wo Sie hin gehören. Leider nicht so schön wie mittels apt-get, wo die Dateien dann schön sortiert liegen (Konfiguration z.B. in /etc/), sondern alles in einem Ordner, aber das ist auch relativ sauber. Und man hat sogesehen auch alles an einem Platz.

$ make install
[...]
Waf: Leaving directory '/home/sven/samba/samba-4.1.4/bin'
'install' finished successfully (26m0.511s)

Auch dies lief erfolgreich ab. Zusammengefasst dauerte das ganze konfigurieren, kompilieren und installieren knapp 2 Stunden. Also genug Zeit um sich um andere Dinge als den Linux-Server zu kümmern.
Der erstellte Arbeitspfad lautet nun /usr/local/samba. Dort finden wir alle Dateien, mit denen wir arbeiten werden.

Wo ist was?

Alles wichtige findet man, wie eben schon gesagt, unter: /usr/local/samba.
Dort befinden sich verschiedene Ordner, unter anderem „bin“ und „sbin“. In den beiden Ordnern finden wir alle ausführbaren Programme für samba und dazugehöriges. Jedoch ist kein Startscript dabei, wo wir mit einem Befehl alle notwendigen samba-Programme starten können. Also schreiben wir es uns selbst:

# Datei öffnen und darunter stehenden Inhalt einfügen (i drücken).
$ vim /usr/local/samba/startsmb

#!/bin/sh
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/winbindd -D
/usr/local/samba/sbin/nmbd -D

# Speichern, schließen. (Esc, :wq eintippen)
# Skript ausführbar machen
$ chmod +x startsmb

# Stopscript schreiben. Also wieder unten stehenden Inhalt einfügen (i drücken).
$ vim /usr/local/samba/stopsmb

#!/bin/sh
killall smbd
killall winbindd
killall nmbd

# Speichern, schließen (Esc, :wq eintippen).
# Skript ausführbar machen
$ chmod +x stopsmb

Jetzt haben wir in unserem Arbeitsordner startsmb und stopsmb, womit wir ganz einfach unseren samba-Server administrieren können.
Mehr Infos dazu und wie man das Script so verfügbar macht, dass es bei jedem Start ausgeführt wird, findet man in der samba Dokumentation unter dem Punkt „Starting smbd as a daemon“ (en): Klick.

Unsere Konfigurationsdatei ist die smb.conf. Wer schon einmal mit samba gearbeitet hat, der weiß, dass sich in dieser Datei alle notwendigen Sachen finden, um Shares, also Ordner / Festplatten im Netzwerk freizugeben. Einzelheiten zur smb.conf findet man in meiner Anleitung bzw. auf ubuntuusers.de.

Samba Befehle global verfügbar machen

Nun ist es aber relativ mühevoll, jedes mal in /usr/local/samba zu gehen und dann entweder nach bin/ oder sbin/ um die notwendigen Befehle auszuführen, wie z.B. testparm zum testen der Konfiguration. Also sollten wir die Befehle dem ganzen System bekannt machen, sodass man im Terminal überall auf diese zugreifen kann.
Dazu muss man die sogenannten $PATH-Variablen erweitern. Dies geschieht in der .bashrc Datei im home Ordner. Da ich, wenn ich an meinem Server arbeite, immer als root schaffe, macht es für mich Sinn, die „.bashrc“ im Home-Ordner von root zu bearbeiten. In dem Falle:

$ vim /root/.bashrc

Nun fügt man (nach gleichem Schema wie oben) zwei Zeilen in die .bashrc ein. Dabei sollte man jedoch einige Sachen beachten, nicht, dass man sich dann zum Schluss noch selbst aussperrt und nicht mehr ins System gelangt. Dazu gibt es auf der Seite der Uni Bielefeld eine Anleitung, die man sich erst einmal anschauen sollte. So arbeite ich bei sowas auch immer mit zwei offenen Terminals zum testen.
Eingefügt wird in die „.bashrc“:

PATH=$PATH:/usr/local/samba/bin
PATH=$PATH:/usr/local/samba/sbin

Das heißt, dass $PATH jetzt nicht nur alle Befehle aus /bin, /sbin und co. enthält, sondern auch unsere samba-Befehle. Loggt man sich nun neu in die Shell ein, kommen die ganzen Samba Befehle zu Tage. Einfach mal „smb“ eintippen und zwei mal die Tab-Taste drücken:

$ smb
smbcacls    smbclient4  smbcquotas  smbget      smbspool    smbtar      smbtorture
smbclient   smbcontrol  smbd        smbpasswd   smbstatus   smbta-util  smbtree

Samba starten

So können wir nun auch überall testparm eingeben und unsere samba-Konfigurationsdatei smb.conf wird getestet und auf Fehler überprüft.
Sollte das fehlerfrei geklappt haben, können wir mittels /usr/local/samba/startsmb samba starten. Um das zu testen sollte man sich einfach mal von einem Windows-Rechner auf die Freigabe einloggen (Im Windows-Explorer im Adressbereich einfach mal IP-des-Servers eintippen). Klappt das, so können wir mehr als zufrieden sein!
Ein Blick auf smbstatus zeigt auch die erfolgreiche Verbindung:

$ smbstatus

Samba version 4.1.4
PID     Username      Group         Machine
-------------------------------------------------------------------
31755   smbusr        smbusr        workstation (ipv4:192.168.0.9:63067)

Service      pid     machine       Connected at
-------------------------------------------------------
IPC$         31755   workstation   Sat Jan 18 20:16:06 2014
share        31755   workstation   Sat Jan 18 20:16:06 2014

Fazit

Das aufsetzen von samba ist wirklich nicht all zu schwer, wenn man ein paar Dinge beachtet. Somit ist es uns nun möglich, auf jedem Linux-Rechner samba selbst zu kompilieren und zu installieren, ohne von Paketen der Distribution abhängig zu sein. Samba4 läuft bei mir deutlich performanter und die Arbeit hat sich gelohnt. Und wenn man vorher weiß, dass das kompilieren auf einem schwachen Rechner / Thinclient so viel Zeit in Anspruch nimmt, kann man sich währenddessen einen schönen Nachmittag machen.

Ich hoffe, dass diese Anleitung dem ein oder anderen hilft. Theoretisch müsste man auch so samba auf einem Raspberry Pi aufsetzen können, von daher kann man diese Anleitung hier sehr allgemein verwenden, ohne auf Ubuntu / Debian beschränkt zu sein.

Hilfreiche Links

Natürlich musste ich selbst auch auf vielen Seiten schauen, meist in Foren. Das Wissen davon habe ich hier kompakt zusammengefasst. Jedoch gibt es immer irgendwelche Feinheiten, die man sich noch wünscht, wozu es aber die (etwas versteckte) Manual von samba selbst gibt. Außerdem noch ein paar weitere Links, welche vielleicht dem ein oder anderen helfen können:

Anleitung downloaden

Ich selbst mache mir für sowas immer meine eigenen Anleitungen, bevor ich diese in Textform ausformuliert hier schreibe. Diese Text-Datei ist meist so eine Art Thesenpapier von mir und hilft mir, den Überblick zu bewahren. Wer sich also mit Linux ganz gut auskennt und diese Anleitung in Kompaktform sucht, der kann diese gerne herunterladen.

DOWNLOAD via Google Drive

Am besten lässt diese sich in Notepad++ betrachten, wenn man das Syntax Highlighting auf Shell stellt (Sprachen -> Shell).