OpenRC

提供: ArchWiki
2017年11月4日 (土) 15:21時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

警告: デフォルトでは Arch は systemd を使用しています。OpenRC を使う場合、助けを求める時はそのことを明記して下さい。

OpenRC は Gentoo の開発者によってメンテナンスされている init システムです。OpenRC は依存関係を前提とした init システムで、sysvinit などの init プログラムが動いているシステムで動作します。OpenRC は sysvinit を置き換えるものではありません。

インストール

OpenRC は AUR から利用可能です。openrcAUR または openrc-gitAUR パッケージを選んでインストールできます。

バージョン 0.25 から、OpenRC には独自の init が付属しており /usr/bin/openrc-init にインストールされます。任意で busyboxopenrc-sysvinitAUR (伝統的な sysvinit に多少のパッチがあてられたバージョン) など他の init を使うこともできます。openrc-init を使用する場合、他のパッケージの shutdownreboot コマンドの代わりに 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 ファイルで行います。

設定に関する詳細な資料は以下を参照してください:

systemd から移行する場合は Init#設定を参照。

サービス

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 サービスはデフォルトで起動時のランレベルに追加されるため、これ以外の設定は必要ありません。

また、NetworkManagerdhcpcd、さらに netcfgAUR などを使うことも可能です。それぞれのサービスを有効にしてください。

一般的な、ネットワークの設定の詳細においてはネットワーク設定を見て下さい。

ログ

syslog-ng

syslog-ng を使う場合、/etc/syslog-ng/syslog-ng.conf 内の次の行をコメントアウトしてください:

unix-dgram("/run/systemd/journal/syslog")

そして、代わりに次の行を追加してください:

unix-dgram("/dev/log");
ノート: この変更を行わないと syslog-ng が起動しないため何もログが残りません。

起動時のログ

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"
ノート: この問題は tmp が tmpfs でマウントされている場合のみ発生します。

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} xyz /etc/openrc/init.d/xyz {start,stop,restart,status} ユニット・サービスをすぐに起動・停止・再起動・状態を表示
systemctl {enable,disable} xyz rc-update {add,del} xyz サービス・ユニットを追加もしくは削除

この表は この投稿 からの引用です。

init を systemd に戻す

大抵の場合 systemd に戻すのは簡単です。OpenRC から systemd に移行する際は、以下の点に注意してください:

  • カーネルコマンドラインの init= パラメータの編集。
  • OpenRC 向けに改造された、systemd を使用しないパッケージを標準のパッケージに置き換え (例: dbus-nosystemdAURdbus に置換)。

外部リンク