跳转到内容

OpenRC

来自 Arch Linux 中文维基
警告:Arch Linux只为systemd提供官方支持。[1]求助时请在帮助请求中提及使用OpenRC。

OpenRC是一个由Gentoo开发者维护的服务管理器。OpenRC是基于依赖关系的,通常使用系统提供的init程序SysVinit

安装[编辑 | 编辑源代码]

关于init组件的细节,请查阅Init

安装openrcAUR包。在0.25版本之后,OpenRC在/usr/bin/openrc-init提供它自己的init。

可选地,您可以使用其他init,例如busybox。请注意,当使用openrc-init时,它必须和openrc-shutdown成对使用。并且不要使用来自其他包的shutdownreboot命令,否则您将会遇到错误。

一组基本的服务文件可以从openrc-arch-services-gitAUR包获得。其他包可能有在此包之外提供的服务文件,建议在AUR上搜索。

为了保持和initscripts-forkAUR的兼容性,配置文件已经在/etc/openrc/中安装。

启动[编辑 | 编辑源代码]

kernel parameters中设置init选项来使用OpenRC启动。


要使用OpenRC内建的init,设置init=/usr/bin/openrc-init

请注意,当使用openrc-init时,/etc/inittab文件将不会被使用。

配置[编辑 | 编辑源代码]

/etc/openrc/conf.d目录和/etc/openrc/rc.d文件被用于配置。

关于配置OpenRC的一般信息,请查看:

关于从systemd迁移的说明,请查看Init#Configuration

服务[编辑 | 编辑源代码]

通过root身份运行rc-update add service_name runlevel来启动OpenRC服务。建议启动以下服务:

服务名 Runlevel 描述
udev sysinit 设备热插拔
alsa default ALSA state
acpid default ACPI事件
dbus default 消息总线
dcron default 定时任务
syslog-ng default 系统日志
警告:如果在您的kernel parameters中使用init=/usr/bin/openrc-init,您将需要手动启用getty服务,否则您将无法使用如该文档中所述的交互式TTY

如果有需要,通过创建到/etc/openrc/init.d/getty的符号链接来为每个getty创建服务。例如为/dev/tty1

# ln -s /etc/openrc/init.d/agetty{,.tty1}
# rc-update add agetty.tty1 default

为了防止PAM在登录后尝试向systemd注册(这可能会引发问题, 可以安全地删除或注释/etc/pam.d/system-auth中提到systemd的行。

另请参阅Gentoo:Systemd#Native services

网络[编辑 | 编辑源代码]

网络通过newnet [2]配置。

编辑/etc/openrc/conf.d/network;ip、(iproute2)和ifconfig、(net-tools)命令都被支持。下面是一个使用ip的例子:

ip_eth0="192.168.1.2/24"
defaultiproute="via 192.168.1.1"
ifup_eth0="ip link set \$int mtu 1500"

网络服务被默认添加到引导运行级别(boot runlevel),所以不需要采取进一步操作。关于一般网络信息,请参阅Network configuration

{{Note|1=你也可以通过启用相应的服务来使用NetworkManagerdhcpcdnetcfgAURnetcfg模仿netctl的行为(请查阅[3]如果您想在启动时启用配置文件链接,需要wpa_actiond)。请查阅netcfg功能

启动日志[编辑 | 编辑源代码]

要启用启动日志记录,将/etc/openrc/rc.confrc_logger="YES"一行去注释。在启用时,启动日志存储在/var/log/rc.log

主机名[编辑 | 编辑源代码]

OpenRC通过/etc/openrc/conf.d/hostname来修改主机名。它看起来像这样:

#设置这台电脑的主机名
hostname="myhostname"

内核模块[编辑 | 编辑源代码]

OpenRC使用/etc/openrc/conf.d/modules而不是/etc/modules-load.d。例如:

/etc/openrc/conf.d/modules
#您应该查阅内核文档和配置获取模块及其选项的列表

modules="vboxdrv acpi_cpufreq"

本地化[编辑 | 编辑源代码]

键盘布局可以通过/etc/openrc/conf.d/keymaps/etc/openrc/conf.d/consolefont来配置。您也可以通过/etc/locale.conf文件,其来源于/etc/profile.d/locale.sh

使用[编辑 | 编辑源代码]

本节对systemd以及其他init进行比较。

您可以忽略.service.target扩展,尤其是在编辑kernel parameters时。

systemd SysVinit OpenRC 描述
systemctl list-units rc.d list rc-status 列出所有正在运行的服务的状态
systemctl --failed rc-status --crashed 检查所有失败的服务
systemctl --all rc-update -v show 显示所有可用服务
systemctl (start, stop, restart, status) daemon.service rc.d (start, stop, restart) daemon rc-service daemon (start, stop, restart, status) 改变服务状态
systemctl (enable, disable) daemon.service chkconfig daemon (on, off) rc-update (add, del) daemon 启用或停用服务
systemctl daemon-reload chkconfig daemon --add 创建或修改配置

提示和技巧[编辑 | 编辑源代码]

静默启动[编辑 | 编辑源代码]

要隐藏OpenRC的启动信息,您可以编辑/etc/inittab,将--quiet添加到每个OpenRC命令。有关更多信息,请查看$ openrc -h

故障排除[编辑 | 编辑源代码]

卸载/tmp时出错[编辑 | 编辑源代码]

当关机时,您可能会得到这样的信息:

* Unmounting /tmp ... 
* in use but fuser finds nothing [ !! ]

可以通过向/etc/openrc/conf.d/localmount添加如下内容解决:

no_umounts="/tmp"
注意:只有将/tmp安装为tmpfs时才会出现此问题。

禁用IPv6无效[编辑 | 编辑源代码]

一种选择是向/etc/openrc/sysctl.d下一个以.conf结尾的文件添加:

# 禁用IPv6
net.ipv6.conf.all.disable_ipv6 = 1

在关机期间以只读模式重新挂载根目录失败[编辑 | 编辑源代码]

如果发生上述情况,请编辑/etc/openrc/init.d/mount-ro,找到下面一行:

# Flush all pending disk writes now
sync; sync

在其之后放入:

telinit u

找不到/etc/sysctl.conf[编辑 | 编辑源代码]

默认情况下,调用sysctl --system来加载sysctl配置。[4]这包括从Arch中删除的/etc/sysctl.conf[5]

要放置丢失文件的错误,请创建文件:

# touch /etc/sysctl.conf

opentmpfiles-setup无法启动[编辑 | 编辑源代码]

在启动OpenRC时,您可能会看到如下行:

* Setting up tmpfiles.d entries ...
chattr: Operation not supported while setting flags on /var/log/journal
chattr: No such file or directory while trying to stat /var/log/journal/%m
chattr: Operation not supported while setting flags on /var/log/journal/remote
[ !! ]
ERROR: opentmpfiles-setup failed to start

这是由于/usr/lib/tmpfiles.d/journal-nocow.conf使用的选项,只有当journal位于btrfs上时才有效。

请查阅https://github.com/OpenRC/opentmpfiles/issues/2来获取详细信息。

一种解决方法是创建一个空的/etc/tmpfiles.d/journal-nocow.conf来覆盖这些设置。

恢复到systemd[编辑 | 编辑源代码]

在大多数情况下,恢复到systemd应该很简单。它本质上是迁移到OpenRC的逆向,注意以下几点:

  • 删除或以其他方式编辑内核命令行上的init=参数。
  • 用等价的包替换OpenRC定制的或no-systemd的包。

另请参阅[编辑 | 编辑源代码]