Init
[Wikipedia|▼Menu]

initは、UNIXおよびUnix系システムのプログラムのひとつであり、他の全てのプロセスを起動する役目を持つ。デーモンとして動作し、一般にPID 1 を付与される。ブートローダカーネルを起動し、カーネルがinitを起動する。代替手段を用意せずにinitを削除すると、次回のリブート時にシステムはカーネルパニックに陥る可能性がある。

init の機能はBSD系とSystem V系では大きく異なるため、ユーザーは自分のシステムがどちらのバージョンを使っているかをマニュアルで調べる必要がある。多くのLinuxディストリビューションで使われていたinitはSystem Vと互換性がある。SlackwareのようなLinuxディストリビューションではBSD系のinitを使っていた。Gentoo Linuxなどでは独自のinitを使用していた。ISO/IEC 23360-1:2006の国際規格[1]になったLinux Standard Baseではinitを定義している[2]

他にもいくつかinitの設計上の限界に対処した代替として、systemdUpstartがあり、Ubuntu[3][4]や他のLinuxディストリビューションで採用している[5][6]
System V系のinit

System Vのinitは、/etc/inittabファイル内の:initdefault:エントリを調べて既定のランレベルがあるかチェックする。既定のランレベルがない場合、コンソール端末に何らかの表示がなされるので、ユーザは手でランレベルを入力しなければならない。

利点: 柔軟で拡張性がある。

欠点: 複雑である。

ランレベル

System Vランレベル (runlevel) は、マシンの状態を実行するプロセス群によって分類したものである。一般に 0 - 6とSまたはsという8段階のランレベルがある。Sとsは同じランレベルの別名である。この8段階のうち、以下の3つは予約されたランレベルである。0. 停止 (Halt)1. シングルユーザーモード6. 再起動 (Reboot)

これら以外のランレベルは、各システムによってそれぞれ意味が異なる。一般に、/etc/inittabファイルで、各ランレベルで何をするかを定義している。
デフォルトのランレベル

OSデフォルトのランレベル
AIX2
CentOS3(コンソール/サーバ)または5(グラフィカル/デスクトップ)[7]
Debian2[8]
Gentoo Linux3[9]
HP-UX3(コンソール/サーバ/マルチユーザ)または4(グラフィカル)
macOS3
Mandriva Linux3(コンソール/サーバ)または5(グラフィカル/デスクトップ)
Red Hat Linux / Fedora Core3(コンソール/サーバ)または5(グラフィカル/デスクトップ)[10]
Slackware3
Solaris3[11]
SUSE Linux3(コンソール/サーバ)または5(グラフィカル/デスクトップ)[12]
Ubuntu2[8]

上記表でデフォルトのランレベルを5としているLinuxディストリビューションでは、5というランレベルはマルチユーザーのグラフィカル環境(X Window Systemと、その上でディスプレイマネージャが起動される)である。しかし、Solarisでは、ランレベル5はシャットダウンと電源オフの自動化のために予約されている。

現在のランレベルは以下のようなコマンドを使って調べることができる。$ runlevel$ who -r

通常、ランレベルはrootがtelinitコマンドまたはinitコマンドを実行することで変更することができる。デフォルトのランレベルは/etc/inittabファイルの:initdefault:エントリにある。
BSD系のinit

Berkeley Software Distribution (BSD) のinitは、/etc/rcにある初期化用シェルスクリプトを実行し、/etc/ttysの制御下にあるテキストベース端末用のgettyを起動したり、グラフィックス端末用にXなどを起動したりする。ランレベルという概念は無く、/etc/rcファイルでinit の動作を決定している。

利点: 手で変更・修正するのが容易である。

欠点: ブート時にサードパーティーのパッケージの初期化スクリプトを実行する必要がある場合、上記のスクリプトのいずれかを編集する必要があるが、ちょっとした間違いでブート不可能な状態になってしまう。

BSDの子孫では、伝統的に/etc/rc.localファイルをブート処理の最後近くに実行することでブート不可となる危険性を和らげていた。

NetBSD 1.5では完全にモジュール化したシステムを導入し、それがFreeBSD 5.0およびそれ以降にも移植されている。このシステムは、/etc/rc.d ディレクトリ配下にあるスクリプト群を実行するものである。System Vでのスクリプト実行順は各スクリプトのファイル名の順番だが、BSD系では各スクリプトファイルに明示的な依存関係を示すタグを置いている[13]。スクリプトの実行順序は、それらタグに基づいてrcorderスクリプトが決定する。
initをスキップする

initはマシンを立ち上げる唯一の方法ではない。最近のブートローダ(たとえばLILOGRUB)では、カーネルが初期化の最後に何を起動するかを指定することができる(既定値はもちろん/sbin/initである)。これは、ブートローダのプロンプトにinit=/foo/barなどと打ち込むことで実現される。これは直接シェルBashzsh)を使いたい場合に便利な機能である。たとえば、init=/bin/bashを使えば、シェルが使える状態で立ち上がり、パスワードを入力する必要もない。システム管理者がこれを安全でないと判断する場合は、ブートローダのパスワードを設定すればよい。

BSD系では、ブート処理は途中で割り込むことができ、boot -sコマンドでシングルユーザーモードで立ち上げることができる。シングルユーザーモードは技術的にはinitをスキップするわけではない。/sbin/initはやはり実行されるが、この場合exec()に指定するプログラムのパスを聞いてくる(デフォルトでは/bin/sh)。ブートが行われている端末が/etc/ttysファイルで "insecure" とされている場合(システムによっては現在の "securelevel" も関係する)、initは最初にrootのパスワードを聞いてくる(あるいは、ユーザーがCTRL+Dを押下すると通常のマルチユーザー立ち上げに戻る)。このプログラムが終了させられた場合、カーネルはマルチユーザーモードでの再立ち上げを行う。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:15 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef