<!doctype linuxdoc system>

<!-- This is qmail-IMAP. It describes how to install and configure
Linux as qmail mail MTA server and IMAP MUA interface connect to MTA.
 -->

<article>
<title>큐메일 + MySQL + IMP 설치 따라하기
<author>포포리<tt><htmlurl url="redbaron@kr.psi.net"
                           name="redbaron@kr.psi.net"></tt>
<date>2000년4월7일
<trans>방창현<tt><htmlurl url="winchild@kldp.org"
                          name="winchild@kldp.org"></tt>
<tdate>2000년4월19일
<abstract>
본 문서는 리눅스를 포함한 일반적인 유닉스 시스템에서 사용할 수 있는 메일전송에이전트
인 큐메일과 메일유저에이전트와 인터페이스를 하는 IMAP을 어떻게 설치하였는지에 대한
설치기 입니다. 개념적인 설명은 포함하고 있지 않습니다. 무조건 따라만 하시면 설치를
하실 수 있을 것 입니다. 문서의 초안작성는 포포리님이 하셨지만 저(방창현)이 임의대로
마구 첨삭을 하였습니다. 어투가 다르더라도 이해하시기 바랍니다.
</abstract>

<toc>

<!-- ***************************** SECTION ******************************** -->
<sect>
개 요 
<label id=introduction>
<p>
안녕하세여~~~ 
지난 1주일동안 나름대로 고생하며 설치를 한 qmail에서 imap를 사용하는 방법을 
이렇게 정리해서 올리게 됐습니다. ^^; 많은 분들이 닭질하는 것을 방지하기 위하야
이렇게 제가 닦질한 결과를 적네여. 부디 많은 도움이 되기를 바랍니다. 
<p>
혹.. 내용중에 이상한 부분이 있다면... 저에게 알려주심 수정을 하도록
하겠습니다.  쩝.. qmail대한 국내에서 만든 패치가 하나도 없음에... 안타깝더군여 -.-; 
<p>
문서는 마음대로 배포를 해 주셔도 됩니다. 수정하셔서 할때는 꼭 저에게도
알려주시구여... 
<p>
쿡쿡.. 굳이 안알려주신다면.. 할수없져 뭐... ^^; 
<p>
이제 시작을 해보지여... 

<!-- ***************************** SECTION ******************************** -->
<sect>
설치준비 
<label id=ready>
<p>
먼저 설치한 환경부터 말씀을 드리지여. 
Alzza Linux 6.0을 설치했구.. 배포되는 CD에서만 설치를 했고 다른 특별한 것은
없었습니다. 6.1이나 기타 리눅스 배포판에서도 잘 될걸로 사려됩니다만... Solaris는
자신하지 못하겠습니다. 
<p>
이제 필요한 패키지를 알아보죠. 패키지는 모두 tarball형식으로 사용했습니다. 
RPM은 하나도 안썼지여... 그래서 설치하는데 좀 오래걸릴지도 모릅니 당. ^^; 
<p>
제가 파일들의 링크를 포함시켰으니 참조하시기 바랍니다. 다른 버전을 사용할 시에는
제대로 설치가 안될수가 있습니다. 무조건 최신버전을 쫓아서 하지 마시고 규정된
배포본을 사용하시는것이 설치를 보장할 수 있습니다. 설치를 성공하신 이후에 새버전
으로 빠꾸시든지 하는것이 좋습니다.
<p>
^^ 부디 많은 분들이 성공하시기를 바랍니다. 같이 웹메일 프로젝트를 하는건 어떨까요?
메일 스튜디오를 능가하는.. 크크크...
<p>
<itemize>
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/apache_1.3.9.tar.Z"
             name="apache_1.3.9.tar.Z">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/checkpassword-0.81-mysql-0.6.6.patch.gz"
             name="checkpassword-0.81-mysql-0.6.6.patch.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/checkpassword-0.81.tar.gz"
             name="checkpassword-0.81.tar.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/daemontools-0.53.tgz"
             name="daemontools-0.53.tgz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.7b.tar.Z"
             name="imap-4.7b.tar.Z">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/mysql-3.22.25.tar.gz"
             name="mysql-3.22.25.tar.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/php-3.0.15.tar.gz"
             name="php-3.0.15.tar.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/qmail-1.03.tar.gz"
             name="qmail-1.03.tar.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/rblsmtpd-0.70.tar.gz"
             name="rblsmtpd-0.70.tar.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/ucspi-tcp-0.84.tar.gz"
             name="ucspi-tcp-0.84.tar.gz">
