パッケージのサービス単位ファイルをカスタムバージョンに正しく置き換えるにはどうすればよいですか?

パッケージのサービス単位ファイルをカスタムバージョンに正しく置き換えるにはどうすればよいですか?

特定のパッケージのサービス単位ファイルを私のバージョンに置き換える方法が気になります。つまり、このサービス単位ファイルでいくつかの問題を見つけて修正しました。ただし、次のパッケージ更新では変更が失われます。

元のパッケージを修正して固定などを使用できることを知っています。しかし、この場合は複雑すぎるようで、一般的な方法でそのパッケージの更新を受けたいと思います。これは変更されたバージョンで維持したいサービス単位ファイルです。

私は次の解決策を思いついた。

  • /lib/systemd/system/daemon.service を /etc/systemd/system/my-daemon.service にコピーします。
  • 障害を負うそしてマスクdaemon.service は systemd が起動しなくなり、パッケージの更新によって再度有効にされないことを願っています。
  • my-daemon.serviceで適切に修正してください。
  • my-daemon.serviceを有効にする

これは合理的なアプローチですか?この問題に対する「正式な」解決策はありますか?

答え1

デフォルトでは、systemdはのサービス単位を使用します/usr/lib/systemd/system/daemon.service。ただし、 でサービス単位を見つけると、/etc/systemd/system/daemon.service自動的にその単位を使用し、基本単位を無視します。

だから基本的に

cp /usr/lib/systemd/system/daemon.service /etc/systemd/system/daemon.service

ファイルで必要なものを変更します/etc/systemd/system/daemon.service

代替方法:

これが気に入らない場合や、少し編集が必要な場合は、そこでsystemctl edit daemon.service実行して変更できます。これらの変更はマージサービスユニットsystemdは、ユニットが存在するか/usr/lib/...どうかに関係なく実行を試みます/etc/...

利点:

パッケージに付属する単位ファイルが更新されると、これらの変更は自動的に調整とマージされます。

欠点:

パッケージに付属する単位ファイルが更新されると、これらの変更は自動的に調整とマージされます。 (冗談ではありません。時には本当に欲しくない場合もあります。)

醜いです。 systemdは/etc/systemd/system/daemon.overrides.d/変更を含むディレクトリを作成します。ちょっと珍しくて見逃しやすいので、後には気になるかもしれません。

この方法でコンテンツを置き換えることはできず、上書きがセルにマージされるため、新しいコンテンツを追加するだけです。 (確かではありませんが、この機能を最後に使用したのは少し前でした。)

関連情報