웹마짱구's 블로그

qmail 인스톨 가이드

Linux/Linux : 2007/02/06 17:07


출처/원문 : rootman

안녕하세요.
사이트 운영자 입니다..

qmail 설치하시면서 많이 힘드셨죠?

저도 전에 수많은 실패를 거듭한후 최종적으로 정리한 것들입니다.

qmail.kldp.org,  기존의 webmail.kldp.org 의 것들을 많이 참조를 하였습니다

주의사항.
1. mysql.h 화일 위치를 분명히 아셔야 합니다.
   대부분 화일을 /usr/local 쪽에 설치를 하니까 아래처럼 하면 위치정보를 아실겁니다.
   [root@ns1 root]# find /usr/local/ -name "mysql.h"
   /usr/local/mysql/include/mysql/mysql.h

   이게 왜 필요하냐면, 아래꺼 설치하면서 대부분 mysql.h 위치정보가 틀려 에러를 발생합니다.
   그러면, 작업디렉토리의 보통 Makefile 환경화일이 있는데,
   최상단의 mysql 위치정보와 mysql.h 구문을 찾으셔서
   include "/usr/local/mysql/include/mysql/mysql.h"  으로 변경해주시면 됩니다.
   혹시.. 에러나시는 분들을 위해!  ^^


2. qmail 스크립트를 작성하실때 주의사항
   절대로 라인 끝 부분에 공백이 있나 없나를 반드시 체킹하셔야 합니다.
   있으면 당연코 에러를 발생시킵니다.. 조심하세요.
   이거 때문에 고생한게 하나두개가 아닙니다.


3. qmail에 대해 기본적인것들만 설치 방법을 제공해 드립니다.
   vpopmail, 등등은 설명을 피하고, 가장 골치아픈 qmail 만 설명드리도록 하겠습니다.


4. MTA 를 sendmail 이 아닌 qmail을 쓸 것이므로 삭제또는 이름 변경
   [root@ns1 root]# rpm -e sendmail-devel sendmail-cf sendmail
   [root@ns1 root]# ps -ef | grep sendmail로 sendmail이 떠 있는지 확인
   [root@ns1 root]# /etc/init.d/sendmail stop
   [root@ns1 root]# mv /etc/rc3.d/S88sendmail /etc/rc3.d/K88sendmail
   [root@ns1 root]# mv /usr/lib/sendmail /usr/lib/sendmail.old
   [root@ns1 root]# mv /usr/sbin/sendmail /usr/sbin/sendmail.old



===========================================================================
설치준비
-----------------------------------
apache-1.3.29
php-4.3.6
mysql-3.23.57
qmail-1.03
ucspi-tcp-0.88
daemontools-0.76
libiconv-1.7
expat-1.95.2
--------------------------------------------------------------
LINUX 7.1이상에서 문제가 되는 time.h에 대한 링크를 수정한다.
--------------------------------------------------------------
# mv /usr/include/sys/time.h /usr/include/sys/time.h.ori
# ln -s /usr/include/time.h /usr/include/sys/time.h

주의 : time.h 는 ucspi-tcp, imap 설치후 원상태로 변경하셔야 합니다.
--------------------------------------------------------------


Qmail 설치
--------------------------------------------------------------
1. qmail-1.03-linux.tar.gz의 압축을 풀고 소스디렉토리로 경로를 이동한다.
   [root@ns1 root]# gzip -d qmail-1.03-linux.tar.gz
   [root@ns1 root]# tar xvf qmail-1.03-linux.tar
   [root@ns1 root]# cd qmail-1.03


--------------------------------------------------------------
2. qmail설치디렉토리를 생성한다.
   [root@ns1 root]# mkdir /var/qmail


--------------------------------------------------------------
3. qmail계정을 생성한다.
   [root@ns1 root]# groupadd nofiles
   [root@ns1 root]# useradd -g nofiles -d /var/qmail/alias alias
   [root@ns1 root]# useradd -g nofiles -d /var/qmail qmaild
   [root@ns1 root]# useradd -g nofiles -d /var/qmail qmaill
   [root@ns1 root]# useradd -g nofiles -d /var/qmail qmailp
   [root@ns1 root]# groupadd qmail
   [root@ns1 root]# useradd -g qmail -d /var/qmail qmailq
   [root@ns1 root]# useradd -g qmail -d /var/qmail qmailr
   [root@ns1 root]# useradd -g qmail -d /var/qmail qmails


--------------------------------------------------------------
4. 컴파일, 설치한다.
   [root@ns1 root]# make && make setup check

   여기에서 에러나시는 분들 상단의 "주의사항"을 꼭 읽어보세요..!!


