qmail+vpopmail環境にPostfixを導入する(その2)

前回までで、taRgrey対応のpostgreyを導入できましたので、引き続きPostfixを導入します。Postfixには、tarpitting時に相手から切断があった場合、SMTPプロセスを終了するパッチ(postfix-sleep.patch)を導入します。また、最近のRedHat系では、Linux-Alternativeを利用してメールサーバを切り替えられるようになっており、これにも対応したいので、SRPMをとってきてspecファイルを改造することにします。

まず、CentOSのページからSRPMファイルを取得して展開します。

[hatena@hatena hatena]$ wget -q http://ftp.jaist.ac.jp/pub/Linux/CentOS/4.6/os/SRPMS/postfix-2.2.10-1.1.el4.src.rpm
[hatena@hatena hatena]$ su
Password:
[hatena@hatena hatena]# rpm -Uvh postfix-2.2.10-1.1.el4.src.rpm

/usr/src/redhat/ 以下にファイルが展開されますので、specファイルを編集し、最新版に対応します。現時点での最新版は、2.4.7(2.5.0もありますが、リリースノートを見る限り、結構修正してる頻度が高いので、2.4系を利用することにします。)ソースをチラッと見たところ、postfix-hostname-fqdn.patchは不要になったようですので、specファイルのパッチからはずし、末尾にpostfix-sleep.patchを追加します。あと、2.2からbounce.cf.defaultが増えているようで、rpmbuildすると「生成済みなのにパッケージされてないファイルがあるぜ!」と怒られるので、%filesのセクション以下に追加します。また、私の環境ではPCREは不要ですので、使わないようにします。
(vpopmailが入っているので、ユーザーID/グループIDに89は使っています。以下ではとりあえず空いてるIDを指定しました。)

以下、specファイルのdiff(manファイルの修正用パッチ作成に伴い修正)

--- postfix.spec.original       2008-02-18 07:30:22.000000000 +0900
+++ postfix.spec        2008-02-18 07:16:30.000000000 +0900
@@ -1,6 +1,6 @@
 %define LDAP 2
 %define MYSQL 0
-%define PCRE 1
+%define PCRE 0
 %define SASL 2
 %define TLS 1
 %define IPV6 1
@@ -24,9 +24,9 @@
 # Postfix requires one exlusive uid/gid and a 2nd exclusive gid for its own
 # use.  Let me know if the second gid collides with another package.
 # Be careful: Redhat's 'mail' user & group isn't unique!
-%define postfix_uid    89
+%define postfix_uid    600
 %define postfix_user   postfix
-%define postfix_gid    89
+%define postfix_gid    600
 %define postfix_group  postfix
 %define postdrop_group postdrop
 %define maildrop_group %{postdrop_group}
@@ -42,8 +42,8 @@
 
 Name: postfix
 Summary: Postfix Mail Transport Agent
-Version: 2.2.10
-Release: 1.1.el4
+Version: 2.4.7
+Release: 1.0.1
 Epoch: 2
 Group: System Environment/Daemons
 URL: http://www.postfix.org
@@ -76,11 +76,13 @@
 
 Patch1: postfix-2.1.1-config.patch
 Patch3: postfix-alternatives.patch
-Patch4: postfix-hostname-fqdn.patch
+# Patch4: postfix-hostname-fqdn.patch
 Patch6: postfix-2.1.1-obsolete.patch
 Patch7: postfix-2.1.5-aliases.patch
 Patch8: postfix-large-fs.patch
 Patch9: postfix-2.2.5-cyrus.patch
+Patch10: postfix-sleep.patch
+Patch11: postfix-alternateman.patch
 
 # Optional patches - set the appropriate environment variables to include
 #                    them when building the package/spec file
@@ -131,11 +133,13 @@
 # Apply obligatory patches
 %patch1 -p1 -b .config
 %patch3 -p1 -b .alternatives
-%patch4 -p1 -b .postfix-hostname-fqdn
+# %patch4 -p1 -b .postfix-hostname-fqdn
 %patch6 -p1 -b .obsolete
 %patch7 -p1 -b .aliases
 %patch8 -p1 -b .large-fs
 %patch9 -p1 -b .cyrus
+%patch10 -p1 -b .sleep
+%patch11 -p1 -b .alternateman
 
 %if %{PFLOGSUMM}
 gzip -dc %{SOURCE53} | tar xf -
@@ -443,6 +447,7 @@
 %attr(0755, root, root) %{postfix_command_dir}/postsuper
 %attr(0644, root, root) %{postfix_config_dir}/LICENSE
 %attr(0644, root, root) %config(noreplace) %{postfix_config_dir}/access
+%attr(0644, root, root) %config(noreplace) %{postfix_config_dir}/bounce.cf.default
 %attr(0644, root, root) %config(noreplace) %{postfix_config_dir}/canonical
 %attr(0644, root, root) %config(noreplace) %{postfix_config_dir}/generic
 %attr(0644, root, root) %config(noreplace) %{postfix_config_dir}/header_checks

postfix-2.4.7.tar.gzとpostfix-sleep.patchを/usr/src/redhat/SOURCESディレクトリにコピーし、specファイルからRPMをビルドします。

[hatena@hatena hatena]# rpmbuild -ba /usr/src/redhat/SPECS/postfix.spec

うまくいけば、つらつらとメッセージが出た後で、RPMSRPMが生成された、という感じで出てくると思いますので、こいつらをインストールすれば、Postfixのインストールは完了です。(必要なのは本体と、オプションでpflogsumだけと思います。普通は。)

※と思ったけど、man mailqでうまく参照ができてないみたいなので、ちょっとした修正が必要っぽいです。

08/2/18追記
manファイル用のパッチ。(postfix-alternateman.patch)

--- postfix-2.4.7/man/man1/mailq.1.original     2005-02-05 08:50:55.000000000 +0900
+++ postfix-2.4.7/man/man1/mailq.1      2008-02-18 07:11:49.000000000 +0900
@@ -1 +1 @@
-.so man1/sendmail.1
+.so man1/sendmail.postfix.1

こいつを作成して、SOURCEディレクトリに放り込んでから、上のspecファイルでrpmビルドするといい感じです。