Posted
Filed under Linux



리눅스는 Redhat9 Kernel 2.4.20버전을 사용하였습니다.
또한 가능하면 이 문서에 있는 소스를 받으세요. 이문서상외의 소스나 기타 프로그램들은
작동여부를 장담할 수 없습니다.

설치 기초 작업은 /root/src라는 곳에서 작업을 합니다.

설치순서는
openssl - mysql BerkelyDB - qmail - ucspi - daemon tools - checkpassword - imap - phpmail
순으로 설치를 합니다.

#################
설치 기초 공사#########################
1. openssl
설치
1)
가능하면 기본 설정으로 설정하시기 바랍니다. 기본을 /usr/local/ssl로 잡고 있고 다른 소스들도 ssl을 쓸시 저 기본 디렉토리를 사용합니다. 그러니 고치지 마시고 기본 그대로의 사용을 적극 권장드립니다.
-
http://www.openssl.org/source/ 에서 openssl-0.9.7a.tar.gz 이버전을 받으세요.
qmail
홈페이지에서 faq를 보시면 위 버전 이상은 어떤 이유에서인지 에러가 난다고하네요. 정확하게 어디서 보기는 봤는데 출처는 정확히 모르겠습니다. 아시는분 리플달아주세요.

2) Install
./config
make; make install

- mysql
설치
http://downloads.mysql.com/archives/...3.23.58.tar.gz 타볼소스로 다운받습니다.

3)
컴파일 옵션 / 설치
./configure --prefix=/usr/local/mysql --with-openssl --with-charset=ecu_kr
make; make install
(
기타 다른 옵션이 필요하시다면 붙이셔도 상관은 없습니다.)

4)
약간의 환경설정이 필요합니다.
cp support-files/my-huge.cnf /etc/my.cnf
groupadd mysql
adduser -g mysql mysql
vi /etc/passwd
mysql:x:522:523::/home/mysql:/sbin/nologin // nologin
으로 수정
rm -rf /home/mysql
cd /usr/local/mysql/share/mysql
vi mysql.server
134
줄의 부분을 약간 변경합니다.
$bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file --language=korean &

$bindir/safe_mysqld --datadir=$datadir --language=korean --pid-file=$pid_file --language=korean &
--language를 추가합니다.
cp mysql.server /usr/local/mysql/bin
cp mysql.server /etc/rc.d/init.d/mysqld
ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S55mysqld <-
시작번호는 알아서 편한번호로 지정하십시요.

5)
디비 생성
cd /
설치디렉토리 (나의 경우엔 cd /usr/local/mysql)
./bin/mysql_install_db (base
디비를 생성하세요~~)
chown -R mysql.mysql /usr/local/mysql/var

- mysqladmin
암호설정
/etc/rc.d/init.d/mysqld start
/usr/local/mysql/bin/mysqladmin -u root password
암호


2. BerkeleyDB
설치
특별히 쓰지는 않지만 이 않에 들어있는 몇가지 라이브러리가 좀 필요하다고 하네요. 솔직하게 어디서 쓰이는지는 모르겠습니다. 하지만 나중에 qmail들어가서 make 해보시면 아시겠지만 설치와 미설치의 make오류는 참 차이가 나는것 같습니다.(기분상...^^; 또한 여러 프로그램에서 많이 쓰인다고 합니다. 저두 언젠가는 써볼 생각입니다.
1)
설치
http://www.sleepycat.com/docs/ref/build_unix/intro.html ->버클리 DB설치법.
그러나 영문사이트인 관계로...

http://dev.sleepycat.com/downloads/r...istorybdb.html -4.2.52버전을 받습니다.
cd /root/src/db-4.2.52/build_unix
../dist/configure
make
make install

2)
동적 라이브러리링크
vi /etc/ld.so.conf
에서
/usr/local/mysql/lib/mysql
추가
/usr/local/BerkeleyDB.4.2/lib
추가
프롬프트에서
ldconfig
엔터

###################qmail
설치#######################
/root/qmailsrc/src <-
이곳에 qmail관련된 모든 소스를 넣어둡니다.
/root/qmailsrc/patch <-
패치에 관련된 모든 파일을 이곳에 넣어둡니다.
이제 본격적인 작업에 들어갑니다. 이제부터가 본게임의 시작입니다.

선작업
# 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파일이 문제가 됩니다.
그래서 구버전의 time.h로 링크를 걸어서 컴파일 하는 것입니다.
나중에 apache php컴파일시 원상복구해야합니다.

