Initialisation systéme
par
popularité : 2%
B. Initialisation du système
Le noyau :
-
démarre le processus swapper, PID=0,
-
exécute le script /sbin/pre_init_rc,
-
lance /sbin/rc, qui va utiliser le fichier /etc/inittab pour initialiser le système.
1. Le script /sbin/pre_init_rc
Sert à vérifier l"intégrité du FS root avant son montage.
2. Les états de marche
Lorsqu"il fonctionne, un serveur se trouve toujours dans un état de marche (run-level en anglais) caractérisé par un chiffre (de 0 à 6). Ces états de marche servent à contrôler, à l"aide du fichier /etc/inittab, les applications à démarrer ou à stopper par le processus init.
L’état de marche cible par défaut (3 dans l’exemple) est défini dans le fichier /etc/inittab :
init:3:initdefault |
Il est possible de connaître l’état de marche courant du système :
Chaque ligne du fichier /etc/inittab est construite sur le modèle suivant :
syntaxe :
id :etat(s)_de_marche :action :commande
id | étiquette unique (1 à 4 caractéres) |
etat(s)_de_marche | liste des états de marche pour lesquels la ligne sera considérée. Si vide, la ligne concerne tous les états de marche. |
action | mot clé précisant les modalités d’exécution du programme (parmi : initdefault, wait, boot, bootwait, respawn, ondemand, off, sysinit, powerfail, powerwait, once) |
commande | programme à exécuter |
Lorsque le noyau démarre le processus init, celui-ci lit le fichier /etc/inittab afin de déterminer l’état de marche cible ; puis exécute chaque ligne du fichier à traiter pour l’état de marche concerné :
-
traite d’abord les actions sysinit,
-
traite celles contenant les actions boot ou bootwait ,
-
cherche l’entrée initdefault,
-
puis traite les autres.
En cas de changement ultérieur de niveau de marche, les entrées sysinit, boot et bootwait ne sont pas réexaminées.
Les principales commandes exécutées sont :
/sbin/ioinitrc | initialise les structures de données associées aux périphériques. Si nécessaire, les fichiers spéciaux associés aux nouveaux périphériques sont créés. |
/sbin/bcheckrc | vérifie l’intégrité des FS et lance fsck si nécessaire ; initialise éventuellement le lvm et le mirroring. |
/sbin/rc | gère les applications à lancer/arrêter. |
init /usr/sbin/getty |
affiche le contenu de /etc/issue et génère l’invite de connexion sur le terminal spécifié. |
3. Le script /sbin/rc
Ce script conditionne le démarrage et l’arrêt des applications à un niveau de marche donné : on peut par exemple décider de lancer une application de gestion de base de données au niveau 5 et pas au niveau 4. Une fois la mise en place effectuée, il suffira de sélectionner l’état de marche 5 pour démarrer l’application, et l’état 4 pour la stopper.
En fait, ce paramétrage est à deux étage : il faut décider d’une part dans quel état de marche une application sera éventuellement lancée, et d’autre part si l’on souhaite ou non la lancer.
Toutes les applications à lancer à un niveau donné le seront aussi à tous les niveaux supérieurs.
Toutes les applications à stopper à un niveau donné le seront aussi à tous les niveaux inférieurs.
Les fichiers et répertoires utilisés par /sbin/rc sont les suivants :
L’algorithme de /sbin/rc lors de tout changement de niveau est le suivant :
-
exécution du script /etc/rc.config qui a pour objet de lancer tous les fichiers de configurations stockés dans /etc/rc.config.d.
-
si l’état de marche courant (noté C) et le nouvel état de marche (noté N) sont identiques, rien ne se passe,
-
si le nouvel état de marche est supérieur à l’état de marche courant (l’état de marche C+1 est noté D) :
les scripts /sbin/rcD/S* sont exécutés (avec dans l’ordre les arguments start_msg puis start),
le système passe à l’état de marche D ; si D ¹ N ,le processus est répété.
-
si le nouvel état de marche est inférieur à l’état de marche courant (l’état de marche C-1 est noté B) :
les scripts /sbin/rcD/K* sont exécutés (avec dans l’ordre les arguments stop_msg puis stop),
le système passe à l’état de marche B ; si B ¹ N , le processus est répété.
Dans la pratique, les scripts du répertoire /sbin/init.d savent traiter quatre arguments distincts :
-
start_msg : affichage d’un message d’information de lancement sur l’écran
-
start : lancement du programme
-
stop_msg : affichage d’un message d’information d’arrêt sur l’écran
-
stop : arrêt du programme
Un squelette de programme /sbin/init.d/template sert de base pour la création de nouveaux scripts :
|
De plus, l’exécution des commandes d’arrêt et démarrage est conditionnée par la valeur de variables définies dans le script de même nom situé sous /etc/rc.config.d :
#script de contrôle du lancement de <specific> # CONTROL_VARIABLE=0 CONTROL_VARIABLE=1 |
Les codes de retour des scripts de /sbin/init.d sont obligatoirement : 0 si ok, 1 si erreur, 2 si non exécuté (ignoré), 3 si exécution normale mais nécessitant un redémarrage pour prendre en compte les modifications.
Les fichiers des répertoires /etc/rcN.d/ commençant par S (Start) sont lancés dans l’ordre de présence dans le répertoire : le numéro les préfixant sert donc à fixer l’ordre de lancement ; il ne faut pas les modifier, et utiliser pour ses scripts les numéros réservés commençant par 9. Le principe est le même pour les fichiers K (kill), les numéros réservés commencent par 1.