7.3. Wie funktionieren diese Bootskripte?

Linux benutzt eine spezielle Booteinrichtung mit dem Namen SysVinit. Es basiert auf dem Konzept der Runlevel. Dieses Konzept kann von System zu System stark variieren. Man kann nicht einfach annehmen, weil Dinge in <hier Distributionsnamen einsetzen> funktionieren, tun sie das auch in LFS. LFS hat seinen eigenen Weg, wie diese Dinge funktionieren, aber grundsätzlich respektieren wir die allgemein üblichen Standards.

SysVinit (wir nennen es nun einfach nur „init“) funktioniert nach dem Runlevel-Schema. Es gibt 7 Runlevel (von 0 bis 6), genaugenommen gibt es sogar mehr, aber diese sind für Spezialfälle reserviert und werden üblicherweise nicht benutzt. Die Man-page von init beschreibt diese Details genauer. Jeder Runlevel korrespondiert mit Dingen, die der Computer beim Hochfahren ausführen soll. Der Standard-Runlevel ist 3. Hier ist eine Beschreibung, wie die verschiedenen Runlevel üblicherweise eingesetzt werden:

0: Fährt den Computer herunter
1: Ein-Benutzer-Modus
2: Mehr-Benutzer-Modus ohne Netzwerk
3: Mehr-Benutzer-Modus mit Netzwerk
4: reserviert für eigene Anpassungen, funktioniert ansonsten wie 3
5: genauso wie 4, wird normalerweise für grafischen Login benutzt (wie z. B. X's  xdm oder KDE's kdm)
6: Startet den Computer neu

Das Kommando zum Wechseln des Runlevel ist init [Runlevel], wobei [Runlevel] der Runlevel ist, in den Sie wechseln möchten. Zum Neustarten des Computers würde ein Benutzer zum Beispiel init 6 eingeben. Das reboot-Kommando ist nur ein Alias darauf, genauso wie das Kommando halt ein Alias auf init 0 ist.

Unter /etc/rc.d befinden sich eine Menge Ordner mit dem Namen rc?.d, wobei das ? die Nummer eines Runlevels ist. Dort liegt auch rcsysinit.d, welches einige symbolische Links enthält. Einige beginnen mit einem K, andere mit einem S, gefolgt von einer zweistelligen Zahl. Das K bedeutet beenden (kill) eines Dienstes, das S bedeutet starten (start) eines Dienstes. Die Zahlen bestimmen die Reihenfolge, in der die Skripte ausgeführt werden, von 00 bis 99. Je kleiner die Zahl, desto früher wird das Skript ausgeführt. Wenn init in einen anderen Runlevel wechselt, werden die nötigen Skripte gestoppt und andere dafür gestartet.

Die echten Skripte befinden sich in /etc/rc.d/init.d. Sie erledigen die ganze Arbeit, und die ganzen symbolischen Links zeigen auf sie. Stopp- und Startskripte zeigen auf dieselbe Datei in /etc/rc.d/init.d. Das funktioniert, weil die Skripte mit unterschiedlichen Parametern ausgeführt werden können, wie zum Beispiel start, stop, restart, reload, status. Wenn ein K-Link ausgeführt werden soll, wird das entsprechende Skript mit dem stop-Parameter aufgerufen. Wenn ein S-Link ausgeführt werden soll, wird das Skript mit dem start-Parameter aufgerufen.

Es gibt eine Ausnahme. S-Links in den Ordnern rc0.d und rc6.d starten keine Dienste. Sie werden stattdessen mit dem Parameter stop aufgerufen um etwas zu beenden. Die Sinn dahinter ist, dass Sie wohl kaum einen Dienst starten wollen, wenn Sie rebooten oder das System anhalten wollen.

Hier einige Beschreibungen, welche Parameter zu einem Skript was bewirken:

start

Der Dienst wird gestartet.

stop

Der Dienst wird gestoppt.

restart

Der Dienst wird gestoppt und dann erneut gestartet.

reload

Die Konfiguration des Dienstes wird neu eingelesen. Das verwendet man, nachdem die Konfigurationsdatei eines Dienstes geändert wurde und man nicht den ganzen Dienst neu starten muss.

status

Gibt aus, ob der Dienst läuft, und wenn ja, mit welchen PIDs.

Sie können den Bootprozess natürlich nach Ihren Wünschen anpassen (schlussendlich ist es ja auch Ihr eigenes LFS-System). Die Dateien hier sind nur Beispiele, wie man es gut erledigen kann.