Linux-Mandrake: |
Guide de l'utilisateur |
et Manuel de référence |
MandrakeSoft
Janvier 2000 http://www.linux-mandrake.com
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.
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
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).