阿呆だった。
誰がだ?俺がだ。
俺は駄目なヤツだ。
駄目なヤツは俺だ。
ああ、何ということだ。何ということだ。
こんな、あんな、そんな・・・ああ・・・
俺の4時間を返せぇ~
いや、何かというと、CentOS 上の Perl5.8 で PostgreSQL を DBD::Pg モジュール経由で使う設定をしたのだが、シェル上ではそのプログラムを実行出来るのに、Apache の CGI として実行すると駄目というケースが発生したのだ。
install_driver(Pg) failed: Can't load '/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/Pg/Pg.so' for module DBD::Pg: libpq.so.5: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.
at (eval 3) line 3
Compilation failed in require at (eval 3) line 3.
Perhaps a required shared library or dll isn't installed where expected
at ./test.cgi line 89
こんなヤツね。
root や postgres ユーザでシェル上で実行すれば正常に動くのに・・・
これの解決に(このことばかりやってたわけではないが)4時間もかかってしまい、こんな時間になっているわけである。とほほ。
「それは、Apache の httpd.conf に SetEnv LD_LIBRARY_PATH /usr/local/pgsql/lib って書けばいいのだよ!」とか言う?
確かに昔はそんなこともしてたけどなあ。
ちゃんと /usr/local/pgsql/lib も ldconfig で認識させているから問題ないのだよ。そんな問題ではないのだ。
ま、とは言いつつ、藁をもすがる気持ちで実は SetEnv もしてみたけどな。(^^;
もちろん意味はない。
結局、原因は単純だった。
/usr/local/pgsql のパーミッションが 0700 になっていただけ・・・(^^;
なので、root や、このディレクトリのオーナーである postgres だけしか(いくらちゃんとライブラリのパスを通していても)DBD::Pg モジュールが利用できなかったのだな・・・とほほ。
いつもなら、PostgreSQL をインストールするとき、あらかじめ root で mkdir /usr/local/pgsql して、インストール後に chown -R postgres /usr/local/pgsql とかするのよ。
そしたら、/usr/local/pgsql のパーミッションは 0755 で作成されるので問題なかったんだよ。
今回は、急ぎテスト環境を作りたかったので、postgres ユーザを作る時に、
useradd -g postgres -u 128 -c 'POSTGRES Admin' -d /usr/local/pgsql -m -s /bin/csh postgres
と、ホームディレクトリとして /usr/local/pgsql を作っちゃったのよ。これが不味かった。パーミッションが 0700 で作られてしまうからな。
・・・そうなんだよな。以前も別のエントリで書いたけど、俺は「BSD の人」なので、未だに Linux 系でホームディレクトリが 0700 で作られちゃうことに馴れてないのであります。(^^;
まったく。困った話だ。
結局、chmod 755 /usr/local/pgsql したら全て解決。
ググってみたら、けっこう同じような状況ではまっている人も多いので、恥をさらしてエントリを公開しておくのだ。
ああ、俺の貴重な睡眠時間が・・・
電気ウナギ的○○
About Backコメント(0)
電気ウナギ的○○