Page précédente Page suivante Table des matières

4. L'init de la Slackware.

4.1 Faire du BSD avec du System V...

C'est ce que fait la Slackware ! (comme d'autres UNIX, dont AIX et HP-UX 9). Le principe est simple : il consiste à supprimer la gestion des niveaux d'exécution au niveau du fichier /etc/inittab... On n'a donc pas un init BSD « pur » mais plutôt un init System V sans niveaux d'exécution.

Nous ne reviendrons donc pas ici sur toutes les explications déjà données mais nous expliquerons les différences entre les différents fichiers d'initialisation.

4.2 Le fichier /etc/inittab

Ainsi, que nous l'avons déjà dit, ce fichier est une version classique, expurgée de la gestion des niveaux d'exécution.

# Niveau d'execution par defaut
id:3:initdefault:

# Initialisation du systeme (lancee au demarrage du systeme).
si:S:sysinit:/etc/rc.d/rc.S

# Script a lancer lorsqu'on passe en mode mono-utilisateur (niveau 1)
su:1S:wait:/etc/rc.d/rc.K

# Script a lancer lorsqu'on passe en mode multi-utilisateurs.
rc:2345:wait:/etc/rc.d/rc.M

# Que faire des "trois doigts magiques"
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now

# Le niveau 0 arrete le systeme.
l0:0:wait:/etc/rc.d/rc.0

# Le niveau 6 relance le systeme.
l6:6:wait:/etc/rc.d/rc.6

# Que faire en cas de pb d'alimentation (shutdown en mode mono-utilisateur)
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"

# Si l'alimentation est retablie avant le shutdown, on annule celui-ci
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"

# Si l'alimentation est retablie en mode mono-utilisateur, on repasse en 
# mode multi-utilisateurs.
ps:S:powerokwait:/sbin/init 5

# Les getties en mode multi-utilisateurs
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

# Lignes series
#s1:12345:respawn:/sbin/agetty 19200 ttyS0 vt100
#s2:12345:respawn:/sbin/agetty 19200 ttyS1 vt100

# Lignes Dialup
#d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100

# Le niveau 4 n'etait utilise que pour les systemes uniquement sous X,
# jusqu'a ce que l'on decouvre qu'il mettait init dans une boucle qui 
# maintenait la charge systeme en permanence a 1. En consequence, il y a
# maintenant un getty ouvert sur tty6. Heureusement, personne ne 
# s'en est rendu compte. ;^)
# En tous cas, il n'est pas mauvais d'avoir une console texte au cas ou
# quelque chose irait mal sous X.
x1:4:wait:/etc/rc.d/rc.4

On voit donc bien apparaître les niveaux 0 à 6, ainsi que le niveau S, mais il sont regroupés pour que le système ne voit que 3 niveaux :

Il n'y a, notamment, aucune différence entre les niveaux 2, 3 et 5, pas plus qu'entre les niveaux 0 et 6.

4.3 Les scripts d'initialisation de /etc/rc.d

Ce regroupement de niveaux se manifeste ailleurs que dans /etc/inittab. Le contenu du répertoire /etc/rc.d est assez éloquent :

# ls -l /etc/rc.d 
total 19
lrwxrwxrwx   1 root     root            4 aou 19 23:14 rc.0 -> rc.6
-rwxr-xr-x   1 root     root          396 oct  2  1995 rc.4
-rwxr-xr-x   1 root     root         2376 mai 26 23:55 rc.6
-rwxr-xr-x   1 root     root         1244 mai 20 22:54 rc.K
-rwxr-xr-x   1 root     root         3569 fev 23 22:55 rc.M
-rwxr-xr-x   1 root     root         5453 mai 27 02:36 rc.S
-rw-r--r--   1 root     root         1383 mai 11 23:59 rc.cdrom
-rwxr-xr-x   1 root     root          113 oct  3  1995 rc.local.new

