Gentoo Logo

BaselayoutとOpenRCの移行ガイド

目次:

1.  背景

baselayoutとは何ですか?

Baselayoutは、すべてのシステムで正常に動作するために必要とされる、例えば/etc/hostsのような基本的なファイルセットを提供します。 また、Gentooで使用されている基本的なファイルシステムのディレクトリ構成(言い換えれば、/etc/var/usr/homeなどのディレクトリ )も提供します。

OpenRCとは何ですか?

OpenRCは、依存関係を前提としたrcシステムで、システムにはinitとして提供されています。普通は/sbin/initを指します。 しかし、/sbin/init置き換えるものではありません。 Gentoo Linuxが標準で使用するinitは、sys-apps/sysvinitです。しかし、FreeBSDで使用されるGentoo/FreeBSDのinitは、sys-freebsd/freebsd-sbinで提供されます。

なぜ移行するのでしょうか?

もともとGentooのrcシステムは、ほぼbashで書かれたbaselayout 1に組み込まれていました。 これはいくつかの制限につながりました。例えば、特定のシステムコールは、起動中はずっとアクセスできる必要があり、これを実現するにはC言語ベースの呼び出しを追加する必要があります。これらの呼び出しは、個々にスタティックリンクされ、長期間かけて肥大化する結果となった。

それに加えて、GentooがGentoo/FreeBSDやGentoo Embeddedのようなプラットフォームに拡大するにつれて、bashを必要とするrcシステムは合わなくなってきました。 これはPOSIXに準拠したshellのみを必要とするC言語で実装されたbaselayout 2の開発につながりました。 baselayout 2の開発中に、 baselayoutは、ただ単に基本ファイルとGentoo向けのファイルシステムのディレクトリ構成だけを提供すれば汎用性が向上し、rcシステムの個々の機能は、個々のパッケージに分割することが決定した。 それゆえ、OpenRCと呼ばれます。

OpenRCは、主にRoy Marplesによって開発され、現在提供されている全てのGentooのバリエーション(Gentoo Linux、Gentoo/FreeBSD、Gentoo Embedded、Gentoo Vserver)とFreeBSDやNetBSDのような他のプラットフォームをサポートします。

2.  OpenRCへの移行

OpenRCへの移行は、非常に簡単です。パッケージマネージャの通常のアップグレードプロセスで導入できます。 最も重要なステップは、実際に>=sys-apps/baselayout-2sys-apps/openrcの2つの新しいパッケージをインストールした後です。 再起動前に、dispatch-confを実行し、/etc配下を更新しておくことがもっとも重要です。 上記を実行しないと、起動不能なシステムになります。 こうなってしまったシステムを復旧するには、Gentoo 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に集約されました。もう、カーネルのバージョンは関係ありません。

以前の設定例を紹介します。

コード表示 2.1: /etc/modules.autoload.d/kernel-2.6

ivtv
cx88_dvb video_br=2

上記の例は、移行後は以下のようになります。

コード表示 2.2: /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_は意味が違うので、注意してください。

コード表示 2.3: /etc/conf.d/modulesの詳細な設定例

# Only load ivtv for 2.6.23-gentoo-r5
# ivtvは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)
# cx88_dvbは2.6.23のみでロード(ただし-gentoo-r5は除く)
modules_2_6_23="cx88_dvb"
# Only load tun and usbserial for 2.6.x series kernels where x != 23
# 2.6.xシリーズ(x != 23)のカーネルでのみtunとusbserialをロード
modules_2_6="tun usbserial"
# Otherwise load ochi1394 and ieee1394
# それ以外ならochi1394とieee1394をロード
modules="ohci1394 ieee1394"

# For 2.6.23-gentoo-r5, pass video_br=2 to cx88_dvb
# 2.6.23-gentoo-r5でのみcx88_dvbにパラメータとしてvideo_br=2を渡す
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# For 2.6.x series kernels, always pass vendor and product
# 2.6.xシリーズのカーネルは、vendorとproductを渡す
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Always pass debug to ieee1394
# ieee1394には常にdebugを渡す
module_ieee1394_args="debug" 

起動時のランレベル

起動時に選択されたランレベルは、全てのマシンにおける重要なステップのいくつかを実行します。 例えば、rootファイルシステムがread/writeでマウントされたかを確認し、マウントされたファイルシステムにエラーが無いことを確認し、マウントポイントが利用可能となり、その後、/procという疑似ファイルシステムがスタートします。

