PO-10756-Pinguine-Ping-10.jpg

SysV-Init und die Runlevel

Der Nächste, bitte!

Die meisten Distributionen bürden den kompletten Systemstart einem kleinen Programm namens Init auf, das den Job wiederum ganz ungeniert an eine wilde Bande aus Skripten delegiert. Mit denen gilt es zu kämpfen, gerät der Bootprozess einmal ins Stocken.

Direkt nachdem der Linux-Kernel die Hardware unter seine Kontrolle gebracht hat, startet er das Programm /sbin/init – und lehnt sich anschließend erst einmal zurück. Init bleibt jetzt die Aufgabe, alle notwendigen Dienste und Anwendungen zu starten, die für ein voll funktionsfähiges Linux-System notwendig sind. Als erster Prozess im System erhält Init die PID 1. Es bleibt zudem die gesamte Betriebszeit über im Hauptspeicher und lässt sich auch durch Abschussversuche à la kill -9 1 nicht beenden (Abbildung 1). Auf diese Weise kann Init unter anderem lebenswichtigen Prozesse neu starten, falls sich diese einmal unerwartet verabschieden.

Abbildung 1: Wie hier Top verrät, ist Init immer aktiv und trägt die PID 1.

Hohes Niveau

Hin und wieder möchte man beim Systemstart nur einen ganz bestimmten Teil der Dienste anwerfen. Bereitet beispielsweise die grafische Oberfläche Probleme, wäre es gut, wenn Init sie unbeachtet auf der Festplatte liegen lassen und nur eine einfache Textkonsole hervorholen würde. Um das zu ermöglichen, setzen die meisten Linux-Distributionen ein Init-Programm ein, das mit dem etwas gewöhnungsbedürftigen Konzept der Runlevel arbeitet. Das hoben in den 80er Jahren die Entwickler des Betriebssystems UNIX System V aus der Taufe, weshalb man ein danach arbeitendes Init auch als System-V-Init oder kurz SysV-Init bezeichnet.

Dahinter steht die Idee, dass Init den Computer in einem ganz bestimmten Zustand hinterlässt. So sitzt man nach dem Booten einer Distribution meist vor einem KDE- oder Gnome-Desktop mit funktionierender Netzwerkanbindung. Ein anderer möglicher Systemzustand wäre eine reine Textkonsole ohne Netzwerk oder gar der ausgeschaltete Computer. Ein SysV-Init unterscheidet acht solcher Systemzustände, die man als Runlevel bezeichnet. Zu jedem Runlevel gehört ein Bündel aus Diensten und Programmen, die am Ende des Bootvorgangs aktiv sein sollen. Init teilt man die Nummer des gewünschten Runlevels mit, woraufhin das Programm dann zusammen mit zahlreichen Hilfsskripten den gewünschten Systemzustand herstellt.

TIPP

Stellen Sie sich einen Runlevel einfach als eine von acht möglichen Systemkonfigurationen vor.

Abbildung 2: who -r nennt den aktuellen Runlevel.

Das funktioniert sogar im laufenden System: Wenn Sie als Benutzer root das Kommando /sbin/init 0 eintippen, wechselt Init umgehend in den Runlevel mit der Nummer 0. Dazu beendet es zunächst den aktuellen Runlevel, indem es alle nicht benötigten Dienste stoppt. Anschließend aktiviert es den neuen Runlevel 0. Da dieser dem Systemzustand "Computer ausgeschaltet" entspricht, fährt Init dabei Linux herunter. Analog dient der Runlevel 6 dem Neustart (Reboot) des Systems. Der Runlevel mit der Nummer 1 führt zu einem Einzelbenutzer-Betrieb, der (genau wie der spezielle Runlevel S) vorwiegend für Wartungsarbeiten gedacht ist. In der Regel darf sich dort nur der Benutzer root anmelden.

Alle übrigen Runlevel belegt jede Distribution etwas anders. Die Macher von OpenSuse 11.3 beispielsweise haben sich für die Konfiguration aus der Tabelle "OpenSuse 11.3: Runlevel" entschieden. Was dort der Runlevel 5 ist, entspricht unter Debian wiederum dem Runlevel 2.

OpenSuse 11.3: Runlevel

Nummer Beschreibung
0 Computer ausschalten ("Shutdown")
S Einzelbenutzermodus ohne Netzwerk (englisch "Single User Mode")
1 Einzelbenutzermodus ohne Netzwerk
2 Mehrbenutzermodus ohne Netzwerk
3 Mehrbenutzermodus mit Netzwerk, aber ohne grafische Oberfläche
4 ungenutzt
5 Mehrbenutzerbetrieb mit Netzwerk und grafischer Oberfläche (Standard)
6 Neustart des Systems ("Reboot")

