Linux-Mandrake:
Guide de l'utilisateur
et Manuel de référence

MandrakeSoft

 
 
Janvier 2000
http://www.linux-mandrake.com


Suivant : Systèmes de fichiers et points de montage
Précédent : Auto Install
Retour

(Retour à la table des matières)

Chapitre 9 : Les fichiers de démarrage: init « System V »


Dans la tradition Unix, il existe deux schémas de démarrage du système: le schéma BSD et le schéma « System V », tous les deux nommés d'après le système Unix qui les a implémentés pour la première fois (resp. Berkeley Software Distribution (« distribution de logiciels de Berkeley » et AT&T Unix System V). Le schéma BSD est le plus simple, mais le schéma System V, s'il est moins facile à comprendre (c'est le rôle de ce chapitre que de vous le faire comprendre), est nettement plus souple d'utilisation.

Au début fut init

Quand le système démarre, après que le noyau ait tout configuré et monté la racine du système de fichiers, il exécute le programme /sbin/init[22]. init est le père de tous les processus du système, et il est chargé d'amener le système au niveau d'exécution (runlevel) voulu. Nous reviendrons sur les niveaux d'exécution dans la section suivante.

Le fichier de configuration d'init est /etc/inittab. Ce fichier possède sa propre page de manuel (man inittab), mais nous ne décrirons ici que quelques-unes des directives.

La première ligne qui doit attirer l'attention est celle-ci:

si::sysinit:/etc/rc.d/rc.sysinit

Cette directive dit à init que /etc/rc.d/rc.sysinit doit être exécuté à l'initialisation du système avant toute autre chose. Pour déterminer le niveau d'exécution par défaut, init recherche ensuite la ligne contenant l'action initdefault:

id:5:initdefault:

En l'occurrence, donc, init sait que le niveau d'exécution par défaut est 5. Il sait également que pour entrer dans le niveau 5, il lui faudra exécuter la commande suivante:

l5:5:wait:/etc/rc.d/rc 5

Vous constatez que la syntaxe pour chacun des niveaux d'exécution est similaire.

init est également chargé de relancer (respawn) certains programmes que lui seul est en mesure de relancer. C'est le cas, par exemple, de tous les programmes de connexion qui tournent sur chacun des 6 terminaux virtuels[23]. Pour la deuxième console virtuelle, cela donne:

2:2345:respawn:/sbin/mingetty tty2

Les niveaux d'exécution

Tous les fichiers concernant le démarrage du système se trouvent dans le répertoire /etc/rc.d. Voici la liste des fichiers:

$ ls /etc/rc.d
init.d/  rc.local*    rc0.d/  rc2.d/  rc4.d/  rc6.d/
rc*      rc.sysinit*  rc1.d/  rc3.d/  rc5.d/

En premier lieu, comme nous l'avons vu, le fichier rc.sysinit est exécuté. C'est ce fichier qui est chargé de mettre en place la configuration de base de la machine: type du clavier, configuration de certains périphériques, vérification des systèmes de fichiers, etc.

Puis le script rc est exécuté, avec en argument le niveau d'exécution. Nous avons vu que le niveau d'exécution est un simple entier, et pour chaque niveau d'exécution <x> défini, il doit exister un répertoire correspondant rc<x>.d. Dans une installation typique de Linux-Mandrake, vous pouvez donc voir que 6 niveaux d'exécution sont ainsi définis:

Intéressons-nous par exemple au contenu du répertoire rc5.d:

$ ls rc5.d
K15postgresql@  K60atd@      S15netfs@   S60lpd@        S90xfs@
K20nfs@         K96pcmcia@   S20random@  S60nfs@        S99linuxconf@
K20rstatd@      S05apmd@     S30syslog@  S66yppasswdd@  S99local@
K20rusersd@     S10network@  S40crond@   S75keytable@
K20rwhod@       S11portmap@  S50inet@    S85gpm@
K30sendmail@    S12ypserv@   S55named@   S85httpd@
K35smb@         S13ypbind@   S55routed@  S85sound@

Comme vous pouvez le voir, tous les fichiers de ce répertoire sont des liens symboliques et ils ont tous une forme bien particulière. Leur forme générale est

<S|K><ordre><nom_du_service>

Le S signifie Start, « démarrer » le service, et K signifie Kill, « arrêter » le service. Les scripts sont exécutés dans l'ordre des numéros croissants, et si deux scripts ont le même numéro, l'ordre alphabétique prévaut. On peut voir également que chacun de ces liens symboliques pointe vers des scripts situés dans /etc/rc.d/init.d (à l'exception de local), scripts qui sont chargés de contrôler un service bien particulier.

Quand le système entre dans un niveau d'exécution donné, il exécute d'abord les liens K dans l'ordre: rc regarde où pointe le lien, puis appelle le script correspondant avec le seul argument stop. Puis il exécute les scripts S, toujours selon la même méthode, mis à part que le script est appelé avec l'argument start.

Ainsi, sans citer tous les scripts, on peut voir que quand le système entre dans le niveau d'exécution 5, il exécute d'abord K15postgresql, c'est-à-dire /etc/rc.d/init.d/postgresql stop. Puis K20nfs, puis K20rstatd, jusqu'au dernier; ensuite, il exécute tous les scripts S: S05ampd en premier lieu, qui invoque donc /etc/rc.d/init.d/apmd start, et ainsi de suite.

Armé de tout ceci, vous pouvez à votre guise créer un niveau d'exécution entier en quelques minutes, ou empêcher le démarrage ou l'arrêt d'un service en effaçant le lien symbolique correspondant (il existe cependant des programmes d'interfaçage pour ce faire, en particulier tksysv et chkconfig. Le premier est un programme graphique).


Suivant : Systèmes de fichiers et points de montage
Précédent : Auto Install
Retour

Copyright © 2000 MandrakeSoft