다음 이전 차례

3. 설 치

설치순서는 저 나름대로 전체적인 흐름을 보고 정한것입니다. 물론 이 순서를 지켜주시지 않을경우 어떤 에러가 발생할수도 있으니.. 되도록이면 지켜주세엽  모든 설치는 특별히 지정하지 않는한 "root" 권한으로 실행하십시오. 그리고 각 실행위치를 나타내는 프롬프트 를 (예를 들면 아래의 MySQL 설치의경우 "mysql-3.22.25]#" 와 같이) 눈여겨서 참조하여 주시기 바랍니다.

3.1 MYSQL

많이 설치를 해보셨을테니 간단하게 넘어가져 ^^; 먼저 환경설정을 해야겠져?

    [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 & 
symbolic link는 나중을 위해서도 꼭 필요합니다. 없음 에러가 콱  뜨지여 ^^ (MySQL을 적용한 큐메일이나 IMAP 등의 컴파일 시 필요합니다)
    [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 
부팅될때 뜨도록 등록도 합시당
    [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                                               | 
    ---------------------------------------------------- 
여기까지 했음 mysql은 설치가 끝났네엽 ^^; 간단하게 하나 끝내고 다음으로 가져

3.2 APACHE

흐흐.. 아파치도 많이 해보셨지요? 이놈은 더 간단하게 갑니다.

    [apache-1.3.9]# ./configure --prefix=/usr/local/apache --enable-shared=max 
    [apache-1.3.9]# make 
    [apache-1.3.9]# make install 
이놈도 부팅될때 뜨도록 등록을 합세당
    [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                                               | 
    ---------------------------------------------------- 
쿠쿠 벌써 2개나 끝났네엽.... 이제부터 진짜로 들어갑니다. 음.....

3.3 QMAIL

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

qmail install

먼저 qmail에다 mysql 패치를 적용하도록 하지여...

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

rblsmtpd install

이제 rblsmtpd를 설치해야져? 뭐 이놈이야 아주 간단하게 끝내지여.

    [rblsmtpd-0.70]# make 
    [rblsmtpd-0.70]# make setup check 
하할 끝났습니다.

qmail 설치 계속

이젠 다시 qmail디렉토리로 갑니다. (/var/qmail/ 이 아닙니다. 소스 디렉입니다)

    [qmai-1.03]# ./config 
만약 윗 부분이 에러가 난다면 아래 처럼 해주세여   
    [qmai-1.03]# ./config-fast totoro.kr.psi.net

(주) 원래는 config 만으로 되어야 합니다. 대부분 이것이 잘 되지 않는 이유는 DNS reverse 세팅이 되어 있지 않은 경우 인것 같습니다. reverse 세팅이란 IP 주소를 가지고 이름을 찾아내는 세팅을 이야기 합니다. 안돼도 되기는 하지만 제대로 세팅하게 하는것이 좋겠 지요? 확인은 ping -R <ip address> 로 확인할 수 있습니다. 하지만 DNS 가 같은 네트웍 에 있지 않을 경우는 대부분의 라우터들이 ping -R 서비스를 해주지 않으므로 안될 수 있습니다.

다음부터는 qmail설치를 그대로 따르고 설명은 안 붙입니다. 혹 죽어도 궁금하신게 있으시면 qmail HOW-TO 를 보세엽. 저는 qmail을 알려드리는게 아니라 qmail에서 IMAP 사용하는 것을 설명하는 중입니당.

    [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 
쿠쿠 sendmail을 죽입시당. 저는 linux깔때 아예 sendmail을 안깔았져..
    [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 

(주) kill 명령을 내릴때 "no such pid" 가 나올수가 있으나 그것은 명령을 내린 grep sendmail 을 검색한 것 이므로 상관없습니다.

qmail을 띄워봅세당 ^^ 하할   

    [qmai-1.03]# csh -cf '/var/qmail/rc &' 
이놈도 부팅될때 뜨도록 등록을 합세당
    [qmai-1.03]# vi /etc/rc.d/rc.local 
    ---------------------------------------------------- 
    | if [ -f /var/qmail/rc ]; then                    | 
    | csh -cf '/var/qmail/rc &'                        | 
    | fi                                               | 
    ---------------------------------------------------- 

ucspi-tcp

이제부텀은 qmail과 같이 깔아야 하는 넘들입니다. 쿠쿠... 역시 뭐하는 놈인지는 ^^ HOW-TO 를 보세엽    전 깔수있도록만 알려드립니다.

    [ucspi-tcp-0.84]# make 
    [ucspi-tcp-0.84]# make setup check 

daemontools

제일 끝에 setuser명령이 안먹는 경우가 있는데 이경우 0.53버전을 설치하시면 문제 없습니다. 0.53을 이용해 주세엽.. 물론 setuidgid도 상관없지만여 ^^

    [daemontools-0.53] make 
    [daemontools-0.53] make man 
    [daemontools-0.53] make setup 
    [daemontools-0.53] make check 

qmail 설치 계속

흠흠... 이제 대강 qmail은 정리가 되어갑니다. ^^ 이제 로그에 관한 설정을 하지여

    [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/* 
이제 tcprules을 설정합니다. ^^뭐하는 놈인지는 다 아시죠? 뭐 외부에서 SMTP로 쓰고 못쓰고.. 뭐 어쩌구 저쩌구 하더군여....
    [qmai-1.03]# vi /etc/tcp.smtp 
:allow 또는 203.255.115.:allow,RELAYCLIENT="" 뭐 이런식으로 설정합니다.
    [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 

checkpassword

    [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 
아래와 같이 /etc/inetd.conf 파일에 pop-3를 수정합니다. 쭈욱 한줄로 쓰세요. 절대 두줄이 아닙니다.
    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 
잘되나 테스트를 해봅세당.. ^^; 하하 잘되야 할텐데....
    [checkpassword-0.81]# printf "popori\01111\0Y123456\0" | /bin/checkpassword `which id` 3<&0 
아시져? "계정\0패스워드\0암거나\0" 이놈이 안되면 다시해야됩니당... 부디 잘하세엽...

(주)혹 libmyysqlclient.so.6 가 없다고 에러가 날수 있습니다. 이경우는 새로 설치된 MySQL 의 shared 라이브러리가 /usr/lib 디렉토리에 존재하지 않기 때문에 나는 에러 입니다. 아래를 실행하고 다시 실행하십시오.

    [checkpassword-0.81]# ln -s /usr/lib/mysql/libmysqlclient.so.6.0 /usr/lib/libmysqlclient.so.6

qmail에 sqlserver를 설정합니다

    [qmai-1.03] vi /var/qmail/control/sqlserver 
    ---------------------------------------
    | mysql_use yes                       | 
    | server localhost                    | 
    | login qm_user                       | 
    | password                            | 
    | db qmail                            | 
    | table users                         | 
    | check_host no                       | 
    ---------------------------------------
(주) MySQL 에 접속하는 유저로서 qm_user 를 사용하고 있습니다. 이미 MySQL 을 사용하기 위한 authority 설정이 되어 있어야 합니다. 자세한것은 MySQL 매뉴얼을 참조하십시오.

MySQL DB설정

후후 이렇게 적었으면 맞게 DB도 설정을 해줘야겠죠?

    [mysql-3.22.25]# mysqladmin create qmail 
    [mysql-3.22.25]# mysql mysql 

들어가서 위에 적은 popori 계정과 qmail DB를 mysql database에 적용합니다. 유저등록하고(user table) DB사용가능하게 적어줍니다 (db table) 하하 이놈은 mysql manual을 보시던가 아님 저에게 살짝 메일주심 제가 쿼리 적어드리지엽. ^^

    [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'); 

테스트

이제 테스트를 해봐야겠지여? 쿠쿠.. 여기서 못지나감 안됩니당... 꼭 패스하세엽. insert문장을 잘 보세엽.

    [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

아래와 같은 명령을 줬을때... alias등으로 나오면 실패한겁니다. 반드시 uid(1000), gid(1000)/home/muser/test 와 같이 나와야 합니다 ^^

    [mysql-3.22.25]# /var/qmail/bin/qmail-getpw test localhost 

제대로 테스트가 됐다면 메일을 보내보죠

    [mysql-3.22.25]# echo to:test | /var/qmail/bin/qmail-inject 

보낸 메일을 받았는지는 /home/muser/test/Maildir/new 밑에 뭔가 파일이 생기면 잘 되는겁니다. 이제는 로그인을 해보지엽.

    [mysql-3.22.25]# telnet localhost pop-3 
    +OK <15378.956132287@<domain_name>
    user test 
    +OK
    pass test 
    +OK
    ...
    quit
    [mysql-3.22.25]# _
위와 같이해서 ok가 나오나여? 물론 ok가 아니라면 나올때 까정 설정을 하세엽. 뭔가 빠진겁니다.

학학... 이제 qmail까정 세팅이 끝났고... 이제는 IMAP 랑 PHP 등이 남았네여. IMAP 는 조금 복잡하니 잘 봐주세요.. 계속가죠......

3.4 IMAP

하하 드뎌 IMAP까정 왔습니다. 얼렁 얼렁 가져.. 갈길이 머네엽. 로그인을 MYSQL에서 할수 있도록 패치를 해줍니다.

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

Maildir 패치

먼저 이놈을 잘 하기위해서 imap-4.5_maildirpatched-1.00 을 받아서 풉니다. 이건 IMAP 4.5에 Maildir patch를 적용해 놓은 패키지 인데... 이놈을 보고 풀면 도움이 되지여.

자 이제 갑니다. 먼저 patch 디렉토리를 보면 IMAP에서 Maildir 패치는 총 5개의 파일이 있습니다. 이 각각의 파일을 패치를 적용해 줘야 제대로 작동합니다.

IMAP-4.5-qmail.patch

이 파일을 vi로 열어보면 src/osdep/unix/env_unix.c 를 고친다는 것을 알수 있습니다.

    [imap-4.7b] vi src/osdep/unix/env_unix.c 

[imap-4.7b] 위의 패치 파일을 보며 env_unix.c를 고칩니다. 고치는 방법을 대강 알려드리면.. 먼저 line을 봅니다. @@ -595,7 +596,7 @@ <-- 이런 부분이 있죠? 이건 595번째 라인이란 소리인데... 이미 패치가 적용돼 있기 때문에 이 근처에서 찾아보시면 됩니다.

    { 
      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; 

다시 위와 같은 부분이 있는데 595번 line에 위와 같은 코드가 있고 앞에 -는 원래있는 부분인데 이 부분을 삭제하고 대신 +가 들어있는 부분의 코드로 대체를 하는겁니다. ^^ 간단히 1줄이죠? 앞에 #는 다 주석처리 된것이므로 수정하지 않습니다.

imap-4.5-mdirlist.patch

이놈은 src/c-client/mail.c 를 수정합니다. 방법은 위와 같지여?

imap-4.5-maildir980721-rename.patch | imap-4.5-maildir980721-delete.patch

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

imap-4.5-createproto.patch

이놈도 src/osdep/unix/env_unix.c 를 수정합니다. 마찬가지의 방법으로 조심스럽게 합니다. 비슷한 부분이 많아 잘못 하실수도 있으니까요 -_-;

Makefile

이제 이 부분들을 다 마치셨으면 마지막으로 수정해야 될 부분이 2군데 있습니다.

하나는 maildir.c 파일이 들어갔으니 이놈을 makefile에 추가해야겠죠? 당근인 얘기입니다. src/osdep/unix/Makefile을 vi로 엽니다. 그리고 다른 터미널을 하나 더 열어서 imap-4.5_maildirpatched-1.00/src/osdep/unix/Makefile 을 엽니다. 그리고 여기서 maildir을 찾아서 어디어디 들어가는지 확인후 4.7에 있는 Makefile에도 같이 적용을 시켜줍니다. ^^ 한 4 5군데 정도입니다.

이제 마지막입니다. 저도 컴파일중간에 에러가 나서 발견한건데요... env_unix.c 에 몇가지가 추가되면서 mail.h 를 고쳐야 합니다. src/c-client/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; 

하학     이제 끝났습니다 돌리지여.

    [imap-4.7b]# make slx 

를 하고서는 고쳐 주어야할 파일이 있습니다. c-client 로 디렉토리를 변경한 후에

 
    [imap-4.7b]# cd c-client

거기에서 CFLAGS 파일을 편집하세요. 한줄짜린데 끝에 보면 -DSQLSERVERFILE="/etc/imap/sqlserver" 를 -DSQLSERVERFILE="\"/var/qmail/control/sqlserver\"" 로 바꾸십시요. 혹 sqlserver를 특정한 디렉토리에 만들었다면 거기로 바꾸고요. 근데 \" 를 잊지 마십시요. 컴파일시 에러 납니다. 그리고 이 태그에 영향을 받는것은 mysql.c 이므로 touch 를 해주어야 컴파일을 합니다. (꼭!)

    [c-client]# touch mysql.c

이것은 make slx 를 하면 다시 되돌아 갑니다. 혹 재컴파일 할 있을 경우 다시 돌려주어야 합니다. 그냥 make 하면 상관없구요. 다음에는 같은 디렉토리에 linkage.c 와 linkage.h 가 있습니다. 그 파일의 꼭대기에 linkage.c 는

    mail_link (&maildirdriver);

를 삽입하고 linkage.h 에는 아래를 삽입합니다.

    extern DRIVER maildirdriver;

그리고는 상위 디렉토리로 올라가서

    [imap-4.7b] # rm imapd/imap.o popd/*.o mtest/*.o

를 실행하여 준후에 다시 make 를 하면 변경된 부분에 대한 컴파일을 다시 합니다. 이제 aeromail 을 통해서 접속하면 IMAP 과 MySQL 이 적용된 프로그램이 구동할것 입니다.

    [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 

주석으로 막혀있다면 풀어줍니다.

    [imap-4.7b]# vi /etc/services pop-2 pop-3 imap 등록 

먼저 qmail설치시 수정했던 pop-3는 고치면 안됩니다. [imap-4.7b]# vi /etc/inetd.conf pop-2 pop-3 imap 등록 데몬을 다시띄우고

    [imap-4.7b]# killall -HUP inetd 
IMAP데몬이 잘 되는지 확인을 하죠..
    [imap-4.7b]# telnet localhost 143 
하하 뭔가 나오면 제대로 된겁니다. 이제는 PHP를 깔져

3.5 PHP

헉헉... 드뎌 마지막입니다. 음... 힘들군여....

    [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 

하하 간단하죠? PHP도 끝났습니다.


다음 이전 차례