Samba4 selbst kompilieren und konfigurieren


Software • by Sven Reifschneider • 26 May 2014 • 1 comment
#linux #howto
info
This post is also available in English. Read in English
Dieser Artikel ist schon älter und daher ggf. nicht mehr aktuell. Aktuelle Samba Versionen sind heutzutage (Oktober 2022) eigentlich auf allen großen Linux-Distributionen verfügbar. Debian 11 nutzt derzeit Samba 4.14, bei Arch Linux ist 4.17 verfügbar. Daher besteht an sich keine Notwendigkeit mehr, samba manuell zu kompilieren.

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.

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:


Share this post

If you enjoyed this article, why not share it with your friends and acquaintances? It helps me reach more people and motivates me to keep creating awesome content for you. Just use the sharing buttons below to share the post on your favorite social media platforms. Thank you!

Sharing illustration
Donating illustration

Support the Blog

If you appreciate my work and this blog, I would be thrilled if you'd like to support me! For example, you can buy me a coffee to keep me refreshed while working on new articles, or simply contribute to the ongoing success of the blog. Every little bit of support is greatly appreciated!

Bitcoin (Segwit):3FsdZmvcwviFwq6VdB9PZtFK827bSQgteY
Ethereum:0x287Ffa3D0D1a9f0Bca9E666a6bd6eDB5d8DB9400
Litecoin (Segwit):MD8fMGDYtdeYWoiqMeuYBr8WBPGKJxomxP
Dogecoin:DTA6gkDCp1WncpoFJghzxCX7XPUryu61Vf
Sven Reifschneider
About the author

Sven Reifschneider

Greetings! I'm Sven, a tech-savvy entrepreneur and dedicated photographer, located in the scenic Wetterau, close to the vibrant Frankfurt / Rhein-Main area. This blog serves as a nexus for my eclectic pursuits, a platform where I channel my expertise and intellectual curiosity into compelling narratives.

In my professional life, I steer Neoground GmbH, providing not just AI consulting but a gamut of digital solutions — from web development to creating our own SaaS products. With a background rich in tech proficiency, I consider myself not merely an IT specialist but an advocate for community-driven innovation and systemic change.

Beyond the tech world, my lens has been my artistic ally for years, capturing everything from intimate moments to grand celebrations. This blog converges these two realms — where tech-savviness meets artistic intuition, aiming for holistic excellence. I invite you to explore a myriad of topics that not only echo my own aspirations for transformative change but offer insights drawn from a breadth of experience.


One comment

Add a comment

You can use **Markdown** in your comment. Your email won't be published. Find out more about our data protection in the privacy policy.

01 Feb 2014, 03:48
Gebenedeit

Perfekt, genau was ich gesucht habe. Dank dir.