Mit USB-Root lässt sich das Root-Verzeichnis (/
) auf ein an die
Fritz!Box angeschlossenes USB-Gerät auslagern - was zusätzlichen Platz
nicht nur für weitere Software schafft.
Ein Beispiel aus der Praxis:
Annex A Box in Frankreich mit DAU als Besitzer ;-) Bei einem nicht funktionierenden System im Flash würde da gar nichts mehr gehen. Strom aus, USB-Stick ab und Strom wieder an, bekommt er aber hin um damit das Notfallsystem im Flash nutzen zu können.
USB-Root muss einfach bei Erstellung des Images mit make menuconfig
(siehe [Freetz Installation?]) mit ausgewählt werden. Um
später eine Shell auf der Fritz!Box zu haben und scp nutzen zu können,
sollte auch dropbear mit ins Image. Zuerst wird dann ein Image mit
USB-Root erzeugt, das in den Flashspeicher der Fritz!Box passt und dann
auch wie jedes Image auf die Fritz!Box geflasht wird.
Dann kann man sich sein System für den USB-Root zusammen stellen und braucht nicht mehr auf den Platz zu achten. Das USB-Root Paket muss jedoch ausgewählt bleiben! Die Fehlermeldung am Ende, dass das Image zu groß ist, stört hier nicht weiter. Wir benötigen ja nur das erstellte Systeme, das wir in [Freetz-Ordner]/build/modified/filesystem finden.
Es kann eine beliebige Freetz-Version für den USB-Stick verwendet werden. Es muss nicht die gleiche Version verwendet werden, wie sie im Flashspeicher der Fritz!Box abgelegt ist. Es muss ausschließlich der Kernel im Flashspeicher zum Kernel des USB-Sticks passen.
Als Dateisystem ist eine Partition mit ext2 oder ext3 zu verwenden. Das passende Kernel-Modul muss bei der Imageerstellung ausgewählt werden!
# 1. Dateisystem packen, dabei Besitzer auf root:root ändern
tar --group=0 --owner=0 -czf rootfs.tar.gz -C build/modified/filesystem .
# 2. USB-Root im Freetz-Web deaktivieren, falls bereits aktiv
# 3. Box mit Firmware aus dem Flash neu starten
# 4. Archiv direkt auf an der Box angeschlossenes USB-Medium kopieren (Zielpfad anpassen!)
# Variante A: vom PC aus die Datei auf die Box schieben (benötigt SSH-Server auf der Box)
scp rootfs.tar.gz root@fritz.box:/var/media/ftp/uStor01/rootfs
# Variante B: von der Box aus die Datei vom PC holen (benötigt SSH-Server auf dem PC)
scp user@my_pc:/home/user/freetz-trunk/rootfs.tar.gz /var/media/ftp/uStor01/rootfs
# 5. Archiv auf der Box entpacken
cd /var/media/ftp/uStor01/rootfs
tar -xzf rootfs.tar.gz
# 6. Falls USB-Root noch nicht genutzt wurde muss es erst im Freetz-Web konfiguriert werden (Partition auswählen und Verzeichnis eintragen (z.B. /rootfs)
# 7. USB-Root in Freetz-Web aktivieren, Box vom USB-Root neu starten
Neu in der Entwicklerversion seit Changeset r8566: Man kann direkt in Menuconfig einstellen, daß beim Build zusätzlich zum oder anstelle des Firmware-Images das Dateisystem direkt in ein Archiv gepackt wird (“USB Root Mode”, ersetzt Schritt 1 oben). Alternativ ist es über den “NFS Root Mode” auch möglich, das Dateisystem direkt (fix und fertig entpackt, Schritte 1, 3, 4) auf den USB-Stick zu kopieren, sofern dieser am PC angeschlossen oder über NFS erreichbar ist. Erstere Variante ist vermutlich die häufigere und sieht so aus:
### Freetz Configuration
[*] Show advanced options
--> Advanced options
--> Build system options
--> Firmware packaging (fwmod) special options
[*] Skip packing modified firmware
[*] Pack file system into archive (USB root mode)
Das Einbinden von weiteren Partitionen funktionierte in frühen Freetz-Versionen nicht, somit mussten diese Partitionen manuell eingebunden werden. In aktuellen Freetz-Versionen funktioniert dies nun, so dass die AVM-Features, welche auf USB-Partitionen speichern, verwendet werden können.
Allerdings gibt es beim Mounten der Partitionen eine Fehlermeldung für die verwendete Root-Partition: da diese bereits gemountet ist, schlägt ein weiterer Mount-Versuch (der “normale” von AVM) natürlich fehl. Dies kann mit ruhigem Gewissen ignoriert werden.
Das Freetz usbroot Paket verändert die Environment-Variable kernel_args und startet dort einen alternativen init Prozess (init=/etc/init.d/rc.usbroot). Die Variable kernel_args1 wird auch gesetzt. Beim Upgrade / Recover der Firmware kann dies zu Problemen führen, daher MUSS vor dem Firmware-Update bzw Recover die usbroot-Funktion wieder deaktiviert werden’’’, wahlweise über das Freetz Webinterface oder aus der Shell mit:
echo kernel_args > /proc/sys/urlader/environment
echo kernel_args1 > /proc/sys/urlader/environment
Bemerkt man dies zu spät (Die Box startet als Beispiel gleich nach 5 Sekunden neu) helfen die ADAM2 Befehle:
quote SETENV kernel_args
quote SETENV kernel_args1
Sollte es nach den beiden Befehlen immernoch nicht helfen, so führt man ein Recover aus und flasht danach ein Freetz ohne jediglichen Umfang (ohne Packages sowie ohne usbroot) über das AVM-WebInterface auf die Box und setzt die beiden Variablen (mittels Telnet) wieder auf ihren normalwert, danach kann man wieder problemlos seine gewünschte modifizierte Firmware auf die Box bringen!