OpenRC/Baselayout 1 から 2 への移行

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page OpenRC/Baselayout 1 to 2 migration and the translation is 100% complete.

Other languages:
English • ‎italiano • ‎日本語 • ‎한국어 • ‎русский

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

背景

baselayout とは?

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

OpenRC とは?

OpenRCは依存関係ベースのrc(run command)システムであり、システムから提供されるinit(通常は/sbin/init)と共に動作します。OpenRCは/sbin/initを置き換えるものではありません。Gentooで使用されるデフォルトのinitは sys-apps/sysvinitです。一方、Gentoo/FreeBSDはsys-freebsd/freebsd-sbinから提供される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への移行は本当に単純です。この移行はパッケージ管理による通常の更新の一部として実施されるでしょう。最も重要なステップは>=sys-apps/baselayout-2sys-apps/openrc がインストールされた直後です。システムをリブートするdispatch-confもしくは類似のツールで、/etcにあるファイルをアップデートすることが最重要です。このアップデートに失敗した場合、システムは二度とブートしません。その場合、LiveCDを使用してシステムを修復しなければなりません。

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

/etc/conf.d/rc

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

カーネルモジュール

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

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

FILE /etc/modules.autoload.d/kernel-2.6
ivtv
cx88_dvb video_br=2

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

FILE /etc/conf.d/modules
# Modules autoloaded at boot
modules_2_6="ivtv cx88_dvb"
# Module parameters
module_cx88_dvb_args_2_6="video_br=2"

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

重要
複数のmodule*変数に記載された設定は累積されません。特定のバージョンに固有な設定は、そうでない一般的な設定を上書きします。
注意
module_modules_の違いに注意してください。

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

FILE /etc/conf.d/modules
# Only load ivtv for 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"
# Only load cx88_dvb for 2.6.23 kernels (other than -gentoo-r5)
modules_2_6_23="cx88_dvb"
# Only load tun and usbserial for 2.6.x series kernels where x != 23
modules_2_6="tun usbserial"
# Otherwise load ochi1394 and ieee1394
modules="ohci1394 ieee1394"
  
# For 2.6.23-gentoo-r5, pass video_br=2 to cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# For 2.6.x series kernels, always pass vendor and product
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Always pass debug to ieee1394
module_ieee1394_args="debug" 

bootランレベル

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

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

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

root #ls -l /etc/runlevels/boot/

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

root #rc-update add root boot
root #rc-update add procfs boot
root #rc-update add mtab boot
root #rc-update add fsck boot
root #rc-update add swap boot

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

root #rc-update add mdraid boot
root #rc-update add lvm boot

udev

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

root #ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev

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

root #rc-update add udev sysinit

ネットワーク

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

root #cd /etc/init.d
root #ln -s net.lo net.eth0
root #rc-update add net.eth0 default

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

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

FILE /etc/conf.d/net旧スタイル
config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" "10.0.0.0/8 via 192.168.1.2" )
FILE /etc/conf.d/net新たなスタイル
config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100 10.0.0.0/8 via 192.168.1.2"

時計

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

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

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

FILE /etc/timezone
America/New_York

XSESSION

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

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

root #echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession
重要
/etc/env.d配下のファイルを変更した場合は、env-updateを実行し、ユーザは一度ログアウト後、再度ログインしなければなりません。もし変数を~/.bashrcで設定している場合は、source ~/.bashrcで変更を反映する必要があります。

EDITOR と PAGER

EDITOR変数も/etc/rc.confから削除されました。EDITORPAGERはデフォルトでは/etc/profileで設定されます。この設定は~/.bashrcファイル(bashの場合)でユーザ毎に、もしくは/etc/env.d/99editorでシステム全体の値を決めることができます。

重要
/etc/env.d配下のファイルを変更した場合は、env-updateを実行し、ユーザは一度ログアウト後、再度ログインしなければなりません。もし変数を~/.bashrcで設定している場合は、source ~/.bashrcで変更を反映する必要があります。

ブートログ

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

FILE /etc/rc.confロギングを有効にする
 rc_logger="YES" 

local.start と local.stop

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

システム サブタイプ:仮想化の場合

初期のOpenRCは複数の仮想化のタイプを検出できました。この情報はdepend関数のkeywordを呼び出しを通して、いくつかのinitscriptをスキップするために使用されていました。

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

重要
もし固有のサブタイプが存在しない場合、空の文字列""をデフォルトとして使用しなければなりません。もし変数がセットされない場合、警告が表示されると共に、従来の検出アルゴリズムを試みます。
注意
自動検出で設定される値が不明な時は、暫定的にrc_sys変数をコメントアウトして、検出するためのコマンドrc -Sを実行してください。
FILE /etc/rc.confシステムのサブタイプを無しに設定
rc_sys=""

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

Subtype Description Notes
デフォルト、サブタイプ無し 未設定とは異なります。FreeBSD、Linux、NetBSDを想定しています。
jail FreeBSDのjail
lxc Linux Containers 自動検出では検出されません。
openvz Linux OpenVZ
prefix Prefix 自動検出では検出されません。FreeBSD、Linux、NetBSDを想定しています。
vserver Linux vserver
xen0 Xen0ドメイン Linux、NetBSDを想定しています。
xenU XenUドメイン Linux、NetBSDを想定しています。

使われなくなった設定ファイルの消去

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

最も注目すべき例は/etc/conf.d/net.exampleです。このファイルは/usr/share/doc/openrc-*/net.example.bz2に引き継がれます。

仕上げ

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

変更された機能

ポーズ動作

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

/etc/mtab内のrootfsエントリー

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



This article is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: cardoe, nightmorph, robbat2, uberlord
They are listed here as the Wiki history does not allow for any external attribution. If you edit the Wiki article, please do not add yourself here; your contributions are recorded on the history page.