Was ist der Unterschied zwischen / usr / lib / systemd / system und / etc / systemd / system?

43

Was ist der Unterschied zwischen diesen Ordnern, bevor alle Unit-Dateien in waren, /etc/systemd/system/aber jetzt einige in /usr/lib/systemd/system(<- unter CentOS oder /lib/systemd/system<- unter Debian / Ubuntu) angezeigt werden?

Mehul
quelle

Antworten:

38

Diese Frage ist bereits beantwortet und man 7 file-hierarchywird mit systemd ausgeliefert (es gibt auch eine Online-Version ):

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

Grundsätzlich werden Dateien, die in Paketen enthalten sind, die aus dem Distributions-Repository heruntergeladen wurden, abgelegt /usr/lib/systemd/. Änderungen, die vom Systemadministrator (Benutzer) vorgenommen wurden, werden in übernommen /etc/systemd/system/.

Systemspezifische Einheiten überschreiben von Anbietern bereitgestellte Einheiten. Mit Drop-Ins können Sie nur bestimmte Teile von Unit-Dateien überschreiben, der Rest bleibt dem Hersteller überlassen (Drop-Ins sind seit dem Beginn von systemd verfügbar, wurden jedoch nur in v219 ordnungsgemäß dokumentiert; siehe man systemd.unit).

Mirek Długosz
quelle
20

Hintergrund

Wenn Sie sich die Manpage ansehen, finden man systemd.unitSie eine Tabelle, in der die Unterschiede erläutert werden. Dies ist von einem CentOS 7.x-System.

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

Wenn sie "installierte Pakete" sagen, beziehen sie sich auf alles, was über ein RPM installiert wurde. Dasselbe kann auch für Debian / Ubuntu angenommen werden, wo eine DEB-Datei das "installierte Paket" wäre.

HINWEIS: Die obige Tabelle unterscheidet sich geringfügig von einem Debian / Ubuntu-System.

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

Analysieren /usr/lib/systemd/system

/usr/lib/systemd/systemAuf einem CentOS / Fedora / RHEL-System können Sie wie folgt feststellen, welche Pakete welche Unit-Dateien besitzen:

$ 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

Analysieren /etc/systemd/system

Wenn wir dasselbe tun /etc/systemd/system, erwarten wir, dass wir keine Dateien finden, die einem RPM gehören (was auf meinem CentOS 7.x-System tatsächlich der Fall ist):

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

Ausreißer

Denken Sie daran, dass Sie unter Umständen gelegentlich /usr/lib/systemd/systemStreudateien finden , z. B. mit 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

Da sind andere.

Schlussfolgerungen

Die Erwartung ist, dass /usr/lib/systemd/systemes sich um ein Verzeichnis handelt, das nur System-Unit-Dateien enthalten sollte, die vom Paketmanager dort abgelegt wurden (YUM / DNF / RPM / APT / etc).

Hier werden die Dateien /etc/systemd/systemmanuell vom Betreiber des Systems für Ad-hoc-Softwareinstallationen abgelegt, die nicht in Form eines Pakets vorliegen. Dazu gehören Softwareinstallationen vom Typ Tarball oder selbst erstellte Skripte.

slm
quelle
3
Ich war nur ungern dieses Google - Ergebnis klicken , weil ich neugierig war /lib/systemd/system vs. /usr/lib/systemd/system. Ich bin froh, dass ich diese Antwort gefunden habe.
Bruno Bronosky
1
Platzieren einer Service - Definition in /etc/systemd/systemeinen Fehler erzeugt , wenn Sie es maskieren: Failed to execute operation: Invalid argument; systemd versucht, die Datei durch einen Symlink zu / dev / null zu ersetzen. Nicht zu sagen, dass diese Antwort falsch ist, ist nur etwas, an das man sich erinnert.
Mrten
@BrunoBronosky Debian verwendet tatsächlich beide /lib/systemd/system und /usr/lib/systemd/system deshalb stellte ich die Frage separat unix.stackexchange.com/questions/550001/…
pevik