FreeBSD Qmail安装Howto
发表于:2007-06-09来源:作者:点击数:
标签:
原文出处http://bsd.huangdong.com/server/mail/qmail.html 请大家多多 测试 ,有任何问题请告诉我(hd@huangdong.com)。 前言 这个文章其实我很早前就应该写了,因为以前做过的Qmail的东东非常的多了,但是一直很懒惰,导致的最大的问题就是每次做FreeBSD下
原文出处http://bsd.huangdong.com/server/mail/qmail.html
请大家多多
测试,有任何问题请告诉我(hd@huangdong.com)。
前言
这个文章其实我很早前就应该写了,因为以前做过的Qmail的东东非常的多了,但是一直很懒惰, 导致的最大的问题就是每次做FreeBSD下的Qmail系统都是重新看文章来过。今天终于决定边装边写了。
安装Qmail
安装Qmail很简单的,使用ports中的qmail来安装就好了:
cd /usr/ports/mail/qmail
make -DWITH_BIG_TODO_PATCH install clean
make disable-sendmail
make enable-qmail
这里第三步和第四步是将sendmail的缺省mail变更成为Qmail。需要注意的是这样设置必须要在 /etc/rc.conf 中加入:
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
这些将彻底在系统启动时禁止sendmail的任何动做。
一般的情况下我们会使用Qmail的MailDir方式来启动Qmail,所以我们需要将maildir启动脚本激活,但是我们为后面的svscan要做一些准备,所以将以下脚本:
env env - PATH="/var/qmail/bin:/usr/local/bin" \
qmail-start ./Maildir/
放入 /var/qmail 中的 rc 文件中。并使用 chmod +x /var/qmail/rc 命令给rc加上执行权限。
注意:如果你在安装qmail时如果发现它不能正确找到你的域名解析时安装的配置文件不会安装全,这里你需要自己手工进行一次配置:
cd /var/qmail/configure
./config-fast $HOSTNAME
请使用你这台机器的主机名代替$HOSTNAME。这样操作后,Qmail的缺省配置文件都会自动生成。
安装和设置My
SQL
安装MySQL需要的是时间而不是技巧:
cd /usr/ports/databases/mysql40-server
make -DWITH_CHARSET=gbk install
make clean
我们要为vpopmail提前准备好MySQL的库和用户:
mysqladmin create vpopmail
mysql -u root -p
mysql>use mysql
mysql>GR
ANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , FILE , INDEX , ALTER , SHOW DATABASES , CREATE TEMPORARY TABLES , LOCK TABLES ON * . * TO "vpopmail"@ "localhost"IDENTIFIED BY "vpopmail"WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
mysql>FLUSH PRIVILEGES;
这里创建了一个用户名为vpopmail,同时设置其密码为vpopmail。
安装vpopmail
安装vpopmail更多的是参数要注意,其它的都会很简单:
cd /usr/ports/mail/vpopmail
make WITH_MYSQL=yes WITH_MYSQL_SERVER=localhost WITH_MYSQL_USER=vpopmail WITH_MYSQL_PASSWD=vpopmail WITH_MYSQL_DB=vpopmail WITH_MYSQL_LI
MITS=yes
make install
make clean
安装好和vpopmail后我们当然需要测试一下它是否能正常的运行,包括连接MySQL
数据库和正常的操作Qmail的数据文件:
cd /usr/local/vpopmail/bin
./vadddomain test.com
./vadduser hd@test.com
第二步是向系统加入一个域名,第三步是向该域名中加入一个用户。在输入命令后它都会提示你输入密码,域名的密码是用来维护该域中用户的mast用户的密码。如果没有任何的错误提示,哪么恭喜你,你走过了大多数的艰苦步骤,已经走上了光明大道了。
安装QmailAdmin
我很痛苦每次增加一个用户就ssh到
服务器上,su成vpopmail,再输入命令。也许这只是痛苦的开始,你还要面对改密码、增加邮箱转发等等'高级'或是'额外'的用户要求。 于是,一个可爱的管理系统前来将大家于水火中解救出来:QmailAdmin。上面所有的一切,它都能帮你做到。我们来使用万能的ports罢 :
cd /usr/ports/mail/qmailadmin
make -DWITH_MODIFY_QUOTA
make install clean
它将qmailadmin的cgi-bin安装到了 /usr/local/www/cgi-bin.default 的 qmailadmin 目录中。将这个目录用 ln -s 命令连接到你的cgi-bin目录中去。启动你的浏览器试试罢,一个域的管理帐号是postmaster,用域的密码登录进去好了。
安装和配置daemontools
安装
我很讨厌daemontools的配置,而且非常烦它哪种启动和监视daemon的目录结构,但是好象Qmail的作者很是推崇自己的这个小作品。 再加上谁都担心Qmail哪一小撮进程有一个完蛋后没有人能知道而重新启动,所以我们还是来配置一下这个丑陋的小东西罢。先安装它:
cd /usr/ports/sysutils/daemontools
make install clean
这个工具最大的特点就在于安装容易到了极限,而配置复杂到了极限!先来建立Qmail的服务日志目录,并给Qmail加上权限:
mkdir -p /var/log/qmail/qmail-smtpd
mkdir -p /var/log/qmail/qmail-pop3d
mkdir -p /var/log/qmail/qmail-send
chmod -R 755 /var/log/qmail
chown -R qmaill:wheel /var/log/qmail
配置svscan
最好建立以下内容的一个脚本,执行它:
#!/bin/sh
mkdir /service
chmod 755 /service
mkdir /var/qmail/supervise
chmod 755 /var/qmail/supervise
mkdir /var/qmail/supervise/qmail-smtpd
mkdir /var/qmail/supervise/qmail-smtpd/log
chmod +t /var/qmail/supervise/qmail-smtpd
mkdir /var/qmail/supervise/qmail-send
mkdir /var/qmail/supervise/qmail-send/log
chmod +t /var/qmail/supervise/qmail-send
mkdir /var/qmail/supervise/qmail-pop3d
mkdir /var/qmail/supervise/qmail-pop3d/log
chmod +t /var/qmail/supervise/qmail-pop3d
ln -s /var/qmail/supervise/* /service/
下面是pop3d的启动脚本:
#!/bin/sh
exec /usr/local/bin/tcpserver -H -R -v -c100 0 110 /var/qmail/bin/qmail-popup host.domain.de /usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
将这个脚本放入 /var/qmail/supervise/qmail-pop3d/ 的 run 文件中,然后:
再将pop3d的log启动脚本:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1
放入 /var/qmail/supervise/qmail-pop3d/log 中的 run 文件中,之后执行:
chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
将smtpd的启动脚本:
#!/bin/sh
QMAILDUID=`/usr/bin/id -u qmaild`
NOFILESGID=`/usr/bin/id -g qmaild`
exec /usr/local/bin/tcpserver -p -R -x /usr/local/vpopmail/etc/tcp.smtp.cdb -u"$QMAILDUID" -g"$NOFILESGID" -v -c100 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd 2>&1
放入 /var/qmail/supervise/qmail-smtpd 的 run 文件中。
配对的还有smtpd的log启动脚本:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1
放入 /var/qmail/supervise/qmail-smtpd/log/ 中的 run 文件中。之后执行:
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/log/qmail/qmail-smtpd/log
chmod 755 /var/log/qmail/qmail-smtpd/log/run
无尽的长夜呀,还有一个qmail send要搞!将这个脚本:
#!/bin/sh
exec /var/qmail/rc
放入 /var/qmail/supervise/qmail-send/ 中的 run 文件里。并将以下配对的log启动脚本:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1
放入 /var/qmail/supervise/qmail-send/log 中的 run 文件,最终曙光来到了,我们执行以下命令:
chmod 755 /var/qmail/supervise/qmail-send/run
chmod R 755 /var/log/qmail/qmail-send/log
chmod R 755 /var/log/qmail/qmail-send/log/run
不知你的指头是不是酸了呢?总之,这时候去唱个卡拉OK罢,让你的指头休息一下罢,无聊的svscan就像是我们要去唱的哪英的歌一样,被我们“征服”了!
设置系统启动脚本
在系统安装时 /usr/local/etc/rc.d 中的 qmail.sh 文件是连接到了 /var/qmail/rc 文件上的,但是我们需要用svscan来启动,所以我们先要将原有的启动脚本删除,再vi一个新的启动脚本:
cd /usr/local/etc/rc.d
rm qmail.sh
vi qmail.sh
脚本的内容HD已经辛苦的帮大家抄来了:
#!/bin/sh
case "$1" in
start)
echo -n "Starting qmail: svscan"
if cd /var/qmail/supervise; then
env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" svscan &
echo $! > /var/run/svscan.pid
fi
echo "."
;;
stop)
echo -n "Stopping qmail: svscan"
kill `cat /var/run/svscan.pid`
echo -n " qmail"
svc -dx /var/qmail/supervise/*
echo -n " logging"
svc -dx /var/qmail/supervise/*/log
echo "."
;;
br>stat)
cd /var/qmail/supervise
svstat * */log
;;
doqueue|alrm)
echo "Sending ALRM signal to qmail-send."
svc -a /var/qmail/supervise/qmail-send
;;
queue)
/var/qmail/bin/qmail-qstat
/var/qmail/bin/qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /var/qmail/supervise/qmail-send
echo "Sending HUP signal to qmail-pop3d."
svc -h /var/qmail/supervise/qmail-pop3d
;;
pause)
echo "Pausing qmail-send"
svc -p /var/qmail/supervise/qmail-send
echo "Pausing qmail-smtpd"
svc -p /var/qmail/supervise/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /var/qmail/supervise/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /var/qmail/supervise/qmail-send
echo "Continuing qmail-smtpd"
svc -c /var/qmail/supervise/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /var/qmail/supervise/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /var/qmail/supervise/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /var/qmail/supervise/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /var/qmail/supervise/qmail-smtpd
echo "* Sending qmail-pop3d SIGTERM and restarting."
svc -t /var/qmail/supervise/qmail-pop3d
;;
cdb)
tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb /usr/local/vpopmail/etc/tcp.smtp.tmp <
/usr/local/vpopmail/etc/tcp.smtp
chmod 644 /usr/local/vpopmail/etc/tcp.smtp*
echo "Reloaded /usr/local/vpopmail/etc/tcp.smtp."
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue}"
exit 1
;;
esac
exit 0
在你快乐之余不要忘记要给启动脚本执行权限:
chmod +x /usr/local/etc/rc.d/qmail.sh
如果你现在还在清醒状态,哪么请启动我们伟大的Qmail罢。它已经在我们的系统中安静的存在到了你同意它站立起来了:
/usr/local/etc/rc.d/qmail.sh start
如果启动后发现了问题请首先查看系统中的sendmail是否还能通过 ps -ax 命令看到,如果还能看到,建议你确定已经向上面所说更新过/etc/rc.conf中的配置后,输入让世界重见光明的命令: reboot 罢!要知道轮回是必然的,皇帝明天就能到我家!
& 2003, 技术天空
xiaohua 回复于:2003-11-27 09:47:44
|
欢迎大家来看我写的 :wink:
http://www.dmail-x.com
|
garfy 回复于:2003-11-27 09:58:30
|
黄老兄的工作令人佩服,在CU的mail版里介绍qmail+mysql+vpopmail的方法也不少,有的还带有webmail的安装,但是完全从pors来安装的说明这还是第一份,辛苦了!
|
xiaohua 回复于:2003-11-27 10:12:10
|
是我发现的第二份
|
xiaohua 回复于:2003-11-27 10:16:13
|
vpopmail 还是不行哦
10:17 [root] /usr/ports/mail/vpopmail ==>/usr/local/vpopmail/bin/vadddomain qiangzhu.com.cn
Please enter password for postmaster:
enter password again:
vmysql: no valid settings in /usr/local/vpopmail/etc/vpopmail.mysql
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[b]: MySQL server has gone away
Failure while attempting to remove_line() the locals file
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[b]: MySQL server has gone away
Error. Failed to add domain to assign file
Error: Could not update file
10:17 [root] /usr/ports/mail/vpopmail ==>
10:18 [root] /usr/ports/mail/vpopmail ==>ls -l /usr/local/vpopmail/etc/vpopmail.mysql
-rw------- 1 vpopmail vchkpw 0 11 27 10:16 /usr/local/vpopmail/etc/vpopmail.mysql
10:18 [root] /usr/ports/mail/vpopmail ==>
郁闷 :twisted:
|
xiaohua 回复于:2003-11-27 10:21:11
|
creating config.h
vpopmail 5.3.29
Current settings
---------------------------------------
vpopmail directory = /usr/local/vpopmail
uid = 89
gid = 89
ip alias = OFF --enable-ip-alias-domains=n (default)
address extentions = OFF --enable-qmail-ext=n (default)
rebuild tcpserver file = YES --enable-rebuild-tcpserver-file=y (default)
roaming users = ON --enable-roaming-users=y
tcpserver file = /usr/local/vpopmail/etc/tcp.smtp
open_smtp file = /usr/local/vpopmail/etc/open-smtp
user quota = 10000000 -enable-hardquota=10000000
domain quotas = OFF --enable-domainquotas=n (default)
auth module = mysql --enable-mysql=y
mysql replication = OFF --enable-mysql-replication=n (default)
table optimization = many domains --enable-many-domains=y (default)
system passwords = OFF --enable-passwd=n (default)
file locking = ON --enable-file-locking=y (default)
file sync = OFF --enable-file-sync=n disable vdelivermail fsync
(default)
make seekable = ON --enable-make-seekable=y (default)
auth logging = ON --enable-auth-logging=y (default)
mysql logging = OFF --enable-mysql-logging=n (default)
clear passwd = OFF --enable-clear-passwd=n
users big dir = ON --enable-users-big-dir=y (default)
valias processing = OFF --enable-valias=n
mysql limits = ON --enable-mysql-limits=y
pop syslog = show suclearcase/" target="_blank" >ccessful and failure login attempts
--enable-logging=y
auth inc = -I/usr/local/include/mysql
auth lib = -L/usr/local/lib/mysql -lmysqlclient -lz
楼主的是什么版本的 vpopmail ?
|
xiaohua 回复于:2003-11-27 10:24:23
|
10:26 [root] /usr/ports/mail/vpopmail ==>/usr/local/vpopmail/bin/vdeldomain qiangzhu.com.cn
Error: Could not access (/usr/local/vpopmail/domains/qiangzhu.com.cn)
Error: Domain does not exist
10:26 [root] /usr/ports/mail/vpopmail ==>/usr/local/vpopmail/bin/vdominfo
domain: qiangzhu.com.cn
uid: 89
gid: 89
dir: /usr/local/vpopmail/domains/qiangzhu.com.cn
vmysql: no valid settings in /usr/local/vpopmail/etc/vpopmail.mysql
users: 0
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[b]: MySQL server has gone away
|
wangbin 回复于:2003-11-27 20:54:41
|
???
|
xiaohua 回复于:2003-11-28 07:55:26
|
[size=24:fd609938e3]很....[/size:fd609938e3]
|
yanyp 回复于:2003-11-28 08:50:01
|
人家写出来是好意,你确怀疑人家,你学会就行了呗,
老黄和赵新都是很有水平的
|
xiaohua 回复于:2003-11-28 09:35:41
|
[quote:af03898e10="yanyp"]人家写出来是好意,你确怀疑人家,你学会就行了呗,
老黄和赵新都是很有水平的[/quote:af03898e10]
上面写着什么:
[quote:af03898e10]原文出处http://bsd.huangdong.com/server/mail/qmail.html
请大家多多测试,有任何问题请告诉我(hd@huangdong.com)。
[/quote:af03898e10]
发信过去没反应!我不是怀疑他的水平,其实用 PORT 安装的 QMAIL 我早就见过了,他的 VPOPMAIL 参数我也早就知道。不信你看看这
http://chinaunix.net/forum/viewtopic.php?t=175109&highlight=xiaohua
http://chinaunix.net/forum/viewtopic.php?t=192768&highlight=xiaohua
mail 版的 peijun.jiang 大侠也知道这件事。所以我是[size=24:af03898e10]极度[/size:af03898e10]的怀疑这篇文章(下面省略。。。。字)。行不行不用嘴上说,我也没必要和你斗嘴,你自己试一下就知道了。我可不是空口说大话,我是自己试过了才这样说的。就不知你有没试过就这样说
还有,他是什么系统环境、什么版本的都没说
|
hdcola 回复于:2003-11-28 10:06:32
|
这个问题我查了一下,原因已经找到,这几天小宝宝到家了,没有太多的时间,周六日我会加上相关的内容的。大致的方法是vpopmail使用了一个文件为对数据库访问:
/usr/local/vpopmail/etc
中的vpopmail.mysql,它的格式:
localhost|0|vpopmail|vpopmail|vpopmail
localhost|0|vpopmail|vpopmail|vpopmail
第一行是读的访问,第二行是更新的访问,格式基本上是:
主机|端口|用户|密码|库名
》》》》》》》》》》》》》》》》
vpopmail 还是不行哦
10:17 [root] /usr/ports/mail/vpopmail ==>/usr/local/vpopmail/bin/vadddomain qiangzhu.com.cn
Please enter password for postmaster:
enter password again:
vmysql: no valid settings in /usr/local/vpopmail/etc/vpopmail.mysql
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[b]: MySQL server has gone away
Failure while attempting to remove_line() the locals file
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[b]: MySQL server has gone away
Error. Failed to add domain to assign file
Error: Could not update file
10:17 [root] /usr/ports/mail/vpopmail ==>
10:18 [root] /usr/ports/mail/vpopmail ==>ls -l /usr/local/vpopmail/etc/vpopmail.mysql
-rw------- 1 vpopmail vchkpw 0 11 27 10:16 /usr/local/vpopmail/etc/vpopmail.mysql
10:18 [root] /usr/ports/mail/vpopmail ==>
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
|
hdcola 回复于:2003-11-28 10:12:21
|
呵呵,我收到了邮件管理员 [liu@qiangzhu.net]给我发来的mail,收mail的服务器是freebsd 4.9 stable,安装的是qmail,是以本文中的各项方法来安装的,但是边写边装有时有一些疏漏,希望大家在安装出现问题时及时告诉我,我来更新文中的相关内容。对于xiaohua所说的地方,我确实是配置了,但是由于这个配置没有在任何ports的文档中说明所以写时没有加入,但是我在源代码中找出了相关的内容,相信这块加上就不再有什么问题。
另外这几天我会补上一块就是vpopmail是如何来进行smtp转发控制的内容的。但实际上本文已经将这些工作完成了,只是我加一小段的文字说明而已。
很久没有写东东了,呵呵,感觉不错 :)
BTW:希望xiaohua做了哪么多东东也share一下你的经验呀,记得在fbchina上你对oo的字体的更改的部分告诉大家的方法真的很不错。有空多交流罢
[quote:d51f21d355="xiaohua"]怀疑这篇文章(下面省略。。。。字)。行不行不用嘴上说,我也没必要和你斗嘴,你自己试一下就知道了。我可不是空口说大话,我是自己试过了才这样说的。就不知你有没试过就这样说
还有,他是什么系统环境、什么版..........[/quote:d51f21d355]
|
hdcola 回复于:22003-111-28 10:15:14
|
[quote:17db29d9c8="xiaohua"]creating config.h
vpopmail 5.3.29
Current settings
---------------------------------------
vpopmail directory = /usr/local/vpopmail
uid = 89
..........[/quote:17db29d9c8]
偶的vpopmail:
vpopmail-5.3.29_1 Easy virtual domain and authentication package for use with
|
hdcola 回复于:2003-11-28 10:40:39
|
xiaohua 我不知道你使用freebsd有多久,我早在2000年时就已经使用freebsd的ports安装mail系统了,其实当时的qmail版本与现在记得是没有多少变化的,感觉qmail在代码上的稳定性真的不错。
我在cu、fbchina、cnfug都读过大作,有不少小技巧,但是我想如果你能将自己所了解到的分享给大家,哪么会有更多的人来帮助你的。这次你提出了vpopmail的问题,我很感谢你,但是对你提出回应的方式认为不妥,如果将来你要与更多的人交流彼此的心得和体会,希望你能敞开胸怀,与大家一起进步。 :)
话只能说到这里了,网上的东东本是虚无的,但是我在网上真的有好几份真正的友谊。
|
xiaohua 回复于:2003-11-28 13:44:18
|
..........................
|
xiaohua 回复于:2003-11-28 13:49:04
|
[quote:cf62db8eed="hdcola"][/quote:cf62db8eed]
[quote:cf62db8eed]BTW:希望xiaohua做了哪么多东东也share一下你的经验呀,记得在fbchina上你对oo的字体的更改的部分告诉大家的方法真的很不错。有空多交流罢
[/quote:cf62db8eed]
都是过去的事了,我们的项目没成功,不要提了 :em16: :em16: :em17:
|
xiaohua 回复于:2003-11-28 13:59:37
|
...........
............
small> hdcola 回复于:2003-11-29 19:44:19
| 呵呵,终于宝宝睡醒了,今天会更新文章的内容了。
| dennis2 回复于:2004-01-03 13:57:17
| [quote:f6315914da="hdcola"]......
cd /usr/ports/sysutils/daemontools
make install clean
这个工具最大的特点就在于安装容易到了极限,而配置复杂到了极限!
......[/quote:f6315914da]
ports 里有 qmail-conf(类似于 djbdns 的 *-conf),用它设置那些目录很方便的。
| xiaohua 回复于:2004-10-12 09:14:52
| :shock:
|
原文转自:http://www.ltesting.net
|