OpenRC/Baselayout 1 to 2 migration/ja

このガイドでは baselayout-1 から OpenRCを使ったbaselayout-2 への移行について説明します.

baselayout とは?
Baselayoutは、など、すべてのシステムが正しく機能するために必要なファイルの基本セットを提供します. これはGentooで使われている基本的なファイルシステムレイアウトを提供しています. (すなわち, , , )

OpenRC とは?
OpenRCは依存関係ベースのrc(run command)システムであり、システムから提供されるinit(通常は)と共に動作します. OpenRCはを置き換えるものではありません. Gentooで使用されるデフォルトのinitは です. 一方、Gentoo/FreeBSDは から提供されるFreeBSD initを採用しています.

なぜ移行するの?
元々Gentooのrcシステムはbaselayout 1の中で作成され、全てbashで記述されていましたが、このためにいくつかの制限が発生しました. 例えば、一部のシステムコールはブート時に呼び出す必要がありますが、この部分はC言語で記述されました. また、これらの呼出し順序はそれぞれ静的に決まったため、rcシステムの実行時間増大の原因となりました.

さらに、GentooがGentoo/FreeBSDや組み込み向けGentoo等、他のプラットフォームに広がるにつれて、bashベースのrcシステムでは対応できなくなりました. このため、C言語で記述され、POSIX準拠のシェルのみを必要とするbaselayout 2の開発が始まりました. baselayout 2の開発期間中、baselayoutは単に基本となるファイル群とGentoo向けのファイルシステム構成を提供すればよく、rcシステムはそれぞれのパッケージに分割されることが決定されました. このような経緯でOpenRCは誕生したのです.

OpenRCは2010年までにRoy Marplesによって開発されました. そして現在はGentoo OpenRC Projectによってメンテナンスされています. OpenRCは現在ある全てのGentoo (つまりGentoo Linux、Gentoo/FreeBSD、組み込みGentoo、Gentoo Vserver)をサポートし、FreeBSDやNetBSD等の他のプラットフォームもサポートしています.

OpenRC への移行
OpenRCへの移行は本当に単純です. この移行はパッケージ管理による通常の更新の一部として実施されるでしょう. 最も重要なステップは と がインストールされた直後です. システムをリブートする前にdispatch-confもしくは類似のツールで、にあるファイルをアップデートすることが最重要です. このアップデートに失敗した場合、システムは二度とブートしません. その場合、LiveCDを使用してシステムを修復しなければなりません.

設定ファイルをアップデートした際、リブートの前に確認しなければならないいくつかの点があります.

/etc/conf.d/rc
は廃止されました. このファイルに記述されていた全ての設定は、に適切に移行しなければなりません. との差分を確認して設定を移行してください. 設定変更後、ファイルを手動で消去してください.

カーネルモジュール
通常、いくつかのカーネルモジュールはブート時に自動的にロードされます. これらの設定はカーネルに渡すパラメータと共にに記述していました. baselayout 2ではこのファイルは使用されません. 代わりに自動でロードされるモジュールとパラメータは、カーネルのバージョンに関わらずに記述されます.

旧来のスタイルでは以下のように記述されていました.

上記を新しいスタイルで記述すると以下のようになります.

最初の例では、モジュールとパラメータは2.6.x系のカーネルのみに適用されました. しかし、新しい設定スタイルではカーネルバージョンを元に、よりきめ細かくモジュールとパラメータをコントロールできます.

詳細な例は次のようになります.

bootランレベル
ランレベルは全ての機器にとって重要ないくつかのステップを実行します. 例えば、ルートファイルシステムが読み書き可能な状態でマウントできることを保証します. またファイルシステムにエラーが無いこと、マウントポイントが存在することを確認し、ブート時に疑似ファイルシステムを起動します.

OpenRCでは、ブロックストレージデバイスに対するボリューム管理サービスは、ブート時、自動的には起動されません. ここで対象になるのはLVM、RAID、swap、device-mapper (dm)、dm-crypt、およびその類似サービスです. システム管理者は、これらのサービスのinitscriptを ランレベルに追加しなければなりません. そうでない場合、そのシステムは二度と起動しないでしょう.

一方、OpenRCのebuildはこの移行を自ら試みます. 管理者はボリューム管理サービスが適切に移行されたことを検証しなければなりません.

もし上記リストに、、、、が無い場合は、以下のコマンドで ランレベルに追加しなければなりません.

もしシステムがmdraidとLVMを使っていて、かつ上記リストに含まれていない場合、以下のinitscriptを ランレベルに追加しなければなりません.

