Samba 4 auf dem Raspberry Pi

Worum gehts?

Der eine oder andere hat vielleicht noch ein Raspberry Pi Computer zuhause rumliegen. Mir ging es vor einiger Zeit zumindest so. Durch einen Freund bin ich auf die Idee gekommen mein Raspberry Pi an per USB an unseren Router anzuschließen. So braucht das Raspberry Pi kein weiteres Netzteil und lässt sich gut „Huckepack“ mit dem Router in einem Schränkchen oder ähnlichem verstecken.

Gesagt getan…. doch danach stellte sich mir die Frage: Was mach ich nun damit. Nun fand ich die Idee einer eigenen Windows Domäne bzw. genauer eines eigenen Active Directories im Heimnetz schon immer sehr spannend. Seit Weihnachten 2012 gibt es mit Samba 4 auch eine freie und kostenlose Lösung für solch ein System. Daher starte ich jetzt hier mal eine kleine Reihe die in unregelmäßigen Abständen den Fortschritt meiner Samba 4 Experimente dokumentiert.

Der erste Schritt ist natürlich erstmal das ganze Setup aufzubauen. Ein kleiner Hinweis vorweg: Ein Raspberry Pi ist kein Hochleistungsrechner und mache der Schritte dauern etwas.

Die Installation

Ich starte mit einem frisch installierten Raspbian Image auf einer 16 GByte SD Karte. Bei mir sind am Ende ca. 3 GByte belegt und daher würde vermutlich auch eine kleinere Karte reichen. Mit einer 16 GByte Karte hat man aber noch ausreichend Reserven für weitere Software und auch ein paar Daten.

Da ich Samba 4 direkt auf dem Raspberry Pi übersetzen möchte werden als erstes einige weitere Pakete benötigt. Die installieren wir Debain-Typisch mit apt-get:

root@rohal:~# apt-get install python-dev git-core libacl1-dev libblkid-dev libgnutls-dev build-essential libacl1-dev libattr1-dev libreadline-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev cups cups-pdf

Im nächsten Schritt wird das ~200 MB Samba 4 Git-Repository herunter geladen:

root@rohal:~/samba# git clone -b v4-0-stable git://git.samba.org/samba.git samba-v4-0-stable

Cloning into 'samba-v4-0-stable'...
remote: Counting objects: 1116798, done.
remote: Compressing objects: 100% (253420/253420), done.
remote: Total 1116798 (delta 864433), reused 1108782 (delta 857621)
Receiving objects: 100% (1116798/1116798), 217.66 MiB | 1.59 MiB/s, done.
Resolving deltas: 100% (864433/864433), done.
Checking out files: 100% (7154/7154), done.

Nun werden die Automake-Skripte ausgeführt. Ich habe mit dazu entschlossen den Samba 4 Selbsttest mit zu erzeugen. Das hat später zu etwas Verwirrung geführt und im Allgemeinen würde ich es das nächste mal erstmal ohne Selbsttest probieren. Es schadet aber auch nicht den Selbsttest mit zu bauen. Dadurch dauert das übersetzen nur etwas länger.

root@rohal:~/samba# cd samba-v4-0-stable/ && ./configure --enable-selftest
'configure' finished successfully (15m22.921s)

Die Automake-Skripte haben also etwa 15 Minuten gebraucht. Das lässt schon erahnen, dass der nächste Schritt deutlich länger dauern wird. Es geht um das eigentliche übersetzen von Samba 4. Los gehts:

