Ben's

Qmail install 본문

리눅스/mail

Qmail install

Ben Ko (SINCE 2013) 2013. 1. 16. 15:34
728x90

☆★ qmail 설치문서 ☆★

■ ucspi-tcp 설치

1. 다운로드
   * 소스 다운로드: wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
   * 패치 다운로드: http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/
                          http://sylvestre.ledru.info/howto/qmail/ucspi-tcp-0.88-mysql.patch

2. 패치
   * patch -d ucspi-tcp-0.88 < ucspi-tcp-0.88.a_record.patch
   * patch -d ucspi-tcp-0.88 < ucspi-tcp-0.88.nobase.patch  
   * patch -d ucspi-tcp-0.88 < ucspi-tcp-0.88.errno.patch 
   * patch -d ucspi-tcp-0.88 < ucspi-tcp-0.88-mysql.patch(MYSQL only)

3. 설치전 준비
   * db.c 수정(MYSQL only - ucspi-tcp-0.88-mysql.patch 를 적용했을때만 파일 생성됨)
     #include </home/mysql/include/mysql/mysql.h>
   * conf-ld 수정(MYSQL only)
     gcc -s  -I/home/mysql/include/mysql -L/home/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
   * load 수정(MYSQL only)
     exec gcc -s  -I/home/mysql/include/mysql -L/home/mysql/lib/mysql -lmysqlclient  -lz -lcrypt -lnsl -lm -o "$main" "$main".o ${1+"$@"}

4. 설치
   * make && make setup check


■ daemontools

1. 다운로드
   * 소스 다운로드: wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
   * 패치 다운로드: wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch

2. 패치
   * cd ./admin/daemontools
   * patch -d src < ../../daemontools-0.76.errno.patch

3. 설치
   * package/install

