Postfix (Mail transfer agent)

[ 戻る | トップページに戻る ]

概要

Postfix とは、Sendmail との高い互換性を持つ MTA 。

URL

http://www.postfix.org/

インストール環境

Plamo Linux 2.2.1 (Kernel 2.2.19 + glibc 2.2)

必要なもの

PCRE 2.8 or 3.7 (Option), OpenLDAP (Option)

バージョン

1.1.11, 1.1.12, 2.1.3

インストール手順 (for 1.1.11)

$ tar xvfz postfix-1.1.11.tar.gz
$ cd postfix-1.1.11
$ make -f Makefile.init makefiles \
       CCARGS="-DHAS_PCRE -DHAS_LDAP -I/usr/local/include" \
       AUXLIBS="-L/usr/local/lib -lpcre -lldap -llber"
$ make

インストール前に postfix ユーザおよびグループを作成しておく。
$ su
# groupadd -g 80 postfix
# groupadd -g 81 postdrop
# useradd -s /bin/false -d /var/spool/postfix -u 80 -g postfix \
          -c 'Postfix pseudo-user' postfix

最後にインストール。 途中、いくつか質問されるのでデフォルトから変更する部分のみ以下に示す。
# ldconfig
# make install
(snip)
Please specify the destination directory for installed Postfix daemon
programs. This directory should not be in the command search path of
any users.
daemon_directory: [/usr/libexec/postfix] /usr/local/postfix

Please specify the destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of adminstrative users.
command_directory: [/usr/sbin] /usr/local/postfix
(snip)
Please specify the full destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/sbin/sendmail] /usr/local/postfix/sendmail

Please specify the full destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases] /usr/local/postfix/newaliases

Please specify the full destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/bin/mailq] /usr/local/postfix/mailq
# cd /usr/sbin
# mv sendmail sendmail.org
# ln -s /usr/local/postfix/sendmail sendmail
# cd /usr/bin
# mv mailq mailq.org
# ln -s /usr/local/postfix/mailq mailq
# mv newaliases newaliases.org
# ln -s /usr/local/postfix/newaliases newaliases
# exit
$ make clean

最後に設定。 /etc/postfix/main.cf を適宜設定し、 /usr/local/postfix/postfix start すればおしまい。

インストール手順 (for 1.1.12 + Berkeley DB 4.1 + OpenLDAP 2.1.17)

$ tar xvfz postfix-1.1.12.tar.gz
$ cd postfix-1.1.12
$ make -f Makefile.init makefiles \
       CCARGS="-DHAS_PCRE -DHAS_LDAP -I/usr/local/include" \
       AUXLIBS="-L/usr/local/lib -lpcre -lldap -llber"
(snip)
[src/util]
(set -e; echo "# DO NOT EDIT";  /bin/sh ../../makedefs && cat Makefile.in) >Makefile
No  include file found.
Install the appropriate db*-devel package first.
See the RELEASE_NOTES file for more information.
make: *** [Makefile] エラー 1
make: *** [Makefiles] エラー 1
make: *** [makefiles] エラー 2

ふむ。先日 Berkeley DB をアップデートしたためパスが変わっているのが原因らしい。 ではこう。
$ make -f Makefile.init makefiles \
       CCARGS="-DHAS_PCRE -DHAS_LDAP -I/usr/local/include -I/usr/local/BerkeleyDB.4.1/include" \
                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 追加
       AUXLIBS="-L/usr/local/lib -L/usr/local/BerkeleyDB.4.1/lib -lpcre -lldap -llber"
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 追加

が、現象変わらず。うーむ。おなじような構成で Solaris だと問題ないのにー。 試しに db.h を /usr/include にコピーしてみると OK 。/usr/local/include に コピーした場合は NG 。むう。
./README_FILES/DB_README をよく読むと... あった。下半分に Linux での注意点が書いてある。 しまった。上半分しかちゃんと読んでなかった。(^^;

(./README_FILES/DB_README からの引用)
Building Postfix on Linux with a specific Berkeley DB version
=============================================================

Some Linux systems ship with multiple Berkeley DB implementations.
Normally, Postfix builds with the default DB version that ships
with the system.

On Linux, you need to edit the makedefs script in order to specify
a non-default DB library.

という訳で makedefs を以下のように修正する。
    Linux.2*)   SYSTYPE=LINUX2
                # Postfix no longer needs DB 1.85 compatibility
                if [ -f /usr/include/db.h ]
                then
                    : we are all set
                elif [ -f /usr/include/db/db.h ]
                then
                    CCARGS="$CCARGS -I/usr/include/db"
                elif [ -f /usr/local/BerkeleyDB.4.1/include/db.h ]         <-- 追加
                then                                                       <-- 追加
                    CCARGS="$CCARGS -I/usr/local/BerkeleyDB.4.1/include"   <-- 追加
                else
                    # No, we're not going to try db1 db2 db3 etc.
                    # On a properly installed system, Postfix builds
                    # by including <db.h> and by linking with -ldb
                    echo "No <db.h> include file found." 1>&2
                    echo "Install the appropriate db*-devel package first." 1>&2
                    echo "See the RELEASE_NOTES file for more information." 1>&2
                    exit 1
                fi

