6.2 Init-Skripte

Nach dem Laden des Linux-Kernels wird als erstes Programm überhaupt das Programm init gestartet. Dieses Programm startet alle weiteren Programme; welche das sind, wird über die Skripte im Verzeichnis /etc/init.d/ aus dem Paket sysv-rc bestimmt. Je nach gewünschtem Runlevel des Systems zeigen Links aus den Verzeichnissen /etc/rcN.d/ (N ist die Nummer des aktuellen Runlevels, normalerweise 2) auf die Skripte im Verzeichnis /etc/init.d/, so ist beispielsweise /etc/rc2.d/S20exim4 ein Link auf das Startskript für Exim (/etc/init.d/exim4). Den aktuellen Runlevel des Systems zeigt der Befehl runlevel an. Das Anlegen und Löschen dieser Links wird bei der Installation der jeweiligen Dienste automatisch vorgenommen. Ein installierter Dienst wird auf einem Debian System immer auch gestartet. Natürlich können Links von Hand hinzugefügt oder entfernt werden, aber auch für diese Arbeiten am System stellt Debian einige Werkzeuge zur Verfügung.

6.2.1 rcconf

rcconf ist ein einfaches Werkzeug, mit dem einzelne Dienste aus den Init-Skripten aktiviert oder deaktiviert werden können. Es ist mit rcconf nicht möglich, den Runlevel eines Dienstes zu bestimmen.

Abbildung 6.1. rcconf

rcconf


Leider werden bei einer Aktualisierung eines Paketes alle Links auf die Skripte wieder hergestellt. Dies bedeutet auch, dass mittels rcconf deaktivierte Dienste nach einem Update der Software wieder aktiviert werden.

6.2.2 update-rc.d

Detailliertere Einstellmöglichkeiten bietet update-rc.d. Zunächst sollte update-rc.d in jedem Fall mit der Option -n aufgerufen werden; diese zeigt lediglich an, welche Aktionen durchgeführt werden sollen, lässt die entsprechenden Links aber unangetastet.

usage: update-rc.d [-n] [-f] <basename> remove
      update-rc.d [-n] <basename> defaults [NN | sNN kNN]
      update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] [...] .
                    -n: not really
                    -f: force

Grundsätzlich ist natürlich immer der Name des Pakets anzugeben, dessen Init-Skripte angepasst werden sollen. Bei Verwendung der Option remove werden alle Links auf das entsprechende Skript entfernt. Hierbei prüft update-rc.d, ob das Skript bereits entfernt wurde. Ist dies nicht der Fall, so bricht update-rc.d ab. Mit der Option -f kann erzwungen werden, dass die Links auch bei Vorhandensein eines Skriptes gelöscht werden.

Mit den Optionen start, stop bzw. defaults werden die notwendigen Links angelegt, gelöscht bzw. wiederhergestellt. Werden zusätzlich einer oder mehrere Runlevel angegeben, so können die Links entsprechend den Wünschen des Systemadministrators angepasst werden.

Leider werden bei einer Aktualisierung eines Paketes alle Links auf die Skripte wieder hergestellt. Dies bedeutet auch, dass mittels update-rc.d deaktivierte Dienste nach einem Update der Software wieder aktiviert werden.

6.2.3 file-rc

Als Alternative zu den System-V-Init-Skripten steht das Paket file-rc zur Verfügung. Bei diesem Paket wird die Konfiguration des Systemstarts zentral in einer einzelnen Datei verwaltet. Natürlich kann nur ein Paket den Systemstart steuern, so dass bei der Installation dieser für das System sehr essenziellen Funktionen eine deutliche Warnung ausgegeben wird.

wasabi:~# apt-get install file-rc                                                
Paketlisten werden gelesen... Fertig                                            
Abhängigkeitsbaum wird aufgebaut... Fertig                                      
Die folgenden Pakete werden ENTFERNT:                                           
  sysv-rc                                                                       
Die folgenden NEUEN Pakete werden installiert:                                  
  file-rc                                                                       
WARNUNG: Die folgenden essenziellen Pakete werden entfernt.                     
Die sollte NICHT geschehen, wenn Sie nicht genau wissen, was Sie tun!           
  sysv-rc (wegen sysvinit)                                                      
0 aktualisiert, 1 neu installiert, 1 zu entfernen und 0 nicht aktualisiert.     
Es müssen 36,2kB Archive geholt werden.                                         
Nach dem Auspacken werden 4096B Plattenplatz freigegeben sein.                  
Sie sind im Begriff, etwas potenziell Schädliches zu tun.                       
Zum Fortfahren geben Sie bitte "Ja, tu was ich sage!" ein.                     
 ?] Ja, tu was ich sage!                                                        
Hole:1 http://ftp.de.debian.org sarge/main file-rc 0.8.5 [36,2kB]               
Es wurden 36,2kB in 0s geholt (49,9kB/s)                                        
dpkg: sysv-rc: Abhängigkeitsproblem, aber lösche es auf Anfrage dennoch:        
 sysvinit hängt ab von sysv-rc (>= 2.85-2) | file-rc (>> 0.7.0); aber:          
  Paket sysv-rc soll gelöscht werden.                                           
  Paket file-rc ist nicht installiert.                                          
