UNIXやLinux: 2012年8月アーカイブ

またも、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 3
Compilation failed in require at (eval 9) line 3, <DATA> line 855.
Perhaps a required shared library or dll isn't installed where expected
 at ../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 してないんじゃないか?」的な情報が多いんだけど、俺がそんなミスするかよ!!

・・・って、俺のミスの方がよっぽど格好悪いけどな(^^; とほほほ・・・
Apache 2.4 系からは、CGI の実行も外部モジュールを読み込んで行うようになってて、以前「Apache を 2.2系から 2.4系に上げて大ごとになった(^^;」でもチラっと書いたけど、

LoadModule cgid_module modules/mod_cgid.so

この行のコメントを外して、モジュールの読み込みを有効にしないと、

Options +ExecCGI

や、

AddHandler cgi-script .cgi

の記述を追加しただけじゃ CGI は実行されない。やれやれだ(^^;

ホント、2.4系から、2.X系 APache の設定がガラっと変わってるんで、以前のバージョンの設定を死ぬほどやったことのある人間は、かえって戸惑うかもね。(まあ、ちゃんとマニュアル読めって話なんだけど(^^;)

このアーカイブについて

このページには、2012年8月以降に書かれたブログ記事のうちUNIXやLinuxカテゴリに属しているものが含まれています。

前のアーカイブはUNIXやLinux: 2012年7月です。

次のアーカイブはUNIXやLinux: 2012年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら