Aus LinuxUser 12/2010

SysV-Init und die Runlevel (Seite 2)

si::bootwait:/etc/init.d/boot

Da die Aktion auf die Angabe eines Runlevels verzichten kann, bleibt die zweite Spalte hier leer. Das Skript /etc/init.d/boot initialisiert unter OpenSuse unter anderem den Fortschrittsbalken des Bootbildschirms und hängt das /proc-Dateisystem ein. Andere Distributionen nutzen dazu ein anderes Skript; unter Debian sieht die korrespondierende Zeile etwa wie folgt aus:

si::sysinit:/etc/init.d/rcS

Die Aktion sysinit funktioniert wie bootwait, Init führt sie aber noch vor bootwait aus (was Debian aber gar nicht mehr ausnutzt).

Aktionen

boot Init führt das Kommando während des Hochfahren aus, ohne die Runlevel-Spalte zu beachten.
bootwait Wie boot, jedoch wartet Init auf das Ende des Kommando-Prozesses.
ctrlaltdel Sagt Init, welcher Befehl auf die Tastenkombination [Strg]+[Alt]+[Entf] antworten soll.
initdefault Der Runlevel, in dem das System nach dem Hochfahren startet. Die Kommando-Spalte bleibt unbeachtet.
once Der Befehl wird nur einmal beim Wechsel des Runlevels gestartet.
powerfail Init führt das Kommando beim Ausbleiben der Stromzufuhr aus.
powerokwait Init führt das Kommando beim Ausbleiben der Stromzufuhr aus und wartet auf das Ende des Prozesses.
powerwait Wie powerfail, jedoch wartet Init auf das Ende des Prozesses.
sysinit Init führt das Kommando während des Bootens vor den Anweisungen aus boot und bootwait aus.
respawn Init startet das Kommando erneut, falls der entsprechende Prozess terminiert.
wait Init wartet auf die Abarbeitung des Kommandos.

Wiederbelebung

Im unteren Bereich der inittab aus Listing 1 geht es noch einmal etwas kryptisch zu. Dort legt zunächst die Zeile 18 mit

ca::ctrlaltdel:/sbin/shutdown -r -t 4 now

fest, dass Init bei einem Druck auf die Tastenkombination [Strg]+[Alt]+[Entf] das Skript shutdown aufruft und den Computer somit neu startet (Parameter -r). Das soll in jedem Runlevel funktionieren, weshalb in der zweiten Spalte eine spezifische Angabe fehlt. Die Tastenkombination funktioniert übrigens nur in einer reinen Textkonsole, die grafische Oberfläche in Form des X-Servers fängt sie standardmäßig ab. Alle folgenden Aktionen ab Zeile 21 mit power... im Namen weisen Init an, bei einem Stromausfall schnell eine externe Stromversorgung (UPS) ein- beziehungsweise später wieder auszuschalten.

Die Aktion respawn führt wie wait die Anwendung in der vierten Spalte aus. Sollte sich der zugehörige Prozess allerdings irgendwann beenden, startet ihn Init automatisch neu. Die Zeilen 27 bis 32 in Listing 1 sorgen beispielsweise so dafür, dass in den Runleveln 2 bis 5 grundsätzlich sechs Textkonsolen zur Verfügung stehen (die Sie über [Alt]+[1] bis [Alt]+[6] erreichen.

Bei den Ziffern in der ersten Spalte handelt es sich ausnahmsweise nicht um Namenskürzel, sondern um die Nummer des Geräts (die Zahl hinter tty). Wie die sechs Zeilen zudem zeigen, darf die zweite Spalte durchaus mehrere Runlevel hintereinander aufführen. Der Parameter --noclear schließlich sorgt dafür, dass diese erste Konsole nicht alle Meldungen des Bootprozesses sofort löscht.

Subunternehmer

Sobald Init durch den Kernel geweckt wurde, liest es also die Datei /etc/inittab ein, führt dann unter OpenSuse 11.3 gemäß Zeile 5 in Listing 1 zunächst das Skript /etc/init.d/boot aus und wechselt schließlich in den Runlevel 5, indem es das Skript /etc/init.d/rc startet. Dieses wiederum aktiviert die eigentlichen Dienste – welche, das hängt vom Runlevel ab. Dessen Nummer übergibt Init deshalb als Parameter an das Skript, wie ein schneller Blick auf Listing 1 verrät. Unter OpenSuse 11.3 ist es standardmäßig die 5).

l0:5:wait:/etc/init.d/rc 5

Doch auch rc macht sich seine Arbeit leicht: Zunächst wechselt es abhängig vom Runlevel in eines der Unterverzeichnisse rc0.d bis rc6.d. Im Beispiel unter OpenSuse würde es das Verzeichnis rc5.d betreten. Dort ruft es einfach alle vorhandenen Skripte auf, die mit dem Buchstaben S (für „Start“) beginnen. Die Startreihenfolge bestimmt dabei die Nummer, die nach dem S folgt: S07alsasound startet beispielsweise das Audiosystem Alsa, S09cups zwei Skripte später das Drucksystem Cups. Analog zu diesen so genannten Startskripten liegen hier noch passende Stoppskripte, deren Namen mit K (für „Kill“) beginnen. Sie beenden die Dienste bei einem Wechsel des Runlevel.

Zeigefinger

Dank dieser Arbeitsteilung muss man einfach nur ein Startskript für einen Dienst schreiben und es im Verzeichnis rc5.d platzieren, um den Dienst beim nächsten Systemstart automatisch anzuwerfen (siehe auch Kasten „Eigenes Startskript“). Dieser Komfort hat aber auch einen Nachteil: Möchte man den Dienst in verschiedenen Runleveln anbieten, gilt es das Skript in alle entsprechende Unterverzeichnisse zu kopieren, hinzu kommen noch die Stoppskripte. Es kommt noch dicker: Bei Änderungen muss man alle Kopien anpassen.

Diese umständliche und fehleranfällige Prozedur vermeiden die Distributionen, indem Sie für jeden Dienst nur ein einziges Skript im Verzeichnis /etc/init.d ablegen. Für das Drucksystem zeichnet beispielsweise cups verantwortlich. Auf diese zentralen Skripte zeigen dann wiederum in den Unterverzeichnissen rc0.d bis rc6.d entsprechende symbolische Verweise.

Unter dem Strich startet also der Linux-Kernel das Programm Init, das wiederum das Skript /etc/init.d/rc 5 aufruft, welches gemäß seines Parameters in das Verzeichnis rc5.d wechselt und dort allen mit S beginnenden symbolischen Verweisen folgt. Dabei stößt es auch auf den symbolischen Verweis namens S09cups, über den es wiederum zum Skript /etc/init.d/cups gelangt, das nun endlich den CUPS-Daemon startet.

Das funktioniert zwar recht gut, ist aber zumindest für Einsteiger etwas verwirrend. Zu allem Überfluss weichen die Verzeichnisnamen von Distribution zu Distribution auch noch ab: So liegen alle symbolischen Links für den Runlevel 5 unter Debian im Verzeichnis /etc/rc5.d, bei OpenSuse 11.3 dagegen in /etc/init.d/rc5.d.

LinuxUser 12/2010 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: