我目前正在使用systemd
Manjaro,并且计划切换到带有 OpenRC 的 Artix(没有任何反对systemd
,只是想尝试一个新的 init 系统来拓宽我的视野)。我读过非 systemd init 系统的一个问题是某些软件包对 systemd 具有硬依赖性,但我能找到的唯一示例是snap
(来自以下帖子)。
有没有一种方法可以列出我当前安装的依赖于 systemd 和/或其任何相关软件包的软件包,这样我就可以看到如果我决定使用 OpenRC,我当前使用的任何东西是否都不起作用?
答案1
虽然问题有点不清楚,但假设您想列出系统中安装的已systemd
提到的软件包Depends on
,您可以简单地检查pacman
(因为您在 manjaro 中)。
pacman -Qi systemd | grep Required
就我而言,它显示以下内容:
Required By : android-udev at-spi2-core base bluez-utils colord dhcpcd dunst iio-sensor-proxy libcolord libgudev libinput libmbim libpulse libwacom mdadm media-player-info mkinitcpio netctl phodav polkit rtkit sbupdate-git subversion swayidle systemd-sysvcompat transmission-cli upower vte3 xdg-desktop-portal zram-generator
这是否意味着如果没有 systemd 我将无法使用这些程序?不必要。
我使用 arch,arch 和 manjaro 都为基于 systemd 的系统提供官方支持。这意味着,官方存储库中的二进制包(需要 init 系统、udev、syslog 等)在打包时要牢记这一点。 Systemd 履行了这些角色,因此如果 arch 包需要(不是真的),打包者会systemd
在PKGBUILD
.
让我们举一些例子,在我的例子中,您可以将 dhcpcd 列为依赖于systemd
.这是为了方便,它实际上并不需要 init 系统来启动。你可以从终端运行dhcpcd
。软件包维护者已经打包了一些 systemd 服务,因此您可以使用 dhcpcd 启动 dhcpcdsystemctl
或在启动后由 systemd 启动它(同样可以通过从 ~/.profile 或其他自动启动脚本运行 shell 脚本轻松完成)。
另一个例子是libinput
.libinput 需要 udev,而 udev 由包提供,systemd
因此systemd
作为依赖项给出。artix
有eudev
,因此官方软件包在打包时eudev
考虑到了。还有其他替代方案,udev
例如sucklessnldev
或mldev
,并且只需要在文本配置文件中进行一些调整即可适应这些不同的环境。
netctl
(网络管理器)也被列出,但我从来不需要用它的systemd
服务启动它。我可以从 ~/.profile
(例如)启动它。
这些没有硬编码在程序代码中。唯一的区别(从外行人的角度来看)是不同的服务管理器使用不同的配置语法和位置来存储它们。
这是摘录自gentoo 维基。适用于 gentoo 用户,但你明白了:
一些上游软件包提供 systemd 单元文件,以使它们更容易安装在基于 systemd 的发行版上,并尝试使它们大部分开箱即用,但不会与 systemd 进行任何更重的集成,或者需要任何特定于 systemd 的功能。此类包不被认为对 systemd 有实际依赖(“软”或“硬”),并且根据 systemd 的官方 ebuild 策略,单元文件遵循针对小文本文件的通常准则(bash 补全、 logrotate 等)并且 ebuilds 不得阻止它们基于 systemd USE 标志的安装。
和
单元文件是无害的,如果未安装 systemd,则不会执行任何操作,就像如果未安装 sys-apps/openrc,OpenRC 服务脚本不会执行任何操作一样。然而,绝对不希望自己的机器上有 systemd 单元文件的用户可以将 systemd 的单元文件路径添加到 /etc/portage/make.conf 中的 INSTALL_MASK 变量中:
因此,如果您从 manjaro 更改为 artix,并不是说您的软件包(为 打包systemd
)会损坏,只是artix
软件包维护者会在打包他们的软件包时牢记其实现,因此一般不存在损坏任何东西的问题。
即使对于snap
AFAIK,它也需要systemd-tmpfiles
创建和删除临时文件以及使用systemd.mount
.可以检测这些对 snap 的调用,并使用您自己的自定义脚本复制它:这家伙做了
然而
确实有一些软件包可能对 systemd 或某些软件包具有硬依赖关系它的服务,比如Gnome desktop
环境,取决于在systemd-logind
。但是 artix 在其测试中有一个 gnome-openrc iso (alpha )阶段。
答案2
你的问题确实有道理。
然而,您不能指望从 systemd 化的系统中可靠地找到 openrc 初始化系统下所需的 systemd 依赖项。
在openrc inited系统下,确实可以找到构建依赖关系某些软件包在 systemd 上。 (构建软件包需要 systemd 中的一些代码。)(udev、tmpfiles、elogind...)
我能建议的最好的办法是你从那里开始调查:sys-apps/systemd 对 gentoo 的反向依赖列表并观察以 [B] 开头的行
当然,对于某些软件包,您可能可以提供 systemd 构建依赖项的替代方案。如果您有兴趣,请更深入地研究。