.\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Donn Seeley at Berkeley Software Design, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)init.8 8.3 (Berkeley) 4/18/94 .\" %FreeBSD: src/sbin/init/init.8,v 1.45 2004/07/22 10:38:13 keramida Exp % .\" .\" $FreeBSD$ .\" .Dd April 18, 1994 .Dt INIT 8 .Os .Sh 名称 .Nm init .Nd プロセス制御の初期化を行う .Sh 書式 .Nm .Nm .Oo .Cm 0 | 1 | 6 | .Cm c | q .Oc .Sh 解説 .Nm ユーティリティはブート処理の最後に起動されます。 .Nm は通常、 .Xr rc 8 で説明されている自動リブートシーケンスを実行します。それが成功すると、 システムはマルチユーザモードになります。 リブートスクリプトの実行に失敗すると、 .Nm はスーパユーザが使うシェルを起動してシングルユーザモードを 開始させます。 .Nm ユーティリティは、ブートプログラムからのパラメータの指示を受けて、 マルチユーザモードに移行せず、 一般のデーモンを起動することなくシングルユーザモードの シェルを起動させることができます。 その場合、システムはメンテナンスのためのモードになり、 シェルを抜ける (^D を入力する) ことで シングルユーザモードからマルチユーザモードになります。 これによって、 .Nm は .Pa /etc/rc をファストブートモード (ディスクチェック省略) で実行します。 .Pp もし .Xr ttys 5 ファイルの .Em console のエントリが .Dq insecure にマークされていた場合には、 .Nm はシングルユーザモードのシェルを起動する前に、スーパユーザのパスワードを 要求します。 パスワードチェックは、 .Em console が .Dq secure にマークされていればスキップされます。 .Pp カーネルは 4 種類のセキュリティレベルで走行します。どのスーパユーザ プロセスもセキュリティレベルを上げることができますが、レベルを下げることが できるプロセスはありません。 セキュリティレベルは以下のように定義されます: .Bl -tag -width flag .It Ic -1 常に危険なモード \- システムは常にレベル 0 モードで走行します。 これは初期値のデフォルトです。 .It Ic 0 危険なモード \- 変更不可 (immutable) フラグや追加のみ (append-only) フラグは オフにできます。 全てのデバイスは、そのパーミッションに従って読み書きされます。 .It Ic 1 安全なモード \- 変更不可フラグや追加のみのフラグはオフにできません。 マウントされたファイルシステムのディスクおよび .Pa /dev/mem や .Pa /dev/kmem や (プラットフォームにあれば) .Pa /dev/io は read-only となります。 カーネルモジュール .Pf ( Xr kld 4 参照) は、ロードおよびアンロードできません。 .It Ic 2 安全度の高いモード \- レベル 1 のモードの効果に加え、ディスクは マウントされていようといまいと、 .Pf ( Xr mount 2 を除き) 常に read-only となります。 このレベルは、ファイルシステムをアンマウントして変更を加えることを不可能に します。また、システムがマルチユーザで走行中に .Xr newfs 8 を実行することも出来なくなります。 .Pp 更に、カーネル時間の変更は 1 秒以内に制限されています。 これ以上変更しようとすると、 .Dq Time adjustment clamped to +1 second というメッセージをログします。 .It Ic 3 ネットワークの安全モード \- 安全度の高いモードに加え、 IP パケットフィルタルール .Pf ( Xr ipfw 8 , .Xr ipfirewall 4 , .Xr pfctl 8 参照) を変更不可能とし、 .Xr dummynet 4 や .Xr pf 4 の設定を修正不可能とします。 .El .Pp 初期のセキュリティレベルが非 0 だった場合、 .Nm はセキュリティレベルを変更しません。 それ以外の場合、 .Nm は、最初にレベル 1 に上げます。 レベルは減らすことはできませんので、 その後の操作においてはレベルは最低 1 であり、 これはシングルユーザモードに戻る場合においても成立ちます。 マルチユーザモードにおいてレベル 2 で システムを走らせたい場合は、シングルユーザの状態の間に、 .Xr sysctl 8 を使って、変数 .Va kern.securelevel に必要なセキュリティレベルの値を設定します。 .Pp .Nm が jail 中で実行される場合、 .Dq ホストシステム のセキュリティレベルは影響しません。 jail をサポートするためにカーネル中に設定される情報の一部に、jail 毎の .Dq セキュリティレベル 設定があります。 これにより、ホストシステムよりも高いセキュリティレベルで jail 内を実行することが可能となります。 jail に関する更なる詳細は .Xr jail 8 を参照してください。 .Pp マルチユーザモードの場合、 .Nm は .Xr ttys 5 ファイルで指示された端末ポートのためのプロセスを管理します。 .Nm ユーティリティはこのファイルを読み込み、 2 番目のフィールドに指示されたコマンドを 実行します。 ただし、1 番目のフィールドが .Pa /dev 中のデバイスを参照し、そのデバイスが設定されていない場合は例外です。 1 番目のフィールドは、コマンドへ渡される最後の引数になります。 そのコマンドは通常、 .Xr getty 8 で、 .Nm getty は tty をオープン、初期化し、 .Xr login 1 プログラムを実行します。 .Nm login プログラムは、ユーザがログインするとシェルを起動します。 ユーザがログアウトするか異常終了するなどして、そのシェルが終了すると、 .Nm ユーティリティが起こされ、 .Xr utmp 5 ファイルからユーザを消し、 .Xr wtmp 5 ファイルにログアウトを記録します。 このサイクルは、 .Nm プログラムがその端末に新しい .Nm getty を実行することで繰り返されます。 .Pp .Nm ユーティリティは任意のデーモンを走行させ続けるためにも使用可能であり、 デーモンが死んだ場合には自動的に再開します。 この場合、 .Xr ttys 5 ファイルの 1 番目のフィールドは、 設定されたデバイスノードへのパスを参照してはならず、 デーモンに対する最後のコマンドライン引数として渡されます。 これは .At V .Pa /etc/inittab にある機能と同様です。 .Pp ラインの状態 (on, off, secure, getty, ウィンドウの情報) は、 .Xr ttys 5 ファイルを書き換えて .Dq Li "kill -HUP 1" によってシグナル .Dv SIGHUP を .Nm に送ることで、リブートせずに変更できます。 このシグナルを受け取ると .Nm は .Xr ttys 5 ファイルを再度読み込みます。 .Xr ttys 5 でラインがオフにされると、 .Nm はそのラインに関係するセッションの制御プロセスに SIGHUP シグナルを送ります。 オフであったラインが .Xr ttys 5 ファイルでオンにされると、 .Nm は 2 番目のフィールドで指定されるコマンドを起動します。 ラインのコマンドやウィンドウフィールドが変更された場合、その変更は現在 のログインセッションが終了するまで有効にはなりません。 (例えば、 .Nm によって新しいプロセスが起動されるまで有効にならない。) .Xr ttys 5 中のあるラインをコメントアウトあるいは削除した場合は、 .Nm はそのラインに関しては何も実行しません。 しかしこの場合、 .Xr ttys 5 ファイルと .Xr utmp 5 ファイル内の記録情報が一致しなくなるため、試すことはお勧めしません。 .Pp .Dq Li "kill \-TERM 1" などによって terminate シグナル .Pq Dv TERM を受けると、 .Nm ユーティリティはマルチユーザモードを終了し、シングルユーザモードに復帰します。 ハードウェアまたはソフトウェアの問題でデッドロックしたプロセスがある場合、 .Xr init はすべてのプロセスの終了を待たず (これは無限に終らないかも知れません)、 30 秒間でタイムアウトして警告のメッセージを出力します。 .Pp terminal stop シグナル .Pq Dv TSTP を送ると ( .Dq Li "kill \-TSTP 1" )、 .Nm ユーティリティは新しい プロセス を起動するのをやめ、徐々にシステム停止可能な状態にします。 その後、hangup シグナルで完全なマルチユーザモードに戻り、terminate シグナル でシングルユーザモードに移ります。 この hook は .Xr reboot 8 と .Xr halt 8 で使われています。 .Pp interrupt シグナル .Pq Dv INT を送ると ( .Dq Li "kill \-INT 1" )、 .Nm ユーティリティはすべてのプロセスを (デッドロックプロセスを待たずに) 終了させ、 リブートを実行します。 この操作は、マシンがハングした時に、カーネルの中から、あるいは、X から、 システムを安全にシャットダウンするのに便利です。 .Pp .Nm ユーティリティは同様に、ユーザ定義シグナル 1 .Pq Dv USR1 を送られた場合はマシンを停止し、 ユーザ定義シグナル 2 .Pq Dv USR2 を送られた場合はマシンを停止してから電源を切ります (ハードウェアが許す場合)。 .Pp マシンをシャットダウンする時、 .Nm は .Pa /etc/rc.shutdown スクリプトを実行しようとします。 このスクリプトは .Nm innd (インターネットニュースサーバ) のような特定のプログラムを綺麗に終了させるために使用可能です。 .Pp .Nm の役割は非常に重要で、もし .Nm が死ぬとシステムが自動的にリブートされます。 もしブート時に .Nm プログラムを見つけられなければ、システムは .Dq panic: init died (signal %d, exit %d) のようなメッセージを出力して panic で終了します。 .Pp 2 番目の書式行のようにユーザプロセスとして実行する場合、 .Nm は .At V の動作をエミュレートします。すなわち、スーパユーザがコマンドラインで .Em ランレベル を指定可能であり、 .Nm はオリジナルの (PID 1) .Nm に次のようなシグナルを送ります: .Bl -column Run-level SIGTERM .It Sy "ランレベル シグナル 動作 .It Cm 0 Ta Dv SIGUSR2 Ta "停止して電源切断" .It Cm 1 Ta Dv SIGTERM Ta "シングルユーザモードへ移行" .It Cm 6 Ta Dv SIGINT Ta "マシンを再起動" .It Cm c Ta Dv SIGTSTP Ta "更なるログインを抑止" .It Cm q Ta Dv SIGHUP Ta ファイル .Xr ttys 5 を再スキャン .El .Sh 診断 .Bl -diag .It "getty repeating too quickly on port %s, sleeping." ラインにサービスを提供するプロセスが、起動されるたびにすぐ終了してしまう。 これは、端末ラインに着信があるかノイズが大きい場合にしばしば起こります。 .Bf -emphasis init は 30 秒間スリープし、 その後、プロセスを開始させようとし続けます。 .Ef .It "some processes would not die; ps axl advised." シャットダウンの際、ハングしていて終了させられないプロセスがあります。 この状態は、通常、デバイスに異常があるときにデバイスドライバで貼り付い てしまうことにより起こります。 .El .Sh 関連ファイル .Bl -tag -width /etc/rc.shutdown -compact .It Pa /dev/console システムのコンソールデバイス .It Pa /dev/tty* .Xr ttys 5 内にある端末ポート .It Pa /var/run/utmp 現在ログインしているのユーザの情報 .It Pa /var/log/wtmp すべてのログイン・ログアウトの情報 .It Pa /etc/ttys 端末の初期化情報が書かれたファイル .It Pa /etc/rc システム立ち上げ用スクリプト .It Pa /etc/rc.shutdown システムシャットダウン用スクリプト .El .Sh 関連項目 .Xr kill 1 , .Xr login 1 , .Xr sh 1 , .Xr dummynet 4 , .Xr ipfirewall 4 , .Xr kld 4 , .Xr pf 4 , .Xr ttys 5 , .Xr crash 8 , .Xr getty 8 , .Xr halt 8 , .Xr ipfw 8 , .Xr jail 8 , .Xr pfctl 8 , .Xr rc 8 , .Xr reboot 8 , .Xr shutdown 8 , .Xr sysctl 8 .Sh 歴史 .Nm ユーティリティは .At v6 から登場しました。 .Sh 警告 .Xr sysctl 8 を持たないシステムは、セキュリティレベル \-1 で動作します。 .Pp ブートシーケンスにおいて、セキュリティレベルを 1 より高く設定するのが あまりにも早すぎると、 .Xr fsck 8 が一貫性のないファイルシステムを補修することを妨げてしまう可能性があります。 セキュリティレベル設定を行う場所として適切なところは、 全てのマルチユーザ立ち上げ処理が完了した後である、 .Pa /etc/rc の末尾です。