またも、libpq.so.5 がらみのエラーで小一時間悩む・・・
実は、これで三回目である。
この問題で時間を無駄にしたのは・・・
シェル上での実行(ちなみに、root ユーザにて)ではまったく問題無いのに、CGI で実行すると、
install_driver(Pg) failed: Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/Pg/Pg.so' for module DBD::Pg: libpq.so.5: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230, <DATA> line 855.at (eval 9) line 3Compilation failed in require at (eval 9) line 3, <DATA> line 855.Perhaps a required shared library or dll isn't installed where expectedat ../hogehoge.cgi line 99
というエラーが出る。
結論から言おう。
これは、「POSTGRES_HOME のパーミッション」の問題(^^;
/usr/local/pgsql ディレクトリが 0700(所有者以外、参照すら不可)で作られているので、Apache の実行ユーザである daemon から libpq.so.5(/usr/local/pgsql/lib)の参照が出来ないために No such file or directory となっている。
つーことで、/usr/local/pgsql ディレクトリのパーミッションを 0755 に変更すれば解決。
以前、"「共有オブジェクトファイルを開けません」エラーではまった・・・"というエントリーで書いたとおり。
以前(特に FreeBSD サーバメインだった頃)は、mkdir /usr/local/pgsql してから、vipw や vi /etc/group で直接ユーザー&グループの作成を行っていたので、POSTGRES_HOME(/usr/local/pgsql)が 0700 で作られることはなかったんだが、最近は手っ取り早く、
# groupadd -g 128 postgres# useradd -g postgres -u 128 -c 'POSTGRES Admin' -d /usr/local/pgsql -m -s /bin/bash postgres
ってやっちゃうからな。これだと、/usr/local/pgsql が 0700 で作られちゃう。
ググっても、「httpd.conf で mod_env が有効になっているのを確認して SetEnv LD_LIBRARY_PATH /usr/local/pgsql/lib という記述を追加しよう」とか、「ldconfig してないんじゃないか?」的な情報が多いんだけど、俺がそんなミスするかよ!!
・・・って、俺のミスの方がよっぽど格好悪いけどな(^^; とほほほ・・・