</itemize>
<p>
다음은 패치를 적용한 파일들입니다. 
<itemize>
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.5-createproto.patch"
             name="imap-4.5-createproto.patch">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.5-maildir980721-delete.patch"
             name="imap-4.5-maildir980721-delete.patch">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.5-maildir980721-rename.patch"
             name="imap-4.5-maildir980721-rename.patch">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.5-mdirlist.patch"
             name="imap-4.5-mdirlist.patch">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.5-qmail.patch"
             name="imap-4.5-qmail.patch">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-4.5_maildirpatched-1.00.tar.gz"
             name="imap-4.5_maildirpatched-1.00.tar.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/imap-mysql-0.0.2.patch.gz"
             name="imap-mysql-0.0.2.patch.gz">
  <item><p>
    <htmlurl url="http://www.kr.psi.net/files/qmail/qmail-1.03-mysql-0.6.6.patch.gz" name="qmail-1.03-mysql-0.6.6.patch.gz">
</itemize>
<p>
그리고 테스트를 위해 잠깐 만든프로그램이 있는데.. 이놈을 써도 되고 
yamail을 사용하셔도 절대 무방합니다. 둘다 테스트 완료했습니다. 
<p>
저는 /root/work/ 및 에 아래와 같이 풀어놓고 설치를 했습니다. 
<verb>
    [root@totoro work]# ls 
    apache_1.3.9/                  mysql-3.22.25/  rblsmtpd-0.70/ 
    checkpassword-0.81/            patch/          ucspi-tcp-0.84/ 
    daemontools-0.53/              php-3.0.15/     yamail-1999-09-01/ 
    imap-4.5_maildirpatched-1.00/  imap-4.7b/      qmail-1.03/ 

    [root@totoro work]# ls patch 
    checkpassword-0.81-mysql-0.6.6.patch  imap-4.5-mdirlist.patch 
    imap-4.5-createproto.patch            imap-4.5-qmail.patch 
    imap-4.5-maildir980721-delete.patch   imap-mysql-0.0.2.patch 
    imap-4.5-maildir980721-rename.patch   qmail-1.03-mysql-0.6.6.patch 
    [root@totoro work]# 
</verb>

<!-- ***************************** SECTION ******************************** -->
<sect>
설 치 
<label id=install>
<p>
설치순서는 저 나름대로 전체적인 흐름을 보고 정한것입니다. 물론 이 순서를 지켜주시지 
않을경우 어떤 에러가 발생할수도 있으니.. 되도록이면 지켜주세엽~ 모든 설치는 특별히
지정하지 않는한 "root" 권한으로 실행하십시오. 그리고 각 실행위치를 나타내는 프롬프트
를 (예를 들면 아래의 MySQL 설치의경우 "mysql-3.22.25]#" 와 같이) 눈여겨서 참조하여
주시기 바랍니다.
<!-- ----------------------------- SUB SECTION -------------------------------- -->
<sect1>
MYSQL 
<label id=mysql>
<p>
많이 설치를 해보셨을테니 간단하게 넘어가져 ^^; 먼저 환경설정을 해야겠져? 
<verb>
    [mysql-3.22.25]# ./configure --prefix=/usr/local/mysql --with-charset=euc_kr 
    [mysql-3.22.25]# make 
    [mysql-3.22.25]# make install 
    [mysql-3.22.25]# /usr/local/mysql/bin/mysql_install_db 
    [mysql-3.22.25]# /usr/local/mysql/bin/safe_mysqld & 
</verb>
symbolic link는 나중을 위해서도 꼭 필요합니다. 없음 에러가 콱~ 뜨지여 ^^ 
(MySQL을 적용한 큐메일이나 IMAP 등의 컴파일 시 필요합니다)
<verb>
    [mysql-3.22.25]# mkdir /usr/local/include
    [mysql-3.22.25]# ln -s /usr/local/mysql/include/mysql /usr/local/include/mysql 
    [mysql-3.22.25]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql 
    [mysql-3.22.25]# mkdir /usr/local/lib
    [mysql-3.22.25]# ln -s /usr/local/mysql/lib/mysql /usr/local/lib/mysql 
    [mysql-3.22.25]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql 
