www.ciose.fr 1 Démarrage d’un device Démarrage d’un device Linux Linux Init System V vs Systemd Init System V vs Systemd C. Charreyre C. Charreyre [email protected][email protected]http://www.ciose.fr http://www.ciose.fr https://twitter.com/CIO_SysEmb https://twitter.com/CIO_SysEmb http://fr.slideshare.net/charreyre http://fr.slideshare.net/charreyre
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
www.ciose.fr
1
Démarrage d’un device Démarrage d’un device LinuxLinux
Attribution-Noncommercial-Share Alike 4.0 International● You are free:
to Share - copy and redistribute the material in any medium or format
to Adapt - remix, transform, and build upon the material
The licensor cannot revoke these freedoms as long as you follow the license terms.
● Under the following conditions:
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
NonCommercial — You may not use the material for commercial purposes.
ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
● No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
● License text : http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
# Boottime system configuration/initialization script.# This is run first except when booting in emergency (b) mode.si::sysinit:/etc/init.d/rcS
# What to do in singleuser mode.~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change# of runlevel.## Runlevel 0 is halt.# Runlevel 1 is singleuser.# Runlevels 25 are multiuser.# Runlevel 6 is reboot.
● Le répertoire /etc/init.d/ comprend des scripts associés aux daemons
● 1 daemon = 1 script● 1 script = switch case sur paramètre $1
– start
– stop
– status
– restart / reload
● Jeu de liens de /etc/rcN.d/ vers /etc/init.d/ (N=S, 0 à 6)
● /etc/init.d/rcS enchaîne l’appel des scripts dans /etc/rcS.d/ – ordre alphanumérique
www.ciose.fr
10
Mécanisme init traditionnel SystemV
● Pour le runlevel par défaut D, init enchaîne l’appel des scripts dans /etc/rcD.d/ – ordre alphanumérique
● Dans les runlevels 0 à N, succession de liens KnnXXXX et SnnXXXX où– XXXX nom du script dans /etc/init.d/
– nn numéro sur 2 digits
● Les KnnXXXX sont des arrêts de daemon ($1 = stop)● Les SnnXXXX sont des démarrages de daemon ($1 =
start)● L’ordre alphanumérique enchaîne en séquence les
arrêts ordonnés, puis les démarrages ordonnés● Pour le runlevel S uniquement des starts : SnnXXXX
www.ciose.fr
11
Mécanisme init traditionnel SystemV
● Logique induite : – Chaque fournisseur de daemon fournit le script de
démarrage / arrêt, ainsi que des consignes de démarrage / arrêt en fonction des runlevels :
● Numéro● Dépendances éventuelles (ex : daemon nécessite le réseau
actif)
– L’administrateur système ou créateur de distribution met en place tout le jeu de lien
– init exécute les scripts de démarrage / arrêt
● Tout s’effectue en séquence● On contrôle finement l’ordre des actions
www.ciose.fr
12
Mécanisme init traditionnel SystemV
● Utilitaire de gestion des liens : update-rc.d
– Créations des liens : update-rc.d apache2 start 20 2 3 4 5 . stop 80 0 1
6 .
Adding system startup for /etc/init.d/apache2 …
/etc/rc0.d/K80apache2 -> ../init.d/apache2
/etc/rc1.d/K80apache2 -> ../init.d/apache2
/etc/rc6.d/K80apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
– Suppressions des liens : update-rc.d -f apache2 remove
www.ciose.fr
13
Mécanisme init traditionnel SystemV
www.ciose.fr
14
L’arrivée de systemd
● Depuis quelques années systemd remplace sysvinit dans les distributions majeures : – Red Hat : initiateur du projet
– Fedora
– Open Suse
– ArchLinux
– Debian : grosse controverse dans le monde Debian → fork Devuan pour conserver une init sysvinit.
– Ubuntu : abandon de upstart au profit de systemd à partir de 15.04
www.ciose.fr
15
L’arrivée de systemd
● Dans les distributions embarqués : – Yocto : conservation sysvinit par défaut
– Angström : passage à systemd par défaut
www.ciose.fr
16
Systemd vs sysvinit
● Systemd est un démon système qui veut gérer tous les aspects systèmes de la machine, sur base de technos « modernes »
● Basé sur D-bus● A ce titre :
– Prend en charge le démarrage / arrêt des daemons = remplacement sysvinit
– Fournit donc le process init (pid 1)
– Mais gère également réseau, login, montages, logs etc...
– A englobé udev
www.ciose.fr
17
Les init selon systemd
● Plus de script dans /etc/init.d/● Des fichiers de service dans divers répertoires :
– /lib/systemd/system ou /usr/lib/systemd/system
– /run/systemd/system
– /etc/systemd/system (priorité croissante)
● Des initialisations effectuées en parallèle selon des jeux de contraintes : – Directives Before ou After dans les fichiers de service[Unit]Description=Create databaseAfter=dbus.serviceBefore=postgresql.service
● Des cibles qui sont liées aux services : – basic.target, multiuser.target,
graphical.target, emergency.target, reboot.target
www.ciose.fr
19
Les init selon systemd
● Lorsqu’une cible est traitée, les divers services associés sont démarrés en parallèle
● Dépendances entre cibles
www.ciose.fr
20
Les init selon systemd
local-fs-pre.target | v (various mounts and (various swap (various cryptsetup fsck services...) devices...) devices...) (various low-level (various low-level | | | services: udevd, API VFS mounts: v v v tmpfiles, random mqueue, configfs, local-fs.target swap.target cryptsetup.target seed, sysctl, ...) debugfs, ...) | | | | | \__________________|_________________ | ___________________|____________________/ \|/ v sysinit.target | ____________________________________/|\________________________________________ / | | | \ | | | | | v v | v v (various (various | (various rescue.service timers...) paths...) | sockets...) | | | | | v v v | v rescue.target timers.target paths.target | sockets.target | | | | v \_________________ | ___________________/ \|/ v basic.target | ____________________________________/| emergency.service / | | | | | | v v v v emergency.target display- (various system (various system manager.service services services) | required for | | graphical UIs) v | | multi-user.target | | | \_________________ | _________________/ \|/ v graphical.target
www.ciose.fr
21
Les init selon systemd
● La parallélisation fait gagner en temps de démarrage● Mais on maîtrise beaucoup moins l’ordre relatif :
– Ordonnancement alphanumérique déterministe remplacé par un faisceau de contraintes
– Exemple réel : afcher un splash screen en toute fin d’arrêt de machine ● Trivial avec sysvinit : numéro = 99● Plus ardu avec systemd
● Chargement des modules kernel peut varier d’un boot à l’autre– Interfaces eth0 et eth1 peuvent s’inverser
– Nouveau système de nommage interfaces réseau basé sur hardware
● Un utilitaire pour contrôler les services– systemctl status : donne l’état d’un service et ses logs
– systemctl disable : désactive un service
– systemctl enable : active un service
– systemctl mask: masque un service (lien sur /dev/null dans /etc/systemd/system)
www.ciose.fr
22
Systemd, ange ou démon ?
● Grosses polémiques autour de systemd
● Fork Debian pour s’en passer● Prendre les init systemd, c’est aussi prendre la gestion
du reste du système : – Nécessité de réapprendre beaucoup de choses pour
l’administrateur ou le créateur de distribution embarquée
– Logs binaires en lieu et place de /var/log/syslog → comment les relire off line (crash par ex.) ?
– Identification et démarrage, contrôle du réseau bouleversé
– Gestion de la localisation, de la synchro ntp etc...
“Systemd flies in the face of the Unix philosophy: ‘do one thing and do it well,’ representing a complex collection of dozens of tightly coupled binaries. Its responsibilities grossly exceed that of an init system, as it goes on to handle power management, device management, mount points, cron, disk encryption, socket API/inetd, syslog, network configuration, login/session management, readahead, GPT partition discovery, container registration, hostname/locale/time management, mDNS/DNS-SD, the Linux console and other things all wrapped into one.”