Page suivante Page précédente Table des matières

6. Init

Je ne parlerai que du style d'initialisation ``System V'' que les systèmes Linux utilisent le plus souvent. Il existe des alternatives. En fait, vous pouvez mettre n'importe quel programme dans /sbin/init, que le noyau exécutera lorsqu'il aura fini de se charger.

Le travail d'init est de faire en sorte que tout se lance comme il faut. Il vérifie que les systèmes de fichier sont en bon état et les monte. Il démarre les démons (``daemons'') qui enregistrent les messages système, gèrent le réseau, distribuent les pages web, écoutent les signaux de la souris, etc. Init démarre aussi les processus getty qui vous donnent l'invite de login sur vos terminaux virtuels.

Il y a un processus compliqué concernant le changement de niveau d'exécution ("run-levels"), mais je vais sauter tout ça, et ne parler que du démarrage du système.

Init lit le fichier /etc/inittab, qui lui dit quoi faire. Typiquement, la première chose demandée est l'exécution d'un script d'initialisation. Le programme qui exécute (ou interprète) ce script est bash, le même programme qui vous donne la ligne de commande. Sur les systèmes Debian, le script d'initialisation est /etc/init.d/rcS, sur Red Hat, /etc/rc.d/rc.sysinit. C'est là que les systèmes de fichiers sont vérifiés puis montés, l'horloge mise à l'heure, le fichier ou la partition d'échange (swap) activés, les noms de machines définis, etc.

Ensuite, un autre script est invoqué pour nous placer dans le niveau d'exécution par défaut. Cela implique simplement le démarrage d'un ensemble de sous-systèmes. Il existe un ensemble de sous-répertoires /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d sous Red Hat, ou /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d sous Debian, correspondant aux run-levels. Si nous entrons dans le niveau d'exécution 3 sur un système Debian, le script exécute tous les scripts de /etc/rc3.d commençant par `S' (pour Start). Ces scripts sont en réalité des liens vers un autre répertoire appelé généralement init.d.

Donc, le script de notre niveau d'exécution est appelé par init, et recherche dans un répertoire des scripts dont le nom débute par la lettre `S'. Il se peut qu'il tombe sur S10syslog en premier. Les chiffres indiquent au script du niveau l'ordre dans lequel il doit les lancer. En l'occurence, S10syslog est lancé en premier parce qu'il n'y pas de script commençant par S00 ... S09. Mais S10syslog est en fait un lien vers /etc/init.d/syslog qui est un script chargé du démarrage et de l'arrêt du system logger (enregistreur de messages systèmes). Parce que le lien commence par un `S', le script du run-level sait qu'il doit exécuter le script syslog avec le paramètre "start". Il y a aussi des liens dont le nom débute par `K' (pour Kill), qui spécifient ce qu'il faut arrêter, et dans quel ordre, lorsque l'on entre dans le niveau d'exécution.

Pour changer ce que le sous-système lance par défaut, vous devez configurer ces liens dans le répertoire rcN.d, ou N est le niveau d'exécution par défaut défini dans votre fichier inittab.

La dernière chose importante qu'effectue init est de démarrer les gettys [NdRel :en pratique, souvent des mingettys)]. Ceux-ci sont ressuscités (``respawned''), ce qui signifie qu'ils sont automatiquement relancés par init s'ils viennent à se terminer. La plupart des distributions fournissent six terminaux virtuels. Il se peut que vous souhaitiez en enlever pour économiser de la mémoire, ou en ajouter pour pouvoir lancer beaucoup de choses à la fois, et passer rapidement de l'un à l'autre. Vous pourriez aussi avoir besoin de lancer un getty vers un terminal texte ou vers un modem. Vous devez alors éditer inittab.

6.1 Configuration

/etc/inittab, qui est le fichier de configuration au sommet de la "hiérarchie" des fichiers de configuration.

Les répertoires rcN.d, où N = 0, 1,..., 6 détermine les sous-systèmes à lancer.

Quelque part dans les scripts invoqués par init, se trouve la commande mount -a. Cela signifie : "Monte tous les systèmes de fichiers censés être montés". Le fichier /etc/fstab définit ce qui est censé être monté. Si vous souhaitez changer ce qui est monté par défaut au démarrage, c'est le fichier que vous devez modifier. Il existe une page de manuel pour fstab.

6.2 Exercices

Trouvez le répertoire rcN.d du niveau d'exécution par défaut de votre système puis faites un ls -l pour voir les fichiers pointés par les liens.

Changez le nombre de gettys tournant sur votre système.

Retirez tous les sous-systèmes dont vous n'avez pas besoin de votre niveau d'exécution par défaut.

Essayez de déterminer le minimum nécessaire pour démarrer.

Fabriquez une disquette avec Lilo, un noyau et un programme statique affichant "Bonjour tout le monde !" nommé /sbin/init, puis regardez-la démarrer et dire bonjour.

Regardez attentivement votre système démarrer, et notez les événements signalés. Ou imprimez une section de votre journal système /var/log/messages à partir du moment où votre système a démarré. Ensuite, en partant d'inittab, explorez tous les scripts et essayez de voir quel code fait quoi. Vous pouvez également ajouter des messages, comme

        echo "Hello, moi c'est rc.sysinit"

C'est aussi un bon exercice pour apprendre le langage de script de Bash, certains scripts étant assez compliqués. Ayez un bon guide de bash à portée de main (NDT : "man bash" devrait suffire, faute de mieux).

6.3 Plus d'informations.


Page suivante Page précédente Table des matières