玩式草子─ソフトウェアとたわむれる日々

第99回 Plamo-7.0とSysvinit

この記事を読むのに必要な時間:およそ 4.5 分

いつの間にか夏至も過ぎ,そろそろ今年も半分が終る時期になってしまいました。家の回りの水田も,青々とした若苗が風にそよいでいます。例年なら田植えが終って一段落の時期なものの,今年は水番が当たっているので,朝夕,田んぼの水位の確認・調整に忙しい日々を送っています。

さて,去る6月13日に,ここしばらくの回で紹介してきたPlamo Linux 7.0を公式にリリースしました。DVDイメージはrepository.plamolinux.orgから入手できます。サイズの関係でDVDは2枚組みとなったものの,2枚目はTeX回りと動作に必須ではないcontrib的なパッケージを収めているだけなので,TeX(tetex)が不要な方は1枚目のDVDイメージのみでインストールできます。

Plamo Linuxは大手ディストリビューションのような完成度はありませんが,小規模な分,全体の見通しはよく,Linuxの勉強をしたい人や,手作りで自分の環境を作りあげたい人には便利なディストリビューションだと思っています。本連載等でPlamo Linuxに興味を関心を持たれた方は,ぜひ試してみてください。

閑話休題,今回は,文字コードの変更と共にPlamo-7.0で加えた大きな変更点である起動処理回りを解説します。

Plamo-7.0の起動処理

Plamo-7.0でも,Plamo-6.x同様,システムの起動にはsysvinitパッケージを使っています。sysvinitは"SystemV Init"の略で,⁠UNIX SystemV(アルファベットのVではなく,ローマ数字の5)が採用した起動処理」の機能を実装したソフトウェアを意味します。

少し昔話をすると,UNIXにはAT&Tベル研究所で開発されたバージョンと,それを元にカリフォルニア大学バークレー校で開発されたバージョンの2種があり,前者の系統をその最終バージョン名を冠して"SystemV(システム・ファイブ,略してSysV)",後者を"BSD(Berkeley Software Distribution)"と呼び慣わしています。

"SystemV Init"は前者の系統のUNIXが採用したシステムの初期化メカニズムで,複数のランレベル(動作モード)⁠を用意しているのが特徴です。

ここで言う「ランレベル」とは,全ての機能を使える「通常モード」⁠rootユーザのみがログインできるトラブルやメンテナンス時に便利な「シングルユーザモード」⁠root以外のユーザもログインできるもののNFS等ネットワーク機能は使えない「ネットワーク無しモード」など,起動するサービスを取捨選択して状況に応じた環境を提供する機能です。

この機能を使えば,何らかのハードウェアトラブルが生じた場合,⁠⁠通常モード」から「⁠シングルユーザモード」に切り替えて一般ユーザを追い出し,root権限でバックアップやシステムリカバリ作業を行う,といった操作ができます。

一方,BSD系のUNIXでは「ランレベル」という概念は採用せず,必要なサービスは/etc/rcファイルで直接起動する,というスタイルになっていました。

複数のランレベルを切り替えられるSysV形式の起動処理は高機能なものの,使用するソフトウェアがその形式に対応している必要があるのに対し,BSD形式では起動したいサービスを/etc/rcファイルに記述するだけで済むので,80年代後半にフリーソフトウェアをインストールしながらUNIXを学んだ人間にとってはBSD形式の方が使いなれた仕組みでした。Slackware Linuxの原作者Patrick Vorkerdingさんも同じように考えて,sysvinitを使いながらもBSD UNIXのrcファイルをエミュレートするスタイルにしたのでしょう。

一方,Linuxがディストリビューションとして進化するにつれ,システムの中身にあまり詳しくないユーザでもさまざまなソフトウェアを簡単にインストール/アンインストールできるようにする必要が生じました。その結果,rcファイルを修正しなければならないBSD形式は敬遠されるようになり,パッケージごとに起動/終了スクリプトをあらかじめ用意するSysV形式が主流になりました。そこで遅ればせながら,Plamo LinuxでもPlamo-7で起動スタイルを正式なSysV形式に変更することにしたわけです。

init回りはその後も進化を続け,UpstartやInitNG,OpenRCなどの仕組みが提案され,最近ではsystemdが主流となってきています。将来的にPlamo Linuxもsystemdに移行するかも知れませんが,それはだいぶ先のことでしょう(苦笑)⁠

