From 21299ff14cdefff9cb138f7febc7a1c4d6d93c83 Mon Sep 17 00:00:00 2001 From: bserie Date: Wed, 14 Dec 2016 15:09:19 +0100 Subject: [PATCH] init --- HowtoSystemd.md | 131 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 HowtoSystemd.md diff --git a/HowtoSystemd.md b/HowtoSystemd.md new file mode 100644 index 00000000..d2e4e9b2 --- /dev/null +++ b/HowtoSystemd.md @@ -0,0 +1,131 @@ +# Howto systemd + +https://www.freedesktop.org/wiki/Software/systemd/ + +systemd est un gestionnaire de services (démon avec le PID 1) en alternative au System V. Il est utilisé par défaut depuis Debian 8. + +## Utilisation de base + + + # systemctl list-units + # systemctl list-jobs + # systemctl status -l + # systemctl stop/start/restart/reload + # systemctl disable/enable + + # systemctl reboot + # systemctl poweroff + + # journalctl + # journalctl -u + # journalctl --since="2016-02-04 13:37:00" --until="2016-02-04 13:42:00" + + +## Modifier un service + + + # cp -a /lib/systemd/system/.service /etc/systemd/system/ + # vim /etc/systemd/system/.service + # systemctl daemon-reload + + +Syntaxe des fichiers .service : https://www.freedesktop.org/software/systemd/man/systemd.service.html + +Exemple avec ssh.service sous Debian 8 : + + + [Unit] + Description=OpenBSD Secure Shell server + After=network.target auditd.service + ConditionPathExists=!/etc/ssh/sshd_not_to_be_run + + [Service] + EnvironmentFile=-/etc/default/ssh + ExecStart=/usr/sbin/sshd -D $SSHD_OPTS + ExecReload=/bin/kill -HUP $MAINPID + KillMode=process + Restart=on-failure + + [Install] + WantedBy=multi-user.target + Alias=sshd.service + + +## Utilisation avancée + + + # systemctl show + + +Debug au démarrage accessible sur tty9 : + + + # systemctl enable debug-shell + + +Debug sur le démarrage : + + + # systemd-analyze + Startup finished in 5.019s (firmware) + 6.128s (loader) + 5min 35.864s (kernel) + 20min 3.148s (userspace) = 25min 50.160s + # systemd-analyze blame | head -3 + 2.029s systemd-udev-settle.service + 1.400s docker.service + 1.215s uml-utilities.service + + +## Migrer de sysvinit à systemd + + + # apt install systemd-sysv + The following packages will be REMOVED: + sysvinit-core + # reboot + + +Vérifier que GRUB ne se lance pas avec l'option _init=/lib/sysvinit/init_ + +## FAQ + +### Bind9 + +Sous Debian 8, l'unité par défaut ne gère par les options dans /etc/default/bind + +Voir http://trac.evolix.net/infogerance/wiki/HowtoDebian/MigrationWheezyJessie#Bind + +### strace Apache (TODO) + +Une astuce efficace pour stracer un serveur de type Apache était : strace -s65535 -ff /etc/init.d/apache2 restart. Ensuite on joue la requête et on des infos (impossible à faire en prod bien sûr!). +Avec systemd, le strace ne suit pas les forks malgré -ff. À voir pourquoi systemd empêche ça… + +### networking + +Sous Debian 8, le démarrage du système se bloque complètement (dead lock) si l'initialisation de process dépendant du réseau (comme NFS, NTP, firewalling…) se fait avant que le réseau soit démarré. +Notamment quand ils sont démarrés via des hooks dans /etc/network/if-*/…cela n'était pas bloquant avec SysV, cf https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754218#30 + +Astuces "bourrin" : ajouter "exit 0" dans /etc/init.d/networking et voir le souci via systemctl status networking -l ; modifier JobTimeoutUSer => "systemctl show networking -p JobTimeoutUSer" + +### Failed to get D-Bus connection: Unknown error -1 + +Si en utilisant *systemctl* vous obtenez une erreur "Failed to get D-Bus connection: Unknown error -1" vérifiez si vous êtes bien passé à systemd et n'êtes resté à sysvinit ! + +### systemd-fsck : Dependency failed for File System Check on /dev/disk/xxx + +Par défaut, systemd-fsck attend 1m30 l'accès à chaque device disque. Pour diverses raisons (accès à un SAN externe, etc.) cela peut échouer, vous aurez alors : + + + systemd[1]: Job dev-disk-by\x2dlabel-foo.device/start timed out. + systemd[1]: Timed out waiting for device dev-disk-by\x2dlabel-foo.device. + systemd[1]: Dependency failed for /backup. + systemd[1]: Dependency failed for Local File Systems. + systemd[1]: Triggering OnFailure= dependencies of local-fs.target. + systemd[1]: Dependency failed for File System Check on /dev/disk/by-label/foo. + + +Vous pouvez alors ajouter différentes options via le fstab, du type : + + + LABEL=foo /foo ext4 defaults,nofail,x-systemd.device-timeout=120 0 0 + + +Notamment "nofail" pour éviter que cela fasse échouer votre séquence de boot !