1. qmail Install
1) qmail
및 해당 패치 다운로드
http://cr.yp.to/qmail.html 에서 qmail-1.03 다운로드
(Mirror
사이트중 빠른곳에서 받으시면 됩니다. 참고로 일본 사이트가 제일 빠르네요)
http://qmail.kldp.org/phpbb/viewtopic.php?t=5798 에서
cocktail14+mysql+chkuser+quota.patch_20041116
다운로드 (2004 1116일자 패치)
참고)
캌테일 패치는 qmail에 필요한 여러가지의 패치를 모아놓은 패치 입니다. 패치 이름중에 mysql+chkuser 이것이 마이에스큐엘을 연동하여 사용하고, 유저를 체크할 수 있게 해주는 것 입니다. 하지만 이것이 좀 말이 많기도 합니다. 워낙 많은 패치를 해 놓다보니 쓸데 없는 기능이 들어가기도 하고 자신에게는 필요없는 패치가 되기도 합니다. 하지만 굉장히 좋기도 합니다. 필요한 패치를 모두 해주기 때문이죠. 만약 칵테일 패치를 하지 않는다면
http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ 에서 qmail-1.03.errno.patch qmail-1.03.qmail_local.patch 다운받아 패치를 해주어야 합니다. 하지만 우리는 캌테일 패치를 해주신다면 위의 2개의 패치는 하지 않으셔도 됩니다.
(
에러 납니다.!!!!!)

주의!!!!!
혹시 나중에 설치후 SMTP 기능이 제대로 동작이 되지 않는다면 칵테일 패치를 하지 마시고 위의 2가지 패치로 하시기 바랍니다. 간혹 칵테일 패치로 동작이 되지 않는수도 있습니다.

2)
설치
- qmail
을 위한 그룹 및 계정 생성
mkdir /var/qmail
mkdir /var/qmail/alias

- qmail
설치
qmail
의 압축을 풉니다.
vi INSTALL.ids

첫 부분에 보시면 Linux라는 부분에 다음과 같은 부분이 있습니다.

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

그 파일을 참고로 해서 다음과 같이 붙여넣기를 하셔서 파일 하나를 만듭니다.
그리고 실행을 하시면 됩니다.
ex)
vi user.sh

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
저장후 빠져나온 후...
sh user.sh
하면 디렉토리와 사용자 계정이 추가가 됩니다.

3) qmail
패치
cd /root/qmailsrc/src/qmail-1.3.0
patch -p1 < ../../patch/cocktail14+mysql+chkuser+quota.patch_20041116

4)
일부 파일 수정
vi mysql.c
#include <mysql/mysql.h>
#include </usr/local/mysql/include/mysql/mysql.h>로 수정
vi qmail-getpw.c
#include </mysql/mysql.h>
#include </usr/local/mysql/include/mysql/mysql.h>로 수정
vi Makefile
MYSQL_INCLUDE=-I/usr/local/include
MYSQL_INCLUDE=-I/usr/local/mysql/include 로 수정
MYSQL_LIBS=/usr/lib/mysql/libmysqlclient.a -lm -lz -lcrypt -lnsl -ldl

MYSQL_LIBS=-lmysqlclient -L/usr/local/mysql/lib/mysql -lm -lz -lcrypt -lnsl -ldl
로 수정
vi conf-cc
cc -O2 -DTLS=20021228 -I/usr/local/ssl/include

gcc -O2 -march=i686 -funroll-loops -DTLS=20021228 -I/usr/local/ssl/include
로 수정

수정필수사항은 mysql include, lib 경로와 openssl의 경로 입니다.

5)
컴파일 및 설치
make
make setup check
- control
파일들 생성
./config

실행후 정상적인 결과의 화면은 다음과 같습니다.
./config
Your hostname is chsd.
Your host's fully qualified name in DNS is chsd.chonnam.ac.kr.
Putting chsd.chonnam.ac.kr into control/me...
Putting chonnam.ac.kr into control/defaultdomain...
Putting ac.kr into control/plusdomain...
Checking local IP addresses:
127.0.0.1: Adding localhost to control/locals...
168.131.34.167: Adding chsd.chonnam.ac.kr to control/locals...
If there are any other domain names that point to you,
you will have to add them to /var/qmail/control/locals.
You don't have to worry about aliases, i.e., domains with CNAME records.
Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to those hosts.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

혹시 만약 ./config를 쳣을때 에러가 나온다면 반듯이 보셔야 할 부분이 있습니다.

/etc/resolv.conf
search chonnam.ac.kr <---
이 부분이 굉장히 중요합니다.
nameserver 168.126.63.1
nameserver 168.126.63.2

특히, search [domain name] 라인이 반드시 있어야 합니다.
/etc/hosts
127.0.0.1 localhost localhost.localdomain
123.234.123.234 chsd.chonnam.ac.kr chsd
123.234.123.231 other.chonnam.ac.kr other

위 파일의 내용을 확인하고, 내용에 맞추어 수정합니다.
/etc/sysconfig/network
..........
..........
HOSTNAME=chsd
DOMAINNAME=ultraqmail.com
..........
..........