--------------------------------------------------------------
Ucspi-tcp 설치
--------------------------------------------------------------
1. ucspi-tcp-0.88.tar.gz의 압축을 풀고 소스디렉토리로 경로를 이동.
   [root@ns1 root]# gzip -d ucspi-tcp-0.88.tar.gz
   [root@ns1 root]# tar xvf ucspi-tcp-0.88.tar
   [root@ns1 root]# cd ucspi-tcp-0.88

--------------------------------------------------------------
2. 컴파일, 설치한다.
   [root@ns1 root]# make && make setup check


--------------------------------------------------------------
Daemontools 설치
--------------------------------------------------------------
1. daemontools-0.76.tar.gz의 압축을 풀고 소스디렉토리로 경로를 이동
   [root@ns1 root]# gzip -d daemontools-0.76.tar.gz
   [root@ns1 root]# tar xvf daemontools-0.76.tar
   [root@ns1 daemontools-0.76]# cd admin/daemontools-0.76
   [root@ns1 daemontools-0.76]# package/install
   [root@ns1 daemontools-0.76]# cd command
   [root@ns1 commaond]# mv * /usr/local/bin/
   [root@ns1 root]# rm -rf /command


   주의 : daemontools 설치후 /etc/inittab 의 제 하단에
   SV:123456:respawn:/command/svscanboot 가 추가되는데 이를 주석처리한다
   svscanboot, svscan 데몬이 실행되는데 이를 kill 한다.


--------------------------------------------------------------
Qmail 설정
--------------------------------------------------------------
1. qmail 소스디렉토리로 경로를 이동한다.

2. qmail control파일들을 생성한다.
   [root@ns1 qmail-1.03]# ./config-fast rootman.co.kr


3. qmail log디렉토리와 script들을 생성한다.
   [root@ns1 qmail-1.03]# mkdir -p /var/qmail/supervise/qmail-send/log
   [root@ns1 qmail-1.03]# mkdir -p /var/qmail/supervise/qmail-smtpd/log
   [root@ns1 qmail-1.03]# chmod +t /var/qmail/supervise/qmail-send
   [root@ns1 qmail-1.03]# chmod +t /var/qmail/supervise/qmail-smtpd


4. [root@ns1 root]# vi /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc


5. [root@ns1 root]# vi /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail


6. [root@ns1 root]# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 8000000 \
/usr/local/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 \
/var/qmail/bin/qmail-smtpd \
/bin/checkpassword /bin/true 2>&1


7. [root@ns1 root]# vi /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd


8. 퍼미션변경
[root@ns1 root]# chmod 755 /var/qmail/supervise/qmail-send/run
[root@ns1 root]# chmod 755 /var/qmail/supervise/qmail-send/log/run
[root@ns1 root]# chmod 755 /var/qmail/supervise/qmail-smtpd/run
[root@ns1 root]# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run


9. 세부
[root@ns1 root]# mkdir -p /var/log/qmail/smtpd
[root@ns1 root]# chown qmaill /var/log/qmail /var/log/qmail/smtpd

[root@ns1 root]# cd ~alias
[root@ns1 root]# echo chanho > .qmail-mailer-daemon
[root@ns1 root]# echo chanho > .qmail-postmaster
[root@ns1 root]# echo chanho > .qmail-root
[root@ns1 root]# echo # > .qmail-doublebounce

"chanho" 라는 로컬계정은
- mailer-daemon,
- postmaster,root
- qmail-doublebounce

로 전송된 메일을 수신한다, "#" 은 곧바로 삭제를 뜻한다


10. qmail 부트스크립트생성
[root@ns1 root]# vi /etc/init.d/qmail

#-------------------------------------------------------------------------------------------
#!/bin/sh
# Source function library.
# . /etc/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 < 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

#-------------------------------------------------------------------------------------------


11. 퍼미션
[root@ns1 root]# chmod 755 /etc/init.d/qmail
[root@ns1 root]# ln -s /etc/init.d/qmail /etc/rc3.d/S88qmail


12. tcp.smtp RELAY생성
# vi /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
111.111.111.111:allow,RELAYCLIENT=""
:allow

주의 :
111.111.111.111 은 로컬 계정을 뜻하며, smtp access를 지원한다는 의미이다



13. qmail reload
[root@ns1 root]# /etc/init.d/qmail cdb
또는
[root@ns1 root]# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp


14. sendmail 화일 심볼릭 링크설정
[root@ns1 root]# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
[root@ns1 root]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail


15. qmail rc파일생성
[root@ns1 root]# cp /var/qmail/boot/proc /var/qmail/rc
[root@ns1 root]# vi /var/qmail/rc
#!/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="/var/qmail/bin:$PATH" \
qmail-start '|preline procmail' splogger qmail
다음과 같이 수정한다.
qmail-start '|preline procmail ./Maildir/' splogger qmail


