読者です 読者をやめる 読者になる 読者になる

Apache2.4.1を入れてみたけどphp4系は動かなかった

最近良く書かれるApache2.4系の記事を見てwktkしていますが、
インフラエンジニアってのはそもそも安定志向なとろこがあって
遊ぶ分には良いもののやっぱり運用するのはちょっと敬遠してしまいますよね。


そんな訳で暫くは触る機会がないだろなーって思ってたんですけど
思いのほか早く触れる機会があって、せっかくなんでメモ。

インストール

インストの仕方はほとんど変わってないみたいです。
(MySQLみたいにcmakeになりましたーとかはないみたいです)


普通に

$ tar zxf httpd-2.4.1.tar.gz
$ cd httpd-2.4.1

からの

$ ./configure --prefix=PREFIX
$ make
$ sudo make install

で入れます。


若干のはまりポイントとしてはaprとapr-utilがないとエラーになったりします。
元々インスト済みの場合はパスを指定してやればいいですし、入ってなければ
./srclib配下に置いてやれば良いです。(とINSTALLファイルに書いてあります)
なので、展開したあとに

$ tar zxf httpd-2.4.1.tar.gz
$ cd httpd-2.4.1
$ cd ./srclib/
$ wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-1.4.6.tar.gz
$ wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-util-1.4.1.tar.gz
$ tar zxf apr-1.4.6.tar.gz
$ tar zxf apr-util-1.4.1.tar.gz
$ mv apr-1.4.6.tar.gz apr
$ mv apr-util-1.4.1.tar.gz apr-util

ってしといて

$ cd ../
$ ./configure --prefix=PREFIX --with-included-apr
$ make
$ sudo make install

でおk

問題のPHP

インストールとかその他設定とは、最近色々記事になっているのでそっちのほうが参考になると思う。
だがPHP4系、テメーはダメだ


何と言うか…言いたいことは凄くわかるのだけど、気づけばこんな組み合わせになってしまったのでしょうがない。


結果的にはApache2.4.1はPHP4系に対応していないようです。
というかPHP4系はApache2.4.1に対応していないようです。


PHPのインストは

$ tar zxf php-4.4.9.tar.gz
$ cd php-4.4.9
$ ./configure --prefix==PREFIX --with-apxs2=/usr/local/apache2.4.1/bin/apxs 
$ make 
$ sudo make install

みたく普通にやって特にエラーも出なかったんだけど
configtestひっぱ叩いたら↓のエラーがでました。

$ ./bin/apachectl configtest
httpd: Syntax error on line 233 of /usr/local/apache2.4.1/conf/httpd.conf: Cannot load /usr/local/apache2.4.1/modules/libphp4.so into server: /usr/local/apache2.4.1/modules/libphp4.so: undefined symbol: ap_get_server_version
(>'A`)>ウワァァ!!

あ、いや、ショックっていうか、やっぱりなって感じでしたけど。
んで

undefined symbol: ap_get_server_version

らしいのでapiの部分が変更になったのでしょう。


http://httpd.apache.org/docs/2.4/developer/new_api_2_4.html
にも書いてあるのですが、ap_get_server_versionが変更になっているみたいですね。

$ cd httpd-2.4.1
$ grep "ap_get_server_version" ./include/httpd.h 

ってやっても全く引っかかりません。


2.2.22は

$ cd httpd-2.2.22
$ grep "ap_get_server_version" ./include/httpd.h 
AP_DECLARE(const char *) ap_get_server_version(void);
 * ap_get_server_version().)

なんかそれっぽいのがでてきます。


PHP側も

$ cd php-4.4.9
$ grep "ap_get_server" sapi/apache2handler/php_functions.c
        return (char *) ap_get_server_version();

になってるしだめだこりゃ。。


ま、世界レベルでレアな組み合わせだわな。。

Apache2.4.1は

MPMがeventってのが注目ですよね。
運用してるサーバはほとんどpreforkで最近workerがちょこちょこって感じで。
eventはまだ全然動かしたことない。