MailPackが突然動作しなくなった

 ウチが構築したMovable Typeのサイトで、MailPackを使ってメール経由でブログへの投稿をしているサイトがあるんですわ。で、納品してしばらくはちゃんと動いていたのですが、突然メール投稿だけ出来なくなってしまいました。管理画面からの投稿はフツーに出来るんですけどね。

 で、MT管理画面のログに表示されているエラーはこんな感じのエラーです。

[MailPack] listner.pm Can't locate object method "new" via package "IO::Socket::SSL" at /usr/lib/perl5/site_perl/5.8.8/Mail/POP3Client.pm line 376.

やはりMailPack絡みのトラブルっぽいですね。ちなみにIO::Socket::SSLはもちろんインストール済み、、、。原因を色々考えたのですが、よくよく考えると動作しなくなったタイミングと、yum updateでperlが自動的にバージョンアップしたタイミングが符合します。このサーバーは一日1度yum updateを行っており、28-Sep-2010 15:06にperl-5.8.8-32.el5_5.2.x86_64.rpmがリリースされており、動作不具合が発生し始めたのが30日頃。そういうことを考えると、このperlのバージョンアップが原因の可能性があります。

 と、perlのバージョンダウンは容易ではありません。yumベースで行う場合は、まず本体のバージョンダウンを行いますが、その時に大量の依存プログラムもアンインストールされてしまいます。本体をアンインストールして、バージョンダウンしたものを新たにインストール。その後関連プログラムをインストールしますが、バージョン関連でのトラブルも予想され大手術になってしまうことが予想されます。

 色々とネットで情報を探していると、yumなどでperlをバージョンアップすると、CPAN経由でインストールしたperlモジュールがバージョンダウンしてしまうという情報を見つけました。正確なところは分からないのですが、インストールされた初期の状態に戻ってしまうのかもしれません。ということは、再度CPANでモジュールをインストールというかバージョンアップすればよいだろうと考えました。

 早速、CPANシェルを走らせてみます。

cpan> install IO::Socket::SSL
IO::Socket::SSL is up to date.

うーーーん、だめか。で、ネットで調べるとforce installせよとのことだったので、

cpan> force install IO::Socket::SSL
Running install for module IO::Socket::SSL
Running make for S/SU/SULLR/IO-Socket-SSL-1.33.tar.gz
CPAN: Digest::MD5 loaded ok
Checksum for /root/.cpan/sources/authors/id/S/SU/SULLR/IO-Socket-SSL-1.33.tar.gz ok
Scanning cache /root/.cpan/build for sizes
IO-Socket-SSL-1.33/
IO-Socket-SSL-1.33/util/
IO-Socket-SSL-1.33/util/export_certs.pl
IO-Socket-SSL-1.33/BUGS
IO-Socket-SSL-1.33/certs/
IO-Socket-SSL-1.33/certs/test-ca.pem
IO-Socket-SSL-1.33/certs/client-key.pem
IO-Socket-SSL-1.33/certs/server-key.pem
IO-Socket-SSL-1.33/certs/client-key.enc
IO-Socket-SSL-1.33/certs/server-rsa384-dh.pem
IO-Socket-SSL-1.33/certs/server-key.enc
IO-Socket-SSL-1.33/certs/server-cert.pem
IO-Socket-SSL-1.33/certs/my-ca.pem
IO-Socket-SSL-1.33/certs/client-cert.pem
IO-Socket-SSL-1.33/certs/server-wildcard.pem
IO-Socket-SSL-1.33/example/
IO-Socket-SSL-1.33/example/lwp-with-verifycn.pl
IO-Socket-SSL-1.33/example/ssl_client.pl
IO-Socket-SSL-1.33/example/ssl_server.pl
IO-Socket-SSL-1.33/example/async_https_server.pl
IO-Socket-SSL-1.33/META.yml
IO-Socket-SSL-1.33/MANIFEST
IO-Socket-SSL-1.33/t/
IO-Socket-SSL-1.33/t/02settings.t
IO-Socket-SSL-1.33/t/acceptSSL-timeout.t
IO-Socket-SSL-1.33/t/core.t
IO-Socket-SSL-1.33/t/readline.t
IO-Socket-SSL-1.33/t/nonblock.t
IO-Socket-SSL-1.33/t/sessions.t
IO-Socket-SSL-1.33/t/ssl_settings.req
IO-Socket-SSL-1.33/t/inet6.t
IO-Socket-SSL-1.33/t/01loadmodule.t
IO-Socket-SSL-1.33/t/cert_no_file.t
IO-Socket-SSL-1.33/t/compatibility.t
IO-Socket-SSL-1.33/t/dhe.t
IO-Socket-SSL-1.33/t/verify_hostname.t
IO-Socket-SSL-1.33/t/start-stopssl.t
IO-Socket-SSL-1.33/t/connectSSL-timeout.t
IO-Socket-SSL-1.33/t/startssl.t
IO-Socket-SSL-1.33/t/auto_verify_hostname.t
IO-Socket-SSL-1.33/t/testlib.pl
IO-Socket-SSL-1.33/t/sysread_write.t
IO-Socket-SSL-1.33/t/memleak_bad_handshake.t
IO-Socket-SSL-1.33/docs/
IO-Socket-SSL-1.33/docs/debugging.txt
IO-Socket-SSL-1.33/README
IO-Socket-SSL-1.33/SSL.pm
IO-Socket-SSL-1.33/README.Win32
IO-Socket-SSL-1.33/Makefile.PL
IO-Socket-SSL-1.33/Changes
IO-Socket-SSL-1.33/patches/
IO-Socket-SSL-1.33/patches/Net_SSLeay.patch

おお、進んでる進んでる、と思ったのもつかの間

CPAN.pm: Going to build S/SU/SULLR/IO-Socket-SSL-1.33.tar.gz

You need the XS Version of Scalar::Util for dualvar() support at Makefile.PL line 56.
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install

ん? インストールできなかったなぁ。Scalar::Utilで何か問題が起きているみたいです。もしかしたら、こいつもバージョンがおかしいのかなと思い、

cpan> force install Scalar::Util
Running install for module Scalar::Util
Running make for G/GB/GBARR/Scalar-List-Utils-1.23.tar.gz
Checksum for /root/.cpan/sources/authors/id/G/GB/GBARR/Scalar-List-Utils-1.23.tar.gz ok
Scalar-List-Utils-1.23/
Scalar-List-Utils-1.23/Changes
Scalar-List-Utils-1.23/lib/

[中略]

/usr/bin/make test -- OK
Running make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/auto/List/Util/Util.so
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod
/usr/bin/make install -- OK

おお、インストールできた。それでは、IO::Socket::SSLをバージョンアップしようと思ったのですが、実はここで問題は解決したような気がします。もしかしたら、IO::Socket::SSLもバージョンアップインストールしたかもしれませんが(肝心なところがうろ覚え)。

 というわけで、結果的にCentOSのyum updateでperl本体がバージョンアップされて、その結果Scalar::Utilのバージョンがおかしくなった(もしくは、アンインストールされてしまった)ことが、MailPackが動作しなくなった原因のようです。やれやれ。

 どうでもいいんだけど、MailPackを出してるスカイアークシステムのサポートはダメダメだったなぁ。問い合わせしたんだけど、まともに検証したとは思えない返事が返ってきた、、、。有料アプリだったら、このくらい自社で検証して調べてみてもいいのに、、、。CentOSで発生したと言うことは、RHELでも発生してるかもしれないね、使ってないから知らないけどぉ。