init de la Slackware.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.
/etc/inittabAinsi, 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.
/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.
rc.6 et rc.4rc.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é :
rc.0, il mémorise qu'il faudra arrêter le
système (via la commande halt) ;rc.6, il mémorise qu'il faudra relancer le
système (via la commande reboot) ;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.
rc.S, rc.M, rc.KL'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
init pseudo-BSD de la SlackwareC'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.