web-dev-qa-db-ja.com

/ usr / lib / systemd / systemと/ etc / systemd / systemの違いは何ですか?

すべてのユニットファイルが/etc/systemd/system/にあった前に、一部が/usr/lib/systemd/system(CentOSでは<-、Debian/Ubuntuでは/lib/systemd/system <-)で表示されるようになる前に、これらの違いは何ですかフォルダ?

52
Mehul

この質問はsystemdに付属するman 7 file-hierarchyですでに回答されています( オンラインバージョン もあります):

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

基本的に、ディストリビューションリポジトリからダウンロードされたパッケージで出荷されるファイルは/usr/lib/systemd/に入ります。システム管理者(ユーザー)が行った変更は/etc/systemd/system/に送られます。

システム固有の単位は、ベンダーが提供する単位をオーバーライドします。ドロップインを使用すると、ユニットファイルの特定の部分のみをオーバーライドして、残りをベンダーに任せることができます(ドロップインはsystemdの最初から使用できますが、v219でのみ適切に文書化されています。man systemd.unitを参照してください)。

43
Mirek Długosz

バックグラウンド

Manページman systemd.unitを見ると、違いを説明する表があります。これは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 │
           └────────────────────────┴─────────────────────────────┘

彼らが「インストールされたパッケージ」と言うとき、彼らはRPMを介してインストールされたすべてのものを指しています。 Debian/Ubuntuでも同じことが想定され、DEBファイルが「インストール済みパッケージ」になります。

注: Debian/Ubuntuシステムの上記の表は少し異なります。

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

分析[/usr/lib/systemd/system]

CentOS/Fedora/RHELシステムでは、どのパッケージがどのユニットファイルを/usr/lib/systemd/systemに所有しているかを次のように確認できます。

$ 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

分析[/etc/systemd/system]

同じことを/etc/systemd/systemに対して行うと、RPMが所有するファイルが見つからないことが予想されます(これは実際には、私のCentOS 7.xシステムの場合です)。

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

外れ値

Virtualbox(vboxadd *)の場合など、/usr/lib/systemd/systemの下に時々迷子のファイルが見つかることがあることに注意してください。

$ 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

他にもあります。

結論

/usr/lib/systemd/systemは、パッケージマネージャー(YUM/DNF/RPM/APT/etc)によってそこに配置されたsystemdユニットファイルのみを含むディレクトリであることが期待されています。

/etc/systemd/system内のファイルは、パッケージの形式ではないアドホックソフトウェアインストール用に、システムのオペレーターによって手動でここに配置されます。これには、tarballタイプのソフトウェアインストールまたは自家製のスクリプトが含まれます。

25
slm