</verb>
부팅될때 뜨도록 등록도 합시당 
<verb>
    [mysql-3.22.25]# vi /etc/rc.d/rc.local 
    ---------------------------------------------------- 
    | if [ -f /usr/local/mysql/bin/safe_mysqld ]; then | 
    | /usr/local/mysql/bin/safe_mysqld &               | 
    | fi                                               | 
    ---------------------------------------------------- 
</verb>
여기까지 했음 mysql은 설치가 끝났네엽 ^^; 간단하게 하나 끝내고 다음으로 가져 

<!-- ----------------------------- SUB SECTION -------------------------------- -->
<sect1>
APACHE 
<p>
흐흐.. 아파치도 많이 해보셨지요? 이놈은 더 간단하게 갑니다. 
<verb>
    [apache-1.3.9]# ./configure --prefix=/usr/local/apache --enable-shared=max 
    [apache-1.3.9]# make 
    [apache-1.3.9]# make install 
</verb>
이놈도 부팅될때 뜨도록 등록을 합세당 
<verb>
    [apache-1.3.9]# vi /etc/rc.d/rc.local 
    ---------------------------------------------------- 
    | if [ -f /usr/local/apache/bin/httpd ]; then      | 
    | /usr/local/apache/bin/apachectl start            | 
    | fi                                               | 
    ---------------------------------------------------- 
</verb>
쿠쿠 벌써 2개나 끝났네엽.... 이제부터 진짜로 들어갑니다. 음..... 

<!-- ----------------------------- SUB SECTION -------------------------------- -->
<sect1>
QMAIL 
<p>
흐흐 드뎌 qmail에 왔군엽. 카카카... 고생을 해보도록 하져... 
뭐 qmail설치야 10번도 넘게 해보셨을테니... 다른 자세한 내용은 qmail HOW-TO 같은 
문서를 참고해서 봐 주십시오. 제가 말주변이 없어서 헷갈릴수도 있습니다. 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
qmail install
<p>
먼저 qmail에다 mysql 패치를 적용하도록 하지여... 
<verb>
    [qmai-1.03]# patch -p1 < ../patch/qmail-1.03-mysql-0.6.6.patch 
</verb>
qmail 디렉토리 만들어줘야 하는거 아시져? ^^ 
<verb>
    [qmai-1.03]# mkdir /var/qmail 
</verb>
qmail 유저를 등록해 줘야 하니 아래와 같이 복사를 하신후 user.sh파일을 edit합니다. 
다른 부분은 다 지우고 LINUX부분 만 남겨두고 앞에붙은 주석 #을 제거합니다. 
<verb>
    [qmai-1.03]# cp INSTALL.ids user.sh 
    [qmai-1.03]# sh user.sh 
</verb>
이제 qmail유저가 등록이 되고 몇몇 디렉토리도 같이 생겼습니당 ^^ 
<verb>
    [qmai-1.03]# make 
    [qmai-1.03]# make setup check 
</verb>
하할 여기까정 하면 우선 qmail은 설치가 됐겠죠? 크크크.... 
만약 컴팔중 에러가 났다면... mysql과 관련된 path같은 부분이나 위의 symbolic link 
일 가능성이 큽니다. 차근차근 봐 주세엽. 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
rblsmtpd install
<p>
이제 rblsmtpd를 설치해야져? 뭐 이놈이야 아주 간단하게 끝내지여. 
<verb>
    [rblsmtpd-0.70]# make 
    [rblsmtpd-0.70]# make setup check 
</verb>
하할 끝났습니다. 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
qmail 설치 계속
<p>
이젠 다시 qmail디렉토리로 갑니다. (/var/qmail/ 이 아닙니다. 소스 디렉입니다) 
<verb>
    [qmai-1.03]# ./config 
</verb>
만약 윗 부분이 에러가 난다면 아래 처럼 해주세여~~~ 
<verb>
    [qmai-1.03]# ./config-fast totoro.kr.psi.net
