33.2.4. sbin/init プログラム
sbin/init プログラム (init とも 呼ばれる) は、ブートプロセスの残りの部分を調整し、ユーザーのために環境を設定します。
init コマンドが起動すると、システム上で自動的に起動するすべてのプロセスの親または祖父母になります。まず、
/etc/rc.d/rc.sysinit スクリプトを実行し、環境パスの設定、スワップの開始、ファイルシステムのチェック、その他システム初期化に必要なすべてのステップを実行します。例えば、ほとんどのシステムはクロックを使用しているので、rc.sysinit は /etc/sysconfig/clock 設定ファイルを読み込んで、ハードウェアクロックを初期化します。他の例としては、初期化しなければならない特別なシリアルポートプロセスがある場合、rc.sysinit は /etc/rc.serial ファイルを実行します。
init コマンドは、次に、各 SysV init ランレベルにおいて、システムがどのように設定されるべきかを記述した
/etc/inittab スクリプトを実行します。ランレベルは、SysV /etc/rc.d/rc<x >. d/ ディレクトリーに記載されているサービスによって定義される状態、または モード であり、<x>は ランレベルの番号である。SysV init のランレベルについての詳細は、「SysV Init Runlevels」 を参照してください。
次に、init コマンドは、システムのソース関数ライブラリーである
/etc/rc.d/init.d/functions を設定し、プログラムの起動、終了、PID の決定方法などを設定する。
init プログラムは、適切な
rc ディレクトリーで、/etc/inittab でデフォルトとして指定されたランレベルを探して、すべてのバックグラウンドプロセスを開始します。rc ディレクトリーは、ランレベルに対応した番号が付けられています。例えば、/etc/rc.d/rc5.d/は ランレベル 5 用のディレクトリーです。
ランレベル 5 で起動する場合、init プログラムは
/etc/rc.d/rc5.d/ ディレクトリーを検索して、どのプロセスを起動停止するかを決定します。
以下は、
/etc/rc.d/rc5.d/ ディレクトリーの一覧の例です。
このリストにあるように、実際にサービスを起動停止するスクリプトは、
/etc/rc.d/rc5.d/ ディレクトリーには一つも配置されていない。むしろ、/etc/rc.d/rc5.d/ にあるすべてのファイルは、/etc/rc.d/init.d/ ディレクトリーにあるスクリプトを指す シンボリックリンク である。シンボリックリンクは 各 rc ディレクトリーで使用され、シンボリックリンクを作成、変更、削除することにより、それらが参照する実際のスクリプトに影響を与えることなくランレベルを再設定することができます。
各シンボリックリンクの名前は、
K または S の どちらかで始まります。K の リンクはそのランレベルで強制終了されるプロセスで、S で 始まるものは起動されるプロセスです。
init コマンドは、まず、/etc/rc.d/init.d/<command> stop コマンドを発行して、ディレクトリー内のすべての
K シンボリックリンクを停止します (<command>は 停止するプロセスを表します)。そして、/etc/rc.d/init.d/<command> start を 発行して、すべての S シンボリックリンクを起動します。
注記
システムの起動が完了した後、root でログインして同じスクリプトを実行し、サービスを起動停止することができます。例えば、/etc/rc.d/init.d/httpd stop という コマンドは、Apache HTTP Server を停止させます。
各シンボリックリンクには、開始の順番を決めるための番号が振られています。この数値を変更することで、サービスの起動停止順を変更することができます。数字が小さいほど早く開始されます。同じ番号のシンボリックリンクは、アルファベット順に開始されます。
注記
init プログラムが最後に実行するものの 1 つが、
/etc/rc.d/rc.local ファイルです。このファイルは、システムのカスタマイズに便利です。rc.local ファイルの使用方法については、「ブート時に追加プログラムを実行する」 を参照してください。
init コマンドがランレベルに適した
rc ディレクトリーを進行した後、/etc/inittab スクリプトは、ランレベルに割り当てられた仮想コンソール (ログインプロンプト) ごとに /sbin/mingetty プロセスをフォークします。ランレベル 2~5 には 6 台すべてのバーチャルコンソールがあり、ランレベル 1(シングルユーザーモード) には 1 台、ランレベル 0 と 6 には 1 台もありません。sbin/mingetty プロセスは、tty デバイスへの通信経路を開きます。[14]を設定し、ログインプロンプトを表示し、ユーザーのユーザー名とパスワードを受け入れ、ログイン処理を開始します。
ランレベル 5 では、
/etc/inittab で /etc/X11/prefdm という スクリプトが実行されます。prefdm スクリプトは、優先 X ディスプレイマネージャーを実行します。[15] - etc/sysconfig/desktop ファイルの内容に応じて、gdm、kdm、xdm のいずれかを使用します。
終了すると、ランレベル 5 で動作し、ログイン画面が表示されます。