我目前systemd
在 Manjaro 上使用,我正计划使用 OpenRC 切换到 Artix(没有任何反对意见systemd
,只是想尝试一个新的初始化系统来拓宽我的视野)。我读过非 systemd 初始化系统的一个问题是某些包对 systemd 有硬依赖,但我能找到的唯一示例是snap
(来自以下帖子)。
有没有一种方法可以列出我当前安装的依赖于 systemd 和/或其任何相关软件包的软件包,所以如果我决定改用 OpenRC,我可以看看我当前使用的任何东西是否不起作用?
我目前systemd
在 Manjaro 上使用,我正计划使用 OpenRC 切换到 Artix(没有任何反对意见systemd
,只是想尝试一个新的初始化系统来拓宽我的视野)。我读过非 systemd 初始化系统的一个问题是某些包对 systemd 有硬依赖,但我能找到的唯一示例是snap
(来自以下帖子)。
有没有一种方法可以列出我当前安装的依赖于 systemd 和/或其任何相关软件包的软件包,所以如果我决定改用 OpenRC,我可以看看我当前使用的任何东西是否不起作用?
虽然这个问题有点不清楚,但假设你想列出安装在系统中的包,
systemd
提到 asDepends on
,你可以简单地检查一下pacman
(因为你在 manjaro 中)。pacman -Qi systemd | grep Required
就我而言,它显示以下内容:
这是否意味着如果没有 systemd,我将无法使用这些程序?不必要。
我在 arch 上,arch 和 manjaro 都为基于 systemd 的系统提供官方支持。这意味着,官方存储库中的二进制包(需要初始化系统、udev、syslog 等)在打包时要牢记这一点。Systemd 完成了这些角色,因此如果一个 arch 包需要(不是真的),打包者会
systemd
在PKGBUILD
.举个例子,在我的例子中,你可以将 dhcpcd 列为依赖于
systemd
. 那是为了方便,它并不需要启动一个初始化系统。你可以从终端运行dhcpcd
。软件包维护者已经打包了一些 systemd 服务,因此您可以使用 dhcpcd 启动systemctl
或在启动后由 systemd 启动它(同样可以通过从 ~/.profile 或其他自动启动脚本运行的 shell 脚本轻松完成)。另一个例子是
libinput
.libinput 需要 udev,而 udev 由systemd
包提供,因此systemd
作为依赖项给出。artix
有eudev
等官方软件包被打包时eudev
考虑在内。还有其他替代方案可以替代udev
像suckless'snldev
ormldev
,它只需要在文本配置文件中进行一些调整即可适应这些不同的环境。netctl
(网络管理器)也被列出,但我从不需要使用它的systemd
服务启动它。我可以从~/.profile
(例如)启动它。这些不是在程序代码中硬编码的。唯一的区别(从外行的角度来看)是不同的服务管理器使用不同的配置语法和位置来存储它们。
这是gentoo wiki的摘录。适用于 gentoo 用户,但你明白了:
和
因此,
systemd
如果您从 manjaro 更改为 artix,并不是您的包(为 打包的)会损坏,只是artix
包维护者会打包他们的包,同时牢记他们的实现,所以一般不会破坏任何东西。即使对于
snap
AFAIK,它也需要systemd-tmpfiles
创建和删除临时文件以及使用systemd.mount
. 可以像这个人一样使用您自己的自定义脚本检测这些调用来捕捉和复制它然而
确实有一些软件包可能对 systemd 或其某些服务(例如
Gnome desktop
依赖于systemd-logind
. 但是 artix 在测试(alpha)阶段有一个 gnome-openrc iso 。你的问题确实有道理。
但是,您不能期望从 systemd 化的系统可靠地找到在 openrc 初始化系统下所需的 systemd 依赖项。
在 openrc 启动的系统下,确实可以在 systemd 上找到某些包的构建依赖项。(需要 systemd 的一些代码来构建包。)(udev、tmpfiles、elogind…)
我能建议的最好的方法是你从那里开始调查:gentoo 上的 sys-apps/systemd 反向依赖列表并观察以 [B] 开头的行
当然,对于某些软件包,您可能会为 systemd 构建依赖项提供替代方案。如果您有兴趣,请进行更深入的调查。