SpamAssassin sa-updateが動かない対応

INTAA.NETのメールサーバでは迷惑メールの検出用にSpamAssassinを使用している。
SpamAssassinはプロジェクトが生きてるのか死んでるのかわからないような状態だし、迷惑メールの検出ルールの更新もやってるのかやってないのか不明。そもそも、Perlスクリプトのお化けみたいなものなので、そろそろ何か別な物に乗り換えたいところではあるのだけど適当なものが見当たらないのと、迷惑メールの検出でそこそこの成果があるのでなかなか重い腰が上がらない。

で、SpamAssassinでSPFの異常判定が発生したので調べていたら、sa-updateによるルールセットの更新が失敗するようになっているのを見つけた。
ちなみに、SPFの方はportsのアップデートの際にNet::DNSモジュールが巻き込まれてVer.0.8*から1.0*に上がってしまったことによりモジュールが認識できない(足りないのと同様)状態になっていたこと。Net::DNSを認識できないとNet::DNS::Nameserverだけでなく何故かMail::SPFまで認識できなくなるみたい。危なっ。

SpamAssassinが必要とするPerlのモジュールが正しく認識されているか確認する。
本当はルールが正しいか確認するコマンドのデバッグモード。

# spamassassin --lint -D
結果
Dec  5 18:10:15.637 [8720] dbg: diag: perl platform: 5.018004 freebsd
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Digest::SHA1, version 2.13
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: HTML::Parser, version 3.72
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::DNS, version 0.83
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: NetAddr::IP, version 4.079
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Time::HiRes, version 1.9741
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Archive::Tar, version 2.18
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Zlib, version 1.10
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Digest::SHA1, version 2.13
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: MIME::Base64, version 3.15
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: DB_File, version 1.827
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::SMTP, version 3.10
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Mail::SPF, version v2.009
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Geo::IP, version 1.50
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::CIDR::Lite, version 0.21
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Razor2::Client::Agent, version 2.84
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Socket::IP, version 0.38
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Socket::INET6, version 2.72
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Socket::SSL, version 2.039
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Compress::Zlib, version 2.069
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Mail::DKIM, version 0.4
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: DBI, version 1.636
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Getopt::Long, version 2.39
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: LWP::UserAgent, version 6.15
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: HTTP::Date, version 6.02
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Encode::Detect::Detector, version 1.01
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::Patricia, version 1.22
Dec  5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::DNS::Nameserver, version 1276

結構大量に出力される最初の方で表示される。
上ように全てのモジュールが「module installed」になっていれば問題ない。
・・・module not installed: Net::DNS ('require' failed)のような行があるとダメ。

本題のsa-updateの方。

# sa-update
Insecure dependency in require while running with -T switch at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver/Base.pm line 570.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver/Base.pm line 570.
Compilation failed in require at (eval 20) line 2.
        ...propagated at /usr/local/lib/perl5/5.18/base.pm line 88.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver/UNIX.pm line 18.
Compilation failed in require at (eval 19) line 2.
        ...propagated at /usr/local/lib/perl5/5.18/base.pm line 88.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver.pm line 22.
Compilation failed in require at /usr/local/lib/perl5/site_perl/Net/DNS.pm line 51.
Compilation failed in require at /usr/local/bin/sa-update line 88.
BEGIN failed--compilation aborted at /usr/local/bin/sa-update line 88.
こんなの

「with -T switch」で動いている時・・って表示される。Perlの-Tオプションって何だっけ?と思ったらTaint mode (汚染検出)。あぁ嫌いなやつだ。

/usr/local/bin/sa-updateの一行目を編集。
(SpamAssassinをportsでインストールしたらこのpath)

1
2
#!/usr/local/bin/perl -T -w  ← 1行目から
#!/usr/local/bin/perl -w     ← -Tを削除

あくまでも対処療法だけどこれだけ。