</verb>
<p>
(주) 원래는 config 만으로 되어야 합니다. 대부분 이것이 잘 되지 않는 이유는 DNS reverse
세팅이 되어 있지 않은 경우 인것 같습니다. reverse 세팅이란 IP 주소를 가지고 이름을
찾아내는 세팅을 이야기 합니다. 안돼도 되기는 하지만 제대로 세팅하게 하는것이 좋겠
지요? 확인은 ping -R &lt;ip address&gt; 로 확인할 수 있습니다. 하지만 DNS 가 같은 네트웍
에 있지 않을 경우는 대부분의 라우터들이 ping -R 서비스를 해주지 않으므로 안될 수
있습니다.
<p>
다음부터는 qmail설치를 그대로 따르고 설명은 안 붙입니다. 혹 죽어도 궁금하신게
있으시면 qmail HOW-TO 를 보세엽. 저는 qmail을 알려드리는게 아니라 qmail에서 
IMAP 사용하는 것을 설명하는 중입니당. 
<verb>
    [qmai-1.03]# cd ~alias 
    [qmai-1.03]# touch .qmail-root .qmail-postmaster .qmail-mailer-daemon 
    [qmai-1.03]# cp /var/qmail/boot/home /var/qmail/rc 
</verb>
쿠쿠 sendmail을 죽입시당. 저는 linux깔때 아예 sendmail을 안깔았져..
<verb>
    [qmai-1.03]# kill -9 $(ps aux | grep sendmail | awk {'print $2'}) 
    [qmai-1.03]# mv /usr/lib/sendmail /usr/lib/sendmail.old 
    [qmai-1.03]# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
    [qmai-1.03]# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail 
    [qmai-1.03]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 
</verb>
<p>
(주) kill 명령을 내릴때 "no such pid" 가 나올수가 있으나 그것은 명령을 내린
grep sendmail 을 검색한 것 이므로 상관없습니다.
<p>
qmail을 띄워봅세당 ^^ 하할~~~ 
<verb>
    [qmai-1.03]# csh -cf '/var/qmail/rc &' 
</verb>
이놈도 부팅될때 뜨도록 등록을 합세당 
<verb>
    [qmai-1.03]# vi /etc/rc.d/rc.local 
    ---------------------------------------------------- 
    | if [ -f /var/qmail/rc ]; then                    | 
    | csh -cf '/var/qmail/rc &'                        | 
    | fi                                               | 
    ---------------------------------------------------- 
</verb>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
ucspi-tcp
<p>
이제부텀은 qmail과 같이 깔아야 하는 넘들입니다. 쿠쿠... 역시 뭐하는 놈인지는 
^^ HOW-TO 를 보세엽~~~ 전 깔수있도록만 알려드립니다. 
<verb>
    [ucspi-tcp-0.84]# make 
    [ucspi-tcp-0.84]# make setup check 
</verb>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
daemontools
<p>
제일 끝에 setuser명령이 안먹는 경우가 있는데 이경우 0.53버전을 설치하시면 
문제 없습니다. 0.53을 이용해 주세엽.. 물론 setuidgid도 상관없지만여 ^^ 
<verb>
    [daemontools-0.53] make 
    [daemontools-0.53] make man 
    [daemontools-0.53] make setup 
    [daemontools-0.53] make check 
</verb>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
qmail 설치 계속
<p>
흠흠... 이제 대강 qmail은 정리가 되어갑니다. ^^ 이제 로그에 관한 설정을 하지여 
<verb>
    [qmai-1.03]# mkdir /var/log/qmail 
    [qmai-1.03]# chown qmaill /var/log/qmail 
    [qmai-1.03]# mkdir /var/log/qmail/qmail-smtpd 
    [qmai-1.03]# mkdir /var/log/qmail/qmail-pop3d 
    [qmai-1.03]# chown qmaill /var/log/qmail/* 
</verb>
이제 tcprules을 설정합니다. ^^뭐하는 놈인지는 다 아시죠? 
뭐 외부에서 SMTP로 쓰고 못쓰고.. 뭐 어쩌구 저쩌구 하더군여.... 
<verb>
    [qmai-1.03]# vi /etc/tcp.smtp 
</verb>
:allow 또는 203.255.115.:allow,RELAYCLIENT="" 뭐 이런식으로 설정합니다. 
<verb>
    [qmai-1.03]# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp 
    [qmai-1.03]# PATH=/var/qmail/bin:/usr/local/bin:$PATH 
    [qmai-1.03]# export PATH
    [qmai-1.03]# mkdir /var/lock/qmail-smtpd 
    [qmai-1.03]# supervise /var/lock/qmail-smtpd \ 
    tcpserver -v -x/etc/tcp.smtp.cdb -u71 -g1001 0 25 \ 
    rblsmtpd qmail-smtpd 2>&1 | \ 
    setuser qmaill accustamp | \ 
    setuser qmaill cyclog -s5000000 -n5 /var/log/qmail/qmail-smtpd & 
    [qmai-1.03]# vi /etc/inetd.conf 
