OpenRC
OpenRC は Gentoo の開発者によってメンテナンスされている init システムです。OpenRC は依存関係を前提とした init システムで、sysvinit などの init プログラムが動いているシステムで動作します。OpenRC は sysvinit を置き換えるものではありません。
目次
インストール
OpenRC は AUR から利用可能です。openrcAUR または openrc-gitAUR パッケージを選んでインストールできます。
バージョン 0.25 から、OpenRC には独自の init が付属しており /usr/bin/openrc-init
にインストールされます。任意で busybox や openrc-sysvinitAUR (伝統的な sysvinit に多少のパッチがあてられたバージョン) など他の init を使うこともできます。openrc-init
を使用する場合、他のパッケージの shutdown
や reboot
コマンドの代わりに openrc-shutdown
を使う必要があります。そうしないとエラーが発生します。
基本的なサービスファイルは openrc-arch-services-gitAUR パッケージでインストールできます。他にもサービスファイルが含まれたパッケージが存在します。AUR を検索してください。
initscripts-forkAUR との互換性を保つために、設定ファイルは /etc/openrc/
にインストールされます。
起動
OpenRC を使って起動するには使用する init をカーネルパラメータに追加してください。OpenRC に付属している init の場合は init=/usr/bin/openrc-init
を追加します。openrc-sysvinitAUR を使用する場合は /usr/bin/init-openrc
に置き換えてください。
設定
OpenRC の設定は /etc/openrc/conf.d
ディレクトリと /etc/openrc/rc.d
ファイルで行います。
設定に関する詳細な資料は以下を参照してください:
サービス
OpenRC のサービスは root で rc-update add service_name runlevel
を実行することで有効にできます。最低でも以下のサービスを有効化することが推奨されます:
サービス名 | ランレベル | 説明 |
---|---|---|
udev | sysinit | デバイスのホットプラグ |
alsa | default | ALSA の状態 |
acpid | default | ACPI イベント |
dbus | default | メッセージバス |
dcron | default | スケジュール |
syslog-ng | default | システムログ |
Native services やデーモンも参照してください。
ネットワーク
ネットワークを立ち上げて動かす方法は複数存在します。一つは /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"
network サービスはデフォルトで起動時のランレベルに追加されるため、これ以外の設定は必要ありません。
また、NetworkManager や dhcpcd、さらに netcfgAUR などを使うことも可能です。それぞれのサービスを有効にしてください。
一般的な、ネットワークの設定の詳細においてはネットワーク設定を見て下さい。
ログ
syslog-ng
syslog-ng を使う場合、/etc/syslog-ng/syslog-ng.conf
内の次の行をコメントアウトしてください:
unix-dgram("/run/systemd/journal/syslog")
そして、代わりに次の行を追加してください:
unix-dgram("/dev/log");
起動時のログ
OpenRC の起動時のログはデフォルトで無効になっています。有効にするには、/etc/openrc/rc.conf
内の次の行をアンコメントしてください:
#rc_logger="YES"
ホストネーム
OpenRC は /etc/openrc/conf.d/hostname
からホストネームを設定します。
以下は設定ファイルの例:
/etc/openrc/conf.d/hostname
hostname="myhostname"
モジュールの自動ロード
OpenRC は /etc/modules-load.d/
フォルダを使用せず、そのかわりに /etc/openrc/conf.d/modules
を使います。
このファイルに以下のように行を追加してください:
modules=acpi_cpufreq
ロケール
OpenRC でロケールを設定する方法が備わっていません。しかしながら、/etc/locale.conf
ファイルを使って設定することが可能です。このファイルは /etc/profile.d/locale.sh
で読み込まれます。
ロケールの設定に関する詳細は、ロケールを参照してください。
ヒントとテクニック
ブートメッセージを消す
OpenRC でブートメッセージを非表示にするには、/etc/inittab
を編集して全ての openrc コマンドに --quiet
を追加してください。詳しい情報は $ openrc -h
で確認できます。
トラブルシューティング
/tmp のアンマウント時にエラーが起こる
システムをシャットダウンするときに、以下のようなエラーメッセージが表示されることがあります:
* Unmounting /tmp ... * in use but fuser finds nothing [ !! ]
この問題は /etc/openrc/conf.d/localmount
に以下を追加することで修正できます:
no_umounts="/tmp"
IPv6 が無効にできない
OpenRC は /etc/openrc
の sysconf ディレクトリにインストールした場合に起こります。
/etc/openrc/sysctl.d
下のファイル (拡張子は .conf にしてください) に以下を記述することで修正できます:
# Disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1
シャットダウン中に読み込み専用での root の再マウントが失敗する
この問題が発生する場合、/etc/openrc/init.d/mount-ro
を編集して以下を:
telinit u
次の行の後に記述してください:
# Flush all pending disk writes now sync; sync
/etc/sysctl.conf not found
デフォルトで、sysctl の設定をロードするために sysctl --system
が実行されます [1]。Arch では存在しない /etc/sysctl.conf
も読み込まれます [2]。
ファイルが見つからないというエラーを表示させたくない場合、ファイルを作成してください:
# touch /etc/sysctl.conf
root 以外のユーザーで X サーバーが起動しない
Xorg のバージョン 1.16 から、X は systemd-login を使用して rootless で起動するようになっています。init システムとして OpenRC を使っている場合は startx
が機能しなくなります。
以下の内容で /etc/X11/Xwrapper.config
ファイルを作成することでこの問題は解決します:
# Xorg.wraper configuration file needs_root_rights = yes
opentmpfiles-setup failed to start
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
で btrfs ファイルシステム上にジャーナルがある場合にしか使えないオプションが有効になっていることが原因です。詳しくは https://github.com/OpenRC/opentmpfiles/issues/2 を参照してください。
空の /etc/tmpfiles.d/journal-nocow.conf
ファイルを作成することで設定を上書きできます。
OpenRC でデスクトップ環境を使う
OpenRC でデスクトップ環境を使う場合、ConsoleKit が役に立ちます。サービス を /etc/openrc/init.d
にインストールして、有効化してください:
# rc-update add consolekit default
詳しくは ConsoleKit を参照。
OpenRC 0.28 から SysVinit は openrc-init に置き換えられ、shutdown は openrc-shutdown に置き換えられています。consolekit を使用している場合、デスクトップセッションからシャットダウンした際にシステムがフリーズする可能性があります。elogind-openrcAUR[リンク切れ: パッケージが存在しません] を代わりに使うようにしてください。以下のコマンドで有効化できます:
# rc-update add elogind default
また、polkit-consolekit は polkit-elogindAUR に置き換える必要があります。置き換えないと USB デバイスをマウントした際にシステムから "not authorized to perform operation" という警告が表示され、デスクトップセッションから再起動やシャットダウンができなくなります。
systemd との比較
systemd | OpenRC | 説明 |
---|---|---|
systemctl list-units |
rc-status |
動作中のサービスの状態を表示 |
systemctl --failed |
rc-status --crashed |
失敗した、クラッシュしたユニット・サービスの確認 |
systemctl --all |
rc-update -v show |
利用できるユニット・サービスを全て表示 |
systemctl (start, stop, restart, status) daemon.service |
rc-service daemon (start, stop, restart, status) |
ユニット・サービスをすぐに起動・停止・再起動・状態を表示 |
systemctl (enable, disable) daemon.service |
rc-update (add, del) daemon |
サービス・ユニットを追加もしくは削除 |
この表は この投稿 からの引用です。
init を systemd に戻す
大抵の場合 systemd に戻すのは簡単です。OpenRC から systemd に移行する際は、以下の点に注意してください:
- カーネルコマンドラインの
init=
パラメータの編集。 - OpenRC 向けに改造された、systemd を使用しないパッケージを標準のパッケージに置き換え (例: dbus-nosystemdAUR を dbus に置換)。