|  |  |  | 
	|  |  
	|  |  
	| 
 
		
			|  ▶ Qmail 설치 파일 받기 
				 http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gzhttp://cr.yp.to/daemontools/daemontools-0.76.tar.gz
 ftp://ftp.nfsi.pt/pub/qmail/rpms/patches/ucspi-tcp-0.88.errno.patch
 ftp://ftp.nfsi.pt/pub/qmail/rpms/patches/daemontools-0.76.errno.patch
 ftp://ftp.ip.pt/pub/qmail/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
 http://q07.asadal.net/qmail-source.tar.gz
 http://q07.asadal.net/qmail-ej-cocktail-10.tar.gz
 http://q07.asadal.net/vpopmail-5.4.0.tar.gz
 http://q07.asadal.net/courier-authlib-0.56.tar.bz2
 http://q07.asadal.net/expect-5.38.0-88.i386.rpm
 http://q07.asadal.net/courier-imap-2.1.1.tar.bz2
 
 |  |  
	| 
 
		
			|  ▶ 날짜 패치 (LINUX 7.1이상에서 문제가 되는 time.h에 대한 링크를 수정한다.) 
				 mv /usr/include/sys/time.h /usr/include/sys/time.h.oriln -s /usr/include/time.h/usr/include/sys/time.h
 
 |  |  
	| 
 
		
			| 
				 1. Ucspi-tcp 설치cd /usr/local/src
 tar zxvf qmail-source.tar.gz
 tar zxvf ucspi-tcp-0.88.tar.gz
 cd ucspi-tcp-0.88
 patch -p1 < ../qmail_patch/ucspi-tcp-0.88.errno.patch
 make && make setup check
 cd /usr/local/src
 
 
2. Daemontools 설치mkdir /package
 cp daemontools-0.76.tar.gz /package/
 cd /package/
 tar zxvf daemontools-0.76.tar.gz
 cd admin/daemontools-0.76/
 patch -p1 < /usr/local/src/qmail_patch/daemontools-0.76.errno.patch
 package/install
 
 
3. Qmail 설치(1) 사용자와 그룹 추가
 groupadd nofiles
 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
 useradd -g nofiles -d /var/qmail/alias alias
 
 (2) Qmail 설치
 tar zxvf qmail-ej-cocktail-10.tar.gz
 tar zxvf qmail-1.03.tar.gz; cd qmail-1.03
 patch -p1 < ../qmail_patch/qmail-1.03.errno.patch
 patch -p1 < ../qmail-ej-cocktail-10/qmail-ej-cocktail-10-no-starttls.patch
 make; make setup check
 
 ./config-fast 호스트명
 
 (3) Qmail 필요한 디렉터리 생성
 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
 
 
