OpenRC - Arch Linux 中文维基

跳至內容

# OpenRC

出自 Arch Linux 中文维基

相關文章

- init

翻譯狀態：

- 本文（或部分內容）譯自 OpenRC，最近一次同步於 2026-02-26，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

警告：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`成對使用。並且不要使用來自其他包的`shutdown`和`reboot`命令，否則您將會遇到錯誤。

一組基本的服務文件可以從openrc-arch-services-gitAUR包獲得。其他包可能有在此包之外提供的服務文件，建議在AUR上搜索。

為了保持和以前的初始化腳本的兼容性，配置文件已經在`/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的一般信息，請查看：

- OpenRC manuals
- Gentoo: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。

<nowiki>

注意：您也可以通過啟用相應的服務來使用 NetworkManager 或者 dhcpcd 。

### 啟動日誌

要啟用啟動日誌記錄，將`/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`。

## 使用

本節對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配置。[3]這包括從Arch中刪除的`/etc/sysctl.conf`。[4]

要放置丟失文件的錯誤，請創建文件：

    # 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的包。

## 另請參閱

- Wikipedia:OpenRC
- Gentoo:OpenRC
- Forum thread about OpenRC in Arch
- Manjaro wiki

分類：​

- 初始化

OpenRC
新增話題