위의 라인을 확인하여, 없으면 추가합니다.
위의 수정사항을 다 적용하였는데도, 정상적인 config 가 수행되지 않는다면,
그때는 이렇게 합니다.

./config-fast ultraqmail.com

config-fast
다음에 서버의 DNS 등록 호스트네임을 다 써주면 됩니다.
그러면, 정상적으로 다음 설치가 가능합니다.

이 단계를 거치고 나면 /var/qmail/control/ defaultdomain, locals, me, plusdomain, rcpthosts 이 생성되는데 차후 메일서버를 운영함에 있어 중요한 파일들이니 뭐하는 파일들인지 꼭 알아두시기 바랍니다.


2. ucspi-tcp
설치 (tcp커넥션을 만들어주는 것이죠)
1) ucspi-tcp
및 해당 패치 다운로드
http://cr.yp.to/ucspi-tcp/install.html 에서
ucspi-tcp-0.88.tar.gz
다운로드
http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ 에서
ucspi-tcp-0.88.errno.patch, ucspi-tcp-0.88.a_record.patch, ucspi-tcp-0.88.nobase.patch
다운로드
(
참고로 사이트가 깜빡깜빡(?)합니다. 만약 접속 않되시면 몇 시간후 접속을 하세요...^^)
http://sylvestre.ledru.info/howto/qm...88-mysql.patch
를 받습니다.

2)
설치
-
원래는 rblsmtpd를 깔아야 합니다. 그러나 ucspi-tcp-0.88버전이상은
이것을 포함하고 있다고 합니다. 또한 굳이 깔때 문제가 생길지도 모른다고 하니 않까시는게
좋을듯 합니다.
- ucspi-tcp
패치
patch -p1 < ../patch/ucspi-tcp-0.88.errno.patch
patch -p1 < ../patch/ucspi-tcp-0.88.nobase.patch
patch -p1 < ../patch/ucspi-tcp-0.88.a_record.patch
patch -p0 < ../patch/ucspi-tcp-0.88-mysql.patch

-
일부 파일 수정
vi conf-cc
gcc -O2 -I/usr/include/mysql

gcc -O2 -march=i686 -funroll-loops -I/usr/local/mysql/include/mysql
로 수정

vi db.c
#include <mysql.h>
#include </usr/local/mysql/include/mysql/mysql.h>로 수정

vi conf-ld
gcc -s -I/usr/include/mysql -L/usr/local/lib/mysql -lmysqlclient

gcc -s -I/usr/local/mysql/include/mysql -lmysqlclient -L/usr/local/mysql/lib/mysql
로 수정

-
컴파일 및 설치
make
make setup check


3. demontool
설치
1) demontool
및 해당 패치 다운로드
http://cr.yp.to/daemontools/install.html 에서
daemontools-0.76.tar.gz
다운로드
http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ 에서
daemontools-0.76.errno.patch
다운로드

2)
설치
-
설치 디렉토리 생성
mkdir -p /package
chmod 1755 /package
cd /package
cp /root/qmailsrc/src/daemontools-0.76.tar.gz /package
tar -zxvf daemontools-0.76.tar.gz
rm -rf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
patch -p1 < /root/qmailsrc/patch/daemontools-0.76.errno.patch
package/install


4. chechpasswd
1) chechpasswd
및 해당 패치 다운로드
http://cr.yp.to/checkpwd/install.html 에서 checkpassword-0.90.tar.gz 다운로드
http://download.softagency.net/mysql/Downloads/Contrib/
checkpassword-0.90-mysql-0.6.6.patch.gz
다운로드 후 압축푼다.
http://qmail.kldp.org/src/patches/glibc-2.3.1/
checkpassword-0.90.errno.patch
다운로드
************************************************** **********
checkpassword-0.90-mysql-0.7.4.patch
가 있으나 에러가 난다고 알려져 있습니다.
참고사이트입니다.
http://qmail.kldp.org/phpbb/viewtopi...ql-0.6.6.patch
************************************************** ************

chechpasswd
는 말 그대로 메일 계정의 패스워드를 체크할 수 있게 해주는겁니다.
여기에 마이에스큐엘 패치를 하여 디비에 들어있는 가상계정의 패스워드체크도 가능하게 됩니다.

2)
설치
- checkpassword
패치
patch -p1 < ../../patch/checkpassword-0.90-mysql-0.6.6.patch
patch -p1 < ../../patch/checkpassword-0.90.errno.patch

-
일부 파일 수정
vi mysql.c
#include <mysql.h>
#include </usr/local/mysql/include/mysql/mysql.h>로 수정

vi Makefile
MYSQL_INCLUDE=-I/usr/local/include
MYSQL_INCLUDE=-I/usr/local/mysql/include 로 수정
MYSQL_LIBS=/usr/lib/mysql/libmysqlclient.a -lm -lz -lcrypt -lnsl -ldl

