FreeBSD: perl アップデートで、jdresolve 終焉

Perl のバージョンが更新され、perl モジュールのディレクトリ構成が変更になるため、perl の更新を止めていた FreeBSD サーバーですが、次々とperl に依存するパッケージが更新されるためやむなくPerl を更新することにしました。

更新が嫌だった理由の一つが dropbox-api コマンドが動かなくなることが確定していて、再度動くようにするためには2,3時間作業が必要になるとわかっているためと、jdresolve が依存しているライブラリー p5-Net-DNS を更新できないためです。
しかし、更新しない方の実害の方が大きくなりそうで、昨日、p5-Net-DNS だけ更新しない形で、Perl 5.12 を更新したところ、予定通り dropbox-api が動作不能に。これは /usr/local/lib/perl5 以下のperlモジュール構成を手作業で直せば元に戻ることはわかっているため、手作業で3時間くらい掛けて修正作業を行い dropbox-api コマンドを復活させました。「jdresolve は無事であってくれ」と祈りながら、試してみたところ perl そのものがモジュール位置を /usr/local/lib/perl5/12.5 と決めうちし、12.5.4 を見てくれなくなったため、jdresolve も使えなくなってしまっていました。

> jdresolve ip.txt
 Can't locate Net/DNS.pm in @INC (@INC contains: /usr/local/lib/perl5/5.12/BSDPAN /usr/local/lib/perl5/site_perl/5.12/mach /usr/local/lib/perl5/site_perl/5.12 /usr/local/lib/perl5/5.12/mach /usr/local/lib/perl5/5.12 .) at /usr/local/bin/jdresolve line 177.
 BEGIN failed--compilation aborted at /usr/local/bin/jdresolve line 177.

昨年末メモに残したように jdresolve とほぼ同様の機能を持つ apache 付属の logresolve というコマンドがあるものの、これは jdresolve よりも若干制約が多い(反面 jdresolveには無い機能もある)ためhttpサーバーのログに含まれるIPアドレスをホスト名に逆引きする用途にしか使えません。(それに jdresolve はキャッシュファイルが使える。)一行に複数のIPアドレスが記録されている形式のファイルには jdresolve が便利なのですが、とりあえず httpd のアクセスログを処理しないといけないため、jdresolve から logresolve コマンドへ切り替えることにし、jdresolve は後日対策を考えることにしました。

Apacheアクセスログの場合、置き換えはとっても簡単でした。

日毎に生成される access_日付.gz のファイルを次のように置き換えるだけ。

zcat access_* | /usr/local/bin/jdresolve --database=cache.db - > access.log

zcat access_* | /usr/local/sbin/logresolve > access.log

DNSキャッシュをローカルに持たなくなる分、名前解決速度が低下する可能性がありますが、深夜 cron で処理しているスクリプト中のコマンドなので、30分掛かる作業が45分になったところで特に影響はないはずです。(2時間延びるとなるとちょっと考えますが。)それでもしばらくは気にとめておきたいと思いますが。

さて、jdresolve コマンド自体はどうしたものか。

このコマンドを配布しているサイトで確認したところ、もう何年もメンテナンスされていないコマンドのようです。更新はないと思って、ソースを見るしかないかと考え中です。

(2013/06/27 追記)
p5-Net-DNS 0.68 を再インストールすることにより、jdresolve が復活しました。

コメントを残す