¿Cuál es la diferencia entre / usr / lib / systemd / system y / etc / systemd / system?

43

Antes de que estuvieran todos los archivos de la unidad /etc/systemd/system/pero ahora algunos aparecen en /usr/lib/systemd/system(<- en CentOS, o /lib/systemd/system<- en Debian / Ubuntu), ¿cuál es la diferencia entre estas carpetas?

Mehul
fuente

Respuestas:

38

Esta pregunta ya está respondida en la man 7 file-hierarchyque viene con systemd (también hay una versión en línea ):

        /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.

Básicamente, entran los archivos que se envían en paquetes descargados del repositorio de distribución /usr/lib/systemd/. Las modificaciones realizadas por el administrador del sistema (usuario) entran /etc/systemd/system/.

Las unidades específicas del sistema anulan las unidades suministradas por los proveedores. Con los complementos, puede anular solo partes específicas de los archivos de la unidad, dejando el resto al proveedor (los complementos están disponibles desde el comienzo de systemd, pero se documentaron correctamente solo en v219; ver man systemd.unit).

Mirek Długosz
fuente
20

Fondo

Si nos fijamos en la página del manual man systemd.unit, tiene una tabla que explica las diferencias. Esto es de un sistema 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 │
           └────────────────────────┴─────────────────────────────┘

Cuando dicen "paquetes instalados" se refieren a todo lo que se instaló a través de un RPM. Lo mismo puede suponerse para Debian / Ubuntu también donde un archivo DEB sería el "paquete instalado".

NOTA: la tabla anterior de un sistema Debian / Ubuntu es ligeramente diferente.

 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 │
       └────────────────────┴─────────────────────────────┘

Analizando /usr/lib/systemd/system

Puede saber qué paquetes poseen los archivos de unidad /usr/lib/systemd/systemcomo este en un sistema 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

Analizando /etc/systemd/system

Si hacemos lo mismo en contra /etc/systemd/system, esperaríamos no encontrar archivos propiedad de un RPM (que de hecho es el caso en mi sistema CentOS 7.x):

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

Valores atípicos

Tenga en cuenta que puede encontrar archivos extraviados ocasionales /usr/lib/systemd/system, como con 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

Hay otros.

Conclusiones

La expectativa es que /usr/lib/systemd/systemes un directorio que solo debe contener archivos de unidad systemd que fueron colocados allí por el administrador de paquetes (YUM / DNF / RPM / APT / etc).

El /etc/systemd/systemoperador del sistema coloca los archivos aquí manualmente para las instalaciones de software ad-hoc que no tienen la forma de un paquete. Esto incluiría instalaciones de software de tipo tarball o scripts propios.

slm
fuente
3
Me resistía a hacer clic en este resultado Google porque tenía curiosidad acerca /lib/systemd/system vs /usr/lib/systemd/system. Me alegro de haber encontrado esta respuesta.
Bruno Bronosky
1
Colocar una definición de servicio en /etc/systemd/systemgenera un error si lo enmascara Failed to execute operation: Invalid argument:; systemd intenta reemplazar el archivo con un enlace simbólico a / dev / null. No decir que esta respuesta es incorrecta, solo algo para recordar.
Mrten
@BrunoBronosky Debian en realidad usa ambos /lib/systemd/system y /usr/lib/systemd/system , por lo tanto, hice la pregunta por separado unix.stackexchange.com/questions/550001/…
pevik