CentOS 5.xにて、httpd-2.2.29 をソースからインストールした時の話。
以下のオプションでconfigure を実行。
# ./configure\ --enable-so\ --enable-ssl\ --enable-auth_digest\ --enable-unique-id\ --enable-deflate\ --enable-rewrite\ --enable-proxy\ --enable-expires\ --enable-headers
makeする。
# make ・・・略 mod_deflate.c: In function 'deflate_out_filter': mod_deflate.c:790: error: 'APR_INT32_MAX' undeclared (first use in this function) mod_deflate.c:790: error: (Each undeclared identifier is reported only once mod_deflate.c:790: error: for each function it appears in.) mod_deflate.c: In function 'deflate_in_filter': mod_deflate.c:1165: error: 'APR_INT32_MAX' undeclared (first use in this function) mod_deflate.c: In function 'inflate_out_filter': mod_deflate.c:1550: error: 'APR_INT32_MAX' undeclared (first use in this function) make[3]: *** [mod_deflate.lo] Error 1 make[3]: Leaving directory `/usr/local/src/httpd-2.2.29/modules/filters' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/usr/local/src/httpd-2.2.29/modules/filters' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/src/httpd-2.2.29/modules' make: *** [all-recursive] Error 1
APR関連のエラーが発生。
APRは「Apache Portable Runtime」である。
http://ja.wikipedia.org/wiki/Apache_Portable_Runtime
APR関連の確認。
# rpm -qa | grep apr
apr-util-devel-1.2.7-11.el5_5.2
apr-1.2.7-11.el5_6.5
apr-util-1.2.7-11.el5_5.2
apr-devel-1.2.7-11.el5_6.5
検索すると、makeできない原因は、APRのバージョンの模様。
https://issues.apache.org/bugzilla/show_bug.cgi?id=57035
「APR_INT32_MAX」は、APR1.3で導入されたので、APR1.2以前ではダメとの事。
./configure にて、APR関連のオプションは以下の通り。
Optional Packages: --with-included-apr Use bundled copies of APR/APR-Util --with-apr=PATH prefix for installed APR or the full path to apr-config --with-apr-util=PATH prefix for installed APU or the full path to apu-config
./configure でAPR関連の出力は以下の通り。
checking for APR... yes checking for APR-util... yes adding "-I/usr/include/apr-1" to INCLUDES checking for APR version 1.2.0 or later... yes checking for APR-util version 1.2.0 or later... yes setting EXTRA_INCLUDES to "-I$(top_builddir)/srclib/pcre -I. -I$(top_srcdir)/os/$(OS_DIR) -I$(top_srcdir)/server/mpm/$(MPM_SUBDIR_NAME) -I$(top_srcdir)/modules/http -I$(top_srcdir)/modules/filters -I$(top_srcdir)/modules/proxy -I$(top_srcdir)/include -I$(top_srcdir)/modules/generators -I$(top_srcdir)/modules/mappers -I$(top_srcdir)/modules/database -I/usr/include/apr-1 -I$(top_srcdir)/modules/proxy/../generators -I/usr/kerberos/include -I$(top_srcdir)/modules/ssl -I$(top_srcdir)/modules/dav/main"
./configure で「checking for APR version 1.2.0 or later... yes」とか書いてあるのに、実際は1.3 以上が必要なのか・・・。
yum の apr-devel apr-util-devel(いずれも バージョン 1.2.7)がインストールされた状態で、configure するには、./configure のオプションに「--with-included-apr」を指定し、httpdにバンドルされたAPRを使うとmakeできる。
バンドルされているのは APR 1.5.3 なので、エラーにならない。
また、yumで apr-devel と apr-util-devel を削除すると、自動的にhttpdにバンドルされたAPRを使うようになる。
# yum remove apr-devel apr-util-devel
RPMパッケージのARPが見つからないため、バンドルされたものを使う模様。
# ./configure | grep -i apr checking for APR... reconfig configuring package in srclib/apr now Configuring APR library APR Version: 1.5.1 checking for chosen layout... apr Applying APR hints file rules for i686-pc-linux-gnu APR will use threads checking which format to use for apr_ssize_t... %d checking which format to use for apr_size_t... %u checking which type to use for apr_off_t... off64_t decision on apr_lock implementation method... SysV IPC semget() checking if APR supports IPv6... yes setting apr_has_xthread_files to "0" setting apr_procattr_user_set_requires_password to "0" setting apr_thread_func to "" setting apr_has_user to "1" config.status: creating include/apr.h config.status: creating build/apr_rules.mk config.status: creating apr-1-config config.status: creating apr.pc config.status: creating include/arch/unix/apr_private.h config.status: include/apr.h is unchanged config.status: include/arch/unix/apr_private.h is unchanged srclib/apr configured properly checking for APR-util... reconfig configuring package in srclib/apr-util now APR-util Version: 1.5.3 checking for chosen layout... apr-util Applying apr-util hints file rules for i686-pc-linux-gnu checking for APR... yes adding "-I/usr/local/pgsql/include" to APRUTIL_PRIV_INCLUDES adding "-I/usr/include" to APRUTIL_PRIV_INCLUDES setting APRUTIL_EXPORT_LIBS to "-lexpat" setting APRUTIL_LIBS to "-lexpat" checking whether APR has DSO support... yes adding "/usr/local/src/httpd-2.2.29/srclib/apr/libapr-1.la" to APRUTIL_LIBS adding "-luuid" to APRUTIL_LIBS adding "-lrt" to APRUTIL_LIBS adding "-lcrypt" to APRUTIL_LIBS adding "-lpthread" to APRUTIL_LIBS adding "-ldl" to APRUTIL_LIBS config.status: creating apr-util.pc config.status: creating include/apr_ldap.h srclib/apr-util configured properly adding "-I/usr/local/src/httpd-2.2.29/srclib/apr/include" to INCLUDES adding "-I/usr/local/src/httpd-2.2.29/srclib/apr-util/include" to INCLUDES setting EXTRA_INCLUDES to "-I$(top_builddir)/srclib/pcre -I. -I$(top_srcdir)/os/$(OS_DIR) -I$(top_srcdir)/server/mpm/$(MPM_SUBDIR_NAME) -I$(top_srcdir)/modules/http -I$(top_srcdir)/modules/filters -I$(top_srcdir)/modules/proxy -I$(top_srcdir)/include -I$(top_srcdir)/modules/generators -I$(top_srcdir)/modules/mappers -I$(top_srcdir)/modules/database -I/usr/local/src/httpd-2.2.29/srclib/apr/include -I/usr/local/src/httpd-2.2.29/srclib/apr-util/include -I$(top_srcdir)/modules/proxy/../generators -I/usr/kerberos/include -I$(top_srcdir)/modules/ssl -I$(top_srcdir)/modules/dav/main"
まとめると、以下のいずれかの方法で、CentOS 5.x で httpd-2.2.29 のソースからインストールする際のmakeでエラーにならない。
- configure のオプションに「--with-included-apr」を指定し、バンドルされたAPRを使ってmake
- CentOS 5.x 標準のAPRのパッケージ(apr-devel, apr-util-devel)を削除する(自動的にバンドルされたAPRを使ってmakeされる)