Qmail简易配置——再次整理篇
2007年09月14日 星期五 10:51
所需软件: netqmail-1.05.tar.gz-- (不用说应该知道干什么的了吧!) ucspi-tcp-0.88.tar.gz-- 一个inetd超级服务器的替换程序 daemontools-0.76.tar.gz-- 一个管理后台服务程序以及日志的工具套件 *checkpassword-0.90.tar.gz-- POP3 服务模块化的密码检查 安装基本软件: 现在你需要成为root用户, 如果你还没有, 那就成为root吧 su umask 022 件所需软件cp到/usr/local/src中 netqmail-1.05.tar.gz ucspi-tcp-0.88.tar.gz daemontools-0.76.tar.gz 就是这3个软件。 mkdir -p /package 将daemontools-0.76.tar.gz装入其中 mv daemontools-0.76.tar.gz /package 并赋予权限 chmod 1755 /package 解开软件包: cd /usr/local/src tar zxvf netqmail-1.05.tar.gz cd netqmail-1.05 ./collate.sh # 在这儿要注意错误信息(至于错误信息是什么本人尚未了解到) cd .. tar zxvf ucspi-tcp-0.88.tar.gz cd /package tar zxvf daemontools-0.76.tar.gz 注意qmail安装程序会自行创建需要的子目录, 你只需要创建qmail的"home"目录: mkdir /var/qmail 最容易的创建用户和组的方式是创建一个小脚本文件然后执行它. 在源代码目录下你可以找到一个名字是INSTALL.ids的文件, 它包括了在你的系统平台下创建用户和组的命令行. 复制这个文件并命名另外一个名字, 编辑它来运行命令既快捷又简单. cd /usr/local/src/netqmail-1.05/netqmail-1.05 cp INSTALL.ids IDS vi IDS 将里面内容做成下面所示: pw groupadd nofiles pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent pw groupadd qmail pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent pw useradd qmails -g qmail -d /var/qmail -s /nonexistent (保存退出后会提示 Would you like to edit /etc/shadow now [y/n]? 直接敲回车,不管!) 然后运行这个脚本, 用chmod将脚本设置为可执行 chmod 700 IDS ./IDS 或者用sh来运行它 /bin/sh IDS 这个脚本运行完毕, 你的所有的用户和组就已经添加完毕, 你可以继续下一节的安装了! (可是如果你的系统在INSTALL.ids 上没有提到, 那你就必须手动创建用户和组了. vi /etc/group, 增加下面两行: qmail:*:2107: nofiles:*:2108: 注意: 首先确定2107和2108没有被使用, 如果已经被占用, 选择2个文件中未用的数字.) vipw 在文件尾部增加下面这些行: alias:*:7790:2108::/var/qmail/alias:/bin/true qmaild:*:7791:2108::/var/qmail:/bin/true qmaill:*:7792:2108::/var/qmail:/bin/true qmailp:*:7793:2108::/var/qmail:/bin/true qmailq:*:7794:2107::/var/qmail:/bin/true qmailr:*:7795:2107::/var/qmail:/bin/true qmails:*:7796:2107::/var/qmail:/bin/true 编译软件: cd /usr/local/src/netqmail-1.05/netqmail-1.05 make setup check 如果你的DNS配置恰当, 运行这个脚本: ./config 如果由于某些原因config 脚本不能在DNS找到你的主机名, 你就必须运行config-fast脚本 (一般试验没有建设专门的DNS所以使用命令 ./config-fast the.full.hostname *the.full.hostname是指你的主机全名) cd /usr/local/src/ucspi-tcp-0.88 patch < /usr/local/src/netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch make make setup check ucspi-tcp安装完毕! cd /package/admin/daemontools-0.76 cd src patch < /usr/local/src/netqmail-1.05/other-patches/daemontools-0.76.errno.patch cd .. package/install (使用 "ps -ef | grep svscan" 或者"ps waux | grep svscan" 检查svscan是否在运行) 运行 qmail: 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 mkdir /var/log/qmail 如果选择标准的qmail /Mailbox 传送格式 echo ./Mailbox >/var/qmail/control/defaultdelive 如果你手动执行/varqmail/rc 脚本, qmail只会部分被运行起来. 可是我们希望希望每次系统启动后, qmail都能自动被启动; 每次系统停止时候qmail自动被关闭。创建一个如下的 /var/qmail/bin/qmailctl 文件可以完成这个愿望: vi /var/qmail/bin/qmailctl 内容如下: #!/bin/sh # description: the qmail MTA PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` case "$1" in start) echo "Starting qmail" if svok /service/qmail-send ; then svc -u /service/qmail-send /service/qmail-send/log else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log else echo "qmail-smtpd supervise not running" fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-send" svc -d /service/qmail-send /service/qmail-send/log if [ -f /var/lock/subsys/qmail ]; then rm /var/lock/subsys/qmail fi ;; stat) svstat /service/qmail-send svstat /service/qmail-send/log svstat /service/qmail-smtpd svstat /service/qmail-smtpd/log qmail-qstat ;; doqueue|alrm|flush) echo "Flushing timeout table and sending ALRM signal to qmail-send." /var/qmail/bin/qmail-tcpok svc -a /service/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /service/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /service/qmail-send echo "Pausing qmail-smtpd" svc -p /service/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /service/qmail-send echo "Continuing qmail-smtpd" svc -c /service/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/lo* ;; **b) 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 < 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 将上面这个qmailctl 脚本设置为可执行脚本, 然后链接到你的用户执行程序目录: chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/bin 建立supervise 脚本: 为 qmail 的服务创建 supervise 目录: mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log 建立 /var/qmail/supervise/qmail-send/run 文件: vi /var/qmail/supervise/qmail-send/run 内容如下: #!/bin/sh exec /var/qmail/rc 建立 /var/qmail/supervise/qmail-send/log/run 文件: vi /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 文件: vi /var/qmail/supervise/qmail-smtpd/run 内容如下: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` 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 2000000 \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 建立concurrencyincoming 控制文件. echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming 建立 /var/qmail/supervise/qmail-smtpd/log/run 文件: vi /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 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run 然后建立log文件目录: mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd 最后, 建立 supervise 目录到 /service 目录的链接: ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service (注:/service 目录是 daemontools 安装时建立的目录.) 注意: 建立这个链接之后 qmail 系统会很快自动被启动起来, 如果你还不想立刻运行qmail, 运行下面这个,命令来停止qmail: qmailctl stop SMTP 访问控制: 允许本地主机通过SMTP方式发送邮件: echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp qmailctl cdb 如果现存的MTA是Sendmail, 你应该能利用运行Sendmail的init.d脚本的"stop"参数来停止它的运行. /etc/init.d/sendmail stop 或 etc/rc.d/init.d/sendmail stop 把旧的MTA彻底的从你的系统里面删除. 至少禁用它的 init.d 脚本, 防止下一次系统重启动的时候旧的MTA也被试图重启. 对于使用rpm方式安装Sendmail的 Red Hat Linux, 执行下面的命令来删除Sendmail: rpm -e --nodeps sendmail 检查一下没有其他程序在监听SMTP服务端口(25). netstat -a | grep smtp (如没输出表示正常) 将现存的 /usr/lib/sendmail 替代为 qmail 版本. mv /usr/lib/sendmail /usr/lib/sendmail.old # 忽略错误提示 ignore errors mv /usr/sbin/sendmail /usr/sbin/sendmail.old # 忽略错误提示 ignore errors chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # 忽略错误提示 ignore errors ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin (注:这里的错误提示是源于你删除了sendmail,所以忽略。如果不删除就不会有提示,这个我试过了,但至于会不会成功建成那就不知道。) 运行 qmail: qmailctl start 建立用户: useradd 用户名 passwd 用户名 为用户建立自己的Maildir格式信箱: su - 用户名 /var/qmail/bin/maildirmake /$HOME/Maildir echo ./Malidir/ > /$HOME/.qmail 切换回管理员用户: su - 输入管理员密码 测试安装: qmailctl stat 如下所示即为正确: /service/qmail-send: up (pid 30303) 187 seconds /service/qmail-send/log: up (pid 30304) 187 seconds /service/qmail-smtpd: up (pid 30305) 187 seconds /service/qmail-smtpd/log: up (pid 30308) 187 seconds messages in queue: 0 messages in queue but not yet preprocessed: 0 (重要的是里面的4个up!) 安装 qmail-pop3d: cd /usr/local/src tar zxvf checkpassword-0.90.tar.gz cd checkpassword-0.90 patch < /usr/local/src/netqmail-1.05/other-patches/checkpassword-0.90.errno.patch (为POP3打上修补错误返回码的补丁) make setup check mkdir /var/qmail/supervise/qmail-pop3d 创建一个/var/qmail/supervise/qmail-pop3d/run 脚本, vi /var/qmail/supervise/qmail-pop3d/run 包括如下内容: #!/bin/sh exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \ FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 (FQDN 是你建立的POP服务器的完整的有资格的正式域名) 将下面内容加入qmailctl脚本的"start"部分 if svok /service/qmail-pop3d ; then svc -u /service/qmail-pop3d /service/qmail-pop3d/log else echo qmail-pop3d supervise not running fi 将下面内容加入qmailctl脚本的"stop"部分 echo " qmail-pop3d" svc -d /service/qmail-pop3d /service/qmail-pop3d/log 将下面内容加入qmailctl脚本的"stat"部分 svstat /service/qmail-pop3d svstat /service/qmail-pop3d/log 将下面内容加入qmailctl脚本的"pause"部分 echo "Pausing qmail-pop3d" svc -p /service/qmail-pop3d 将下面内容加入qmailctl脚本的"cont"部分 echo "Continuing qmail-pop3d" svc -c /service/qmail-pop3d 将下面内容加入qmailctl脚本的"restart"部分 echo "* Restarting qmail-pop3d." svc -t /service/qmail-pop3d /service/qmail-pop3d/log 可以说这个么,基本上么,差不多么,大概么,嗯...应该是可以用了,可以发一封空白测试邮件 echo To: 用户名@主机全名 | /var/qmail/bin/qmail-inject 查信么 cd /home/用户名/Maildir/new ls 因该看得到了,软后就是windows下的客户端试验了~应该是成功的! |