この節では、トラブルシューティングの 2 つの領域を説明します。
N2L サーバーが LDAP 内部の問題に関連するエラーをログに記録して、LDAP 関連のエラーメッセージが表示される場合があります。エラーは致命的なものではありませんが、調査すべき問題を示しています。たとえば、N2L サーバーは動作を継続していても、返される結果が古かったり、不完全になる場合があります。
次のリストに、N2L サービスを実装するときに発生する可能性のある、よくある LDAP エラーメッセージをいくつか示します。エラーの説明、考えられる原因、およびエラーの対策も含みます。
Administrative limit exceeded
エラー番号: 11
原因 : ディレクトリサーバーの nsslapd-sizelimit 属性で許可されたものより大きな LDAP 検索が実行されました。情報の一部だけが返されます。
対策 : nsslapd-sizelimit 属性の値を増やすか、失敗した検索に VLV インデックスを実装します。
Invalid DN Syntax
エラー番号: 34
原因 : 不正な文字を含む DN を使用して LDAP エントリの書き込みが試みられました。N2L サーバーは、DN 内で生成される + 記号などの不正な文字のエスケープを試みます。
対策 : LDAP サーバーのエラーログをチェックして、どのような不正な DN が書き込まれたかを調べます。それから、不正な DN を生成した NISLDAPmapping ファイルを修正します。
Object class violation
エラー番号: 65
原因 : 無効な LDAP エントリの書き込みが試みられました。通常、次のいずれかの状況で生じる MUST 属性が見つからないことがこのエラーの原因です。
見つからない属性のエントリを作成する NISLDAPmapping ファイルのバグ
存在しないオブジェクトへの AUXILIARY 属性の追加の試み
たとえば、ユーザー名がまだ passwd.byxxx マップから作成されていない場合、そのユーザーに対する補足情報の追加の試みは失敗します。
対策 : NISLDAPmapping ファイルのバグである場合は、サーバーエラーログへの書き込みをチェックして、問題の原因を判断します。
Can't contact LDAP server
エラー番号: 81
原因 : ypserv ファイルが正しく構成されず、間違った LDAP ディレクトリサーバーを指定していることがあります。または、ディレクトリサーバーが稼働していません。
対策 :
ypserv ファイルを再構成して、正しい LDAP ディレクトリサーバーを指定します。
LDAP サーバーが実行中であることを確認するには、ディレクトリサーバーでスーパーユーザーになるか、同等の役割になり、次のように入力します。
# pgrep -l slapd |
Timeout
エラー番号: 85
原因 : LDAP 動作がタイムアウトしました。多くの場合、DIT からマップを更新している間に発生します。古い情報がマップに含まれている可能性があります。
対策 : ypserv 構成ファイルの各 nisLDAPxxxTimeout 属性を増やします (xxx の部分は何種類かある)。
N2L サーバーの実行中に、次の問題が発生する場合があります。考えられる原因と対策を説明します。
マッピングファイル NISLDAPmapping は複雑なファイルです。多くの潜在的なエラーによって、マッピングが予期しない動作をする場合があります。次の方法を用いて、この問題を解決してください。
ypserv -ir (または -Ir) を実行したときのコンソールメッセージの表示
問題 : コンソールに簡単なメッセージが表示され、サーバーが終了します (詳細な説明は、syslog に書き込まれます)。
原因 : マッピングファイルの構文が間違っている場合があります。
対策 : NISLDAPmapping ファイルの構文をチェックして修正します。
起動時に NIS デーモンが終了する
問題 : ypserv またはその他の NIS デーモンを実行すると、LDAP 関連のエラーメッセージがログに記録され、デーモンが終了します。
原因 : 原因は次のいずれかが考えられます。
LDAP サーバーと通信できない
NIS マップまたは DIT 内のエントリが、指定されたマッピングと互換性がない
LDAP サーバーへの読み書きの試みがエラーを返す
対策 : LDAP サーバーのエラーログを調査します。「よくある LDAP エラーメッセージ」にリストされた LDAP エラーを参照してください。
NIS 動作からの予期しない結果
問題 : NIS 動作が予期した結果を返さず、エラーはログに記録されません。
原因 : 間違ったエントリが LDAP または NIS マップに存在する場合があります。この結果、マッピングが期待したとおりに完了しません。
対策 : LDAP DIT と NIS マップの N2L バージョンのエントリをチェックして、修正します。
LDAP DIT に正しいエントリが存在するかをチェックしてから、必要に応じてエントリを修正します。
Sun Java System Directory Server を使用している場合は、directoryserver startconsole を実行して管理コンソールを起動します。
新しく生成されたマップと元のマップを比較して、/var/yp ディレクトリの N2L バージョンの NIS マップに期待どおりのエントリが含まれていることをチェックします。必要に応じてエントリを修正します。
# cd /var/yp/domainname # makedbm -u test.byname # makedbm -u LDAP_test.byname |
マップの出力をチェックする場合は、次のことに注意してください。
両方のファイルでのエントリの順序が異なる可能性
出力を比較する前に、sort コマンドを使用します。
両方のファイルでの空白の使い方が異なる可能性
出力を比較するときに、diff -b コマンドを使用します。
NIS マップの処理順序
問題 : オブジェクトクラス違反が発生しています。
原因 : ypserv -i コマンドを実行すると、各 NIS マップが読み取られ、その内容が DIT に書き込まれます。複数のマップが、同一の DIT オブジェクトに属性を提供する場合もあります。通常、オブジェクトは、1 つのマップによってそのオブジェクトの MUST 属性のすべてを含む大部分を生成されます。ほかのマップは、ほかの MAY 属性を提供します。
マップは、NISLDAPmapping ファイルに定義されている nisLDAPobjectDN 属性と同じ順序で処理されます。MAY 属性を含むマップが MUST 属性を含むマップより先に処理されると、オブジェクトクラス違反が発生します。このエラーについての詳細は、「よくある LDAP エラーメッセージ」のエラー 65 を参照してください。
対策 : マップが正しい順序で処理されるように、nisLDAPobjectDN 属性の順序を変更します。
一時的に問題を回避するには、ypserv -i コマンドを複数回実行します。コマンドを実行するたびに、より多くの LDAP エントリが作られます。
1 つのマップからオブジェクトのすべての MUST 属性を作成できないマッピングはサポートされていません。
問題 : サーバーがタイムアウトします。
原因 : N2L サーバーがマップをリフレッシュすると、その結果、大規模な LDAP ディレクトリアクセスが行われる場合があります。Sun Java System Directory Server が正しく構成されていない場合、この動作は完了前にタイムアウトになることがあります。
対策: ディレクトリサーバーのタイムアウトを防止するには、Sun Java System Directory Server の属性を手動で修正するか、idsconfig コマンドを実行します。詳細は、「よくある LDAP エラーメッセージ」と「Sun Java System Directory Server を使用した NIS から LDAP への移行の最良の実践原則」を参照してください。
問題 : ypserv コマンドは起動しますが、NIS リクエストに応答しません。
原因 : N2L サーバーのロックファイルが、NIS マップへのアクセスと正しく同期していません。このような状況が発生してはなりません。
# svcadm disable network/nis/server:default # rm /var/run/yp_maplock /var/run/yp_mapupdate # svcadm enable network/nis/server:default |
問題 : N2L サーバーがデッドロックします。
原因 : N2L マスターサーバーのアドレスと LDAP サーバーのアドレスが hosts、ipnodes、または ypserv ファイルに正しくリストされていない場合、デッドロックの発生することがあります。N2L の正しいアドレス構成についての詳細は、「NIS から LDAP への移行のための前提条件」を参照してください。
デッドロックの発生する例として、次の一連の事柄を考えてみてください。
NIS クライアントが IP アドレスの検索を試みます。
N2L サーバーが、hosts エントリは最新ではないことを検出します。
N2L サーバーが LDAP からの hosts エントリの更新を試みます。
N2L サーバーは、ypserv から LDAP サーバーの名前を取得してから、libldap を使用して検索を実行します。
libldap は、ネームサービススイッチを呼び出して、LDAP サーバー名の IP アドレスへの変換を試みます。
ネームサービススイッチの設定に基づき、N2L サーバーへの NIS 呼び出しを行い、デッドロックが発生します。
対策 : N2L マスターサーバー上の hosts ファイルまたは ipnodes ファイルに N2L マスターサーバーと LDAP サーバーのアドレスをリストします。hosts ファイルおよび ipnodes ファイルがローカルホスト名を解決するためにどのようにして構成されているかに応じて、サーバーアドレスは、各ファイルに、またはその両方にリストされなければなりません。また、nsswitch.conf ファイルの hosts および ipnodes エントリで、検索順序として nis の前に files をリストしていることをチェックしてください。
別の方法として、このデッドロックに対して、ypserv ファイルでホスト名ではなく LDAP サーバーアドレスを記述する方法もあります。これは、LDAP サーバーアドレスが別の場所に記述されていることを意味しています。したがって、LDAP サーバーと N2L サーバーのどちらかでアドレスを変更する場合には、さらに少し作業が必要になります。