Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

F.2.4. /sbin/init プログラム

/sbin/init プログラム ( init とも呼ばれます) がブートプロセスの残りを調整して、ユーザーのための環境を設定します。
init コマンドがスタートする時、それはシステム上で自動的に起動するすべてのプロセスの親か、親の親になります。まず、/etc/rc.d/rc.sysinit スクリプトを実行します。これは環境パスの設定、スワッピングの開始、ファイルシステムのチェックなどを実行して、システム初期化に必要とされるすべての手順を実行します。例えば、ほとんどのシステムはクロックを使用しますので、rc.sysinit/etc/sysconfig/clock の設定ファイルを読み込んで、ハードウェアクロックを初期化します。もう 1つの例としては、初期化されるべき特殊なシリアルポートプロセスがある場合、rc.sysinit/etc/rc.serial ファイルを実行します。
init コマンドはそれから、/etc/event.d ディレクトリ内のジョブをプロセスします。このジョブは各 SysV init runlevel 内でシステムがセットアップされるべき方法を記述します。ランレベルとは SysV /etc/rc.d/rc<x>.d/ ディレクトリ内に一覧表示してあるサービスで定義された状態、または モード を指します。ここで <x> は、ランレベルの数値です。SysV init ランレベルの詳細については、「SysV Init ランレベル」を参照してください。
次に init コマンドは、システム用にソース機能ライブラリ、/etc/rc.d/init.d/functions を設定します。これはプログラムの PID のスタート、強制終了、および判別方法を設定します。
init プログラムは /etc/inittab 内にデフォルトとして指定してあるランレベル用の適切な rc ディレクトリを調べて、すべてのバックグラウンドプロセスを開始します。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 リンクはそのランレベル上でキル (kill) されるプロセスで、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 サーバーを停止します。
それぞれのシンボリックリンクは開始順を決定するために番号が付いています。サービスが開始または停止される順序は、この番号を変更することで変更することができます。番号が低いとより早くスタートします。同じ番号を持つシンボリックリンク同士はアルファベット順に開始されます。

注記

init プログラムが実行する最後の作業の1つは、/etc/rc.d/rc.local ファイルです。このファイルは、システムカスタム化に役に立ちます。rc.local ファイルの使用に関する詳細は、「ブート時に追加プログラムを実行」を参照してください。
init コマンドがランレベル用の適切な rc ディレクトリに進んだ後、/etc/event.d ディレクトリ内のジョブ定義でそのランレベルに割り当てられている各仮想コンソール用の /sbin/mingetty プロセスを Upstart が分岐させます。ランレベル 2 から 5 には仮想コンソール 6 つがすべてあり、ランレベル 1 (シングルユーザーモード) には 1 つ、ランレベル 0 と 6 には 1 つもありません。/sbin/mingetty プロセスは、tty デバイス[18] への通信経路を開くほか、モードを設定し、ログインプロンプトを表示し、ユーザーのユーザー名とパスワードを受け取り、かつログインプロセスを開始します。
ランレベル 5 では、Upstart/etc/X11/prefdm というスクリプトを実行します。prefdm は、優先設定の X ディスプレイマネージャー[19]gdmkdm、または xdm/etc/sysconfig/desktop ファイルの内容に応じて実行します。
完了すると、システムはランレベル 5 で動作して、ログイン画面を表示します。


[18] tty デバイスについては、『Red Hat Enterprise Linux 導入ガイド』を参照してください。
[19] ディスプレイマネージャーの詳細については、『Red Hat Enterprise Linux 導入ガイド』を参照してください。