Apa perbedaan antara / usr / lib / systemd / system dan / etc / systemd / system?

43

Sebelum semua file unit ada /etc/systemd/system/tetapi sekarang beberapa muncul di /usr/lib/systemd/system(<- pada CentOS, atau /lib/systemd/system<- di Debian / Ubuntu), apa perbedaan antara folder-folder ini?

Mehul
sumber

Jawaban:

38

Pertanyaan ini sudah dijawab man 7 file-hierarchyyang dilengkapi dengan systemd (ada juga versi 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.

Pada dasarnya, file yang dikirimkan dalam paket yang diunduh dari repositori distribusi masuk /usr/lib/systemd/. Modifikasi yang dilakukan oleh administrator sistem (pengguna) masuk ke /etc/systemd/system/.

Unit khusus sistem menimpa unit yang disediakan oleh vendor. Menggunakan drop-in, Anda hanya dapat mengganti bagian tertentu dari file unit, menyerahkan sisanya kepada vendor (drop-in tersedia sejak awal systemd, tetapi hanya didokumentasikan dengan benar di v219; lihat man systemd.unit).

Mirek Długosz
sumber
20

Latar Belakang

Jika Anda melihat halaman manual man systemd.unititu memiliki tabel yang menjelaskan perbedaan. Ini dari sistem 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 │
           └────────────────────────┴─────────────────────────────┘

Ketika mereka mengatakan "paket yang diinstal" mereka merujuk pada apa pun yang diinstal melalui RPM. Hal yang sama dapat diasumsikan untuk Debian / Ubuntu juga di mana file DEB akan menjadi "paket yang diinstal".

CATATAN: tabel di atas dari sistem Debian / Ubuntu sedikit berbeda.

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

Menganalisa /usr/lib/systemd/system

Anda dapat memberi tahu paket apa yang memiliki file unit /usr/lib/systemd/systemseperti ini pada sistem 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

Menganalisa /etc/systemd/system

Jika kami melakukan hal yang sama terhadap /etc/systemd/system, kami berharap tidak menemukan file yang dimiliki oleh RPM (yang sebenarnya terjadi pada sistem CentOS 7.x saya.):

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

Pencilan

Ingatlah bahwa Anda mungkin menemukan file sesekali /usr/lib/systemd/systemterselubung di bawah , seperti dengan 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

Ada yang lain.

Kesimpulan

Harapannya adalah bahwa itu /usr/lib/systemd/systemadalah direktori yang seharusnya hanya berisi file unit systemd yang ditempatkan di sana oleh manajer paket (YUM / DNF / RPM / APT / dll).

File dalam /etc/systemd/systemditempatkan secara manual di sini oleh operator sistem untuk instalasi perangkat lunak ad-hoc yang tidak dalam bentuk paket. Ini akan mencakup instalasi perangkat lunak jenis tarball atau skrip yang dikembangkan sendiri.

slm
sumber
3
Aku enggan untuk mengklik hasil google ini karena saya ingin tahu tentang /lib/systemd/system vs /usr/lib/systemd/system. Saya senang saya menemukan jawaban ini.
Bruno Bronosky
1
Menempatkan definisi pelayanan dalam /etc/systemd/systemmenghasilkan kesalahan jika Anda menutupinya: Failed to execute operation: Invalid argument; systemd mencoba mengganti file dengan symlink ke / dev / null. Tidak mengatakan jawaban ini salah, hanya sesuatu yang perlu diingat.
Mrten
@BrunoBronosky Debian sebenarnya menggunakan keduanya /lib/systemd/system dan /usr/lib/systemd/system , oleh karena itu saya mengajukan pertanyaan secara terpisah unix.stackexchange.com/questions/550001/…
pevik