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
The  variable is no longer found in. Both  are set by default in. Adjust as needed in the file (or equivalent) or create  and set the system default there.

Boot log
Previously, the boot process could be logged using the package. However, OpenRC now handles all logging internally, so there is no need for the hacks that showconsole employed. showconsole can now be safely unmerged. To continue logging boot messages, set the appropriate variable in the  file. Logs will appear in.

local.start と local.stop
With OpenRC, and  have been deprecated. During the migration to OpenRC, the files are moved to and gain the suffix  or. OpenRC then executes those in alpha-numeric order.

System sub-types: Virtualization special cases
Earlier versions of OpenRC detected multiple types of virtualization, which was used to note when certain init scripts should be skipped, using the  call in the   functions.

However, as of the 0.7.0 release, administers are required to explicitly configure the sub-type using the  variable in. The sub-type should be set to match the virtualization environment that the given root is in. In general, the non-empty  value should be within the virtual containers; The host node will have.

The detection algorithm had to be replaced with manual configuration due to the introduction of new sub-types and changes to the kernel that made prior detection unreliable.

Cleaning up stale configuration files
After migration, there will be files left on the file system that are not cleaned up by Portage. Those are configuration files which are protected by Portage' configuration file protection feature.

The most notable example would be which is superseded by.

仕上げ
Once finished updating the config files and initscripts, the last thing to do is to type reboot with root privileges at a terminal. This is necessary because system state information is not preserved during the upgrade, so a fresh boot is needed.

The pause action
Previously it was possible to temporarily stop a service without taking down all the depending services by using /etc/init.d/service pause. In OpenRC, the  action was removed; this functionality is supported by the /etc/init.d/service --nodeps stop</tt>, which also works in the old baselayout.

rootfs entry in
Previously, the initial  entry was removed from, and only the real root  entry was present. The duplicate rootfs item was actually added back during shutdown. In OpenRC, both entries must be present for full support of initramfs and tmpfs-on-root. This also means that less writing is required during shutdown.