Topic à L’examen
101: LPI101
System Architecture
Weight: 3
Description:
Candidates should be able to manage the SysVinit runlevel or systemd boot target of the
system. This objective includes changing to single user mode, shutdown or rebooting the
system.
Candidates should be able to alert users before switching runlevels / boot targets and properly
terminate processes. This objective also includes setting the default SysVinit runlevel or
systemd boot target. It also includes awareness of Upstart as an alternative to SysVinit or
systemd.
Key Knowledge Areas:
●
Set the default runlevel or boot target.
●
Change between runlevels / boot targets including single user mode.
●
Shutdown and reboot from the command line.
●
Alert users before switching runlevels / boot targets or other major system events.
●
Properly terminate processes.
●
Awareness of acpid.
4
SysVinit
Étapes du démarrage d'un ordinateur sous Linux avec le système d'initialisation System V
5
SysVinit
●
/sbin/init : programme chargé de la gestion des niveaux d’exécution et des
démons/ressources associés .
●
Lors de l’initialisation du système, le programme init identifie le niveau d’exécution
requis, défini par un paramètre du noyau ou dans le fichier /etc/inittab, et charge les
scripts correspondants qui y sont référencés pour le niveau d’exécution donné.
●
Chaque niveau d’exécution peut être associé à une série de fichiers de services,
généralement des scripts dans le répertoire /etc/init.d/.
●
Tous les scripts contenus dans les différents répertoires /etc/rcX.d ne sont que des
liens symboliques, créés à l'installation du paquet concerné par le programme
update-rc.d, et menant vers les scripts réels, stockés sous /etc/init.d/.
6
SysVinit
inittab
●
syntaxe :
id:niveaux:action:processus
●
Id : un nom générique comportant
jusqu’à quatre caractères, utilisé
pour identifier l’entrée.
●
Niveaux : une liste de numéros
de niveaux d’exécution pour
lesquels une action spécifiée doit
être exécutée.
7
SysVinit
●
Action : définit comment init va exécuter le processus indiqué par le terme
processus. Les actions disponibles sont les suivantes :
➔
boot : Le processus sera exécuté lors de l’initialisation du système. Le champ
niveaux est ignoré.
➔
Bootwait : Le processus sera exécuté pendant l’initialisation du système et init
attendra qu’il se termine pour continuer. Le champ niveaux est ignoré.
➔
sysinit : Le processus sera exécuté après l’initialisation du système, quel que soit
le niveau d’exécution. Le champ niveaux est ignoré.
➔
wait : Le processus sera exécuté pour les niveaux d’exécution donnés et init
attendra qu’il se termine pour continuer.
➔
respawn : Le processus sera relancé s’il est interrompu.
➔
ctrlaltdel :Le processus sera exécuté lorsque le processus init reçoit le signal
SIGINT, déclenché lorsque la séquence de touches Ctrl+Alt+Del est actionnée.
8
SysVinit
La lettre N dans la sortie montre que le niveau d’exécution n’a pas changé depuis le dernier
démarrage.
init et telinit
●
init peut être utilisé pour basculer à chaud entre les niveaux d’exécution d’un système, sans qu’il
soit nécessaire de redémarrer.
●
telinit peut également être utilisée pour basculer d’un niveau à l’autre. Par exemple, les
commandes telinit 1, telinit s ou telinit S feront passer le système au niveau d’exécution 1.
/etc/init.d/
●
Les scripts utilisés par init pour configurer chaque niveau d’exécution sont rangés dans le
répertoire /etc/init.d/.
●
Chaque niveau d’exécution dispose d’un répertoire associé dans /etc/, nommé /etc/rc0.d/,
/etc/rc1.d/, /etc/rc2.d/, etc., avec les scripts censés être exécutés au démarrage du niveau
d’exécution correspondant.
●
Les fichiers contenus dans ces répertoires ne sont que des liens symboliques vers les scripts
réels dans /etc/init.d/.
10
SysVinit
●
Nom de lien : [SK]NNservice
➔
S : lance le script avec l'argument start (démarrage du service)
➔
K : lance le script avec l'argument stop (arrêt du service)
➔
NN : est un rang qui fixe l'ordre dans lequel les scripts sont lancés
sam@sam-ThinkPad-E14:/etc/rc0.d$ ls
K01alsa-utils K01irqbalance K01speech-dispatcher
K01atd K01kerneloops K01spice-vdagent
[…]
sam@sam-ThinkPad-E14: /etc/rc5.d$ ls
K01apport S01cups-browsed S01rsync
K01speech-dispatcher S01dbus S01rsyslog
S01acpid S01docker S01saned
S01anacron S01gdm3 S01spice-vdagent
S01atd S01grub-common S01unattended-upgrades
11
systemd
●
Les ressources et les services du système sont désignés sous le nom d’unités (units)
par systemd.
●
Une unité est composée d’un nom, d’un type et d’un fichier de configuration
correspondant : L’unité pour un processus de serveur _httpd (comme le serveur web
Apache) sera httpd.service sur les distributions de la famille Red Hat et son fichier
de configuration sera également appelé httpd.service (sur les distributions de la
famille Debian, cette unité est appelée apache2.service).
unités systemd
●
Service : pour les ressources actives du système qui peuvent être initiées,
interrompues et rechargées.
●
Socket : peut être un socket de système de fichiers ou un socket réseau. Toutes les
unités socket ont une unité service correspondante, chargée lorsque le socket est
sollicité.
12
systemd
●
device : Une unité device est associée à un périphérique matériel identifié par le noyau. Un
périphérique ne sera considéré comme une unité systemd que s’il existe une règle udev à
cet effet. Une unité device peut être utilisée pour résoudre les dépendances de configuration
lorsque certains composants matériels sont détectés, étant donné que les propriétés de la
règle udev peuvent être utilisées comme paramètres pour l’unité device.
●
mount : Une unité mount est une définition de point de montage dans le système de fichiers,
similaire à une entrée dans /etc/fstab.
●
automount : Une unité automount est également une définition de point de montage dans le
système de fichiers, mais montée automatiquement. Chaque unité automount dispose d’une
unité mount correspondante, qui est lancée lors de l’accès au point de montage automount.
●
Target : Une unité target (cible) est un regroupement d’autres unités, gérées comme une
seule unité.
●
Snapshot : Une unité snapshot est un état sauvegardé du gestionnaire systemd (non
disponible sur toutes les distributions Linux).
13
systemd
Systemctl
●
systemctl start unit.service : Démarre unit.
●
systemctl stop unit.service : Arrête unit.
●
systemctl restart unit.service : Relance unit.
●
systemctl status unit.service : Affiche l’état de unit, y compris l’état d’activation.
●
systemctl is-active unit.service : Affiche active si `unit`est en état de marche ou
inactive dans le cas contraire.
●
systemctl enable unit.service : Active unit, c’est-à-dire que unit se chargera lors de
l’initialisation du système.
●
systemctl disable unit.service : unit ne démarrera pas avec le système.
●
systemctl is-enabled unit.service : Vérifie si unit démarre avec le système. La
réponse est enregistrée dans la variable $?. La valeur 0 indique que unit démarre
avec le système et la valeur 1 indique que unit ne démarre pas avec le système.
14
systemd
Systemctl
●
Si aucune autre unité du même nom n’existe dans le système, le suffixe après le point peut être
omis.
●
Les fichiers de configuration associés à chaque unité se trouvent dans le répertoire
/lib/systemd/system/.
●
systemctl list-unit-files : affiche la liste de toutes les unités disponibles et indique si elles sont
activées au démarrage du système.
●
systemctl list-unit-files --type=service et systemctl list-unit-files –type=target : L’option
--type sélectionnera uniquement les unités pour un certain type
●
La commande systemctl peut également contrôler les cibles système (system targets). L’unité
multi-user.target, par exemple, combine toutes les unités requises par l’environnement système
multi-utilisateurs. Il est similaire au niveau d’exécution 3 dans un système basé sur SysV.
●
La commande systemctl isolate bascule entre différentes cibles. Ainsi, pour basculer
manuellement vers la cible multi-user : # systemctl isolate multi-user.target
15
systemd
Systemctl
●
systemctl get-default : détermine la cible de démarrage par défaut du système
●
systemctl set-default multi-user.target : Modifier la cible par défaut.
●
systemctl suspend : mettra le système en mode économique, en gardant les
données actuelles en mémoire.
●
systemctl hibernate : va copier toutes les données en mémoire sur le disque, de
sorte que l’état actuel du système peut être récupéré après son extinction.
Les actions associées à ces événements( systemctl suspend et systemctl hibernate)
sont définies dans le fichier /etc/systemd/logind.conf ou dans des fichiers individuels à
l’intérieur du répertoire /etc/systemd/logind.conf.d/. Cependant, cette fonctionnalité de
systemd ne peut être utilisée que lorsqu’il n’y a aucun autre gestionnaire d’alimentation en
cours d’exécution dans le système, comme le démon acpid.
16
Upstart
●
Les scripts d’initialisation utilisés par Upstart se trouvent dans le répertoire /etc/init/.
●
Les services du système peuvent être affichés avec la commande initctl list, qui
indique également l’état actuel des services et, le cas échéant, leur PID.
●
Upstart n’utilise pas le fichier /etc/inittab pour définir les niveaux d’exécution, par
contre les commandes traditionnelles runlevel et telinit permettent toujours de
vérifier les niveaux d’exécution et d’alterner entre eux.
●
Chaque action Upstart dispose de sa propre commande dédiée :
➔
# start tty6 : lance un sixième terminal virtuel
➔
# status tty6 : vérifier l’état de la ressource tty6
➔
# stop tty6 : interruption du service
17
Arrêt et redémarrage
18
Arrêt et redémarrage
systemctl
●
#systemctl reboot : redémarre le système.
●
#systemctl poweroff : arrête le système.
●
Certaines distributions Linux associent poweroff et reboot à systemctl sous forme
de commandes individuelles.
wall
Lorsqu’il s’avère nécessaire de faire passer le système en mode mono-utilisateur, il est
important d’avertir les utilisateurs connectés afin qu’ils ne soient pas affectés par une
interruption brutale de leurs activités.
wall est capable d’envoyer un message aux sessions de terminal de tous les utilisateurs
connectés. Pour ce faire, il suffit à l’administrateur système de fournir un fichier ou d’écrire
le message directement comme paramètre de la commande wall.
19