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

43

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

Mehul
la source

Réponses:

38

On répond déjà à cette question dans man 7 file-hierarchylaquelle est fourni systemd (il existe également une 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 entrent dans /usr/lib/systemd/. Les modifications effectuées par l'administrateur système (utilisateur) entrent 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 des parties spécifiques de fichiers d'unité, le reste étant réservé au fournisseur (les drop-ins sont disponibles depuis le tout début de systemd, mais ils ont été correctement documentés uniquement dans la version 219; voir man systemd.unit).

Mirek Długosz
la source
20

Contexte

Si vous consultez la page de manuel, vous y trouverez man systemd.unitun tableau qui explique les différences. Ceci provient 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 "paquets installés", ils font référence à tout ce qui a été installé via un RPM. Il en va de même pour Debian / Ubuntu, 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 savoir quels packages possèdent les fichiers unité de /usr/lib/systemd/systemce type 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 la même chose /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'
$

Les valeurs aberrantes

N'oubliez pas que vous pouvez trouver des fichiers parasites occasionnels sous /usr/lib/systemd/system, par exemple 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

On s’attend à ce /usr/lib/systemd/systemqu’un répertoire ne contienne que les fichiers d’unité systemd qui y ont été insérés par le gestionnaire de paquets (YUM / DNF / RPM / APT / etc).

Les fichiers /etc/systemd/systemsont placés manuellement ici par l'opérateur du système pour les installations de logiciels ad-hoc qui ne sont pas sous la forme d'un package. Cela inclut les installations de logiciels de type tarball ou les scripts développés à la maison.

slm
la source
3
J'étais réticent à cliquer sur ce résultat de Google parce que j'étais curieux de savoir /lib/systemd/system contre /usr/lib/systemd/system. Je suis content d'avoir trouvé cette réponse.
Bruno Bronosky
1
Placer une définition de service dans /etc/systemd/systemgénère une erreur si vous la masquez Failed to execute operation: Invalid argument; systemd essaie de remplacer le fichier par un lien symbolique vers / dev / null. Ne pas dire que cette réponse est incorrecte, juste quelque chose à retenir.
Mrten
@BrunoBronosky Debian utilise réellement les deux /lib/systemd/system et /usr/lib/systemd/system , par conséquent, j'ai posé la question séparément unix.stackexchange.com/questions/550001/…
pevik