当前位置:Linux教程 - Linux资讯 - 我的qmail安装历程

我的qmail安装历程

  最近公司要开展虚拟主机业务,需要在一台mail服务器上绑定多个域名,于是呢,就想到qmail这位老人家了,照ideal的方法有点问题,就只好去看老外的life with qmail了,hehe 现在大约讲讲我的安装过程: 如果系统运行着sendmail就要把sendmail的守护进程杀掉,然后抓了qmail1.03.tar.gz,UCspi-tcp-0.88.tar.gz,daemontools-0.70.tar.gz这三个包,把他们扔/usr/local/src下面解压开,然后要建一些必要的目录 cd qmail-1.03 mkdir /var/qmail ln -s /usr/man /var/qmail/man mkdir /etc/qmail ln -s /etc/qmail /var/qmail/control ln -s /usr/sbin /var/qmail/bin 接着建安装qmail需要的组和用户: groupadd nofiles useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent useradd qmaild -g nofiles -d /var/qmail -s /nonexistent useradd qmaill -g nofiles -d /var/qmail -s /nonexistent useradd qmailp -g nofiles -d /var/qmail -s /nonexistent groupadd qmail useradd qmailq -g qmail -d /var/qmail -s /nonexistent useradd qmailr -g qmail -d /var/qmail -s /nonexistent useradd qmails -g qmail -d /var/qmail -s /nonexistent 然后开始编译qmail: make setup check 接着就配置域名了(这个需要你的机器域名能在dns上找到): ./config(如果确定域名没错,也可以用./config-fast hostname.domainname) 然后要编译ucspi-tcp: 进入刚才ucspi-tcp解开的目录,执行: make make setup check 接着编译daemontools,也是进入解压的目录,执行 make make setup check 下来就开始写一些qmail执行必须的脚本了,先是 vi /var/qmail/rc 脚本内容是: #!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" qmail-start "`cat /var/qmail/control/defaultdelivery`" 最后 chmod 755 /var/qmail/rc echo ./Maildir/ >/var/qmail/control/defaultdelivery(我用的是Maildir) 然后就是log文件了: mkdir /var/log/qmail mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log chmod +t /var/qmail/supervise/qmail-send chmod +t /var/qmail/supervise/qmail-smtpd 建立/var/qmail/supervise/qmail-send/run文件,内容为: #!/bin/sh exec /var/qmail/rc 建立/var/qmail/supervise/qmail-send/log/run文件,内容为: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail 建立/var/qmail/supervise/qmail-smtpd/run文件,内容: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 建立/var/qmail/supervise/qmail-smtpd/log/run文件,内容: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd 把以上四个run文件chmod 755 然后执行: echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming 来建立qmail必须的concurrencyincoming文件 同时建立标准的log目录: mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd 最关键的一步是建立qmail控制脚本,建立/etc/rc.d/init.d/qmail这个文件,内容: 脚本的HELP那块有些折行,尽量把他们弄一行. #!/bin/sh PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin eXPort PATH case "$1" in start) echo -n "Starting qmail: svscan" cd /var/qmail/supervise env - PATH="$PATH" svscan & echo $! > /var/run/svscan.pid 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 "." ;; stat) cd /var/qmail/supervise svstat * */log ;; doqueuealrm) echo "Sending ALRM signal to qmail-send." svc -a /var/qmail/supervise/qmail-send ;; queue) qmail-qstat qmail-qread ;; reloadhup) echo "Sending HUP signal to qmail-send." svc -h /var/qmail/supervise/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /var/qmail/supervise/qmail-send echo "Pausing qmail-smtpd" svc -p /var/qmail/supervise/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /var/qmail/supervise/qmail-send echo "Continuing qmail-smtpd" svc -c /var/qmail/supervise/qmail-smtpd ;; 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 ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp* echo "Reloaded /etc/tcp.smtp." ;; help) cat < stop -- stops mail service (smtp connections refused, nothing goesout) start -- starts mail service (smtp connection accepted, mail cangoout) 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 -- sends qmail-send ALRM, scheduling queued messages fordelivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue hup -- same as reload HELP ;; *) echo "Usage: $0 {startstoprestartdoqueuereloadstatpausecontcdbqueuehelp}" exit 1 ;; esac exit 0 然后建立软连接让各个启动级别能不同的需要使用qmail控制脚本 ln -s qmail /etc/rc.d/rc0.d/K30qmail ln -s qmail /etc/rc.d/rc1.d/K30qmail ln -s qmail /etc/rc.d/rc2.d/S80qmail ln -s qmail /etc/rc.d/rc3.d/S80qmail ln -s qmail /etc/rc.d/rc4.d/S80qmail ln -s qmail /etc/rc.d/rc5.d/S80qmail ln -s qmail /etc/rc.d/rc6.d/K30qmail 然后就要建立qmail的访问控制文件了,执行 echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp /etc/rc.d/init.d/qmail cdb 如果不要旧的sendmail就用rpm -e --nodeps sendmail反安装吧。 然后用qmail的一些库文件替换掉旧的sendmail: mv /usr/lib/sendmail /usr/lib/sendmail.old mv /usr/sbin/sendmail /usr/sbin/sendmail.old chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin 接着建立系统的一些alias(比如我要用grind来起qmail): echo grind > /var/qmail/alias/.qmail-root echo grind > /var/qmail/alias/.qmail-postmaster ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon chmod 644 /var/qmail/alias/.qmail-root chmod 644 /var/qmail/alias/.qmailpostmaster 最后就能用/etc/rc.d/init.d/qmail start来启动qmail了。 接下去的绑定多域名就靠vpopmail来了,vpopmail能实现系统用户和邮件用户的分离,安装过程如下: 先建立vpopmail的用户和组: groupadd vchkpw useradd -g vchkpw vpopmail -d /home/vpopmail 然后建立访问控制文件: 设置tcp.smtp文件 echo "127.0.0.:allow,RELAYCLIENT=""" > ~vpopmail/etc/tcp.smtp 接着用非root用户解压vpopmail的压缩包: $tar zxvf vpopmail-4.9.tar.gz $cd vpopmail-4.9 $./configure --enable-default-domain=youdomainname $make $su #make install-strip 接着建立虚拟域 #cd /home/vpopmail/bin # ./vadddomain youdomain 系统会提醒你输入这个域的管理员的密码。然后程序会修改下面一些必要的qmail配置文件 来使得qmail能支持这个新的域: /var/qmail/control/locals /var/qmail/control/rcpthosts /var/qmail/control/virtualdomains /var/qmail/users/assign /var/qmail/users/cdb 然后就可以增加/删除用户/改变用户密码 * 增加用户 # cd /home/vpopmail/bin # ./vadduser [email protected] 系统会提示输入密码 * 删除用户 # cd /home/vpopmail/bin # ./deluser [email protected] * 改变用户密码 # cd /home/vpopmail/bin # ./vpasswd [email protected] 设置vpopmail的POP3服务需要用到qmail中的qmail-popup,qmail-pop3d和vpopmail的vchkpw程序。 我们使用下面的脚本来启动pop3服务: #! /bin/bash # Start qmail-pop3d daemon /usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup yourhost.yourdomain /home/vpopmail/bin/vchkpw /var/qmail/bin/ qmail-pop3d Maildir & 我们把这个脚本存为文件/etc/rc.d/rc.pop3,并且使用chmod命令使之可以执行。 最后把启动qmail和pop3服务的代码放到启动文件中,让机器每次启动的时候自动运行。把下面几行命 令写到/etc/rc.d/rc.local文件的末尾: # Start qmail smtpd /usr/local/sbin/qmail start # Start POP3 Service /etc/rc.d/rc.pop3 现在确保你的inetd.conf里面有关pop3的一行已经被注释掉。然后就使用/etc/rc.d/rc.pop3命令来启动POP3服务器。 这样一个qmail系统就7788了,可以用Outlook等来收发信件了,千万记得用户名要是 [email protected]的格式,而不是单单user的形式,不然不能用. 还有什么vqsignup,能用web方式注册用户,sqwebmail能用web方式收信,不过还不知道怎么用web方式让用户改自己的密码,这个希望有做过的同志交流交流。
[1] [2] 下一页 

(出处:http://www.sheup.com)


上一页 [1] [2]