重现步骤:
问题
cd /usr/portage && grep -R "systemd_dounit" *
打开几个 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/systemd
in 来阻止这种情况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 脚本。