Wiki:help/howtos/development/developer_information/package_development_dynamic

Paketverwaltung für Freetz

Der folgende Beitrag beschreibt die Grundlagen, die notwendig sind, um mit Freetz Pakete nach dem Flashvorgang installieren zu können. Grundlage dafür sind ein transluzentes Dateisystem (mini_fo) und ein Paketverwaltungssystem (ipkg, opkg). Diese Erweiterung bietet gegenüber dem mitkompilieren der Pakete beim Image-Build folgende Vorteile:

  • Für jedes FritzBox-Modell existiert pro AVM Image-Version ein Basis-Image, das nur geringfügige Änderungen gegenüber dem originalen AVM-Image enthält (Stabilität)
  • Weitere Pakete können zur Laufzeit hinzugefügt werden. Alle dazugehörigen Modifikationen am Dateisystem werden dabei extern gespeichert (z.B. auf einem USB-Stick)
  • Treten Probleme im Betrieb auf, kann durch das Entfernen des USB-Sticks und anschließendem Reboot das Basis-Image verwendet werden.
  • Die benötigten Erweiterungen bzw. Pakete müssen beim Erstellen des Images nicht kompiliert werden. Sie können nach dem Flashen des Images von einem Paket-Repository im Internet geladen werden
  • Im Idealfall wird bei einem Firmware-Update (z.B. bei einer neuen Version des AVM-Images) nur das Basis-Image aktualisiert. Die bereits installierten Erweiterungen können, falls die Abhängigkeiten zum Basisystem nicht zu groß sind, mit dem neuen Image weiterverwendet werden
  • das Verzeichnis /etc kann wie unter Linux üblich als Konfigurationsverzeichnis verwendet werden.

Erweiterung des Dateisystems

Transluzente Dateisystems

Transluzente Dateisysteme (TFS) ermöglichen den schreibenden Zugriff auf Read-Only-Dateisysteme (ROFS). Dazu wird das TFS über das ROFS gelegt. Lesezugriffe auf bereits existierende Dateien werden an das ROFS weitergeleitet, Modifikationen werden abgefangen und in einen zusätzlichen Speicher geschrieben. Alle Lese- und Schreibzugriffe auf das Dateisystem sind für den Benutzer bzw. die Anwendungen transparent.

Anbindung externer Medien

Als Speicherort für die Änderungen am Dateisystem kann je nach FritzBox-Modell entweder ein über USB angeschlossenes Medium (USB-Stick, Festplatte) oder der interne Speicher der FritzBox verwendet werden. Um das Rechtesystem von Linux auf dem beschreibbaren Dateisystem abbilden zu können, muss ein Dateisystem wie ext2 oder ext3 verwendet werden (SquashFS scheidet aus, da es ein Read-Only-Dateisystem ist). Aufgrund der niedrigen Speicherpreise sollte es kein Problem mehr sein, den ganzen USB-Stick für das TFS zu verwenden. Man könnte alternativ auch eine Image-Datei auf einem mit FAT formatierten USB-Stick anlegen, die wiederum mit ext2/3 formatiert wird. Um diese Datei einzubinden, müsste jedoch zunächst der USB-Stick ins Dateisystem eingebunden werden um anschließend auf die Image-Datei zugreifen zu können. Dieser Vorgang würde die automatische Einbindung des TFS komplizierter machen und wird zunächst vernachlässigt.

Integration in den Bootvorgang

Das externe Dateisystem sollte baldmöglichst nach dem Start des Kernels eingehängt werden, damit auch Änderungen bzw. Erweiterungen an den Init-Skripten, die durch installierte Pakete erzeugt werden, beim Startvorgang berücksichtigt werden. (Inittab????). Das Integrationsskript prüft zunächst, ob ein USB-Stick mit einem der unterstützten Dateisysteme angeschlossen ist und bindet ihn ein, falls verfügbar. Ist kein USB-Stick vorhanden, wird das Basissystem ohne TFS gestartet. (Man sollte vielleicht noch überprüfen, ob bestimmte "Markierungen" im Dateisystem des USB-Sticks vorhanden sind, um sichzerzustellen, dass der richtige USB-Stick verwendet wird).

Paketverwaltung

Unterstützung mehrerer Architekturen

Erstellung von Paketen

Bereitstellung der Pakete

Installation von Paketen

Ein Beispiel zur Verwendung von mini_fo mit Freetz

Diskussionsthread über Opkg und mini_fo im IP Phone Forum

Ein weiterer Diskussionsthread über Opkg und mini_fo im IP Phone Forum

Homepage von mini_fo

Homepage von Opkg

Debian New Maintainers' Guide

Kommentare

Comment by oliver on Mi 26 Jan 2011 11:44:01 CET

Zu dem Punkt Integration in den Bootvorgang: Das frühe Mounten eines USB-Sticks ist nicht so einfach, da der Vorgang boxspezifisch ist. Das mounten von mini_fo dagegen funktioniert für alle Boxen gleich. Daher würde es die Sache sehr erleichtern, wenn wir erstmal mit mini_fo und jffs2 auskämen. Praktikabel ist das natürlich nur für die 16 MB Flash Boxen. Ich nehme an, dass man mit unionfs den USB-Stick später auch noch irgendwie einbinden könnte? Es müsste dann bei der Installation der dynamischen Pakete irgendwo vermerkt werden, ob sie im ersten (jffs2) oder zweiten (usb) Schritt gestartet werden sollen.

Das ganze hätte natürlich den Nachteil, dass man keine Änderungen oder Erweiterungen an den Init-Skripten machen kann. Da die Pakete erst nach Abschluss des Bootvorgangs verfügbar wären. Andererseits haben wir mit external ja schon ein Grundgerüst, wie das dynamisch (Stick rein/raus) funktioniert.

Comment by hippie2000 on Di 01 Mär 2011 23:51:14 CET

Siehe auch

/ticket/1173

AddComment?