2014-09-30

Apache httpd: /bin/sh: /apr-1/build/libtool: No such file or directory

いつも通り Apache httpd を make すると、エラーが発生。

# make
make[1]: Entering directory `/usr/local/src/httpd-2.2.24'
Making all in srclib
make[2]: Entering directory `/usr/local/src/httpd-2.2.24/srclib'
Making all in pcre
make[3]: Entering directory `/usr/local/src/httpd-2.2.24/srclib/pcre'
make[4]: Entering directory `/usr/local/src/httpd-2.2.24/srclib/pcre'
/apr-1/build/libtool --silent --mode=compile gcc -pthread        -I/usr/local/src/httpd-2.2.24/srclib/pcre -I. -I/usr/local/src/httpd-2.2.24/os/unix -I/usr/local/src/httpd-2.2.24/server/mpm/prefork -I/usr/local/src/httpd-2.2.24/modules/http -I/usr/local/src/httpd-2.2.24/modules/filters -I/usr/local/src/httpd-2.2.24/modules/proxy -I/usr/local/src/httpd-2.2.24/include -I/usr/local/src/httpd-2.2.24/modules/generators -I/usr/local/src/httpd-2.2.24/modules/mappers -I/usr/local/src/httpd-2.2.24/modules/database -I/usr/include/apr-1 -I/usr/local/src/httpd-2.2.24/modules/proxy/../generators -I/usr/local/src/httpd-2.2.24/modules/ssl -I/usr/local/src/httpd-2.2.24/modules/dav/main   -c maketables.c && touch maketables.lo
/bin/sh: /apr-1/build/libtool: No such file or directory
make[4]: *** [maketables.lo] Error 127
make[4]: Leaving directory `/usr/local/src/httpd-2.2.24/srclib/pcre'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/usr/local/src/httpd-2.2.24/srclib/pcre'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/src/httpd-2.2.24/srclib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/httpd-2.2.24'
make: *** [install-build] Error 2

よく見ると、configure 時にも同様のログが出ていた。

Applying OS-specific hints for httpd ...

./configure: line 5774: /apr-1/build/libtool: No such file or directory
  forcing SINGLE_LISTEN_UNSERIALIZED_ACCEPT to "1"
  forcing AP_NONBLOCK_WHEN_MULTI_LISTEN to "1"

確かにいつもと違ってこのシステムには apr パッケージが入っているが、一体 /apr-1/build/libtool とはどこから来たのか。configure スクリプトを追いかけると、apr-1-config --apr-libtool の出力に辿り着いた。

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)

# type apr-1-config
apr-1-config is hashed (/usr/bin/apr-1-config)

# apr-1-config --version
1.3.9

# apr-1-config --apr-libtool
/apr-1/build/libtool

私には apr-1-config と configure スクリプトのどちらが間違っているのかは分からない。しかしどちらであろうと、動かないシステムに価値はない。

結論: --with-included-apr が正義。

今後も余計なトラブルに逢いたくなければ、常にこのオプションを付けておくのが良さそうだ。普通、パッケージ提供バイナリよりも自分でビルドした方がパフォーマンスも良くなるはずだし。

もしかすると最新版の httpd では対処済みかも知れないが、面倒いので未確認。