Linux utilise un service de démarrage spécial nommé SysVinit qui est basé sur un concept de niveaux d'exécution. Cela peut être bien différent d'un système à un autre, du coup, il ne peut pas être supposé que, parce que cela fonctionne dans une distribution Linux particulière, cela fonctionnera de la même façon dans CLFS. CLFS a sa propre façon de le faire mais il respecte généralement les standards établis.
SysVinit (qui sera nommé par la suite “init”)
fonctionne en utilisant un schéma de niveaux d'exécution. Ils sont au
nombre de sept (numérotés de 0 à 6). En fait, il en existe plus mais
ils sont pour des cas spéciaux et ne sont généralement pas utilisés.
Voir init(8)
pour plus de détails. Chacun d'entre
eux correspond à des actions que l'ordinateur est supposé effectuer
lorsqu'il démarre. Le niveau d'exécution par défaut est 3. Voici les
descriptions sur l'implémentation des différents niveaux
d'exécution :
0: arrête l'ordinateur
1: mode simple utilisateur
2: mode multi-utilisateur sans réseau
3: mode multi-utilisateur avec réseau
4: réservé pour la personnalisation, sinon identique à 3
5: identique à 4, il est habituellement utilisé pour la connexion GUI
(comme xdm de X ou kdm de KDE)
6: redémarre l'ordinateur
La commande utilisée pour modifier le niveau d'exécution est
init
[niveau_execution]
, où
[niveau_execution]
est le niveau
d'exécution cible.
Par exemple, pour redémarrer l'ordinateur, un utilisateur pourrait
lancer la commande init 6 qui est un alias de la
commande reboot. De même, init 0
est un alias pour la commande halt.
Il existe un certain nombre de répertoires sous
/etc/rc.d
qui ressemble à
rc?.d
(où ? est le numéro du
niveau d'exécution) et
rcsysinit.d
, tous contenant un
certain nombre de liens symboliques. Certains commencent avec un
K, les autres avec un S, et
tous ont deux nombres après la lettre initiale. Le K signifie l'arrêt
(kill) d'un service et le S son lancement (start). Les nombres
déterminent l'ordre dans lequel les scripts sont exécutés, de 00 à
99—plus ce nombre est petit, plus tôt le script correspondant
sera exécuté. Quand init bascule sur un autre
niveau d'exécution, les services appropriés sont soit lancé soit tués,
suivant le niveau d'exécution choisi.
Les vrais scripts sont dans
/etc/rc.d/init.d
. Ils font le
vrai boulot et les liens symboliques pointent tous vers eux. Les liens
d'arrêt et de lancement pointent vers le même script dans
/etc/rc.d/init.d
. Ceci est dû
au fait que les scripts peuvent être appelés avec différents
paramètres comme start
,
stop
, restart
,
reload
et status
. Quand
un lien K est rencontré, le script approprié est lancé avec l'argument
stop
. Quand un lien S est rencontré, le script
approprié est lancé avec l'argument
start
.
Il existe une exception à cette explication. Les liens
commençant avec un S dans les répertoires
rc0.d
et
rc6.d
ne lanceront aucun
service. Ils seront
appelés avec l'argument stop
pour arrêter
quelque chose.
La logique derrière ceci est que, quand un utilisateur va redémarrer
ou arrêter le système, rien ne doit être lancé. Le système a seulement
besoin d'être stoppé.
Voici des descriptions de ce que font les arguments des scripts :
start
Le service est lancé.
stop
Le service est stoppé.
restart
Le service est stoppé puis de nouveau lancé.
reload
La configuration du service est mise à jour. Ceci est utilisé après que le fichier de configuration d'un service a été modifié, quand le service n'a pas besoin d'être redémarré.
status
Indique si le service est en cours d'exécution ainsi que les PID associés.
Vous êtes libre de modifier la façon dont le processus de démarrage fonctionne (après tout, c'est votre système LFS). Les fichiers donnés ici sont un exemple d'une façon de faire.