(Lese Datenbank ... 43720 Dateien und Verzeichnisse sind derzeit installiert.)  
Entferne sysv-rc ...                                                            
Wähle vormals abgewähltes Paket file-rc.                                        
(Lese Datenbank ... 43703 Dateien und Verzeichnisse sind derzeit installiert.)  
Entpacke file-rc (aus .../archives/file-rc_0.8.5_all.deb) ...                   
Richte file-rc ein (0.8.5) ...                                                  

wasabi:~#                                           
	

file-rc vereinheitlicht den Zugriff auf die Init-Skripte der einzelnen Dienste, indem alle (bisher von sysv-rc verwendeten) symbolischen Links entfernt werden und die komplette Verwaltung über die Datei /etc/runlevel.conf erfolgt.

# This file was automatically generated by /usr/share/file-rc/rclink2file.sh.   
# You can use your favourite editor or update-rc.d(8) to modify it.             
# Read runlevel.conf(5) man page for more information about this file.          
#                                                                               
# Format:                                                                       
# <sort> <off-> <on-levels>     <command>                                       
01      0,1,6   -               /etc/init.d/gdm 
02      -       S               /etc/init.d/mountvirtfs 
05      -       1               /etc/init.d/single
05      -       S               /etc/init.d/bootlogd 
05      -       S               /etc/init.d/initrd-tools.sh 
05      -       S               /etc/init.d/keymap.sh                           
10      -       2,3,4,5         /etc/init.d/sysklogd                            
10      -       S               /etc/init.d/checkroot.sh                        
11      0,1,6   -               /etc/init.d/cron                                
11      -       2,3,4,5         /etc/init.d/klogd                               
14      -       2,3,4,5         /etc/init.d/ppp                                 
18      -       2,3,4,5         /etc/init.d/portmap                             
18      -       S               /etc/init.d/hwclockfirst.sh                     
19      0,6     -               /etc/init.d/setserial                           
20      0,1,6   2,3,4,5         /etc/init.d/exim4                               
20      0,1,6   2,3,4,5         /etc/init.d/fam                                 
20      0,1,6   2,3,4,5         /etc/init.d/inetd                               
20      0,1,6   2,3,4,5         /etc/init.d/lpd                                 
20      0,1,6   2,3,4,5         /etc/init.d/makedev                             
20      0,1,6   2,3,4,5         /etc/init.d/ssh                                 
20      -       0,6             /etc/init.d/sendsigs                            
20      -       S               /etc/init.d/modutils                            
21      -       2,3,4,5         /etc/init.d/nfs-common                          
25      0,6     -               /etc/init.d/hwclock.sh                          
30      -       0,6             /etc/init.d/urandom                             
30      0,6     S               /etc/init.d/etc-setserial                       
30      -       S               /etc/init.d/checkfs.sh                          
30      -       S               /etc/init.d/procps.sh                           
31      -       0,6             /etc/init.d/umountnfs.sh                        
32      -       0,6             /etc/init.d/portmap                             
35      -       0,6             /etc/init.d/networking                          
35      -       S               /etc/init.d/mountall.sh                         
36      -       S               /etc/init.d/discover                            
36      -       S               /etc/init.d/mountvirtfs                         
38      -       S               /etc/init.d/pppd-dns                            
39      -       S               /etc/init.d/dns-clean                           
39      -       S               /etc/init.d/ifupdown                            
40      -       0,6             /etc/init.d/umountfs                            
40      -       S               /etc/init.d/hostname.sh                         
40      -       S               /etc/init.d/hotplug                             
40      -       S               /etc/init.d/networking                          
43      -       S               /etc/init.d/portmap                             
45      -       S               /etc/init.d/mountnfs.sh                         
46      -       S               /etc/init.d/setserial                           
48      -       S               /etc/init.d/console-screen.sh                   
50      -       S               /etc/init.d/hwclock.sh                          
55      -       S               /etc/init.d/bootmisc.sh                         
55      -       S               /etc/init.d/urandom                             
70      -       S               /etc/init.d/nviboot                             
70      -       S               /etc/init.d/screen-cleanup                      
70      -       S               /etc/init.d/xfree86-common                      
79      0,1,6   -               /etc/init.d/nfs-common                          
81      1       -               /etc/init.d/portmap                             
86      0,1,6   -               /etc/init.d/ppp                                 
89      0,1,6   2,3,4,5         /etc/init.d/atd                                 
89      0,1,6   -               /etc/init.d/klogd                               
89      0,6     -               /etc/init.d/hotplug                             
89      -       2,3,4,5         /etc/init.d/cron                                
90      0,1,6   -               /etc/init.d/sysklogd                            
90      -       0               /etc/init.d/halt                                
90      -       6               /etc/init.d/reboot                              
99      -       2,3,4,5         /etc/init.d/gdm                                 
99      -       2,3,4,5         /etc/init.d/rmnologin                           
99      -       2,3,4,5         /etc/init.d/stop-bootlogd                       
# THE LAST LINE IS NEVER READ!                                                  
	

 Impressum