管理している一台のFreeBSDで、p5-Furl モジュールを更新しようとしたところ、ビルド中エラーが発生。
configureの最中に下図のようにエラーが出て更新作業が configure 段階で終了。
===> p5-Furl-2.16 depends on package: p5-HTTP-Parser-XS>=0.11 - found ===> p5-Furl-2.16 depends on package: p5-Mozilla-CA>0 - found ===> p5-Furl-2.16 depends on file: /usr/local/lib/perl5/site_perl/5.16.2/Module/Build.pm - found ===> p5-Furl-2.16 depends on file: /usr/local/bin/perl5.16.2 - found ===> Configuring for p5-Furl-2.16 CPAN::Meta::Requirements version 2.121 required--this is only version 2.120630 at /usr/local/lib/perl5/site_perl/5.16.2/CPAN/Meta/Prereqs.pm line 10. BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/5.16.2/CPAN/Meta/Prereqs.pm line 10. Compilation failed in require at /usr/local/lib/perl5/site_perl/5.16.2/CPAN/Meta/Feature.pm line 7. BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/5.16.2/CPAN/Meta/Feature.pm line 7. Compilation failed in require at /usr/local/lib/perl5/site_perl/5.16.2/CPAN/Meta.pm line 9. BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/5.16.2/CPAN/Meta.pm line 9. Compilation failed in require at ./Build.PL line 15. BEGIN failed--compilation aborted at ./Build.PL line 15. *** Error code 255 Stop in /usr/ports/www/p5-Furl. ** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20130605-12215-1t71iyp-0 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=p5-Furl-2.09 UPGRADE_PORT_VER=2.09 make ** Fix the problem and try again. ** Listing the failed packages (-:ignored / *:skipped / !:failed) ! www/p5-Furl (p5-Furl-2.09) (unknown build error)
エラーメッセージから考えると、site_perl 以下のバージョンが perl5.16 系ではないものが入っているようです。チェックしてみると、 site_perl の下には 5.16.2 と 5.12.4 があり、一部のモジュールが5.16系、一部が5.12系とバージョンミスマッチが発生しているようです。OSインストール時のPerlが5.12系で、その後5.16系に置き換えたためかもしれません。ちゃんと処理したと思ったんですけどね、勘違いだったのかも。
さて、こういうときのモジュール単体のバージョンアップはどうやったらいいものなのか、、、、
やむなく、/usr/ports/develp の下の、p5-Furlビルド時にエラーが出ているp5モジュールのディレクトリに移動して、片っ端から「make deinstall reinstall clean」を発行。4モジュールほど更新した後、p5-Furlがportupgrade コマンドで更新出来るようになり、一応解決。根本的には5.12.4ディレクトリ以下のモジュールを全部5.16系に更新すべきなんでしょうが数が多いので一度に全部のモジュールを更新することができないものかと ports/UPDATING ファイルを読んでみると perl-after-upgrade というコマンドがあることが判明。
これはいい!と早速実行してみましたが、site_perl/5.12.4 の下のモジュールは更新されませんでした。オンラインマニュアルを読んでみると、そのディレクトリにファイルが残ることは小さな事だと書いてあって、現時点ではお手上げ状態。
o review the files left in the older perl installation. This is typically /usr/local/lib/perl5/site_perl/5.X.Y/. There should be very little, if any, files in that directory and its subdirectories, excepting a number of .ph files;
実際運用面では問題は出ていないし、perlをアップデートしたときに派生するバージョンアップ忘れモジュールと考えていいようです。まあ、次回同じエラーが出たら、またチマチマと手動で更新することにするということでこのメモを残して作業は終了することにしました。