24
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

Meetup Systemd vs sysvinit

Embed Size (px)

Citation preview

Page 1: Meetup Systemd vs sysvinit

www.ciose.fr

1

Démarrage d’un device Démarrage d’un device LinuxLinux

Init System V vs SystemdInit System V vs Systemd

C. CharreyreC. [email protected]@ciose.fr

http://www.ciose.frhttp://www.ciose.frhttps://twitter.com/CIO_SysEmbhttps://twitter.com/CIO_SysEmbhttp://fr.slideshare.net/charreyrehttp://fr.slideshare.net/charreyre

Page 2: Meetup Systemd vs sysvinit

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

Page 3: Meetup Systemd vs sysvinit

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

Page 4: Meetup Systemd vs sysvinit

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

Page 5: Meetup Systemd vs sysvinit

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

Page 6: Meetup Systemd vs sysvinit

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

Page 7: Meetup Systemd vs sysvinit

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

Page 8: Meetup Systemd vs sysvinit

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:

# Boot­time 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 single­user 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 single­user.# Runlevels 2­5 are multi­user.# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6

7 niveaux dedémarrage(runlevels)

2. Démarrage enrunlevel 5au boot

1. Exécution de/etc/init.d/rcS

Page 9: Meetup Systemd vs sysvinit

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

Page 10: Meetup Systemd vs sysvinit

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

Page 11: Meetup Systemd vs sysvinit

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

Page 12: Meetup Systemd vs sysvinit

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

Page 13: Meetup Systemd vs sysvinit

www.ciose.fr

13

Mécanisme init traditionnel SystemV

Page 14: Meetup Systemd vs sysvinit

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

Page 15: Meetup Systemd vs sysvinit

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

Page 16: Meetup Systemd vs sysvinit

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

Page 17: Meetup Systemd vs sysvinit

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

[Service]Type=oneshotExecStart=/usr/bin/create­db.shTimeoutSec=120

[Install]WantedBy=multi­user.target

Page 18: Meetup Systemd vs sysvinit

www.ciose.fr

18

Les init selon systemd

● Des cibles qui sont liées aux services : – basic.target, multi­user.target, 

graphical.target, emergency.target, reboot.target

Page 19: Meetup Systemd vs sysvinit

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

Page 20: Meetup Systemd vs sysvinit

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

Page 21: Meetup Systemd vs sysvinit

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)

Page 22: Meetup Systemd vs sysvinit

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

Page 23: Meetup Systemd vs sysvinit

www.ciose.fr

23

Systemd, ange ou démon ?

Crédit image Wikimedia Commons ClaudelepoissonCreative Commons Attribution-Share Alike 3.0 Unported license

Page 24: Meetup Systemd vs sysvinit

www.ciose.fr

24

Références

● https://wiki.freedesktop.org/www/Software/systemd/● https://www.freedesktop.org/software/systemd/man/● https://wiki.archlinux.org/index.php/Systemd● http://0pointer.de/blog/projects/systemd.html● http://0pointer.net/blog/projects/systemd-for-admins-1.html● http://0pointer.net/blog/archives.html● https://www.linux.com/learn/tutorials/

788613-understanding-and-using-systemd● http://man7.org/linux/man-pages/man7/bootup.7.html● https://wiki.debian.org/Debate/initsystem/systemd