4. Qmail 스크립트 파일 생성(1) vi /var/qmail/rc(===안에 있는 파일을 저장)
 #!/bin/sh
 exec env - PATH="/var/qmail/bin:$PATH" \
 qmail-start ./Maildir/ splogger qmail
 
 (2) vi /var/qmail/supervise/qmail-send/run
 #!/bin/sh
 exec /var/qmail/rc
 
 (3) vi /var/qmail/supervise/qmail-send/log/run
 #!/bin/sh
 exec /usr/local/bin/setuidgid qmaill \
 /usr/local/bin/multilog t -n100 -s1000000 /var/log/qmail/qmail
 
 (4) vi /var/qmail/supervise/qmail-smtpd/run
 #!/bin/sh
 Q_UID=`id -u vpopmail`
 Q_GID=`id -g vpopmail`
 exec /usr/local/bin/softlimit -m 52000000 \
 /usr/local/bin/tcpserver -vRHl0 -x/home/vpopmail/etc/tcp.smtp.cdb -c 100 \
 
 -u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 호스트명 \
 /home/vpopmail/bin/vchkpw /bin/true 2>&1
 
 (5) vi /var/qmail/supervise/qmail-smtpd/log/run
 #!/bin/sh
 exec /usr/local/bin/setuidgid qmaill \
 /usr/local/bin/multilog t -n100 -s1000000 /var/log/qmail/smtpd
 
 (6) 스크립트 파일 퍼미션 변경
 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
 
 (7) 로그 디렉터리 생성과 퍼미션 설정
 mkdir -p /var/log/qmail/smtpd
 chown qmaill /var/log/qmail /var/log/qmail/smtpd
 
 (8) 앨리어스 설정
 cd ~alias
 echo root > .qmail-mailer-daemon
 echo root > .qmail-postmaster
 echo root > .qmail-root
 chmod 644 .qmail-mailer-daemon .qmail-postmaster .qmail-root
 
 (9) Qmail 시작, 종료 스크립트
 vi /etc/rc.d/init.d/qmail
 
 #!/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 [ -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
 if [ -f /var/lock/subsys/qmail ]; then
 rm /var/lock/subsys/qmail
 fi
 ;;
 stat)
 svstat /service/qmail-send
 svstat /service/qmail-send/log
 svstat /service/qmail-smtpd
 svstat /service/qmail-smtpd/log
 qmail-qstat
 ;;
 doqueue|alrm|flush)
 echo "Flushing timeout table and sending ALRM signal to qmail-send."
 /var/qmail/bin/qmail-tcpok
 svc -a /service/qmail-send
 ;;
 queue)
 qmail-qstat
 qmail-qread
 ;;
 reload|hup)
 echo "Sending HUP signal to qmail-send."
 svc -h /service/qmail-send
 ;;
 pause)
 echo "Pausing qmail-send"
 svc -p /service/qmail-send
 echo "Pausing qmail-smtpd"
 svc -p /service/qmail-smtpd
 ;;
 cont)
 echo "Continuing qmail-send"
 svc -c /service/qmail-send
 echo "Continuing qmail-smtpd"
 svc -c /service/qmail-smtpd
 ;;
 restart)
 echo "Restarting qmail:"
 echo "* Stopping qmail-smtpd."
 svc -d /service/qmail-smtpd
 echo "* Sending qmail-send SIGTERM and restarting."
 svc -t /service/qmail-send
 echo "* Restarting qmail-smtpd."
 svc -u /service/qmail-smtpd
 ;;
 cdb)
 tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp<
 /home/vpopmail/etc/tcp.smtp
 chmod 644 /home/vpopmail/etc/tcp.smtp.cdb
 echo "Reloaded /home/vpopmail/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 forsmtp
 restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
 doqueue -- schedules queued messages for immediate delivery
 reload -- sends qmail-send HUP, rereading locals and virtualdomains
 queue -- shows status of queue
 alrm -- same as doqueue
 flush -- same as doqueue
 hup -- same as reload
 HELP
 ;;
 *)
 echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
 exit 1
 ;;
 esac
 exit 0
 
 (10) 권한 변경
 chmod 700 /etc/rc.d/init.d/qmail
 
 (11) 센드메일 제거와 링크
 mv /usr/lib/sendmail /usr/lib/sendmail.old
 mv /usr/sbin/sendmail /usr/sbin/sendmail.old
 ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
 ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
 
 
 5. VPOPMAIL 설치(uid 700, gid 2100)(1) 환경 설정
 groupadd -g 2100 vchkpw
 useradd -u 700 -g vchkpw vpopmail
 mkdir ~vpopmail/etc
 echo "localhost|0|vpopmailuser|12345|vpopmail" > ~vpopmail/etc/vpopmail.mysql
 echo "localhost|0|vpopmailuser|12345|vpopmail" >> ~vpopmail/etc/vpopmail.mysql
 chown vpopmail.vchkpw ~vpopmail/etc/vpopmail.mysql
 chmod 640 ~vpopmail/etc/vpopmail.mysql
 echo "서버명" > /home/vpopmail/etc/defaultdomain
 ln -s /usr/local/mysql/lib/mysql/ /usr/lib/mysql
 ln -s /usr/local/mysql/include/mysql/ /usr/include/mysql
 
 (2) 디비 설정(dbuser vpopmailuser, dbpasswd 12345, dbname vpopmail)
 mysql -p
 
 CREATE DATABASE vpopmail;
 use vpopmail;
 grant CREATE,INSERT,SELECT,DELETE,UPDATE,DROP on vpopmail.* to vpopmailuser;
 grant CREATE,INSERT,SELECT,DELETE,UPDATE,DROP on vpopmail.* to vpopmailuser@localhost;
 set password for 'vpopmailuser'@'%'=password('12345');
 set password for 'vpopmailuser'@'localhost'=password('12345');
 flush privileges;
 
 (3) VPOPMAIL 설치하기(32비트 서버)
 cd /usr/local/src/
 tar zxvf vpopmail-5.4.0.tar.gz
 cd vpopmail-5.4.0
 
 ./configure \
 --enable-roaming-users=y --enable-logging=p --enable-tcprules-prog=/usr/local/bin/tcprules \
 --enable-relay-clear-minutes=15 --enable-auth-module=mysql --enable-mysql-logging=y \
 --enable-sqlincdir=/usr/local/mysql/include/mysql --enable-sqllibdir=/usr/local/mysql/lib/mysql \
 --enable-logging=y --enable-mysql-replication=y --enable-valias=y --enable-many-domains=n
 --enable-domainquotas=y
 make
 make install-strip
 
 (4) VPOPMAIL 설치하기(64비트 전용)
 cd /usr/local/src/
 tar zxvf vpopmail-5.4.13.tar.gz
 cd vpopmail-5.4.13
 ./configure CFLAGS=-fPIC --enable-roaming-users=y --enable-logging=p
 --enable-tcprules-prog=/usr/local/bin/tcprules --enable-relay-clear-minutes=15
 --enable-auth-module=mysql --enable-sql-logging --enable-sqlincdir=/usr/local/mysql/include/mysql
 --enable-sqllibdir=/usr/local/mysql/lib/mysql --enable-logging=y --enable-mysql-replication=y
 --enable-valias=y --enable-many-domains=n
 [root@sunnii vpopmail-5.4.13]# make
 [root@sunnii vpopmail-5.4.13]# make install-strip
 
 (5) smtp 인증 파일 생성
 # vi /home/vpopmail/etc/tcp.smtp(서버 아이피 입력)
 192.168.0.1:allow,RELAYCLIENT=""
 127.0.0.:allow,RELAYCLIENT=""
 :allow
 
 (6) tcp.smtp.cdb 파일 갱신
 tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp <
 /home/vpopmail/etc/tcp.smtp
 /home/vpopmail/bin/clearopensmtp
 
 * 실행시 에러 발생할 때에 mysql 라이브러리 경로 추가
 /usr/local/mysql/lib/mysql 추가후 ldconfig 명령어 실행
 
 (7) VPOP 시동 파일 생성
 mkdir -p /var/qmail/supervise/vpop/log
 vi /var/qmail/supervise/vpop/run
 
 #!/bin/sh
 VPOP_UID=`id -u vpopmail`
 VPOP_GID=`id -g vpopmail`
 exec /usr/local/bin/softlimit -m 50000000 \
 tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \
 /var/qmail/bin/qmail-popup 호스트명 \
 /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
 
 vi /var/qmail/supervise/vpop/log/run
 #!/bin/sh
 exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t -n100 -s1000000 /var/log/qmail/pop3
 
 chmod 755 /var/qmail/supervise/vpop/run
 chmod 755 /var/qmail/supervise/vpop/log/run
 ln -s /var/qmail/supervise/vpop /service
 
 
