この章では、次の新しいシステム管理の情報について説明します。
最新のマニュアルページを参照するには、man コマンドを使用してください。Solaris 7 - 11/99 のマニュアルページには、「Solaris 7 Reference Manual Collection」には記載されていない新しい情報が提供されています。
この機能は、Solaris 7 - 8/99 ソフトウェアリリースで更新されました。
Solaris 7 ソフトウェアリリースの更新には、coreadm コマンドを含む、強化されたコアファイル生成機能が含まれます。この情報は、『Solaris のシステム管理 (第 2 巻)』の「ソフトウェアの問題解決の概要」に記載されている、ソフトウェアの問題解決に関する情報の補足です。
このリリースで導入される coreadm コマンドでは、ユーザーによるコアファイルの命名規則の設定により、柔軟なコアファイル管理が提供されます。たとえば、coreadm コマンドでは、すべてのプロセスコアファイルを 1 つのシステムディレクトリに置くようにシステムを構成できます。したがって、Solaris のプロセスやデーモンが異常終了した場合には、特定のディレクトリのコアファイルを調べればよいため問題の追跡が容易になります。
これまでの Solaris プロセスコアダンプ機能には、次のような制約がありました。
プロセスコアファイルは、プロセスの現在の作業ディレクトリに生成されます。したがって、Solaris のすべてのデーモンは、一般に初期化の過程で chdir を使ってルート (/) ディレクトリに移るため、相互のコアファイルが上書きされます。
statd など多くのシステムデーモンが setuid 操作を行いますが、セキュリティ上の理由により、問題が発生した場合にコアファイルを生成しません。
次の 2 つの構成可能な新しいコアファイルパスは、個別に有効または無効にできます。
プロセス別コアファイルパス
プロセス別コアファイルパスが有効な場合には、プロセスが異常終了するとコアファイルが生成されます。プロセス別コアファイルパスはプロセス自身の子プロセスに継承されます。このパスはデフォルトで有効になっており、パスには core が指定されています。
生成されたプロセス別コアファイルは、そのプロセスの所有者に、所有されます。このファイルを読み込むことができるのは、プロセスの所有者とスーパーユーザーだけです。
グローバルコアファイルパス
グローバルコアファイルパスが有効な場合には、追加のコアファイルが、指定したグローバルコアファイルパスのディレクトリにプロセス別コアファイルと同じ内容で、作成されます。このパスはデフォルトでは無効になっています。
生成されたグローバルコアファイルは、読み取り/書き込み可能ファイルとしてスーパーユーザーに所有されます。非特権ユーザーがこのファイルを表示することはできません。
プロセスが異常終了すると、これまでの Solaris リリースと同じように、このプロセスは現在のディレクトリにコアファイルを生成します。しかし、グローバルコアファイルパスが有効で、たとえば、/corefiles/core に設定されていると、異常終了した各プロセスは、2 つのコアファイルを生成します。1 つは現在の作業ディレクトリに、もう 1 つは /corefiles ディレクトリに生成します。
デフォルトでは、以下のようにこれまでの Solaris のコアファイル生成機能と変わらないように設定してあります。
setuid プロセスが、グローバルパスやプロセス別パスを使ってコアファイルを生成しない。
グローバルコアファイルパスが無効に設定されている。
プロセス別コアファイルパスが有効に設定されている。
プロセス別コアファイルパスが core に設定されている。
グローバルコアファイルディレクトリが有効な場合、コアファイルは次の表に示す変数を使用してそれぞれ区別されます。
変数名 |
変数の定義 |
---|---|
%p |
プロセス ID |
%u |
実効ユーザー ID |
%g |
実効グループ ID |
%f |
実効可能ファイル名 |
%n |
システムノード名。uname -n 出力と同じ |
%m |
マシン名。uname -m 出力と同じ |
%t |
time(2) システムコールの 10 進数値 |
%% |
リテラル % |
たとえば、グローバルコアファイルパスが次のように設定されているとします。
/var/core/core.%f.%p |
このとき、PID 12345 の sendmail プロセスが異常終了すると、次のコアファイルが生成されます。
/var/core/core.sendmail.12345 |
コアファイル名パターンを、グローバルにでも、プロセス別にでも設定できます。さらに、システムをリブートしてもこれらの設定値が保存されるようにするかどうかを指定することもできます。
たとえば、次の coreadm コマンドでは、init プロセスによって起動されるすべてのプロセスのグローバルコアファイルパターンを設定します。このパターンは、システムをリブートしても有効です。
$ coreadm -i /var/core/core.%f.%p |
設定したグローバルコアの値は /etc/coreadm.conf ファイルに格納されます。つまり、これらの設定値はシステムをリブートしても保存されます。
次の coreadm コマンドでは、すべてのプロセスのプロセス別コアファイル名パターンを設定します。
$ coreadm -p /var/core/core.%f.%p $$ |
$$ 記号は、動作しているシェルのプロセス ID を表す可変部分です。プロセス別コアファイル名パターンは、そのプロセス自身のすべての子プロセスに継承されます。
グローバルまたはプロセス別コアファイル名パターンが設定されると、coreadm -e コマンドで有効にしなければなりません。詳細は、次の手順を参照してくだ さい。
ユーザーの $HOME/.profile または $HOME/.login ファイルに上記のコマンドを指定すると、ユーザーのログインセッションで実行されるすべてのプロセスのコアファイル名パターンを設定できます。
coreadm コマンドを使用して、setuid プログラムがコアファイルを生成するかどうかを設定します。またこの設定は、すべてのシステムプロセスに適用するか、プロセス別に適用するかも選択できます。
グローバル setuid オプションを有効にすると、グローバルコアファイルパスでは、システムのすべての setuid プログラムがコアファイルを生成します。
プロセス別 setuid オプションを有効にすると、プロセス別コアファイルパスでは、特定の setuid プロセスがコアファイルを生成します。
デフォルトでは、両方のフラグが無効となっています。セキュリティ上の理由により、グローバルコアファイルパスは、/ で始まる完全パス名でなければなりません。スーパーユーザーがプロセス別コアファイルを無効にすると、各ユーザーはコアファイルを取得できなくなります。
setuid コアファイルは、スーパーユーザー専用の読み取り/書き込みアクセス権をもつスーパーユーザーによって所有されます。setuid コアファイルを生成したプロセスが通常ユーザーに所有されていた場合でも、通常ユーザーがこのファイルにアクセスすることはできません。
詳細は、coreadm(1M) のマニュアルページを参照してください。
現在のコアダンプ構成を表示するには、coreadm コマンドをオプションなしで使用します。
$ coreadm global core file pattern: /var/core/core.%f.%p init core file pattern: core global core dumps: enabled per-process core dumps: enabled global setid core dumps: enabled per-process setid core dumps: disabled global core dump logging: disabled |
現在のプロセスのコアファイル設定値を照会するには、次の coreadm コマンドを使用します。$$ 記号は、動作しているシェルのプロセス ID を表す可変部分です。
$ coreadm $$ 278: core.%f.%p |
スーパーユーザーは、coreadm process ID を使用して、任意のユーザーのコアファイル設定値を照会できます。通常ユーザーは、自身のプロセスのコアファイル設定値しか照会できません。
スーパーユーザーになります。
プロセス別コアファイルパスを有効にします。
# coreadm -e process |
現在のプロセスコアファイルパスを表示して、構成を確認します。
$ coreadm $$ 1180: /home/kryten/corefiles/%f.%p |
スーパーユーザーになります。
グローバルコアファイルパスを有効にします。
# coreadm -e global -g /var/core/core.%f.%p |
現在のプロセスコアファイルパスを表示して、構成を確認します。
# coreadm global core file pattern: /var/core/core.%f.%p init core file pattern: core global core dumps: enabled per-process core dumps: enabled global setid core dumps: disabled per-process setid core dumps: disabled global core dump logging: disabled |
NOTICE: 'set allow_setid_core = 1' in /etc/system is obsolete NOTICE: Use the coreadm command instead of 'allow_setid_core' |
setuid コアファイルを指定する古いパラメータが /etc/system ファイルにあります。
/etc/system ファイルから allow_setid_core=1 を削除します。次に、coreadm コマンドでグローバル setuid コアファイルパスを有効にします。
この機能は、Solaris 7 - 5/99 ソフトウェアリリースで追加されました。
Solaris 7 - 5/99 ソフトウェアリリースの新しいコンソール機能により、Solaris オペレーティング環境が更新されます。この情報は、『Solaris のシステム管理 (第 2 巻)』の「ソフトウェアの問題解決の概要」と『Solaris 移行ガイド』での Solaris システムにおける問題解決の説明を補足するものです。
次の新しいコンソール機能により、リモートシステムでの問題解決機能が改善されます。
consadm コマンドにより、シリアルデバイスを補助 (または、リモート) コンソールとして選択できます。システム管理者は consadm コマンドを使用して 1 つまたは複数のシリアルポートを構成し、リダイレクトされたコンソールメッセージを表示したり、システムの実行レベルを変更するときに sulogin セッションを実行することができます。この機能を使用すると、モデムが接続されたシリアルポートにダイヤルインしてコンソールメッセージを監視し、init 状態の変更に対応できます。詳細は、sulogin(1M) のマニュアルページと次の手順の説明を参照してください。
補助コンソールとして構成されたポートを使用してシステムにログインすることもできますが、本来補助コンソールはデフォルトのコンソールにも表示される情報を表示する出力デバイスです。ブートスクリプトや他のアプリケーションがデフォルトのコンソールから読み込んだりここに書き込んだりする場合、書き込み出力はすべての補助コンソールに表示されます。しかし、入力はデフォルトのコンソールからだけ読み取られます。補助コンソールは、ブートスクリプトに入力を行う場合には使用できません。対話式のログインセッション時に consadm コマンドを使用する方法については、「対話式ログインセッション時の consadm コマンドの使用」を参照してください。
新しいコンソール出力はカーネルと syslog メッセージから構成され、新しい疑似デバイス /dev/sysmsg に書き込まれます。また、rc スクリプトの起動メッセージは /dev/msglog に書き込まれます。以前は、すべてのメッセージは /dev/console に書き込まれていました。
補助コンソールにメッセージをリダイレクトさせたい場合、コンソール出力を /dev/console に送るスクリプトにおいては出力先を /dev/msglog に変更する必要があります。また、/dev/console を参照するソースコードにおいては syslog() または strlog() を使用するように明示的に変更しなければなりません。
consadm コマンドは、補助コンソールデバイスを監視するデーモンを実行します。補助コンソールとして指定された表示デバイスが切断された (つまり、ハングアップしたか、キャリア信号を失った) 場合、その表示デバイスは補助コンソールデバイスリストから削除され、無効になります。1 つまたは複数の補助コンソールを有効にしても、デフォルトのコンソールへのメッセージ出力は無効になりません。メッセージは /dev/console に引き続き表示されます。
実行レベル変更時に補助コンソールメッセージ機能を使用する場合、次のことに注意してください。
システムブート時に実行される rc スクリプトにおいてユーザーの入力を求める場合、補助コンソールからは入力できません。デフォルトのコンソールから入力しなければなりません。
sulogin プログラム (init によって呼び出され、実行レベル変更時にスーパーユーザーのパスワード入力を求める) は、デフォルトのコンソールデバイスだけでなく、各補助デバイスにもスーパーユーザーのパスワードを求めるプロンプトを送信するように変更されました。
システムがシングルユーザーモードであり、consadm コマンドで 1 つまたは複数の補助コンソールを有効にしている場合、コンソールログインセッションはスーパーユーザーの正しいパスワードを sulogin プロンプトに渡した最初のデバイスで動作します。あるコンソールデバイスから正しいパスワードを受信すると、sulogin は他のすべてのコンソールデバイスからの入力を無効にします。
コンソールの 1 つがシングルユーザー特権を持った場合、メッセージがデフォルトのコンソールと他の補助コンソールに表示されます。このメッセージは、どのデバイスがスーパーユーザーの正しいパスワードを受け取ってコンソールになったかを示します。シングルユーザーシェルを実行している補助コンソールでキャリア信号が失われた場合、次の 2 つの動作のいずれかが行われる可能性があります。
補助コンソールが実行レベル 1 で動作するシステムを示している場合、システムはデフォルトの実行レベルに進みます。
補助コンソールが実行レベル S で動作するシステムを示している場合、システムは、init s または shutdown コマンドをシェルから入力したデバイス上に「ENTER RUN LEVEL (0-6, s or S):」というメッセージを表示します。そのデバイスにキャリア信号がない場合、再度キャリアを確立し、正しい実行レベルを入力しなければなりません。init または shutdown コマンドは実行レベルのプロンプトを表示し直しません。
シリアルポートを使用してシステムにログインし、init または shutdown コマンドで実行レベルを変更しようとした場合、そのデバイスが補助コンソールかどうかにかかわらず、ログインセッションは失われます。この状態は、補助コンソール機能のない Solaris リリースと同じです。
consadm コマンドを使用してあるデバイスを補助コンソールとして選択すると、システムをリブートするまで、あるいは補助コンソールの選択を解除するまで、そのデバイスは補助コンソールのままです。ただし、consadm コマンドには、システムリブート時にデバイスを補助コンソールとして設定するオプションがあります。設定手順については、次を参照してください。
シリアルポートに接続された端末を使用してシステムにログインし、対話式ログインセッションを実行し、consadm コマンドで端末からのコンソールメッセージを表示したい場合、次の動作に注意してください。
補助コンソールが有効のままで端末を対話式ログインセッション用に使用する場合は、コンソールメッセージは /dev/sysmsg または /dev/msglog デバイスに送信されます。
端末上でコマンドを入力する場合は、入力は対話式セッションに送信されます。デフォルトのコンソール (/dev/console) には送信されません。
init コマンドを実行して実行レベルを変更する場合、リモートコンソールソフトウェアは対話式セッションを終了し、sulogin プログラムを実行します。この時点で、端末からの入力だけが受け入れられ、コンソールデバイスから入力されたように扱われます。これによって、「実行レベル変更時の補助コンソールメッセージの使用」に記述されているように、sulogin プログラムにパスワードを入力できるようになります。
次に、正しいパスワードを (補助) 端末上で入力すると、補助コンソールは対話式 sulogin セッションを実行して、デフォルトのコンソールと他の競合する補助コンソールをロックアウトします。つまり、端末が本質的にシステムコンソールとして機能することを意味します。
この時点から実行レベルを 3 に変更したり、別の実行レベルに変更できます。実行レベルを変更すると、sulogin は再びすべてのコンソールデバイス上で動作します。終了するか、システムを実行レベル 3 で起動することを指定した場合、すべての補助コンソールは入力機能を失います。つまり、コンソールメッセージ用の表示デバイスに戻ります。
システムが起動するときは、デフォルトのコンソールデバイス上で rc スクリプトに情報を提供しなければなりません。システムが起動した後、login プログラムがシリアルポート上で動作するため、別の対話式セッションにログインできるようになります。デバイスを補助コンソールとして指定した場合、コンソールメッセージは端末上に引き続き表示されます。しかし、端末からのすべての入力は対話式セッションに送信されます。
consadm コマンドで補助コンソールを追加するまで、consadm デーモンはポートの監視を開始しません。セキュリティ上、コンソールメッセージがリダイレクトされるのはキャリア信号が失われるか、あるいは補助コンソールデバイスが選択解除されるまでのみです。つまり、consadm コマンドを正常に使用するためには、ポート上でキャリアが確立されていなければならないことを意味します。
補助コンソールを有効にする方法の詳細は、consadm(1M) のマニュアルページを参照してください。
スーパーユーザーとしてシステムにログインします。
補助コンソールを有効にします。
# consadm -a devicename |
現在の接続が補助コンソールであることを確認します。
# consadm |
# consadm -a /dev/term/a # consadm /dev/term/a |
スーパーユーザーとしてシステムにログインします。
システムリブート時に補助コンソールを有効にします。
# consadm -a -p devicename |
固定補助コンソールのリストにデバイスが追加されます。
固定補助コンソールのリストにデバイスが追加されていることを確認します。
# consadm |
# consadm -a -p /dev/term/a # consadm /dev/term/a |
# consadm -d /dev/term/a # consadm |
この機能は、Solaris 7 - 3/99 ソフトウェアリリースで追加されたものです。
この情報は、『Solaris のシステム管理 (第 2 巻)』の「システムのメッセージの表示」と、『Solaris 移行ガイド』にあるシステムブートとエラーメッセージに関する追加説明です。
Solaris 7 - 3/99 リリースではシステムブートとエラーメッセージ形式が改良され、syslog ロギング機能が生成するメッセージに、数値による識別子、モジュール名、およびタイムスタンプが追加されるようになりました。さらに、システムのパニックやリブートの後に以前は失われていたメッセージが、保存されるようになりました。
新しいメッセージ形式を有効または無効にするには、log.conf ファイルで msgid プロパティを設定します。新しいメッセージ形式はデフォルトでは有効になっていません。新しいメッセージ形式の詳細は、log(7D) のマニュアルページと次の手順を参照してください。
システムエラーロギングの一般情報については、『Solaris のシステム管理 (第 2 巻)』を参照してください。
log.conf ファイルで msgid が 0 に設定されている場合は、メッセージ形式に変更はありません。msgid が 1 に設定されている場合は、メッセージ形式に次の 2 つの変更があります。
メッセージテキストの前に、次のようなメッセージ ID が付きます。
[ID msgid facility.priority] |
たとえば、次のようになります。
[ID 123456 kern.notice] |
msgid 識別子については、msgid(1M) のマニュアルページを参照してください。facility 識別子と priority 識別子については、syslog.conf(4) のマニュアルページを参照してください。
メッセージの原因がカーネルにある場合は、「unix」だけではなく、カーネルモジュール名が表示されます。
以前のメッセージ形式は、次のようになっていました。
Oct 1 14:07:24 mars unix: alloc: /: file system full |
新しいメッセージ形式では、次のようになります。
Oct 1 14:07:24 mars ufs: [ID 845546 kern.notice] alloc: /: file system full |
スーパーユーザーになります。
システムメッセージ ID を有効にするには、/platform/`uname -i`/kernel/drv/log.conf ファイルに次の行を追加します。このファイルがない場合は、/kernel/drv/log.conf ファイルに msgid プロパティを追加します。
msgid=1 |
ファイルを保存して閉じます。
次のコマンドでシステムをリブートします。
# init 6 |
システムをリブートせずにシステムメッセージ ID を有効にするには、次の adb コマンドを使用します。
# echo log_msgid/W1 | adb -kw |
スーパーユーザーになります。
システムメッセージ ID を無効にするには、/platform/`uname -i`/kernel/drv/log.conf ファイルの msgid 行を次のように変更します。このファイルがない場合は、/kernel/drv/log.conf ファイルの msgid プロパティを変更します。
msgid=0 |
ファイルを保存して閉じます。
次のコマンドでシステムをリブートします。
# init 6 |
システムをリブートせずにシステムメッセージ ID を無効にするには、次の adb コマンドを使用します。
# echo log_msgid/W0 | adb -kw |