이 제 설치합니다.
make setup check
다음으로 daemontools를 설치합니다. daemontools는 xinetd보다 진보된 수퍼데몬이라고 각종 메뉴얼에서 소개하고 있습니다. 자세한 정보는 아래 링크 참고...
http://ejlabs.net/txt/daemontools.html
qmail 의 실행 파일을 daemontools가 설치되는 /services 디렉토리에 링크를 걸어 두어 사용하는 방식을 취합니다. 그러면 daemontools가 알아서 프로세스를 감시하며 최적의 실행 상태를 유지해 줍니다. qmail이 느닷없이 죽으면 daemontools가 다시 살리기도 한다는군요.
mkdir /package
chmod 1755 /package
tar xfz daemontools-0.76.tar.gz -C /package
cd /package/admin/daemontools-0.76
gcc버전이 3.4.5라면 파일의 최상단에 #include <errno.h>를 추가합니다.
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...
설 치합니다. package라는 서브디렉토리 안의 install 파일을 실행합니다.
설 치되었으면 /command 디렉토리가 생성되며 안에 관련 파일들이 위치하게 됩니다.
레드햇 계열의 경우 /etc/inittab 파일 최하단부에 아래와 같은 행이 추가됩니다.
우 분투 7.x 이상 버전부터는 /etc/inittab 파일이 사라지고 /etc/event.d 디렉토리 안에 런레벨 차원에서 구동할 프로그램들을 등록하게 되어 있습니다. 그래서 아래와 같이 작업해 줍니다.
# start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /command/svscanboot
※ 참고 링크: http://fxp0.org.ua/2007/apr/21/svscanboot-and-upstart-ubuntu-feisty
이 제 qmail 1.0.3 설치 순서입니다.
본 문서에서는 전통적인 방법(?)인 오리지날 qmail-1.03에 칵테일패치를 적용하는 방법을 쓰지 않고 knetqmail-1.06을 적용하는 방법을 설명합니다. 이 방법을 적용하려는 이유가 중요한데 칵테일 패치에는 chkuser 패치가 포함되어 있지 않기 때문입니다. qmail의 chkuser 패치는 메일서버에 존재하지 않는 메일 계정으로 메일이 도착할 경우 바로 반송처리하는 기능을 수행하는데 큐메일의 특성상 한 번 메일이 도착하게 되면 수신자 주소가 존재하지 않는 메일 계정일지라도 일단 받아 처리를 시도하게 되며 이렇게 될 경우 'double bounce' 현상을 초래하여 메일서버에 부하를 증가시켜 성능 저하를 유발하기 때문에 chkuser는 없어서는 안 될 아주 중요한 기능 중의 하나입니다. 특히 대다수 스패머들이 존재하지 않는 메일 계정으로 무작위 발송을 시도하기 때문에 더더욱 그렇죠. 그 외에도 knetqmail에는 칵테일 패치에 포함되지 않은 유용한 패치들이 여럿 되기 때문에 통합패키지인 knetqmail을 이용할 것을 적극 추천합니다.
아, 참고로 중요한 점이 knetqmail-1.06을 사용하려면 반드시 vpopmail이 설치되어 있어야 한다는 점입니다.
qmail + checkpassword 조합으로 쓰시려는 분들은 본 문서의 방법을 적용할 수 없다는 점에 유의하시기 바랍니다.
이 미 칵테일 패치를 적용한 qmail + vpopmail 조합으로 메일서버를 운영중이신 분들은 그 위에 knetqmail을 그대로 덮어씌우면 됩니다.
knetqmail-1.06에 포함된 패치 정보는 아래 링크 참고 바랍니다.
http://qmail.kldp.org/phpbb/viewtopic.php?t=7694&start=0&postdays=0&postorder=asc&highlight
큐 메일 소스를 받아 압축을 풀고 gcc 버전과의 호환 문제 해결을 위해 error.h 파일 최상단에 #include <errno.h> 구문을 삽입하고 설치 들어갑니다.
knetqmail-1.06은 vpopmail까지 설치한 뒤에 적용 가능합니다. qmail 설치 단계에서는 아무런 패치를 가하지 않은 오리지날 qmail만을 컴파일 설치합니다.
wget ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz
tar xvfpz qmail-1.03.tar.gz
cd qmail-1.03
vi error.h
#ifndef ERROR_H
#define ERROR_H
qmail 구동에 필요한 qmail 전용 사용자/그룹을 생성합니다.
OS별로 조금씩 다릅니다. 리눅스의 경우는 아래와 같이 생성해 주면 됩니다. INSTALL.ids 파일에 명시되어 있습니다.
useradd -r -g nofiles -d /var/qmail/alias alias
useradd -r -g nofiles -d /var/qmail qmaild
useradd -r -g nofiles -d /var/qmail qmaill
useradd -r -g nofiles -d /var/qmail qmailp
groupadd -r qmail
useradd -r -g qmail -d /var/qmail qmailq
useradd -r -g qmail -d /var/qmail qmailr
useradd -r -g qmail -d /var/qmail qmails
이 제 설치합니다.
make setup check
make setup check 시 아래와 같은 에러가 나는 경우가 있습니다.
/bin/sh: nroff: command not found
make: *** [qmail-local.0] 오류 127
groff 패키지를 설치하면 됩니다.
이제 각종 설정에 들어갑니다. 별다른 설명은 않겠습니다.
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail
그러나 위 설정은 큐메일을 daemontools를 이용해 구동하지 않을 시 syslod에 로그를 기록하기 위한 옵션이므로 본 문서처럼 daemontools와 연동해서 큐메일을 구동할 때엔 불필요합니다.
http://qmail.kldp.org/phpbb/viewtopic.php?t=7023
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod 1755 /var/qmail/supervise/qmail-send
chmod 1755 /var/qmail/supervise/qmail-smtpd
exec /var/qmail/rc
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1
smtp 인증 방식을 어떤 것으로 적용하느냐에 따라 /var/qmail/supervise/qmail-smtpd/run 파일 작성법이 조금씩 달라집니다. vpopmail과 연동해서 사용하려면 위 내용이 조금 달라지므로 뒤에 가서 다시 설명합니다.
따옴표 작성 시 '(apostrophe)가 아닌 `(grave accent)임에 유의합니다.
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail/smtpd
실행 파일에 퍼미션을 아래와 같이 부여합니다.
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
smtp 로그 파일 기록을 위한 작업
chown qmaill /var/log/qmail /var/log/qmail/smtpd
릴레이 규칙을 설정하기 위한 /etc/tcp.smtp 파일을 만듭니다.
만 들어진 /etc/tcp.smtp 파일을 cdb 형식의 파일로 변경합니다.
qmail 은 기본적으로 root로는 메일 수신이 안되도록 설계되어 있기에 관리자 계정으로 수신되는 메일을 일반계정으로 포워딩하도록 alias를 설정해 줍니다. 여기서 server는 root, postmaster 등으로 오는 메일을 받을 일반 계정입니다.
물 론 server 계정은 나중에 설명할 vpopmail 설치 과정까지 밟은 후 생성해 주어야 하겠죠.
alias용 계정은 아무거나 해도 상관 없습니다.
echo server@foobar.com > /var/qmail/alias/.qmail-postmaster
echo server@foobar.com > /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-*
여러 응용 프로그램들 중에서는 아직까지도 sendmail를 사용하는 경우가 많기 때문에 qmail 바이너리를 기존 sendmail 바이너리가 있던 경로에 링크를 시켜 주는 것이 좋습니다. 대표적인 예로 제로보드를 들 수 있습니다. php 함수로 메일을 발송하려 할 때 제로보드 기본 소스로는 /usr/bin/sendmail을 찾기 때문이죠.
본 게시물에서는 sendmail을 삭제하지 않고 qmail을 설치하는 법을 다루고 있습니다. 그러므로 기존 sendmail 바이너리는 sendmail.orig로 이름만 바꾸어 백업해 놓고 qmail 바이너리를 그 자리에 링크해 놓는 것이 추후 sendmail로 원복해야 할 상황이 발생할 때를 대비할 수 있어서 좋습니다.
센 드메일이 실행되어 있다면 센드메일을 먼저 내린 뒤 아래와 같이 작업해 줍니다.
mv /usr/sbin/sendmail /usr/sbin/sendmail.orig
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
오리지날 qmail 설치는 이것으로 끝났습니다. 실행을 위한 스크립트를 작성합니다.
레드햇 계열의 init 스크립트는 아래와 같이 작성합니다.
#!/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
case "$1" in
start)
echo "Starting qmail"
if [ -e /service/qmail-send ] ; then
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-send /service/
fi
if [ -e /service/qmail-smtpd ] ; then
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-smtpd /service/
fi
if [ -e /service/vpop ] ; then
if svok /service/vpop ; then
svc -u /service/vpop
else
echo vpop supervise not running
fi
else
ln -s /var/qmail/supervise/vpop /service/
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
rm -f /service/qmail-smtpd
echo " qmail-send"
svc -dx /service/qmail-send /service/qmail-send/log
rm -f /service/qmail-send
echo " vpop"