为什么 Gentoo 软件包维护者无条件地安装 systemd 单元文件(即不依赖“systemd”USE 标志)?

为什么 Gentoo 软件包维护者无条件地安装 systemd 单元文件(即不依赖“systemd”USE 标志)?

重现步骤:

  1. 问题

     cd /usr/portage && grep -R "systemd_dounit" *
    
  2. 打开几个 ebuild 并阅读它们

几乎所有的 ebuild 都使用systemd_dounit不检查系统首先使用 USE 标志。

标志描述如下:
https://www.gentoo.org/support/use-flags/
systemd.eclass 的描述如下:
https://devmanual.gentoo.org/eclass-reference/systemd.eclass/index.html

不,函数代码也没有检查:

# @FUNCTION: systemd_dounit
# @USAGE: <unit>...
# @DESCRIPTION:
# Install systemd unit(s). Uses doins, thus it is fatal in EAPI 4
# and non-fatal in earlier EAPIs.
systemd_dounit() {
    debug-print-function ${FUNCNAME} "${@}"

    (
        insinto "$(_systemd_get_unitdir)"
        doins "${@}"
    )
}

答案1

因为 Gentoo 开发者社区认为,只要不引入 systemd 依赖项,无条件安装这些文件就没有问题。并且您可以使用INSTALL_MASK=/usr/lib/systemdin 来阻止这种情况make.conf(请参阅 参考资料man 5 make.conf)。

答案2

仅当您实际在 ebuild 中引用该 USE 标志时才需要 IUSE。

在我检查的几个 ebuild 中,他们不使用 systemd USE 标志,只是盲目地在 /usr/lib/systemd/system/ 中安装 systemd 服务定义,就像他们盲目地安装 OpenRC 初始化脚本而不检查 openrc USE 标志一样。

systemd(和 openrc)USE 标志用于 ebuild 中,其中 init 系统会产生重大差异,而不是是否安装服务或 init 脚本。

相关内容