qmail + vpopmail(vchkpw) + multilog


qmaildaemontoolssvc 経由で起動するのもアリなのだけど,redhat系に浸っている自分としては

/etc/init.d/qmail start

で,qmail を起動したい.


そこで, daemontools から multilog だけインストールする方針で作業を行う.

まず,http://cr.yp.to/daemontools/ から daemontools-0.76.tar.gz を入手.
展開して,コンパイル

$ tar xvfz daemontools-0.76.tar.gz
$ cd admin/daemontools-0.76
$ ./package/compile

例によって extern int errno; とか,妙なことをしているのでコンパイルが通らない.さくっと修正する

修正結果は以下の通り

--- admin/daemontools-0.76/src/error.h.glibc23  2004-09-21 05:24:53.000000000 -0400
+++ admin/daemontools-0.76/src/error.h  2004-09-21 05:25:04.000000000 -0400
@@ -3,7 +3,7 @@
 #ifndef ERROR_H
 #define ERROR_H
 
-extern int errno;
+#include <errno.h>
 
 extern int error_intr;
 extern int error_nomem;

次に,インストール作業.でもそのままインストールしてしまうと svc が起動してしまって悲しいことになるので,必要なコマンドだけインストール.

$ sudo install -m 0755 setuidgid /usr/local/bin
$ sudo install -m 0755 multilog /usr/local/bin

最後に /etc/init.d/qmail を作成

#!/bin/sh
#
# chkconfig: 345 60 60
# description: qmail
# processname: qmail
#
#
# $Id: qmail.init,v 1.1 2004/09/22 08:03:21 ?????? Exp $


# Source function library.
. /etc/rc.d/init.d/functions



function  qmail_start()
{
HOST=`hostname`

mkdir -p /var/log/qmail
mkdir -p /var/log/pop3
mkdir -p /var/log/smtp
chown qmaill /var/log/qmail
chown qmaill /var/log/pop3
chown qmaill /var/log/smtp

# qmail
exec env - PATH="/var/qmail/bin" \
  qmail-start ./Maildir/ \
| /usr/local/bin/setuidgid qmaill \
  /usr/local/bin/multilog t n100 s1000000 /var/log/qmail &


# smtp
env - PATH="/var/qmail/bin" \
/usr/local/bin/tcpserver -v -H -R -l0 -u `id -u qmaild` -g `id -u qmaild` \
  -x /var/qmail/vpopmail/etc/tcp.smtp.cdb \
  0 smtp /usr/local/bin/fixcrio /var/qmail/bin/qmail-smtpd 2>&1 \
| /usr/local/bin/setuidgid qmaill \
  /usr/local/bin/multilog t n100 s1000000 /var/log/smtp &

# pop
env - PATH="/var/qmail/bin" \
/usr/local/bin/tcpserver -v -H -R -l0 \
  0 pop3 /var/qmail/bin/qmail-popup ${HOST} \
  /var/qmail/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
| /usr/local/bin/setuidgid qmaill \
  /usr/local/bin/multilog t n100 s1000000 /var/log/pop3 &

return 0
}

function qmail_stop()
{
    killall qmail-send
    killall tcpserver
    killall multilog
    return 0
}

function qmail_status()
{
    /var/qmail/bin/qmail-qstat
    return 0
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
        echo -n "Starting qmail services: "
        qmail_start
        RETVAL=$?
        echo
        ;;

  stop)
        echo -n "Stopping qmail services: "
        qmail_stop
        RETVAL=$?

        echo
        ;;
  status)
        qmail_status
        RETVAL=$?
        ;;
  restart)
        qmail_stop
        sleep 2
        qmail_start
        RETVAL=$?
        ;;
  *)
        echo "Usage: qmail {start|stop|status|restart}"
        exit 1
esac

exit $REVAL

あとは,

$ sudo /sbin/chkconfig --add qmail


qmail関連のログは,

以下に出力されるようになる.