MYSQL_LIBS=-lmysqlclient -L/usr/local/mysql/lib/mysql -lm -lz -lcrypt -lnsl -ldl
로 수정

vi conf-cc
gcc -O2
gcc -O2 -march=i686 -funroll-loops 로 수정

vi error.h
#include <errno.h>
추가

-
컴파일 및 설치
make
make setup check

-
소유권 및 퍼미션 변경
참고사이트
http://qmail.kldp.org/phpbb/viewtopi...=checkpassword
chown root.nofiles /bin/checkpassword
chmod 4110 /bin/checkpassword


5. qmail
설정
1) qmail-pop3, qmail-send, qmail-smtp
구동 / 로거 파일 생성
-
디렉토리 생성 및 권한설정
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/qmail/supervise/qmail-pop3d/log
chmod +t /var/qmail/supervise/qmail-send
chmod +t /var/qmail/supervise/qmail-smtpd
chmod +t /var/qmail/supervise/qmail-pop3d

- qmail-send
구동(run) 파일 생성
vi /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc

- qmail-send
로거(run) 파일 생성
vi /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/send

- qmail-smtp
구동(run) 파일 생성
vi /var/qmail/supervise/qmail-smtp/run
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 5000000 /usr/local/bin/tcpserver -v -R -l 0 -x /etc/tcp.smtp.cdb -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd `hostname -f` /bin/checkpassword /bin/true 2>&1

- qmail-smtp
로거(run) 파일 생성
vi /var/qmail/supervise/qmail-smtp/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtp

- qmail-pop3
구동(run) 파일 생성
vi /var/qmail/supervise/qmail-pop3/run
#!/bin/sh
exec /usr/local/bin/softlimit -m 5000000 /usr/local/bin/tcpserver -v -R -H -l 0 0 pop3 /var/qmail/bin/qmail-popup ultraqmail.com(
메일서버도메인명) /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1

- qmail-pop3
로거(run) 파일 생성
vi /var/qmail/supervise/qmail-pop3/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/pop3

-
각 구동 및 로거파일 권한 설정
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
chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

-
디폴트 알리아싱 설정
cd /var/qmail/alias
echo
임의의사용자아이디 > .qmail-mailer-daemon
echo
임의의사용자아이디 > .qmail-postmaster
echo
임의의사용자아이디 > .qmail-root

ex)
cd /var/qmail/alias
echo alias > .qmail-mailer-daemon
echo alias > .qmail-postmaster
echo alias > .qmail-root

- /var/qmail/rc
파일 생성
cp /var/qmail/boot/proc /var/qmail/rc
vi /var/qmail/rc
* 7
라인을 다음과 같이 수정
qmail-start '|preline procmail ./Maildir/' splogger qmail

-
로그 디렉토리 생성및 소유권 변경
(
차후 이쪽에서 로그를 볼 수 있도록 변경함)
mkdir -p /var/log/qmail/send
mkdir -p /var/log/qmail/smtpd
mkdir -p /var/log/qmail/pop3d
chown -R qmaill /var/log/qmail

- qmail
실행파일 생성

아래의 스크립트를 그대로 복사, 저장하거나 새로 받습니다.
http://kltp.kldp.org/tmp/qmail.txt
이 파일을 /etc/rc.d/init.d/ qmail 이라는 이름으로 저장한 후, 실행 퍼미션을 줍니다.

vi /etc/init.d/qmail
=====================
요기서부터============== ======
#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 80 80
# description: qmail MTA
# Source function library.
. /etc/rc.d/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-smtp"
svc -p /var/qmail/supervise/qmail-smtp
echo "Pausing qmail-pop3"
svc -p /var/qmail/supervise/qmail-pop3
;;
cont)
echo "Continuing qmail-send"
svc -c /var/qmail/supervise/qmail-send
echo "Continuing qmail-smtp"
svc -c /var/qmail/supervise/qmail-smtp
echo "Continuing qmail-pop3"
svc -c /var/qmail/supervise/qmail-pop3
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtp."
svc -d /var/qmail/supervise/qmail-smtp
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /var/qmail/supervise/qmail-send
echo "* Restarting qmail-smtp"
svc -u /var/qmail/supervise/qmail-smtp
;;
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
======================
요기까지================ =====


chmod 755 /etc/init.d/qmail

-
릴레이 설정(파일을 생성합니다)
vi /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
서버아이피:allow,RELAYCLIENT=""
:allow

- tcp.smtp
cdb형식으로 변환
/etc/init.d/qmail cdb
**
보통은 tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
사용하지만 /etc/init.d/qmail에 스크립트를 넣어줬기때문에 요걸루 변환합니다.


- sendmail
죽이기
이제 qmail로 모든 메일을 처리할 것이므로, 구형의 sendmail을 제거합니다.
우선 당신의 sendmail 데몬을 찾아서 그것을 kill합니다. 리눅스에서는

