Weiter Zurück Inhaltsverzeichnis
Willkommen bei meinem System V init Editor, eher bekannt (und im folgenden auch so benannt) als KSysV. Dieser Abschnitt führt ein paar Konzepte ein und beschreibt, was Sie mit KSysV tun können.
Die folgende Erläuterung ist "geliehen" von
tksysv
(einer Inspirationsquelle für KSysV):
Die "System V init" entwickelt sich rasch zum Standard für die Kontrolle von Programmstarts beim Hochfahren des Systems in der Linux-Welt. Und zwar deshalb, weil sie leichter zu benutzen, mächtiger und zugleich flexibler ist als die traditionelle BSD-init.
Ich werde hier nicht weiter auf geschichtliche Aspekte eingehen (v.a. weil ich darüber selbst nichts weiß :-).
Die init-Binärdatei liegt unter /sbin
und nicht unter
/etc
. Dies ist deshalb wichtig, weil vielleicht jemand
versuchen könnte, eine Maschine auf System V init umzustellen ohne
eine Neuinstallation und Neuformatierung vorzunehmen. Der Linuxkernel
sieht zuerst unter /etc
nach einer init-Datei. Deshalb
müssen Sie sichergehen, daß die alte init von dort entfernt
wurde, falls es dort eine gab.
Die SysV init unterscheidet sich auch dadurch von der BSD init,
daß sich die Konfigurationsdateien in einem Unterverzeichnis von
/etc
befinden statt direkt in /etc
. Dieses Verzeichnis
heißt rc.d
. Dort finden Sie rc.sysinit
und
folgende weitere Verzeichnisse:
init.d/
rc0.d/
rc1.d/
rc2.d/
rc3.d/
rc4.d/
rc5.d/
rc6.d/
init.d
enthält eine ganze Menge Skripte.
Grundsätzlich benötigen Sie ein Skript für jeden
Systemdienst, den Sie beim Hochfahren des Systems bzw. beim Wechsel auf
ein anderes Runlevel starten möchten. Systemdienste beinhalten
solche Dinge wie Netzwerk, NFS, sendmail, httpd usw. Systemdienste
beinhalten dagegen nicht solche Sachen wie "setserial", das
nur einmal läuft und dann geschlossen wird. Solche Dinge
gehören nach rc.local
.
rc.local
sollte seinerseits unter /etc/rc.d
liegen,
wenn Sie eins brauchen. Die meisten Systeme besitzen eines, auch wenn es
eigentlich nicht viel Verwendung dafür gibt. Sie können
ebenfalls ein rc.serial
in /etc/rc.d
anlegen, wenn Sie
beim Hochfahren etwas ausführen lassen wollen, was mit dem
seriellen Anschluß zu tun hat.
Der Ablauf ist folgender:
/etc/rc.d/rc.sysinit
;
rc.sysinit
tut eine Menge notwendiger Dinge und startet
dann rc.serial
(wenn es existiert);
rc.local
;
Das standardmäßige Runlevel ist in /etc/inittab
eingetragen. Sie sollten im Anfangsbereich eine Zeile wie die folgende
sehen:
id:3:initdefault:
An diesem Punkt können Sie einen Blick in die zweite Spalte
werfen und wahrscheinlich feststellen, daß das voreingestellte
Runlevel 3 ist. Wenn Sie das ändern möchten, dann können
Sie /etc/inittab
von Hand bearbeiten und die "3"
ändern. Seien Sie sehr vorsichtig, wenn Sie an der inittab
herumändern. Falls Sie doch etwas durcheinandergebracht haben, dann
kommen Sie zur Reparatur wieder heran, indem Sie das System neu starten
und folgendes ausführen:
LILO boot: linux single
Dies sollte Ihnen ermöglichen, in den Einzelnutzer-Modus zu kommen und die Reparatur vorzunehmen.
Aber wie startet es nun all die richtigen Skripte? Wenn Sie 'ls
-l
' eingeben in rc3.d
, dann sehen Sie wahrscheinlich etwas
wie das Folgende:
lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init
lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local
Wie Sie feststellen werden, gibt es keine wirklichen "Dateien" in diesem Verzeichnis. Alles hier sind Verknüpfungen zu Skripten im init.d-Verzeichnis. Die Verknüpfungen haben auch ein "S" und eine Nummer am Anfang. Das "S" besagt, daß dieses bestimmte Skript gestartet werden soll, so wie umgekehrt ein "K" den Stop bedeuten würde. Die Nummer dient einfach der Anordnung.Tatsächlich startet init alle Systemdienste in der Reihenfolge, in der sie erscheinen. Sie können die Nummern also doppelt vergeben, aber es wird Sie nur selbst durcheinander bringen. Sie benötigen bloß irgendeine zweistellige Zahl, zusammen mit einem großgeschriebenen "S" oder "K", um einen Systemdienst zu starten oder anzuhalten.
Wie startet und stoppt init eigentlich Systemdienste? Ganz einfach: Jedes der Skripte ist so geschrieben, daß es ein Argument wie "Start" und "Stop" akzeptiert. Sie können diese Skripte tatsächlich von Hand auf der Kommandozeile folgendermaßen starten:
/etc/rc.d/init.d/httpd.init stop
Dies würde den httpd-Server anhalten. Init liest einfach den Namen, und wenn der ein "K" bei sich hat, dann ruft sie das Skript mit einem "Stop"-Argument auf. "Wenn er ein "S" mit sich führt, dann läßt init das Skript mit einem "Start"-Argument laufen.
Manche Leute wünschen sich eine einfache Art, Maschinen für viele Zwecke einzurichten. Ich könnte z.B. ein "server"-Runlevel haben, das nur httpd, sendmail, networking u. dgl. laufen läßt. Darüber hinaus könnte ich auch noch ein "Benutzer"-Runlevel haben, das z.B. xdm startet.
Weiter Zurück Inhaltsverzeichnis