Cyrus IMAPのアップグレードに失敗

またしてもCyrus IMAPのアップグレード時に、片方のサーバでだけコンパイルに失敗した。前回はPerlのバージョンを一時的に下げてIMAPdを入れ、その後またPerlのバージョンを戻すという一時しのぎで入れたけれども、今回は原因を調べてみた。

ビルドの比較

ビルドログの比較

失敗するサーバのエラー箇所。

コンパイルが通る方の同じ個所のログ。

IMAP.cのコンパイルエラーで止まっていることがわかった。

コンパイルオプションの比較

よく見ると、コンパイルが通る方と通らない方ではコンパイルオプションが微妙に違う。コンパイルに失敗する行の出力をスペース位置ですべて改行して比較してみる。

まずは、失敗する方。

次に成功する方。

diffをとってみる。

コンパイルが通らない方には、デバッグオプションがついていた。

環境の比較

ひとつずつ違いを調べてみる。

cyrus-imapd24のコンフィグ比較

両方のサーバでcyrus-imapd24のコンフィグを比較してみる。

→ 同じだった。

依存パッケージの比較

依存しているパッケージに違いがないか比較してみる。

→ インストールされているバージョン以外は違いなし。

依存パッケージのコンフィグ比較

次のパッケージについて、コンフィグを比較してみる。

  • databases/db41
  • devel/pcre
  • lang/perl5.20
  • ports-mgmt/pkg
  • security/cyrus-sasl2

→ lang/perl5.20のコンフィグに違いがあった。コンパイルに通らない方は、DEBUGがOnになっていた。他は全部一緒。

対処

Perlの再インストール

コンフィグを変更し、DEBUGをOffにしてPerlを再インストールしてみた。

cyrus-imapd24のアップグレード

Perlの再インストール後に、Cyrus IMAPdを再度アップグレードしてみる。

→ 無事にアップグレード完了。

結論

Cyrus IMAPd 2.4をインストールする場合、PerlがデバッグオプションつきでコンパイルしてあるとIMAPdのビルドに失敗する。したがって、デバッグオプションをはずしてPerlをインストールし直せば良い。

前回、Perlのバージョンを下げてからIMAPdをビルドしたら通ったのは、バージョンを下げたときにデバッグオプションをつけなかったせい。

そもそもデバッグオプションをつける必要もなかったはずなのだけど、デバッガが使えるようになるオプションかと勘違いしてサブサーバのみDEBUGをOnにしていたみたい。それでビルドに失敗するのはCyrus IMAPdのバグだとは思うけども、実際問題Perlのデバッグオプションが必要になることはないはずなので、これで解決としよう。