3. Qmail 설치

자... 필요한 파일들이 모두 준비되었다면 일단 Qmail 을 설치한다.

이미 qmail(아무런 패치도 가하지 않은) 을 설치한 시스템 이라면 다음장인 vpopmail 로 넘어간다.

만약 당신이 열심히 sendmail 이 돌아가고 있는 서버에 설치를 해야 한다 해도 걱정할것은 전혀 없다. 이 문서를 끝까지 읽고 모든 설정을 마친후 sendmail 에서 qmail 로의 전환은 수초에 끝낼수 있으며, qmail 데몬을 시동하기 전까지는 아무런 영향도 미치지 않는다. 필자도 하루에 수만통을 배달하는 서버들을 qmail로 전환하는데 아무런 장애도 주지 않았다.

다음 순서대로 하면 되는데 하나라도 잊거나 틀리면 문제가 생기니 주의 하도록

3.1. qmail 컴파일, 설치

일단 타볼을 풀고
tarx qmail-1.03.tar.gz
cd qmail-1.03

다음 디렉토리를 만든다.

mkdir /var/qmail

INSTALL.ids 를 편집한다. 다음과 같이 리눅스 항목들만 놔누고 명령어들을 언코멘트 시킨다음 저장. 리눅스가 아니라면 알아서 하세요 ;-)

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 

sh INSTALL.ids 해주면 필요한 유저,그룹이 생성된다. (시간이 남아도는 사람은 위 명령들을 하나하나 입력해도 좋다 :-))

Qmail 컴파일 하기

make
make setup check

다음 기본 control 파일들의 설정을 위해

./config

이것이 정상적으로 실행 되었다면 /var/qmail/control/ 안에는 qmail이 정상적으로 작동하기 위한 설정 파일들이 생겨야 한다. 만약 그렇지 않다면 서버의 DNS 설정에 문제가 있는것이다. 더 자세한것은 qmail 문서를 참조하라

이쯤에서 qmail을 위한 몇가지 부수적인 프로그램들을 (ucspi-tcp , daemontools , rblsmtpd, autorespond)을 설치한다. 다음과 같이 간단하다.

tar xzf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check

tar xzf daemontools-0.70.tar.gz
cd daemontools-0.70
make
make setup check

tar xzf rblsmtpd-0.70.tar.gz
cd rblsmtpd-0.70
make setup check

tar xzf autorespond-1.0.0.tar.gz
cd autorespond-1.0.0
gcc -Wall -o autorespond autorespond.c
cp autorespond /usr/local/bin/

모두 이상없이 설치가 되었다면 다시 qmail 을 위해 파일을 만든다.

vi /var/qmail/rc

#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail

이 파일에 실행 퍼미션을 준다.

chmod a+x /var/qmail/rc

다음은 큐메일 데몬을 위한 디렉토리와 파일들을 생성.

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
ALIAS_UID=`id -u alias`
ALIAS_GID=`id -g alias`
exec /usr/local/bin/softlimit -m 2000000 \
	/usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \
	-u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1

위와 같이 alias 의 UDI,GDI 를 사용 한다.

/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

다음은 qmail-smtpd 를 위한 로그 디렉토리 만들기

mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd

다음 파일에는 qmail smtp 데몬이 메일을 중계할 주소를 적어주는 것이다. 192.168.1.1 은 당연히 설치할 서버의 주소로 바꿔야 한다. 그외 메일을 중계 해줄 서버의 주소가 있다면 같은 형식으로 추가한다.

/etc/tcp.smtp 의 내용

127.0.0.1:allow,RELAYCLIENT=""
192.168.1.1:allow,RELAYCLIENT=""

후에 이 파일에 변경이 있는 경우 다음의 qmail 부트 스크립트를 이용해 다음과 같이 한다.

/etc/rc.d/init.d/qmail cdb

3.2. 알리아스 설정

만약 주 도메인의 메일 계정들도 모두 vpopmail 로 관리할 것이 아니라면 (필자는 주 도메인의 메일 계정들도 모두 vpopmail 로 관리할것을 권장한다.) 몇가지 알리아스를 설정해 준다. 여기서 silver 는 root, postmaster 등으로 오는 메일을 받을 일반 계정이다.

cd ~alias
echo silver > .qmail-mailer-daemon
echo silver > .qmail-postmaster
echo silver > .qmail-root

3.3. qmail 부트 파일

다음은 qmail 데몬의 부트 스크립트이다.

#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 80 80
# description: sendmail을 대체하는 빠르며, 안정적이고, 유연한 MTA

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

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

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
    ;;
  doqueue|alrm)
    echo "Sending ALRM signal to qmail-send."
    svc -a /var/qmail/supervise/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    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 <<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 -- sends qmail-send ALRM, scheduling queued messages for delivery
 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 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0

위의 것을 그대로 복사,저장 하거나 이곳에서 받는다. http://kltp.kldp.org/tmp/qmail.txt. 이것을 /etc/rc.d/init.d/ 에 qmail 이라는 이름으로 저장한후 실행 퍼미션을 준다. 다음 ntsysv 실행시키면 qmail 이라는 새로운 항목이 보일것이다. 리부팅 할때 qmail 데몬이 실행되도록 체크해준다. 당연히 sendmail 은 언체크. (redhat 이외 계열의 배포본은 알아서 하세요. 부팅할때 뜨도록 ;-))

qmail 설치 끝~

복잡 한듯 싶지만 알고 보면 그렇지도 않다 ;-) 이쯤에서 잊은것이 없는지 처음부터 하나하나 다시 살펴보는 것도 좋겠다. 잘 설치된 qmail을 마지막 그 순간(?)까지 잘 놔두고 다음장으로 넘어가자.