Nächste Vorhergehende Inhalt

6. Init

Ich möchte nur über den "System V" Stil von init sprechen, den Linux Systeme meistens benutzen. Es gibt auch Alternativen. In Wirklichkeit können Sie jedes Programm, das Sie möchten in /sbin/init packen und der Kernel wird es laden, wenn er gestartet hat.

Es ist init's Job alles zum laufen zu bringen, wie es sein sollte. Es überprüft das Dateisystem und bindet es ein. Es startet "Daemons" um Systemnachrichten aufzuzeichnen, erledigt die Netzwerkfunktionen, liefert Webseiten, gehorcht Ihrer Maus und so weiter. Es startet auch die getty Prozesse, welche die login prompts Ihrer virtuelllen Terminals zur verfügung stellt.

Das ist eine ganz komplizierte Geschichte über das Wechseln der "run-levels", aber ich überspringe dies und spreche nur über den Systemstart.

Init liest die Datei /etc/inittab, welche ihm sagt was zu tun ist. Typischerweise, ist das erste was es gesagt bekommt, ein Initialisierungsscript laufen zu lassen. Diese Programm welches dieses ausführt (oder interpretiert) ist bash, das selbe Programm, das Ihnen einen command prompt bereit stellt. In Debian Systemen, ist das Initialisierungsscript /etc/init.d/rcS, auf Red Hat, /etc/rc.d/rc.sysinit. Das ist wo das Dateisystem gecheckt und eingebunden, die Uhr gestellt, der Auslagerungsspeicher vorbereitet, der Hostname gesetzt wird, etc.

Als nächstes befördert uns ein anderes Script in den Standard run-level. Das bedeutet, das ein Satz Untersysteme gestartet wird. Es gibt einen Satz von Verzeichnissen /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d auf Red Hat, oder /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d auf Debian, welche zu den run-levels gehören. Wenn wir in den runlevel 3 auf einem Debian System wechseln, dann führt das Script alle Scripte in /etc/rc3.d aus, welche mit "S" (für Start) beginnen. Diese Scripts sind in Wirklichkeit nur Links zu Scripten in anderen Verzeichnissen, gewöhnlich genannt init.d.

So wurde unser run-level script aufgerufen von init, und es sieht in einem Verzeichnis nach Scripten, die mit einem "S" beginnen. Es könnte zuerst S10syslog finden. Die Nummern sagen den run-level Scripten in welcher Reihenfolge sie zu laufen haben. In diesem Fall startet S10syslog zuerst, weil es keine Scripte mit S00 ... S09 gibt. Aber S10syslog ist in Wirklichkeit ein Link auf /etc/init.d/syslog welches ein Script ist, das den system logger startet oder beendet. Weil der Link mit einem "S" startet, weiß das run-level Script das das syslog Script mit einem "start" Parameter auszuführen ist. Es gibt auch Links, die mit einem "K" (für kill) beginnen. Das heißt, was in welcher Reihenfolge zu beenden ist, wenn der run-level beendet wird.

Um zu bestimmen, welche Untersysteme standardmäßig starten, müssen Sie die Links in dem rcN.d Verzeichnis ändern. N bedeutet den default runlevel, welcher in Ihrer inittab gesetzt ist.

Die letzte wichtige Sache, die init tut, ist einige getty's zu starten. Diese sind "wiederstartend" was bedeutet, das wenn sie stoppen, startet sie init wieder. Die meisten Distributionen kommen mit sechs virtuellen Terminals. Vielleicht wollen Sie weniger haben, um Speicher zu sparen, oder mehr so das Sie eine Menge Programme laufen lassen können und schnell zu ihnen wechseln können, wenn Sie sie brauchen. Vielleicht wollen Sie auch ein getty für ein Text Terminal oder ein Modem benutzen. In diesem Fall müssen Sie die Datei inittab editieren.

6.1 Konfiguration

/etc/inittab ist die erste Datei zur Konfiguration von init.

Die rcN.d Verzeichnisse, wo N = 0, 1, ..., 6 bestimmen welche Untersysteme gestartet werden.

Irgendwo ist in einem der Scripte, aufgerufen durch init, das mount -a Kommando bereitgestellt. Das bedeutet, hänge alle Dateisysteme ein, die erwartet werden. Die Datei /etc/fstab definiert, was erwartet wird einzuhängen. Wenn Sie daran etwas ändern möchten, was wo eingehängt wird, ist dies die Datei, welche Sie editieren müssen. Es gibt auch eine Hilfeseite für fstab.

6.2 Übungen

Finden Sie das rcN.d Verzeichnis für den Standard run-level auf Ihrem System und führen Sie ein ls -l aus, um zu sehen, welche Dateien Links sind.

Ändern Sie die Anzahl der gettys die auf Ihrem System laufen.

Entfernen Sie alle Untersystem aus Ihrem Standard run-level, welche Sie nicht benötigen.

Finden Sie heraus mit wie wenig Sie starten können.

Spielen Sie lilo auf eine Diskette, zusammen mit einem Kernel und einem statisch gelinkten "hello world" Programm, genannt /sbin/init. Sehen Sie sich den Start an, mit der Ausgabe "Hello".

Sehen Sie genau zu, wenn Ihr System hochfährt und schreiben Sie sich auf, was es Ihnen mitteilt. Oder analysieren Sie einen Teil des Systemprotokolls /var/log/messages von Start an. Dann beginnen Sie bei inittab, gehen durch alle Scripte und sehen nach, welcher Code was tut. Sie können auch extra Startmeldungen einbauen, wie

        echo "Hello, I am rc.sysinit"

Dies ist auch eine gute Übung in Shell-Scripting. Einige dieser Scripte sind ziemlich kompliziert. Legebn Sie sich dafür eine gute Bash-Anleitung zu.

6.3 Mehr Informationen


Nächste Vorhergehende Inhalt