16. qmail 시작
[root@ns1 root]# /etc/init.d/qmail start




--------------------------------------------------------------
Qmail 테스트
--------------------------------------------------------------
1. 테스트 계정에 메일박스 생성
[root@ns1 root]# su - chanho
[root@ns1 chanho]# /var/qmail/bin/maildirmake ~/Maildir
[root@ns1 chanho]# echo ./Maildir/ > ~/.qmail
[root@ns1 chanho]# exit


2. 메일 송/수신 테스트
[root@ns1 root]# echo to: chanho | /var/qmail/bin/qmail-inject
[root@ns1 root]# su - chanho
[root@ns1 root]# find ~chanho/Maildir/new/
[root@ns1 root]#
    -rw------- 1 nobody nobody 525 Dec 30 12:03 1009681426.28068.webmail



------------------------------------------------------------------------------------------
imap 설치
------------------------------------------------------------------------------------------
[root@ns1 root]# rpm -qa|grep imap        <----- imap 이 설치 되어 있는가 확인
[root@ns1 root]#  make slx
     리눅스에 맞게 컴파일하기 위해 make 뒤에 slx 옵션을 붙여준다.
     컴파일이 완료되면 imapd 디렉토리에 imapd가 ipopd디렉토리에는 ipop2d, ipop3d가 생성된다.

[root@ns1 root]# cp ipopd/ipop[23]d /usr/sbin/
[root@ns1 root]# cp imapd/imapd /usr/sbin/  


[root@ns1 xinetd.d]# cat > imapd    
service imap
{
        disable = no
        socket_type = stream
        wait  = no
        user = root
        server = /usr/sbin/imapd
        log_on_success += DURATION USERID
        log_on_failure += USERID
}

[root@ns1 xinetd.d]# cat > ipop3d
service pop3
{
        disable = no
        socket_type = stream
        wait  = no
        user = root
        server = /usr/sbin/ipop3d
        log_on_success += USERID
        log_on_failure += USERID
}


--------------------------------------------------------------
Iconv 설치
--------------------------------------------------------------
1. libiconv-1.7.tar.gz의 압축을 풀고 소스디렉토리로 경로를 이동한다.
[root@ns1 root]# gzip -d libiconv-1.7.tar.gz
[root@ns1 root]# tar xvf libiconv-1.7.tar
[root@ns1 root]# cd libiconv-1.7


2. 컴파일, 설치한다.
[root@ns1 libiconv-1.7]# ./configure && make && make install


--------------------------------------------------------------
Expat 설치
--------------------------------------------------------------
1. expat-1.95.2.tar.gz의 압축을 풀고 소스디렉토리로 경로를 이동한다.
[root@ns1 root]# gzip -d expat-1.95.2.tar.gz
[root@ns1 root]# tar xvf expat-1.95.2.tar
[root@ns1 root]# cd expat-1.95.2

2. 컴파일, 설치한다.
[root@ns1 expat-1.95.2]# ./configure && make && make install


--------------------------------------------------------------
checkpassord 설치
--------------------------------------------------------------
1. checkpassword-0.90.tar.gz 의 압축을 풀고 소스디렉토리로 경로를 이동
[root@ns1 root]# tar xvfz checkpassword-0.90.tar.gz
[root@ns1 root]# cd checkpassword-0.90 && make && make install
[root@ns1 checkpassword-0.90]# chmod 4710 /bin/checkpassword
[root@ns1 checkpassword-0.90]# chown root.nofiles /bin/checkpassword


--------------------------------------------------------------
Mysql 설정
--------------------------------------------------------------
1. sqlserver 설정
# vi /var/qmail/control/sqlserver
mysql_use yes        // QMAIL에서 MYSQL계정을 사용할것인지 설정
server localhost     // MYSQL이 설치된 서버를 지정
login phpmail        // MYSQL 로그인아이디를 설정
password phpmail     // MYSQL 로그인패스워드를 설정
db phpmail           // MYSQL계정에 이용할 데이터베이스명을     설정
table info_user      // MYSQL계정에 이용할 데이터베이스내 테이블명을 설정
port 3306            // MYSQL 포트를 설정
check_host no        // 다중도메인을 지원할 것인지 설정
quota no             // Maildir에 대해 Quota를 지정할 것인지 설정
ignore_validity yes  // MYSQL계정에 대해 start_date, expire_date를 검사할것인지 설정


샘플

mysql_use yes
server localhost
login root
password 1234
db qmail_users
table qmail_users
check_host yes
swap_check_order yes

 
2. 소유권 변경 및 퍼미션 변경
[root@ns1 root]# chown qmailp.nofiles /var/qmail/control/sqlserver
[root@ns1 root]# chmod 440 /var/qmail/control/sqlserver


