先日、FreeBSD ports の Perl 標準が16系から18系になったため、portupgrade での更新に影響が出ていると記録を残しました。
perl5.16系も更新されているため、もうしばらくこのまま使って行きたかったのですが、メンテナンスが滞ってしまうため、やむなく perl5 18系に上げることにしました。
従来 perl のアップグレードはソースからのビルドで行っていましたが、特にビルドオプションに手を加えるわけでもないので、今回はバイナリーアップデートを行うことにしました。
perl を上げると、perl モジュールも更新することになるので、まとめて一度に更新するため、
pkg upgrade
コマンドでアップグレードが必要なパッケージを表示させ、これらを copy & paste を使ってエディターで編集し、アップグレード用スクリプトを作りました。
Installed packages to be UPGRADED: perl5: 5.16.3_11 -> 5.18.4_10 p5-version: 0.99.08_1 -> 0.99.08_2 p5-libwww: 6.08 -> 6.08_1 p5-XML-Parser: 2.41_1 -> 2.41_2 p5-WebService-Dropbox: 1.18 -> 1.18_1 p5-WWW-RobotRules: 6.02 -> 6.02_1 p5-URI: 1.64 -> 1.65 p5-Try-Tiny: 0.18 -> 0.18_1 p5-TimeDate: 2.30_1,1 -> 2.30_2,1 p5-Sub-Install: 0.928 -> 0.928_1 p5-Sub-Exporter: 0.987 -> 0.987_1 以下省略
こんな感じ。
「pkg install p5-version p5-XML-Parser p5-WebService-Dropbox p5-URI p5-Try-Tiny p5-Sub-Install p5-String-Random p5-Socket6 p5-Socket p5-Scalar-List-Utils p5-Perl-OSType p5-Path-Class p5-Parse-CPAN-Meta p5-Params-Validate p5-Params-Util p5-Package-Stash-XS p5-Package-Stash p5-Net-SSLeay p5-Net-OAuth p5-Net-LibIDN p5-Net-DNS p5-Mozilla-CA p5-Module-Runtime p5-Module-Metadata p5-Module-Implementation p5-Module-Build-XSUtil p5-Module-Build p5-Math-Round p5-Locale-gettext p5-List-MoreUtils p5-List-AllUtils p5-JSON-PP p5-JSON p5-IO-Socket-SSL p5-IO-Socket-IP p5-IO-Socket-INET6 p5-HTTP-Parser-XS p5-Furl p5-Encode-Locale p5-Dist-CheckConflicts p5-Digest-HMAC p5-Devel-CheckCompiler p5-DateTime-TimeZone p5-DateTime-Locale p5-DateTime-Format-Strptime p5-DateTime p5-Data-OptList p5-Data-Inherited p5-Class-Singleton p5-Class-Load p5-Class-Data-Inheritable p5-Class-Accessor-Lite p5-Class-Accessor p5-CPAN-Meta-YAML p5-CPAN-Meta-Requirements p5-CPAN-Meta p5-BerkeleyDB」
これをコマンドラインから実行してアップグレード完了。
perl をアップグレードしたくなかった理由は関連コマンドが動かなくなるかもしれないため。特に dropbox-api コマンドと jdresolve の動作確認が重要。
perl アップグレード後、試してみたところ、
> dropbox-api help Usage: dropbox-api[args] [options] Available commands: setup get access_key and access_secret ls list directory contents find walk a file hierarchy cp copy file or directory mv move file or directory mkdir make directory (Create intermediate directories as required) rm remove file or directory (Attempt to remove the file hierarchy rooted in each file argument) put upload file get download file sync sync directory (local => dropbox or dropbox => local) uid get accound uid Common Options -e enable env_proxy ( HTTP_PROXY, NO_PROXY ) -D enable debug See 'dropbox-api help ' for more information on a specific command.
ということで、dropbox-api コマンドは問題なし。
jdresolve コマンドも、
> jdresolve ip.txt
tokyo.lifewithunix.jp - - [01/Nov/2012:00:00:04 +0900]
tokyo.lifewithunix.jp - - [01/Nov/2012:00:00:09 +0900]
crawl-66-249-73-3.googlebot.com - - [01/Nov/2012:00:00:10 +0900]
srvxx.com - - [01/Nov/2012:00:00:17 +0900]
173.199.116.179.choopa.com - - [01/Nov/2012:00:10:47 +0900]
Total Lines: 6
Total Time : 00:00:00 (0.00 lines/s)
Total Hosts: 4
Resolved Hosts: 4 (100.00%)
Unresolved Hosts: 0 (0.00%)
Average DNS time: 0.0000s per request
Max DNS time: 0s (consider this value for your timeout)
ということで問題なし。
このあと、ports の更新状況を確認したところ、次のように perl のバージョンが上がっていることが判明しました。サーバー側で、バイナリービルドがまだ終わっていないようです。
pkg version -vL= perl5-5.18.4_10 < needs updating (index has 5.18.4_11)
portupgrade perl5.18 ということで、バージョンアップしたところ、
> dropbox-api ls Segmentation fault (core dumped)
> jdresolve ip.txt failed to load platform specific resolver component at /usr/local/lib/perl5/site_perl/mach/5.18/Net/DNS/Resolver.pm line 25. BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/mach/5.18/Net/DNS/Resolver.pm line 26. Compilation failed in require at /usr/local/lib/perl5/site_perl/mach/5.18/Net/DNS.pm line 68. BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/mach/5.18/Net/DNS.pm line 68. Compilation failed in require at /usr/local/bin/jdresolve line 177. BEGIN failed--compilation aborted at /usr/local/bin/jdresolve line 177.
dropbox-api コマンドと jdresolve コマンドが動かなくなりました。
まったく!
せっかくソースビルドしたのに、、、、
/usr/ports/lang/perl5.18 の下で、 make deinstall コマンドを発行し、perl 5.18 を削除。
「pkg install perl5」 コマンドで再度バイナリーインストール。元の perl5-5.18.4_10 に戻したところ、dropbox-api と jdresolve が復活。perl 5.18.4_11 を使うのはスキップすることにします。