我可以安全地编辑 nginx 包提供的 Nginx Systemd 单元文件(/lib/systemd/system/nginx.service)吗?

我可以安全地编辑 nginx 包提供的 Nginx Systemd 单元文件(/lib/systemd/system/nginx.service)吗?

apt install nginx我在 Debian 9.2 主机上安装了 Nginx 。它运行正常,但在查看 Systemd 日志时journalctl -u nginx,我发现了有趣的东西:

启动高性能 Web 服务器和反向代理服务器。

事实证明 Systemd 重用了单元文件的“[Unit]”部分中的“Description”字段,并且确实如此/lib/systemd/system/nginx.service

描述=高性能 Web 服务器和反向代理服务器

这是 Debian Nginx 维护者或其他人开的玩笑吗? 甚至 Systemd 文档https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Description=说:

不好的例子是“高性能轻量级 HTTP 服务器”(太通用)

因此,我正在考虑编辑“描述”字段,使其更具描述性,但我不确定当我将更新 nginx 包作为系统更新或升级的一部分时,这将如何工作——如果nginx.service尝试安装另一个版本,我会收到冲突警告吗?我知道包配置文件就是这种情况,这也适用于包中的其他类型的文件吗?

答案1

粗略地讲,/usr或中的任何内容/lib都应视为只读,尤其是由软件包安装的任何内容。(偶尔也有不幸的例外。)除非软件包中对某个文件进行了特殊标记,否则升级将直接覆盖它。

更改各种 systemd 文件的推荐方法是将它们复制到/etc。例如,单元文件/etc/systemd/system/nginx.service将覆盖 /usr/lib 中的单元文件。(它甚至会覆盖自动生成的 init.d 服务单元。)使用该工具systemd-delta查看所有被覆盖单元的差异。

好吧,我说“推荐”是因为它也适用于像 udev 规则之类的东西......但更好的方法是使用“插入”文件仅覆盖单元的部分内容/etc/systemd/system/nginx.service.d/foobar.conf- 这只需要两行,即部分名称[Unit]和您的新Description=设置;其余的将从/usr/lib 继承。

在这两种情况下,您都可以systemctl edit [--full]打开编辑器并进行更改。

最后,通用的 Debian 选项是告诉打包系统 (dpkg) 避免更新特定文件,无论它位于何处。您可以使用 将实际文件“转移”到其他地方dpkg-divert。其他发行版也有类似的功能,例如 Arch 的 pacman 使用NoExtract=NoUpgrade=

相关内容