Cyrus-IMAPdのバージョンアップ


Cyrus-IMAPdの2.1.18→2.2.12への半手動バージョンアップ手順のまとめ。


プログラムそのものはportsから入れてるので何の不具合も無くアップデートできたが、問題は溜め込んだデータ。手順通りcvt_cyrusdbを使ってデータベース形式の変換をしようとしても、何度やっても


fatal error: can't open old database
のメッセージが出て失敗する。ログには

May 14 10:18:06 goose cvt_cyrusdb[50778]: DBERROR ミ/^G^H: db4

May 14 10:18:06 goose cvt_cyrusdb[50778]: DBERROR: critical database situation

とまぁ、何だか文字化けのようなメッセージしかなく、手詰まりのまま、ここしばらく放っておいたのが実情。ま、バージョンアップしなくてもメールは読めるし。


どうもデータベースになっているのは/var/imap以下の情報(メールボックスや未読情報など)だけで、メールの実体は/var/spool/imap以下にテキスト形式のまま存在するようなので、この際データだけでもレスキューできれば良いや、という発想の元に


/var/imap

/var/spool/imap

をそれぞれリネームして、Cyrus-IMAPd 2.2.12をほぼクリーンな状態から再度インストール。以降は

  1. /usr/local/cyrus/bin/mkimapを実行して、上記2つのディレクトリを作り直し。
  2. cyradmでユーザーのメールボックスを作り直し
  3. クライアント(Thunderbird)から、サーバー上のIMAPフォルダを作成

    (サーバー側で作成すると、何故かThunderbirdで見えない場合があるので)
  4. リネームした旧データフォルダから、それぞれのフォルダにファイルをコピー

    (-pオプションを付けるのを忘れずに)
で、どうにか復旧。


あ、sieveスクリプトも再度uploadしとかないとね。