Seltene Updates

Diese Seite wird nicht besonders regelmäßig aktualisiert. Wen das nicht stört, der kann alle paar Monate mal vorbei schauen, ob es etwas neues gibt. Meistens wird das irgendwelches Wissen sein, das ich für so nützlich halte, dass ich es veröffentliche.

Wie auch immer Sie hier her gefunden haben, vielen Dank für Ihren Besuch.

In der gleichen Rubrik

21. Mai
QIC and Dirty

25. Juli
NTFS wo ganz anders

13. Mai
Unbunt

Downloads

chroot_prepare.sh
(texte, 1.9 kB)

merge_squashfs.sh
(texte, 991 Byte)

Fritz sieht Sternchen

Nach nunmehr gut 16 Jahren beginnt die heimische Telefonanlage, das Zeitliche zu segnen. Als Ersatz hagelt es eine Fritz!Box 7270, wobei ich hier ausnutzen möchte einen Asterisk haben zu können. "How hard can it be?"™

Also, was braucht man alles für einen Asterisk... Es gibt zwei Möglichkeiten:

1. Download in die Ramdisk bei jedem Booten 2. Installation auf einem USB-Stick.

Ich entscheide mich für Variante 2, alleine um die Ressourcen der FritzBox zu schonen. Also schnell im Elektronikmarkt meiner Wahl einen passenden und völlig überdimensionierten, aber preiswerten 2GB USB-Stick organisiert.

Schritt 1: USB-Stick Vorbereiten

Erstmal Telnet auf der Fritzbox aktiviert, und nachgesehen, was denn die Unterstützung für Dateisysteme sagt. Man will ja schließlich ein unixoides Dateisystem benutzen, etwa ext2, um es dem Asterisk so gemütlich wie möglich zu machen. Gerade dieses wird aber von der Aktuellen Fritz-Firmware nicht mehr unterstützt, da das passende Kernelmodul aus Platzgründen entfallen musste.

Erste hürde also: Wie bootstrappe ich einen ext2-Treiber? Der muss auf ein der Box genehmes Dateisystem... jffs2 fällt flach – nur für MTD-Geräte. FAT wäre möglich – möchte ich aber nicht, da man auf FAT per FTP zugreifen kann, zu hohes Risiko für ungewollte Verändrungen. Also SquashFS.

Die Treiber gibt es in einem Post zu ext2 auf der Fritzbox im IP-Phone-Forum, man kann sich sicher auch die passenden Kernelsourcen ziehen und selbst crosscompilen, das war mir dann aber doch zu viel des Guten.

Also flugs den Stick Partitioniert: 500 MB FAT32 (man weiß ja nie...) 12 MB Linux (hier kommt das SquashFS rein) rest Linux (und hier das ext2)

mkfs.vfat -F 32 /dev/USBSTICK1
mksquashfs verzeichnis_mit_modulen/ /dev/USBSTICK2 \
      -noappend -force-uid 0 -force-gid 0
mkfs.ext2 /dev/USBSTICK3

voilà.

Schritt 2: Asterisk-Chroot Bauen

Die gemeinhin anerkannte Methode findet sich in dieser installationsanleitung für Asterisk. Hier werden beide oben genannte Methoden unterstützt, allerdings greifen die skripte für meinen Geschmack noch etwas tief in die Eingeweide der Fritzbox. (Etwa Konfiguation im Flash der Fritzbox. Wozu, wenn man einen USB-Stick benutzt?)

Also roll your own. Ich hätte gerne ein filesystem auf dem Stick, in das ich nach der Fertigstellung und dem Einbinden des ganzen in die Fritzbox chrooten kann und dort meinen Asterisk, und was auch immer ich sonst noch so machen möchte, abfackeln kann.

Die Originalpakete laden ein SquashFS-Image aus dem Web, und mounten das dann mit einem loop-device. Man will also diese SquashFS’e entpacken und säubern. Dafür hab ich ein kleines Skript geschrieben, das ich an diesen Artikel anhänge. Es bastelt eine fertige Ordnerstruktur für das chroot.

Für die aktuelle 7270-Firmware gibt es einen speziellen Asterisk-Build (andere UClibc), zu finden hier, daher unterstützt das Skript auch die Angabe eines alternativen Downloadservers. Wie immer, der Code ist die Doku. ;)

Schritt 3: Münchhausen

Dann ziehen wir uns mal an den eigenen Haaren aus dem Dreck. Der Dreh- und Angelpunkt für einen FritzBox-Modifizierer ist die Datei (eigentlich, das Character-Device – danke, AVM)

/var/flash/debug.cfg

In diese Datei im Flash (also beständig über Reboots hinweg) schreibt man ein Shellskript, das dann bei jedem booten ausgeführt wird. Aber nein, man kann nicht einfach einen

nvi
darauf los lassen, erst muss irgendwas in der Datei stehen. Also erst noch ein:
echo bla >/var/flash/debug.cfg

In meiner Lösung mounte ich in diesem Systemskript nur die usb-squashfs Partition, und rufe ein skript im squashfs auf, das den Rest des Bootstraps übernimmt, also den ext2-Treiber lädt und das ext2-Filesystem mountet. Dieses Skript übergibt dann wieder an ein weiteres, das die Chroot-Umgebung fertig aufbaut und die Dienste startet. Also in etwa

mount -o bind /dev /var/media/exp/dev
mount -o bind /proc /var/media/exp/proc
mount -o bind /lib /var/media/exp/lib
mount -o bind /var /var/media/exp/var_fbox
So kann ich bis auf die erste Stage alles austauschen, wenn ich nur den Stick habe. In aller Regel sollte ich so nur im ext2-Bereich arbeiten müssen.

Das externe /var/ wird nur gebunden, da dort in der Fritzbox so Dinge wie /etc/passwd und co gelagert werden, die im chroot benötigt werden.