큐메일을 설치하는 것을 설명합니다. 경험있는 시스템애드민은 소스배포판에 있는 INSTALL의 지시사항을 따라서 큐메일을 설치할 수 있습니다. INSTALL지시사항은 공식 설치지시사항입니다. 그것은 본문서인 lwq의 지시사항보다 복잡하고, 읽는 사람이 경험있는 시스템애드민과 멜애드민이라고 여깁니다.
-----------------------------------------------------------------------------
유의점: 다음의 지시사항을 읽으신다면 전체항목을 읽어서 전체과정을 익히시기
바랍니다.
-----------------------------------------------------------------------------
미리컴파일된 배포판관련 라이센싱제약때문에, 큐메일은 보통 소스코드배포판으로 설치합니다.
소스코드와 바이너리를 구분하시기 어렵다면, 집으로 피지를 배달한다고 가정하십시오. 바이너리버전피자는 즉시 먹을 수 있게 배달됩니다. 소스코드피자는 밀가루, 효모, 치즈, 토핑, 그리고 요리방법 등을 포함한 장비일체로 배달됩니다. 소스코드설치는 일을 좀더 많이 해야 하지만, 지시사항을 철저하게 따르면, 그 결과는 같거나 더 좋습니다. 직접 만들어 먹는 피자는 더 신선하고, 좋아하는 토핑을 맞춰먹을 수 있으며, 자신이 만든 피자에 대해, 그것이 어떻게 만들어졌는 지에 대해 더 많이 알게 됩니다.
소스코드설치를 자동으로 하는 방법을 제공하는 운영체제도 있습니다. 피자로 다시 비유하자면, 단추만 누르면 피자가 저절로 구워지도록 재료와 지시사항을 패키지하는 것입니다.
훌륭하지 않습니까?
실제로는 그렇게 좋지만은 아닌 방법입니다. 패키지로 묶기가 매우 힘들고, 생각대로 움직이지 않을 수가 있습니다. 또한 그것도 소프트웨어이므로, 다른것들처럼, 벅이 있을 수도 있습니다. 벅이 없더라도, 그 편리함은 그 만한 대가를 치루게 됩니다. 스스로 만들어보는 피자의 이점인 자신의 기호에 맞춰서 토핑을 조정하고, 피자가 어떻게 만들어지고, 어떻게 작용하는 지 등을 잃게 됩니다.
큐메일이 피자라면, 스스로 컴파일해볼 수도 있을지 모릅니다. 그런데, 피자가 아닙니다. 복잡한 시스템이 되어놔서 잘 운영하려면 설치자와 유지자는 잘 이해해야 합니다. 자동설치 큐메일이 수동설치판보다 설치하기에 쉽습니다만, 수동설치판이 설정하고 문제점을 해결하는 데 쉽습니다. 시스템에 큐메일을 한번만 설치하면 되지만, 때때로 재설정해야할 수도 있고, 생각대로 멜이 흐르지 않는 이유를 파악해야 할 수도 있습니다.
이래서, 저는 큐메일을 RedHat이나 기타 자동설치번들이 아닌 소스크드 tarball로 설치하시기를 권고합니다.
큐메일을 시스템에 설치하기 전에, 큐메일설치를 처음으로 한다면, 몇가지 고려사항이 있습니다.
큐메일은 대부분의 유닉스와 유닉스류 시스템에 설치되고 운영됩니다만 몇가지 필요사항이 있습니다.
오우케이, 이제 큐메일을 설치할 수 있도록 필요사항에 맞는 시스템을 준비하셨군요. 첫번째 단계는 큐메일과 다른 애드온의 소스코드를 다운로드하는 것입니다. 큐메일은 당연히 필요하고요, ucspi-tcp와 daemontools도 필요할 것입니다.
웹브라우저나 FTP 클라이언트를 이용해서 이 파일들을 가져오세요.
첫번째 할일은 프로그램을 컴파일하기에 필요한 툴을 갖추었는 지의 확인입니다. 이것을 결정하는 것은 사용중인 유닉스종류에 따릅니다. 말씀드릴 수 있는 가장 쉬운 방법은, 보장되지는 않지만, 해보는 겁니다.
----------------------------------------------------------------------------- 유의점: 이것들중 하나라도 통과하면, 다음 항목으로 넘어가셔도 됩니다. -----------------------------------------------------------------------------
$ cc cc: No input files specified $
여기까지 오셨으면, 이미 C 컴파일러와 tarball을 준비하신 겁니다. 타볼을 작업하실 디렉토리로 복사하거나 옮기세요. /usr/local/src가 좋은데, 이 경우에는 /usr/local/src/qmail를 세 패케지 모두에 사용할 수 있습니다.
mkdir -p /usr/local/src/qmail
mv *.tar.gz /usr/local/src/qmail
/usr/local/src/qmail에 세 패케지가 전부 있으므로, 그것들을 푸십시오. 룻이 아니라면 여기에서는 룻이 되셔야 합니다. 프롬트에서 다음과 같이 하세요:
su -
cd /usr/local/src/qmail
gunzip qmail-1.03.tar.gz
tar xvf qmail-1.03.tar
gunzip ucspi-tcp-0.84.tar.gz
tar xvf ucspi-tcp-0.84.tar
gunzip daemontools-0.61.tar.gz
tar xvf daemontools-0.61.tar
rm *.tar # 여유공간이 없을 때 하는 선택사항
qmail-1.03, ucspi-tcp-0.84, daemontools-0.61 등의 섭디렉토리가 생깁니다. qmail-1.03 디렉토리로 가시면 시작하겠습니다.
cd qmail-1.03
필요한 섭디렉토리는 큐메일 설치 프로그램이 만들므로, 큐메일 홈디렉토리만 만들어 주면 됩니다.
mkdir /var/qmail
그러면 다음 항목으로 갑니다.
------------------------------------------------------------------------------
유의점: 큐메일파일들을 /var가 아닌 다른 곳에 놓고 싶으시면, /var/qmail디렉토리에
그곳을 가리키는 심볼릭 링크를 만드시면 됩니다.
예를 들면, 다음과 같이 하시면 됩니다.
mkdir /var/qmail
ln -s /usr/man /var/qmail/man
mkdir /etc/qmail
ln -s /etc/qmail /var/qmail/control
ln -s /usr/sbin /var/qmail/bin
--------------------------------------------------------------------------------
필요한 사용자와 그룹을 만드는 가장 쉬운 방법은 작은 스크립트를 만들어서 하는 것입니다. 소스디렉토리에 INSTALL.ids 파일이 있습니다. 거기에는 여러 프랫폼에 해당하는 명령행이 있는데, 그 파일을 다른 이름으로 복사해서 편집하면 빠르고 쉽습니다.
cp INSTALL.ids IDS
좋아하시는 에디터로 필요한 행을 빼고 다 지웁니다. 예를 들면, 편집후에 FreeBSD에 대한 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
실행하려면, chmod를 써서 실행파일로 만드시거나 sh로 실행하십시오.
chmod 700 IDS ./IDS
/bin/sh IDS
스크립트의 실행이 완료되어 사용자와 그룹이 생기면 다음항목으로 갑니다.
그러나, INSTALL.ids에 해당 시스템이 없으면 어쩝니까? 수동으로 그것들을 만들어야 합니다. 좋아하는 에디터를 사용해서 /etc/group을 편집하세요. 다음 두 줄을 그 파일끝에 첨가하십시오.
qmail:*:2107: nofiles:*:2108:
------------------------------------------------------------------------- 유의점: 2107과 2108이 사용중인 것이 아님을 확인하셔야 합니다. -------------------------------------------------------------------------
다음으로는, vipw를 이용해서 다음 줄들을 그 파일의 끝에 붙이십시오. (대부분의 시스템에 vipw가 있지만, 없으면 에디터로 /etc/passwd를 편집합니다.)
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
------------------------------------------------------------------------------------
유의점: 7790-7796이 사용중이지 않는다는 것과 2107과 2108이 위에서 만든 그룹아이디와
같다는 것을 확인하십시오.
------------------------------------------------------------------------------------
이런 것들을 해당파일의 끝에만 첨가해야 하는 것은 아니지만, 그래야 설명하기가 제일 쉽습니다.
다음 항목으로 가실 준비가 되셨군요.
이제 큐메일을 컴파일하실 준비가 되었습니다.
'컴파일환경을 검증한다'항목에서, C 컴파일러를 지정하셨습니다. 그것이 cc가 아니거나 디렉토리가 PATH환경변수에 있지 않으면 conf-cc와 conf-ld를 편집하십시오. 컴파일러가 gcc이고, PATH에 있다고 하면, conf-cc와 conf-ld를 가볍게 편집하고, cc를 gcc로 바꾸십시오.
그렇게 하셨으면 명령행 프롬트에 다음과 같이 하세요.
make setup check
컴파일이 끝나면, 설치후설정을 하셔야 합니다. 이 일을 쉽게 해주는 스크립트가 두어개 있습니다.
DNS가 제대로 설정되었다면, 다음 스크립트를 실행하기만 하면 됩니다.
./config
어떤 이유로 config가 DNS에서 hostname을 찾지 못하면, config-fast script를 실행하셔야 합니다.
./config-fast 호스트네임.완전.경로
예를 들면, 도메인이 example.com이고, 당신컴퓨터의 호스트네임이 dolphin이라면, config-fast를 다음과 같이 실행합니다.
./config-fast dolphin.example.com
큐메일이 시스템에 설치되어서 가동될 준비가 되었습니다! 다음항목은 큐메일을 가동하고 시험하는 단계를 안내합니다.
먼저번에 qmail, ucpsi-tcp, daemontools 타볼을 풀었습니다. 예제에서 그것들을 /usr/local/src/qmail에 풀었습니다. 자 ucpsi-tcp디렉토리로 옮깁시다.
cd /usr/local/src/qmail/ucspi-tcp-0.84
'컴파일을 하세요'항목에서, conf-cc와 conf-ld를 고치셨으면, 이 디렉토리에서도 똑같이 해줍니다.
그런뒤에 다음과 같이 하십시오.
make make setup check
daemontools 컴파일디렉토리로 이통합니다.
cd /usr/local/src/qmail/daemontools-0.61
또 한번, conf-cc와 conf-ld를 qmail과 ucspi-tcp 컴파일시 고쳤으면, 이 디렉토리에서도 똑같이 합니다.
그리고 다음과 같이 합니다.
make make setup check
/var/qmail/boot디렉토리에는 여러가지 설정에 대한 본보기 큐메일 붓 스크립트가 있습니다. /var/spool/mail 대 $HOME/Mailbox, procmail 또는 dot-forward를 이용하기, 그리고 이것들의 다양한 결합. 한번 부담없이 검토해보시기 바랍니다. 우리는 설치를 위해서 다음을 이용하겠습니다.:
#!/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`"
에디터로 위의 내용을 /var/qmail/rc로 만드시고, 다음과 같이 명령합니다.
chmod 755 /var/qmail/rc mkdir /var/log/qmail
이쯤에서, .qmail파일이 전달하지 못하는 메세지들에 대한 기본전달모드를 결정해야 합니다. 다음의 테이블에 몇가지 공통선택이 간략히 예시되어 있습니다.
Mailbox
format Name Location defaultdelivery Comments
mbox Mailbox $HOME ./Mailbox most common, works
with most MUA's
maildir Maildir $HOME ./Maildir/ more reliable, less
MUA support
mbox username /var/spool/mail See INSTALL.vsm traditional UNIX
mailbox
정보를 더 원하시면 INSTALL.mbox, INSTALL.maildir, INSTALL.vsm 등을 보십시오.
기본 멜복스 형태를 고르시려면, 위의 테이블의 defaultdelivery 값을 /var/qmail/control/defaultdelivery에 적어넣으십시오. 예) 표준 큐메일 Mailbox 전달을 선택하시려면 다음과 같이 합니다.
echo ./Mailbox >/var/qmail/control/defaultdelivery
----------------------------------------------------------------------------------
유의점: defaultdelivery는 표준 큐메일 통제 파일이 아닙니다. 위의 /var/qmail/rc파일의
특징입니다.
----------------------------------------------------------------------------------
/var/qmail/rc 스크립트를 수동으로 실행하셔야 하면, 큐메일은 부분가동합니다. 그러나, 우리는 큐메일이 시스템이 부팅할때마다 자동으로 가동하기를 원하고, 시스템이 정지할 때는 깨끗하게 꺼지기를 원합니다.
이것은 startup/shutdown스크립트를 다음과 같이 작성하면 됩니다.
#!/bin/sh
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://Web.InfoAve.net/~dsill/qmail-script-dt61.txt에서도 구할 수 있습니다.
-------------------------------------------------------------------------------------
유의점: 시스템이 재부팅한다음에 큐메일이 곧 없어지면, 스크립트의 "start"항목에 있는
env 명령을 nohup으로 덧붙입니다.
예)
nohup env - PATH="$PATH" svscan &
-------------------------------------------------------------------------------------
에디터로 스크립트를 만들거나 웹브라우저로 다운로드해서 시스템의 init.d디렉토리에 설치하시는데, 다음과 같은 장소가 됩니다.
스크립트를 qmail이라고 이름붙이십시오. 스크립트를 몇개의 rc디렉토리에 링크시키셔야 합니다. 이 데렉토리들은 rcN.d같이 되어있는데, N은 적용 runlevel입니다. 기동디렉토리 구조가 복잡해서 본 문서에는 다루지 않습니다. 그러니 간단한 지시사항이 맘에 차지 않으시면 시스템문서를 참조하십시오. rc 디렉토리는 다음중 하나일 겁니다.
링크를 만드시는데, 다음과 같이 하십시오. RCDIR를 시스템의 rc 디렉토리의 장소로 바꾸십시오.
ln -s ../init.d/qmail RCDIR/rc0.d/K30qmail
ln -s ../init.d/qmail RCDIR/rc1.d/K30qmail
ln -s ../init.d/qmail RCDIR/rc2.d/S80qmail
ln -s ../init.d/qmail RCDIR/rc4.d/S80qmail
ln -s ../init.d/qmail RCDIR/rc5.d/S80qmail
ln -s ../init.d/qmail RCDIR/rc6.d/K80qmail
--------------------------------------------------------------------------------------
유의점: 전단계의 숫자는 매우 시스템에 의존합니다. 그렇지만 다소 유연합니다.
Sendmail이 현재 설치되어 있으면, "find RCDIR -name "*sendmail" -print" 명령을
실행하면 시스템에 적용할 수 있는 숫자를 알려줍니다.
--------------------------------------------------------------------------------------
이제 큐메일서비스를 위해 감독디렉토리를 만드십시오.
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
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb \
-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
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
그런 다음에, 로그디렉토리를 만듭니다.
mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd
기동스크립트에 실행권한을 부여하고, 실행경로에 있는 디렉토리로 링크합니다.
# substitute the correct location of your rc dir on the next two lines
chmod 755 /etc/init.d/qmail
ln -s /etc/init.d/qmail /usr/local/sbin
로컬호스트가 SMTP를 통해서 멜을 삽입 (inject)하도록 합니다.
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
/usr/local/sbin/qmail cdb
큐메일과 현존하는 MTA, 대개 Sendmail, 두개를 사용할 수도 있지만, 그렇게 하지 않을 것을 강력히 권고합니다. 그리고, 솔직히 말해서, 이 글을 읽고 계신다면, 그게 무엇을 뜻하는 지 모르실 겁니다. :-)
현존 MTA가 Sendmail이라면, init.d 스크립트를 stop인수를 주어 실행하여 멈출 수 있습니다. 예) 다음 중 하나가 유효할 겁니다.
/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의 PID를 알아낸 뒤에, 다음과 같이 해서 멈춥니다.
kill PID-of-sendmail
MTA가 Sendmail이 아니면, 해당문서에서 바른 멈춤 절차를 참고하십시오.
시스템에서 기존의 MTA를 완전히 제거하는 것도 고려해볼 만합니다. 적어도 init.d 스크립트를 무력하게 하면 시스템이 재부팅할 때 다시는 가동하지 않습니다.
레드햇리눅스에서는 다음과 같이 해서 Sendmail을 제거합니다.
rpm -e --nodeps sendmail
끝으로, 기존의 /usr/lib/sendmail을 큐메일판으로 바꿉니다.
mv /usr/lib/sendmail /usr/lib/sendmail.old # 에러를 무시하세요 mv /usr/sbin/sendmail /usr/sbin/sendmail.old # 에러를 무시하세요 chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # 에러를 무시하세요 ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin
이제는 큐메일가동이 가깝습니다. 끝단계는 시스템앨리어스를 두어개 만드는 것입니다.
모든 큐메일설치에서는 시스템앨리어스를 세개 만들어야 합니다.
앨리어스 목적 postmaster RFC 821 요구사항이며, 멜애드민 (당신)을 가리킵니다. mailer-daemon 바운스멜에 대한 사실상의 표준수취인 root 특권계정에서 온 멜을 시스템애드민에게 보낸다.
이 앨리어스들을 만들려면, 그것들 하나하나가 어디에 놓여져야 하는 지 (로컬사용자, 또는 원격주소) 결정하고, .qmail파일을 만들어서 갖다놓으면 됩니다. 예를 들어, 로컬사용자 dave는 시스템과 멜의 애드민이라고 하면 다음과 같이 합니다.
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
마지막으로, 큐메일을 가동합니다.
/usr/local/sbin/qmail start
큐메일이 지금쯤 운행하고 있을겁니다. TEST.deliver, TEST.receive에 있는 지시사항을 따르시면 제대로 작동하고 있는 지 검사할 수 있습니다. 이들 지시사항을 이용하면, 로그는 splogger가 아닌 accustamp와 cyclog가 만든다는 것을 알아두십시오.