Wie Linux sich die Stiefel anzieht
Von init an
/etc/inittab
Die Datei inittab steuert das Verhalten von init und enthält Kommentare, die mit einem Doppelkreuz # beginnen, sowie tabellarische Anweisungen. Einen kurzen Auszug mit den allerwichtigsten Einträgen sehen Sie in Listing 1.
Listing 1
Die wichtigsten Einträge aus
/etc/inittab# Voreingestellter Runlevel nach dem Einschalten id:3:initdefault: # Vorbereitung si::sysinit:/etc/rc.d/rc.sysinit # Die einzelnen Runlevel l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Was passiert bei Strg-Alt-Entf? ca::ctrlaltdel:/sbin/shutdown -t3 -r now # Login für den Textmodus 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 # Login für den Grafikmodus x:5:respawn:/usr/X11R6/bin/xdm -nodaemon
Jede Tabellenzeile enthält vier Einträge, die durch Doppelpunkte voneinander getrennt sind. An erster Stelle stehen ein oder zwei Buchstaben oder Ziffern als mnemonisches Kürzel für den betreffenden Eintrag. Danach kann durch ein oder mehrere Ziffern festgelegt werden, dass dieser Eintrag nur in den angegebenen Runleveln Gültigkeit besitzt. Beispielsweise wird mingetty in Listing 1 nur in den Runleveln 2 bis 5 aufgerufen; die Zeile mit shutdown gleich davor macht hingegen keine Einschränkung des Runlevels und gilt daher immer.
Der dritte Eintrag jeder Zeile darf ein Schlüsselwort für zusätzliche Bedingungen enthalten. Am häufigsten benutzt man hier respawn, d. h. das zugehörige Programm wird immer wieder neu gestartet, sobald es sich beendet. Ein mingetty beispielsweise sorgt für eine Login-Aufforderung. Sobald ein Benutzer seine Sitzung beendet, wird der mingetty erneut gestartet und steht für den nächsten Anwender zur Verfügung.
Eine Alternative ist once, d. h. ein Programm wird nur ein einziges Mal beim Erreichen des Runlevels aufgerufen. Dieser Betriebsmodus ist für Daemons und andere Programme notwendig, die nach dem Start sofort in den Hintergrund wechseln und dort weiterlaufen. Wenn init diese Programme gleich wieder starten würde, wären binnen kürzester Zeit eine größere Menge von diesen gleichzeitig aktiv – der Computer würde abstürzen. Der Nachteil ist, dass init eine vorzeitige Beendigung solch eines Programmes nicht bemerkt.
Im Listing sehen Sie außerdem ein paar besondere Schlüsselwörter: initdefault legt fest, welcher Runlevel beim Boot-Vorgang ausgewählt wird; sysinit beschreibt ein Programm, das nur beim Booten ausgeführt wird. Zeilen mit wait enthalten Skripte, die bei jedem Wechsel in den betreffenden Runlevel ausgeführt werden. Sie halten unpassende Programme an, z. B. wird vor dem Reboot des Computers ein eventuell laufender Webserver heruntergefahren. Umgekehrt starten die wait-Skripte auch neue Software, die für den jeweiligen Betriebszustand benötigt wird.
Die vierte Spalte der inittab-Einträge schließlich beschreibt das jeweilige Programm einschließlich seiner Parameter, das aufgerufen wird, sofern alle Bedingungen erfüllt sind.
Aktivitäten von <C>init<C>
In einer typischen Konfiguration, wie sie hier gezeigt ist, führt init nach dem Booten drei Aufgaben aus:
- Als Erstes werden durch das Skript
rc.sysinitgrundlegende Einstellungen vorgenommen. - Zweitens wechselt
initin den durchinitdefaultfestgelegten Runlevel, wodurch alle möglichen Daemons und Server-Programme gestartet werden. - Drittens wird Software für Login-Prompts gestartet. Je nach angeschlossener Peripherie können das normale Logins im Text- oder Grafikmodus sein, oder auch die Initialisierung eines Modems oder einer ISDN-Karte. Lediglich Netzwerk-Logins sind Aufgabe eigener Daemons.
Die Grundkonfiguration durch rc.sysinit beinhaltet bei den meisten Distributionen die folgenden Aufgaben: Die Uhr des Betriebssystems wird nach der Hardware-Uhr gestellt; die Festplatten werden auf Fehler überprüft und anschließend gemountet. Die Swap-Partition wird aktiviert; gegebenenfalls wird bereits ein Tastaturtreiber geladen für den Fall, dass beim Festplatten-Check ein Fehler auftritt und der Administrator per Hand eingreifen muss. Das Netzwerk-Subsystem wird vorbereitet, indem z. B. der Rechnername gesetzt wird. Hinzu kommen noch Aufräumaktionen aller Art. Alle diese Aktivitäten sind sehr stark von der Distribution abhängig – frühere Linux-Systeme beschränkten sich hier im wesentlichen auf die Uhr, den Hostname und den Festplatten-Check.