# ps ax | grep sendmail <--- sendmail
데몬이 있는지를 확인합니다.
# killall -TERM sendmail <--- sendmail
데몬을 제거합니다.

# ps ax | grep sendmail <---
다시 sendmail 데몬이 살아있는지를 확인합니다.

위의 명령은 현재 실행중인 sendmail만을 제거할 뿐입니다.
서버가 재시동되면, 다시 sendmail도 재시동되므로, 다음과 같은 명령어로 qmail로 모든 sendmail을 대체합니다.

mv /usr/lib/sendmail /usr/lib/sendmail.snd
mv /usr/sbin/sendmail /usr/sbin/sendmail.snd
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ln -sf /var/qmail/bin/qmail-qread /usr/bin/mailq

-
디비접속 컨트롤 파일 생성
vi /var/qmail/control/sqlserver
mysql_use yes
server localhost
login phpmail
password phpmail
db phpmail
table mailuser
port 3306
check_host yes
quota yes
ignore_validity yes
swap_check_order yes


-
디비설정
사용자 추가를 할때 grant명령을 써서 하는것이 아니고 밑과 같은 식으로 하시는것을 권합니다.

몇가지 옵션이 틀리게 나오더군요. 물론 사용하는데 큰 지장은 없지만 약간 찝찝한 기분을 지울 수 없더군요.

(
이부분은 mysql를 좀 아셔야 합니다. 완전 고생을 각오하셔야 합니다...)
mysql -u root -p
암호
use mysql;

