init
読み:イニット
外語:init

 UNIXやその互換OSで、システムが立ち上がった際、最初に起動されるプロセス
目次

概要
 initは、全てのプロセスの親となる。initはデーモンプロセスとして起動され、プロセスIDは通常、1が付与される。
 initの主要な機能は、その設定ファイルに従い、必要なプロセスを作成することである。
 大きくBSD系とSystem V系の二大潮流があり、両者は大きく仕様が異なっている。Linuxの場合は、どちらかに互換のあるものが使われているが、ディストリビューションによっては独自のものが使われている。

特徴
 initは起動時に読み込まれる必要があるため、起動時にマウントされるドライブに存在する必要がある。
 通常は、最初にマウントされるrootfsに置かれる。つまり、ルートディレクトリか、そのサブディレクトリに置かれる。
 Androidにも/sbinはあり、これは他と同様にrootfsにあるサブディレクトリだが、initはルートディレクトリに置かれている。

機能

System V系
 System V系のinitは、/etc/inittabを読み、動作する。これはinit専用の設定ファイルであり、拡張性は高いが、複雑で、手書きにはあまり向いていない。
 このinitは「ランレベル」と呼ばれる8段階のプロセスの分類群がある。/etc/inittabに標準のランレベルを定義するエントリが書かれるが、もしない場合は、ユーザーが起動時に手入力せねばならない。
 is:2:initdefault:
 なお、ランレベルの定義は、システムごとに異なっている。
 それぞれのランレベルで何を行なうかも、/etc/inittabにて定義されるのが一般的である。

BSD系
 BSDのinitは、/etc/rcを起動する。これはシェルスクリプトであり、必要な動作はここに記述される。
 手で簡単に書き換えられるという利点があるが、設定を誤ると簡単に起動不可能な状態に出来るという難点もある。
 古いBSDでは、サービスの設定は/etc/rc.localで行ない、これが/etc/rcから呼び出される、という形式を取っていた。起動不可能な状態に陥ることを、多少でも避ける目的があった。
 現在のBSDでは、/etc/rc.dディレクトリ下に、サービスごとに細かく分けられたシェルスクリプトが置かれ、これが/etc/rcから順次実行するようになっている。このスクリプトは、サービスの有効化/無効化でそれぞれ呼び出され、適切な処理を行なうように書かれている。

Linux系
 Linuxの場合、init実行まで、通常は次のような手順を踏む。
  1. /dev/sda(MBR)からブートストラップを読み込む
  2. /dev/sda1からブートローダーを読み込む
  3. /dev/sda1からkernelとinitramfsを読み込む
  4. kernelのブートコードを実行する
  5. initramfsのスクリプトを実行する
  6. RAID1ボリュームを認識する
  7. LVMボリュームを認識する
  8. ルートファイルシステムをマウントする
  9. カーネルスレッドkernel_initを実行する
  10. /sbin/init、/etc/init、/bin/init、/bin/shの順で、最初に実行可能なものを実行する
 一般的な環境では、/etc/initや/bin/initは存在せず、/bin/shはbashなどへのシンボリックリンクとなっており、実際に起動するのは/sbin/initである。

Android
 Androidは、カーネルはLinuxだが、それ以外の殆どはオリジナルであり、initもオリジナルが使われている。
 Androidでは、/initが実行ファイルであり、/init.rcを読み、動作する。
 このファイルはAndroid Init Languageと呼ばれ、Androidのinit専用の初期化スクリプトである。専用だけあり、Androidの初期化に必要なことはほぼ可能なように作られている。

再検索