Comment fonctionne le processus de démarrage avec ces scripts?

Linux utilise un utilitaire de démarrage particulier, appelé SysVinit. Il est basé sur le concept de niveaux d'exécution. Cela peut être très différent d'un système à un autre; on ne peut donc pas supposer que, parce que cela fonctionne dans <insérer le nom de la distribution>, cela fonctionnera de même dans LFS aussi. LFS a sa propre façon de faire les choses, mais il respecte en général les standards couramment acceptés.

SysVinit (que nous appellerons init à partir de maintenant) fonctionne avec un schéma de niveaux d'exécution. Il y a 7 (de 0 à 6) niveaux d'exécution (en fait, il y en a plus, mais ils servent dans des cas spécifiques, et ne sont en général pas utilisés. La page man de init décrit cela en détail), et chacun d'eux correspond à des choses que l'ordinateur est censé faire quand il démarre. Le niveau d'exécution par défaut est 3. Voici une description des différents niveaux d'exécution tels qu'ils sont souvent implémentés:


0: arrête l'ordinateur
1: mode mono-utilisateur
2: mode multi-utilisateurs sans réseau
3: mode multi-utilisateurs avec réseau
4: réservé pour la personnalisation, sinon identique au 3
5: comme 4, en général utilisé pour une connexion GUI (comme xdm de X ou kdm de KDE)
6: redémarre l'ordinateur

La commande utilisée pour changer de niveau d'exécution est init <niveau d'exécution>, où <niveau d'exécution> est le niveau d'exécution cible. Par exemple, pour redémarrer un ordinateur, un utilisateur lancera la commande init 6. La commande reboot est simplement un alias, comme la commande halt est un alias pour init 0.

Le script /etc/init.d/rcS est exécuté à chaque démarrage de l'ordinateur, avant qu'un quelconque niveau d'exécution soit exécuté, et il lance les scripts listés dans /etc/rcS.d.

Il y a plusieurs répertoires sous /etc qui ressemblent à rc?.d, où ? est le numéro du niveau d'exécution, et rcS.d. Un utilisateur peut regarder dans l'un d'eux (après la fin de ce chapitre, car il n'y a rien pour le moment). Il y a là plusieurs liens symboliques. Certains commencent par K, les autres par S, et tous ont trois chiffres après la lettre initiale. Le K signifie l'arrêt (kill) d'un service, et le S signifie le démarrage (start) d'un service. Les chiffres déterminent l'ordre dans lequel ces scripts sont exécutés, de 000 à 999; plus un nombre est petit, plus il sera exécuté tôt. Quand init bascule dans un autre niveau d'exécution, les services appropriés sont arrêtés, et d'autres sont démarrés.

Les vrais scripts sont dans /etc/init.d. Ils font tout le travail, et les liens symboliques pointent tous vers eux. Les liens d'arrêt et de démarrage pointent vers le même script dans /etc/init.d. Ceci est dû au fait que les scripts peuvent être appelés avec différents paramètres, comme start, stop, restart, reload, status. Quand un lien K est rencontré, le script correspondant est lancé avec l'argument stop. Quand un lien S est rencontré, le script associé est lancé avec l'argument start.

Voici une description de ce que les arguments font réaliser aux scripts:

Modifiez librement la façon dont le processus de démarrage travaille (après tout, c'est votre système LFS, pas le nôtre). Les fichiers fournis ici sont simplement un exemple de la manière dont cela peut être fait proprement (en tout cas, ce que nous considérons comme propre. Vous pouvez ne pas l'aimer ainsi).