6. courier-imap 설치(1) courier-authlib 설치
 cd /usr/local/src/
 tar xvfpj courier-authlib-0.56.tar.bz2
 cd courier-authlib-0.56
 ./configure --with-redhat;make;make install
 cd /usr/local/src/
 
 (2) .expect, tcl 팩키지 확인. 없으면 설치한다.
 rpm -qa |grep tcl
 rpm -qa |grep expect
 
 - rpm으로 설치
 
 rpm -Uvh tcl-8.3.5-88.i386.rpm
 rpm -Uvh expect-5.38.0-88.i386.rpm
 
 - yum으로 설치
 
 yum install tcl
 yum install expect
 
 (3) 설치는 root가 아닌 일반 계정으로 한다.
 gcc, make, g++, find 퍼미션이 막혀있으면 변경해야한다.
 chmod 777 -R /home/vpopmail/lib/
 chmod 755 /home/vpopmail
 chmod 755 /usr/bin/gcc /usr/bin/make /usr/bin/g++ /usr/bin/find
 chmod 777 /usr/local/src/courier-imap-2.1.1.tar.bz2
 su vpopmail
 
 (4) courier-imap 설치
 cd /usr/local/src/
 tar xvjfp courier-imap-2.1.1.tar.bz2 -C /var/tmp
 cd /var/tmp/courier-imap-2.1.1/
 CFLAGS="-DHAVE_OPEN_SMTP_RELAY"; export CFLAGS
 
 env LIBS="-L/usr/lib/mysql -lmysqlclient -lz"
 
 ./configure \
 --prefix=/usr \
 --datadir=/usr/share/courier-imap \
 --sysconfdir=/etc/courier-imap \
 --libexecdir=/usr/libexec/courier-imap \
 --localstatedir=/var \
 --mandir=/usr/share/man \
 --with-redhat \
 --without-ipv6 \
 --enable-unicode \
 --with-authvchkpw \
 --without-authdaemon \
 --without-authmysql \
 --without-authldap \
 --without-authdaemon \
 --without-authpgsql i686
 
 make
 make check
 - 다시 root 계정으로 설치 완료한다.
 exit
 cd /var/tmp/courier-imap-2.1.1
 make install-strip
 make install-configure
 - gcc, make, g++, find 퍼미션 원래대로
 
 chmod 100 /usr/bin/gcc /usr/bin/make /usr/bin/g++ /usr/bin/find
 
 (5) vpopmail 퍼미션 원래대로 수정
 chmod 700 /home/vpopmail
 chmod 700 /home/vpopmail/lib/
 chmod 600 /home/vpopmail/lib/libvpopmail.a
 
 (6) 구동파일 만들기
 cp courier-imap.sysvinit /etc/init.d/courier-imap
 chmod 700 /etc/init.d/courier-imap
 vi /etc/courier-imap/imapd
 359줄 IMAPDSTART의 값을 ‘NO’->‘YES’로 변경한다. 즉,  IMAPDSTART=YES
 
 (7) 스크립트 파일 수정 및 실행
 1) 스크립트 파일 수정
 
 # vi /usr/libexec/courier-imap/imapd.rc
 46번째 줄에 다음을 추가합니다.
 
 -stderrlogger=/usr/libexec/courier-imap/courierlogger \
 이부분을 아래와 같이 변경
 -stderrlogger=/usr/libexec/courier-imap/courierlogger -user=vpopmail -group=vchkpw \
 
 # vi /usr/libexec/courier-imap/pop3d.rc
 39번째 줄에 다음을 추가합니다.
 -stderrlogger=/usr/libexec/courier-imap/courierlogger \
 이부분을 아래와 같이 변경
 -stderrlogger=/usr/libexec/courier-imap/courierlogger -user=vpopmail -group=vchkpw \
 
 2) 스크립트 실행
 chmod 755 /usr/libexec/courier-imap/imapd.rc
 chmod 755 /usr/libexec/courier-imap/pop3d.rc
 /etc/rc.d/init.d/courier-imap start
 
 3) 기타 권한 설정
 chmod 755 /var/qmail/rc
 chmod 700 /etc/rc.d/init.d/qmail
 
 