--------------------------------------------------------------
qmail queue life time 설정
--------------------------------------------------------------
[root@ns1 root]# cat > /var/qmail/control/queuelifetime
86400


--------------------------------------------------------------
qmail doublebounceto 설정
--------------------------------------------------------------
[root@ns1 root]# cat > /var/qmail/control/doublebounceto
doublebounce



--------------------------------------------------------------
qmail restart 스크립트 소스
--------------------------------------------------------------
서버에 부하량이 있을때,, qmail 이 잘 안 죽습니다. ㅡㅡ.
정말 이거때문에 골치 아픈데요.. 이걸 어떻게 하냐면요..

[root@ns1 root]# Qrestart start   <-- 시작
[root@ns1 root]# Qrestart stop    <-- 정지

[root@ns1 root]# cat > /sbin/Qrestart.sh

#-------------------------------------------------------------------------------------------
#!/bin/sh
#---------------------------------------------------------------
# 작성일 : 2003년 9월 2일
# 수정일 : 2004/05/21 stop/start selection 추가
# 작성자 : 정찬호( master@rootman.co.kr )
# 건  명 : qmail 죽이고 살리능데 에러 생김 이에 쉘로 구현


function service_stop {
        #---------------------------------------------------------------
        #-- lock 화일 삭제하기
        #---------------------------------------------------------------
        /etc/rc.d/init.d/qmail stop
        sleep 1;

        /etc/rc.d/init.d/qmail stop
        sleep 1;

        #---------------------------------------------------------------
        #-- svs 데몬 쥑이기
        #---------------------------------------------------------------
        for i in $(ps -ef|grep svs|grep -v "grep"|awk '{print $2}')
        do
           kill -9 $i;
        done;


        #---------------------------------------------------------------
        #-- smtp 데몬 쥑이기
        #---------------------------------------------------------------
        for i in $(ps -ef|grep smtp|grep -v "grep"|awk '{print $2}')
        do
           kill -9 $i;
        done;

        #---------------------------------------------------------------
        #-- send 데몬 쥑이기
        #---------------------------------------------------------------
        for i in $(ps -ef|grep send|grep -v "grep"|awk '{print $2}')
        do
           kill -9 $i;
        done;

        #---------------------------------------------------------------
        #-- pop3d 데몬 쥑이기
        #---------------------------------------------------------------
        #for i in $(ps -ef|grep pop3|grep -v "grep"|awk '{print $2}')
        #do
        #   kill -9 $i;
        #done;


        #---------------------------------------------------------------
        #-- tcpserver 데몬 쥑이기
        #---------------------------------------------------------------
        for i in $(ps -ef|grep tcpserver|grep -v "grep"|awk '{print $2}')
        do
           kill -9 $i;
        done;

        #---------------------------------------------------------------
        #-- perl 데몬 쥑이기
        #---------------------------------------------------------------
        for i in $(ps -ef|grep perl|grep -v "grep"|awk '{print $2}')
        do
           kill -9 $i;
        done;


        #---------------------------------------------------------------
        #-- qmail-remote 데몬 쥑이기
        #---------------------------------------------------------------
        for i in $(ps -ef|grep qmail-remote|grep -v "grep"|awk '{print $2}')
        do
           kill -9 $i;
        done;

        #---------------------------------------------------------------
        #-- lock 화일 삭제하기
        #---------------------------------------------------------------

        /usr/bin/find  /var/qmail/ -name "lock" -exec rm -f {} \; 2>/dev/null
}
#-----------------------------------------------------------------------------------------
case "$1" in
  start)
       service_stop;
       sleep 3;
       eval '/etc/rc.d/init.d/qmail start';
       echo "--------------------------------------------------------------------------";
       echo "1. qmail이 정상적으로 실행 되었습니다....... ";
       echo "--------------------------------------------------------------------------";
       ;;

  stop)
       service_stop;
       sleep 3;
       echo "--------------------------------------------------------------------------";
       echo "1. qmail이 정상적으로 정지 되었습니다....... ";
       echo "--------------------------------------------------------------------------";      
      ;;

    *)
        blank_line;
        echo "--------------------------------------------------------------------------";
        echo "1. 사용법: [root@ ]# Qrestart { start|stop }";
        echo "3. 사용예 : ";
        echo "   [root@@ ]# Qrestart start";
        echo "--------------------------------------------------------------------------";
        exit 1
esac
exit 0
#---------------------------------------------------------------
top

TAG ,
Linux/Linux : 2007/02/06 17:07 Trackback. : Comment. : view 1301

Trackback Address :: http://jjangu.pe.kr/blog/trackback/348

Write a comment.




: 1 : ... 230 : 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : ... 543 :