Linux Server

メールサーバ構築(qmail)

  

ご注意下さい

この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。

0
(0)

qmailの構築。MTA(Message Transfer Agent)にはsendmail やpostfix等あるけど、昔から使用しているqmailをとりあえずインストール。最終的にはpostfixにする予定。
昔むかーしのインストール方法なんでちょっと古いかも。

事前準備

・qmailユーザ/グループの追加

[root@www2 /]# groupadd qmail
[root@www2 /]# groupadd nofiles
[root@www2 /]# useradd -d /var/qmail -g nofiles -s /bin/false qmaild
[root@www2 /]# useradd -d /var/qmail -g nofiles -s /bin/false qmaill
[root@www2 /]# useradd -d /var/qmail -g nofiles -s /bin/false qmailp
[root@www2 /]# useradd -d /var/qmail/alias -g nofiles -s /bin/false alias
[root@www2 /]# useradd -d /var/qmail -g qmail -s /bin/false qmailq
[root@www2 /]# useradd -d /var/qmail -g qmail -s /bin/ture qmailr
[root@www2 /]# useradd -d /var/qmail -g qmail -s /bin/false qmails

・/var/qmailディレクトリの作成

[root@www2 /]# mkdir /var/qmail
[root@www2 /]# chown root:qmail /var/qmail

qmailのコンパイル
本体: qmail-1.03.tar.gz
パッチを2本ダウンロードしてきましょう。
ローカルタイム表示: qmail-date-localtime.patch
qmail-smtpdが\nで終了する行を受け付けるパッチ: qmail-smtpd-newline.patch

・パッチ適用

[root@www2 qmail]# pwd
/usr/local/src/qmail/
[root@www2 qmail]# ls
qmail-1.03.tar.gz qmail-date-localtime.patch qmail-smtpd-newline.patch
[root@www2 qmail]# tar zxf qmail-1.03.tar.gz
[root@www2 qmail]# cd qmail-1.03
[root@www2 qmail-1.03]# patch < ../qmail-date-localtime.patch
patching file date822fmt.c
[root@www2 qmail-1.03]# patch < ../qmail-smtpd-newline.patch
patching file qmail-smtpd.c
[root@www2 qmail-1.03]#

・コンパイル

[root@www2 qmail-1.03]# make setup check

ですんなり完了のはずが…。

./compile auto-str.c
auto-str.c:9: 警告: conflicting types for built-in function `puts'
auto-str.c: 関数 `main' 内:
auto-str.c:17: 警告: `main' の戻り値の型が `int' ではありません
./load auto-str substdio.a error.a str.a
substdio.a(substdo.o)(.text+0x43): In function `allwrite':
: undefined reference to `errno'
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

となってうまくいかない…。mainの戻り値がintではない。か…。
とりあえず、auto-str.c の
void main(argc,argv)

int main(argc,argv)
に変更してみるもダメ。

[root@www2 qmail-1.03]# make setup check
./load auto-str substdio.a error.a str.a
substdio.a(substdo.o)(.text+0x43): In function `allwrite':
: undefined reference to `errno'
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

いろいろ調べてみたところ、

glibc-2.3 になっており、errno の扱いが変更されている(?)ようです
http://www.lifewithqmail.com/lwq.html#patches

にパッチあり

とあったので早速、qmail-1.03.errno.patchをダウンロードして適用。

[root@www2 qmail-1.03]# patch < ../qmail-1.03.errno.patch
patching file cdb_seek.c
patching file dns.c
patching file error.3
patching file error.h
[root@www2 qmail-1.03]#

再度、make。

[root@www2 qmail-1.03]# make clean
[root@www2 qmail-1.03]# make setup check

相変わらず以下のように警告は出るけど、とりあえずコンパイルできたのでOK。

qmail-clean.c: 関数 `main' 内:
qmail-clean.c:53: 警告: `main' の戻り値の型が `int' ではありません

とりあえずの初期設定をして終わり。

[root@www2 qmail-1.03]# ./config-fast www.kamata-net.com
Your fully qualified host name is www.kamata-net.com.
Putting www.kamata-net.com into control/me...
Putting kamata-net.com into control/defaultdomain...
Putting kamata-net.com into control/plusdomain...
Putting www.kamata-net.com into control/locals...
Putting www.kamata-net.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to www.kamata-net.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

tcpserverのインストール
qmailではデフォルトではrelayしないので、外部へのメールをrelayさせたい時に必要となる。
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz にブツあり。
あとはhttp://www.qmail.org/rpms/glibc-2.3.1/よりucspi関連のパッチをダウンロードして適用。

cspi-tcp-0.88.a_record.patch
ucspi-tcp-0.88.errno.patch
ucspi-tcp-0.88.nobase.patch

解凍してmake setup checkでOK。

tcpserverの設定

・relayを許可するホストのデータベースtcp.smtp.cdbを作成

[root@www2 etc]# mkdir /etc/tcpserver
[root@www2 etc]# cd /etc/tcpserver
[root@www2 tcpserver]# cat tcp.smtp
192.168.:allow,RELAYCLIENT=""
127.0.0.1:allow,RELAYCLIENT=""
[root@www2 tcpserver]# /usr/local/bin/tcprules ./tcp.smtp.cdb ./tcp.smtp.tmp < ./tcp.smtp
[root@www2 tcpserver]#

qmailの起動

・rcスクリプト
/var/qmail/boot/homeを/var/qmail/rcとしてコピー

・/etc/rc.d/init.d/qmailを以下の通り作成

#!/bin/sh
#
# qmail: /var/qmail
# chkconfig: 2345 80 30
# description: Qmail is a Mail Transport Agent, which is the program \
# that moves mail from one machine to another.
# processname: qmail
# pidfile: /var/run/qmail
#
# Source function library.
. /etc/rc.d/init.d/functions

prog="qmail"

PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

case "$1" in
start)
# Start daemons.
echo "Starting qmail."
csh -cf '/var/qmail/rc &'
tcpserver -v -u [qmaildのUID] -g [nofilesのGID] -x /etc/tcpserver/tcp.smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
echo
touch /var/run/qmail
;;
stop)
# Stop daemons.
echo "Shutting down qmail."
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
echo
rm -f /var/run/qmail
;;
*)
echo "Usage: S99qmail {start|stop}"
exit 1
esac

exit 0

・ntsysvへ登録

[root@www2 init.d]# chkconfig --add qmail
[root@www2 init.d]# ntsysv

でスタートアップに登録されたかを確認。

・起動
[root@www2 init.d]# service qmail start

その他

・CGIからsendmailを呼び出したりしているので、qmailへ変更

[root@www2 /]# cd /usr/sbin
[root@www2 sbin]# mv sendmail sendmail.bak
[root@www2 sbin]# ln -s /var/qmail/bin/sendmail .

あとは@ITのここに事細かに記載があるのでそこ見てください。

この記事は役に立ちましたか? | Is this article useful for you?

評価をお願いします | Please leave your rating.

平均 | Av.: 0 / 5. 投票数 | Votes: 0

最初の評価を下さい | Please vote for the first rating.

-Linux Server
-,

© 1999 - 2021 蒲田ネット