Solaris 7 のシステム管理 (追補)

第 4 章 診断機能の強化

この章では、次の新しいシステム管理の情報について説明します。


注 -

最新のマニュアルページを参照するには、man コマンドを使用してください。Solaris 7 - 11/99 のマニュアルページには、「Solaris 7 Reference Manual Collection」には記載されていない新しい情報が提供されています。


コアファイル管理の強化 (coreadm)

この機能は、Solaris 7 - 8/99 ソフトウェアリリースで更新されました。

Solaris 7 ソフトウェアリリースの更新には、coreadm コマンドを含む、強化されたコアファイル生成機能が含まれます。この情報は、『Solaris のシステム管理 (第 2 巻)』の「ソフトウェアの問題解決の概要」に記載されている、ソフトウェアの問題解決に関する情報の補足です。

このリリースで導入される coreadm コマンドでは、ユーザーによるコアファイルの命名規則の設定により、柔軟なコアファイル管理が提供されます。たとえば、coreadm コマンドでは、すべてのプロセスコアファイルを 1 つのシステムディレクトリに置くようにシステムを構成できます。したがって、Solaris のプロセスやデーモンが異常終了した場合には、特定のディレクトリのコアファイルを調べればよいため問題の追跡が容易になります。

これまでの Solaris プロセスコアダンプ機能には、次のような制約がありました。

構成可能なコアファイルパス

次の 2 つの構成可能な新しいコアファイルパスは、個別に有効または無効にできます。

プロセスが異常終了すると、これまでの Solaris リリースと同じように、このプロセスは現在のディレクトリにコアファイルを生成します。しかし、グローバルコアファイルパスが有効で、たとえば、/corefiles/core に設定されていると、異常終了した各プロセスは、2 つのコアファイルを生成します。1 つは現在の作業ディレクトリに、もう 1 つは /corefiles ディレクトリに生成します。

デフォルトでは、以下のようにこれまでの Solaris のコアファイル生成機能と変わらないように設定してあります。

コアファイル名の拡張

グローバルコアファイルディレクトリが有効な場合、コアファイルは次の表に示す変数を使用してそれぞれ区別されます。

変数名 

変数の定義 

%p

プロセス ID 

%u

実効ユーザー ID 

%g

実効グループ ID 

%f

実効可能ファイル名 

%n

システムノード名。uname -n 出力と同じ

%m

マシン名。uname -m 出力と同じ

%t

time(2) システムコールの 10 進数値 

%%

リテラル % 

たとえば、グローバルコアファイルパスが次のように設定されているとします。


/var/core/core.%f.%p

このとき、PID 12345sendmail プロセスが異常終了すると、次のコアファイルが生成されます。


/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 ファイルに上記のコマンドを指定すると、ユーザーのログインセッションで実行されるすべてのプロセスのコアファイル名パターンを設定できます。

setuid プログラムがコアファイルを生成するように設定する

coreadm コマンドを使用して、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

コアファイル名パターンを設定するには

  1. プロセス別コアファイルを設定するのか、グローバルコアファイルを設定するのかを決めます。次の a、b のどちらかを選択します。

    1. プロセス別コアファイル名パターンを設定します。


      # coreadm -p $HOME/corefiles/%f.%p $$
      
    2. グローバルコアファイル名パターンを設定します。

      スーパーユーザーになります。


      # coreadm -g /var/core/core.%f.%p
      

コアファイル名パターンを表示するには

現在のプロセスのコアファイル設定値を照会するには、次の coreadm コマンドを使用します。$$ 記号は、動作しているシェルのプロセス ID を表す可変部分です。


$ coreadm $$
278:    core.%f.%p

スーパーユーザーは、coreadm process ID を使用して、任意のユーザーのコアファイル設定値を照会できます。通常ユーザーは、自身のプロセスのコアファイル設定値しか照会できません。

プロセス別コアファイルパスを有効にするには

  1. スーパーユーザーになります。

  2. プロセス別コアファイルパスを有効にします。


    # coreadm -e process
    
  3. 現在のプロセスコアファイルパスを表示して、構成を確認します。


    $ coreadm $$
    1180:   /home/kryten/corefiles/%f.%p

