Systemd : Différence entre versions

De ArchwikiFR
m (Robot : Enlève modèles : I18n, Lang, Stub, Translateme)
(mise à jour)
Ligne 1 : Ligne 1 :
 +
[[Category:Démarrage]]
 +
[[Category:Système]]
 +
[[Category:Services]]
 +
[[en:Systemd]]
 +
[http://www.freedesktop.org/wiki/Software/systemd systemd] est un système d'init censé remplacer le vieux [[wikipedia:fr:Init#.22init.22_de_Unix_System_V_.28SysVinit.29|sysvinit]]. Il fournit une manière automatique de démarrer, relancer ou arrêter des services, en fonction de différents déclencheurs.
  
 +
Ce programme est en phase de '''développement intense''' et en tant que tel, peut ne pas être adapté aux besoins de tous les jours : à utiliser avec précaution, donc.
 +
 +
== Installation ==
 +
{{warning|systemd ne fonctionne pas si {{filename|/usr}} est sur une partition séparée. Vous ne pourrez pas démarrer si libdbus n'est pas accessible.}}
 +
 +
Pour essayer ''systemd'' sur Arch, il vous faut installer {{pkg|initscripts-systemd}} et rajouter:
 +
init=/bin/systemd
 +
à la fin de la ligne {{codeline|kernel}} dans [[GRUB]] (ou équivalent si vous utilisez un autre chargeur).
 +
 +
Ajouter ou supprimer le ''init=/bin/systemd'' vous permet d'avoir ''systemd'' installé en même temps que les scripts d'initialisation d'arch et de basculer de l'un à l'autre sans problème.
 +
 +
Pour pouvoir lancer les services habituels à la systemd, vous aurez sûrement envie d'installer le paquets {{pkg|systemd-arch-units}}.
  
{{Filename|systemd}} est un système d'init censé remplacer le vieux {{Filename|sysvinit}}. Il fournit une manière automatique de démarrer, relancer ou arrêter des services, en fonction de différents déclencheurs.
+
== Utilisation ==
  
Ce programme est en phase de '''développement intense''' et en tant que tel, peut ne pas être adapté aux besoins de tous les jours : à utiliser avec précaution, donc.
+
=== Commandes ===
 +
*{{codeline|systemctl}}: contrôle ''systemd'' et le gestionnaire de service.
 +
*{{codeline|systemd-cgls}}: affiche de manière récursive le contenu du [[wikipedia:cgroups|groupe de contrôle]] (cgroup).
 +
*{{codeline|systemadm}}: une interface graphique pour contrôler ''systemd''. (elle est encore loin d'être terminé, à utiliser à vos risques et périls.)
  
== Comment ça marche ==
+
cf. pages de manuel pour plus de détails.  
Imaginons que vous soyez déconnecté du réseau. Vous pourriez avoir envie d'arrêter {{Filename|sshd}} et {{Filename|avahi}}. {{Filename|systemd}} peut le faire pour vous, et en cas de reconnexion ces services seront à nouveau disponibles. De même pour le matériel : imaginons que vous ayez une imprimante et un ''dongle'' USB Bluetooth. Inutile de laisser {{Filename|cups}} et {{Filename|bluetoothd}} en marche si ceux-ci sont déconnectés.
 
  
Il n'y a pas non plus de raison de laisser des démons comme {{Filename|sshd}} en route si personne n'est connecté à la machine : systemd peut écouter sur le port dédié à SSH, et lancer sshd si quelqu'un se connecte, l'arrêter lorsque le dernier utilisateur se déconnecte.
+
Exemples:<br/>
 +
Liste des services:
 +
systemctl
 +
systemctl list-units
 +
Démarrer, arrêter, redémarrer ou recharger un service:
 +
systemctl start <service>
 +
systemctl stop <service>
 +
systemctl restart <service>
 +
systemctl reload <service>
 +
Voir son statut:
 +
systemctl status <service>
 +
Activer, désactiver un service au démarrage:
 +
systemctl enable <service>
 +
systemctl disable <service>
  
Systemd a donc 3 buts principaux :
+
{{note|Il faut utiliser le nom du fichier d'un service en entier, exemple:
* Lancer des services en parallèle autant que possible.
+
systemctl restart avahi-daemon.service
* Surveiller les démons (comme {{Filename|monit}})
+
}}
* Écouter les ports et contrôler les services (comme {{Filename|(x)inetd}})
 
  
== Systemd vs. Upstart ==
+
Redémarrer le système:
La philosophie qui gouverne systemd diffère quelque peu de celle d'Upstart. Par exemple, lorsque D-Bus est lancé par Upstart, tout ce qui en dépend, comme NetworkManager, '''sera aussi démarré'''.
+
systemctl reboot
  
Systemd fonctionne en sens inverse. C'est lorsque NetworkManager est lancé que D-Bus sera lancé automatiquement, parce qu'il est nécesasire au fonctionnement de NetworkManager. Le lancement de D-Bus n'est pas une indication que l'on souhaite lancer NetworkManager, mais simplement que les services qui en besoin pourront l'utiliser (et peuvent donc être démarrés). Le but de systemd n'est donc pas de lancer tous les services possibles lorsqu'un événement se déclenche, mais seulement celui qui est demandé par la situation.
+
=== Runlevels/targets ===
  
== Installation ==
+
Systemd utilise un concept de ''targets'' qui permet de regrouper une ensemble d'unités <ref>Fichier de configuration regroupant des informations sur un service, périphérique, point de montage, ... (cf. {{codeline|man systemd.unit}}</ref>. Les ''targets'' permettent de fournir l'équivalent des niveaux d'exécution (''runlevels''):
Falconindy a effectué un travail formidable en permettant à systemd de fonctionner dans Arch. Les paquets nécessaires sont disponibles sur [[Arch_User_Repository_(Français)|AUR]]. Il faudra d'abord installer les paquets suivants.
 
kernel26>=2.6.36
 
[http://aur.archlinux.org/packages.php?ID=38950 udev-systemd]
 
[http://aur.archlinux.org/packages.php?ID=40399 dbus-systemd]
 
[http://aur.archlinux.org/packages.php?ID=36902 systemd-git]
 
  
Pour pouvoir lancer les services habituels à la systemd, vous aurez sûrement envie d'installer le paquets arch-units :
+
{| class="wikitable"
[http://aur.archlinux.org/packages.php?ID=40419 systemd-arch-units]
+
!SystemVinit Runlevel!!Systemd Target!!Notes
 +
|-
 +
| 0 || runlevel0.target, poweroff.target || arrête le système
 +
|-
 +
| 1, s, single || runlevel1.target, rescue.target || mode ''single user''.
 +
|-
 +
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Mode défini par l'utilisateur, identique au 3 par défaut.
 +
|-
 +
| 3 || runlevel3.target, multi-user.target || Multi-utilisateur, non graphique.
 +
|-
 +
| 5 || runlevel5.target, graphical.target || Multi-utilisateur, en mode graphique.
 +
|-
 +
| 6 || runlevel6.target, reboot.target || Rédémarre
 +
|-
 +
| emergency || emergency.target || Shell d'urgence
 +
|-
 +
|}
  
Enfin, pour essayer systems, il suffit d'ajouter l'option <code>init=/bin/systemd</code> à la ligne de commande du noyau dans [[GRUB_(Français|GRUB]].
+
Pour changer de niveau d'exécution, par exemple pour passer au '''3''', lancez l'une de ces commandes:
 +
telinit 3
 +
systemctl isolate multi-user.target
 +
systemctl isolate runlevel3.target
  
== Configuration ==
+
Pour spécifier un niveau par défaut, toujours en prenant l'exemple du '''3''':
Les services et unités (''units'') disponibles se trouvent dans {{Filename|/lib/systemd/system}}. Vous pouvez taper :
+
  ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
$ systemctl start <service>
 
pour lancer un service avec systemd. Pour choisir un service à lancer automatiquement au démarrage, utilisez la commande :
 
$ systemctl enable <service>
 
  
== Remplacer les scripts d'init par défaut (DANGEREUX) ==
 
Pour aller plus loin, il est possible de remplacer les scripts d'init par défaut d'ArchLinux par des scripts mieux adaptés à systemd '''à vos risques et périls'''. Ces scripts se trouvent sur AUR. Cependant, pour revenir à la procédure de démarrage habituelle, il ne suffira plus de retirer l'option <code>init=/bin/systemd</code> de la ligne de commande du noyau, '''ceci casserait votre système''' puisqu'il faudrait au préalable réinstaller les initscripts par défaut. En particulier, si quelque chose ne fonctionne plus dans systemd, il est probable que le système ne démarrera plus et il faudra un LiveCD pour le restaurer.
 
  
'''Si vous êtes toujours sûr de ce que vous voulez faire''', il s'agit de ce paquet :
+
== Intégration Arch Linux ==
[http://aur.archlinux.org/packages.php?ID=40592 initscripts-systemd-git]
 
  
== Problèmes connus ==
+
Pour faciliter l'intégration à Archlinux, la configuration actuelle est prise en compte (ou pas) de la façon suivant:
* Systemd ne comprend pas les guillemets dans les <code>EnvironmentFiles</code>, et les services correspondants ne pourront pas démarrer. Un bon exemple est le fichier {{Filename|/etc/conf.d/sshd}} par défaut.
 
  
== Donner un coup de main ==
+
* {{filename|/etc/inittab}} n'est pas lu
Pour le moment, l'implémentation de systemd pour ArchLinux est encore très incomplète. Si vous voulez contribuer, vous pouvez ''forker'' les dépôts Git [http://github.com/falconindy/initscripts-systemd initscripts-systemd] ou [http://github.com/falconindy/systemd-arch-units arch-systemd-units] (sur GitHub) et proposer des ''pull requests'' pour vos modifications. Il y a encore pas mal de travail à faire pour nettoyer les initscripts et remplacer plus de fonctions par des unités systemd, de même qu'il faut encore convertir les scripts de lancement de démons en fichiers de service dépendant moins de scripts shell.
+
* {{filename|/etc/rc.local}} et {{filename|/etc/rc.local.shutdown}} sont exécutés respectivement au démarrage et à l'arrêt du système, pour ne pas en tenir compte: <pre>systemctl disable rc-local.service</pre>
 +
* Une grande partie du {{filename|/etc/rc.conf}} est respecté, mais il est préférable d'utiliser la [[#Configuration native|configuration native de systemd]].
 +
** Respecté: LOCALE, KEYMAP, CONSOLEFONT, CONSOLEMAP, HOSTNAME, TIMEZONE, MODULES, DAEMONS
 +
** Non supporté: HARDWARECLOCK, USELVM (utilisez ''lvm-activate.service''), USECOLOR
  
Vous pouvez poser vos questions (en anglais) dans ce [https://bbs.archlinux.org/viewtopic.php?id=96316&p=1 sujet] sur les forums ArchLinux. falconindy peut parfois être présent sur le canal IRC #archlinux (pas de messages privés svp).
+
== Configuration native ==
 +
*{{filename|/etc/hostname}} : Nom de la machine (HOSTNAME)
 +
mamachine
 +
*{{filename|/etc/vconsole.conf}} : Configuration de la console (KEYMAP, CONSOLEFONT, CONSOLEMAP)
 +
KEYMAP=fr-latin9
 +
FONT=
 +
FONT_MAP=
 +
*{{filename|/etc/os-release}} : Contient les infos du système.
 +
*{{filename|/etc/locale.conf}} : Localisation (LOCALE)
 +
LANG=fr_FR.utf8
 +
LC_COLLATE=C
 +
*{{filename|/etc/modules-load.d/*.conf}} :Liste de fichiers comportant des modules à charger.<br/>Un fichier est généralement nommé {{filename|<nom_programme>.conf}}<br/>Le fichier comporte un module par ligne, les commentaires commencent par {{codeline|#}} ou {{codeline|;}} (point-virgule) (MODULES)
 +
*{{filename|/etc/modprobe.d/*.conf}} : Liste de fichiers comportant des modules '''à ne pas charger'''. (MODULES)
 +
blacklist module1
 +
install module2 /bin/false
 +
*{{filename|/etc/tmpfiles.d/*.conf}} : Liste des fichiers temporaires à créer, supprimer.<br/>Ces fichiers sont des répertoires volatiles tel que {{filename|/tmp}} ou {{filename|/var/run}}
  
== Ressources supplémentaires (en anglais) ==
+
== Liens ==
* [http://0pointer.de/blog/projects/systemd.html Lennart Poettering on systemd]
 
* [http://blog.falconindy.com/articles/systemd-on-arch.html falconindy's article on systemd in Arch]
 
* [https://bbs.archlinux.org/viewtopic.php?id=96316&p=1 The systemd thread on the Arch forums]
 
* [http://aur.archlinux.org/packages.php?K=falconindy&SeB=m falconindy's packages on AUR]
 
  
[[Catégorie:Démarrage]]
+
Systemd demande encore pas mal de test, si vous voulez contribuer : [[:en:Systemd#Helping out|Helping out]]<br/>
[[Catégorie:Howto]]
+
[[:en:Systemd#FAQ|FAQ (en)]]
[[Category:Necessite relecture]]
 

Version du 21 avril 2011 à 16:03

systemd est un système d'init censé remplacer le vieux sysvinit. Il fournit une manière automatique de démarrer, relancer ou arrêter des services, en fonction de différents déclencheurs.

Ce programme est en phase de développement intense et en tant que tel, peut ne pas être adapté aux besoins de tous les jours : à utiliser avec précaution, donc.

Installation

Attention : systemd ne fonctionne pas si /usr est sur une partition séparée. Vous ne pourrez pas démarrer si libdbus n'est pas accessible.

Pour essayer systemd sur Arch, il vous faut installer initscripts-systemd et rajouter:

init=/bin/systemd

à la fin de la ligne kernel dans GRUB (ou équivalent si vous utilisez un autre chargeur).

Ajouter ou supprimer le init=/bin/systemd vous permet d'avoir systemd installé en même temps que les scripts d'initialisation d'arch et de basculer de l'un à l'autre sans problème.

Pour pouvoir lancer les services habituels à la systemd, vous aurez sûrement envie d'installer le paquets systemd-arch-units.

Utilisation

Commandes

  • systemctl: contrôle systemd et le gestionnaire de service.
  • systemd-cgls: affiche de manière récursive le contenu du groupe de contrôle (cgroup).
  • systemadm: une interface graphique pour contrôler systemd. (elle est encore loin d'être terminé, à utiliser à vos risques et périls.)

cf. pages de manuel pour plus de détails.

Exemples:
Liste des services:

systemctl
systemctl list-units

Démarrer, arrêter, redémarrer ou recharger un service:

systemctl start <service>
systemctl stop <service>
systemctl restart <service>
systemctl reload <service>

Voir son statut:

systemctl status <service>

Activer, désactiver un service au démarrage:

systemctl enable <service>
systemctl disable <service>
Note : Il faut utiliser le nom du fichier d'un service en entier, exemple:
systemctl restart avahi-daemon.service

Redémarrer le système:

systemctl reboot

Runlevels/targets

Systemd utilise un concept de targets qui permet de regrouper une ensemble d'unités <ref>Fichier de configuration regroupant des informations sur un service, périphérique, point de montage, ... (cf. man systemd.unit</ref>. Les targets permettent de fournir l'équivalent des niveaux d'exécution (runlevels):

SystemVinit Runlevel Systemd Target Notes
0 runlevel0.target, poweroff.target arrête le système
1, s, single runlevel1.target, rescue.target mode single user.
2, 4 runlevel2.target, runlevel4.target, multi-user.target Mode défini par l'utilisateur, identique au 3 par défaut.
3 runlevel3.target, multi-user.target Multi-utilisateur, non graphique.
5 runlevel5.target, graphical.target Multi-utilisateur, en mode graphique.
6 runlevel6.target, reboot.target Rédémarre
emergency emergency.target Shell d'urgence

Pour changer de niveau d'exécution, par exemple pour passer au 3, lancez l'une de ces commandes:

telinit 3
systemctl isolate multi-user.target
systemctl isolate runlevel3.target

Pour spécifier un niveau par défaut, toujours en prenant l'exemple du 3:

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


Intégration Arch Linux

Pour faciliter l'intégration à Archlinux, la configuration actuelle est prise en compte (ou pas) de la façon suivant:

  • /etc/inittab n'est pas lu
  • /etc/rc.local et /etc/rc.local.shutdown sont exécutés respectivement au démarrage et à l'arrêt du système, pour ne pas en tenir compte:
    systemctl disable rc-local.service
  • Une grande partie du /etc/rc.conf est respecté, mais il est préférable d'utiliser la configuration native de systemd.
    • Respecté: LOCALE, KEYMAP, CONSOLEFONT, CONSOLEMAP, HOSTNAME, TIMEZONE, MODULES, DAEMONS
    • Non supporté: HARDWARECLOCK, USELVM (utilisez lvm-activate.service), USECOLOR

Configuration native

  • /etc/hostname : Nom de la machine (HOSTNAME)
mamachine
  • /etc/vconsole.conf : Configuration de la console (KEYMAP, CONSOLEFONT, CONSOLEMAP)
KEYMAP=fr-latin9
FONT=
FONT_MAP=
  • /etc/os-release : Contient les infos du système.
  • /etc/locale.conf : Localisation (LOCALE)
LANG=fr_FR.utf8
LC_COLLATE=C
  • /etc/modules-load.d/*.conf :Liste de fichiers comportant des modules à charger.
    Un fichier est généralement nommé <nom_programme>.conf
    Le fichier comporte un module par ligne, les commentaires commencent par # ou ; (point-virgule) (MODULES)
  • /etc/modprobe.d/*.conf : Liste de fichiers comportant des modules à ne pas charger. (MODULES)
blacklist module1
install module2 /bin/false
  • /etc/tmpfiles.d/*.conf : Liste des fichiers temporaires à créer, supprimer.
    Ces fichiers sont des répertoires volatiles tel que /tmp ou /var/run

Liens

Systemd demande encore pas mal de test, si vous voulez contribuer : Helping out
FAQ (en)