</verb>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
checkpassword
<p>
<verb>
    [checkpassword-0.81]# patch -p1 < ../patch/checkpassword-0.81-mysql-0.6.6.patch 
    [checkpassword-0.81]# make 
    [checkpassword-0.81]# make setup check 
    [checkpassword-0.81]# vi /etc/inetd.conf 
</verb>
아래와 같이 /etc/inetd.conf 파일에 pop-3를 수정합니다. 쭈욱 한줄로 쓰세요. 절대 두줄이
아닙니다.
<verb>
    pop-3 stream tcp nowait root /usr/sbin/tcpd /var/qmail/bin/qmail-popup totoro.kr.psi.net
       /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 
</verb>
잘되나 테스트를 해봅세당.. ^^; 하하 잘되야 할텐데.... 
<verb>
    [checkpassword-0.81]# printf "popori\01111\0Y123456\0" | /bin/checkpassword `which id` 3&lt;&0 
</verb>
아시져? "계정\0패스워드\0암거나\0" 이놈이 안되면 다시해야됩니당... 부디 잘하세엽... 
<p>
(주)혹 libmyysqlclient.so.6 가 없다고 에러가 날수 있습니다. 이경우는 새로 설치된 MySQL 의 shared 
라이브러리가 /usr/lib 디렉토리에 존재하지 않기 때문에 나는 에러 입니다. 아래를 실행하고 다시
실행하십시오.
<verb>
    [checkpassword-0.81]# ln -s /usr/lib/mysql/libmysqlclient.so.6.0 /usr/lib/libmysqlclient.so.6
</verb>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
qmail에 sqlserver를 설정합니다
<p>
<verb>
    [qmai-1.03] vi /var/qmail/control/sqlserver 
    ---------------------------------------
    | mysql_use yes                       | 
    | server localhost                    | 
    | login qm_user                       | 
    | password                            | 
    | db qmail                            | 
    | table users                         | 
    | check_host no                       | 
    ---------------------------------------
</verb>
<bf>
(주) MySQL 에 접속하는 유저로서 qm_user 를 사용하고 있습니다. 이미 MySQL 을 사용하기 위한
authority 설정이 되어 있어야 합니다. 자세한것은 MySQL 매뉴얼을 참조하십시오.
</bf>
<p>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
MySQL DB설정
<p>
후후 이렇게 적었으면 맞게 DB도 설정을 해줘야겠죠? 
<verb>
    [mysql-3.22.25]# mysqladmin create qmail 
    [mysql-3.22.25]# mysql mysql 
</verb>
<p>
들어가서 위에 적은 popori 계정과 qmail DB를 mysql database에 적용합니다. 
유저등록하고(user table) DB사용가능하게 적어줍니다 (db table) 
하하 이놈은 mysql manual을 보시던가 아님 저에게 살짝 메일주심 제가 
쿼리 적어드리지엽. ^^ 
<verb>
    [mysql-3.22.25]# mysql -u popori qmail 
    ----------------------------------------------------
    | create table users (                             | 
    | id char(32) default '' not null,                 | 
    | crypt char(32) binary default '' not null,       | 
    | passwd char(32) binary default '' not null,      | 
    | uid int(10) unsigned default '65534' not null,   | 
    | gid int(10) unsigned default '65534' not null,   | 
    | shell char(100) binary default '' not null,      | 
    | home char(100) binary default '' not null,       | 
    | start_date date default '0000-00-00' not null,   | 
    | expire_date date default '3000-12-31' not null,  | 
    | active enum('Y', 'N') default 'Y' not null,      | 
    | key id(id(10)),                                  | 
    | key start_date(start_date),                      | 
    | key expire_date(expire_date),                    | 
    | key active(active)                               | 
    | );                                               | 
    ----------------------------------------------------

    insert into users(id, uid, gid, crypt, shell, home) 
    values ('test', 1000, 1000, encrypt('test'), '/bin/false', '/home/muser/test'); 
