LDAP サーバ作り中に DB2 接続できなくてドはまりした

IBMLDAP サーバをインストールしていました。こいつはデータストアに DB2 を使うようになってます。で設定してたら DB2 に繋がらないわけですよ。LDAP サーバが起動できないわけですよ。困ったときにはログを見ろ。近頃の若いのは「わからない、わからない」と試行錯誤するばかりでログを見ないので本当に困ります。困ったときの DB2 のログといえば db2diag.log です。

2012-12-11-xx.xx.xx.xxxxxx+xxx I17804A306         LEVEL: Error
PID     : 12582964             TID  : 1           PROC : ibmslapd
INSTANCE: ldapdb2              NODE : 000
FUNCTION: DB2 UDB, common communication, sqlcctcpconnr, probe:110
MESSAGE : DIA3202C The TCP/IP call "connect" returned an errno="78".

TCP/IP 接続で connect のときに接続失敗している。なるほどネットワーク繋がっていますか?と言いたいところですがコレ同一OS内に入れてるんですよ。ローカルだから繋がらないとかそもそも関係ないでしょう。そう思っていた時期が僕にもありました。TCP/IP などと言われているので念のためにノード情報を確認です。

db2 => LIST NODE DIRECTORY
 
 Node Directory
 
 Number of entries in the directory = 2
 
Node 1 entry:
 
 Node name                      = IDSINODE
 Comment                        =
 Directory entry type           = LOCAL
 Protocol                       = LOCAL
 Instance name                  = ldapdb2
 
Node 2 entry:
 
 Node name                      = LDAPDB2N
 Comment                        =
 Directory entry type           = LOCAL
 Protocol                       = TCPIP
 Hostname                       = localhost
 Service name                   = ldapdb2svcids

今回問題なのは TCP/IP 接続とのことですから Protocol が TCPIP のところを見てみましたら Hostname = localhost です。だよね localhost だよね、繋がらない方がおかしいよね。どう考えたって、ping だって届くし。そう思っていた時代もありました。

$ ping -c 4 localhost
PING localhost.example.com: (172.16.12.14): 56 data bytes
 
--- localhost.example.com ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

おまえ誰やー!なんでそんなヤツが返事するのん!そりゃ繋がらないわ。localhost 言いつつよそのホスト行ってるしこれはおかしいわ。調べてみたらうちのネットワークの DNSlocalhost って名前のホストが居るのよ。まじか。そういうのアリなのか。

しかしですよ、/etc/hosts に localhost127.0.0.1 で登録しているのに何故に DNS を先に引きに行くのだ?と思っていたらリゾルバの問い合わせ順の話でした。

今回AIXで試してたんですけど、問い合わせ順を定義してあるファイル /etc/netsvc.conf に何も記述されていなくて、そのおかげか DNS の優先順位が高くて hosts 見る前に DNS に行ってたようです。 hosts = local,bind と登録しておけば、ローカルの hosts ファイルを先に見てくれます。

いやいやしかしまさか localhost が別の場所を向いてるなんて思いもしませんでしたわ。先入観というのは怖いなあ。