では再トライ。
$ make tidy
$ make -f Makefile.init makefiles \
       CCARGS="-DHAS_PCRE -DHAS_LDAP -I/usr/local/include -I/usr/local/BerkeleyDB.4.1/include" \
       AUXLIBS="-L/usr/local/lib -L/usr/local/BerkeleyDB.4.1/lib -lpcre -lldap -llber"
$ make
(snip)
gcc -Wmissing-prototypes -Wformat -DHAS_PCRE -DHAS_LDAP -I/usr/local/include \
    -I/usr/local/BerkeleyDB.4.1/include -I/usr/local/BerkeleyDB.4.1/include -g -O \
    -I. -DLINUX2 -c dict_db.c
dict_db.c: In function `dict_db_open':
dict_db.c:523: warning: passing arg 2 of pointer to function from incompatible pointer type
dict_db.c:523: warning: passing arg 4 of pointer to function makes pointer from integer without a cast
dict_db.c:523: too few arguments to function
make: *** [dict_db.o] エラー 1
make: *** [update] エラー 1

むー。調べてみると、以前インストールされていた Berkeley DB 3.2.9 と 先日インストールした Berkeley DB 4.1.25 では関数定義が異なっている。 ./README_FILES/DB_README を見ても Version 3 までの記述はあるが Version 4 の 記述はない。ひょっとして対応していない!?

探すと Berkeley DB の postfix 対応パッチがあった (ここの 10. 項目目) 。
http://www.sleepycat.com/update/4.1.24/patch.4.1.24.html
が、4.1.25 では適用済み。うーむ。 今回はちょっとソースにパッチをあてる時間はないので、db-3.x を入れ直す。 以下、db-3.x をインストールしてから (/usr/include/db.h, /lib/libdb* ある状態) 。makedefs は特に戻す必要なし。
$ make tidy
$ make -f Makefile.init makefiles \
       CCARGS="-DHAS_PCRE -DHAS_LDAP -I/usr/local/include" \
       AUXLIBS="-L/usr/local/lib -lpcre -lldap -llber"
$ make
gcc -Wmissing-prototypes -Wformat -DHAS_PCRE -DHAS_LDAP -I/usr/local/include -g -O \
    -I. -I../../include -DLINUX2 -o error error.o ../../lib/libmaster.a ../../lib/libglobal.a \
    ../../lib/libutil.a -L/usr/local/lib -lpcre -lldap -llber -ldb -lnsl -lresolv
../../lib/libutil.a(dict_ldap.o): In function `dict_ldap_get_values':
/usr/local/src/postfix-1.1.12/src/util/dict_ldap.c:404: undefined reference to `ldap_url_search_st'
collect2: ld returned 1 exit status
make: *** [error] エラー 1
make: *** [update] エラー 1

むむむ。今度は OpenLDAP かい。先日 OpenLDAP も 2.0.18 から 2.1.17 に入れ直した のだが...。調べてみると、/usr/local/lib/libldap.so.2.0.11 には ldap_url_search_st が含まれるが、/usr/local/lib/libldap.so.2.0.117 (たぶんこれが 2.1.17) には含まれない。

うーん。Google に聞くと、同じような現象の報告はあれど、いずれも解決には 至っていない模様。 とりあえず今のところ LDAP 対応はまだ実験中で必須ではないので外す。(;_;
$ make tidy
$ make -f Makefile.init makefiles \
       CCARGS="-DHAS_PCRE -I/usr/local/include" \
       AUXLIBS="-L/usr/local/lib -lpcre"
$ make
$ su
# make install
# exit

インストール手順 (for 2.1.3)

$ tar xvfz postfix-2.1.3.tar.gz
$ cd postfix-2.1.3
$ make
$ su
# make install
(snip)
postfix: warning: My hostname jevex is not a fully qualified name - set myhostname or mydomain in /etc/postfix/main.cf

ふむ。/etc/hosts にはちゃんと FQDN 指定してあるのだけれど...。

[ 戻る | トップページに戻る ]