Baselayout und OpenRC Migrationsleitfaden
1.
Hintergrund
Was ist baselayout?
Baselayout stellt grundlegende Dateien bereit, die für die richtige Funktion
aller Systeme benötigt werden, z.B. /etc/hosts. Außerdem stellt
es das grundlegende Dateisystem-Layout, das von Gentoo genutzt wird, bereit
(d.h. /etc, /var, /usr,
/home Verzeichnisse).
Was ist OpenRC?
OpenRC ist ein abhängigkeitsbasierendes RC-System, welches unabhängig vom
System bereitgestellten init, normalerweise /sbin/init,
funktioniert. Jedoch ist es kein Ersatz für /sbin/init. Das
standardmäßig von Gentoo Linux genutzte init ist sys-apps/sysvinit,
während Gentoo/FreeBSD das FreeBSD-init benutzt, das von
sys-freebsd/freebsd-sbin bereit gestellt wird.
Warum also migrieren?
Ursprünglich war Gentoos RC-System in baselayout 1 eingebaut und komplett in
Bash geschrieben. Dies führte zu einigen Einschränkungen. Zum Beispiel muss
während des Bootens auf bestimmte Systemcalls zugegriffen werden, was das
Hinzufügen von C-basierten Aufrufen erforderte. Diese waren statisch gelinkt,
wodurch das RC-System mit der Zeit mehr und mehr aufblähte.
Als Gentoo auf weitere Plattformen wie Gentoo/FreeBSD und Gentoo Embedded
expandierte, wurde es weiterhin unmöglich ein bash-basiertes RC-System
voraus zu setzen. Dies führte zur Entwicklung von baselayout 2, welches in C
geschrieben ist und nur eine POSIX-konforme Shell benötigt. Während der
Entwicklung von baselayout 2 wurde festgelegt, dass es besser wäre, wenn
baselayout lediglich die grundlegenden Dateien und das Dateisystem-Layout für
Gentoo bereitstellte und das RC-System in sein eigenes Paket gepackt würde.
Deshalb haben wir OpenRC.
OpenRC wird primär von Roy
Marples entwickelt und unterstützt alle aktuellen Gentoo-Variationen (d.h.
Gentoo Linux, Gentoo/FreeBSD, Gentoo Embedded und Gentoo Vserver) und andere
Plattformen wie FreeBSD und NetBSD.
2.
Migration zu OpenRC
Die Migration zu OpenRC ist ziemlich geradlinig; es wird als Teil Ihres
regulären Upgrade-Prozesses durch Ihren Paket-Manager einbezogen. Der wichtigste
Schritt kommt eigentlich erst nachdem Sie die neuen Pakete
>=sys-apps/baselayout-2 und sys-apps/openrc installieren. Es ist
entscheidend, dass Sie vor dem Reboot dispatch-conf ausführen und
sicherstellen, dass Ihr /etc aktuell ist. Falls Sie dies
nicht tun, erhalten Sie ein nicht bootbares System und müssen die Gentoo
LiveCD benutzen, um die unten stehenden Schritte zur Reparatur Ihres Systems
durchzuführen.
Sobald Sie damit fertig sind, Ihre Konfigurationsdateien zu aktualisieren, gibt
es einige Dinge, die Sie vor dem Reboot überprüfen sollten.
/etc/conf.d/rc
/etc/conf.d/rc wird nicht mehr benutzt und jegliche Einstellungen
darin müssen zu den zugehörigen Einstellungen in /etc/rc.conf
migriert werden. Bitte lesen Sie sich durch /etc/rc.conf und
/etc/conf.d/rc und migrieren Sie die Einstellungen. Sobald Sie
damit fertig sind, löschen Sie /etc/conf.d/rc.
Kernelmodule
Normalerweise fügen Sie bestimmte Kernelmodule mit den Parametern, die Sie an
sie übergeben wollen, zur /etc/modules.autoload.d/kernel-2.6 hinzu,
wenn Sie diese automatisch beim Booten geladen haben wollen. In baselayout-2
wird diese Datei nicht mehr verwendet. Stattdessen werden automatisch geladene
Module und Modulparameter in eine Datei, /etc/conf.d/modules,
gepackt, egal welche Kernelversion.
Ein Beispiel für eine alte Konfiguration wäre:
Befehlsauflistung 2.1: /etc/modules.autoload.d/kernel-2.6 |
ivtv
cx88_dvb video_br=2
|
Konvertieren des obigen Beispiels würde in Folgendem resultieren:
Befehlsauflistung 2.2: /etc/conf.d/modules |
modules_2_6="ivtv cx88_dvb"
module_cx88_dvb_args_2_6="video_br=2"
|
In den obigen Beispielen würden die Module und ihre Parameter nur an Kernel der
2.6.x Reihe übergeben werden. Die neue Konfiguration erlaubt eine feinere
Kontrolle über die Module und die Parameter, basierend auf der Kernelversion.
Ein eingehendes Beispiel wäre:
Befehlsauflistung 2.3: Detailliertes Beispiel von /etc/conf.d/modules |
modules="ohci1394 ieee1394"
modules_2_6="tun usbserial"
modules_2_6_23="cx88_dvb"
modules_2_6_23_gentoo_r5="ivtv"
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
module_ieee1394_args="debug"
|
Notiz:
Bitte beachten Sie den Unterschied zwischen module_ und modules_.
|
Boot-Runlevel
Das Runlevel boot führt einige wichtige Schritte für jeden Rechner aus.
Beispielsweise das Sicherstellen, dass Ihr root-Dateisystem read/write
eingebunden ist, dass Ihre Dateisysteme auf Fehler überprüft werden, dass Ihre
Mountpoints verfügbar sind und dass das Pseudo-Dateisystem /proc
beim Booten gestartet wird.
Mit OpenRC werden Volume-Management-Dienste für Ihre Speichergeräte nicht mehr
automatisch beim Booten ausgeführt. Dies schließt lvm, raid, swap, device-mapper
(dm), dm-crypt, evms, und Konsorten ein. Sie müssen sicherstellen, dass das
entsprechende Init-Skript für diese Dienste im Runlevel boot ist,
ansonsten ist es möglich, dass Ihr System nicht booten wird!
Auch wenn das OpenRC-Ebuild versuchen wird, diese Migration für Sie
durchzuführen, sollten Sie überprüfen, ob es alle Volume-Management-Dienste
richtig migriert hat:
Befehlsauflistung 2.4: Alle Dienste im Runlevel boot anzeigen |
# ls -l /etc/runlevels/boot/
|
Falls Sie root, procfs, mtab, swap und fsck in obigem Listing nicht sehen,
führen Sie folgende Befehle aus, um Sie zum Runlevel boot hinzuzufügen:
Befehlsauflistung 2.5: Hinzufügen wichtiger Dienste zum Runlevel boot |
# rc-update add root boot
# rc-update add procfs boot
# rc-update add mtab boot
# rc-update add fsck boot
# rc-update add swap boot
|
Wenn Sie wissen, dass Sie mdraid und lvm benutzen, diese aber oben nicht sehen,
führen Sie folgende Schritte aus, um die Init-Skripte zum Runlevel boot
hinzuzufügen:
Befehlsauflistung 2.6: Hinzufügen von mdraid und lvm zum Runlevel boot |
# rc-update add mdraid boot
# rc-update add lvm boot
|
Udev
OpenRC startet udev standardmäßig nicht mehr, sondern es muss im Runlevel
sysinit vorhanden sein, um zu starten. Das OpenRC-Ebuild sollte erkennen,
ob udev vorher aktiviert war und es dem Runlevel sysinit
hinzufügen. Um sicher zu gehen, sollten Sie jedoch überprüfen, ob udev
vorhanden ist:
Befehlsauflistung 2.7: Überprüfen von udev |
# ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev
|
Wenn udev nicht aufgeführt ist, fügen Sie es dem richtigen Runlevel
hinzu:
Befehlsauflistung 2.8: Hinzufügen von udev zum Runlevel sysinit |
# rc-update add udev sysinit
|
Netzwerk
Da baselayout und OpenRC in zwei unterschiedliche Pakete aufgespalten sind,
kann Ihr net.eth0 Init-Skript während des Upgrade-Prozesses verschwinden. Um
dieses Init-Skript zu ersetzen, führen Sie bitte folgendes aus:
Befehlsauflistung 2.9: Hinzufügen des fehlenden Skripts net.eth0 |
# cd /etc/init.d
# ln -s net.lo net.eth0
|
Falls Ihnen weitere Netzwerk-Init-Skripte fehlen, befolgen Sie die obigen
Anweisungen, um Sie wieder hinzuzufügen. Ersetzen Sie einfach eth0 durch
den Namen Ihres Netzwerkgerätes.
Desweiteren benutzt /etc/conf.d/net nun keine bash-style-Arrays
mehr zur Konfiguration. Bitte schauen Sie sich die
/usr/share/doc/openrc-<version>/net.example für
Konfigurationsanweisungen an. Die Konvertierung sollte relativ geradelinig sein,
beispielsweise würde sich die Zuweisung einer statischen IP wie folgt ändern:
Befehlsauflistung 2.10: Alter Style der /etc/conf.d/net |
config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" )
|
Befehlsauflistung 2.11: Neuer Style der /etc/conf.d/net |
config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100"
|
Uhr
Die Einstellungen für die Uhr finden sich nun nicht mehr in der
/etc/conf.d/clock, vielmehr wird nun das native Systemtool zur
Anpassung der Uhr benutzt. Dies bedeutet, dass unter Linux nun
/etc/conf.d/hwclock benutzt wird, unter FreeBSD
/etc/conf.d/adjkerntz. Systeme ohne einen funktionierenden
Echtzeituhr-Chip (RTC) sollten /etc/init.d/swclock verwenden,
welches die Systemzeit basierend auf der mtime einer Datei, die beim
Herunterfahren des Systems angelegt wird, setzt. Die Init-Skripte unter
/etc/init.d/ wurden ebenfalls entsprechend umbenannt, stellen Sie
also sicher, dass das entsprechende Skript für Ihr System zum Runlevel boot
hinzugefügt wurde.
Außerdem findet sich die Variable TIMEZONE nicht mehr in dieser Datei.
Sein Inhalt findet sich stattdessen in der Datei /etc/timezone.
Falls sie nicht existiert, müssen Sie sie mit Ihrer Zeitzone anlegen. Bitte
überprüfen Sie beide dieser Dateien, um ihre Richtigkeit sicherzustellen.
Der richtige Wert für diese Datei ist der Pfad relativ zu Ihrer Zeitzone aus
/usr/share/zoneinfo. Beispielsweise wäre die richtige Einstellung
für jemanden, der an der Ostküste der Vereinigten Staaten wohnt, folgende:
Befehlsauflistung 2.12: /etc/timezone |
America/New_York
|
XSESSION
Die Variable XSESSION befindet sich nicht mehr länger in der Datei
/etc/rc.conf. Stattdessen können Sie die Variable XSESSION
pro-Benutzer in ~/.bashrc (oder gleichwertig), oder systemweit in
/etc/env.d/ setzen.
Hier ist ein Beispiel zum Setzen von XSESSION für das gesamte System:
Befehlsauflistung 2.13: Setzen von XSESSION systemweit |
# echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession
|
Wichtig:
Sie müssen env-update nach dem Erstellen einer Datei in
/etc/env.d ausführen und sich dann aus- und einloggen, damit es
wirksam wird. Wenn Sie die Variable in ~/.bashrc setzen, können Sie
die Datei mit source ~/.bashrc neu einlesen.
|
EDITOR und PAGER
Die Variable EDITOR befindet sich nicht mehr länger in der Datei
/etc/rc.conf. Sowohl EDITOR als auch PAGER werden nun
standardmäßig in /etc/profile gesetzt. Sie sollten dies bei Bedarf
in Ihrer Datei ~/.bashrc (oder gleichwertig) ändern oder
/etc/env.d/99editor erstellen und die systemweite
Standardeinstellung dort setzen.
Wichtig:
Sie müssen env-update nach dem Erstellen einer Datei in
/etc/env.d ausführen und sich dann aus- und einloggen, damit es
wirksam wird. Falls Sie die Variable in ~/.bashrc setzen, können
Sie die Datei mit source ~/.bashrc neu einlesen.
|
Boot log
Bisher konnten Sie den Bootvorgang mit Hilfe von app-admin/showconsole
loggen. Nun handhabt OpenRC das Loggen jedoch intern, weshalb es keinen Grund
mehr gibt, Hacks, wie showconsole sie eingesetzt hat, zu nutzen. Sie
können showconsole sicher unmergen. Um weiterhin die Bootmeldungen zu
loggen, setzen Sie einfach die entsprechende Variable in
/etc/rc.conf. Die Logs werden in /var/log/rc.log
erscheinen.
Befehlsauflistung 2.14: Boot-Logging in der /etc/rc.conf aktivieren |
rc_logger="YES"
|
Beenden
Sobald Sie damit fertig sind, Ihre Konfigurationsdateien und Init-Skripte zu
aktualisieren, müssen Sie zuletzt noch reboot ausführen. Dies ist
erforderlich, da Systemstatusinformationen während eines Upgrades nicht
beibehalten werden, daher müssen Sie das System mit einem frischen Boot
versorgen.
Die Inhalte dieses Dokuments sind, sofern nicht explizit
anders genannt, unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert. Die Gentoo Name and Logo
Usage Guidelines treffen zu.
|