7. 데몬 실행/etc/rc.d/init.d/xinetd restart
 /etc/rc.d/init.d/courier-imap start
 /etc/rc.d/init.d/qmail start
 
 
8. 기타 참고 사항(1) 원격에서 로컬로 메일을 받는 경우
 qmail-smtpd : 다른 서버의 SMTP에서 메시지를 받는다. 로컬로 받아들일 주소인지 (rcpthosts)확인한다.
 qmail-queue : 디스크에 메시지를 저장하고 qmail-send 호출한다.
 qmail-send : 겉봉에 쓰인 수신인 주소를 보고 로컬로 배달할 것인지 판단한다.
 qmail-lspawn : 편지함 이름 및 해당 사용자의 설정을 파악하고, qmail-local을 실행한다.
 qmail-local : 해당 편지함에 메시지를 기록한다.
 
 (2) 로컬에서 원격으로 메일을 보내는 경우
 qmail-inject : 누가 누구에게 보내는 것인지 겉봉에 기록한다.
 qmail-queue : 디스크에 메시지를 저장하고 qmail-send 호출한다.
 qmail-send : 겉봉에 기록된 수신인이 누구인지 파악해 로컬로 전달할지 원격서버로 전달할지 결정한다.
 qmail-rspawn : 외부에서 접속해서 메일을 보낼 때 이용한다.
 qmail-remote : 원격서버를 DNS에서 찾아서 SMTP로 연결한다.
 
 (3) 큐메일 서버에서 25, 110번 데몬이 안 뜰 때, 아래 에러가 뜰 때tcpserver: fatal: temporarily unable to figure out IP address for 0.0.0.0: file does not
 existtouch /etc/dnsrewrite
 
 (4) qmail-smtpd가 제대로 작동하지 않고 연결이 즉시 종료될 때(25번 포트 떠 있는데 접근 시 바로 튕길 때)
 - qmail-smtpd 구동 스크립트 (/var/qmail/supervise/qmail-smtpd/run)에 사용한 리소스 제한값 (softlimit -m)을 바꿔봅니다. 예를 들어 2000000 였다면 7340032
 정도록 올려 봅니다.
 
 - qmail-smtpd 구동 스크립트에서 tcpserver 옵션중 tcprules 파일을 사용하고 있다면 (예: -x /etc/tcp.smtp.cdb ) 이 파일이 읽을 수 있는 권한인지 확인해 봅니
 다.
 - /var/qmail/control 파일을 다른 걸로 바꾼다.
 
 (5) maillog에 qmail-remote_crashed 뜰 때
 qmail-remote_crashed./I'm_not_going_to_try_again;_this_message_has_been_in_the_queue_too_long./qmail- remote가 깨진 것이다. qmail만 다시 설치하면
 된다.
 qmail 설치 경로로 가서 make setup qmail
 
 |  |  
	|  |  |  |