Apache2.4.2が起動しない

tracfcgi経由で動作させるためにapache2.4.2をインストール。fcgiを有効にして起動しようとするとこんなエラーが。

# /usr/local/apache2/bin/apachectl restart
httpd: Syntax error on line 113 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_proxy.so into server: /usr/local/apache2/modules/mod_proxy.so: undefined symbol: apr_global_mutex_lockfile

aprにライブラリが見えないとか。そういえば、aprをインストールしたときにライブラリが云々とかってメッセージが出ていたような。aprをもう一度make installして確認してみる。こんなメッセージが出ていました。

Libraries have been installed in:
   /usr/local/apr/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

ふむ、じゃあってんでやってみるけど同じエラー。なんでだろう。

落ち着いて考えてみる

Google先生に聞いても有効な答えはなし。ライブラリが見えないっていっているんだよね。libaprのライブラリ。いや、見えないんじゃなくて、シンボルが見つからないっていっているってことは、ライブラリは見えているけれどもその中に求めるシンボルがないってことか。すると、違うライブラリを参照しているってことかも。探してみる。

# cd /
# find  . -name '*libapr*' -print
./usr/lib64/libapr-1.so.0
./usr/lib64/libapr-1.so.0.2.7
./usr/lib/libapr-1.so.0.2.7
./usr/lib/libaprutil-1.so.0.2.7
./usr/lib/libaprutil-1.so.0
./usr/local/apr-util/lib/libaprutil-1.a
./usr/local/apr-util/lib/libaprutil-1.so.0.4.1
./usr/local/apr-util/lib/libaprutil-1.la
./usr/local/apr-util/lib/libaprutil-1.so
./usr/local/apr-util/lib/libaprutil-1.so.0
./usr/local/apr/lib/libapr-1.so
./usr/local/apr/lib/libapr-1.so.0.4.6
./usr/local/apr/lib/libapr-1.la
./usr/local/apr/lib/libapr-1.so.0
./usr/local/apr/lib/libapr-1.a

いたいた。デフォルトで入っているaprを参照しているんだな。これを退避させる。

# mkdir /usr/lib/old
# mv /usr/lib/*libpar* /usr/lib/old
# mkdir /usr/lib64/old
# mv /usr/lib64/*libapr* /usr/lib64/old

これで無事に起動できました。yumとソースからのインストールを並行して運用しているとこういうことがよく起きます。