4. cp -a /root/archive/src/qmail_src/admin/daemontools/command/* /usr/local/bin


■ autorespond 설치

1. 다운로드
   * 소스 다운로드: wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz

2. 설치
   * make; cp -a autorespond /usr/local/bin

   
■ qmHandle 설치
1. 다운로드
   * 소스 다운로드: wget http://umn.dl.sourceforge.net/sourceforge/qmhandle/qmhandle-1.2.0.tar.gz

2. 설치
   * tar -zxf qmHandle-1.2.0.tar.gz
   * mv qmHandle /usr/local/bin/qmHandle


■ qmail-1.03 설치

1. 다운로드
   * 소스 다운로드: wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
   * 패치 다운로드: http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/

2. qmail 패치
   * patch -d qmail-1.03 < qmail-103.patch
   * patch -d qmail-1.03 < qmail-1.03.qmail_local.patch
   * patch -d qmail-1.03 < qmail-1.03.errno.patch
   * smtp-auth patch
     cd qmail-smtpd-auth-0.31
     cp README.auth base64.c base64.h ../qmail-1.03
     patch -d ../qmail-1.03 < auth.patch
   * patch -d qmail-1.03 < qmailqueue-patch
   * patch -d qmail-1.03 < qmail-date-localtime.patch
   * patch -d qmail-1.03 < doublebounce-trim.patch
     echo -e "\n" > /var/qmail/control/doublebounceto   
   * patch -d qmail-1.03 < qregex-20060423.patch 
     Makefile.rej, qmail-smtpd.c.rej 내용 참조하여 Makefile, qmail-smtpd.c 파일 수동 패치
   * patch -d qmail-1.03 < qmail-0.0.0.0.patch
   * patch -d qmail-1.03 < sendmail-flagf.patch

3. 디렉토리 및 계정생성
   * mkdir -p /var/qmail
   * 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

4. qmail PRE-INSTALL
   * make && make setup check

5. qmail 운영에 필요한 스크립트 생성 및 등록
   * /var/qmail/rc
============================================================
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start '|preline procmail ./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
#QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE
ALIAS_UID=`id -u alias`
ALIAS_GID=`id -g alias`
exec /usr/local/bin/softlimit -m 9000000 \
/usr/local/bin/tcpserver -l nhkotest.com -H -R -x /home/vpopmail/etc/tcp.smtp.cdb \
-u $ALIAS_UID -g $ALIAS_GID 0 25 /usr/local/bin/fixcrio /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
============================================================
   * 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

6. /etc/init.d/qmail 스크립트 등록후 stop 서브루틴의 kill 부분을 kill -9 로 고쳐줘야함.

7. sendmail 삭제
mv /usr/lib/sendmail /usr/lib/sendmail.old
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin

8. /service 디렉토리 삭제
rm -rf /service


■ vpopmail 설치

1. 다운로드
   * 소스 다운로드: wget http://downloads.sourceforge.net/vpopmail/vpopmail-5.4.10.tar.gz?modtime=1111305167&big_mirror=0

2. 계정생성
   * groupadd vchkpw
   * useradd -g vchkpw -d /home/vpopmail vpopmail

3. DB / DB계정 생성

   * mysql 일때
     - DB 생성
     mysql> CREATE DATABASE vpopmail;
     - DB 계정 생성
     mysql> use mysql;
     mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on vpopmail.* to vpopmail@localhost;
     mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on vpopmail.* to vpopmail@mail.nhkotest.com;
     - vpopmail에서 db 접근시 인증정보는 아래와 같이 저장해 두면 됨.
     echo "localhost|3306|vpopmail|ghtmxldWkd|vpopmail" > ~vpopmail/etc/vpopmail.mysql
     chown vpopmail.vchkpw ~vpopmail/etc/vpopmail.mysql
     chmod 640 ~vpopmail/etc/vpopmail.mysql

   * pgsql 일때
     - vpopmail table space 로 사용될 디렉토리 생성
       mkdir -p /home/postgresql/data/pg_tblspc/vpopmail
       mkdir -p /home/postgresql/data/pg_tblspc/vpopmail_index
     - vpopmail table space 생성
       CREATE TABLESPACE vpopmail OWNER postgres LOCATION '/home/postgresql/data/pg_tblspc/vpopmail';
       CREATE TABLESPACE vpopmail_index OWNER postgres LOCATION '/home/postgresql/data/pg_tblspc/vpopmail_index';
     - DB 계정 생성
       CREATE ROLE vpopmail;
       ALTER ROLE vpopmail WITH SUPERUSER INHERIT NOCREATEROLE CREATEDB LOGIN PASSWORD '패스워드';
     - DB 생성
       CREATE DATABASE vpopmail WITH TEMPLATE = template0 OWNER = user ENCODING = 'EUC_KR' TABLESPACE = vpopmail;

4. 사전 작업
   * /etc/ld.so.conf 에 경로 추가
     - mysql 일때: /home/mysql/lib/mysql
     - pgsql 일때: /usr/local/lib, /home/postgresql/lib/
   * 경로 추가후 적용: ldconfig /etc/ld.so.conf
   * vpopmail.c 수정
==========================================================================================
@@ -207,7 +207,7 @@
     chdir(calling_dir);
     return(VA_COULD_NOT_OPEN_qmail_DEFAULT);
   } else {
-    fprintf(fs, "| %s/bin/vdelivermail '' bounce-no-mailbox\n", VPOPMAILDIR); 이부분 빼고
+    fprintf(fs, "| %s/bin/vdelivermail '' delete\n", VPOPMAILDIR); 이부분 추가
     fclose(fs);
   }
==========================================================================================

5. mysql을 사용할때 설치

./configure --enable-auth-module=mysql --enable-roaming-users=y --enable-hard=20971520 --enable-relay-clear-minutes=60 --enable-logging=y --

disable-auth-logging --enable-incdir=/home/mysql/include/mysql --enable-libdir=/home/mysql/lib/mysql

make && make install-strip

6. pgsql을 사용할때 설치
  * 먼저 ./configure 파일 수정하여 pg_config 경로를 잡아준다.
=========================================================================================================================
    pgconfig=""
    for f in /usr/local/pgsql/bin/pg_config /usr/local/bin/pg_config /usr/bin/pg_config /home/postgresql/bin/pg_config
    do
=========================================================================================================================

./configure --enable-auth-module=pgsql --enable-logging=y  --disable-auth-logging --enable-many-domains=y --enable-

incdir=/home/postgresql/include --enable-libdir=/home/postgresql/lib --disable-roaming-users --enable-relay-clear-minutes=60

make && make install-strip

7. /sbin/vpop3_start 스크립트 등록

8. SMTP 릴레이 설정
   * /home/vpopmail/etc/tcp.smtp
===================================
127.0.0.1:allow,RELAYCLIENT=""
203.231.63.0:allow,RELAYCLIENT=""
===================================
   * tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
   * /etc/init.d/qmail, /var/qmail/supervise/qmail-smtpd/run 내의 tcp.smtp 경로 수정
   * ~vpopmail/bin/clearopensmtp 실행 / crontab 등록
============================================
# crontab -e
40 * * * * /home/vpopmail/bin/clearopensmtp
============================================

9. DB 테이블 생성 확인

   * /home/vpopmail/bin/clearopensmtp -> relay db 생성됨.
   * vadddomain 하면 dir_control, vpopmail 생성됨.
   * DB 테이블 확인
vpopmail=# \dt;
            List of relations
Schema |    Name     | Type  |  Owner  
--------+-------------+-------+----------
public | dir_control | table | postgres
public | relay       | table | postgres
public | vpopmail    | table | postgres
   * 테이블 스페이스 생성확인: 아래의 경로에 PG_VERSION 파일이 생성되어야 함.
     - /home/postgresql/data/pg_tblspc/vpopmail
   

■ qmail + chkuser 패치 적용후 재 컴파일
1. chkuser 패치 적용
   * patch -p1 -d ../qmail-1.03 < netqmail-1.05_chkuser-2.0.8.patch
2. qmail 재 컴파일
   * make clean
   * make && make setup check
   * ./config-fast nhkotest.com
     (원래 ./config 라고만 해주면 되는데 qmail 설치당시에 도메인이 네임서버에 등록되어 있지 않으면 이렇게 해줘야 함.)


■ qmail-scanner 설치

1. qmail-scanner 설치에 필요한 패키지 먼저 설치
   * pere 설치(wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-6.7.tar.gz)
     ./configure
     make
     make check
     make install
   * perl-suidperlm, unzip 설치(yum install로 설치)
   * maildrop-1.8.0  먼저 설치
     ./configure
     make
     make install-strip
     make install-man
   * Time-HiRes 설치
     perl Makefile.PL
     make
     make test
     make install

2. qscand 계정 생성
   * groupadd qscand
   * useradd -c "qmail-Scanner Account" -g qscand  -s /bin/false qscand

3. 설치
   * ./configure --spooldir /usr/local/qmailscan --qmaildir /var/qmail --bindir /var/qmail/bin --qmail-queue-binary /var/qmail/bin/qmail-queue 

--admin root --domain nhkotest.com --notify none --local-domains nhkotest.com --silent-viruses auto --lang en_GB --debug no --unzip 0 --add-dscr-

hdrs 0 --archive 0 --redundant no --log-details 0 --log-crypto 0 --fix-mime 1  --scanners "auto" --install 1

4. 실행
/var/qmail/bin/qmail-scanner-queue.pl -g


■ 설치후 확인사항
1. /var/qmail/supervise/qmail-smtpd/run 파일 확인

=======================================================================================
#!/bin/sh
#QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE
ALIAS_UID=`id -u alias`
ALIAS_GID=`id -g alias`
exec /usr/local/bin/softlimit -m 15000000 \

/usr/local/bin/tcpserver -l nhkotest.com -H -R -x /home/vpopmail/etc/tcp.smtp.cdb \ ===> tcp.smtp 경로 확인할것
-u $ALIAS_UID -g $ALIAS_GID 0 25 /usr/local/bin/fixcrio /var/qmail/bin/qmail-smtpd 2>&1
=======================================================================================

2. qmail start 시 떠 있는 데몬이 아래와 비슷한지 확인

=======================================================================================
562 ? S 0:00 svscan
563 ? S 0:00 supervise qmail-send
564 ? S 0:00 supervise log
565 ? S 0:00 supervise qmail-smtpd
566 ? S 0:00 supervise log
567 ? S 0:00 qmail-send
568 ? S 0:00 /usr/local/bin/multilog t /var/log/qmail
569 ? S 0:00 /usr/local/bin/multilog t /var/log/qmail/smtpd
570 ? S 0:00 /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb -u 501 -g 501 0 25 /var/qmail/bin/qmail-smtpd
576 ? S 0:00 splogger qmail
577 ? S 0:00 qmail-lspawn |preline procmail
578 ? S 0:00 qmail-rspawn
579 ? S 0:00 qmail-clean
=======================================================================================


■ 메일 로컬 전송 테스트
   * echo 'to: konh@ect571.nhkotest.com' | /var/qmail/bin/qmail-inject
 
 
■ qmail troubleshooting

1. /etc/init.d/qmail start 시 프로세스는 보이나 포트가 응답하지 않고 /var/log/maillog에 아래와 같은 메시지 나올때
===============================================================================
supervise: fatal: unable to acquire log/supervise/lock: temporary failure
supervise: fatal: unable to acquire qmail-smtpd/supervise/lock: temporary failure
supervise: fatal: unable to acquire log/supervise/lock: temporary failure
===============================================================================
==> 원인: qmail stop 시 svscan 프로세스가 정상적으로 종료되지 않아 프로세스가 떠 있는 상태에서 qmail start 를 했을때 이런 현상 발생
==> 해결방법
- pkill -9 svscan
- svc -dx /var/qmail/supervise/*; svc -dx /var/qmail/supervise/*/log
2. /etc/init.d/qmail start 시 프로세스는 보이나 포트가 응답하지 않고 /var/log/qmail/smtpd/current 에 아래와 같은 메시지 나올때
==============================================================================================================
@40000000461ed6a529aa4474 tcpserver: fatal: temporarily unable to figure out IP address for 0.0.0.0: file does not exist
==============================================================================================================
==> 원인: BUG 임. 간혹 64bit 서버에서 발생할수 있음.
==> 해결방법: touch /etc/dnsrewrite
3. /etc/init.d/qmail start 시 프로세스는 보이나 포트가 응답하지 않고 /var/log/qmail/smtpd/current 에 아래와 같은 메시지 나올때
========================================================
map segment from shared object: Cannot allocate memory
========================================================
==> 원인: softlimit 값이 너무 작으면 나타나는 현상임.
==> 해결방법: /var/qmail/supervise/qmail-smtpd/run 파일에서 아래의 라인에서 수치 늘림.
------------------------------------------
exec /usr/local/bin/softlimit -m 15000000 \

'리눅스 > mail' 카테고리의 다른 글

sendmail error 유형  (0) 2013.01.21
queue-fix 설치 및 사용법  (0) 2013.01.16