www.ciose.fr
1
Démarrage d’un deviceDémarrage d’un device
LinuxLinux
Init System V vs SystemdInit System V vs Systemd
C. CharreyreC. Charreyre
christian.charreyre@ciose.frchristian.charreyre@ciose.fr
http://www.ciose.frhttp://www.ciose.fr
https://twitter.com/CIO_SysEmbhttps://twitter.com/CIO_SysEmb
http://fr.slideshare.net/charreyrehttp://fr.slideshare.net/charreyre
www.ciose.fr
2
Licence
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
www.ciose.fr
3
CIO en quelques mots
● Société d'ingénierie en systèmes embarqués :
électronique et logiciel
● Au service de nos clients depuis 1990
● 15 spécialistes en embarqué et temps réel
● Expert en Linux embarqué depuis 2000,
OpenEmbedded et Yocto depuis 2008
● CA annuel : 1 500 000 €
● Siège à Saint-Étienne
● Agence à Marseille
● Agréé CIR
www.ciose.fr
4
C. Charreyre en quelques mots
● Associé au sein de CIO
● Responsable des technologies Linux embarqué
● Formateur Linux embarqué (avec Captronic et en
direct)
● 30 ans dans l'embarqué et le monde Unix / Linux
● Fervent promoteur du logiciel libre
● Membre de Medinsoft – Commission Logiciel Libre
www.ciose.fr
5
Démarrage d’une machine x86
Mise sous tension
Vérification BIOS
Boot BIOS
Bootloader GRUB(2)
Mise sous tensionChoix utilisateur
Chargement noyau
Exécution noyau
Montage /
Exécution Init
Décompression initramfs
Montage /dev/ram0
Exécution linuxrc
Démontage /dev/ram0
www.ciose.fr
6
Démarrage d’une machine non x86
Mise sous tension
Bootloader (UBoot)
Chargement noyau
Exécution noyau
Montage /
Exécution Init
Décompression initramfs
Montage /dev/ram0
Exécution linuxrc
Démontage /dev/ram0
www.ciose.fr
7
Mécanisme init traditionnel SystemV
● Init System V = sysvinit
● A partir de Exécution Init, le démarrage s’exécute en
espace User
● init est le 1er processus user lancé par le kernel, il
est en charge de démarrer en espace user le reste de
la machine
● Son PID est 1
www.ciose.fr
8
Mécanisme init traditionnel SystemV
● init piloté par le fichier /etc/inittab
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:5:initdefault:
# 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.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
7 niveaux de
démarrage
(runlevels)
2. Démarrage en
runlevel 5
au boot
1. Exécution de
/etc/init.d/rcS
www.ciose.fr
9
Mécanisme init traditionnel SystemV
● 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
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 database
After=dbus.service
Before=postgresql.service
[Service]
Type=oneshot
ExecStart=/usr/bin/createdb.sh
TimeoutSec=120
[Install]
WantedBy=multiuser.target
www.ciose.fr
18
Les init selon systemd
● 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.”
Site Boycott systemd