Qual é a diferença entre / usr / lib / systemd / system e / etc / systemd / system?

24

Antes de todos os arquivos unitários estarem em /etc/systemd/system/ , mas agora alguns estão aparecendo em /usr/lib/systemd/system (< - no CentOS, ou /lib/systemd/system < - no Debian / Ubuntu), qual é a diferença entre essas pastas? ?

    
por Mehul 29.05.2015 / 15:50

2 respostas

22

Esta questão já foi respondida em man 7 file-hierarchy , que vem com o systemd (há também a versão online ):

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

Basicamente, arquivos enviados em pacotes baixados do repositório de distribuição entram em /usr/lib/systemd/ . Modificações feitas pelo administrador do sistema (usuário) entram em /etc/systemd/system/ .

Unidades específicas do sistema substituem as unidades fornecidas pelos fornecedores. Usando drop-ins, você pode substituir apenas partes específicas dos arquivos unitários, deixando o restante para o fornecedor (os drop-ins estão disponíveis desde o início do systemd, mas foram documentados adequadamente apenas na v219; consulte man systemd.unit ).

    
por 08.06.2015 / 23:57
3

Antecedentes

Se você olhar para a página de manual man systemd.unit , tem uma tabela que explica as diferenças. Isto é de um 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 │
           └────────────────────────┴─────────────────────────────┘

Quando dizem "pacotes instalados", estão se referindo a qualquer coisa que tenha sido instalada por meio de um RPM. O mesmo pode ser assumido para o Debian / Ubuntu também, onde um arquivo DEB seria o "pacote instalado".

NOTA: a tabela acima de um sistema Debian / Ubuntu é um pouco 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 │
       └────────────────────┴─────────────────────────────┘

Analisando /usr/lib/systemd/system

Você pode dizer quais pacotes possuem quais arquivos da unidade em /usr/lib/systemd/system gostam disso em um 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

Analisando /etc/systemd/system

Se fizermos o mesmo em relação a /etc/systemd/system , esperamos não encontrar arquivos pertencentes a um RPM (o que é, de fato, o caso do meu sistema CentOS 7.x. ):

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

Outliers

Lembre-se de que você pode encontrar arquivos perdidos ocasionais em /usr/lib/systemd/system , como no 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

Existem outros.

Conclusões

A expectativa é que /usr/lib/systemd/system seja um diretório que deve conter apenas arquivos unitários do systemd que foram colocados lá pelo gerenciador de pacotes (YUM / DNF / RPM / APT / etc).

Os arquivos em /etc/systemd/system são colocados manualmente aqui pelo operador do sistema para instalações de software ad-hoc que não estão na forma de um pacote. Isso incluiria instalações de software do tipo tarball ou scripts desenvolvidos internamente.

    
por 25.07.2018 / 04:00