IMAP サーバー dovecot 1.2.11 をインストールする

SERVER

qmail の Maildir 形式に対応した IMAP サーバ dovecot 1.2.11 を Linux Slackware 10.2 にインストールしてみることにしました。


dovecot

dovecot は、qmail の Maildir 形式に対応した IMAP サーバです。

これまでは EZ-NET: courier-imap 4.1.2 をインストールする に記したような Courier-IMAP という IMAP サーバーを利用していたのですけど、Linux Slackware 10.2 では新しいバージョンの Courier-IMAP のインストールが容易に行えなかったり、いつの頃からかメールソフトでタイムアウトが頻発するようになったりと、あまり勝手が良くなかったのでした。

特に Microsoft Outlook 2007 を利用していると、メッセージルールで別フォルダーへ移動する際にタイムアウトが起こるとそのメッセージルールが無効化されてしまうので、再度有効化したり、移動できなかった分を再度移動したりするのに、非常に手間がかかっていました。

 

そこで今回、最近よく利用されるようになってきた dovecot という IMAP サーバーを Slackware 10.2 にインストールしてみることにしました。

実際に差し替えが完了してみると、これまで頻繁に起こっていたタイムアウトも起こらなくなり、受信完了やフォルダー内のメールの閲覧や移動・削除処理までもが短い時間で完了するようになってとても快適です。

 

dovecot のインストール

dovecot は http://www.dovecot.org/ にて提供されています。

 ここから、平成 22 年 3 月 19 日の時点で最新である "dovecot 1.2.11" を "/usr/local/src" ディレクトリーにダウンロードします。

cd /usr/local/src

wget http://dovecot.org/releases/1.2/dovecot-1.2.11.tar.gz

ダウンロードが完了したら、次のようにしてアーカイブを展開し、展開されたディレクトリーへ移動します。

tar xvzf dovecot-1.2.11.tar.gz

cd dovecot-1.2.11

そして、まずはコンパイルの準備を行います。

./configure

このようにすることで、環境に合わせた Makefile が生成されます。

これが正しく完了すると、次のような形で詳細情報のレポートが表示されました。

Install prefix . : /usr/local
File offsets ... : 64bit
I/O polling .... : poll
I/O notifys .... : dnotify
SSL ............ : yes (OpenSSL)
GSSAPI ......... : no
passdbs ........ : passwd passwd-file shadow checkpassword
: -pam -bsdauth -sia -ldap -sql -vpopmail
userdbs ........ : static prefetch passwd passwd-file checkpassword nss
: -ldap -sql -vpopmail
SQL drivers .... :
: -pgsql -mysql -sqlite

続いて、コンパイルとインストールを行います。

make

make install

これで、エラーが発生しなければインストールは完了です。

 

あと、dovecot 起動用アカウントが必要になりますので、以下のようにしてアカウントを作成しておきます。

useradd -s /bin/true -d /var/dovecot dovecot

この "dovecot" アカウントを用意しておかないと、dovecot 起動時に "Error: Login user doesn't exist: dovecot" というエラーメッセージが表示されるので注意しましょう。

 

dovecot を設定する

インストールが終わったら、dovecot の設定を行います。

設定ファイルのサンプルが "/usr/local/etc/dovecot-example.conf" として用意されていますので、まずはこれを "dovecot.conf" としてコピーします。

cp -i /usr/local/etc/dovecot-example.conf /usr/local/etc/dovecot.conf

そして、コピーした "dovecot.conf" を編集します。

今回は IMAP サーバーとして dovecot を使用しようと思いますので、次のような設定を有効にする感じになりました。

protocols = imap

mail_location = maildir:~/Maildir

 

ssl = no

disable_plaintext_auth = no

 

passdb shadow {

}

また、今回はとりあえず SSL は使用しないので "ssl = no" の設定もしておくことにします。認証も今はクリアーテキストによる認証以外にはまだ用意していないので "disable_plaintext_auth = no" も設定しました。

認証方式として "passdb pam" が既定で設定されていましたけど、少なくとも自分の Slackware 10.2 では、次のエラーが発生したことが syslog の mail ファシリティーログに記録されていました。

