Samba auf der Fritz!Box
Mein Rechner mit der Test-VM läuft wieder, und nachdem Google & Co. nicht wirklich bei meinem Compile-Problem helfen konnten, habe ich im Verzeichnisbaum der Fritz!Box-Sourcefiles eine interessante Entdeckung gemacht:
# cd /home/mipsel
# ls -al fritzbox/GPL/base_4mb_build/uClibc-0.9.26/debian/gcc-uClibc
drwxrwxrwx 4 mipsel users 1024 2005-12-06 19:33 .
drwxrwxrwx 3 mipsel users 1024 2005-11-02 11:11 ..
-rw-rw-rw- 1 mipsel users 17658 2004-04-06 18:00 gcc-uClibc.c
-rw-rw-rw- 1 mipsel mipsel 739 2005-11-29 18:58 gcc-uClibc.h
-rw-rw-rw- 1 mipsel users 3847 2004-04-06 18:00 Makefile
-rwxrwxrwx 1 mipsel mipsel 11624 2005-11-29 18:58 mipsel-uclibc-gcc
-rwxrwxrwx 1 mipsel users 272 2005-11-29 18:58 mipsel-uclibc-ld
… Offenbar ein Compiler, der gegen die uClibc linkt? War das Problem “einfach” das (dynamische) Linken des Binaries gegen die glibc, welche auf der Box nicht existiert? Ich kompiliere testweise mein HalloWelt damit…
# cd fritzbox/GPL/base_4mb_build/uClibc-0.9.26/debian/gcc-uClibc
# ./mipsel-uclibc-gcc -o /home/mipsel/hello /home/mipsel/hello.c
…, stelle das resultierende Binary mittels USB-Stick der Box zur Verfügung und starte gespannt das Programm:
# ./hello
Hello World!
Ah!
Optimistisch lade ich mir jetzt den Source-Tarball vom aktuellen Samba von ftp://ftp.samba.org/pub/samba/stable (zu diesem Zeitpunkt Version 3.0.20b), packe selbigen aus und bereite das Kompilieren mit folgendem Configure-Aufruf vor:
# CC=[Pfad zu mipsel-uclibc-gcc] ./configure –host=mipsel –without-ldap –disable-cups –target=mipsel –without-ads –without-krb5 –without-winbind –without-winbindd
Im Sourcecode musste ich hier jetzt noch einige “harte” Referenzen von /tmp in /var/tmp abändern, habe im Makefile den Definitionen für CFLAGS den Fritz!Box-Kernelincludes-Pfad hinzugefügt, die Pfade zum Compiler nochmals auf das mipsel-uclibc-gcc-Binary gesetzt und anschließend mittels Aufruf von make die Quelltexte kompiliert.
Von den so entstandenen Binaries habe ich danach den smbd und den nmbd mittels USB-Stick “zur Box gebracht” und dort mit verschiedensten Kommandozeilenoptionen und Konfigurationsdateieinträgen versucht zu starten. Allerdings wollte der smbd NUR im Debug-Modus starten und die Performance war dann “eher schlecht”, und der Dienst ist nach einiger Zeit einfach gecrasht. Der Versuch, den Dienst regulär (nicht im Debug-Mode) zu starten, wurde jedesmal einfach mit SIGABRT quittiert…
Also noch ein Versuch mit Samba 2.2.12
# CC=[Pfad zu mipsel-uclibc-gcc] ./configure –host=mipsel –without-ldap –disable-cups –target=mipsel
Die Configure-Zeile fällt hier deutlich kürzer aus, da Samba 2.2 weniger Features aufweist und dadurch wesentlich schlanker ist. Vor make habe ich wie bei Samba 3 wieder alle harten /tmp-Referenzen ersetzt und das Makefile editiert. Da Samba 2.2 wohl noch nicht 100% kompatibel mit GCC 3.3 ist, musste ich in einem Include-File eine Typendeklaration anpassen, um das Paket sauber kompilieren zu können.
Die vorher erstellte smb.conf wird noch an Samba 2.2 angepasst (einige Variablen sind hier unterschiedlich), und siehe da – “et lüppt” !
Meine 3070 ist jetzt in der Netzwerkumgebung sichtbar, und ich kann auf die Shares (USB-Stick und Fritz!Box-Rootdateisystem) zugreifen und Dateien kopieren! Die Performance ist, was das Durchbrowsen der Shares angeht, akzeptabel bis gut, lediglich das Kopieren grösserer Dateien vom USB-Stick über das Fritz!Box-USB-Interface ist langsam (wohl dadurch begründet, daß die USB-Schnittstelle nur USB1.1 ist und intern schlecht an die Box angebunden ist).
Um das Starten während meiner Tests zu vereinfachen, habe ich zu den Samba-Binaries folgendes Shellscript run-samba.sh kopiert und ausführbar gemacht:
#!/bin/sh
./nmbd –configfile smb.conf &
./smbd –configfile smb.conf &
Der Inhalt meiner smb.conf sieht so aus:
[global]
workgroup = ARBEITSGRUPPE
server string = Fritz!Box WLAN 3070
guest account = root
log file = /var/tmp/samba.log
max log size = 50
security = share
# in interfaces muss hier die ip-adresse samt maske des lokalen netzes stehen, ansonsten meckert nmbd!
interfaces = 192.168.178.1/24 lan tiwlan0
lock directory = /var/lock
pid directory = /var/lock
smb passwd file = /var/tmp/#=== Share Definitions ===
[media]
comment = USB Storage
browseable = yes
writable = yes
only guest = yes
public = yes
path = /var/media/ftp[rootfs$]
comment = USB Storage
browseable = yes
writable = yes
only guest = yes
public = yes
path = /