Apache1.3+mod_perlのコンパイル

偶然にも、mod_perlという名前を久々にここに書いた日の夜に、このサーバーのmod_perlが動かなくなった。いつも通りに、Debianのaptitudeを使って"Upgradable"なパッケージを全てアップグレードしたら、mod_perlが消えてしまったのである。
先月半ばにDebianの5.0がリリースされ、Apache 1.3がサポート対象外になったのと関係しているものと思われるが、Apache 1.3自体は"Obsoleted package"に分類されながらも残っていたのに、なぜmod_perlだけ消えてしまったのだろう。Perlがバージョンアップされたからだろうか。アップグレードに伴い、依存関係の解消のために消されるパッケージとして表示されていたのだろうが、今回は"Upgradable"が多量だったのでろくに見なかったのが失敗だった。

仕方なく、面倒だがこの際Apache2+mod_perl2に移行するかと思って、mod_perl2をインストールして動かしてみると、mod_perlで動かしたいMovableTypeがmod_perl 1.xにしか対応していないことがわかった。

何としてもmod_perl 1.xをインストールしようと思って、Debianのapache1.3+mod_perlのパッケージを拾ってインストールしようとすると、それがおびただしい数のパッケージに依存していることがわかった。ついでに、依存関係にあるパッケージを1つ1つインストールすると、次々にそれらが"Obsoleted packages"に入れられてしまい、完全にやる気をそがれた。

という訳で、Apache 1.3とmod_perlのソースコードをコンパイルするしか無くなった。
このサーバーではDebianのaptitude頼りでほとんどオープンソースのコンパイルというものをしなかったので、簡単にコンパイルできるとは思っていなかったが、予想に反してあまりにも簡単にコンパイルできた。
感動したので、その手順を記録する。


1. 適当な所から以下の2つのソースを取得、展開
apache_1.3.41.tar.gz
mod_perl-1.0-current.tar.gz

2. mod_perl-1.XXディレクトリに移動して、以下を実行
perl Makefile.PL APACHE_SRC=../apache_1.3.41/src DO_HTTPD=1 USE_APACI=1 EVERYTHING=1 ADD_MODULE=proxy
make
make install
cd ../apache_1.3.41/
make install
3. Apache::Request, Apache::Cookieをインストール
perl -MCPAN -e shell
> install Apache::Request


以上である。
Apache::Cookieは、Apache::Requestをインストールすると自動的にインストールされる。
mod_perlをmakeすると、自動的にapacheもコンパイルされる。

Makefile.PLのオプションは、mod_perlのページの例を参考にした。例の通りではmod_proxyが有効にならなかったので、ADD_MODULE=proxyを追加した。


しかし、残念ながら、mod_perlをモジュール化する方法はわからなかった。
以下は失敗だった。(AddModule時に"mod_perl.c is already added"と表示され、mod_perlが動かない)
・Makefile.PLの引数にUSE_DSO=1を付ける
・Makefile.PLの引数にUSE_DSO=1を付けて、USE_APACI=1 を外す
・Apacheのconfigureの引数を--enable-module=perl --enable-shared=perl --enable-rule=SHARED_CORE --activate-module=src/modules/perl/libperl.aにする
・Apacheのconfigureの引数に--enable-module=perl --enable-shared=max --enable-rule=SHARED_CORE --activate-module=src/modules/perl/libperl.aにする
mod_perl Installationを見ると、USE_DSO=1を付けるだけで良いように読めるのだが…