udev
OpenRCはをデフォルトでは起動しなくなったため、を ランレベルに追加しなければなりません. OpenRCのebuildは過去にが有効になっていたかを検出して、自動的に ランレベルに追加します. しかし、念のために次のコマンドで確認が必要です.

もしが無かった場合、次のコマンドで適切なランレベルに追加してください.

ネットワーク
baselayoutとOpenRCが２つの異なるパッケージに分割されたため、アップグレードの過程でnet.eth0 initscriptは無くなる可能性があります. このinitscriptを置き換えて再度defaultランレベルに追加するため、次を実行してください.

他のネットワークのinitscriptが無くなった時は、上記コマンドで修復してください. 単純に、 を無くなったネットワークデバイス名に置き換えてください.

さらに、 (oldnet)は、その設定についてbashスタイルの配列を使用しません. 新しいやり方についてはを参照してください. 変換は直感的にできるでしょう. 例えば、静的なIPアドレス割り当ては以下のように変更します.

時計
時刻の設定はから、時刻を調整するためのシステム固有のツールにリネームされました. これはLinuxではとなり、FreeBSDではとなります. 実時間で常時動作するクロック（Read Time Clock、RTC）のチップを搭載していないシステムはを使います. この場合、システム時刻はブート時に生成したファイルのmtimeから決められます. の中のinitscriptも適切にリネームされました. 適切なスクリプトがランレベルに追加されていることを確認してください.

さらに、このファイルでは 変数はもう使用されません. この設定はファイルにあります. もしファイルが存在しない場合、適切なタイムゾーンと共に生成されなければなりません. これらのファイルが正しく生成されていることを確認してください.

このファイルに設定する値は、ディレクトリから該当するタイムゾーンへの相対パスとなります. 例えばアメリカ東海岸に住むユーザにとって、正しい設定は次のようになるでしょう.

XSESSION
変数はから削除されました. 代わりに は、ファイルのようなユーザ毎の設定ファイルに、もしくはのようなシステム全体の設定に記述します.

以下のコマンドは、システム全体に適用されるデフォルトの を決定します.

EDITOR と PAGER
変数もから削除されました. と はデフォルトではで設定されます. この設定はファイル（bashの場合）でユーザ毎に、もしくはでシステム全体の値を決めることができます.

ブートログ
これまで、ブートプロセスのログはパッケージを使って取得できました. しかしOpenRCは全てのログを内部で管理します. そのため、showconsoleを使ったハックはもう必要ありません. showconsoleは安全にunmerge可能です. 引き続きブートメッセージのログを取得する場合は、ファイルの適切な変数（ ）を設定してください. このログはに保存されます.

local.start と local.stop
OpenRCではとは使用されなくなりました. OpenRCへの移行期間中、これらのファイルをに移動して、サフィックスもしくはを付与しておけば、OpenRCはこれらのファイルをアルファベット順に実行します.

システム サブタイプ：仮想化の場合
初期のOpenRCは複数の仮想化のタイプを検出できました. この情報は 関数の を呼び出しを通して、いくつかのinitscriptをスキップするために使用されていました.

しかし、0.7.0リリース時点で、サブタイプはファイルの 変数に明確に設定しなければならなくなりました. このサブタイプは、ルートが存在する仮想化環境に合致しなければなりません. 一般的に空でない は仮想環境で動作するシステムで使用されます. 逆に仮想環境のホストは を持つでしょう.

新しいサブタイプを導入するため、また事前検出が信頼できないカーネルに変更するため、自動検出はマニュアルでの設定に変更されました.

使われなくなった設定ファイルの消去
移行後、Portageでは自動的に削除されない設定ファイルがファイルシステムに残ります. これらは各種設定ファイルに対するPortageの保護機能のためです.

最も注目すべき例はです. このファイルはに引き継がれます.

仕上げ
各設定ファイルとinitscriptのアップデート完了後、ターミナルからルート権限でrebootコマンドを入力してください. 理由はアップグレードの間、システム状態は適切に保持されないためです. 新鮮なブートが必要です.

ポーズ動作
以前は/etc/init.d/service pauseを使うことで、あるサービスを、それに依存するサービス全体を停止することなく中断できました. OpenRCでは、この 動作は非サポートになりました. ただし、同じ機能が、古いbaselayoutでも動作する/etc/init.d/service --nodeps stopでサポートされます.

内のrootfsエントリー
これまでは、起動時の エントリーはから削除され、真のルートに対応するエントリーだけが存在していました. そしてこの重複したrootfsは、システムのシャットダウンの間に再度追加されていました. OpenRCでは、initramfsとルート上のtmpfsをフルサポートするため２つのrootfsエントリーをサポートします. これにより、シャットダウン時の再追加も不要になりました.