</verb>
<p>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect2>
테스트
<p>
이제 테스트를 해봐야겠지여? 쿠쿠.. 여기서 못지나감 안됩니당... 꼭 패스하세엽.
insert문장을 잘 보세엽. 
<verb>
    [mysql-3.22.25]# mkdir /home/muser/test 
    [mysql-3.22.25]# /var/qmail/bin/maildirmakr /home/muser/test/Maildir 
    [mysql-3.22.25]# echo "./Maildir/" > /home/muser/test/.qmail 
    [mysql-3.22.25]# chown -R 1000.1000 /home/muser/test
</verb>
<p>
아래와 같은 명령을 줬을때... alias등으로 나오면 실패한겁니다. 
반드시 uid(1000), gid(1000)/home/muser/test 와 같이 나와야 합니다 ^^ 
<verb>
    [mysql-3.22.25]# /var/qmail/bin/qmail-getpw test localhost 
</verb>
<p>
제대로 테스트가 됐다면 메일을 보내보죠 
<verb>
    [mysql-3.22.25]# echo to:test | /var/qmail/bin/qmail-inject 
</verb>
<p>
보낸 메일을 받았는지는 /home/muser/test/Maildir/new 밑에 뭔가 파일이 생기면 잘 되는겁니다. 
이제는 로그인을 해보지엽. 
<verb>
    [mysql-3.22.25]# telnet localhost pop-3 
    +OK <15378.956132287@<domain_name>
    user test 
    +OK
    pass test 
    +OK
    ...
    quit
    [mysql-3.22.25]# _
</verb>
위와 같이해서 ok가 나오나여? 물론 ok가 아니라면 나올때 까정 설정을 하세엽. 뭔가 빠진겁니다. 
<p>
학학... 이제 qmail까정 세팅이 끝났고... 이제는 IMAP 랑 PHP 등이 남았네여. 
IMAP 는 조금 복잡하니 잘 봐주세요.. 계속가죠...... 

<!-- ----------------------------- SUB SECTION -------------------------------- -->
<sect1>
IMAP 
<p>
하하 드뎌 IMAP까정 왔습니다. 얼렁 얼렁 가져.. 갈길이 머네엽. 
로그인을 MYSQL에서 할수 있도록 패치를 해줍니다. 
<verb>
    [imap-4.7b] patch -p1 < ../patch/imap-mysql-0.0.2.patch 
</verb>
이제 컴파일을 하기전에 다른일을 해야합니다. 
오늘 이글을 왜 쓰는지 까먹으시면 안되죠. ^^; 
qmail에서 IMAP를 사용하기 위함이니.. 당근 Maildir 패치를 적용해 줘야합니다. 
그런데 나와있는 Maildir패치가 4.5버전용이구 이미 mysql패치를 적용해 
버려서 그냥 patch명령으로 수정이 안됩니다. -_-; 
이놈들은 일일이 손으로 패치를 해줘야합니다. 뭐 그래봐야 15분 정도 더
투자됩니다. -_-; 안타까운 일이지만요... 
<p>

<!-- .............................. SUB-SUB-SUB SECTION .............................. -->
<sect2>
Maildir 패치
<p>
먼저 이놈을 잘 하기위해서 imap-4.5_maildirpatched-1.00 을 받아서 풉니다. 
이건 IMAP 4.5에 Maildir patch를 적용해 놓은 패키지 인데... 이놈을 보고 풀면
도움이 되지여. 
<p>
자 이제 갑니다. 
먼저 patch 디렉토리를 보면 IMAP에서 Maildir 패치는 총 5개의 파일이 있습니다. 
이 각각의 파일을 패치를 적용해 줘야 제대로 작동합니다. 
<!-- .............................. SUB-SUB-SUB SECTION .............................. -->
<sect3>
IMAP-4.5-qmail.patch 
<p>
이 파일을 vi로 열어보면 src/osdep/unix/env_unix.c 를 고친다는 것을 알수 있습니다. 
<verb>
    [imap-4.7b] vi src/osdep/unix/env_unix.c 
