[Mail]
[转载]Freebsd下Qmail安装
网上有很多freebsd下安装qmail的文章,不过就我看到现在为止这篇是最好的,看过的其他文章都是拼凑而成,很多地方参数不统一,不过这篇文章对于自己安装的时候也有部分不一样,所有用红色注明的/home/目录我安装时都是在/usr/local/下。
文章来源http://www.toping.net/bbs/simple/index.php?t175.html
还有就是文章中说道的打qmail-smtpd-auth-0.31.tar.gz补丁的问题,个人觉得论坛内这个贴子值得一看
http://bbs.chinaunix.net/viewthread.php?tid=68469
ucspi-tcp
cd /usr/ports/sysutils/ucspi-tcp
make install clean
daemontools
cd /usr/ports/sysutils/daemontools
make install clean
mkdir /var/service
chmod 755 /var/service
ee /etc/rc.conf
svscan_enable="YES"
reboot
验证daemontools已经正常运行:
ps ax | grep svscan
cd /usr/ports/mail/qmail
make BARRIER_BIG_TODO_PATCH=yes WITH_QMAILQUEUE_PATCH=yes BARRIER_BIG_CONCURRENCY_PATCH=yes WITH_LOCALTIME_PATCH=yes
WITH_QMTPC_PATCH=yes WITH_MAILDIRQUOTA_PATCH=yes WITH_BLOCKEXEC_PATCH=yes WITH_DISCBOUNCES_PATCH=yes WITH_SPF_PATCH=yes
install clean
/var/qmail/scripts/enable-qmail
cd /var/qmail/configure
./config-fast domail.com
打auth smtp补丁
tar zxvf qmail-1.03.tar.gz
tar zxvf qmail-smtpd-auth-0.31.tar.gz
cp qmail-smtpd-auth-0.31/base64.* qmail-1.03
patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch
cd qmail-1.03
fetch http://gadfly.shanji.com/qmail-smtpd/qmail-smtpd.c
fetch http://gadfly.shanji.com/qmail-smtpd/qmail-smtpd.patch
patch -p1 < ../qmail-103.patch
patch -p1 < ../qmailqueue-patch
patch -p1 < ../qmail-maildir++.patch
patch -p1 < ../patch-qmail-1.03-rfc2821.diff
patch -p1 < ../qmail-block-executables.patch
patch -p1 < ../qmail-discard-double-bounces.patch
patch -p1 < ../sendmail-flagf.patch
patch -p1 < ../qmail-1.03-qmtpc.patch
patch -p1 < ../qmail-date-localtime.patch
patch < qmail-smtpd.patch
ee qmail-smtpd.c
将函数straynewline中的451改为553(// 当你的服务器收到无效格式的邮件时,会发送:"I am not going to accept that message
at the moment,you can try again later",对方服务器收到后,几秒钟后又会发送同样的邮件给你,造成多次的重复。改为553后,你的服务
器将直接发送:"I am not going to accept that message,don't try sending it again.",告诉对方的服务器不要再发这封无效的信件。)
void die_alarm() { out("451 超时. (#4.4.2)\r\n"); flush(); _exit(1); }
void die_nomem() { out("421 内存溢出. (#4.3.0)\r\n"); flush(); _exit(1); }
void die_control() { out("421 无法读取控制文件. (#4.3.0)\r\n"); flush(); _exit(1); }
void die_ipme() { out("421 无法判断发信IP地址. (#4.3.0)\r\n"); flush(); _exit(1); }
void straynewline() { out("451 如有疑问请发邮件到: xiwu518@163.com\r\n"); flush(); _exit(1); }
void err_bmf() { out("553 对不起您的邮件地址在我的黑名单里. (#5.7.1)\r\n"); }
void err_nogateway() { out("553 对不起,您所发送的邮件不在服务器允许的范围内. (#5.7.1)\r\n"); }
void err_unimpl() { out("502 命令执行失败. (#5.5.1)\r\n"); }
void err_syntax() { out("555 语法错误. (#5.5.4)\r\n"); }
out("214 WelCome To: http://www.domail.com\r\n");
out("354 继续.\r\n");
if (databytes) if (!bytestooverflow) { out("552 对不起,邮件大小超出服务器允许接受的范围. (#5.3.4)\r\n"); return; }
make qmail-smtpd
cd /var/qmail/bin
mv qmail-smtpd qmail-smtpd.auth
cd -
cp qmail-smtpd /var/qmail/bin/qmail-smtpd
mkdir /var/log/qmail
cd /var/log/qmail
mkdir qmail-send qmail-smtpd qmail-pop3d
chown -R qmaill:wheel /var/log/qmail
chmod -R 750 /var/log/qmail
mkdir /var/qmail/supervise
cd /var/qmail/supervise
mkdir -p qmail-smtpd/log qmail-send/log qmail-pop3d/log
chmod +t qmail-smtpd qmail-send qmail-pop3d
ln -s /var/qmail/supervise/* /var/service/
maildrop
tar -xjvf maildrop-1.8.1.tar.bz2
cd maildrop-1.8.1
./configure --prefix=/usr/local --exec-prefix=/usr/local --enable-maildrop-uid=root --enable-maildrop-gid=vchkpw
--enable-maildirquota
make
make install-strip
make install-man
qmail启动脚本
ee /var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup domail.com \
/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1
ee /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1
ee /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/usr/local/bin/rblsmtpd \
-r cblplus.anti-spam.org.cn \
-r relays.ordb.org \
/var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /usr/bin/true 2>&1
ee /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1
ee /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc
ee /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1
ee /var/qmail/rc
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
ee /usr/bin/qmailctl
#!/bin/sh
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
QMAILDUID=`/usr/bin/id -u qmaild`
NOFILESGID=`/usr/bin/id -g qmaild`
case "$1" in
start)
echo "Starting qmail..."
echo ""
if svok /var/service/qmail-send ; then
svc -u /var/service/qmail-send /var/service/qmail-send/log
echo "Starting qmail-send"
else
echo "qmail-send supervise not running"
fi
if svok /var/service/qmail-smtpd ; then
svc -u /var/service/qmail-smtpd /var/service/qmail-smtpd/log
echo "Starting qmail-smtpd"
else
echo "qmail-smtpd supervise not running"
fi
if svok /var/service/qmail-pop3d ; then
svc -u /var/service/qmail-pop3d /var/service/qmail-pop3d/log
echo "Starting qmail-pop3d"
else
echo "qmail-pop3d supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo ""
echo " qmail-smtpd"
svc -d /var/service/qmail-smtpd /var/service/qmail-smtpd/log
echo " qmail-send"
svc -d /var/service/qmail-send /var/service/qmail-send/log
echo " qmail-pop3d"
svc -d /var/service/qmail-pop3d /var/service/qmail-pop3d/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /var/service/qmail-send
svstat /var/service/qmail-send/log
svstat /var/service/qmail-smtpd
svstat /var/service/qmail-smtpd/log
svstat /var/service/qmail-pop3d
svstat /var/service/qmail-pop3d/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /var/service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /var/service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /var/service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /var/service/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /var/service/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /var/service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /var/service/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /var/service/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /var/service/qmail-smtpd /var/service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /var/service/qmail-send /var/service/qmail-send/log
echo "* Sending qmail-pop3d SIGTERM and restarting."
svc -t /var/service/qmail-pop3d /var/service/qmail-pop3d/log
echo "* Restarting qmail-smtpd."
svc -u /var/service/qmail-smtpd /var/service/qmail-smtpd/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;
help)
cat <stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
chmod 755 /var/qmail/rc /usr/bin/qmailctl
chmod 751 /var/qmail/supervise/qmail-pop3d/run
chmod 751 /var/qmail/supervise/qmail-pop3d/log/run
chmod 751 /var/qmail/supervise/qmail-smtpd/run
chmod 751 /var/qmail/supervise/qmail-smtpd/log/run
chmod 751 /var/qmail/supervise/qmail-send/run
chmod 751 /var/qmail/supervise/qmail-send/log/run
echo ./Maildir > /var/qmail/control/defaultdelivery
echo 255 > /var/qmail/control/concurrencyremote
chmod 644 /var/qmail/control/concurrencyremote
echo 30 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
ln -s /usr/bin/qmailctl /usr/local/etc/rc.d/qmail.sh
echo '127.0.0.1:allow,RELAYCLIENT=""' >> /etc/tcp.smtp
qmailctl cdb
[ 本帖最后由 honst 于 2006-5-16 23:23 编辑 ]