DBICが入らなくて、CentOS5.1でPerlのRPMリビルドした

帰省するのにUbuntu入れてたノートをWindowsXPに戻して(つぶしが効くので安心)、VMwareの環境をコピーして持って帰ろうとしたら、CPUがCoreDuoでx86_64なVM環境が動かないことが判明。

VMwareの開発環境を一から作り直すことになってしまったので、どうせならCentOS5.1を入れてやることにしました。VMware用のkickstartはいつものでほぼOKなので、インストールは余裕だったんだけど、CPANからDBIx::Classをインストールしたらトラブル発生。なんかPerlに問題があるっぽい。DBIC_NO_WARN_BAD_PERL=1 したら回避できる、みたいなエラーメッセージが…

ググったら、hide-k.net#blog: CentOSでDBIC最新版を使うときの注意 に行き着きました。そう言えば、前にもそういう話をみたような気がする。CentOSとかFedoraとかのRedHat系ディストリに付いてくるPerlに当たってるパッチがマズいってことですね。

export DBIC_NO_WARN_BAD_PERL=1 するのも気持ち悪いので、FC6のperlをアップデートした - nitsujiの日記を参考にPerlRPMリビルドに挑戦することにしました。

$ sudo yum -y install rpm-devel gdbm-devel
$ sudo rpm -ivh http://ftp.riken.go.jp/Linux/centos/5.1/os/SRPMS/perl-5.8.8-10.src.rpm
$ cd /usr/src/redhat/SPECS
$ sudo cp perl.spec perl.spec.org
$ sudo vim perl.spec
$ diff -u perl.spec perl.spec.org 
--- perl.spec   2007-12-31 08:49:04.000000000 +0900
+++ perl.spec.org       2007-12-31 08:48:33.000000000 +0900
@@ -160,8 +160,8 @@
 Patch27116:    perl-5.8.8-U27116.patch
 Patch27391:     perl-5.8.8-U27391.patch
 Patch27426:    perl-5.8.8-U27426.patch
-#Patch27509:     perl-5.8.8-U27509.patch
-#Patch27512:     perl-5.8.8-U27512.patch
+Patch27509:     perl-5.8.8-U27509.patch
+Patch27512:     perl-5.8.8-U27512.patch
 Patch27604:     perl-5.8.8-U27604.patch
 Patch27605:     perl-5.8.8-U27605.patch
 Patch27914:     perl-5.8.8-U27914.patch
@@ -367,9 +367,9 @@
 
 %patch27426 -p1
 
-#%patch27509 -p1
+%patch27509 -p1
 
-#%patch27512 -p1
+%patch27512 -p1
 
 %patch27604 -p1
$ cd ../
$ sudo rpmbuild -ba SPECS/perl.spec

行儀悪いけど、面倒だったので/usr/srcでRPM作ってしまった。まぁ、VMwareだし。最初、lib/Net/t/hostnameのテストで「FAILED at test 1」が出たけど、自分のhostnameが/etc/hostsで解決できてなかったので修正して再挑戦したらビルド成功。

$ ll RPMS/i386
合計 17964
-rw-r--r-- 1 root root 12213889 12月 31 09:58 perl-5.8.8-10.i386.rpm
-rw-r--r-- 1 root root  6084582 12月 31 09:58 perl-debuginfo-5.8.8-10.i386.rpm
-rw-r--r-- 1 root root    58076 12月 31 09:58 perl-suidperl-5.8.8-10.i386.rpm

forceつけてアップグレードはせずに、perl-5.8.8 on Fedora リビルド顛末記 - daily dayflower のやり方に従って、古いRPMを削除して改めてインストールしました。CPANモジュールは$HOME以下に入れてるので、/usr/lib/perl5/にあるのはvendor_perl/だけ。

$ cd /usr/lib/perl5/
$ sudo mv vendor_perl vendor_perl.bak
$ sudo rpm -ivh /usr/src/redhat/RPMS/i386/perl-5.8.8-10.i386.rpm

これでPerlのリビルドが完了。CPANライブラリも一回全部消して、改めて

$ cpan -i Class::C3::XS Class::C3 DBIx::Class

したら無事にDBICが入ったよママン!