</verb>
<p>
[imap-4.7b] 위의 패치 파일을 보며 env_unix.c를 고칩니다. 
고치는 방법을 대강 알려드리면.. 먼저 line을 봅니다. 
@@ -595,7 +596,7 @@ <-- 이런 부분이 있죠? 이건 595번째 라인이란 소리인데... 
이미 패치가 적용돼 있기 때문에 이 근처에서 찾아보시면 됩니다. 
<verb>
    { 
      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; 
</verb>
<p>
다시 위와 같은 부분이 있는데 595번 line에 위와 같은 코드가 있고 
앞에 -는 원래있는 부분인데 이 부분을 삭제하고 대신 
+가 들어있는 부분의 코드로 대체를 하는겁니다. 
^^ 간단히 1줄이죠? 앞에 #는 다 주석처리 된것이므로 수정하지 않습니다. 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect3>
imap-4.5-mdirlist.patch 
<p>
이놈은 src/c-client/mail.c 를 수정합니다. 
방법은 위와 같지여? 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect3>
imap-4.5-maildir980721-rename.patch | imap-4.5-maildir980721-delete.patch 
<p>
다음은 2개 패치를 한번에 적용해 보죠. 
음.. 우선 이놈은 src/osdep/unix/maildir.c 를 고칩니다. 
하지만 vi로 보면 파일이 없죠? ^^; 
이때 아까 풀어놓은 imap-4.5_maildirpatched-1.00/src/osdep/unix/ 에 가보면 
여기에는 maildir.c maildir.h 가 있습니다 ^^ 하하 두개를 복사해 오죠. 
그럼 2개의 패치는 적용이 된 상태이므로 넘어갑니다. 카카카카. 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect3>
imap-4.5-createproto.patch 
<p>
이놈도 src/osdep/unix/env_unix.c 를 수정합니다. 마찬가지의 방법으로 조심스럽게 합니다. 
비슷한 부분이 많아 잘못 하실수도 있으니까요 -_-; 

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB-SUB SECTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<sect3>
Makefile 
<p>
이제 이 부분들을 다 마치셨으면 마지막으로 수정해야 될 부분이 2군데 있습니다.
<p>
하나는 maildir.c 파일이 들어갔으니 이놈을 makefile에 추가해야겠죠? 당근인 얘기입니다. 
src/osdep/unix/Makefile을 vi로 엽니다. 그리고 다른 터미널을 하나 더 열어서
imap-4.5_maildirpatched-1.00/src/osdep/unix/Makefile 을 엽니다. 그리고 여기서
maildir을 찾아서 어디어디 들어가는지 확인후 4.7에 있는 Makefile에도 같이 적용을
시켜줍니다. ^^ 한 4~5군데 정도입니다. 
<p>
이제 마지막입니다. 저도 컴파일중간에 에러가 나서 발견한건데요... 
env_unix.c 에 몇가지가 추가되면서 mail.h 를 고쳐야 합니다. 
src/c-client/mail.h를 보시면 MESSAGECACHE라는 structure(구조체)가 있습니다. 
<verb>
      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; 
</verb>
<p>
이렇게 되어있는 부분에 포인터를 하나 추가시켜줍니다. 
<verb>
      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; 
</verb>
<p>
하학~~~~ 이제 끝났습니다 돌리지여. 
<verb>
    [imap-4.7b]# make slx 
</verb>
<p>
를 하고서는 고쳐 주어야할 파일이 있습니다. c-client 로 디렉토리를 변경한 후에
<verb> 
    [imap-4.7b]# cd c-client
</verb> 
<p>
거기에서 CFLAGS 파일을 편집하세요. 한줄짜린데 끝에 보면
-DSQLSERVERFILE="/etc/imap/sqlserver" 를
-DSQLSERVERFILE="\"/var/qmail/control/sqlserver\"" 로 바꾸십시요.
혹 sqlserver를 특정한 디렉토리에 만들었다면 거기로 바꾸고요.
근데 \" 를 잊지 마십시요. 컴파일시 에러 납니다. 그리고 이 태그에
영향을 받는것은 mysql.c 이므로 touch 를 해주어야 컴파일을 합니다. (꼭!)
<verb>
    [c-client]# touch mysql.c
</verb>
<p> 
이것은 make slx 를 하면 다시 되돌아 갑니다. 혹 재컴파일 할 있을 경우
다시 돌려주어야 합니다. 그냥 make 하면 상관없구요. 다음에는 같은
디렉토리에 linkage.c 와 linkage.h 가 있습니다. 그 파일의 꼭대기에 linkage.c 는
<verb>
    mail_link (&amp;maildirdriver);
</verb>
<p> 
를 삽입하고 linkage.h 에는 아래를 삽입합니다.
<verb>
    extern DRIVER maildirdriver;
</verb>
<p>
그리고는 상위 디렉토리로 올라가서
<verb>
    [imap-4.7b] # rm imapd/imap.o popd/*.o mtest/*.o
</verb>
 
를 실행하여 준후에 다시 make 를 하면 변경된 부분에 대한 컴파일을
다시 합니다. 이제 aeromail 을 통해서 접속하면 IMAP 과  MySQL 이 적용된
프로그램이 구동할것 입니다.
<verb>
    [imap-4.7b]# make
    [imap-4.7b]# cp -r imap-4.7b /usr/local/imap 
    [imap-4.7b]# ln -s /usr/local/imap/c-client /usr/local/imap/include 
    [imap-4.7b]# ln -s /usr/local/imap/c-client /usr/local/imap/lib 
    [imap-4.7b]# cp /usr/local/imap/ipopd/ipop2d /usr/sbin 
    [imap-4.7b]# cp /usr/local/imap/ipopd/ipop3d /usr/sbin 
    [imap-4.7b]# cp /usr/local/imap/imapd/imapd /usr/sbin 
</verb>
<p>
주석으로 막혀있다면 풀어줍니다. 
<verb>
    [imap-4.7b]# vi /etc/services pop-2 pop-3 imap 등록 
</verb>
<p>
먼저 qmail설치시 수정했던 pop-3는 고치면 안됩니다. 
[imap-4.7b]# vi /etc/inetd.conf pop-2 pop-3 imap 등록 데몬을 다시띄우고 
<verb>
    [imap-4.7b]# killall -HUP inetd 
</verb>
IMAP데몬이 잘 되는지 확인을 하죠.. 
<verb>
    [imap-4.7b]# telnet localhost 143 
</verb>
하하 뭔가 나오면 제대로 된겁니다. 이제는 PHP를 깔져 

<!-- ----------------------------- SUB SECTION -------------------------------- -->
<sect1>
PHP 
<p>
헉헉... 드뎌 마지막입니다. 음... 힘들군여.... 
<verb>
    [php-3.15]# ./configure --with-apxs=/usr/local/apache/bin/apxs
    --with-mysql=/usr/local/mysql --with-imap=/usr/local/imap
    --with-config-file-path=/usr/local/lib --enable-track-vars 
    [php-3.15]# make 
    [php-3.15]# make install 
</verb>
<p>
하하 간단하죠? PHP도 끝났습니다. 

<!-- ***************************** SECTION ******************************** -->
<sect>
기타설정 
<p>
이제 다 됐으니 웹서버를 띄우져,,,,, 
먼저 띄우기전에 /usr/local/apache/conf/httpd.conf 를 수정해야합니다. 
php도 지원되게 풀고 홈디렉도 정하고 기타 등등 이것저것 해줍니다. 
글구 apachectl start 하고 띄우죠. 

<!-- ***************************** SECTION ******************************** -->
<sect>
테스트 
<p>
앗! 이부분은 아직 정리를 못했는데... -_-; 우선 급하게 보실분은 yamail을 설치해
보세여. http://www.kr.freebsd.org/~jaejunh/ 
여기서 다운 받으신후 yamail패키지만 설치하심 됩니다. 아주 간단하니깐요... 
한 5분이면 될겁니다. 
그리고 제가 테스트 하실수 있도록 만든 부분은 추후 다시 글을 올려드리겠습니다. 
죄송함다 ^^ 

<!-- ***************************** SECTION ******************************** -->
<sect>
마치며 
<p>
음... 정신없이 1시간 동안 나름대로 정리를 하면서 글을 쓴다고 썼는데... 
정신이 하나도 없구 많은 분들이 다시 물어오실거 같아 걱정이 앞서는 군여... 
보다 잘 정리할수 있었는데... 
기쁜 마음에 많은 분들께 미리 알리려다 보니... 음..... 
<p>
암턴 정리되지 않은 긴 글을 읽어주셔서 감사하고... 보다 좋은 글로 다시 한번
편집을 해 보도록 하겠습니다. 
<p>
많은 분들에게 도음이 되었으면 좋겠네요... 
<p>
다음엔 위의 환경을 바탕으로 웹메일을 만들면서 에러나 문제점을 정리하고
어찌 만들었는지 적어볼 생각입니다. ^^ 크크.... 
한 1달정도 계획을 잡고있습니다. 많이 성원해 주세여~~~~ 
<p>
감사합니다. 

</article>
