Fedora Core 4 への Courier-IMAP の導入

訳あって Fedora Core 4 上でメールサーバを構築する必要があったので、Courier-IMAP を導入しました。mizzy.org のサーバでも使っていて慣れているし、今のところトラブルもないので安心して利用できるので。

RPM は嫌いなんですが、Fedora Core を使うのであれば、できる限り RPM で入れた方がいいよな、と思い RPM パッケージを探したのですが、Courier-IMAP のソース(ソース RPM ではない)から RPM パッケージを作成できることが判明。ただ、ソース付属の INSALL 読んだだけですんなりインストールできたわけではないので、ここに導入メモを残しておきます。

expect のインストール

expect に依存してるので、入ってなければインストール。

$ sudo yum install expect

libtool-ltdl-devel のインストール

Courier-IMAP は Courier-Authlib に依存してるのですが、Courier-Authlib の RPM パッケージ作成時に、libtool-ltdl-devel がないと、最後の最後に以下の様なエラーが出ます。

Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/courier-authlib-0.58-1.4-root
error: Installed (but unpackaged) file(s) found:
   /usr/lib/libltdl.a
   /usr/lib/libltdl.la
   /usr/lib/libltdl.so
   /usr/lib/libltdl.so.3
   /usr/lib/libltdl.so.3.1.0

なので、まずは yum で libtool-ltdl-devel をインストール。

$ sudo yum install libtool-ltdl-devel

Courier-Authlib のインストール

ここから Courier-Authlib のソースをダウンロード。展開はせずにそのまま

$ sudo rpmbuild -ta courier-authlib-0.58.tar.bz2

を実行。しばらくビルド作業が続き、以下の様に複数の RPM パッケージを生成して完了。

Wrote: /usr/src/redhat/SRPMS/courier-authlib-0.58-1.4.src.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-devel-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-userdb-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-ldap-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-mysql-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-pgsql-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-pipe-0.58-1.4.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/courier-authlib-debuginfo-0.58-1.4.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.17424
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd courier-authlib-0.58
+ rm -rf /var/tmp/courier-authlib-0.58-1.4-root
+ exit 0

このうち courier-authlib と courier-authlib-devel は必須なのでインストールしておきます。

$ rpm -Uvh /usr/src/redhat/RPMS/i386/courier-authlib-0.58-1.4.i386.rpm
$ rpm -Uvh /usr/src/redhat/RPMS/i386/courier-authlib-devel-0.58-1.4.i386.rpm

後は必要なものを適宜インストール。

gamin-devel のインストール

Courier-IMAP の RPM パッケージを作成しようとすると、

error: Failed build dependencies:
        /usr/include/fam.h is needed by courier-imap-4.1.1-1.4.i386

と怒られるので、このファイルが含まれる gamin-devel をインストールします。

$ sudo yum install gamin-devel

Courier-IMAP のインストール

ソースから Perl を入れている場合には、生成された RPM パッケージをインストールしようとすると、

error: Failed dependencies:
        /usr/local/bin/perl is needed by courier-imap-4.1.1-1.4.i386

と怒られるので、PATH から /usr/local を外しておきます。

$ export PATH=/bin:/usr/bin

で、いよいよ Courier-IMAP の RPM パッケージの作成ですが、

$ sudo rpmbuild -ta courier-imap-4.1.1.tar.bz2

と実行すると、

configure: WARNING: === Do not compile Courier-IMAP as root.  Compile
configure: WARNING: === Courier-IMAP as a non-root user then su to
configure: WARNING: === root before running make install.  You must now
configure: WARNING: === remove this entire directory and then extract the
configure: WARNING: === source code from the tarball as a non-root user
configure: WARNING: === and rerun the configure script.  If you have read
configure: WARNING: === the INSTALL file you should have known this.  So
configure: WARNING: === you better read INSTALL again.
configure: error: aborted.
error: Bad exit status from /var/tmp/rpm-tmp.46388 (%prep)

と怒られるので sudo を外すと、

$ rpmbuild -ta courier-imap-4.1.1.tar.bz2
error: Failed to rename /usr/src/redhat/SPECS/rpm-spec.oF7pub to /usr/src/redhat/SPECS/rpm-spec.oF7pub: Permission denied: No such file or directory

と怒られる。

http://www.courier-mta.org/?FAQ.html~rpm に対処方法が書いてあるので、これにしたがって non-root ユーザで以下の様に実行。

$ mkdir $HOME/rpm
$ mkdir $HOME/rpm/SOURCES
$ mkdir $HOME/rpm/SPECS
$ mkdir $HOME/rpm/BUILD
$ mkdir $HOME/rpm/SRPMS
$ mkdir $HOME/rpm/RPMS
$ mkdir $HOME/rpm/RPMS/i386
echo "%_topdir    $HOME/rpm" >> $HOME/.rpmmacros
rpmbuild -ta courier-imap-4.1.1.tar.bz2

RPM パッケージが生成されるので、インストール。

$ sudo rpm -Uvh /home/miya/rpm/RPMS/i386/courier-imap-4.1.1-1.4.i386.rpm

ここまでやって、よし、設定して起動するか、と思ったところで、Dovecot が既にインストールされていて起動していることに気づいた…せっかく Courier 入れたけど、Dovecot 使ったことないので、いい機会なのでこっちを使うことにした。