Gentoo Logo

Baselayout und OpenRC Migrationsleitfaden

Inhalt:

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

# Automatisch geladene Module beim Booten
modules_2_6="ivtv cx88_dvb"
# Modulparameter
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

# Lade immer ochi1394 und ieee1394, egal welche Kernelversion
modules="ohci1394 ieee1394"
# Lade tun und usbserial nur für 2.6.x Kernel
modules_2_6="tun usbserial"
# Lade cx88_dvb nur für 2.6.23 kernels
modules_2_6_23="cx88_dvb"
# Lade ivtv nur für 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"

# Für 2.6.23-gentoo-r5, übergebe video_br=2 an cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# Für 2.6.x Kernel, übergebe immer vendor und product
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Übergebe debug immer an ieee1394
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.



Drucken

Seite aktualisiert 29. November 2009

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieser Leitfaden zeigt Ihnen, wie Sie von baselayout-1 zu baselayout-2 und OpenRC migrieren.

Doug Goldstein
Autor

Joshua Saddler
Autor

Roy Marples
Mitarbeiter

Tobias Heinlein
Übersetzer

Michael Münch
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.