本站首页 本站作品 Windows Unix/Linux 土人文章 本站下载 土人论坛 网站建设 书写留言 土人新照 关于我们

Linux7.3下qmail1.03版安装日记

1. qmail简介

    Qmail是基于UNIX操作系统的Internet Mail Transfer Agent(MTA)。由于在安全性和稳定性要优于UNIX系统缺省安装的sendmail,所以在实际中往往用来代替sendmail而成为企业邮件服务系统。

2. qmail下载

3. qmail安装准备

  • 用于编译source的大约10GB的硬盘空间,编译完成后,需要4GB左右的硬盘空间用于安装编译好了的文件系统。
  • 一个完整有效的C编译器。在安装Linux操作系统时,选择安装gcc就可以了;如果没有安装gcc的话,可以到Redhat主页上下载需要的gcc编译器,关于gcc如何安装这里就不介绍了。
  • 一些可以用来存储说明文档和配置文件的空余硬盘空间。
  • 已经配置好可用的DNS。
  • 有效的网络连接。
    其他的一些qmail对系统的要求,可以参照INSTALL文件,请详细阅读INSTALL。
4. qmail编译
  • 验证编译环境
    $cc
    cc:No input files specified #gcc已安装
    如果没有以上提示“cc:No input files specified”,则需要安装gcc编译器。
  • 将source文件解压缩
    $su
    #umask 022
    #mkdir -p /usr/local/src
    #mv qmail-1.03.tar.gz ucspi-tcp-0.88.tar.gz /usr/local/src
    #mkdir -p /package
    #mv daemontools-0.76.tar.gz /package
    #chmod 1755 /package

    #cd /usr/local/src
    #gunzip qmail-1.03.tar.gz
    #tar xpf qmail-1.03.tar
    #gunzip ucspi-tcp-0.88.tar.gz
    #tar xpf ucspi-tcp-0.88.tar
    #rm *.tar #可选项,除非硬盘空间不够
    #cd /package
    #gunzip daemontools-0.76.tar.gz
    #tar xpf daemontools-0.76.tar
    #rm *.tar #可选项,同上

  • 创建安装目录
    #mkdir /var/qmail #qmail将被指定安装在该目录
  • 创建用户和工作组
    # groupadd nofiles
    # useradd -g nofiles -d /var/qmail/alias alias
    # useradd -g nofiles -d /var/qmail qmaild
    # useradd -g nofiles -d /var/qmail qmaill
    # useradd -g nofiles -d /var/qmail qmailp
    # groupadd qmail
    # useradd -g qmail -d /var/qmail qmailq
    # useradd -g qmail -d /var/qmail qmailr
    # useradd -g qmail -d /var/qmail qmails
  • 编译安装文件
    #cd /usr/local/src/qmail-1.03
    #make setup check

    编译完成以后,需要运行配置设置来配置安装环境。
    ./config
    ./config-fast the.full.hostname
5. 安装ucspi-tcp
  • ucspi-tcp的安装相对简单一些,步骤如下:
    #cd /usr/local/src/ucspi-tcp-0.88
    #make
    #make setup check
6. 安装daemontools
    #cd /package/admin/daemontools-0.76
    #package/install
7. qmail安装及配置
  • /var/qmail/rc
    由于我安装qmail选择的是/var/spool/mail作为qmail的邮箱,所以相应的rc如下:(也可以参阅INSTALL.vsm)
    #############################################################################
    #!/bin/sh

    # Using splogger to send the log through syslog.
    # Using dot-forward to support sendmail-style ~/.forward files.
    # Using procmail to deliver messages to /var/spool/mail/$USER by default.

    exec env - PATH="QMAIL/bin:$PATH" \
    qmail-start '|dot-forward .forward|preline procmail' splogger qmail
    #############################################################################

    /var/qmail/rc文件编辑好了之后,修改其运行属性:
    chmod 755 /var/qmail/rc
    mkdir /var/log/qmail #qmail运行日志存放目录
  • System start-up files
    • qmailctl
      编辑qmail启动和关闭的脚本文件/var/qmail/bin/qmailctl:
      #!/bin/sh
      
      # For Red Hat chkconfig
      # chkconfig: - 80 30
      # 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/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 <<HELP
         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/bin/qmailctl
      ln -s /var/qmail/bin/qmailctl /usr/bin #建立链接
    • supervise
      创建supervise目录:
      mkdir -p /var/qmail/supervise/qmail-send/log
      mkdir -p /var/qmail/supervise/qmail-smtpd/log

      创建/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`
      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
      
      创建/var/qmail/supervise/qmail-smtpd/log/run文件:
      #!/bin/sh
      exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
      
      修改以上文件的运行属性:
          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 directories:
          mkdir -p /var/log/qmail/smtpd
          chown qmaill /var/log/qmail /var/log/qmail/smtpd
      
      最后,创建链接文件:
      ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
    • SMTP访问控制
      允许本地主机通过SMTP协议inject mail:
          echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
          qmailctl cdb
      
    • 关闭已经安装的MTA
          /etc/init.d/sendmail stop
          /sbin/init.d/sendmail stop
          /etc/rc.d/init.d/sendmail stop
      

      如果不能找到 init.d/sendmail 的执行脚本,可用"ps -ef|grep sendmail" 或者 "ps waux|grep sendmail" 来查找sendmail的进程号 然后杀掉其进程:

          kill PID-of-sendmail
      

      可以用rpm卸掉Sendmail

          rpm -e --nodeps sendmail
      

      验证没有进程监听SMTP的25端口:

          netstat -a | grep smtp
      

      如果有SMTP仍然在运行,停止qmail

          qmailctl stop
      

      再次检查SMTP:

          netstat -a | grep smtp
      

      最后,修改/usr/lib/sendmail

          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
      
    • 创建系统别名

      有三个系统别名需要创建:

      Alias Purpose
      postmaster RFC 2821 required, points to the mail adminstrator (you)
      mailer-daemon de facto standard recipient for some bounces
      root redirects mail from privileged account to the system administrator

      创建命令:

          echo dave > /var/qmail/alias/.qmail-root
          echo dave > /var/qmail/alias/.qmail-postmaster
          ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
          chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
      

      详细介绍请参阅 INSTALL.alias

    • 启动qmail
      qmailctl start
8. 测试运行
  • 测试命令:
        # 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
    
        # ps -efl | grep "service errors" | grep -v grep
        000 S root      1006  1001  0  76   0    -   334 pipe_w Mar31 ?        00:00:00
        readproctitle service errors: ...unable to start qmail-smtpd/run: exec format error
        #
    
  • 如果qmai-smtpd/log服务不能运行的话,可以试试以下的命令:
        cd /service/qmail-smtpd/log
        svc -d .
        ./run
        如果没有错误,输入一行文本,然后回车
        如果仍然没有错误发生,CTRL-D结束程序。
    
        可以运行:
        svc -u .
        来诊断qmail-smtpd/log服务的运行。
        (参考网站lifewithqmail)
    

CopyRights@2003 All Rights Rserved TRSITE | 版权所有 土人工作室