Disparus les sous-répertoires /etc/rc.d/rcn.d et /etc/rc.d/init.d. L'arborescence des fichiers d'initialisation de la Slackware s'arrête ici...

Ce répertoire ne contient que des scripts appelés et on remarque de façon évidente que ce qui se passe lorsqu'on entre dans le niveau 0 (arrêt du système) est fort peu différent de ce qui arrive lorsqu'on entre en niveau 6 (redémarrage du système)... On notera aussi l'absence du script général rc qui, nous l'avons vu, sert normalement à aiguiller init vers les différents répertoires rcn.d.

4.4 Les scripts rc.6 et rc.4

rc.6 est appelé, nous venons de le voir, lors de l'arrêt et du redémarrage du système. Ce script positionne notamment le chemin de recherche du système puis regarde comment il a été appelé :

Après avoir mémorisé la commande à effectuer, rc.6 détruit tous les processus par la commande killall5, stoppe les services de quotas et de comptabilité si ceux-ci sont utilisés, sauvegarde quelques informations, démonte les systèmes de fichiers NFS, désactive le swap, démonte les systèmes de fichiers locaux et, enfin, exécute la commande mémorisée (halt ou reboot).

rc.4 est appelé uniquement lorsque le système entre dans le niveau d'exécution 4, réservé aux sessions uniquement sous X : par défaut, il se borne à lancer X en utilisant xdm. Si vous voulez utiliser un autre gestionnaire de sessions X (kdm, par exemple), c'est là qu'il faudra l'indiquer.

4.5 Les scripts rc.S, rc.M, rc.K

L'examen de /etc/inittab nous a appris que c'est rc.S qui est lancé à l'initialisation du système, c'est donc l'équivalent du rc.sysinit de la Red Hat et son contenu réalise les mêmes opérations.

On notera que c'est lui qui se charge de lancer les scripts rc.pcmcia, rc.serial et rc.modules destinés, respectivement à initialiser les dispositifs PCMCIA, les ports séries et la gestion des modules (c'est d'ailleurs dans rc.S que l'on lance le démon kerneld). Là encore, le script est assez clair : il suffit de connaître les rudiments du shell...

rc.M est appelé lorsqu'init passe en mode multi-utilisateurs (ce qui correspond aux niveaux 2, 3, 4 et 5). Par défaut, ce script tente de monter un CD-ROM s'il y en a un dans le lecteur en appelant le script rc.cdrom, configure le nom de la machine à partir du contenu du fichier etcHOSTNAME/ (si ce dernier n'existe pas, votre machine s'appellera darkstar.frop.org...), initialise les services réseaux en lançant les scripts rc.inet1 et rc.inet2, lance le démon d'impression et de cron. Puis, il effectue quelques travaux de nettoyage sur le disque (suppression des fichiers de verrou, par exemple), met à jour les liens des bibliothèques partagées et lance sendmail en mode démon. La suite consiste à lancer des scripts servant à initialiser des services éventuellement installés (Samba, HTTPD, INN, etc.). Le dernier script appelé est rc.local qui est prévu pour y placer les commandes d'initialisation propres à votre machine.

rc.K est appelé lorsqu'init passe en mode mono-utilisateur (ce qui correspond aux niveaux 1 ou S). Son rôle consiste à terminer tous les processus en leur envoyant le signal TERM, à stopper les éventuels services de quota et de comptabilité et à entrer en mode mono-utilisateur par la commande telinit -t 1 1

4.6 Conclusion sur l'init pseudo-BSD de la Slackware

C'est tout... Bien sûr, en pratique, /etc/rc.d/ contiendra d'autres scripts (rc.inet1, rc.inet2, rc.news,...) qui se seront probablement installés en même temps que les paquetages qu'ils contrôlent.

Si vous vous rendez compte qu'un service ne fonctionne pas, assurez-vous qu'il est bien lancé, soit directement à partir d'un des scripts du système, soit à partir de rc.local, soit à partir de tout autre script appelés par ceux-ci.


Page précédente Page suivante Table des matières