OpenRC是一個由Gentoo開發者維護的服務管理器。OpenRC是基於依賴關係的,通常使用系統提供的init程序SysVinit。
安裝
關於init組件的細節,請查閱Init。
安裝openrcAUR包。在0.25版本之後,OpenRC在/usr/bin/openrc-init提供它自己的init。
可選地,您可以使用其他init,例如busybox包。請注意,當使用openrc-init時,它必須和openrc-shutdown成對使用。並且不要使用來自其他包的shutdown和reboot命令,否則您將會遇到錯誤。
一組基本的服務文件可以從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 | 系統日誌 |
如果有需要,通過創建到/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=你也可以通過啟用相應的服務來使用NetworkManager、dhcpcd或netcfgAUR。netcfg模仿netctl的行為(請查閱[3]如果您想在啟動時啟用配置文件連結,需要wpa_actiond)。請查閱netcfg功能。
啟動日誌
要啟用啟動日誌記錄,將/etc/openrc/rc.conf中rc_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。
使用
您可以忽略.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"
禁用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的包。