メールサーバ構築その3(Postfix編)

2013.06.15 Author: 443

どうもです。443 です。

**独り事**
カナダGP終わりました。フェルナンド アロンソの復調です。
モナコGPでは、セルジオ ペレス、エイドリアン スーティルに抜かれる場面が見られましたが、
今回は、6番グリッドにもかかわらず、
バルテリ ボッタス、ニコ ロズベルグ、ルイス ハミルトン、マーク ウェバー4人を抜き去り、2位獲得。
これでこそNo1ドライバーですね。
**独り事**

さて、今回は、Postfix2.9系のインストールを行いたいと思います。

■ Postfixについて
Unix系のOSにて動作する、SMTPサーバです。
以下のURLが本家になります。
http://www.postfix.org/

■ 作業内容

1. VDAパッチ適用
postfixでは、バーチャルドメイン(※複数ドメインのメール受信)環境にて、
Maildir形式のメールボックスを使用する際に、Quotaがかからない問題がある。
この問題を解決するパッチを適用する。
以下のURLがVDAパッチの本家です。
http://vda.sourceforge.net/

2. sleepパッチの適用
Postfixでtarpittingを適用する際には、SMTP送信側からPostfixの待機に待てず、
強制的に通信を切断されることがあります。
この際に、Postfix側にてセッションが即時切れないと、
不要なセッションがたくさんたまることになる。
このパッチはセッションを即時に切断できるようにするパッチです。
以下のURLがsleepパッチの本家です。
http://k2net.hakuba.jp/

3. MySQL SSL SMTP_AUTH対応
以前、(postfix-2.9.6に、VDAパッチ適用)と同様に、
SMTP_AUTH, MySQL SSLを組み込みます

■ postfix コンパイル環境をインストールする

# yum install mysql-devel wget patch gcc make db4-devel cyrus-sasl-devel rpm-build yum-utils

■ postfixのパッケージをダウンロードする

# yumdownloader postifx

■ specファイル作成のために、baseリポジトリのパッケージから情報を入手する

# rpm -qp --scripts postfix-2.6.6-2.2.el6_1.x86_64.rpm
preinstall scriptlet (using /bin/sh):
# Add user and groups if necessary
/usr/sbin/groupadd -g 90 -r postdrop 2>/dev/null
/usr/sbin/groupadd -g 89 -r postfix 2>/dev/null
/usr/sbin/groupadd -g 12 -r mail 2>/dev/null
/usr/sbin/useradd -d /var/spool/postfix -s /sbin/nologin -g postfix -G mail -M -r -u 89 postfix 2>/dev/null
exit 0
postinstall scriptlet (using /bin/sh):
/sbin/chkconfig --add postfix

# upgrade configuration files if necessary
/usr/sbin/postfix set-permissions upgrade-configuration \
config_directory=/etc/postfix \
daemon_directory=/usr/libexec/postfix \
command_directory=/usr/sbin \
mail_owner=postfix \
setgid_group=postdrop \
manpage_directory=/usr/share/man \
sample_directory=/usr/share/doc/postfix-2.6.6/samples \
readme_directory=/usr/share/doc/postfix-2.6.6/README_FILES &> /dev/null

/usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/sendmail.postfix 30 \
--slave /usr/bin/mailq mta-mailq /usr/bin/mailq.postfix \
--slave /usr/bin/newaliases mta-newaliases /usr/bin/newaliases.postfix \
--slave /etc/pam.d/smtp mta-pam /etc/pam.d/smtp.postfix \
--slave /usr/bin/rmail mta-rmail /usr/bin/rmail.postfix \
--slave /usr/lib/sendmail mta-sendmail /usr/lib/sendmail.postfix \
--slave /usr/share/man/man1/mailq.1.gz mta-mailqman /usr/share/man/man1/mailq.postfix.1.gz \
--slave /usr/share/man/man1/newaliases.1.gz mta-newaliasesman /usr/share/man/man1/newaliases.postfix.1.gz \
--slave /usr/share/man/man8/sendmail.8.gz mta-sendmailman /usr/share/man/man1/sendmail.postfix.1.gz \
--slave /usr/share/man/man5/aliases.5.gz mta-aliasesman /usr/share/man/man5/aliases.postfix.5.gz \
--initscript postfix

# Move sasl config to new location
if [ -f /usr/lib64/sasl2/smtpd.conf ]; then
mv -f /usr/lib64/sasl2/smtpd.conf /etc/sasl2/smtpd.conf
/sbin/restorecon /etc/sasl2/smtpd.conf 2> /dev/null
fi

