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

Linux utilise un système de démarrage nommé SysVinit. Il est basé sur le concept de niveaux d'exécution. Il peut être extrêmement différent d'un système à l'autre et on ne peut donc pas supposer que si cela a fonctionné avec <telle distribution>, cela devrait aussi fonctionner de la même manière avec LFS. LFS fait les choses à sa manière, mais respecte généralement les standards établis.

SysVinit (que nous nommerons dorénavant init) se base pour fonctionner sur un système de niveaux d'exécution. Ils sont au nombre de 7 (de 0 à 6) (en réalité, il y a plus de niveaux d'exécution que cela, mais ils sont réservés à des cas spéciaux et ne sont généralement pas utilisés. La page man de init décrit ces détails), et chacun d'eux correspond à ce que l'ordinateur est supposé faire lorsqu'il démarre. Le niveau d'exécution par défaut est le niveau 3. Voici la description des différents niveaux d'exécution tels qu'ils sont fréquemment implémentés :

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

L'instruction 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 désiré. Par exemple, pour redémarrer l'ordinateur, un utilisateur lancera l'instruction init 6. L'instruction reboot est simplement un alias, tout comme l'instruction halt est un alias pour init 0.

Il existe un certain nombre de répertoires sous /etc qui ressemblent à rc?.d où ? est le niveau d'exécution et rcsysinit.d qui contient un certain nombre de liens symboliques. Certains commencent par un K, les autres par un S et tous ont deux chiffres après la lettre initiale. Le K signifie d'arrêter (kill) un service, et le S (start) d'en démarrer un. Les chiffres déterminent l'ordre d'exécution des scripts, de 00 à 99 ; plus un nombre est petit, plus tôt il sera exécuté. Lorsque init passe à un autre niveau d'exécution, les services appropriés sont arrêtés et d'autres sont démarrés.

Les véritables scripts sont dans /etc/rc.d/init.d. Ils font tout le travail et les liens symboliques pointent vers eux. Les liens d'arrêt et de démarrage pointent vers le même script dans /etc/rc.d/init.d. Ceci est dû au fait que le script peut être appelé avec des paramètres différents tels que start, stop, restart, reload, status. Quand un lien K est rencontré, le script approprié est exécuté avec l'argument stop. Quand un lien S est rencontré, le script idoine est exécuté avec l'argument start.

Il existe une exception. les liens commençant par un S dans les répertoires rc0.d et rc6.d ne feront rien démarrer. Ils seront appelés avec le paramètre stop pour arrêter quelque chose. La logique derrière cela est que lorsque l'on est sur le point de redémarrer ou d'arrêter le système, on ne désire rien démarrer, seulement arrêter le système.

Voici la description de ce que ces arguments font réaliser aux scripts :

Modifiez librement la manière dont le système de démarrage fonctionne (après tout, il s'agit de votre système LFS). Les fichiers donnés ici sont simplement des exemples de la manière de faire tout cela proprement (quoi qu'il en soit, vous pouvez détester ce que nous considérons comme propre).