Wie Linux sich die Stiefel anzieht
Von init an
Wie beschreibt man einen Runlevel?
Wir wissen jetzt, dass beim Boot-Vorgang ein Programm namens init die aufgerufenen Programme kontrolliert. Wir kennen die Konfigurationsdatei /etc/inittab, die unter anderem festlegt, in welchen Runlevel das System beim Booten wechselt. Aber woher weiß der Computer, wie solch ein Runlevel aussieht?
Für jeden Runlevel von 0 bis 6 (siehe Tabelle 1) existiert ein eigenes Verzeichnis, das den Runlevel detailliert beschreibt. Auf einem "normalen" Linux-System heißt dieses Verzeichnis für Runlevel 5 beispielsweise /etc/rc.d/rc5.d, aber der genaue Name kann je nach Distribution abweichen – verbreitete Alternativen sind /etc/rc5.d oder auch /etc/init.d/rc5.d.
In diesen Verzeichnissen stehen die so genannten Init-Skripte. Jedes davon kontrolliert ein Subsystem Ihres Computers, z. B. die Uhr, den Mail-Server oder den Drucker-Spooler. Alle Init-Skripte folgen einer einheitlichen Syntax: Beim Aufruf wird genau ein Argument übergeben, entweder start oder stop, je nachdem, ob der betreffende Dienst gestartet oder angehalten wird. Viele Skripte kennen noch weitere Argumente für andere Aufgaben, aber jedes Init-Skript weiß über start und stop Bescheid. So kann init jeden Teil des Systems vollautomatisch kontrollieren.
Beim Wechsel in einen Runlevel (siehe auch Abbildung 2) ruft init alle Init-Skripte im zugehörigen Runlevel-Verzeichnis auf. Wenn Sie in den Runlevel 2 wechseln, werden alle Skripte aus /etc/rc.d/rc2.d gestartet. Werfen Sie einen Blick in dieses Verzeichnis:
$ ls /etc/rc.d/rc2.d K09sshd S16apmd S75keytable K75netfs S20random S90xfs K89portmap S30syslogd S99local S08ipchains S40crond S10network S60lpd
Der Name jedes Skriptes besteht aus drei Bestandteilen:
- Ein Buchstabe "K" oder "S" entscheidet, ob das Subsystem angehalten ("geKillt") oder geStartet wird.
- Eine zweistellige Zahl von 00 bis 99 legt die Reihenfolge fest, in der die Skripte aufgerufen werden.
- Ein Kürzel beschreibt das Subsystem für menschliche Administratoren.
Das im Beispiel gezeigte Runlevel-Verzeichnis wird demnach die Dienste sshd, netfs und portmap anhalten. Anschließend initialisiert es diverse Subsysteme neu, wodurch zum Beispiel Netzwerkeinstellungen korrigiert oder ein Tastaturtreiber geladen werden. Aktuelle Distributionen rufen ein Subsystem dabei nicht noch einmal auf, wenn es bereits läuft; es kommt also nicht zu doppelten Daemons.
Der gute Stil der Unix-Systemadministration fordert übrigens, dass die init-Skripte der Runlevel-Verzeichnisse Links in ein anderes Verzeichnis sind. Die eigentlichen Skripte stehen dann z. B. in /etc/init.d oder /etc/rc.d/init.d. Wenn Sie ein dadurch beschriebenes Subsystem für einen bestimmten Runlevel aktivieren möchten, legen Sie einfach einen neuen Link an:
# cd /etc/rc.d/rc5.d # ln ../init.d/mysql S97mysql # cd ../rc0.d # ln ../init.d/mysql K02mysql # cd ../rc1.d # ln ../init.d/mysql K02mysql # cd ../rc6.d # ln ../init.d/mysql K02mysql
Der Vorteil: Änderungen am init-Skript wirken sich sofort auf alle Kopien aus; es kommt zu keinem Versions-Wirrwarr. Am Beispiel sehen Sie noch einen weiteren wichtigen Tipp: Wenn Sie einen neuen Start-Link anlegen, erstellen Sie am besten gleich die symmetrischen Stopp-Links für die Runlevel 0, 1 und 6.
Ausblick
Wenn Sie gerade ein Stündchen Zeit haben, sehen Sie sich doch einmal die init-Skripte für die wichtigsten Runlevel an. Dabei lernt man eine Menge über das System – und nebenbei auch über die Programmierung mit der Shell. Eine kleine Warnung an dieser Stelle: Mit init ist nicht gut Kirschen essen. Ein Fehler in der Boot-Konfiguration kann einen Computer lahmlegen. Und das bemerkt man erst am nächsten Morgen, wenn man den Rechner das nächste Mal einschaltet.
Glossar
BIOS
Das BIOS (Basic Input/Output System) ist meistens in einem programmierbaren Festspeicher (in aktuellen Geräten sind das EEPROMs) auf der Hauptplatine des Computers gespeichert. Es enthält neben dem Setup-Programm zur Steuerung einiger Hardware-Funktionen die Boot-Logik des PCs. Diese liest den Boot-Sektorder Festplatte ein, also ein paar Kilobyte Daten, und führt ihn aus – fertig. Alles andere muss die Software aus dem Boot-Sektor tun. Theoretisch enthält das BIOS auch noch Gerätetreiber für DOS-basierte Betriebssysteme, doch werden diese unter Linux in der Regel nicht benutzt.
Boot-Sektor
Am Anfang der Festplatte liegt ein Boot-Sektor, der ein Programm enthalten kann, das für das Laden des Betriebssystems zuständig ist. Es gibt einen Haupt-Boot-Sektor pro Festplatte, den Master Boot Record (MBR), sowie einen zusätzlichen Boot-Sektor für jede einzelne Partition. Der MBR wird meist für die Auswahl zwischen den installierten Betriebssystemen benutzt, oder er lädt seinerseits den Boot-Sektor einer Festplattenpartition. Dieser startet das eigentliche Betriebssystem.
Links
Links sind ein wichtiges Konzept bei Unix-artigen Betriebssystemen. Anstatt eine Datei zu kopieren, erstellt man einen neuen Verzeichniseintrag, der auf die ursprüngliche Datei zeigt. Wenn ein Programm diesen neuen Eintrag öffnet, sieht es den Inhalt der ursprünglichen Datei. Dabei unterscheidet man harte von symbolischen Links – bei harten Links ist die Kopie vom Original überhaupt nicht mehr zu unterscheiden, wohingegen symbolische Links wirklich nur Zeiger sind.



