Tous les fichiers qui participent au
démarrage du système se trouvent dans le répertoire
/etc/rc.d
. En voici la liste :
$ ls /etc/rc.d init.d/ rc0.d/ rc2.d/ rc4.d/ rc6.d/ rc.local* rc.sysinit* rc* rc1.d/ rc3.d/ rc5.d/ rc.alsa_default* rc.modules*
En premier lieu, comme nous l'avons vu, le fichier
rc.sysinit
est exécuté. C'est lui 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 souhaité. Nous avons vu
que le niveau d'exécution est un simple entier et que pour chaque
niveau d'exécution <x>
défini, il doit exister
un répertoire correspondant rc<x>.d
. Dans
une installation typique de Mandrakelinux, vous pouvez donc voir
que 6 niveaux d'exécution sont ainsi définis :
1 : mode mono-utilisateur ; à utiliser en cas de gros pépin !
2 : mode multi-utilisateur, sans réseau ;
5 : comme le niveau d'exécution 3, mais avec le lancement de l'interface de login graphique ;
Intéressons-nous de plus près au contenu du
répertoire rc5.d
, par exemple :
$ls rc5.d K59dund@ S12syslog@ S20xfs@ S34mDNSResponder@ S90crond@ K59hidd@ S13partmon@ S24messagebus@ S40atd@ S95kheader@ K59pand@ S14hplip@ S25bluetooth@ S56ntpd@ S99local@ S01udev@ S15cups@ S25haldaemon@ S56rawdevices@ S05harddrake@ S15mdadm@ S25netfs@ S75keytable@ S10network@ S17alsa@ S30dm@ S80postfix@ S12pcscd@ S18sound@ S33nifd@ S85numlock@
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 (soit démarrer) le
service et K
signifie
Kill (soit 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, c'est l'ordre alphabétique qui prévaudra.
On peut voir également que chacun de ces liens symboliques pointe vers
des scripts situés dans /etc/init.d
(à
l'exception du script local qui est chargé 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 vérifie
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 lorsque le système entre dans le niveau d'exécution 5,
il exécute d'abord la commande K15dund,
c'est-à-dire /etc/init.d/dund stop. Ensuite, il
exécute K59hidd, puis K59pand,
etc., jusqu'à la dernière commande. Enfin, il exécute tous les scripts
S
: S01udev en premier
lieu ; ce qui invoque donc /etc/init.d/udev
start et ainsi de suite.
Armé de tout ceci, vous pouvez à votre guise créer un niveau d'exécution entier en quelques minutes (en utilisant le niveau 4, par exemple), 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 graphiques pour ce faire, en particulier drakxservices (voir Configuration des services au démarrage avec DrakXServices dans le Guide de démarrage) qui utilise une interface graphique, ou chkconfig pour une utilisation en ligne de commande.