TIPP

Wenn Sie Ihr Linux-System in einem ganz bestimmten Runlevel starten möchten, hängen Sie einfach seine Nummer an den Bootprompt an.

Aktionsplan

Welche Runlevel zur Verfügung stehen, was diese bewirken und welchen davon Init standardmäßig nach dem Einschalten des Computers startet, das regelt die Konfigurationsdatei /etc/inittab. Ein Beispiel für ihren Aufbau zeigt Listing 1: Es zeigt die inittab von OpenSuse 11.3, aus Gründen der Übersichtlichkeit in einer leicht gekürzten Fassung.

Listing 1

# The default runlevel is defined here
id:5:initdefault:
# First script to be executed
si::bootwait:/etc/init.d/boot
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
#l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin
# what to do when CTRL-ALT-DEL is pressed
ca::ctrlaltdel:/sbin/shutdown -r -t 4 now
# what to do when power fails/returns
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
#pn::powerfail:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
# getty-programs for the normal runlevels
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Jede der Zeilen folgt einem identischen Strickmuster und besteht aus vier Spalten, die jeweils ein Doppelpunkt voneinander trennt:

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

Die erste Spalte gibt der Zeile einen eindeutigen Namen, der aus maximal vier Zeichen bestehen darf – im obigen Beispiel das Kürzel l5. Was genau Init im Runlevel aus der zweiten Spalte machen soll, bestimmen die in der dritten Spalte angegebene Aktion (sie auch Tabelle "Aktionen") und das in der vierten Spalte vermerkte Kommando. Im Beispiel würde Init im Runlevel 5 den Kommandozeilenbefehl /etc/init.d/rc 5 absetzen und dann warten (wait), bis dieser komplett abgearbeitet wurde.

Die Aktion initdefault bestimmt den Standard-Runlevel nach dem Booten. Gemäß Zeile 2 von Listing 1 handelt es sich dabei unter OpenSuse 11.3 um den Runlevel 5. Ein Befehl ist hier überflüssig, die letzte Spalte bleibt daher leer. Noch bevor Init in diesen Runlevel wechselt, führt es das Skript /etc/init.d/boot aus, wie es die Aktion bootwait in Zeile 5 fordert:

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.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Systeminitialisierung und Runlevel
    Zwischen dem Einschalten des Computers und dem Einloggen der Benutzer arbeitet das Programm init als erster Prozess. Es initialisiert das System, weckt Daemons wie crond oder syslogd und legt den Runlevel fest, den der Anwender vorfindet.
  • Durchstarten
    Beim Wettstreit zwischen dem klassischen Init und dem recht jungen Systemd trifft jahrzehntelang gewachsene Technik auf neue Konzepte.
  • Präzise Kontrolle
    Auf einem typischen Linux-System laufen viele Anwendungen und Dienste gleichzeitig. Mit den richtigen Befehlen verschaffen Sie sich einen Überblick und greifend steuernd ein.
  • Von init an
    Nach dem Einschalten zeigt ein Computer viele kryptische Nachrichten an, bevor er sich mit dem Login-Bildschirm bereit meldet. Wir zeigen, was im Hintergrund des Boot-Vorgangs abläuft.
  • Bootvorgang 2. Anlauf
Kommentare

Infos zur Publikation

LU 10/2016: Kryptographie

Digitale Ausgabe: Preis € 0,00
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

zweites Bildschirm auf gleichem PC einrichten
H A, 30.09.2016 19:16, 2 Antworten
Hallo, ich habe Probleme mein zweites Bildschirm einzurichten.(Auf Debian Jessie mit Gnome) Ich...
Probleme mit MPC/MPD
Matthias Göhlen, 27.09.2016 13:39, 2 Antworten
Habe gerade mein erstes Raspi Projekt angefangen, typisches Einsteigerding: Vom Raspi 3B zum Radi...
Soundkarte wird erkannt, aber kein Ton
H A, 25.09.2016 01:37, 6 Antworten
Hallo, Ich weiß, dass es zu diesem Thema sehr oft Fragen gestellt wurden. Aber da ich ein Linu...
Scannen nur schwarz-weiß möglich
Werner Hahn, 20.09.2016 13:21, 2 Antworten
Canon Pixma MG5450S, Dell Latitude E6510, Betriebssyteme Ubuntu 16.04 und Windows 7. Der Canon-D...
Meteorit NB-7 startet nicht
Thomas Helbig, 13.09.2016 02:03, 4 Antworten
Verehrte Community Ich habe vor Kurzem einen Netbook-Oldie geschenkt bekommen. Beim Start ersch...