F.2.4. sbin/init プログラム
sbin/init プログラム (init とも 呼ばれる) は、ブートプロセスの残りの部分を調整し、ユーザーのために環境を設定します。
init コマンドが起動すると、システム上で自動的に起動するすべてのプロセスの親または祖父母になります。まず、
/etc/rc.d/rc.sysinit
スクリプトを実行し、環境パスの設定、スワップの開始、ファイルシステムのチェック、その他システム初期化に必要なすべてのステップを実行します。例えば、ほとんどのシステムはクロックを使用しているので、rc.sysinit は
/etc/sysconfig/clock
設定ファイルを読み込んで、ハードウェアクロックを初期化します。他の例としては、初期化しなければならない特別なシリアルポートプロセスがある場合、rc.sysinit は
/etc/rc.serial
ファイルを実行します。
init コマンドは、次に
/etc/event.d
ディレクトリーにある、各 SysV init ラン レベルでどのようにシステムをセットアップすべきかを記述したジョブを処理します。ランレベルは、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/
ディレクトリーの一覧の例です。
K05innd -> ../init.d/innd K05saslauthd -> ../init.d/saslauthd K10dc_server -> ../init.d/dc_server K10psacct -> ../init.d/psacct K10radiusd -> ../init.d/radiusd K12dc_client -> ../init.d/dc_client K12FreeWnn -> ../init.d/FreeWnn K12mailman -> ../init.d/mailman K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K20netdump-server -> ../init.d/netdump-server K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwhod -> ../init.d/rwhod K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30spamassassin -> ../init.d/spamassassin K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K36lisa -> ../init.d/lisa K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K46radvd -> ../init.d/radvd K50netdump -> ../init.d/netdump K50snmpd -> ../init.d/snmpd K50snmptrapd -> ../init.d/snmptrapd K50tux -> ../init.d/tux K50vsftpd -> ../init.d/vsftpd K54dovecot -> ../init.d/dovecot K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K70aep1000 -> ../init.d/aep1000 K70bcm5820 -> ../init.d/bcm5820 K74ypserv -> ../init.d/ypserv K74ypxfrd -> ../init.d/ypxfrd K85mdmpd -> ../init.d/mdmpd K89netplugd -> ../init.d/netplugd K99microcode_ctl -> ../init.d/microcode_ctl S04readahead_early -> ../init.d/readahead_early S05kudzu -> ../init.d/kudzu S06cpuspeed -> ../init.d/cpuspeed S08ip6tables -> ../init.d/ip6tables S08iptables -> ../init.d/iptables S09isdn -> ../init.d/isdn S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13irqbalance -> ../init.d/irqbalance S13portmap -> ../init.d/portmap S15mdmonitor -> ../init.d/mdmonitor S15zebra -> ../init.d/zebra S16bgpd -> ../init.d/bgpd S16ospf6d -> ../init.d/ospf6d S16ospfd -> ../init.d/ospfd S16ripd -> ../init.d/ripd S16ripngd -> ../init.d/ripngd S20random -> ../init.d/random S24pcmcia -> ../init.d/pcmcia S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S27ypbind -> ../init.d/ypbind S28autofs -> ../init.d/autofs S40smartd -> ../init.d/smartd S44acpid -> ../init.d/acpid S54hpoj -> ../init.d/hpoj S55cups -> ../init.d/cups S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S58ntpd -> ../init.d/ntpd S75postgresql -> ../init.d/postgresql S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S87iiim -> ../init.d/iiim S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90xfs -> ../init.d/xfs S95atd -> ../init.d/atd S96readahead -> ../init.d/readahead S97messagebus -> ../init.d/messagebus S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local
このリストにあるように、実際にサービスを起動停止するスクリプトは、
/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/event.d
ディレクトリーのジョブ定義によってランレベルに割り当てられた各仮想コンソール (ログインプロンプト) 用に /sbin/mingetty プロセスをフォークします。ランレベル 2~5 には 6 台すべてのバーチャルコンソールがあり、ランレベル 1(シングルユーザーモード) には 1 台、ランレベル 0 と 6 には 1 台もありません。sbin/mingetty プロセスは、tty デバイスへの通信経路を開きます。[18]を設定し、ログインプロンプトを表示し、ユーザーのユーザー名とパスワードを受け入れ、ログイン処理を開始します。
ランレベル 5 では、アップスタートは
/etc/X11/prefdm
と呼ばれるスクリプトを実行します。prefdm
スクリプトは、優先 X ディスプレイマネージャーを実行します。[19] - etc/sysconfig/desktop
ファイルの内容に応じて、gdm、kdm、xdm のいずれかを使用します。
終了すると、ランレベル 5 で動作し、ログイン画面が表示されます。