Mar 19 19:53:12 doublenard dovecot: Dovecot v1.2.11 starting up (core dumps disabled)
Mar 19 19:53:12 doublenard dovecot: child 30399 (auth) returned error 89 (Fatal failure)
Mar 19 19:53:12 doublenard dovecot: auth(default): Fatal: Support not compiled in for passdb driver 'pam'
Mar 19 19:53:12 doublenard dovecot: dovecot: Fatal: Auth process died too early - shutting down

どうやら 'pam' モジュールがサポートされていないようで、shadow パスワードによる認証方法に変更することで対応することができるようでした。

 

Courier-IMAP で使用していた Maildir を移行する

今回は Courier-IMAP で使用していた Maildir をそのまま使用しようと思いますが、そのためには少し変換を行う必要があるようです。

変換を行うに当たり、まずは Courier-IMAP を停止します。

/etc/rc.d/rc.imapd stop

停止方法は環境によって異なるかもしれません。

停止方法が分からない場合には "/usr/lib/courier-imap/libexec/imapd.rc stop" や "/usr/lib/courier-imap/libexec/imapd-ssl.rc stop" なども試してみると良いかもしれません。

 

Courier-IMAP を停止したら、Maildir の移行作業を行います。

Maildir 自体はそのままで問題はないのですが、IMAP フォルダー管理のために使用している "courierimapsubscribed" というファイルを "suscriptions" という名前で新たに用意します。このとき、従来の "INBOX." から始まる行の情報から "INBOX." を削除する必要があります。

cd Maildir

sed -e "s/^INBOX.//" courierimapsubscribed > subscriptions

 

chown USERNAME subscriptions

chgrp GROUPNAME subscriptions

このようにして、Maildir フォルダーへ移動して、"courierimapsubscribed" ファイルの内容を変換したものを "subscriptions" ファイルとして格納します。そしてそのファイルの所有者として、ユーザー名 (USERNAME) とグループ名 (GROUPNAME) を設定しています。

これらの操作を、存在する全ての Maildir ディレクトリーに対して行っておきます。

 

dovecot を起動する

起動スクリプトを用意する

dovecot 自体は "daemon /usr/sbin/dovecot" を実行すれば稼働してくれるような感じです。

ただ、起動スクリプトがあった方が管理がしやすいので、まずは次のような起動スクリプトを用意することにします。

#!/bin/bash

prog="Dovecot Imap"
exec="/usr/local/sbin/dovecot"
config="/usr/local/etc/dovecot.conf"
pidfile="/var/run/dovecot.pid"
lockfile="/var/lock/subsys/dovecot"

start()
{
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6

    echo -n $"Starting $prog: "
    $exec $OPTIONS
    echo
}

stop()
{
    echo -n $"Stopping $prog: "
    killall $exec
    echo
}

reload()
{
    echo -n $"Reloading $prog: "
    $exec -HUP
    echo
}


case "$1" in

    start)
        start
        ;;

    stop)
        stop
        ;;

    reload)
        reload
        ;;

    restart)
        stop
        start
        ;;

    *)
        echo $"Usage: $0 {start|stop|restart|reload}"

esac

このようなスクリプトファイルを Linux Slackware の慣習にならって "/etc/rc.d/rc.dovecot" として用意しました。

これに次のようにして実行可能フラグを設定します。

chmod +x /etc/rc.d/rc.dovecot

ここまで出来たら、次のようにして dovecot を起動します。

/etc/rc.d/rc.dovecot start

"Starting Dovecot Imap:" と表示され、特にそれ以外のエラーメッセージが表示されなければ dovecot の起動は成功です。"ps -e" を実行して "dovecot" プロセスが存在するかを確かめることも可能です。

 

これで IMAP でメールを参照することができるようになりました。

後はサーバー起動時にも自動的に dovecot が動作するように、"/etc/rc.d/rc.local" 等に次の内容を追加しておくと良いでしょう。

# Execute dovecot (IMAP)
if [ -x /etc/rc.d/rc.dovecot ]; then

    . /etc/rc.d/rc.dovecot start

fi

 

ちなみに Courier-IMAP を使っていたときにルートフォルダーのパスとして "INBOX" を指定していたりすると、日本語のフォルダー等が見えなくなることがあるようです。

その時は、メールソフトの設定で、ルートフォルダーのパスを何も指定しない状態にすると、全ての IMAP フォルダーを参照することができるようになります。