我が家の IMAP/POP サーバーとして長く使っている CentOS 5.x 標準の Dovecot は、バージョンが 1.0.x と、けっこう古い。まァこれは CentOS と言うディストリビューションの性質上やむを得ない部分ではあるが、(基本的に) 安定&安心の旧バージョンを長期に渡って使い続けていることの弊害として、最新情報に疎くなりがちな点が挙げられると思う。CentOS のパッケージがデフォルトだと思っていると、いつの間にか世間 (積極的に新バージョンを取り込むディストリビューション) では一気にバージョンが進んでいて慌てふためく、と言うこともある (Ubuntu ほぼ初体験の 10.04 で bash が 4.0 になっていて、それまでに書いたシェル・スクリプト中で使っていた配列の各要素に対する for ループが動かなかったのは焦った。 ※ 01/27 追記: 原因は bash のバージョンではなく、/bin/sh のリンク先の違いであることが判明)。

Dovecot もよくある例の一つで、1.0.x から 1.1.x、1.2.x と変遷を経て、最新の 2.0.x では設定ファイルの書式が変わり、旧設定ファイルはそのまま流用できない。そこでいきなり最新バージョンを触ることになっても落ち着いて対処できるように、気分転換と社会勉強を兼ねて、Dovecot を 2.0.x に入れ替えてみた。

Dovecot の公式サイトで公開されている現時点の最新版ソースは 2.0.8 だが、1つ前の 2.0.7 のバイナリが別サイトの ATrpms で公開され、リンクが張られている。我が家では一部例外があるものの、運用方針は 「なるべくパッケージで解決」 なので、この RPM を使うことにした。

まずは既存の Dovecot をアンインストールし、2.0.7 を改めてインストールする。僕の環境では (PostgreSQL ライブラリに含まれる) libpq.so.5 がないと言う依存関係の不整合を解決するため、既存の postgresql-libs を postgresql84-libs に入れ替えた。

・既存 Dovecot のバージョンを確認
# rpm -q dovecot
dovecot-1.0.12-1.el5.rf

・"libpq.so.*" の存在を確認
# find /usr/ -name "libpq.so.*" | sort | xargs ls -l
lrwxrwxrwx 1 root root     12 Oct 12 23:05 /usr/lib/libpq.so.4 -> libpq.so.4.1
-rwxr-xr-x 1 root root 131864 Oct 11 23:42 /usr/lib/libpq.so.4.1

・既存 postgresql-libs のバージョンを確認
# rpm -qa | grep postgresql | sort
postgresql-libs-8.1.21-1.el5_5.1

・旧バージョンをアンインストール
# yum remove dovecot postgresql-libs

・postgresql84-libs をインストール
# yum install postgresql84-libs

・"libpq.so.5" の存在を確認
# find /usr/ -name "libpq.so.*" | sort | xargs ls -l
lrwxrwxrwx 1 root root     12 Dec  5 09:53 /usr/lib/libpq.so.5 -> libpq.so.5.2
-rwxr-xr-x 1 root root 145328 Oct  6 20:57 /usr/lib/libpq.so.5.2

・Dovecot をインストール
# rpm -ivh dovecot-2.0.7-1_123.el5.i386.rpm

・Dovecot のバージョンを確認
# rpm -q dovecot
dovecot-2.0.7-1_123.el5

次に Dovecot 2.0.x 用の設定ファイルを準備するのだが、ありがたいことに設定移行を容易に行うための手段が用意されており、あっさり片付く。

・デフォルトの設定ファイルを残しておく
# cd /etc/dovecot/
# cp -a dovecot.conf dovecot.conf.org

・旧設定ファイルから、2.0.x 用の設定ファイルを生成
# doveconf -n -c /etc/dovecot.conf.rpmsave > dovecot.conf

・Dovecot を起動
# /etc/init.d/dovecot start

doveconf で -c と共に指定する移行元のファイルは、yum で Dovecot アンインストール後に残された旧設定ファイルを使った。また -n はデフォルト値と異なる部分のみ抽出するオプションだが、敢えて全ての設定値を確認したい場合は、-n なしで実行する。

僕の環境では認証その他で LDAP を使っていて、LDAP 用の設定ファイル (passdb と userdb の args で指定) はほぼそのまま流用できたが、2箇所だけ 「そんな設定項目はもうねーよ」 と言った趣旨のエラーで Dovecot が起動しなかったので、該当箇所を無効化する必要があった (※ 1.1.x で廃止された模様)。

・LDAP 用設定ファイル中で、廃止された設定項目をコメント・アウトまたは削除
#user_global_uid = xxx
#user_global_gid = xxx

あとはこの非標準パッケージが yum で勝手に更新されないよう、exclude しておく。

・yum で除外リストに追加
# vi /etc/yum.conf
  :
exclude=dovecot-*
  :

ひとまずこれで、Dovecot の入れ替えが完了。doveconf で生成した設定ファイルは 1つにまとまっているが、本来は用途ごとに細かくファイルを分けるのが 「2.0.x 流」 のようなので、気が向いたときにでも分割してみるか。

Dovecot でメールの振り分けを実現する Dovecot Sieve も、使いどころによっては面白いかもしれない。個人的には、メールはまず 「受信箱 (受信トレイ、INBOX etc...)」 に届き、目視で存在と重要度を認識してから任意のフォルダーに振り分け、と言うのが IMAP サーバーのあるべき挙動と考えていることから、これまでずっとメールのフィルタリングは MUA で実施し、MDA はノータッチと言うスタンスを貫いて来た。目視確認の前にいきなりメールを振り分けられてしまうと、他の未読メールに埋もれて、存在に気付かないことがあるためだ。とは言え別件で必要になる可能性はあるので、選択肢の一つとして覚えておこう。

Comments are closed.