insert into user values ('localhost', 'phpmail', password('phpmail'), 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N','N', 'N', 'N', 'N', 'N', 'N', 'N','','','','',0,0,0);

insert into db values ('localhost', 'phpmail', 'phpmail', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'Y', 'Y', 'Y','Y', 'Y');

create database phpmail;
flush privileges;
use phpmail;

create table mailuser (
mbox_host varchar(32) binary null,
id varchar(32) binary not null,
passwd varchar(32) binary not null,
crypt varchar(32) binary not null,
uid int(5) unsigned not null default '99',
gid int(5) unsigned not null default '99',
shell varchar(16) not null default '/bin/false',
home varchar(64) binary not null,
quota_size int(10) null,
start_date date not null default '0000-00-00',
expire_date date not null default '0000-00-00',
active enum('Y','N') not null default 'Y'
);

insert into mailuser (mbox_host, id, passwd, crypt, uid, gid, shell, home) values
('
서버도메인', 'phpmail', 'phpmail', encrypt('phpmail'), 99, 99, '/bin/false', '/메일박스가들어갈위치/서버도메인/phpmail');
** /
메일박스가들어갈위치/서버도메인은 /home/phpmail/ultraqmail.com 이런식 입니다.

-
메일디렉토리 설정
mkdir -p /
메일박스가들어갈위치/서버도메인/phpmail
/var/qmail/bin/maildirmake /
메일박스가들어갈위치(/home/phpmail)/서버도메인(ultraqmail.com)/phpmail(id)/Maildir
chown -R 99:99 /
메일박스가들어갈위치

만든 메일 홈으로 들어갑니다.

- .qmail
작성
================================================== ======================
%
|/var/qmail/bin/preline /usr/bin/procmail -p -m /home/phpmail/ultraqmail.com/phpmail/.procmailrc
================================================== ======================
**
쿼타설정인데요.. 패치에 따라 설정이 좀 다르네요...
일반적으론 |/var/qmail/bin/qmail-quota 요렇게 설정하는데요
cocktail14+mysql+chkuser+quota.patch_20041116
패치를 사용했을경우는 쿼타를 디비의 값을 읽어 바로 처리 하네요 해서
%
.qmail안에 써 주시면 쿼타설정 됩니다.
또한 소유자과 그룹을 nobody.nobody로 바꾸어 주어야 합니다.

- .procmail
작성
================================================== ======================
PATH=/bin:/usr/bin:/usr/local/bin
DEFAULT=/home/phpmail/ultraqmail.com/phpmail/Maildir/
MAILDIR=/home/phpmail/ultraqmail.com/phpmail/Maildir/
LOGFILE=/var/log/qmail/procmail
VERBOSE=no
SHELL=/bin/sh

# korean code decode
:0 Efhw
*^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\?
|formail -c | hcode -dk -m
:0 Efhw
*^(Subject|From|Cc):.*=\?ks_c_5601-1987\?(B|Q)\?
|formail -c | hcode -dk -m
:0

#:0 BfHw
#*^*.filename=.*(\?euc-kr\?)
#|formail -c | hcode -dk -m

# rejection from emailaddress
#* ^From: .*()
#/home/phpmail/ultraqmail.com/phpmail/Trash/rejection

# delete spam filter
#:0
#* ^Subject: .*()
#/dev/null

# move spam filter
#:0
#* ^Subject: .*()
#/home/phpmail/ultramail.com/phpmail/Trash/spam

#:0 Efhw
#* ^From: .*()
#|/script/my_vacation
================================================== ====================
** procmail
에서 필터링을 하시려면 요 파일에 설정해주면 됩니다.
또한 소유자과 그룹을 nobody.nobody로 바꾸어 주어야 합니다.

그런데 우리는 매일 이런것들을 만들어 준다면 굉장히 불편할 겁니다.

그래서 사용자가 추가될 때마다 자동으로 이런 과정이 되도록 다음과 같이 합니다.
# cd /etc/skel
# /var/qmail/bin/maildirmake Maildir
# echo ./Maildir/ > .qmail
# echo ./Maildir/ > .procmail

이제부터는 추가되는 모든 사용자에게 자동으로 Maildir 디렉토리와 .qmail .procmail파일이 생기게 될 것입니다.

-
시스템을 리부팅하고, qmail의 정상적인 동작을 확인합니다.
리부팅되고나서, /var/log/maillog 파일내용을 살펴보면, 끝부분에서 다음과 같은 라인이 보여야 합니다.

qmail: status: local 0/10 remote 0/20

그렇지 않다면, qmail 설정에 문제가 있는 것이므로, 앞의 과정들을 다시 한번 꼼꼼히 살펴보고,
설정파일들을 자세히 검토해야만 합니다.
ps ax
명령을 내리고나서, 다음과 같은 라인들이 보이는 지를 확인합니다.

#ps ax
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

모양이나 숫자들이 약간씩 틀리더라도, 반드시 13개의 프로세서가 동작하고 있어야 합니다.
위와 동일한 프로세서가 없다면, qmail 설정에 문제가 있는 것이다.
위와 같은 메시지와 프로세서들이 보이지 않는다면, 문서 앞의 과정에서 만든 설정파일들을 잘못 만든것
입니다. 대표적으로 자주 하는 실수는 /var/qmail/supervise/qmail-send/log/run 파일과
/var/qmail/supervise/qmail-smtpd/log/run
파일을 만들 때, qmaill qmail 로 잘못 쓰는 것입니다.
이 문서에 쓰여진 설정파일의 내용은 절대로 오타나 탈자가 없으므로, 잘 보고 틀린 곳을 찾아내기 바랍니다.

-
가상계정 테스트
/var/qmail/bin/qmail-getpw phpmail(id)
서버도메인(ultraqmail.com)
이렇게 했을때
phpmail9999/
메일박스가들어갈위치/서버도메인/phpmail
이렇게 떨어지면 정상입니다.
여기서 phpmail은 메일유저입니다. phpmail은 실 계정이 아닌 가상계정으로 디비에 저장됩니다.
이렇게 설정해 놓으면 차후 새로운 메일들은 phpmail 아랫쪽으로 쌓이게 됩니다.

================================================== =============
여기까지 하면 일단 아웃룩으로 메일 서비스를 이용할 수 있습니다.
물론 스팸메일이나 바이러스 등을 걸러주는 기능은 빠져있습니다.
================================================== ==============


6. imap
설치
1) imap-4.7c
및 해당 패치 다운로드
http://www.au.horde.org/pub/imap/old/ 에서 imap-4.7c2.tar.Z 를 다운로드
http://www.davideous.com/imap-maildir/distrib/imap-4.7/ 에서
imap-4.7-maildirpatched-1.00.tar.gz
를 다운로드
http://www.softagency.co.jp/products/mysql/imap.html 에서
imap-mysql-0.0.2.patch.gz
를 다운로드
** imap
을 사용하기 위해선 mysql패치와 maildir패치가 필요합니다. 두번째 링크에 보면
각 패칭들이 모두 있기는 하지만 일일이 다 패치해주려면 중복되는것두 있구 해서 어렵습니다.
그래서 imap-4.7-maildirpatched-1.00.tar.gz 이 파일을 선택했는데요. 요넘은 imap-4.7 maildir이 패치된 소스입니다. 이 두개가지구 설치합니다.

2) imap
소소 및 패치 구하기
imap-4.7c.tar.gz
imap-mysql-0.0.2.patch
imap-4.5_maildirpatched-1.00.tar.gz
imap-4.5-qmail.patch
imap-4.5-mdirlist.patch
imap-4.5-maildir980721-rename.patch
imap-4.5-maildir980721-delete.patch
imap-4.5-createproto.patch

-
소스의 압축을 풉니다.

tar xvf imap-4.7c.tar
cd imap-4.7c


패치는 patch 디렉토리에 모아놓습니다.

패치를 하기전에 다음과 같은것을 숙지하셔야 합니다.
위의 노가다는 이것을 위한 전초전에 불과합니다. 좀 고생을 더 심하게 하셔야 합니다.
다운받은 Maildir패치는 전부 4.5버전이므로 patch 명령어를 써서 패치를 할 수가 없고 반드시 해당 패치를 열어 내용을 실제 소스 코드에서 찾아서 적용시켜야 합니다.

패치방법은 다음과 같습니다.
예를 들어서...
imap-4.5-qmail.patch
을 패치를 한다면....
vi imap-4.5-qmail.patch
-> vi src/osdep/unix/env_unix.c
를 수정함을 알수 있습니다.

(diff
로 시작하는 문구로 시작해서 패치를 할 경로와 파일명이 나와있습니다.)

{
char tmp[MAILTMPLEN];
if (!sysInbox) { /* initialize if first time */
- sprintf (tmp,"%s/%s",MAILSPOOL,myusername ());
+ sprintf (tmp,"%s/Mailbox",myhomedir ());
sysInbox = cpystr (tmp); /* system inbox is from mail spool */
}
return sysInbox;
}
-> env_unix.c
의 해당 위치를 찾아 - 로 표시된 줄은 없애고 + 로 된줄은 추가
, 이런식으로 하시면 됩니다.

그럼 본격적으로 패치를 들어가도록 하죠.

cp imap-mysql-0.0.2.patch imap-mysql-0.0.2.patch.01
vi imap-mysql-0.0.2.patch.01
이곳에서 몇줄을 좀 지워주셔야 합니다.
36
번째 줄에서부터 148번째 줄까지 삭제를 합니다.

보시면 아시겠지만 그곳이 env_unix.c 부분을 패치하는 곳입니다. 이곳 전부를 삭제합니다.
그리고 난후에

patch -p1 < ../../patch/imap-mysql-0.0.2.patch.01

그리고 아까 지웠던 39-148줄 부분을 위에서 말씀드린 패치법으로 일일이 손으로 적용시켜줘야
합니다. 만약 그냥 넘어가시면 나중에 make시 에러 납니다.

*
참고사항 *
나와있는 Maildir패치가 4.5버전용이구 이미 mysql패치를 적용해 버려서 그냥 patch명령으로 수정이 안됩니다.
imap-4.5_maildirpatched-1.00.tar.gz
파일을 압축을 풉니다.
(MAP 4.5
Maildir patch를 적용해 놓은 패키지 인데... 이놈을 보고 풀면 도움이 됩니다. 나중에 patch시에 일부 파일은 사용합니다.)

4) imap-4.5-qmail.patch
위의 방법으로 패치합니다.

5) imap-4.5-mdirlist.patch
이것두 위의 a)와 마찬가지로 열어서 원하는 파일을 직접 수정하면 됩니다.

6) imap-4.5-maildir980721-rename.patch, imap-4.5-maildir980721-delete.patch
이 패치는 직접 수정하지 않고 아까 풀어놓은 imap-4.5_maildirpatched-1.00/src/osdep/unix/
에서 maildir.c maildir.h 두개를 복사해오면 패치는 적용이 된 상태이므로 특별히 수정해 줄 필요는 없습니다.

cp ../../patch/imap-4.5_maildirpatched-1.00/src/osdep/unix/maildir.c ../../patch/imap-4.5_maildirpatched-1.00/src/osdep/unix/maildir.h src/osdep/unix/

7) imap-4.5-createproto.patch
이것두 마찬가지로 열어서 원하는 파일을 직접 수정하면 됩니다.

8) make
전 추가 수정 사항
maildir.c
파일이 들어갔으니 이놈을 makefile에 추가해야합니다.
vi ../../patch/imap-4.5_maildirpatched-1.00/src/osdep/unix/Makefile
vi src/osdep/unix/Makefile

위의 Makefile maildir 이란 글자를 찾아 그것을 참조하여 아래의 Makefile의 해당 위치에 입력하면 된다. ( 4 5군데 정도)

9) src/c-client/mail.h
수정
mail.h
를 보시면 MESSAGECACHE라는 structure(구조체)가 있습니다.

unsigned int spare : 1; /* first spare bit */
unsigned int spare2 : 1; /* second spare bit */
unsigned int spare3 : 1; /* third spare bit */
void *sparep; /* spare pointer */
unsigned long user_flags; /* user-assignable flags */
} MESSAGECACHE;


이렇게 되어있는 부분에 포인터를 하나 추가시켜줍니다.

unsigned int spare : 1; /* first spare bit */
unsigned int spare2 : 1; /* second spare bit */
unsigned int spare3 : 1; /* third spare bit */
void *sparep; /* spare pointer */
void *maildirp; /* for the Maildir driver */ <--
요놈.
unsigned long user_flags; /* user-assignable flags */
} MESSAGECACHE;

- src/osdep/unix/Makefile
수정
SQLSERVERFILE=/var/qmail/control/sqlserver

