Willkommen bei meinem System V init Editor, eher bekannt (und im folgenden auch so benannt) als KSysV. Dieser Abschnitt fhrt ein paar Konzepte ein und beschreibt, was Sie mit KSysV tun knnen.
Die folgende Erluterung ist geliehen von tksysv (einer Inspirationsquelle fr KSysV):
Die System V init entwickelt sich rasch zum Standard fr die Kontrolle von Programmstarts beim Hochfahren des Systems in der Linux-Welt. Und zwar deshalb, weil sie leichter zu benutzen, mchtiger und zugleich flexibler ist als die traditionelle BSD-init.
Ich werde hier nicht weiter auf geschichtliche Aspekte eingehen (v.a. weil ich darber selbst nichts wei :-).
Die init-Binrdatei liegt unter /sbin und nicht unter /etc. Dies ist deshalb wichtig, weil vielleicht jemand versuchen knnte, eine Maschine auf System V init umzustellen ohne eine Neuinstallation und Neuformatierung vorzunehmen. Der Linuxkernel sieht zuerst unter /etc nach einer init-Datei. Deshalb mssen 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 heit 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 enthlt eine ganze Menge Skripte. Grundstzlich bentigen Sie ein Skript fr jeden Systemdienst, den Sie beim Hochfahren des Systems bzw. beim Wechsel auf ein anderes Runlevel starten mchten. Systemdienste beinhalten solche Dinge wie Netzwerk, NFS, sendmail, httpd usw. Systemdienste beinhalten dagegen nicht solche Sachen wie setserial, das nur einmal luft und dann geschlossen wird. Solche Dinge gehren 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 dafr gibt. Sie knnen ebenfalls ein rc.serial in /etc/rc.d anlegen, wenn Sie beim Hochfahren etwas ausfhren lassen wollen, was mit dem seriellen Anschlu zu tun hat.
Der Ablauf ist folgender:
der Kernel sucht an verschiedenen Stellen nach init und startet die erste, die er findet;
init startet /etc/rc.d/rc.sysinit;
rc.sysinit tut eine Menge notwendiger Dinge und startet dann rc.serial (wenn es existiert);
init startet rc.local;
init startet alle Skripte fr das voreingestellte Runlevel.
Das standardmige Runlevel ist in /etc/inittab eingetragen. Sie sollten im Anfangsbereich eine Zeile wie die folgende sehen:
id:3:initdefault: |
An diesem Punkt knnen Sie einen Blick in die zweite Spalte werfen und wahrscheinlich feststellen, da das voreingestellte Runlevel 3 ist. Wenn Sie das ndern mchten, dann knnen Sie /etc/inittab von Hand bearbeiten und die 3 ndern. Seien Sie sehr vorsichtig, wenn Sie an der inittab herumndern. Falls Sie doch etwas durcheinandergebracht haben, dann kommen Sie zur Reparatur wieder heran, indem Sie das System neu starten und folgendes ausfhren:
LILO boot: linux single |
Dies sollte Ihnen ermglichen, 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 Verknpfungen zu Skripten im init.d-Verzeichnis. Die Verknpfungen 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 wrde. Die Nummer dient einfach der Anordnung.Tatschlich startet init alle Systemdienste in der Reihenfolge, in der sie erscheinen. Sie knnen die Nummern also doppelt vergeben, aber es wird Sie nur selbst durcheinander bringen. Sie bentigen blo irgendeine zweistellige Zahl, zusammen mit einem grogeschriebenen 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 knnen diese Skripte tatschlich von Hand auf der Kommandozeile folgendermaen starten:
/etc/rc.d/init.d/httpd.init stop |
Dies wrde 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 fhrt, dann lt init das Skript mit einem Start-Argument laufen.
Manche Leute wnschen sich eine einfache Art, Maschinen fr viele Zwecke einzurichten. Ich knnte z.B. ein server-Runlevel haben, das nur httpd, sendmail, networking u. dgl. laufen lt. Darber hinaus knnte ich auch noch ein Benutzer-Runlevel haben, das z.B. xdm startet.