SYSTEMD

De TwisterWiki
Révision datée du 23 juillet 2013 à 12:04 par Martin (discussion | contributions) (Page créée avec « == systemd c'est quoi ? == * systemd est le remplaçant de systemVinit * Les scripts dans /etc/init.d deviennent obsolètes et le fichier inittab est remplacé par /etc/sy... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

systemd c'est quoi ?

  • systemd est le remplaçant de systemVinit
  • Les scripts dans /etc/init.d deviennent obsolètes et le fichier inittab est remplacé par /etc/systemd/system/default.target

Quels sont les avantages ?

  • Démarrage plus rapide car les services démarrent en parallèles
  • les projets systemd et udev sont fusionnés mais pour le moment installés avec des paquets différents ---------- system V init
  • Meilleur traçabilité sur les erreurs de démarrage des services

Quelques commandes utiles

  • systemctl : commande permettant de contrôler systemd
  • systemctl {start|stop|reload|restart|status} service
  • systemctl reboot
  • systemctl poweroff
  • systemctl list-units : liste les services qui sont activés et affiche leur état
    • Exemple
UNIT                                               LOAD   ACTIVE SUB       JOB DESCRIPTION
proc-sys-fs-binfmt_misc.automount                  loaded active waiting       Arbitrary Executable File Formats File System Autom
sys-devices-pci0...t2:0:0-2:0:0:0-block-sr0.device loaded active plugged       VBOX_CD-ROM
sys-devices-pci0...00-0000:00:03.0-net-p2p1.device loaded active plugged       82540EM Gigabit Ethernet Controller
sys-devices-pci0...0000:00:05.0-sound-card0.device loaded active plugged       82801AA AC'97 Audio Controller
sys-devices-pci0...0-0:0:0:0-block-sda-sda1.device loaded active plugged       VBOX_HARDDISK
sys-devices-pci0...0-0:0:0:0-block-sda-sda2.device loaded active plugged       VBOX_HARDDISK
sys-devices-pci0...t0:0:0-0:0:0:0-block-sda.device loaded active plugged       VBOX_HARDDISK
sys-devices-platform-serial8250-tty-ttyS0.device   loaded active plugged       /sys/devices/platform/serial8250/tty/ttyS0
sys-devices-platform-serial8250-tty-ttyS1.device   loaded active plugged       /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS2.device   loaded active plugged       /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-platform-serial8250-tty-ttyS3.device   loaded active plugged       /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-virtual-block-dm\x2d0.device           loaded active plugged       /sys/devices/virtual/block/dm-0
sys-devices-virtual-block-dm\x2d1.device           loaded active plugged       /sys/devices/virtual/block/dm-1
sys-module-configfs.device                         loaded active plugged       /sys/module/configfs
sys-module-fuse.device                             loaded active plugged       /sys/module/fuse
sys-subsystem-net-devices-p2p1.device              loaded active plugged       82540EM Gigabit Ethernet Controller
-.mount                                            loaded active mounted       /
boot.mount                                         loaded active mounted       /boot
dev-hugepages.mount                                loaded active mounted       Huge Pages File System
dev-mqueue.mount                                   loaded active mounted       POSIX Message Queue File System
run-user-1000-gvfs.mount                           loaded active mounted       /run/user/1000/gvfs
sys-fs-fuse-connections.mount                      loaded active mounted       FUSE Control File System
sys-kernel-config.mount                            loaded active mounted       Configuration File System
sys-kernel-debug.mount                             loaded active mounted       Debug File System
rngd.service                                       loaded failed failed        Hardware RNG Entropy Gatherer Daemon
  • systemctl status rngd : permet de consulté les erreurs de démarrage d'un service
rngd.service - Hardware RNG Entropy Gatherer Daemon
         Loaded: loaded (/usr/lib/systemd/system/rngd.service; enabled)
         Active: failed (Result: exit-code) since Thu, 2013-07-11 14:38:33 CEST; 1h 52min ago
       Main PID: 588 (code=exited, status=1/FAILURE)
         CGroup: name=systemd:/system/rngd.service

Jul 11 14:38:33 chmartin2.ecritel.net systemd[1]: Starting Hardware RNG Entropy Gatherer Daemon...
Jul 11 14:38:33 chmartin2.ecritel.net systemd[1]: Started Hardware RNG Entropy Gatherer Daemon.
Jul 11 14:38:33 chmartin2.ecritel.net rngd[588]: Unable to open file: /dev/tpm0
Jul 11 14:38:33 chmartin2.ecritel.net rngd[588]: can't open any entropy source
Jul 11 14:38:33 chmartin2.ecritel.net rngd[588]: Maybe RNG device modules are not loaded
Jul 11 14:38:33 chmartin2.ecritel.net systemd[1]: rngd.service: main process exited, code=exited, status=1/FAILURE
Jul 11 14:38:33 chmartin2.ecritel.net systemd[1]: Unit rngd.service entered failed state


  • systemctl list-unit-files : liste les services qui sont activés
    • Exemple
UNIT FILE                                   STATE
proc-sys-fs-binfmt_misc.automount           static
dev-hugepages.mount                         static
dev-mqueue.mount                            static
proc-fs-nfsd.mount                          static
proc-sys-fs-binfmt_misc.mount               static
sys-fs-fuse-connections.mount               static
sys-kernel-config.mount                     static
sys-kernel-debug.mount                      static
tmp.mount                                   static
var-lib-nfs-rpc_pipefs.mount                static
cups.path                                   enabled
systemd-ask-password-console.path           static
systemd-ask-password-plymouth.path          static
systemd-ask-password-wall.path              static
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
initrd-switch-root.service                  static
instperf.service                            static
ip6tables.service                           disabled
iptables.service                            disabled

Emplacement des scripts de démarrage des services

  • Les scripts de démarrage sont situés dans le dossier /usr/lib/systemd/system/

Les différents types de fichiers

  • Les fichiers avec extension .mount
    • Ces fichiers permettent de monter les "device" et point de montage
  • Les fichiers .service
    • Ces fichiers permettent de démarrer les services
  • Les fichiers .umount
  • Les fichiers .target
  • Les fichiers .socket

Comment définir le "runlevel" ?

ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target

Contenu des scripts de démarrage

  • Exemple de contenu de script systemd avec ssh
[Unit]
Description=OpenSSH server daemon
After=syslog.target network.target auditd.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStartPre=/usr/sbin/sshd-keygen
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target
  • Autre exemple avec le script de démarrage de MySQL
[Unit]
Description=MySQL database server
After=syslog.target
After=network.target

[Service]
Type=simple
User=mysql
Group=mysql

ExecStartPre=/usr/libexec/mysqld-prepare-db-dir %n
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=/usr/bin/mysqld_safe --basedir=/usr
ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

# Place temp files in a secure directory, not /tmp
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Howto sur systemd

Activer un service au boot

  • systemctl enable mon_service
    • Résultat de la commande sur une fedora :
ln -s '/usr/lib/systemd/system/mon_service.service' '/etc/systemd/system/multi-user.target.wants/mon_service.service'

Comment écrire un script de démarrage

  • Exemple pour le lancement de tomcat
[Unit]
Description=Tomcat server
After=syslog.target
After=network.target

[Service]
Type=simple
User=tomcat
Group=tomcat

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target