OpenRCにおいて、ブロック ストレージ デバイスのためのボリューム管理サービスは、起動時に自動的に実行されません。 これは、lvm、raid、swap、device-mapper(dm)、dm-crypt、evmsのようなものを含みます。 起動時ののランレベルの中で、これらのサービスのための適切なinitscriptを実行する必要があります。そうしなければ、システムは起動しなくなるでしょう!

OpenRC ebuildは、この移行作業を自動的に行いますが、全てのボリューム管理サービスに対して適切に移行できたかは、ユーザが確認する必要があります。

コード表示 2.4: 起動時のランレベルのすべてのサービスを表示する

# ls -l /etc/runlevels/boot/

もし、上記コマンドで出力したリストにrootとprocfs、mtab、swap、fsckが見当たらなければ、起動時ののランレベルに、以下の追加手順を実施してください。

コード表示 2.5: 起動時のランレベルに最重要サービスを追加する

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

もし、mdraidとlvmを使用していて、先のリストで見当たらなければ、起動時のランレベルに以下の手順でinitscriptを追加してください。

コード表示 2.6: 起動時のランレベルにmdraidとlvmを追加する

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

Udev

OpenRCは、もはやデフォルトでudevを実行しません。しかし、実行するためにsysinitランレベルに存在する必要があります。 OpenRC ebuildは、もし移行前のシステムでudevを使用していることを検知したら、sysinitランレベルに追加します。 しかし、安全のためにudevがあるか確認してください。

コード表示 2.7: udevを確認する

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

udevがリストアップされない場合は、適切なランレベルに追加します。

コード表示 2.8: sysinitランレベルにudevを追加する

# rc-update add udev sysinit

ネットワーク

baselayoutとOpenRCという2つの異なるパッケージに分割されたため、net.eth0というinitscriptはアップグレード プロセスの中で消失する可能性があります。このinitscriptを置き換えるために、以下の手順を実行してください。

コード表示 2.9: 消失したnet.eth0スクリプトを追加しなおす

# cd /etc/init.d
# ln -s net.lo net.eth0

その他のネットワーク用のinitscriptが見当たらない場合は、再追加する上記手順を同様に行ってください。 単純に、ネットワーク デバイスのeth0を置き換えて実行してください。

また、/etc/conf.d/net(oldnet)の設定に、bashスタイルの配列は使用できなくなります。 設定手順が記載されている/usr/share/doc/openrc-<version>/net.exampleを見直してください。 設定の書き直しは、比較的簡単です。(以下のroutes_eth0のように) 分離したエントリを書くには改行が必要になります。 例えば、スタティックIPアドレスの設定は、以下のように変更となります。

コード表示 2.10: 以前のスタイル/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" )

コード表示 2.11: 新しいスタイルの/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"

Clock

Clockの設定は、/etc/conf.d/clockから時刻を設定するためのネイティブツールに名前が変更されました。 Linuxは、/etc/conf.d/hwclockになり、FreeBSDは、/etc/conf.d/adjkerntzになりました。 リアルタイムクロック(RTC)チップが働かないシステムは、システムがシャットダウン時に作成されるmtimeというファイルのシステムクロックである、/etc/init.d/swclockを使用すべきです。 /etc/init.d/のinitscriptは、それに応じて名称を変更しています。 そのため、自分のシステムの適切なスクリプトを、起動時のランレベルに追加する必要があります。

また、TIMEZONE変数は、このファイルでは無くなりました。 この変数は、/etc/timezoneファイルに統合されました。 もし、/etc/timezoneファイルが無い場合は、自分のタイムゾーンに合わせたファイルを作成する必要があります。 これらのファイルが正しく更新されたかどうか確認してください。

このファイルの適切な設定値は、/usr/share/zoneinfoからの相対パスになります。 例えば、米国の東海岸に住んでいる人は、以下が正しい設定になります。

コード表示 2.12: /etc/timezone

America/New_York

XSESSION

XSESSION変数は、/etc/rc.confから無くなりました。 その代わりXSESSION変数は、利用者毎の設定は、~/.bashrc(または同等のファイル)に設定し、システム全体の設定は、/etc/env.d/で行います。

システム全体に適用するXSESSIONの設定例を示します。

コード表示 2.13: システム全体に適用するXSESSIONの設定例

# echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession

重要: /etc/env.dにファイルを作成した後は、env-updateを必ず実行してください。そして、設定を反映するためにログアウトして、ログインしてください。 ~/.bashrcに設定する場合は、source ~/.bashrcで読み込み直してください。

EDITORとPAGER

EDITOR変数は、/etc/rc.confから無くなりました。 このEDITORとPAGERは、/etc/profileで設定します。 利用者毎に設定する場合は、~/.bashrc(または同様のファイル)で行い、システム全体で設定する場合は、/etc/env.d/99editorを作成してください。

重要: /etc/env.dにファイルを作成した後は、env-updateを必ず実行してください。そして、設定を反映するためにログアウトして、ログインしてください。 ~/.bashrcに設定する場合は、source ~/.bashrcで読み込み直してください。

起動時のログ

以前は、app-admin/showconsoleで起動中のプロセスのログを取ることができました。 しかし、最新のOpenRCは、内部機能で全てのログを処理しますので、showconsoleを使用する必要が無くなりました。 showconsoleを安全にアンインストールすることができます。 起動中のメッセージのログをとり続けるために、/etc/rc.confに適切な変数を設定します。 ログは、/var/log/rc.logに出力されます。

コード表示 2.14: /etc/rc.confに起動のログを出力を有効にする

rc_logger="YES"

システムのsub-type: 仮想化の場合

OpenRCの初期のバージョンでは、数種類の仮想化を検出し、 depend関数の中でkeywordを使って一部のinitスクリプトをスキップできるようにしていました。

しかし、0.7.0からは/etc/rc.confrc_sys変数を自分でsub-typeにあわせて設定しなくてはいけません。 sub-typeはそのルートのある仮想化環境によって変わります。 一般的には空文字ではないrc_sysは仮想化の中で使われます。 つまり、仮想化のホスト環境ではrc_sys=""となります。

重要: 特別なsub-typeがなければデフォルトの空文字""を設定するようにしてください。 この変数が設定されていなければ、警告が出て旧来の自動検出のアルゴリズムが使われます。

注意: 自動検出でどの値が使われるかわからなければ、一時的にrc_sysをコメントアウトして rc -Sで検出コマンドを実行してください。

コード表示 2.15: /etc/rc.confでシステムのsub-typeを「なし」に設定する

rc_sys=""

新しいsub-typeの導入のため、また旧来の検出方法を信頼できなくなるカーネルの変更があったため、 自動検出アルゴリズムを使うのではなく、手動の設定に置き換えなければなりませんでした。

sub-type 説明 補足
デフォルト sub-typeなし 設定なしと同じではない。 FreeBSD, Linux & NetBSD
jail FreeBSDのjail
lxc Linux Containers 自動検出されない
openvz Linux OpenVZ
prefix Prefix 自動検出されない。 FreeBSD, Linux & NetBSD
vserver Linux vserver
xen0 Xen0 Domain Linux & NetBSD
xenU XenU Domain Linux & NetBSD

仕上げ

設定ファイルとinitscriptの更新作業が完了すると、最後の作業は、再起動することです。 システムの状態情報は、この更新作業で保存されないので、再起動を行うことでシステムの状況を更新する必要があるのです。

3.  変更された機能

pause アクション

以前は/etc/init.d/service pauseで依存しているサービスの全てを止めることなく、 一時的にサービスを停止することができました。 OpenRCではpauseアクションは削除されました。 /etc/init.d/service --nodeps stopで同じ機能が動きます。 これは旧来のbaselayoutでも有効です。

/etc/mtabのrootfs項目

以前は初期化時のrootfs項目は/etc/mtabから削除され、 実際のルートの/の項目だけが残っていました。 実際のルートと重複するrootfsの項目はシャットダウン時に再び戻されていました。 OpenRCではinitramfsを完全にサポートするため、またtmpfs-on-rootをサポートするために、 両方の項目が出てくるようになります。これによって、シャットダウン時の書きこみも少なくなります。



印刷

ページの更新日 2011年 4月 13日

この翻訳はすでにメンテナンスされていません。

要約: このガイドは、baselayout-1からbaselayout-2とOpenRCへの移行方法を説明します。

Doug Goldstein
Author

Joshua Saddler
Author

Robin H. Johnson
Author

Roy Marples
Contributor

飴谷 シゲヒロ
翻訳

青田直大
翻訳

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.