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

43

Antes de todos os arquivos da unidade estarem, /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?

Mehul
fonte

Respostas:

38

Esta pergunta já foi respondida man 7 file-hierarchye vem com o systemd (também existe 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, os arquivos enviados em pacotes baixados do repositório de distribuição são acessados /usr/lib/systemd/. As modificações feitas pelo administrador do sistema (usuário) entram em /etc/systemd/system/.

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

Mirek Długosz
fonte
20

fundo

Se você olhar para a página de manual, man systemd.unitela possui 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 eles dizem "pacotes instalados", estão se referindo a qualquer coisa que foi instalada via RPM. O mesmo pode ser assumido para o Debian / Ubuntu, 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 de unidade /usr/lib/systemd/systemcomo este 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 /etc/systemd/system, esperamos encontrar nenhum arquivo pertencente a um RPM (que é realmente o caso no 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 ocasionalmente arquivos perdidos /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

Há outros.

Conclusões

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

Os arquivos /etc/systemd/systemsã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 inclui instalações de software do tipo tarball ou scripts criados em casa.

slm
fonte
3
Eu estava relutante para clicar este resultado google porque eu estava curioso sobre /lib/systemd/system vs. /usr/lib/systemd/system. Estou feliz por ter encontrado esta resposta.
Bruno Brosky
11
A colocação de uma definição de serviço /etc/systemd/systemgera um erro se você a mascarar Failed to execute operation: Invalid argument:; O systemd tenta substituir o arquivo por um link simbólico para / dev / null. Não dizendo que esta resposta está incorreta, apenas algo para lembrar.
Mrten 22/01
@BrunoBronosky O Debian realmente usa os dois /lib/systemd/system e /usr/lib/systemd/system , portanto, eu fiz a pergunta separadamente, unix.stackexchange.com/questions/550001/…
pevik