Perl 5.12 で mod_perl をインストールしたときの記録。Apache のバグ(?)によってすんなりとはいかなかった。
https://blog.delphinus.dev/2010/10/mod-perl-with-perl512.html
参考リンクの通りにインストールしていると、mod_perl の Makefile.PL
でエラーが発生した。
[ error] '/usr/sbin/apxs -q NOTEST_CPPFLAGS' failed: [ error] Use of assignment to $[ is deprecated at /usr/sbin/apxs line 97.
エラーメッセージでググると、これは Apache のソースを書き換える必要があるらしい。
Mailing List Archive: ModPerl: ModPerl
perl 5.12 / mod_perl
http://www.gossamer-threads.com/lists/modperl/modperl/101605Diff of /httpd/httpd/trunk/support/apxs.in
http://svn.apache.org/viewvc/httpd/httpd/trunk/support/apxs.in?r1=807930∓r2=932791&diff_format=h
以下は、CentOS 5.5 上でインストールしてみた記録だ。
Apache のソースをインストール
Apache のソースをビルドするには、次の 6 つのパッケージが必要だ。
xmlto
zlib-devel
libselinux-devel
pcre-devel
openssl-devel
distcache-devel
これらを yum
でインストールする。
$ sudo yum install xmlto zlib-devel libselinux-devel pcre-devel openssl-devel distcache-devel
そして Apache のソースパッケージをインストール。
$ wget ftp://ftp.riken.jp/Linux/centos/5.5/os/SRPMS/httpd-2.2.3-43.el5.centos.src.rpm $ rpm -ivh httpd-2.2.3-43.el5.centos.src.rpm
Apache のコンパイル
ソースへのパッチ
上に挙げたリンクの通り、Apache のソースをいじる……のはめんどくさいので、パッチファイルを作っておいた。次の内容のファイルを作っておく。
diff -rc httpd-2.2.3.orig/support/apxs.in httpd-2.2.3/support/apxs.in *** httpd-2.2.3.orig/support/apxs.in 2010-10-22 10:46:23.000000000 +0900 --- httpd-2.2.3/support/apxs.in 2010-10-22 10:47:49.000000000 +0900 *************** *** 83,89 **** my ($argumentative, @ARGV) = @_; my $errs = 0; local $_; - local $[ = 0; my @args = split / */, $argumentative; while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) { --- 83,88 ---- *************** *** 93,99 **** last; } my $pos = index($argumentative,$first); ! if ($pos >= $[) { if ($pos < $#args && $args[$pos+1] eq ':') { shift @ARGV; if ($rest eq '') { --- 92,98 ---- last; } my $pos = index($argumentative,$first); ! if ($pos >= 0) { if ($pos < $#args && $args[$pos+1] eq ':') { shift @ARGV; if ($rest eq '') {
これをソースディレクトリにコピー。
$ cp httpd-2.2.3-perl512fix.patch /usr/src/redhat/SOURCES
SPEC ファイルへのパッチ
パッチがちゃんと適用されるように SPEC ファイルを書き換える。
$ vim /usr/src/redhat/SPECS/httpd.spec
*** httpd.spec.orig 2010-10-22 10:53:56.000000000 +0900 --- httpd.spec 2010-10-22 10:55:47.000000000 +0900 *************** *** 111,116 **** --- 111,117 ---- Patch200: httpd-2.2.3-proxy229.patch Patch201: httpd-2.2.3-cache229.patch Patch202: httpd-2.2.3-deflate2215.patch + Patch999: httpd-2.2.3-perl512fix.patch License: Apache Software License Group: System Environment/Daemons BuildRoot: %{_tmppath}/%{name}-root *************** *** 270,275 **** --- 271,278 ---- %patch84 -p1 -b .sslreneg + %patch999 -p1 -b .perl512fix + # Patch in vendor/release string sed "s/@VENDOR@/%{vstring}/;s/@RELEASE@/%{release}/" < %{PATCH20} | patch -p1 -b -z .release
ビルド開始
後は書き換えた SPEC ファイルでコンパイルしよう。
$ rpmbuild -ba /usr/src/redhat/SPECS/httpd.spec
Apache のインストールと後処理
出来たパッケージをインストールする。
$ rpm -Uvh /usr/src/redhat/RPMS/i386/httpd-2.2.3-43.3.i386.rpm
ビルドに使ったパッケージは必要ないので削除しておく。今回は、以下の 32 個がインストールされていた。
xmlto zlib-devel libselinux-devel pcre-devel openssl-devel distcache-devel dialog distcache docbook-dtds docbook-style-xsl e2fsprogs-devel gd ghostscript ghostscript-fonts keyutils-libs-devel krb5-devel libsepol-devel netpbm netpbm-progs openjade opensp passivetex psutils sgml-common tetex tetex-dvips tetex-fonts tetex-latex urw-fonts w3m xml-common xmltex
これで mod_perl のインストールはうまくいくはずだ。