Page suivante Page précédente Table des matières
4. L'
initde 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 uninitBSD « pur » mais plutôt uninitSystem 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/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'exécution par défaut id:3:initdefault: # Initialisation du système (lancée au démarrage du système). si:S:sysinit:/etc/rc.d/rc.S # Script à lancer lorsqu'on passe en mode mono-utilisateur (niveau 1) su:1S:wait:/etc/rc.d/rc.K # Script à 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 arrête le système. l0:0:wait:/etc/rc.d/rc.0 # Le niveau 6 relance le système. 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 rétablie avant le shutdown, on annule celui-ci pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK" # Si l'alimentation est rétablie 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 séries #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'était utilisé que pour les systèmes uniquement sous X, # jusqu'à ce que l'on découvre qu'il mettait init dans une boucle qui # maintenait la charge système en permanence à 1. En conséquence, 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 où # quelque chose irait mal sous X. x1:4:wait:/etc/rc.d/rc.4On 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 :
- un niveau correspondant à l'arrêt et au redémarrage du système (0 et 6) ;
- un niveau mono-utilisateur (1 et S)
- un niveau multi-utilisateurs (2 à 5), dont un sous X (4).
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.dCe regroupement de niveaux se manifeste ailleurs que dans
/etc/inittab. Le contenu du répertoire/etc/rc.dest assez éloquent :
# ls -l /etc/rc.d total 19 lrwxrwxrwx 1 root root 4 aoû 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 fév 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.newDisparus les sous-répertoires
/etc/rc.d/rcn.det/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
rcqui, nous l'avons vu, sert normalement à aiguillerinitvers les différents répertoiresrcn.d.
4.4 Les scripts
rc.6etrc.4
rc.6est 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é :
- s'il l'a été en tant que
rc.0, il mémorise qu'il faudra arrêter le système (via la commandehalt) ;- s'il l'a été en tant que
rc.6, il mémorise qu'il faudra relancer le système (via la commandereboot) ;Après avoir mémorisé la commande à effectuer,
rc.6détruit tous les processus par la commandekillall5, 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 (haltoureboot).
rc.4est 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 utilisantxdm. 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.KL'examen de
/etc/inittabnous a appris que c'estrc.Squi est lancé à l'initialisation du système, c'est donc l'équivalent durc.sysinitde 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.serialetrc.modulesdestinés, respectivement à initialiser les dispositifs PCMCIA, les ports séries et la gestion des modules (c'est d'ailleurs dansrc.Sque l'on lance le démonkerneld). Là encore, le script est assez clair : il suffit de connaître les rudiments du shell...
rc.Mest appelé lorsqu'initpasse 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 scriptrc.cdrom, configure le nom de la machine à partir du contenu du fichieretcHOSTNAME/ (si ce dernier n'existe pas, votre machine s'appelleradarkstar.frop.org...), initialise les services réseaux en lançant les scriptsrc.inet1etrc.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 lancesendmailen mode démon. La suite consiste à lancer des scripts servant à initialiser des services éventuellement installés (Samba, HTTPD, INN, etc.). Le dernier script appelé estrc.localqui est prévu pour y placer les commandes d'initialisation propres à votre machine.
rc.Kest appelé lorsqu'initpasse en mode mono-utilisateur (ce qui correspond aux niveaux 1 ou S). Son rôle consiste à terminer tous les processus en leur envoyant le signalTERM, à stopper les éventuels services de quota et de comptabilité et à entrer en mode mono-utilisateur par la commandetelinit -t 1 1
4.6 Conclusion sur l'
initpseudo-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.
Page suivante Page précédente Table des matières