10)
몇가지 ssl에 관련된 파일 복사
cp /usr/kerberos/include/krb5.h /usr/include/openssl/
cp /usr/kerberos/include/com_err.h /usr/include/openssl/
cp /usr/kerberos/include/profile.h /usr/include/openssl/

11) vi src/osdep/unix/env_unix.c
다음과 같은 부분을(비슷하게 되었습니다.)
----------------------------------------------------------------------------------------
+# for MySQL
+MYSQL_INCLUDE=-DUSE_MYSQL -I/usr/local/mysql/include
+MYSQL_LIBS=-L/usr/lib/mysql/libmysqlclient.a -lm -lz -lcrypt -lnsl -ldl
+MYSQL_OBJS=mysql.o
+SQLSERVERFILE=/var/qmail/control/sqlserver
----------------------------------------------------------------------------------------
이렇게 변경해 주세요.
----------------------------------------------------------------------------------------
+# for MySQL
+MYSQL_INCLUDE=-DUSE_MYSQL -I/usr/local/mysql/include
+MYSQL_LIBS=-lmysqlclient -L/usr/local/mysql/lib/mysql -lm -lz -lcrypt -lnsl -ldl
+MYSQL_OBJS=mysql.o
+SQLSERVERFILE=/var/qmail/control/sqlserver
----------------------------------------------------------------------------------------

12)
수정을 다 했으면 make를 한다.
make slx

--
주의 --
만약 아래의 error가 발생한다면 Linux 7.1이상에서는 ucspi-tcp, imap 설치시에 time.h가 문제가 됩니다.
따라서, 아래와 같이 수정하신다음에 다른 패키지를 컴파일하거나 설치하실때는 원래대로 되돌려 놓으면 됩니다.

-- error message --

make[3]: *** [osdep.o] Error 1
make[3]: Leaving directory `/home/test/webmail/imap-4.7b/c-client'
make[2]: *** [slx] Error 2
make[2]: Leaving directory `/home/test/webmail/imap-4.7b/c-client'
make[1]: *** [OSTYPE] Error 2
make[1]: Leaving directory `/home/test/webmail/imap-4.7b'

make: *** [slx] Error 2

# mv /usr/include/sys/time.h /usr/include/sys/time.h.ori
# ln -s /usr/include/time.h /usr/include/sys/time.h

그러나 우리는 애초부터 변경을 해서 사용했기 때문에 왠만해서는 에러가 안날겁니다.
만약 그래도 에러가 나신다면 패치를 잘못하신겁니다....
그렇다면 완전 생 노가다죠....

13)
추가환경 설정

cd /temp
cp -r imap4.7c /usr/local/imap
ln -s /usr/local/imap/c-client /usr/local/imap/include
ln -s /usr/local/imap/c-client /usr/local/imap/lib
cp /usr/local/imap/imapd/imapd /usr/sbin

이들은 xinetd 슈퍼데몬에 의해서 실행되므로 클라이언트 쪽에서 접속하여 사용할 수 있도록
하려면 환경설정을 수정해 주어야 합니다.

cd /etc/xinetd.d
vi imapd

service imap
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += HOST DURATION
log_on_failure += HOST
}

서비스가 제대로 등록되었는지 확인한다.
vi /etc/services
imap2 143/tcp imap # Interim Mail Access Proto v2
imap2 143/udp imap
주석으로 막혀 있는경우 제거해줍니다.

슈퍼데몬을 재가동한다.
/etc/init.d/xinetd restart

14)
설정 테스트

telnet
을 이용하여 로컬호스트 110포트(pop3)로 접속하여 테스트한다.

telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK POP3 localhost.localdomain v2000.70 server ready
user test@
도메인
초 주요사항입니다.
로그인 아이디는 반듯이 id@도메인입니다. 이 부분을 무시하시는 경향이 있는데 굉장히 중요한
사항입니다. 반듯이 id@도메인입니다.
아웃룩을 쓰실때에도 반듯이 id@도메인입니다. 꼭 기억하세요.

+OK User name accepted, password please
pass 1234

+OK Mailbox open, 0 messages
quit
+OK Sayonara
Connection closed by foreign host.

telnet
을 이용하여 로컬호스트 110포트(pop3)로 접속하여 테스트한다.
telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK localhost IMAP4rev1 v12.264 server ready
a00 login test@
도메인 암호

a00 OK LOGIN completed

a01 list mbox *
* LIST (\NoInferiors) NIL INBOX
a01 OK LIST completed

a02 logout
################################################## ##


#######################
후설치################## #####3
컴파일전 작업

rm /usr/include/sys/time.h ->
메세지 확인하세요 반듯이 심볼릭 링크 time.h입니다!!!
mv /usr/include/sys/time.h.ori /usr/inlcude/sys/time.h

1. apache
설치
1)
http://httpd.apache.org/download.cgi<SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 돋움; ms

2009/07/17 20:33 2009/07/17 20:33