在Debian中用OpenRC替换Systemd

Hacker News Top 工具

摘要

在Debian上使用OpenRC替换Systemd的指南,包括安装步骤和面临的挑战。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/29 08:02

# Daniel Cordova 来源:https://danielcordova.me/blog/debian-openrc/ ## 太长不看 我并不是**systemd**的反对者,但也不完全赞成它的使用方式。说白了,如果它适合你,那就没问题。 然而*我的情况*更像是**好奇心与不适感**的交织。*好奇*在于 init 系统是如何工作的,而*不适*则源于*systemd*如何整合各种功能或新特性。我知道它在大多数使用场景下都运行良好(我从它早期就开始用了),也同意*systemd*违背了**KISS**哲学的几乎所有原则,但其他项目不也这样吗? **那么为什么会有不适感?** 这要从一段时间前说起。当时我看到新闻,讨论这个项目如何逐渐接管本应属于其他项目的职责,以及一些**生产环境部署**因为某个破坏性变更而严重失败——如果那个职责不属于*systemd*,本可避免。不过对我来说这还不算太糟。真正让我第一次感到不安的,是**年龄验证法律**(https://github.com/BryanLunduke/DoesItAgeVerify)正在酝酿,我当时天真地想:“好吧,Windows 和 Mac 会集成它,但 Linux 和其他开源 OS 及项目肯定会‘反抗’这种荒谬的法律!!” 然后我转念一想:“等等,什么?这条法律在一些州/国家甚至还没通过,systemd 就已经集成了?为什么?以往那种对无意义法律的‘反抗’精神去哪儿了?” > 我当时挺生气的,我知道,我不是那个项目的贡献者,而且*它只是一个可选字段*,但**感觉完全不对**。那位开发者遭受的群嘲也同样不对。 随后第二次不适感来自我阅读科技新闻时,发现这条:systemd 集成了 sys-install(https://www.muylinux.com/2026/06/22/systemd-261/)`systemd 集成了自己的“系统安装器”,名为 'systemd-sysinstall',以及其他功能`。 好吧,一个 init 系统承担大量职责是一回事,但从 PID 1 变成系统安装器是另一回事。不管你怎么包装这个想法,**“Init 系统的职责”** 和 **“systemd 的奇怪职责与愿望”** 之间有着天壤之别。于是**好奇心**作祟,我决定尝试在我的 *Thinkpad X13s Snapdragon*(https://danielcordova.me/blog/linux-x13s-snapdragon/)上安装 **OpenRC**(https://wiki.gentoo.org/wiki/OpenRC),这台笔记本我用来在家搞搞黑客、测试点东西等等。顺便说一句,这台笔记本运行的是 **Debian**。 ## 安装 在 **Debian Testing** 中安装 **OpenRC** 并不难,但也算不上简单操作。我在关于 apt-get 和 apt 如何处理**essential 包**时遇到了一些挑战和问题。 ### 挑战 在尝试安装 *OpenRC* 并同时卸载 *Systemd* 时,我遇到了两个主要挑战: - *apt-get* 根本无法卸载 *systemd*,只会报错说不可行 - *apt* 显示的错误信息更好一些,解释了为什么不能卸载 systemd 稍微挖掘并阅读了一些网页后,我了解到需要给 **apt** 传递一个参数,才能卸载一个 **essential** 包。所以卸载命令大概是这样: `` sudo apt purge --allow-remove-essential systemd `` > **先别复制粘贴。** 在删除 *systemd* 之前,需要确保 *OpenRC* 将被安装,因此命令应该是: `` sudo apt purge --allow-remove-essential systemd && sudo apt install openrc sysvinit-core `` > 该命令会卸载 systemd 并安装一些以后可能不需要的依赖。 ### 问题 安装 *OpenRC* 并卸载 *systemd* 后,系统无法正常启动,所以我不得不进入**恢复模式**并按 **Ctrl-D** 才能修复错误。 问题本身是:卸载 *systemd* 时,不知何故 *OpenRC* 也被移除了,或者根本没安装成功。于是我进入*恢复模式*,连接到 WiFi 网络,然后用 `apt install openrc sysvinit-core` 重新安装了 *OpenRC*。 到目前为止一切顺利。但**电池状态和音频**都不工作。我知道*电池状态*问题是因为在笔记本上安装 **Debian Testing** 时遇到的**内核回归**(https://lwn.net/ml/linux-kernel/[email protected]/)。于是我将 *systemd* 服务转换成一个脚本,并放入 `/etc/init.d/`,这样 *OpenRC* 就可以启动或启用它。成功了。至于音频,我觉得需要另一个与 pipewire 和 wireplumber 相关的服务,或者在登录时启动它们。我以后再测试。 Systemd 服务: `` [Unit] Description=Start Qualcomm remoteprocs (SLPI/ADSP/CDSP) DefaultDependencies=no After=initrd-root-fs.target local-fs.target Before=sysinit.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c 'echo start > /sys/class/remoteproc/remoteproc0/state; echo start > /sys/class/remoteproc/remoteproc1/state; echo start > /sys/class/remoteproc/remoteproc2/state' [Install] WantedBy=sysinit.target `` OpenRC 脚本 `` #!/bin/sh echo start > /sys/class/remoteproc/remoteproc0/state; echo start > /sys/class/remoteproc/remoteproc1/state; echo start > /sys/class/remoteproc/remoteproc2/state; `` > 我需要把它转换成规范的 **OpenRC** 脚本 ## 未来 目前 **OpenRC** 能胜任工作。我不确定它是否会成为我未来长期的默认 **Init 系统**,但我觉得这次实验是成功的。 我将在接下来的几天(也许几周)继续在我的 *"家庭黑客笔记本"* 上测试 **OpenRC**,如果感觉足够舒适,我也会将我的工作笔记本(同样运行 Debian Testing,并使用了相同的 dotfiles)迁移到 **OpenRC**。 尽管在现有的 **Linux** 安装上更换 *Init 系统* 存在一些麻烦和挑战,可能不是最佳选择,但我对目前的结果感到满意。 如果这对你也适用,那么我会更高兴知道你也在抛弃 *systemd* 而选择 *OpenRC*。*不开玩笑*,这归根结底是 Unix 自由的一部分——**使用任何你想要的东西,任何适合你的东西。** Happy Hacking!! ## 链接 如果你也对 **OpenRC** 感兴趣,这里有一些链接: - Debian: Switching Init System Easily (OpenRC, Sysvinit, Runit) (https://lecorbeausvault.wordpress.com/2022/02/07/debian-switching-init-system-easily-openrc-sysvinit-runit/) - Beyond systemd: A Technical Deep Dive into OpenRC for Modern Linux Systems (https://linux-digest.com/beyond-systemd-a-technical-deep-dive-into-openrc-for-modern-linux-systems) - Introduction to OpenRC: Managing Services with Ease (https://www.foxipex.com/2024/11/15/introduction-to-openrc-managing-services-with-ease/) - OpenRC on debian (https://members.loria.fr/EJeandel/posts/openrc/)

相似文章

用 Debian 13 构建双 WAN 路由器

Lobsters Hottest

一份详细指南,介绍如何用运行 Debian 13 的 N100 迷你 PC 替换 Cisco 双 WAN 路由器,涵盖 ifupdown 配置、KPN 的 PPPoE/VLAN 设置、baby jumbo 巨型帧、sysctl 路由设置,以及用于局域网 DHCP/DNS 的 dnsmasq。

我的新家庭服务器软件选择

Lobsters Hottest

一篇个人博客文章,详细描述了作者为新家庭服务器选择操作系统和服务管理软件的经历,比较了Synology、TrueNAS、Debian以及使用Runit的Void Linux。

Systemd 是一套基础构建模块

Hacker News Top

本文将 systemd 描述为一套 Linux 操作系统的基础构建模块,并提供了品牌指南,包括标志设计、配色和拼写规范。