我注意到在 Debian 中通过 apt-get 安装软件包后,systemd 中的服务默认启用。然而,在其他发行版中,例如 Arch Linux,默认情况下禁用该包中的服务。
我的问题是:
- 这种行为取决于什么?是包管理器中的某些设置还是包本身决定是否启用它?
我的意思是在 Debian 上它看起来像是systemctl enable docker.service
在安装后执行的。在 Arch-linux 上,它docker.service
被禁用。
- 我怎样才能改变它?
答案1
正如 systemd 预设的说明所述,这是经销商做出的政策选择:
在 Fedora 上,所有服务默认处于关闭状态,因此安装软件包不会导致服务被启用(有一些例外)。在 Debian 上,默认情况下所有服务都会立即启用,因此安装软件包将导致其服务立即启用。
理论上,systemd 发行版使用预设系统来决定是否应在软件包安装后启用服务,systemctl preset
而不是systemctl enable
在软件包安装后维护脚本中运行;将本地覆盖应用于分发策略就像在 中创建您自己的更高优先级预设一样简单/etc/systemd/system-preset/
。 (Arch doco 在这里相当具有误导性。通常的情况是创建一个单独的本地预设文件来处理特定的服务。)
实际上,一些 systemd 发行版并不为此使用预设系统,并且将本地覆盖应用于 systemd 就是使用发行版自己的机制(如果它们实际上有这样的机制)。
进一步阅读
- 拉斐尔·赫佐格 (2014-12-08)。deb-systemd-helper 不尊重 systemd 预设文件。 Debian 错误 #772555。
- ”默认启用已安装的单元”。系统。拱门维基。
答案2
1)这种行为取决于什么?是包管理器中的某些设置还是包本身决定是否启用它?
每个发行版可能使用不同的包管理器,例如 Debian 中的 apt 或 Arch Linux 中的 pacman。这需要软件开发人员和/或包维护人员以各种(通常是不连贯的)方式准备包。这种差异可能与包中的设置有关,但有时在准备包时可能没有假设目标系统上将使用 systemd。
2)我怎样才能改变它?
了解您的发行版的特定包是如何准备和维护的,以及由谁负责。如果它是开源的,您就有机会在安装源中自行修改行为。您还可以联系软件开发人员/维护人员社区的人员以提出更改建议。