Académique Documents
Professionnel Documents
Culture Documents
Prof. M. RIDOUANI
Objectifs
• Personnalisation du processus de démarrage
système
– interroger et modifier le comportement des
services systèmes dans différents niveaux
d'exécution ;
– configurer la procédure de démarrage des
services.
2
Pr. RIDOUANI: Chapitre 2. Démarrage du système
Plan
0. Le processus de démarrage d'un système Linux
1. Processus init et niveau d'exécution
2. Gestion des services
3. Gestion des services sous Red Hat
4. Gestion des services sous Debian
5. Upstart
6. Systemd
7. Redémarrer et éteindre un système
3
Pr. RIDOUANI: Chapitre 2. Démarrage du système
0. Le processus de démarrage d'un système Linux
• Le démarrage du système implique quatre programmes lancés
successivement : le BIOS (Basic Input Output System), le chargeur de
démarrage, le noyau et le processus init.
• Le BIOS est le premier programme exécuté, il réside au niveau du ROM.
Il charge les 512 premiers octets, ces 512 octets constituent le secteur
d'amorçage ou le Master Boot Record (MBR).
• Le MBR contient plusieurs informations sur les partitions du disque. Il
inclut aussi le chargeur de démarrage (ou une partie du chargeur de
démarrage). Le chargeur de démarrage Grub (Grand Unified
Bootloader) est utilisé sur la plupart des distributions Linux. Il est
décomposé en deux parties. La première partie réside sur le MBR, elle
charge la deuxième partie qui se trouve dans une partition du disque.
Une fois que la deuxième partie du Grub est chargée, une interface est
affichée permettant à l'utilisateur de choisir quel système d'exploitation
démarrer.
• Le chargeur de démarrage exécute le noyau. Ce dernier continue le
démarrage de la machine, il détecte et initialise les périphériques,
monte la partition racine et démarre le processus init.
4
Pr. RIDOUANI: Chapitre 2. Démarrage du système
0. Le processus de démarrage d'un système Linux
5
Pr. RIDOUANI: Chapitre 2. Démarrage du système
1. Processus init et niveau d'exécution
• Le processus init est le premier processus utilisateur créé par le
noyau lors du démarrage du système (son PID=1). Il consulte le
fichier /etc/inittab pour décider quel niveau d'exécution
démarrer. Les niveaux d'exécution pour la distribution Red Hat et
ses dérivés sont :
– 0 - Arrêt
– 1- Mode mono-utilisateur ou maintenance
– 2 - mode console, multi-utilisateurs, sans le support réseau
– 3 - mode multi-utilisateurs avec le support réseau
– 4 - Inutilisé
– 5 - X11 -> mode multi-utilisateurs avec interface graphique
– 6 - Redémarrage
7
Pr. RIDOUANI: Chapitre 2. Démarrage du système
1. Processus init et niveau d'exécution
• Runlevel (les niveaux d’exécution)
Lorsque votre système Linux démarre, vous apercevez (en appuyant sur la touche <ESC> afin de voir la
version « verbeuse » du démarrage) divers services qui sont chargés. Ce sont les programmes du niveau
d'exécution sur lequel votre système fonctionne qui sont chargés à partir du répertoire représentant le
niveau d'exécution du système.
• Les répertoires des niveaux d’exécution sont :
– Run level 0 – /etc/rc.d/rc0.d/
– Run level 1 – /etc/rc.d/rc1.d/
– Run level 2 – /etc/rc.d/rc2.d/
– Run level 3 – /etc/rc.d/rc3.d/
– Run level 4 – /etc/rc.d/rc4.d/
– Run level 5 – /etc/rc.d/rc5.d/
– Run level 6 – /etc/rc.d/rc6.d/
• Dans ces répertoires, on retrouve des noms de programme qui commencent par la lettre S et K.
• Ceux qui commencent par la lettre S sont exécutés au démarrage du système (la lettre S pour « startup »
= démarrage).
• Ceux qui commencent par la lettre K sont exécutés à l'arrêt du système (la lettre K pour « kill » = arrêt).
• De plus, dans le nom de ces programmes, il y a un chiffre après la lettre S ou K. Ce chiffre indique l'ordre
d'exécution de chaque programme lors du démarrage ou de l'arrêt du système. Par exemple, S12syslog
est le 12e programme qui s'exécutera au démarrage du système.
9
Pr. RIDOUANI: Chapitre 2. Démarrage du système
2. Gestion des services
• Les niveaux d'exécution sont utilisés par le système lors du
démarrage pour savoir quels services démarrer et quels services
arrêter.
• Par exemple les fichiers dans le répertoire /etc/rcN.d sont des
liens symboliques vers des scripts stockés dans le répertoire
/etc/init.d. Ces scripts contiennent les procédures pour démarrer,
arrêter ou déterminer l’état de chaque service
– Tous les scripts préfixés par la lettre ‘K’ sont exécutés avec l’argument ‘stop’
– Tous les scripts préfixés par la lettre ‘S’ sont exécutés avec l’argument ‘start’
– ‘numéro’ détermine l’ordre d’exécution.
– Bien entendu les scripts ‘K’ sont exécutés avant les scripts ‘S’
– Par exemple le script ‘K15httpd’ est exécuté avant ‘K20nfs’ et le script ‘S08iptables’ est
exécuté avant ‘S55sshd’
lrwxrwxrwx. 1 root root 15 janv. 10 10:33 K15httpd -> ../init.d/httpd
lrwxrwxrwx. 1 root root 13 janv. 10 10:34 K20nfs -> ../init.d/nfs
lrwxrwxrwx. 1 root root 18 janv. 10 10:28 S08iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 14 janv. 10 10:34 S55sshd -> ../init.d/sshd 10
Pr. RIDOUANI: Chapitre 2. Démarrage du système
2. Gestion des services
• Les services peuvent être lancés à partir des scripts du répertoire /etc/init.d.
Ces scripts peuvent être appelés avec différents arguments :
– start : pour démarrer le service ;
– stop : pour arrêter le service ;
– restart : pour arrêter puis redémarrer le service ;
– reload : pour envoyer un signal SIGHUP au processus du service en cours d'exécution. Ce
signal le force à relire ses fichiers de configuration ;
– status : indique si le service est en cours d'exécution.
11
Pr. RIDOUANI: Chapitre 2. Démarrage du système
3. Gestion des services sous Red Hat
• Le programme /etc/rc.d/rc exécutant tous les scripts présents dans le
répertoire du runlevel, il suffira d’ajouter un lien dans le répertoire vers le
script adéquat pour lancer ou arrêter un service lorsque le système entre dans
ce niveau d’exécution.
• Il existe des outils en ligne de commandes ou avec une interface graphique qui
permettent l’ajout et la suppression de services au démarrage
• Sous Redhat et ses dérivés on utilise la commande chkconfig pour gérer un
service et maintenir les liens symboliques vers les scripts de démarrage dans
les répertoires /etc/rcN.d
• Il faut les deux lignes suivantes au début de chaque script.
# chkconfig: [niveau_exécution] [num_start] [num_kill]
# description: [descriptif du script]
• Exemple:
# chkconfig: 2345 10 90
# description: Commentaires libres
12
Pr. RIDOUANI: Chapitre 2. Démarrage du système
3. Gestion des services sous Red Hat
• Gérer et visualiser l’état d’un service
Syntaxe de la commande chkconfig
chkconfig [--options] [service]
chkconfig [--level niveaux] service on|off
13
Pr. RIDOUANI: Chapitre 2. Démarrage du système
4. Gestion des services sous Debian
• Sous Debian et ses dérivés on utilise la commande update-rc.d pour gérer un
service et maintenir les liens symboliques vers les scripts de démarrage dans
les répertoires /etc/rcN.d
• Gérer et visualiser l’état d’un service
Syntaxe de la commande update-rc.d
update-rc.d nom_service { start | stop } numéro_sequence numéros_niveaux_execution .
update-rc.d nom_service { enable | disable | defaults | remove }
14
Pr. RIDOUANI: Chapitre 2. Démarrage du système
5. Upstart
• Plusieurs distributions Linux récentes, y compris les dernières versions d'Ubuntu
et de Fedora, ont remplacé le système classique init d’UNIX système V, SysV init,
basé sur les niveaux d'exécution, par un nouveau système Upstart. Upstart est
un système de gestion de services fonctionnant avec les événements. Il supervise
les services pendant que le système fonctionne. Ainsi il démarre ou arrête des
services en réponse aux événements tels que l'ajout d'un périphérique.
• Pour un besoin de compatibilité, il émule également les niveaux d'exécution
traditionnels de init.
• Un système qui utilise Upstart remplace à la fois le fichier /etc/inittab et les
répertoires spécifiques des niveaux d'exécution par les scripts placés dans le
répertoire /etc/init (ce répertoire a été appelé /etc/event.d sur des versions
antérieures d'Upstart).
15
Pr. RIDOUANI: Chapitre 2. Démarrage du système
6. Systemd
• systemd est une alternative au démon init de System V. Il est spécifiquement
conçu pour le noyau Linux. Il a pour but d’offrir un meilleur cadre pour la gestion
des dépendances entre services, de permettre le chargement en parallèle des
services au démarrage, et de réduire les appels aux scripts shell.
• Gérer et visualiser l’état d’un service
Syntaxe de la commande systemctl
systemctl status unit
systemctl enable | disable unit
systemctl start | stop | restart | reload unit
16
Pr. RIDOUANI: Chapitre 2. Démarrage du système
7. Redémarrer et éteindre un système
17
Pr. RIDOUANI: Chapitre 2. Démarrage du système