exit 0
preuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ]; then
# stop postfix silently, but only if it's running
/sbin/service postfix stop &>/dev/null
/sbin/chkconfig --del postfix
/usr/sbin/alternatives --remove mta /usr/sbin/sendmail.postfix
fi

exit 0
postuninstall scriptlet (using /bin/sh):
if [ "$1" != 0 ]; then
/sbin/service postfix condrestart 2>&1 > /dev/null
fi
exit 0


■ /etc/init.d/postfixを取得する
起動スクリプトを流用するために、
既存のパッケージで使用している起動スクリプトを取っておきます。

# cp /etc/init.d/postfix /etc/init.d/postfix.back

■ 既存のpostfixパッケージを削除する

# yum remove postfix

■ postfix コンパイル環境をインストールする

# yum install mysql-devel wget patch gcc make db4-devel cyrus-sasl-devel rpm-build yum-utils

■ wgetにて、2.9.6をダウンロードする

# cd /root
# wget http://mirror.postfix.jp/postfix-release/official/postfix-2.9.6.tar.gz

■ wget にてVDAパッチをダウンロードする

# wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.6.patch

■ wget にて sleep パッチをダウンロードする

# wget http://k2net.hakuba.jp/pub/postfix-2.9-sleep.patch

■ checkinstallのrpmをインストールする

# rpm -ivh checkinstall-1.6.3.x86_64.rpm

■ gtarにて展開する

# gtar zxf postfix-2.9.6.tar.gz

■ postfix-2.9.6 へ移動する

# cd postfix-2.9.6

■ VDAパッチを適用する (Postfixにmailbox/maildir形式でのquotaをサポートさせるパッチ)

# patch -p1 < ../postfix-vda-v11-2.9.6.patch
patching file README_FILES/VDA_README
patching file src/global/mail_params.h
patching file src/util/file_limit.c
patching file src/virtual/mailbox.c
patching file src/virtual/maildir.c
patching file src/virtual/virtual.c
patching file src/virtual/virtual.h

■ sleep パッチを適用する (Postfix で sleep 中に相手が切ったらこっちもすぐsmtpdが切れるパッチ)

# patch -p0 < ../postfix-2.9-sleep.patch
patching file src/smtpd/smtpd_check.c

■ make Makefile.init を実行する

# make Makefile.init makefiles CCARGS='-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -DHAS_MYSQL -DUSE_TLS -I/usr/include/sasl -I/usr/include/mysql' 'AUXLIBS=-L/usr/lib64/mysql -L/usr/lib64/sasl2/lib -lmysqlclient -lz -lm -lssl -lcrypto -lsasl2'

■ makeを実施する

# make

■ インストールディレクトリを作成する

# mkdir /usr/libexec/postfix
# touch /usr/libexec/postfix/postfix-script
# chmod 777 /usr/libexec/postfix/postfix-script
mkdir -p /root/rpmbuild/SOURCES

■ checkinstallを実施する

# checkinstall --install=no --review-spec
Should I create a default set of package docs? [y]:y
Slackware [S], RPM [R] or Debian [D]? R
Please write a description for the package.
End your description with an empty line or EOF.
>>
Enter a number to change any of them or press ENTER to continue:
install_root: [/] /
tempdir: [/root/postfix-2.9.6] /tmp/postfix-2.9.6
config_directory: [/etc/postfix]
command_directory: [/usr/sbin]
daemon_directory: [/usr/libexec/postfix]
data_directory: [/var/lib/postfix]
html_directory: [no]
mail_owner: [postfix]
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/man] /usr/share/man
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path: [/usr/sbin/sendmail]
setgid_group: [postdrop]

Press ENTER to continue.

■ インストールディレクトリを確認する

---以下の行を確認する------------------
BuildRoot: /var/tmp/tmp.8DJ06hLC4L/package
--------------------------------------------

■ 別ウインドウを立ち上げ起動ファイルをコピーする

# mkdir -p /var/tmp/tmp.8DJ06hLC4L/package/etc/rc.d/init.d/
# cp -p /etc/init.d/postfix.back /var/tmp/tmp.8DJ06hLC4L/package/etc/rc.d/init.d/postfix
# mkdir -p /var/tmp/tmp.8DJ06hLC4L/package/var/spool/postfix

■ 前のウィンドウに戻り、viが立ち上がっているのでファイルを編集する

