Init
| Fiche express | |
|---|---|
| Domaine | Séquence de démarrage Linux (SysV init) |
| Processus | init (PID 1)
|
| Configuration | /etc/inittab, scripts /etc/rc<N>.d/
|
| Contexte | RHEL/CentOS 5/6, Debian classique — remplacé par systemd sur RHEL7+ |
| Voir aussi | Chkconfig · Systemctl |
init est le premier processus lancé par le noyau au démarrage (PID 1). Sous SysV init
classique (RHEL/CentOS 5/6, anciennes Debian), il lit sa configuration dans
/etc/inittab et démarre les services par runlevel via les scripts
/etc/rc<N>.d/. Sur RHEL7 et la plupart des distributions récentes, ce
mécanisme est remplacé par systemd — voir Systemctl — mais comprendre la séquence SysV
reste utile pour les systèmes legacy et pour l'activation des services via Chkconfig.
Séquence de démarrage
- Le BIOS/UEFI recherche le périphérique de démarrage et passe la main à l'IPL (Initial
Program Loader), un petit programme tenant dans les 446 premiers octets du disque (le Master Boot Record, avant la table des partitions).
- L'IPL a pour seule tâche de localiser et charger un chargeur de démarrage, typiquement GRUB.
- GRUB lit sa configuration (
/boot/grub/menu.lst, ougrub.cfgsur les
systèmes plus récents avec GRUB2) pour localiser le ou les systèmes installés : chemin du kernel, partition contenant la racine (/), et ramdisk initial (initrd) contenant les pilotes nécessaires au montage du système.
- Le noyau démarre : il détecte les périphériques, initialise leurs pilotes, monte la racine
(/) en lecture seule, puis lance le premier processus,init.
initlit sa configuration dans/etc/inittab. Il lance d'abord le
script indiqué par la ligne si::sysinit:..., qui effectue les tâches de
préparation du système :
- activer udev et SELinux
- appliquer les paramètres noyau définis dans
/etc/sysctl.conf - régler l'horloge système
- charger les tables de clavier
- activer les partitions swap
- définir le nom d'hôte
- vérifier et remonter la racine (
/) en lecture-écriture - activer les périphériques RAID et LVM
- activer les quotas disque
- vérifier et monter les autres systèmes de fichiers
- nettoyer les stale locks et fichiers PID résiduels
- Puis
initexécute tous les scripts du runlevel par défaut, dans
/etc/rc<N>.d/.
En résumé
- BIOS/UEFI : trouve le disque de démarrage et localise l'IPL (configuration dans le
CMOS/NVRAM).
- IPL : localise et charge un chargeur de démarrage tel que GRUB (code dans le MBR).
- GRUB : sait où se trouvent l'image du kernel et l'initrd à charger (configuration dans
/boot/grub/menu.lstougrub.cfg).
- Kernel : détecte et charge les pilotes des périphériques nécessaires au démarrage.
- init : premier processus lancé (PID 1) ; il exécute à son tour les scripts qui
démarrent le système et les démons (configuration dans /etc/inittab).
Runlevels
Les runlevels standard de SysV init :
| Runlevel | Signification |
|---|---|
| 0 | Arrêt (halt) |
| 1 | Mode mono-utilisateur (rescue) |
| 2 | Multi-utilisateur sans réseau (variable selon distribution) |
| 3 | Multi-utilisateur avec réseau, sans interface graphique |
| 4 | Non utilisé / personnalisable |
| 5 | Multi-utilisateur avec réseau et interface graphique |
| 6 | Redémarrage (reboot) |
Activer/désactiver un service (RHEL/CentOS)
Sous RHEL/CentOS 5/6, la gestion des services par runlevel se fait avec chkconfig
(référence complète des commandes : Chkconfig) :
chkconfig --list # lister les services et leur état par runlevel
chkconfig <service> off # ne pas démarrer le service
chkconfig <service> on # démarrer le service
chkconfig --level 45 <service> # activer le service dans les runlevels 4 et 5
Activer/désactiver un service (Debian)
Sous Debian classique (avant systemd), l'équivalent est update-rc.d :
update-rc.d <service> defaults
Concrètement, activer un service dans le runlevel R revient à créer le lien
symbolique /etc/rc<R>.d/S<xy><service> pointant vers
../init.d/<service>, où xy est le numéro d'ordre assigné au
service (généralement fixé par le paquet à l'installation). Pour désactiver le service sans le
supprimer, on renomme ce lien en le faisant commencer par K au lieu de
S, avec un numéro d'ordre égal à 100 - xy (afin d'arrêter les
services dans l'ordre inverse de leur démarrage).
Gérer ces liens à la main est fastidieux ; l'utilitaire sysv-rc-conf propose une
interface plus simple pour activer/désactiver les services par runlevel.
Voir aussi
- Chkconfig — gestion des services sous SysV init (RHEL/CentOS 5/6), référence complète
des commandes
- Systemctl — remplace SysV init sur RHEL7+ (targets au lieu de runlevels)