Perl5.12 で mod_perl をインストール


Perl 5.12 で mod_perl をインストールしたときの記録。Apache のバグ(?)によってすんなりとはいかなかった。

http://blog.remora.cx/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/101605

Diff 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 のインストールはうまくいくはずだ。

コメントを残す