---15-71へ以前パッケージから取得した情報を参考に追加する---------------
%pre
# Add user and groups if necessary
/usr/sbin/groupadd -g 90 -r postdrop 2>/dev/null
/usr/sbin/groupadd -g 89 -r postfix 2>/dev/null
/usr/sbin/groupadd -g 12 -r mail 2>/dev/null
/usr/sbin/useradd -d /var/spool/postfix -s /sbin/nologin -g postfix -G mail -M -r -u 89 postfix 2>/dev/null
exit 0

%post
/sbin/chkconfig --add postfix

# upgrade configuration files if necessary
/usr/sbin/postfix set-permissions upgrade-configuration \
config_directory=/etc/postfix \
daemon_directory=/usr/libexec/postfix \
command_directory=/usr/sbin \
mail_owner=postfix \
setgid_group=postdrop \
manpage_directory=/usr/share/man \
sample_directory=/usr/share/doc/postfix-2.6.6/samples \
readme_directory=/usr/share/doc/postfix-2.6.6/README_FILES &> /dev/null

/usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/sendmail.postfix 30 \
--slave /usr/bin/mailq mta-mailq /usr/bin/mailq.postfix \
--slave /usr/bin/newaliases mta-newaliases /usr/bin/newaliases.postfix \
--slave /etc/pam.d/smtp mta-pam /etc/pam.d/smtp.postfix \
--slave /usr/bin/rmail mta-rmail /usr/bin/rmail.postfix \
--slave /usr/lib/sendmail mta-sendmail /usr/lib/sendmail.postfix \
--slave /usr/share/man/man1/mailq.1.gz mta-mailqman /usr/share/man/man1/mailq.postfix.1.gz \
--slave /usr/share/man/man1/newaliases.1.gz mta-newaliasesman /usr/share/man/man1/newaliases.postfix.1.gz \
--slave /usr/share/man/man8/sendmail.8.gz mta-sendmailman /usr/share/man/man1/sendmail.postfix.1.gz \
--slave /usr/share/man/man5/aliases.5.gz mta-aliasesman /usr/share/man/man5/aliases.postfix.5.gz \
--initscript postfix

# Move sasl config to new location
if [ -f /usr/lib64/sasl2/smtpd.conf ]; then
mv -f /usr/lib64/sasl2/smtpd.conf /etc/sasl2/smtpd.conf
/sbin/restorecon /etc/sasl2/smtpd.conf 2> /dev/null
fi

exit 0

%preun
if [ "$1" = 0 ]; then
# stop postfix silently, but only if it's running
/sbin/service postfix stop &>/dev/null
/sbin/chkconfig --del postfix
/usr/sbin/alternatives --remove mta /usr/sbin/sendmail.postfix
fi

exit 0

%postun
if [ "$1" != 0 ]; then
/sbin/service postfix condrestart 2>&1 > /dev/null
fi
exit 0

----------------------------------------------------------------------------------

--294-295行目に以下を追加する-----------------
"/etc/rc.d/init.d/postfix"
"/var/spool/postfix"
--------------------------------------------


**********************************************************************

Done. The new package has been saved to

/root/rpmbuild/RPMS/x86_64/postfix-2.9.6-1.x86_64.rpm
You can install it in your system anytime using:

rpm -i postfix-2.3.19-1.x86_64.rpm

**********************************************************************

■ インストール時、アンインストール時に実行されるスクリプトを確認

# rpm -qp --scripts /root/rpmbuild/RPMS/x86_64/postfix-2.9.6-1.x86_64.rpm

■ インストールファイルリストを確認する。

# rpm -qpl /root/rpmbuild/RPMS/x86_64/postfix-2.9.6-1.x86_64.rpm

■ ユーザ postfixの削除

# userdel -rf postfix

■ グループ postdropの削除

# groupdel postdrop

■ インストールを実施

# rpm -ivh /root/rpmbuild/RPMS/x86_64/postfix-2.9.6-1.x86_64.rpm

■ インストール確認

# rpm -qa postfix
postfix-2.9.6-1.x86_64

■ etc/yum.confの編集

# vi /etc/yum.conf
---最終行に以下を追加---
exclude=postfix*
------------------------

■ yum update postfix コマンドにて、最新版にアップされないことを確認

# yum update postfix

■ Postfixがmysql対応しているかを調査する

# postconf -m
btree
cidr
environ
fail
hash
internal
memcache
mysql <-存在すればOK
nis
proxy
regexp
static
tcp
texthash
unix

以上でインストール完了しました。
次回は、postfixの設定を行おうかと思います。

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