web-dev-qa-db-fra.com

Quelle est la différence entre / usr / lib / systemd / system et / etc / systemd / system?

Avant que tous les fichiers d'unité ne soient dans /etc/systemd/system/ mais maintenant certains apparaissent dans /usr/lib/systemd/system (<- sur CentOS ou /lib/systemd/system <- sur Debian/Ubuntu), quelle est la différence entre ces dossiers?

52
Mehul

Cette question a déjà reçu une réponse en man 7 file-hierarchy qui vient avec systemd (il y a aussi version en ligne ):

        /etc
           System-specific configuration.
 (…)
 VENDOR-SUPPLIED OPERATING SYSTEM RESOURCES
       /usr
            Vendor-supplied operating system resources. 
            Usually read-only, but this is not required. Possibly 
            shared between multiple hosts. This directory should not
            be modified by the administrator, except when installing 
            or removing vendor-supplied packages.

Fondamentalement, les fichiers livrés dans des packages téléchargés à partir du référentiel de distribution vont dans /usr/lib/systemd/. Les modifications effectuées par l'administrateur système (utilisateur) vont dans /etc/systemd/system/.

Les unités spécifiques au système remplacent les unités fournies par les fournisseurs. À l'aide de drop-ins, vous pouvez remplacer uniquement certaines parties spécifiques des fichiers d'unité, laissant le reste au fournisseur (les drop-ins sont disponibles depuis le tout début de systemd, mais n'ont été correctement documentés que dans la v219; voir man systemd.unit).

43
Mirek Długosz

Contexte

Si vous regardez la page de manuel man systemd.unit il a un tableau qui explique les différences. Il s'agit d'un système CentOS 7.x.

   UNIT LOAD PATH
          Unit files are loaded from a set of paths determined during 
          compilation, described in the two tables below. Unit files found 
          in directories listed earlier override files with the same name 
          in directories lower in the list.

           Table 1.  Load path when running in system mode (--system).
           ┌────────────────────────┬─────────────────────────────┐
           │Path                    │ Description                 │
           ├────────────────────────┼─────────────────────────────┤
           │/etc/systemd/system     │ Local configuration         │
           ├────────────────────────┼─────────────────────────────┤
           │/run/systemd/system     │ Runtime units               │
           ├────────────────────────┼─────────────────────────────┤
           │/usr/lib/systemd/system │ Units of installed packages │
           └────────────────────────┴─────────────────────────────┘

Quand ils disent "packages installés", ils font référence à tout ce qui a été installé via un RPM. La même chose peut être supposée pour Debian/Ubuntu ainsi où un fichier DEB serait le "paquet installé".

NOTE: le tableau ci-dessus d'un système Debian/Ubuntu est légèrement différent.

 Table 1.  Load path when running in system mode (--system).
       ┌────────────────────┬─────────────────────────────┐
       │Path                │ Description                 │
       ├────────────────────┼─────────────────────────────┤
       │/etc/systemd/system │ Local configuration         │
       ├────────────────────┼─────────────────────────────┤
       │/run/systemd/system │ Runtime units               │
       ├────────────────────┼─────────────────────────────┤
       │/lib/systemd/system │ Units of installed packages │
       └────────────────────┴─────────────────────────────┘

En cours d'analyse /usr/lib/systemd/system

Vous pouvez dire quels packages possèdent quels fichiers d'unité dans /usr/lib/systemd/system comme ceci sur un système CentOS/Fedora/RHEL:

$ rpm -qf /usr/lib/systemd/system/* |sort -u | head
abrt-2.1.11-50.el7.centos.x86_64
abrt-addon-ccpp-2.1.11-50.el7.centos.x86_64
abrt-addon-kerneloops-2.1.11-50.el7.centos.x86_64
abrt-addon-pstoreoops-2.1.11-50.el7.centos.x86_64
abrt-addon-vmcore-2.1.11-50.el7.centos.x86_64
abrt-addon-xorg-2.1.11-50.el7.centos.x86_64
accountsservice-0.6.45-7.el7.x86_64
acpid-2.0.19-8.el7.x86_64
alsa-utils-1.1.3-2.el7.x86_64
anaconda-core-21.48.22.134-1.el7.centos.x86_64

En cours d'analyse /etc/systemd/system

Si nous faisons de même contre /etc/systemd/system, nous nous attendons à ne trouver aucun fichier appartenant à un RPM (ce qui est en fait le cas sur mon système CentOS 7.x):

$ rpm -qf /etc/systemd/system/* /etc/systemd/system/*/* | grep -v 'not owned'
$

Valeurs aberrantes

N'oubliez pas que vous trouverez parfois des fichiers parasites sous /usr/lib/systemd/system, comme avec Virtualbox (vboxadd *):

$ rpm -qf /usr/lib/systemd/system/* |sort -u | grep 'not owned'
file /usr/lib/systemd/system/initrd.target.wants is not owned by any package
file /usr/lib/systemd/system/shutdown.target.wants is not owned by any package
file /usr/lib/systemd/system/vboxadd.service is not owned by any package
file /usr/lib/systemd/system/vboxadd-service.service is not owned by any package
file /usr/lib/systemd/system/vboxadd-x11.service is not owned by any package

Il y en a d'autres.

Conclusions

L'attente est que /usr/lib/systemd/system est un répertoire qui ne doit contenir que des fichiers d'unité systemd qui y ont été placés par le gestionnaire de paquets (YUM/DNF/RPM/APT/etc).

Fichiers dans /etc/systemd/system sont placés manuellement ici par l'opérateur du système pour les installations logicielles ad hoc qui ne se présentent pas sous la forme d'un package. Cela inclurait des installations de logiciels de type tarball ou des scripts maison.

25
slm