root@rohal:~/samba/samba-v4-0-stable# make
[...]
Waf: Leaving directory `/root/samba/samba-v4-0-stable/bin'
'build' finished successfully (4h4m30.352s)

Juhu! Das bauen hat funktioniert und „nur“ 4 Stunden gedauert. Es bietet sich meiner Meinung nach an diese Schritt vor der Arbeit oder vor dem schlafen gehen zu starten…

Wie oben bereits erwähnt habe ich auch die Selbsttest-Module mit bauen lassen. Daher wollen wir den Selbsttest nun auch starten:

root@rohal:~/samba/samba-v4-0-stable# make test
WAF_MAKE=1 python ./buildtools/bin/waf test
[...]
[342/1557 in 6h34m32s, 18 errors] samba3.base.chkpath(s3dc)
Killed
make: *** [test] Fehler 137

Bei mir ist der Selbsttest offensichtlich nach 6,5 Stunden abgebrochen. Ich bin mir aber nicht sicher was letztlich das Problem gewesen ist. Da Samba generell erfolgreich übersetzt wurde habe ich es trotz Probleme im Selbsttest installiert.

root@rohal:~/samba/samba-v4-0-stable# make install
WAF_MAKE=1 python ./buildtools/bin/waf install
[...]
Waf: Leaving directory `/root/samba/samba-v4-0-stable/bin'
'install' finished successfully (50m39.123s)

Auch wenn in diesem Schritt im Grunde nur Dateien kopiert werden dauert er fast eine weitere Stunde. Dafür geht es ab jetzt schneller weiter und der spannende Teil beginnt: Die Einrichtung bzw. das eigentliche Setup

Es beginnt damit das Active Directory und die Domäne zu provisionieren:

root@rohal:/usr/local/samba/bin# ./samba-tool domain provision --realm=weltendiskus.de --domain=WELTENDISKUS --adminpass 'g3he1m' --server-role=dc
Looking up IPv4 addresses
Looking up IPv6 addresses
More than one IPv6 address found. Using 2a01:198:xxxx::xxxx
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=weltendiskus,DC=de
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=weltendiskus,DC=de
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              rohal
NetBIOS Domain:        WELTENDISKUS
DNS Domain:            weltendiskus.de
DOMAIN SID:            S-1-5-21-3758538120-3010327569-907041719

Für verschlüsselte Anmeldungen ist es nun noch notwendig die Kerberos Konfigurationsdatei an die richtige Stelle zu verschieben:

root@rohal:/usr/local/samba/bin# rm /etc/krb5.conf && mv /usr/local/samba/private/krb5.conf /etc

Dann noch die Startskripte einrichten:

root@rohal:/# chmod 755 /etc/init.d/samba4
root@rohal:/# update-rc.d samba4 defaults
root@rohal:/# /etc/init.d/samba4 start

Teil des Samba 4 Paketes ist ein eigener DNS Server. Das ist notwendig, damit Windowsrechner ihren gewünschten DNS Hostname Samba 4 mitteilen können und andere Rechner diese Namen anschließend auch auflösen können.

domain weltendiskus.de
search weltendiskus.de
search fritz.box
nameserver 192.168.10.67
nameserver 192.168.10.1

Dabei ist 192.168.10.67 das Raspberry Pi sowie 192.168.10.1 der Internet-Router. Abschließend ein kleiner Test ob die AD-internen Hostnamen von Samba 4 korrekt aufgelöst werden

$ host -t SRV _ldap._tcp.weltendiskus.de.
_ldap._tcp.weltendiskus.de has SRV record 0 100 389 rohal.weltendiskus.de.
$ host -t SRV _kerberos._udp.weltendiskus.de.
_kerberos._udp.weltendiskus.de has SRV record 0 100 88 rohal.weltendiskus.de.
$ host -t A rohal.weltendiskus.de.
rohal.weltendiskus.de has address 192.168.10.67

Da Samba in /usr/local installiert wurde empfiehlt es sich abschließend noch die PATH-Variable in /etc/profile und /root/.bashrc entsprechend anzupassen.

Last but not least sollte der Raspberry Pi nun noch einmal neu gestartet werden um sicher zu stellen, dass alle Dienst bei einem Neustart wie gewünscht automatisch starten. Dann noch ein kurzer Test ob der Samba Client und Server in der korrekten Version installiert ist:

root@rohal:/home/pi# smbclient --version
Version 4.0.6
root@rohal:/home/pi# samba -V
Version 4.0.6

Damit ist die eigentliche Installation des Samba 4 Active Directories abgeschlossen. 🙂

Quellen