Ich habe anstatt "booten von FP" den klassischen Unix-Ansatz mit sekundärem Filesystem verfolgt. Dabei wird eine Plattenpartition gemounted, komform zu dem File System Hierarchy standard (am mindestens fast). Dies hat subdirectories bin, lib, share, usw, genau so wie root /. Mit Anpassungen am Pfade bekommt man ein system das wie gewohnt von Flash bootet, binaries etc wird nicht nur von /bin gefunden, sondern auch in /usr/bin.
Praktische Vorteile sind u.a.
- /usr inhalt bleibt: darauf installierte extrakomponente ein Flashen überleben
- Inkrementelles updaten möglich
- r/w-Zugriff, bzw kein Ärger um Flashverschleiss
- Kein Ärger mit reduzierte Libraries mehr: Die ungestrippte sind vorhanden
1. Neupartitionierung der Platte: Part1: swap, ID: 82 (wie üblich), Part2 data, ID: 83, ext2 (wie üblich), Part3 (neu), ID 83, 100 Zylinder = 8.2 GiB, ext2.
2. Anpassung der /etc/fstab: Ziele
Code: Alles auswählen
/dev/ide/host0/bus0/target0/lun0/part3 /usr ext2 defaults 1 2
3. Anpassung von /etc/exports: Zufügen von
Code: Alles auswählen
/usr *(rw,sync,no_subtree_check)
4. Bauen eines aktuelles YADDs auf dem Buildrechener. Kopieren des .../cdkroot auf dbox:/usr über nfs (z.B.).
5. In /etc/profile wird PATH in
Code: Alles auswählen
PATH=/usr/sbin:/usr/bin:/sbin:/bin
Code: Alles auswählen
LD_LIBRARY_PATH=/usr/lib:/lib
6. Es wäre vorteilhaft, die "fette" share Verzeichnis zu benutzen, leider gibt es z.Z. keine Möglichkeit z.B. neutrino mitzuteilen wo share sich befindet: Abhilfe: mounte (/etc/fstab)
Code: Alles auswählen
/usr/share /share none bind
Code: Alles auswählen
/usr/var /var none bind
8. Um lcdmenu von /usr/bin/lcdmenu zu benutzen (um zwischen mehrere GUIs beim Start zu wählen) wird eine kleine Änderung in /etc/init.d/start erforderlich, wird "dem Leser als Übung" überlassen. Dazu Änderungen in /var/tuxbox/conf/lcdmenu.conf (/bin/neutrino in neutrino ersetzen etc), sowie ein gefixte lcdmenu, dass GUIs ohne Direktory in Pfad sucht (schon eingecheckt).
Dann soll es eigentlich funktionieren.
Bemerkungen:
1 . Dies ist eine Art Machbarkeitsstudie, beweist dass es geht, ohne eine Produktivlösung darzustellen. Ich bitte um Verbesserungen. Insbesonderes: Das LD_LIBRARY_PATH ist (aus gutem Grunden) verpöhnt; ich weiss z.Z.nicht wo sich die jetztige Software beschliesst (in unterschied zu "alle Andere" Unixe/Linuxe) /usr/lib zu ignorieren. Kann man es besser machen (seife?)
2. Ich habe versucht, das usr-lose System als Fallback unverändert zu halten. Ins besonderes wird /usr Zeugs nicht von rcS aufgerufen.
3. Weil Machbarkeitsstudie sind alle Sicherheitsaspekte ignoriert worden.
Nächste Frage ist natürlich: Lässt es sich automatisieren bzw im Makeprozess integrieren? Antwort: Z.Z. relativ schlecht. Das bauen von .../cdkroot/lib ist ein Mist, findet teilweise während builden von compiler/libc/binutils statt. Ein configure-Option --enable-usr=<pfadname> (pfadname wäre dann wo die usr-ergebnisse abgelegt wird, idealerweise ein NFS-Mountpunkt, sonst irgendwelche Verzeichniss, dass später rüberkopiert wird) wäre durchaus denkbar und ziemlich leicht, wurde aber z.Z. nur triviale Sachen ausrichten, wie z.B. mountpoints anlegen und fstab erweitern. Denkbar wäre aber maketargets wie z.B.
Code: Alles auswählen
usr-neutrino: $(appsdir)/tuxbox/neutrino/config.status
$(MAKE) -C $(appsdir)/tuxbox/neutrino all install prefix=@usr_path@
$(MAKE) neutrino-additional-fonts targetprefix=@usr_path@
Jetzt seit ihr dran!