SysV形式の設定ファイル

UNIX/Linuxの場合,カーネルは,起動後必要な初期化処理等を終えると/sbin/initというコマンドを実行することになっています。

Linuxの起動時パラメータで"init=/bin/bash"等を指定すれば,/sbin/init以外のコマンドを実行することができます。

SysV形式の場合,この/sbin/initは/etc/inittabという設定ファイルに従って動作します。そこで,Plamo-7と6.xの/etc/inittab を比較してみましょう。まず,これがPlamo-6.xの/etc/inittab(の主要部分)です。

リスト1 Plamo-6.xの/etc/inittab

11  # Default runlevel.
12  id:3:initdefault:
13  
14  # System initialization (runs when system boots).
15  si:S:sysinit:/etc/rc.d/rc.S
16  
17  # Script to run when going single user (runlevel 1).
18  su:1S:wait:/etc/rc.d/rc.K
19  
20  # Script to run when going multi user.
21  rc:2345:wait:/etc/rc.d/rc.M
22  

同じ部分は,Plamo-7.0ではこうなっています。

リスト2 Plamo-7.0の/etc/inittab

 4  id:3:initdefault:
 5  
 6  si::sysinit:/etc/rc.d/init.d/rc S
 7  
 8  l0:0:wait:/etc/rc.d/init.d/rc 0
 9  l1:S1:wait:/etc/rc.d/init.d/rc 1
10  l2:2:wait:/etc/rc.d/init.d/rc 2
11  l3:3:wait:/etc/rc.d/init.d/rc 3
12  l4:4:wait:/etc/rc.d/init.d/rc 4
13  l5:5:wait:/etc/rc.d/init.d/rc 5
14  l6:6:wait:/etc/rc.d/init.d/rc 6

/etc/inittabは1行が1つの設定で,それぞれ "識別子:ランレベル:アクション:実行コマンド"という形になっています。識別子はそれぞれの行を区別する任意の文字列,ランレベルはその行を実行するランレベルの指定(複数可)⁠アクションはプロセスを起動/終了させる際の動作,実行コマンドはその行が実行するコマンド,を意味します。

「アクション」で"initdefault"を指定すると,その行で指定したランレベルがデフォルト・ランレベル」⁠すなわち「通常モード」になます。リスト1でも2でも "id:3:initdefault:" なので,デフォルト・ランレベルは"3"です。

"sysinit"を指定すると,その行は起動時に実行されることになります。そのためPlamo-6.xでは15行目で"/etc/rc.d/rc.S"が,Plamo-7.0では6行目で"/etc/rc.d/init.d/rc S"が,システムの起動時に実行されます。"sysinit"で指定した処理が終わればシステムはデフォルト・ランレベルに移行し,Plamo-6.xでは21行目の/etc/rc.d/rc.M7.0では11行目の/etc/rc.d/init.d/rc 3が実行されます。

"wait"というアクションの指定は,実行したコマンドが終了するまで待つ,という指示です。その他詳細は"man inittab"してみてください。

Plamo-6.xではランレベルを細かく分けずシングルユーザモード(18行目)⁠マルチユーザモード(21行目)⁠を提供しているだけなのに対し,Plamo-7.0では0から6までのランレベル(8行目から14行目)を設けています。Plamo-7.0のランレベルの割り当ては以下の通りです。

ランレベル 動作モード
0 終了(halt)
1 シングルユーザモード
2 ネットワーク機能なしのマルチユーザモード
3 全ての機能が使えるマルチユーザモード
4 予備
5 GUIログイン用
6 リブート

これはLFS(Linux From Scratch)の設定をそのまま引きついでおり,LFSはLSB(Linux Standard Base)の仕様を元にしているので,SysV形式を使っているディストリビューションの標準的な割り当てです。

ランレベル4は,利用者が独自の動作モードを定義できるように「予備」とされ,デフォルトではランレベル3と同じ設定になっています。

リスト1と2を見比べると,Plamo-6.xでは処理にrc.Sとrc.M,rc.Kの3つのスクリプトを使いわけているのに対し,Plamo-7.0ではrcという一つのスクリプトが与える引数によって動作を変えていることがわかります。さて,それではどのようにrcスクリプトはランレベルごとに指定された任意の数のサービスを起動するのでしょう?

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入