グローバルコアファイルパスを有効にするには

  1. スーパーユーザーになります。

  2. グローバルコアファイルパスを有効にします。


    # coreadm -e global -g /var/core/core.%f.%p
    

  3. 現在のプロセスコアファイルパスを表示して、構成を確認します。


    # 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 コマンドで端末からのコンソールメッセージを表示したい場合、次の動作に注意してください。

補助 (リモート) コンソールを有効にするには

consadm コマンドで補助コンソールを追加するまで、consadm デーモンはポートの監視を開始しません。セキュリティ上、コンソールメッセージがリダイレクトされるのはキャリア信号が失われるか、あるいは補助コンソールデバイスが選択解除されるまでのみです。つまり、consadm コマンドを正常に使用するためには、ポート上でキャリアが確立されていなければならないことを意味します。

補助コンソールを有効にする方法の詳細は、consadm(1M) のマニュアルページを参照してください。

  1. スーパーユーザーとしてシステムにログインします。

  2. 補助コンソールを有効にします。


    # consadm -a devicename
    
  3. 現在の接続が補助コンソールであることを確認します。


    # consadm
    

例 - 補助 (リモート) コンソールを有効にする


# consadm -a /dev/term/a 
# consadm
/dev/term/a

補助 (リモート) コンソールのリストを表示するには

  1. スーパーユーザーとしてシステムにログインします。

  2. 次の手順のいずれかを選択します。

    1. 補助コンソールのリストを表示します。


      # consadm
      /dev/term/a
    2. 固定されている補助コンソールのリストを表示します。


      # consadm -p
      /dev/term/b

システムリブート時に補助 (リモート) コンソールを有効にするには

  1. スーパーユーザーとしてシステムにログインします。

  2. システムリブート時に補助コンソールを有効にします。


    # consadm -a -p devicename     
    

    固定補助コンソールのリストにデバイスが追加されます。

  3. 固定補助コンソールのリストにデバイスが追加されていることを確認します。


    # consadm
    

例 - システムリブート時に補助 (リモート) コンソールを有効にする


# consadm -a -p /dev/term/a  
# consadm
/dev/term/a

補助 (リモート) コンソールを無効にするには

  1. スーパーユーザーとしてシステムにログインします。

  2. 次の手順のいずれかを選択します。

    1. 補助コンソールを無効にします。


      # consadm -d devicename
      
    2. 補助コンソールを無効にして、固定補助コンソールのリストから削除します。


      # consadm -p -d devicename
      
  3. 補助コンソールが無効になっていることを確認します。


    # consadm
    

例 - 補助 (リモート) コンソールを無効にする


# 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 つの変更があります。

  1. メッセージテキストの前に、次のようなメッセージ ID が付きます。


    [ID  msgid facility.priority]

    たとえば、次のようになります。


    [ID 123456 kern.notice]

    msgid 識別子については、msgid(1M) のマニュアルページを参照してください。facility 識別子と priority 識別子については、syslog.conf(4) のマニュアルページを参照してください。

  2. メッセージの原因がカーネルにある場合は、「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 を有効にするには

  1. スーパーユーザーになります。

  2. システムメッセージ ID を有効にするには、/platform/`uname -i`/kernel/drv/log.conf ファイルに次の行を追加します。このファイルがない場合は、/kernel/drv/log.conf ファイルに msgid プロパティを追加します。


    msgid=1
  3. ファイルを保存して閉じます。

  4. 次のコマンドでシステムをリブートします。


    # init 6
    

    注 -

    システムをリブートせずにシステムメッセージ ID を有効にするには、次の adb コマンドを使用します。


    # echo log_msgid/W1 | adb -kw
    

システムメッセージ ID を無効にするには

  1. スーパーユーザーになります。

  2. システムメッセージ ID を無効にするには、/platform/`uname -i`/kernel/drv/log.conf ファイルの msgid 行を次のように変更します。このファイルがない場合は、/kernel/drv/log.conf ファイルの msgid プロパティを変更します。


    msgid=0
  3. ファイルを保存して閉じます。

  4. 次のコマンドでシステムをリブートします。


    # init 6
    

    注 -

    システムをリブートせずにシステムメッセージ ID を無効にするには、次の adb コマンドを使用します。


    # echo log_msgid/W0 | adb -kw