'분류 전체보기'에 해당하는 글 571건

기존에 qmail + vpopmail 을 cdb 방식으로 사용하다가 mysql 방식으로 바꿔서 설치해봤다.
특별한 차이는 없고, 계정정보를 mysql db 에 저장하여 사용한다.

그런데, 기존의 계정정보를 mysql 으로 옮기는 방법을 설명한다.
vpopmail 에 관련 명령이 있다. vconvert

vconvert 는 /etc/passwd 의 계정정보(기존 sendmail 방식이나, qmail + checkpasswd 방식) 를 옮길 수도 있고, cdb 방식 , mysql 방식등 서로간의 계정정보를 옮길 수 있다.

-e 는 /etc/passwd  에 해당하는 옵션이다.
-c 는 cdb 방식 , -m 은 mysql 방식(정확히는 sql)이다.

그래서 변환 방식은
vconvert -c -m  또는  vconvert -c -m {도메인명}
방식으로 변환하면 된다. ( FROM -c TO -m 의 순서라고 생각하면 된다.)

이때 변환시 vconvert 가 참조하는 파일은 /var/qmail/users/ 의 cdb 파일을 참조한다.
계정을 옮길때  기존의  ~vpopmail/domains 폴더와  /var/qmail/users 폴더를 백업해놓는다.
이 데이터를 기준으로 변환된다. 새서버 세팅후에 해당 디렉토리를 교체해준다.
위 명령으로 옮기면 된다. 이때 vpopmail.mysql 세팅이 되어 있어야 한다.
바로 mysql 에 연결해서 vpopmail 테이블에 계정정보를 저장하기 때문이다.


한가지 주의할 사항이 있다.
/var/qmail/users 를 옮겨올때,  vpopmail/vchkpw 의 UID/GID 가 동일하다면 상관없지만, 다르다면 바꿔줘야 한다.
+mydomain.com-:mydomain.com:108:107:/home/vpopmail/domains/mydomain.com:-::
108:107 부분을 새 시스템에 맞게 바꿔준다.
바꿔준후에 적용하는 방법은  /var/qmail/bin/qmail-newu  를 실행시켜주면 cdb 파일이 재 설정된다.


주의사항 하나더.
vconvert 하면  control 의 rcpthosts , virtualdomains 등의 설정도 자동갱신해주는 줄 알았는데.
수동으로 넣어줘야 한다. /var/qmail/control 도 같이 백업해 주는 것이 좋겠다.


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
지난번 qmail + vpopmail 은 cdb 를 이용하는 방법이었다.(http://blog.1day1.org/329)
즉, 사용자 계정정보를 txt 형태로 저장하는 것이었다.

사용자 계정정보를 mysql 을 이용한  디비에 저장하는 방법을 사용해보자.

기존 cdb 방식에서 " --with cdb " 를 빼고 SRPM 빌드를 하면된다.
rpmbuild --rebuild knetqmail-0.0.3.src.rpm

빌드전에 mysql-devel 패키지를 설치해준다.

mysql 이 /usr/local/mysql 에 설치가 되어 있지 않다면..
yum install mysql-devel
그리고, /usr/local/mysql/include , /usr/local/mysql/lib 를 각각  심볼릭 링크해준다. (64bit 환경)
ln -s /usr/include /usr/local/mysql/include
ln -s /usr/lib64 /usr/local/mysql/lib

빌드하고 설치 후에 mysql DB 생성 해준다.
mysql> create databases vpopmail ;
mysql>  GRANT  ALL PRIVILEGES ON vpopmail.* TO 'vpopmail'@'localhost'  IDENTIFIED BY '계정암호' WITH GRANT OPTION ;
mysql> flush privileges;
vpopmail 이 mysql 계정에 접근할 수 있도록 설정을 바꿔준다.
/home/vpopmai/etc/vpopmail.mysql 을 편집한다.
아래와 같은 라인을 DB 명및 계정/암호 등을 맞게 수정한다.
# host|port|user|password|database
#
localhost|0|root|secret|vpopmail
기본값이 root 계정을 이용하는 것인데, vpopmail 계정을 생성해서 해당 계정으로 바꿔주어도 된다.
계정및 DB 는 자신이 원하는 값으로 바꾸면 된다.
localhost|0|vpopmail|계정암호|vpopmail


vadddomain 등 명령을 내렸을때 다음과 같은 에러가 난다면...
Error - no authentication database connection. Initial open
vpopmail 에서 mysql 으로 연결이 정상적으로 이뤄지지 않는다.
64bit 환경에서 빌드한 경우 위와 같은 에러가 날 수 있다.
strace vadddomain mydomain.com >& debug.txt  
등으로 체크해보면...

위와 비슷한 메세지를 볼 수 있다.(처음 부분)
open("/usr/local/mysql/lib/mysql/tls/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls/x86_64", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/tls/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/x86_64", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/libmysqlclient.so.15", O_RDONLY) = 3
진한 부분이 mysql 라이브러리를 불러오는 부분인데, 좀 이상하다.
윗부분에서 x86_64 에서 불러오지 못한다.  해당 위치를 확인해보면.(/usr/local/mysql/lib/mysql)
-rw-r--r-- 1 root root  21408 Sep 22  2008 libdbug.a
-rw-r--r-- 1 root root  73040 Sep 22  2008 libheap.a
-rw-r--r-- 1 root root 465624 Sep 22  2008 libmyisam.a
-rw-r--r-- 1 root root  41978 Sep 22  2008 libmyisammrg.a
-rw-r--r-- 1 root root 872012 Sep 22  2008 libmysqlclient.a
-rwxr-xr-x 1 root root    879 Sep 22  2008 libmysqlclient.la
lrwxrwxrwx 1 root root     24 Sep 22  2008 libmysqlclient.so -> libmysqlclient.so.15.0.0
lrwxrwxrwx 1 root root     24 Sep 22  2008 libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
-rwxr-xr-x 1 root root 640162 Sep 22  2008 libmysqlclient.so.15.0.0
-rw-r--r-- 1 root root 493164 Sep 22  2008 libmystrings.a
-rw-r--r-- 1 root root 448720 Sep 22  2008 libmysys.a
-rw-r--r-- 1 root root  11890 Sep 22  2008 libvio.a
이런식이다. x86_64 같은 경로는 없다.(위의 라이브러리는 rpm 설치시 복사되는 듯 하다. 혹은 rpmbuild 시)
즉, 64bit 환경에서는 x86_64 에서 불러와야 하는데, 아무도 32bit 라이브러리를 불러오기 때문인 듯 싶다.

/usr/local/mysql/lib 를 libx 로 이름을 바꿔보고 다시 테스트 해봤다.
open("/usr/local/mysql/lib/mysql/tls/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls/x86_64", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/tls/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/x86_64", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=84051, ...}) = 0
mmap(NULL, 84051, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b05b2aa7000
close(3)                                = 0
open("/usr/lib64/mysql/libmysqlclient.so.15", O_RDONLY) = 3
역시 마지막줄의  /usr/lilb64/mysql 에서 불러오는 것을 볼 수 있다.
이렇게 하면 정상적으로 에러없이 계정이 생성된다.

또는  /usr/local/mysql/lib/mysql/  에  심볼릭 링크를 걸어줘도 된다.
ln -s /usr/lib64/mysql  x86_64
아무튼 /usr/local/mysql/lib/mysql/libmysqlclient.so.15 을 불러오면 64bit 에서는 정상실행(연결)되지 않는다.

ps. 일반적으로  /usr/local/mysql 에는 아무것도 없을 것이다.
 (mysql 을 소스컴파일 해서 해당 위치를 지정하지 않는이상)
 가상머신에 깔려있는 VM 이미지가  mysql 이 설치되어 있는 것 같다.



근데 궁금한 것이 있다.
과연 vpopmail 을 mysql 연결이 어떤 이점이 있을까?
아무래도 파일보다는 DB 가 관리상 편하긴 할 것이다.
그런데, 메일의 잦은 접속때문에 DB connect 문제가 생기지 않을까?
계정확인을 위한 select 가 거의 대부분을 차지 하기 때문에 큰 문제가 아닐까?
메일서버가 DB서버도 겸하고 있을때는 한쪽의 부하가 다른 쪽에 영향을 주지 않을까?
아니면 vpopmail 의 컨넥션은 한번 이루어지고 계속 연결상태를 유지하나?(소스를 들여다 봐야 겠다)



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  0개가 달렸습니다.
secret
큐브리드 를 설치하고, php 모듈을 올리기 위해 몇가지 주의할 사항이 있다.

참고로 http://blog.1day1.org/324  는 우분투64bit 환경에서 모듈컴파일 하는 방법이다.
우분투 64bit 의 php 는  Centos 의 php 모듈로도 쓸 수 있다.
다만 몇가지 환경이 맞아야 한다.

큐브리드 공식페이지에서는 현재 소스형태로 제공되고 있다.
이전에는 ( http://dev.naver.com/projects/cubrid-php/download )
Centos 5, php 5.1.6 을 기준으로 cubrid.so 를 배포했다. 같은 환경이라면 정상적으로 작동하지만, 다른 환경에서는 따로 소스를 컴파일해서 사용해야 한다.

1. php 버전이 맞아야 한다.
  centos 5.1.6 이 공식버전이고,  우분투는 5.2.x 버전이다.
  둘중 하나를 맞춰야 한다. ( 나는 centos 를 업그레이드 했다. )

2. 64bit(x64) , 32bit (i386) 가 맞아야 한다.
  당연하겠지만, 사용되는 라이브러리 등이 달라지기 때문에 아키텍트(?)를 맞춰야 한다.



기타 cubrid 설치위치도 영향을 주는가?
테스트를 해보니, 기본 /opt/cubrid 에 설치된다.(rpm 패키지 기준)
바이너리를 비교해보니, cubrid 설치위치가 다른 부분이 있다.
다른 환경들도 테스트 해보겠지만, cubrid 설치위치도 영향을 주는 듯 하다.
아직 정확한 테스트를 하지 않아서 어떤 영향을 주는지 혹은 영향이 없는지 확인하지 않았다.

직접 설치시 다른 경로로 지정하는 경우에는 php 모듈이 작동하지 않을 수 있다.
모듈이 정상적으로 올라오지 않으면 이 부분을 확인해 본다.


[추가]
3. cubrid 설치 위치도 어느정도 영향이 있다.
위 사항을 테스트 한 결과를 정리해본다.

모듈이 제대로 올라오지 않는 경우 아파치에러로그에 다음처럼 메시지가 나온다.
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/cubrid.so' - libcascci.so.8: cannot open shared object file: No such file or directory in Unknown on line 0
cubrid.so 모듈이  libcascci.so.8 을 로드하는데 실패했기 때문이다.
공유라이브러리의 문제라면
/opt/cubrid/lib64 에서 해당 라이브러리 파일을 만들어 준다.
-rw-r--r-- 1 root root 586516 2009-09-20 18:41 libcascci.a
lrwxrwxrwx 1 root root     18 2009-09-23 18:34 libcascci.so -> libcascci.so.8.2.1
-rwxr-xr-x 1 root root 348625 2009-09-20 18:41 libcascci.so.8.2.1
이런식으로 libcascci.so 만 생성되어 있다.
ln -s libcascci.so.8.2.1 libcascci.so.8
이렇게 링크해서 만들어 준다.(설치시 왜 만들어 주지 않는지 모르겠다. (lib 쪽은 생성되어 있다.)



centos i386/x64 , ubuntu i386/x64  에서 테스트 중인데, 작동여부가 조금씩 차이가 있다.
결과가 뒤죽박죽이라 조금 혼란스럽다.(추후 다시 정리해야 겠다)


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Centos 5 는 사용하기 편한 배포판중 하나다.(개인적으로 우분투가 좋다)
yum 으로 패키지 관리하는 것도 우분투(데비안)의 apt-get  부럽지 않을만큼 편하다.

그런데, centos5 가 나온지 꽤 되어서 인지 버전이 낮은 프로그램이 있다.
그중 하나가 php 인데, 공식지원은 5.1.6 버전이다.

5.2.x 버전을 사용하기 위해서는 비공식 저장소를 이용해야 한다.

http://wiki.centos.org/AdditionalResources/Repositories
를 보면 추가 가능한 저장소들이 있다. 이중 CentOS-Testing 를 이용하자.
# cd /etc/yum.repos.d
# wget http://dev.centos.org/centos/5/CentOS-Testing.repo
테스팅 저장소를 등록한다.

php 업데이트 방법은
# yum --enablerepo=c5-testing update php
혹시 php-mcrypt 같은 추가로 설치한 확장이 같이 업데이트 되지 않으면 별도로 업데이트해준다.
# yum --enablerepo=c5-testing update php-mcrypt


참조 : SRPM 으로 하는 방법
http://echodittolabs.org/blog/2009/05/all-i-want-php-52-centosrhel

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
cafe24 가상서버호스팅을 사용중이다. 꽤 좋은 성능을 보여줘서 만족하고 있다.
가상호스팅의 특성(?)상 하드 용량이 부족하다. 그렇다 보니 몇메가도 아쉽게 된다.

cafe24 는 centos5 를 사용한다.
쓸데없는 패키지를 삭제해서 용량을 줄였다.
대충살펴보니 1기가 이상줄일 수 있었다.
yum remove xorg-x11*
yum remove evolution*
yum remove openoffice.org*
yum remove gnome*
다음과 같은 패키지들이다. 주로 X윈도 관련 패키지 들이다.
더 세세하게 찾아서 없애면 더 줄일 수 있겠지만, 일단 이정도로 만족.


ps. centos5 기본용량이 원래 큰가? 1기가 내외로 안되겠니?


# 지우기전
 18664164   4120760  13580028  24% /
# 지운후
 18664164   2856220  14844568  17% /


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
qmail + vpopmail  으로 운영중이다. mysql 을 쓰지않는 cdb 방식을 사용한다.
운영중인 메일 서버를 이전한다거나, OS 를 업그레이드 한다거나 해서 재설치하는 경우 기존의 설정된 메일계정을 옮기는 방법이다. 어렵지 않다.

옮기기 전에 기존 메일서버의 데이터를 확인한다.

1) vpopmail 의 domains 는 무조건 백업하자
실제 각 도메인별로 메일이 쌓이는 곳이다. 이 데이터를 통채로 옮기는 방법이니 백업하자.
최악의 상황을 대비해 domains 는 백업하자.

2) 옮길 domain 을 확인한다.
 혹시모르니, /var/qmail/ 의 control , users 등을 백업해준다. 옮길도메인을 체크한다.


qmail+vpopmail 을 재설치 한후에는

1) 옮길 도메인을 vadddomain 으로 생성해준다.
 그러면 vpopmail / domains 에 해당 도메인계정이 생성될 것이다.
 기존 도메인의 설정그대로 옮긴다면, qmail/control 의 설정파일, qmail/users/assign 등을 통채로 복사해서 사용해도 될 듯 하지만, 구분해서 옮긴다면, 각각의 파일을 수정해줘야 하기때문에 번거롭다. 그래서 vadddomain 으로 생성해 주는 것이 좋을 듯 하다.

2) 백업한 domains 를 교체해준다.
 vadddomain 으로 생성되면, vpopmail/domains 에 각 도메인이 생성된다. 생성된 domains 는 domains.bak  등으로 이름을 바꿔주고, 백업한 domains 를 그대로 넣어주면 된다.



추가로 imap 서버가 달라지는 경우 처리해줄 각 서버별 설정이 차이가 나는 부분이 있다.
내 경우 기존 bincimap 에서 dovecot 으로 교체를 했는데, 몇가지 주의할 점이 있었다.
그 부분은 따로 글을 올릴 예정이다.


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
큐메일(qmail) 에서는 여러가지 방법의 필터링을 사용한다.
유명한 rblsmtpd , spamassassin , clamav , procmail , maildrop , simscan , qmail-scanner 등 다양하다.

필터링 단계에 따라 방법도 달라진다.
크게 qmail-smtpd 단에서 필터링 하는 방법과 사용자의 메일박스에 도착하기 전에 필터링하는 방법으로 나눌 수 있다.

1) spf (Sender Policy Framework) 를 이용한 필터링
참조 : http://qmail.kldp.net/wiki/wiki.php/qmail_antispam#s-4.1

도메인 설정시 이런 설정을 본적이 있을 것이다.
; spf - kisarbl.or.kr
        IN      TXT     "v=spf1 ip4:111.222.123.234 ip4:122.222.123.234 ~all"
위의 IP 주소는 메일발송하는 서버의 IP 를 지정하게 된다.
~all , -all 등이 있는데, 각각 softfail , fail 등의 spf 값을 리턴하게 된다.

지난번 qmail SRPM 빌드 하는 글에서 언급한 패키지는 spf 패치가 적용되어 있다.
그래서 spf 필터링을 활성화 시켜주면 된다.

/var/qmail/control/spfbehavior  를 3 또는 4 로 해주면 된다.(0 은 비활성화)

특정도메인에 대해서 spf 설정을 확인하는 방법은
dig mydomain.com  txt 
로 확인할 수 있다.

예를 들어 mydomain.com 이 A 사의 웹호스팅을 이용한다고 하자.
이때 mydomain.com 에서 웹어플(폼메일,예약,문의등)로 메일을 보낼 때 spf 를 설정하지 않으면 받는 메일서버에서 거부당할 수 있다.(대부분의 포털은 설정이 되어 있다고 봐야 한다)
"v=spf1 ip4:{웹호스팅IP주소} ~all"
도메인 설정에 추가해준다.

dnsever 의 경우  "호스트 설명 텍스트(TXT) 추가" 항목에 넣어주면 된다.

2) rblsmtpd 를 이용한 필터링.

rbl 은 Real-time Blocking List 라고 한다.
한마디로 스팸발송IP 들을  블랙리스트, 화이트리스트 로 만들어서 블랙리스트에 등록된 IP 주소로 오는 메일을 거부하는 필터링 방법이다.

역시나 qmail SRPM 패키지에는 rblsmtpd 가 포함되어 있다.

/var/qmail/supervise/qmail-smtpd/run 파일을 직접수정해서 rblsmtpd 설정을 할 수 있다.
SRPM 패키지에는 /var/qmail/control/conf-knetqmail 을 수정해서 할 수 있도록 미리 설정되어 있다.
USE_RBL="no"
RBL_DNS="-r bl.spamcop.net -r rbl.linuxstudy.pe.kr"
다음과 같은 항목인데, USR_RBL 의 값을 yes 로 바꿔준다.
RBL_DNS 부분은 rbl 사이트를 지정하는 부분이다.
현재 rbl.linuxstudy.pe.kr 은 잠정중단된 상태이니 뺀다.
USE_RBL="yes"
RBL_DNS="-b -r bl.spamcop.net -r sbl.spamhaus.org -r spamlist.or.kr"
위와 같이 바꿔준다. (spamhaus 와 kisarbl 을 추가했다)
그리고 -b 옵션을 추가해 줬는데, 해당 옵션은 메일거부시 바로 failure notice 응답을 해준다.
그래야 발송IP 가 블랙리스트에 등록이 되어 있는지 바로 알 수 있게 된다.



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
지난번에 squirrelmail 을 사용하는 방법을 짧게나마 설명했었다.
이번에는 roundcube 를 써보자. (http://roundcube.net)

먼저 다운로드 하자.
http://roundcube.net/download  에서 최신버전을 다운받는다.(현재 0.3 stable)
다운로드하고 서버에 올리거나, 다운로드 주소를 찾아서 서버에서 wget 으로 직접 내려받는다.
# wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.3-stable/roundcubemail-0.3-stable.tar.gz?use_mirror=jaist
다운후에 압축을 풀고(tar xvzf ...tag.gz ) 적당한 위치에 설치한다.
참고로, squirrelmail 이 사용하던  /usr/share 로 위치를 정했다.
정확한 위치는 /usr/share/roundcube
# tar xvzf roundcubemail-0.3-stable.tar.gz
# chown root.root roundcubemail-0.3-stable
# cp roundcubemail-0.3-stable /usr/share/roundcube
apache 설정도 squirrelmail 방식으로 처리했다.

/etc/httpd/conf.d 에 roundcube.conf  파일을 만들고, 내용은 다음과 같이 입력했다.
Alias /roundcube /usr/share/roundcube
웹서버를 재실행해주면 다음부터  mymail.com/roundcube  로 접속할 수 있다.


DB 설정을 해준다.
라운드큐브 는 다람쥐메일과는 다르게 설정등을 저장하기 위해 DB 를 사용한다.
mysql , postgresql 등을 사용할 수 있다.
별도의 DB 를 만들어주거나, 자신이 사용하던 DB 설정을 사용할 수 있다.

별도로 만든다면 다음처럼 만들어 준다.
mysql> create databases roundcube;
mysql> GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost'  IDENTIFIED BY '계정암호' WITH GRANT OPTION ;
mysql> FLUSH PRIVILEGES;


다음과 같은 테이블을 사용하니, 사용하던 DB 인 경우 테이블명이 겹치지 않나 주의한다.
| cache              
| contacts           
| identities         
| messages       
| session            
| users              
설정값은 아래의 자동설정시 값을 입력한다.


기본설정을 해보자.
자동설정은 mymail.com/roundcube/installer  접속해서 단계적으로 설정한다.

사전패키지,extension 등을 체크한다.
추가 패키지가 필요한 경우 설치해준다.
yum install php-gd php-mysql php-mcrypt
dom 패키지는 php-xml 을 설치한다.
yum install php-xml
php 를 업그레이드하는것을 권장한다.


IMAP 설정 부분은
$rcmail_config['default_host'] = 'localhost';
정도로 입력해준다.

SMTP 부분도
$rcmail_config['smtp_server'] = 'localhost';
$rcmail_config['smtp_auth_type'] = 'PLAIN';
정도를 주의해 준다.(smtp_auth_type 은 직접 main.inc.php 를 수정한다.

언어설정 하는 부분은 (ko_KR) 으로 지정해준다.
$rcmail_config['language'] = 'ko_KR';

기타 자세한 설정은 다음을 참조한다.
http://trac.roundcube.net/wiki/Howto_Config


설정을 마친후에는

해당 설정파일을 복사하거나 다운로드 해서 config/ 디렉토리에 넣어준다.
(main.inc.php , db.inc.php)


그리고 다음단계에서 설정을 체크해서 이상이 없는지 확인한다.
DB 접속이 이상없는지 확인하고, 기본 DB schema 를 생성해준다.

SMTP , IMAP 의 설정을 확인해 본다.

설정파일까지 복사/테스트 한 후 웹메일에 접속해본다. ( mymail.com/roundcube )

완료. 로그인하고 사용하자.
로그인 화면이 반긴다. 심플하다 못해 썰렁하지만... 로그인하면.
제법 그럴듯한 웹메일 인터페이스 화면을 볼 수 있다.

버전이 0.3 버전밖(?)에 안되서 큰 기대를 안했는데, 꽤 쓸만한 완성도를 보인다.
써보고 괜찮으면, 다람쥐메일은 작별을 고해야 할 듯 하다. ^^



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  0개가 달렸습니다.
secret
어제 네이버에서 NHN Deview 행사를 했다.
개방,개발자,오픈소스 등에 대한 내용을 다루었다.
참석은 하지 못했지만, 생중계로 나마 살짝 엿볼 수 있었다.

네이버는 다른 곳과 비교해서 앞서나가는 모양이다.
특히나 먼저 시작(?)했다고 볼 수 있는 다음의 느린 혹은 잠행 과는 전혀 반대상황이다.
다음도 개발자행사를 여러가지 하고 있다.
네이버는 좀더 범위를 넓혔다고 해야하나? 개발자와 오픈소스를 사용하는 사용자들.

사실 이런 개발자 행사자체가 일반인을 대상으로하는 행사와 비교하면 미미하기 때문에 도토리 키재기 처럼 보일 수 있다. 네이버가 앞으로 어떤 복안을 가지고 진행시키는지 모르겠지만.
최근의 미투데이,오픈소스 등을 살펴보면 조만간 SNS 에 대한 자리를 잡기위한 조치를 취할 듯 하다.
그 부분에 대해서는 네이트,싸이월드를 의식하고 있을듯 하다.

네이트,싸이월드 오픈정책에서 최후의 보루라고 할 수 있는 인증API 는 공개하지 않았다.
그에 대해 네이버가 한발 앞서 가려면 그 부분일 듯 한데, 쉽지않은 결정일 것이다.
어쩌면 서로 눈치를 보고 있을지 모르겠다. 다음,네이버,네이트...

다음은 개인적으로 참 아쉽다.
왠지 그동안의 노력이 별 성과를 내고 있지 못하고 있는 것처럼 보여진다.
좀더 눈에 띄는 결과를 내고, 공개를 하면 좋겠는데, 그 부분이 아쉽다.
좀 늦긴했지만,  http://dna.daum.net/archives/585  이런식의 움직임이 많아졌으면 좋겠다.
다음도 내부의 노하우가 많을텐데, 그런 부분을 공개하면 참 좋을 것 같다.
다음 한메일익스프레스의 UI 도 마음에 들고, 공개하면 다음 짱!
다음 DevDay 행사도 계속이어지는 것이 좋긴 하지만, 대박서비스가 DevDay 를 통해서 나올 수 있도록 지원하면 좋을 듯 싶다.


그리고, 야후.

국내에서의 야후란, 사실 듣보잡의 불명예를 가지는 처지가 되버렸다.
그동안 신경도 쓰지 않았다는 것이 사실이다.
그런데, 야후개발자네트워크 를 보고, 국내 행사도 참석도 해보니.
생각보다 방대한 개발자 지원이 있었다. 다만 국내가 아니라 해외에서 활발하게 진행되고 있다.
국내 지원은 조금이나마 http://ydnkrblog.com 등을 통해 진행되고 있다.
아직은 야후코리아 차원의 지원이라기보다 직원개인의 열정에 의해서 움직이는 것 같다.

포털의 이런 움직임은 개발자 입장에서는 환영일 것이다. 최소한 나는 대 환영.
각 포털의 움직임은 서로 다르지만, 결과적으로 좋은 결과로 이어질 것이라고 본다.
대박서비스 사례같은 것이 나오면 그야말로 금상첨화.
개발자들을 위해 물적,심적 지원을 해줄 자원이 있는 곳은 사실 포털밖에 없다고 본다.




WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
우분투(리눅스) 시스템을 운영중에 있다.
얼마전 하드디스크 에러가 생겨  시스템을 이전하려 한다.
이런 하드에러도 있고, 하드디스크를 큰 용량으로 바꾸려고 할 경우도 있다.

rsync, tar 등을 이용하는 방법도 있지만, 간단하게 cp -a 를 이용하려고 한다.
/var , /usr  등이 별도의 파티션으로 나뉘어져 있는 경우  해당 디렉토리를 뺀 / (루트) 를 복사해야 한다.
별도파티션으로 나뉘어 있던 디렉토리는 나중에 옮겨도 된다.

일단 새 하드디스크를 연결한다.
기존 시스템 하드는 /dev/sda 이고,  연결한 새 하드디스크는 /dev/sdb 라고 가정한다.
/ 는 sda1 ,  /usr 는 sda2 , /var 는 sda3  이라고 한다면,  우선 sda1 을 먼저 옮겨도 되고 다 같이 옮겨도 된다.

sda1 은 sdb1 으로 옮길것이다. 데이터를 이동한다.
현재 시스템이 가동한 상태에서 옮겨도 되긴 하지만, 고려할 사항이 많다.
dev , proc 등 시스템 관련 디렉토리를 주의해야 한다.

별도로 마운트 하고 옮긴다.
mount /dev/sda1 /mnt/sda1
mount /dev/sdb1 /mnt/sdb1
이런식으로 마운트 시키고 데이터를 옮긴다.
cp -a /mnt/sda1/* /mnt/sdb1/
이렇게 하면 따로 dev , proc , var/run , var/lock 등을 신경쓰지 않아도 된다.

새하드디스크로 부팅하려면 어떤값을 바꿔야 하나?
fstab 을 새하드디스크의 설정값으로 변경한다.
이때 복사한 fstab 의 값을 변경한다. 즉 /mnt/sdb1/etc/fstab 을 바꿔준다.
fstab 은 UUID 로 설정해 놓는 것이 편하다.

blkid 명령을 내리면
/dev/sdb1: UUID="{새하드UUID값}" SEC_TYPE="ext2" TYPE="ext3"
새로운 하드의 UUID 값을 얻을 수 있다.
fstab 의 해당 값을 바꿔준다.
UUID={기존UUID값}  / ext3 defaults,errors=remount-ro 0 1
이 설정만 바꾸면 되는가?

새 하드디스크에 grub 을 인스톨한다.
grub-install  /dev/sdb
이런식으로 되면 편하겠는데, 아마 안될 것이다.
grub 쉘로 들어가서 직접 바꿔준다.
grub 명령을 내리면  grub >  이렇게 grub 쉘을 사용할 수 있다.
grub >  find /boot/grub/stage1
stage1 은 하드디스크의 MBR 영역에 설치된다.
find /boot/grub/stage1
 (hd0,0)
 (hd1,0)
이런식으로 나오게 된다. 기존 하드는 hd0 , 새 하드디스크는 hd1  이다.
다음처럼 새 하드디스크에 grub 을 설치한다.
grub >  root (hd0,0)
grub >  setup (hd0)
특별히 에러메세지가 없으면 정상적으로 설치가 되었을 것이다.

이제 grub 의 menu.lst 를 변경한다. 여기서도 fstab 처럼 UUID 를 변경해준다.
/boot/grub/menu.lst 

# kopt=root=UUID={새하드UUID값} ro console=tty0
이 부분과
title           Ubuntu 8.04.3 LTS, kernel 2.6.24-24-generic Default
root            (hd0,0)
kernel          /boot/vmlinuz root=UUID={새하드UUID값} ro console=tty0 quiet splash
initrd          /boot/initrd.img
이 부분의 UUID 값을 바꿔준다.


이제 새 하드디스크로 부팅순서를 바꾸고 부팅한다.

재부팅후에 BIOS 설정에서 새 하드디스크로 부팅순서를 바꿔서 부팅해 본다.
정상적으로 부팅되는지 확인해본다. 이상이 있으면 기존의 하드로 다시 바꾸면 된다.
하드디스크 위치나 바이오스 설정 등의 차이로 인해 부팅에 이상이 있는 경우가 있으니 설정을 다르게 바꿔가면서 테스트 해본다.

내 경우는  보드의 SATA (sda) , SCSI 컨트롤러, SATA 컨트롤러(sdb)  이렇게 되어 있었다.
바이오스에서 각각의 부팅순서를 바꾸지 못하고, PCI 인터페이스인  SCSI , SATA 가 묶여서 바뀌게 되었다. 그래서 PCI 인터페이스의 맨 처음으로 바꿔야 했다.
SATA 에서는 primary 로 변경하고,  SCSI 는 보드에서 SATA 를 보드의 안쪽으로 바꿔서 SATA -> SCSI 컨트롤러 순으로 변경하고 서야 제대로 부팅할 수 있었다.




WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  0개가 달렸습니다.
secret
YDN 키 발급을 위해 참 여러가지 테스트를 하게되었다.
발단은 http://blog.1day1.org/333  여기서부터 시작인데, 최소한 상황을 재현(?)할 수 있게 되었다.
정확한 원인이 내쪽에서 찾을 수는 없을 것 같고, 최종적으로 YDN 쪽에서 답을 줘야 할 듯 하다.
아무튼 상황재현과 그 간의 시도를 리포트 한다.

일단 이전 상황은 http://t.1day1.org/post/177433640  여기까지 진행했었다.
즉, 도메인을 체크할 때, 제대로 데이터를 가져가는 것을 확인할 수 있었다.
그런데, 왜 안될까? 뭔가 파일 체크 이외에 더 확인하는 작업이 있다는 것인데...
여기서 부터 상상의 나래(?)를 펼치며 테스트하게 된다.

몇가지 가능성을 따져봤다.
1. 웹서버의 문제.
2. 서버 자체의 문제 혹은 OS(배포판) 문제.
3. 그외의 알 수 없는 문제.

1,2 는 여러서버를 바꿔가면서 테스트 해보기로 했다.
apache2 , lighttpd , nginx 를 바꿔가면서 테스트 했다.
서버는 웹호스팅, 서버호스팅 등 계정을 바꿔가며 테스트 해보았다.

제일먼저 웹서버를 변경하면서 테스트 해봤다.
웹서버 테스트. 각각의 헤더를 살펴보면서 체크를 했다.
(동일서버에서 웹서버를 변경하여 테스트 했다.)

여기까지 바꾸면서 발급을 시도해도 계속 실패가 되었다.


그래서 서버자체의 문제인가 싶어, 다른 계정에서 테스트 해보기로 했다.
실패하던 서버는 Ubuntu(우분투) 이고, 따로 테스트하려는 계정은 Centos 이다.

다른 계정 Centos 에서는 되는 것이었다.
둘다 우분투쪽도 apache 인데, 웹서버가 아니라 OS 배포판의 문제였단 말인가?
좀 생각을 해봤다.

그래서 둘의 apache 설정이 다른 부분이 있어서일까? 헤더를 보면서 차이점을 살펴봤다.
Keep-alive 문제일까?  charset 문제일까? 등등 차이가 있는 부분은 설정을 바꿔가며 테스트 해봤다.


Centos 계정이외에 다른 계정은 모조리 실패하는 것이었다.
아! OS 의 문제로 결론을 내려야 하나? 뭔가 간과하는것이 있지 않을까?
뭔가 놓치고 있는 것이 있을거야! 곰곰히 생각한다.

어! 혹시!

안되는 계정은 모두 1day1.org 의 서브도메인 이었다.
되는 계정인 Centos 는 OOO.com 과 YYY.kr 의 도메인을 사용했었다.
설마 org 도메인이 안되는 것일까?  그래서 교차실험을 했다.

안되는 계정에  OOO.com 의 서브도메인으로 되는 계정에는 ooo.1day1.org 의 서브도메인으로 테스트 했다. 결과는  안되던 계정에 OOO.com 이 제대로 발급이 되었다. 또 되던 계정은 ooo.1day1.org 는 안되는 것이었다.

OTL

정말 그 문제란 말인가? 키 발급시에 도메인 자체도 테스트를 하는 것인가?
nslookup 또는 whois , dig 등을 체크해서 유효한 값을 체크하는 것인가?

그런데, 직접 쿼리를 날려봐도 별다른 차이점을 발견할 수 없었다.
org 도메인의 네임서버 설정이 잘못된 것일까? apache 로그를 보면 파일을 찾아서 가져가는(GET) 것을 볼 수 있다. 설정이 잘못되었다면 파일을 찾지 못할 것인데 말이다.

미궁에 빠지게 된다. 왜! 인지 알 수 없게 되었다.
상황을 재연까지는 하게 되었지만, 왜! 인지는 모르겠다.


여기서 끝내려 했다. 그런데 뭔가 이상했다.
이유가 뭐란 말인가?
안되는 1day1.org 와 되는 OOO.com 은 똑같이 dnsever.com 에 설정되어있다.
둘의 설정상의 차이가 뭐일까?  살펴봤다.

설마!
OOO.com 은
1차: ns1.dnsever.com
2차: ns2.dnsever.com
1day1.org 는
1차:     ns16.dnsever.com
2차:     ns34.dnsever.com
3차:     ns83.dnsever.com
4차:     ns231.dnsever.com
5차:     ns259.dnsever.com
의 각각 다른 네임서버로 설정되어 있다는 차이가 있었다.

YDN 측에서 org 자체를 막거나 하지는 않았을 것이고, dnsever 쪽에서 네임서버 쿼리를 막도록 설정되어 있는 것일까? nslookup , dig 로 테스트 해보면 이상이 없는데 이상하다.
특정 IP 대역에 대해서 막아놨을까? (그럴지도 모르겠다.)
dnsever 가 기존 ns1,ns2 에서  ns16~ns259 등으로 분리를 시켜놓은게 예전 DDOS 공격을 당했을때 공격을 분산,회피 하기 위한 조치였던 것으로 알고 있다. 그렇다 보니 새로운 네임서버에 대해서 쿼리 권한을 제한했을 가능성이 많을 듯 하다.(org 가 막혔다는 것 보다 좀더 설득력이 있어 보인다)

최종 테스트는 되는 다른 도메인을 ns16,ns34 등으로 바꿔보고, 1day1.org 를 독립네임서버로 바꿔보거나 ns1,ns2 의 예전 네임서버로 바꿔서 교차 테스트를 해보면 명확한 답이 나올 듯 싶다.
최종 테스트가 예상대로 나오게 된다면 ns16~ns259 의 어떤 설정 문제일 듯 하다.

dnsever 쪽 문제라고 해도 좀 이상한 부분이 있다.
YDN 쪽에서 검증파일(?) 만 체크하는 것이 아닌 듯 한데, 그에 대한 언급이 있어야 할 듯 하다.
분면 검증파일을 확인했으면서 체크오류를 내는 것은 문제가 있어 보인다.
그 확인사항이 정확히 무엇인지 모르겠지만, API KEY 발급상에서는 그에 대한 언급이 없다.


ps. 현재 최종테스트를 위해 네임서버를 변경해 두었다. 적용되려면 최소한 반나절,하루 정도가 걸리기 때문에 아직 테스트 할 수 없다.



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
squirrelmail , 일명 다람쥐메일 이라는 웹어플이다.
http://squirrelmail.org
imap 기반으로  imap 서버가 설정되어 있으면 간단하게 사용할 수 있다.

Centos 는 패키지로 설치하면 된다.(다른 배포판도 비슷하다)
yum install squirrelmail
설치후에 apache 를 재실행해준다.

접속은  http://{메일서버주소}/webmail  으로 하면 된다.
(설정은  /etc/httpd/conf.d/squirrelmail.conf 파일에 있다)

imap 서버를 dovecot 을 사용하기 때문에 그에 대한 설정으로 바꿔준다.
http://squirrelmail.org/docs/admin/admin-13.html#ss13.9
설정은 /etc/squirrelmail/config.php 를 바꿔준다.

다음부분만 주의하면 된다.
$imap_server_type       = 'dovecot';
$optional_delimiter     = detect;

한글 사용자는
$squirrelmail_default_language = 'ko_KR';
$default_charset          = 'utf-8';
처럼 바꿔준다.


혹시 이런 에러가 발생한다면
ERROR: Could not complete request.
Query: CREATE "Sent"
Reason Given: Unknown namespace.
다음 부분을 확인한다.
$default_folder_prefix          = 'INBOX.';
/etc/squirrelmail/config.php 에서 config_local.php 를 불러오기 때문에
config_local.php 를 바꿔준다.




WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  2개가 달렸습니다.
  1. 예전에 솔루션 업체에 다닐 때 imap기반 웹메일로 대표적으로 거론하던 건데 오랫만에 보니 옛기억이 새록새록 나는군요.
    • 예. 저도 오랜만에 만져봤는데, 겉으로는 큰 변화가 없네요.
      물론 예전보다 사용하기 편해졌지만요.
secret
기존에 qmail + vpopmail(with cdb) 를 사용했었다.
pop3 는 vpopmail 을 이용했다. 그리고, imap 은 bincimap 을 사용했다.
그런데, squirrelmail 을 사용하려고 테스트 하는 중 bincimap 1.2.x 버전에 없는 기능때문에 사용할 수 없다. 1.3.x 버전은 사용이 가능한 듯 하지만, 컴파일 에러가 생겨서 dovecot 을 쓰기로 했다.
요즘 추세(?)가 dovecot 인것 같다. (bincimap 도 가벼워서 괜찮긴한데)

http://www.dovecot.org/download.html

소스 RPM 을 이용.(vpopmail 적용이 안되나?)

vpopmail 을 적용하기 위해서는 직접 소스컴파일을 해야 하는 듯 하다.
SRPM , spec 을 수정해서도 할 수 있겠지만, 고칠 부분이 많아서 별 의미가 없을 듯 함.


직접 소스 컴파일
wget http://dovecot.org/releases/1.2/dovecot-1.2.4.tar.gz
configure --with-vpopmail
make
make install

설정은 다음과 같이 한다.
http://wiki.dovecot.org/#Dovecot_installation
http://wiki.dovecot.org/BasicConfiguration

dovecot  계정을 생성한다.
useradd -d /usr/local/libexec/dovecot -s /sbin/nologin dovecot

기본적으로 /usr/local/etc 에 설정 파일이 저장된다.
mv dovecot-example.conf dovecot.conf
로 샘플설정파일을 기준으로 자신의 환경에 맞게 설정한다.(주석을 해제해 준다)

protocols = imap
pop3 를 쓸경우 pop3 도 추가

disable_plaintext_auth = no
ssl = no
SSL 을 쓰지 않고, 평문으로 인증하는 것을 허용한다.

auth default {
}
부분의 vpopmail 부분을 해제/추가한다
userdb vpopmail{
}
passdb vpopmail{
}
user = vpopmail
vpopmail 계정 uid, gid 설정
# id -u vpopmail
# id -g vpopmail
를 확인해서 아래 처럼 설정값을 넣어준다.
first_valid_uid = 100
last_valid_uid = 100
first_valid_gid = 101
last_valid_gid = 101

dovecot 실행하기
dovecot 실행스크립트를 복사한다.
cp {소스디렉토리}/doc/dovecot-initd.sh  /etc/init.d/dovecot
chmod 755 /etc/init.d/dovecot




[추가 - 18-06-20]  centos 6 에서 추가

1. centos 6 에서 package 로 설치해봤다. 설정은 검색해서 참조.

2. telnet localhost 143  해보면 원하는 메시지가 안나온다.

* OK Waiting for authentication process to respond


원래 기대하던 메시지는

* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN]  Dovecot Ready

로그 메시지를 확인해보니.

Jun 20 05:46:01 auth: Fatal: Support not compiled in for passdb driver 'vpopmail'

Jun 20 05:46:01 master: Error: service(auth): command startup failed, throttling

패키지가 vpopmail 지원되도록 컴파일 되지 않은 듯 하다.

즉, 소스로 설치해야 할 듯 함. ㅜㅜ

yum groupinstall "Development Tools"


몇가지 imap 체크 방법


LOGIN [username] [password] LIST [flags] [folder separator] [search term] STATUS [mailbox] [flags] SELECT [mailbox] FETCH [first]:[last] flags FETCH [mail number] body[header] FETCH [mail number] body[text] LOGOUT


로그인시 혹시 이런 메시지가 나온다면, vpopmail 사용시

NO [AUTHENTICATIONFAILED] Authentication failed

/home/vpopmail/domains/도메인/vpasswd

이 파일의 권한을 체크해본다. ( vpopmail 으로 되어 있어야 한다) - 원인중 하나일 수 있다.

또는 vpasswd {메일계정}  으로 암호를 재설정 해준다.
(domains 를 복사한 경우 - 재설정이 필요한 듯 하다)


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
우분투 hardy 로 업그레이드 한 후에 이런 에러가 뜨기 시작했다.
현상은 아래와 같은 메세지가 나온다. 별다른 문제는 없지만, 종료하려고 하면 한참후(20~30초)에 종료팝업(재시작,종료,로그아웃 등의 메세지창)이 뜬다.
Internal error failed to initialize HAL
내부 오류.
HAL  기반(?) 으로 동작되는 프로그램에 이상이 있는 듯 하다.

https://bugs.launchpad.net/ubuntu/+source/dbus/+bug/81670
hardy 의 버그인듯 싶다.

/etc/rc2.d 의 부트스크립트들을 살펴보면.
S12dbus
S13gdm
S24hal
의 순서로 되어 있다. gdm 이 뜨기 전에 hal 이 먼저 실행되어야 하는데, 잘못되어 있다.

위 순서를 바꿔준다.  S13gdm 을 S30gdm 으로 바꿔준다.





WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
지난글에서 Centos 에서 빌드했었다.(http://blog.1day1.org/329)

우분투(9.04)에서 빌드를 해봤다. SPEC 파일의 몇몇 설정 부분을 수정해야 한다.


SPEC 의 어느 부분을 바꾸나?
1. /var/qmail 디렉토리 관련.

SPEC 에서 qmaild 계정을 만들때  useradd -m  옵션으로 /var/qmail 을 홈으로 지정해서 같이 생성하는데, alias 계정을 먼저 생성하기에 /var/qmail/alias  디렉토리를 생성할 수 없다는 에러가 발생한다.
그래서 qmaild 계정을 먼저 생성해준다.

또는 계정생성 앞부분에 /var/qmail 을 생성해준다.
if [ ! -d %{qmaildir} ]; then
        mkdir %{qmaildir}
fi

2. useradd 옵션 변경
우분투에서는 옵션이 -M 이 아니라, -m 이다.
useradd 의 버전차이인지 배포판 차이인지는 모르겠다

3. /sbin/nologin  을  /usr/sbin/nologin  으로 바꾼다 (배포판 차이)

4. {_initrddir} 위치 /etc/init.d 가 생성되지 않는다.
우분투는 /etc/init.d 에 위치한다. 
rpm --eval %{_initrddir}
으로 확인한다.

5. pushd , popd 명령이 안 먹나?
ubuntu 에서 /bin/sh 가 dash 라는 놈에 링크되어 있다.
pushd,popd 는 bash 에서 동작한다.  기존것을 지우고,
ln -s /bin/bash /bin/sh
으로 링크해준다.

chkconfig 대신에 update-rc.d 를 이용한다.
우분투는 update-rc.d 를 이용한다. (chkconfig 부분을 찾아서 다음처럼 바꾼다)
update-rc.d -f qmaild defaults
update-rc.d -f pop3d defaults

다 바꿨으니, SRPM 을 다시 만들어야지.
여기까지 변경후 다시 SRPM 을 생성한다.
rpmbuild --bs --with cdb SPEC/knetmail.spec

몇몇 패키지가 필요하다. 해당 패키지가 설치되어 있지 않으면 설치해준다.
apt-get install libssl-dev

모든 준비끝.
rpmbuild --rebuild --with cdb SRPMS/knetqmail-0.0.1-3.src.rpm

우분투에서도 쉽게 설치하자.


수정된 SPEC 파일이다.(참조) - 기존 spec 파일과 비교해서 직접 확인하기 바란다.




WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
윈도우7 64bit , IE8 을 환상의 조합이라고 할까?
인터넷 뱅킹, 온라인 쇼핑은 너무 어렵다.

자동으로 설치는 안되더라도 직접 설치해서 하게는 해줘야 하지 않겠어?
결제모듈 업체도 손을 놓은 상태인것 같아!  나몰라!

그래서, 내 컴퓨터에 매트릭스를 만들어 놓기로 했다.
가상머신으로 윈도우XP 의 매트릭스를 만든 것이다. 음~화화하...

그리고, 결제 버튼, active-x 들이 깔린다. 불안하긴 하지만, 뭐 괜찮아!
그래 되는 것 같아! 이제 결제 해봐야지.

헐!  재부팅.
음. 매트릭스(가상머신) 가 재부팅 되냐고?

아니 내 컴퓨터가...

매트릭스 버전이 낮아서 그런거야. 몇번 업그레이드 하면 완벽해 질거야!!

뭐니! 싫어!


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
그동안 여러시스템을 운영하면서, 하드디스크 장애를 수차례 겪어봤다.
물론 전문 운영업체도 아닌 개인입장에서의 경험이니 일반화 하는 것은 위험하다.

짧은 경험이지만, 하드디스크 장애중에 유독 파일시스템이 깨지거나 쓰기지연 등이 발생하는 경우는
var 디렉토리가 대부분이었다. var 디렉토리의 특성상 쓰기 작업이 많이 일어나기 때문일 것이다.

var 는 일을 많이 해!
시스템을 설치할때 / , /boot , /usr , /var  등은 거의 필수로 별도의 파티션으로 나누어 놓는다.
이중에서 디스크 자체의 인식오류등을 제외하면 거의다 var 디렉토리에 이상이 생겨서 문제가 발생한다.
파티션을 나누어 놓아서, 별도의 파티션으로 var 의 데이터를 옮기고, 바꿔서 마운트 해주면 해결되기도 한다. 그러나, 디스크에 배드섹터 같은 것이 발생했을 가능성이 많기 때문에 하드디스크를 바꿔주는 것이 좋다.

그렇다면 var 자체를 별도의 하드디스크로 지정해 놓는 것이 좋지 않을까?
용량도 그리 크지 않아도 된다. /var/log 정도만 따로 떼어 놓으면 수기가 정도면 충분하다.
그러나, log 도 대부분 쓰기 작업이니 따로 떼면 마찬가지 일듯 하다.(log 도 같이 있어야 겠다)
가능하다면 아예 메모리에 올려버리면 장애 발생률이 현저히 줄어들지 않을까?

깔끔한 해결책이 없을까?


SSD 가 답일까?
SSD 를 도입하기에는 비용도 문제지만, SSD 가 쓰기작업에 별로라는 이야기가 있어 좋은 해결책은 아닐듯 싶다. (MLC 니 SLC 니 그런 차이가 있다고 하던데...)
그렇지만, 서버용으로는 속도 빠른것으로 5G (최대 10G) 정도만 되어도 충분히 도입할 수 있으니, 그리 큰 비용이 들지 않겠지. 심각하게 고려해봐야 겠다.

저가형은 16G 부터 있는 것 같다. 가격은 약 10만원대.
한번 속는셈 치고 사볼까?


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  0개가 달렸습니다.
secret
참 이상하다.

메인보드의 시간설정을 했는데, 얼마후에 시간이 바뀌어 버린다.
GMT-9 (GMT+9) 로  9시간이 차이가 나버린다.

난 분명 16 시로 맞췄는데, 시간은 9시가 되버린다.
CMOS 배터리가 없어서 그러면 공장초기화가 되어 버릴텐데, 그런게 아니다.
보드에서 시간이 고정되어 버리나? time 서버와 자동동기화되지는 않을텐데.
OS 에서 bios 까지 직접 건드리지는 않을 것이고.
Phoenix 바이오스 인데, 이놈의 특색인가? (제조시 국가별 설정이 그렇게 되어 있을까?)

암튼 이상한 현상을 목격하게 되는군.


우분투의 하드드라이브 커널에러가 나온다.
http://ubuntuforums.org/archive/index.php/t-1034762.html
여기에 나오는 에러인데

하드디스크에러다,
케이블 에러다,
커널옵션 ACPI 를 꺼라.
여러가지 이야기가 있다.

fsck 로 돌리긴 했는데, inode 가 깨져서 삭제했다.
일단 부팅이 되고, 관련 에러가 보이진 않지만, 좀 불안하네.

조만간 하드디스크를 교체해야 겠다.


시스템도 '계란을 한바구니에 담지 마라'  라는 것이 적용되는 것 같다.
위 에러난 시스템은  내부 개발용 이다.
내부 SCM , 이슈트래커, 공유공간, 개발서버(VM) 등이 구축되어 있다.
하드 에러가 나서 시스템을 교체할 생각을 하니, 고생이 훤하다.
가장 간단하게 하드카피로 하거나, 새로운 시스템으로 클린 설치를 해야할텐데 말이다.
클린설치하면 설정을 다시 해야 한단 말이지.

그나마 다행인것은 개발서버를 VM 으로 구축해놔서 카피만 하면 된다.
나중을 생각해서, SCM,이슈트래커 도 VM 내에 구축해 놓을까?
마스터서버 는 단순히 OS 와 VM서버 만 올리도록 말이지.
그렇게 분산시켜놓으면 최악의 상황에 대비하기 좋을테니 말이다.



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  0개가 달렸습니다.
secret
YDN , Yahoo Developer Network 의 약자이다.
예전에 pipe 를 잠깐 써봤던 것이 생각난다.
아주 간단한 RSS 를 불러와서 최신글을 뿌려주는 간단한 pipe.

twitter @ydnkr 에서 본 http://ydnkrblog.com/blog/?p=582 YQL 소개 동영상.
여러 서비스들의 오픈API 를 아주 간단(?)하게 쓸 수 있다.
오호! 그래?  그럼 테스트를 안 해볼 수 없지.

http://developer.yahoo.com/yql/
YQL 은 지난 7월경에 나온듯 하다. 그동안 모르고 있었다.(다른곳에 한눈팔아 미처 못 봤겠지)
사실은 트위터 오픈API 를 이용해서 뭔가 만들려고 했었는데. 마침 YQL 이 눈에 띄었다.
(결과적으로 이런 행운이...)

YQL console 이라는 것이 있어, 직접 쿼리(?)를 날려 테스트 해볼 수 있다.
http://developer.yahoo.com/yql/console/

그 부분은 동영상에서도 소개가 되어 있으니 일단 넘어가고.
바로 트위터에 포스팅 하기를 실험해 봤다.(약간의 삽질기도 있다)

YQL 콘솔상에서는 다음과 같은 쿼리를 날린다.
이런 쿼리이다.
use 'http://yql.1day1.org/yql-twitter-status.xml' as table; insert into table (username,password,status) values('username','password','YQL-twitter test. 22');
자신의 트위터 아이디/암호/내용을 넣으면  트위터에 포스팅이 된다.


1. YOS , php SDK 를 이용하려다 실패.( & 보류 )
자세한 사항은 자세히 보기로...
(그에 대한 삽질기록은 http://t.1day1.org/post/177433640 )

2. YOS 가 curl 쓴다면, 난 직접 쓰지뭐.
YOS 가 curl 을 쓴다기에 직접 써보기로 했다.

file_get_contents , simplexml_load_file 같은 php 의 함수를 이용할 수도 있지만,
INSERT/UPDATE/DELETE 등의 쿼리는 POST 로 데이터를 넘겨야 하는 것 같다.
그래서 해당 함수들은 사용할수가 없다. 물론 socket 열어서 직접 post 로 넘기면 되지만.
우린 복잡한거 싫어하잖아요. 간단하게 해야 Cool 하죠. ^^

암튼 curl 을 쓰기로 했다.

우선 완성된 샘플 주소이다.(이 주소는 계속 유지 되지 않습니다.)
http://yql.1day1.org/yql-twitter.php


curl 을 이용한 방법의 핵심부분의 코드이다.

$query = "use 'http://yql.1day1.org/yql-twitter-status.xml' as table;
    insert into table (username,password,status)
    values('" . $_POST['username'] . "','" . $_POST['password'] . "','" . $_POST['status'] . "'); ";

$postData = 'q=' . urlencode($query). '&format=xml';
$yql_uri = 'http://query.yahooapis.com/v1/public/yql';


$options_add = array(
    CURLOPT_URL => $yql_uri  ,
    CURLOPT_REFERER => $referUrl ,
   
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => $postData ,
);

$ch = curl_init( );
curl_setopt_array( $ch, $options_add );

$content = curl_exec( $ch );

curl_close( $ch );
보내고자 하는 쿼리를 
http://query.yahooapis.com/v1/public/yql
으로
$postData = 'q=' . urlencode($query). '&format=xml';
post 형식으로 보내는 것이다.



YOS 가 된다면, 그게 좀더 편하겠지만, curl 로 직접 처리하는 것도 괜찮아 보인다.

YQL 의 매력적인 부분은 자신의 서비스를 오픈테이블(opentable?) 로 공개해서 사용하게 할 수 있다는 것이다. YQL 에서 쓸 수 있도록 따로 등록절차가 필요한지 모르겠지만, 서비스 개발자에게 상당한 자유도,편의성을 제공하는 것 같다.



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  5개가 달렸습니다.
  1. 궁금이 2014.07.28 09:58
    yql 쿼리에 한글이 들어가면 제대로 작동을 안하는데 어떻게 해야 할까요? 잘 됬었는데 약 1주일전부터 갑자기 안됩니다. 영어 쿼리는 잘 되구요. 조언 좀 부탁드립니다.
    • 그동안 잘 되셨다면, YDN 쪽에 뭔가 바뀌었나 보네요.
      그쪽에 문의를 해보시는게 좋을 듯 합니다.

      - 저도 오래전에 작성한 글이라 정확히 판단이 어렵겠네요.
  2. 궁금이 2014.07.28 21:31
    YDN쪽에 문의는 어떻게 해야 하는건지요? 외국사이트라 방법을 잘 모르겠어요. ㅠㅠ
    • https://developer.yahoo.com
      에 가보시면 포럼이나 블로그등이 있습니다.
      그곳을 살펴보시는 것이 더 도움이 될 것 같네요.

      - 큰 도움을 못드리는 것 양해바랍니다.
  3. 궁금이 2014.07.30 10:41
    넵, 답변 주셔서 감사합니다. ^^
secret
큐브리드를 사용해보려고 테스트 중이다.

지난 8월에 2008 R2.0 버전이 새로 나왔다. 64bit 지원과 SRPM 지원이 눈에 띈다.
기존버전은 64bit 환경에 쓰기에는 애매한 부분이 있었다.
그래서 편법(?)으로 쓰기도 했다.(http://blog.1day1.org/312)

Centos(redhat 계열-rpm) 에서 빌드하는 것과 뭐가 다르지?

Centos 에서 cubrid SRPM 빌드를 해봤는데, 별다른 문제없이 빌드가 되었다.

우분투는 기본 패키지는 .deb 이지만,  rpm 도 설치가 가능하다.(특이한 설정이 아니라면)
rpm 을 사용하기 위한 패키지를 설치한다. ( 우분투 hardy 버전에서 테스트 했다)
apt-get install rpm

큐브리드도 SRPM 을 제공하기 때문에 우분투에서 빌드해보았다.

rpmbuild --rebuild 를 해보면 사전에 필요한 패키지들이 있다.
elfutils-libelf-devel
ncurses-devel
libstdc++-devel
glibc-devel
위 패키지 들에 해당하는 우분투 패키지는
apt-get install  libelf-dev libncurses-dev libstdc++6-dev libc6-dev
등에 해당한다.

rpm 방식은 체크하는 방식이 차이가 있어서 해당 패키지를 설치해도 계속 에러가 난다.
그래서 SRPM 의 spec 을 수정해서 다시 SRPM 을 만들기로 했다.

SRPM 패키지 우분투용으로 다시 만들자

먼저 srpm 을 설치한다
rpm -ivh CUBRID-8.2.0.1150-el5.src.rpm
우분투에서는  /usr/src/rpm 에 rpmbuild 관련 파일,디렉토리가 있다.
SRPM을 설치하면  rpm/SOURCES 에 관련소스가 생기고, rpm/SPECS 에 설정파일이 생긴다.

rpm/SPECS/cubrid.spec 을 열어서 
Requires:      ncurses
Requires:      libstdc++
BuildRequires: elfutils-libelf-devel
BuildRequires: ncurses-devel
BuildRequires: libstdc++-devel
BuildRequires: glibc-devel
위 부분을 주석처리한다.  각 줄의 앞에  # 을 붙여준다.

우분투에서는 rpmbuild 시 _sysconfdir 의 위치가 약간 다르게 나타난다.
rpm --eval %{_sysconfdir}
해보면  Centos 에서는 /etc 로 나오는데, 우분투는  /usr/etc  로 나온다.
SRPM 빌드 마지막 부분에 이 부분때문에 관련 파일을 찾을 수 없다는 에러가 나온다.
/usr/lib/rpm/x86_64-linux/macros  부분의
%_sysconfdir            %{_prefix}/etc
를 다음처럼 바꿔준다.
%_sysconfdir            /etc
SPEC 을 고친후에 SRPM 을 다시 만들어 준다.
rpmbuild -bs rpm/SPECS/cubrid.spec
rpm/SRPMS/ 에 다시 만든 SRPM 패키지가 생성된다.


이제 SRPM 빌드해도 되나?
준비가 끝났으니 본격적으로 우분투에서 SRPM 빌드를 한다.
rpmbuild --rebuild rpm/SRPMS/CUBRID-8.2.0.1150-el5.src.rpm
Centos 와 마찬가지로 JAVA_HOME 설정, ant 등의 빌드시 필요한 패키지를 설치한다.
apt-get install sun-java6-jdk ant

JAVA_HOME=/usr/lib/jvm/java-6-sun
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin


export JAVA_HOME
export PATH
make , gcc 등의 개발에 필요한 패키지도 설치되어 있어야한다.(대부분 이미 설치되어 있을듯)
apt-get install build-essential

최종적으로 rpm 을 만들었는데, 이런에러가.
rpm -Uvh CUBRID-8.2.0.1150-el5.x86_64.rpm
아! 나를 반기는 의존성 오류.
오류: Failed dependencies:
        /bin/bash is needed by CUBRID-8.2.0.1150-el5.x86_64
        /bin/csh is needed by CUBRID-8.2.0.1150-el5.x86_64
        /bin/sh is needed by CUBRID-8.2.0.1150-el5.x86_64
이미 bash , sh 등이 설치되어 있지만, rpm 에서 체크하는 방식이 달라서 그런듯 하다.
즉, 우분투에서는 설치된 패키지 정보가 rpm 에서 알 수 없어서 그런듯 하다.

일단 의존성 체크 없이 설치한다.
rpm -Uvh --nodeps CUBRID-8.2.0.1150-el5.x86_64.rpm



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Cubrid 2008 R2.0 버전을 쎈토스에서 SRPM 빌드하는 법을 정리한다.

SRPM 빌드전에 뭐하지?

일단 빌드 전에 필요한 패키지들이 있다.
yum install rpm-build

당연히 빌드할 rpmbuild 패키지가 필요하다.(이미 깔려 있으면 생략)


0) 빌드에 필요한 패키지

yum install elfutils-libelf-devel ncurses-devel libstdc++-devel

1) javac (jdk) 필요. JDK 패키지 설치

yum install java-1.6.0-openjdk-devel

JAVA_HOME 설정 추가. (~/.bash_profile 에 넣어주거나, 콘솔상에서 입력해준다.)

JAVA_HOME=/usr/lib/jvm/java
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin


export JAVA_HOME

2) 다음은 ant

yum install ant

3) c++

yum install gcc-c++


본격적인 SRPM 빌드 작업


1) SRPM 다운로드

wget http://dev.naver.com/frs/download.php/500/CUBRID-8.2.0.1150-el5.src.rpm
wget http://dev.naver.com/frs/download.php/515/cubrid.spec

2) SRPM 빌드

rpmbuild —rebuild CUBRID-8.2.0.1150-el5.src.rpm

빌드가 완료되면  /usr/src/redhat/RPMS 에   설치할 rpm 파일이 생성된다.

설치는 보통에 하던식으로  rpm -Uvh ... .rpm   으로 하면 된다.



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
메일서버 qmail 을 설치/설정하는 것을 설명했다.(http://blog.1day1.org/329)

qmail + vpopmail(with cdb) 의 조합에서  vpopmail 콘솔 명령으로 관리할 수 있다.
그런데, 웹으로 관리하고 싶을때는 qmailadmin 을 설치한다.
http://www.inter7.com/index.php?page=qmailadmin

다운 받은 압축파일을 풀고, configure 설정을 해준다.
./configure --disable-ezmlmdir --disable-autoresponder-path
따로 ezmlm (메일링리스트) , autoresponder 가 필요없어서 위처럼 disable 옵션을 줬다.

설정이 끝나면 컴파일하고 설치한다.
make
make install-strip
Centos 의 apache 의 경우  /var/www/cgi-bin  , /var/www/html  등에 관련 파일들이 설치된다.

http://localhost/cgi-bin/qmailadmin  으로 접속을 하면 다음과 같은 화면이 나온다.
계정 생성, 삭제 등을 웹인터페이스 상에서 할 수 있다.


ps. 그런데, 간단한 설정만 되어 있어, 콘솔화면에서 명령내리는 것과 큰 차이는 없다.
  둘중 편한 것을 쓰면 될 듯 하다. 도메인에 대해 별도 관리자가 직접하도록 할때는 유용할 듯 하다.



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

메일서버에는 다양한 어플들이 있다.
흔히(?) 쓰는 sendmail 부터, 요즘 우분투쪽에서 밀고 있는 듯한 postfix.
지금은 어떤지 모르겠지만, 예전에는 sendmail 의 보안문제에 대해서 말이 많았다.

그렇다 보니 다른 대안을 찾아다니게 된다.
그 중에 유명한 메일서버가 qmail 이 아닐까 한다.
큐메일.
그런데, 문제가 컴파일 해서 사용해야 하기때문에 비경험자에게는 쉽지않은 난이도를 가지고 있었다.
그리고 환경에 따라 다양한 방법이 존재한다.(각종 패치는 더욱 많다)
다양한 요구를 만족시킬 수 있다는 장점은 다른 면에서 복잡성을 나타내기 때문에 어려워진다.

서버의 실제 계정을 활용하는 가장 기본적인 방법과 (qmail 기본)
파일로 관리하는 가상계정을 사용하는 방법(qmail + vpopmail)
DB 로 관리하는 가상계정을 사용하는 방법(qmail + vpopmail + mysql)

등 여러방법이 존재한다.
기타 자세한 정보는 http://qmail.kldp.net  를 참조한다.

지금 설명하려는 부분은 qmail + vpopmail 의 가상계정을 이용하는 방법이다.
지금까지 qmail 기본 설정을 사용했었다. 원래 sendmail 으로 운영했었는데(몇년전) 관리의 어려움이 있어 qmail 로 변경을 했다. 그당시 설정이 어려운부분이 많아서, 제일 간단한 방법이면서, 기존의 설정을 그대로 가져갈 수 있기 때문에 qmail 기본을 사용했었다.

그리고 몇년이 지난후 서버의 운영체제를 업그레이드 하다보니, 메일서버가 문제였다.
예전의 컴파일 하던 방식이 새운영체제에 맞지 않는 것이었다.
여러 방법을 찾아보다가 qmail + vpopmail 로 이전하는 것으로 결론을 내렸다.
그 사이에 쉽게 처리할 수 있는 방법이 나왔기 때문이다.

Centos 에서 SRPM 으로 빌드하는 방법이다.
http://qmail.kldp.net/phpbb/viewtopic.php?t=7887

1. 해당 SRPM 패키지를 받아서. 빌드한다.

rpmbuild --rebuild --with cdb knetqmail-0.0.1-3.src.rpm

이때 /var/qmail 디렉토리가 없다는 에러가 나온다. ( mkdir /var/qmail 로 만들어 준다.)
빌드된 rpm 파일은 /usr/src/redhat/RPMS/x86_64 에 위치한다. ( x86_64 또는 i386 )

2. 빌드된 rpm 패키지를 설치한다.
centos 는 기본 sendmail 이 설치가 되어 있어, 먼저 제거를 해준다.

rpm -e sendmail --nodeps
rpm -Uvh /usr/src/redhat/RPMS/x86_64/knetqmail-0.0.1-3.x86_64.rpm

(빌드된 rpm 파일명은 본인의 것을 확인한다.)

3. qmail 실행

/etc/init.d/qmaild start
/etc/init.d/pop3d start

위 처럼 실행하면 /service 에 다음처럼 링크가 된다.

ll /service/
합계 0
lrwxrwxrwx 1 root root 31  8월 27 17:46 qmail-pop3 -> /var/qmail/supervise/qmail-pop3
lrwxrwxrwx 1 root root 31  8월 27 17:45 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx 1 root root 32  8월 27 17:45 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd

위와 같이 나오고, ps ax 에

# ps ax|grep qmail
27800 ?        S      0:00 supervise qmail-smtpd
27802 ?        S      0:00 supervise qmail-send
27803 ?        S      0:00 /usr/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb -c 100 -u 108 -g 106 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true
27804 ?        S      0:00 /usr/bin/multilog t s2500000 n10 /var/log/qmail/smtpd
27805 ?        S      0:00 qmail-send
27812 ?        S      0:00 /usr/bin/multilog s2500000 n10 /var/log/qmail/send
27813 ?        S      0:00 qmail-lspawn ./Maildir/
27815 ?        S      0:00 qmail-rspawn
27816 ?        S      0:00 qmail-clean
27824 ?        S      0:00 supervise qmail-pop3
27826 ?        S      0:00 /usr/bin/multilog n10 s2500000 /var/log/qmail/pop3
27827 ?        S      0:00 /usr/bin/tcpserver -vRHl0 -u 108 -g 106 0 pop3 /var/qmail/bin/qmail-popup mymail.mydomain.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir

위와 같이 관련 데몬이 뜨는 것을 볼 수 있다.

telnet localhost 25   (smtp)
telnet localhost 110   (pop3)

등으로 테스트를 해본다.

http://www.abuse.net/relay.html  나
http://people.kldp.org/~eunjea/relay-test.php

에서 릴레이 테스트도 해본다.

4. vpopmail 계정관리

vadddomain blahblah.com

도메인 추가.

vdeldomain blahblah.com

도메인 삭제. 조심하자. 아주 깨끗히 삭제한다.

vadduser foo@blahblah.com 

메일사용자 계정을 추가한다. 전체 메일주소를 쓴다.

vdeluser foo@blahblah.com

메일사용자 계정 삭제. 역시 조심. 그냥 삭제한다.

vpasswd foo@blahblah.com

암호변경. 암호는 바꾸고 써야지.

vaddaliasdomain newblah.com  blahblah.com

기존쓰던 도메인 계정그대로 다른 도메인으로도 메일을 같이 받고 싶을때.

자세한 사항은  http://ejlabs.net/txt/vpopmail  를 참조한다.


여기까지 기본적인 설치와 설정에 관한 부분이다.
예전에 qmail 써봤던 분들은 SRPM 빌드 방법을 해보면 정말 편해졌다는 것을 느낄 것이다.

다음에는 기존 /etc/passwd 의 계정을 vpopmail 가상계정으로 가져오는 방법과
그에 따라 간단하게 만든 실행 스크립트를 소개한다.


[추가] : yum update 시의 conflict 문제.

yum update 를 했을때. 

knetqmail ... conflicts with exim

이런식의 메세지가 나오면서 진행이 되지 않으면, 관련 패키지를 빼고 업데이트한다.

yum update -x exim -x postfix -x sendmail


위에서 sendmail 을 삭제할 때. rpm -e  보다는 yum remove  를 쓰는것이 좋을 듯 싶다.
(문제가 생길지는 모르겠다 - 테스트 필요.)

 

[추가-18-06-20] : centos6 에서 추가조치

1. rpmbuild 설치

yum install rpm-build

yum install gcc openssl-devel

# 기타 추가 패키지
yum install procmail

 

2. 진행도중 다음과 같은 에러.

chkuser.c:38:22: error: vpopmail.h: No such file or directory

chkuser.c:39:19: error: vauth.h: No such file or directory

chkuser.c:40:29: error: vpopmail_config.h: No such file or directory

chkuser.c: In function 'realrcpt':

chkuser.c:746: warning: comparison between pointer and integer

chkuser.c:875: warning: assignment makes pointer from integer without a cast

chkuser.c:885: warning: assignment makes pointer from integer without a cast

chkuser.c:896: error: dereferencing pointer to incomplete type

chkuser.c:896: error: 'BOUNCE_MAIL' undeclared (first use in this function)

chkuser.c:896: error: (Each undeclared identifier is reported only once

chkuser.c:896: error: for each function it appears in.)

chkuser.c:901: error: dereferencing pointer to incomplete type

chkuser.c:902: error: dereferencing pointer to incomplete type

chkuser.c:906: error: dereferencing pointer to incomplete type

make: *** [chkuser.o] Error 1

오류: /var/tmp/rpm-tmp.cZvvkq의 잘못된 종료 상황 (%build)

 

 

RPM 제작 오류:

    /var/tmp/rpm-tmp.cZvvkq의 잘못된 종료 상황 (%build)

 

 

3. 기존 srpm 버전이 centos 6 에 대응이 안된 듯 하다.  

knetqmail-0.0.1-3.src.rpm  대신에
knetqmail-0.0.1-5.src.rpm  버전을 구해서 해보니 rebuild 잘된다.

(생성된 rpm 위치는 /root/rpmbuild/RPMS/x86_64/  => 사용자 계정에 생성 )

4. 리빌드 후 설치 시 centos 6 - postfix 를 제거  ( centos 6 는 아마도 sendmail 이 아닌 postfix 가 기본인 듯 하다)

rpm -e postfix --nodeps

 

5. /etc/initab 의 /command/svscanboot 이 실행되지 않을 때

# cat /etc/init/svscan.conf 
start on runlevel [12345]
respawn
exec /command/svscanboot

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
CodeIgniter 일명 CI 는 php 프레임웍이다.
한국에서는 zend , cakephp 등의 프레임웍보다 덜 알려져 있다.
사실 php 프레임웍 자체가 널리 쓰이지 않고 있다.
그 상황에서 각 프레임웍의 인지도를 따지는 것은 무의미 하다고 본다.

그러던중 CI 한국 사용자 포럼이 만들어졌다.
http://codeigniter-kr.org/
php 프레임웍의 한국사용자 포럼은 cakephp 가 먼저 만들어졌지만, 지금의 거의 개점휴업상태이다.
(cakephp 포럼도 활성화 되길 바랍니다. cakephp.co.kr )

얼마전에 CI 기반의 포럼이 오픈하면서 지금의 꽤 활성화되고 있다.
운영자들이 CI 를 사용하다보니 그런것 같다. 하나둘씩 사용자가 늘어나고 있다.


자! 여러분들도 CI 의 가벼움에 반하시기 바랍니다. (가볍지만 강합니다.)

다른 프레임웍도 좋지만, php 의 강점인 간결함과 속도를 희생하는 문제가 있었습니다.
CI 는 php 의 강점을 살릴 수 있는 프레임웍이라고 생각합니다.

자! 클릭하세요. ^^   http://codeigniter-kr.org/



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
centos 쪽에 네임서버를 설치하려 한다.
우분투와 차이점이 있어 정리한다.

우분투는 /etc/bind/ 에 설정파일이 있다.
/etc/bind/named.conf.local 에 도메인 설정을 한다.
zone 파일은 /var/cache/bind 에 위치한다.


Centos 는 뭐가 다르지?
그런데, centos 는 조금 다르다.
가장 큰 차이점은 chroot 로 네임서버를 구동한다.
우분투쪽도 그런방식이 가능할 것으로 생각한다.(최신 배포판은 그런방식을 쓸지도,현 hardy)
그래서 chroot 의 root path 는 /var/named/chroot 가 된다.
네임서버 실행시 저 위치가 root 가 된다. 설정파일도 그 안에 위치한다.
/var/named/chroot/etc/named.caching-nameserver.conf
/var/named/chroot/etc/named.rfc1912.zone
도메인 설정은 named.rfc1912.zone 에 설정하면 된다.

그럼 zone 파일은 어디에 위치하나!
바로 /var/named 인데, chroot 상의 /var/named 이다.
/var/named/chroot/var/named
가 된다.

/etc/named.conf 등의 파일은 뭐지?
그냥 관리자가 관리하기 편하게 링크를 걸어준것 뿐이다.
해당 파일들을 삭제하고 재시작 해봐도 정상적으로 작동하는 것을 볼 수 있다.

ps 로 네임서버 프로세스를 확인해보면.
/usr/sbin/named -u named -c /etc/named.caching-nameserver.conf -t /var/named/chroot
chroot 로 시작하고 chroot 의 /etc/named.caching-nameserver.conf  설정을 불러들이는 것을 볼 수 있다.


기존 우분투 설정을 그대로 쓰고 싶어
우분투의 설정을 그대로 가져가 쓴다고 할때.
우분투의 named.conf.local 설정을
/var/named/chroot/etc/ 에 복사한후
/etc/named.conf.local 로 심볼릭 링크를 한다.
ln -s /var/named/chroot/etc/named.conf.local /etc/named.conf.local
/var/named/chroot/etc/named.caching-nameserver.conf  ( /etc/named.conf )
의 마지막 줄에. named.conf.local  설정을 불러오도록 다음 줄을 추가한다.
include "/etc/named.conf.local";

그리고 기존의 zone 파일들은
/var/named/chroot/var/named 에 복사해 주면 된다.

그리고 재시작하고, nslookup , dig 등으로 확인한다.



외부에서 도메인 질의가 안된다면
로컬에서는 되는데, 외부에서는 안된다면 다음의 사항을 체크한다.

1. 방화벽
iptable 로 53 번 포트를 열러줘야 한다.
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

2. 설정
설정파일의 기본이 localhost 를 기준으로 되어 있다.( named.caching-nameserver.conf )
    allow-query     { any; };

    match-clients      { any; };
    match-destinations { any; };
위처럼 localhost 를 any 로 바꿔준다.


nslookup 으로 질의확인
nslooup 으로 질의를 해서 네임서버 설정이 잘 되어 있는지 확인할 수 있다.
nslookup my.domain.com  localhost
처럼 질의를 했을때.
Non-authoritative answer:
Name:   my.domain.com
Address: 111.222.333.444
Non-authoritative  라는 메세지가 나오면 안된다.
해당 메세지가 없어야 일단 로컬설정이 제대로 된 것이다.


슬레이브 설정시 필요한 마스터 설정.
options 의 설정중에
allow-query 는  nslookup, dig 등을 이용한 일반 쿼리를 말한다.
슬레이브에서 마스터의 설정을 가져가려 하면
allow-transfer { slave-server_ip; };
의 설정을 해준다. (기본설정이 모두 허용인 듯 싶다. 필요한 서버만 허가를 하려면 필요하다)


ps. Centos 에서 bind-chroot 패키지를 설치하면 chroot 가 적용된다.


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
2009년 잔인한 그대여.

이땅의 버팀목을 하나씩 쓰러트리고
이땅을 어떻게 하려고
이땅에 남아있는 자를 어찌 하려고

그가 한일을 기억하며
그가 하고자 한일을 이어가며
그가 원했던 일이 이루어지는 날까지

잔인한 그대가 있어도
쓰러지지 않으리.

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  1 , 댓글  0개가 달렸습니다.
secret
eclipse 를 쓰기 힘들어서,  kdevelop 으로 왔다.
kdevelop 이 c/c++ 개발툴이긴 한데, 다른 언어도 지원한다.
php 는 플러그인을 설치해서 사용한다. 패키지가 있으면 좋겠는데, 아쉽게도 컴파일해야 한다.

php 플러그인 빌드에 필요한 패키지
apt-get install kdebase-dev kdelibs5-dev kdebase-workspace-dev libqt4-dev build-essential subversion kdesdk-scripts
관련 소스를 받는다.(svn 이용)

kdevplatform 을 먼저 빌드한다.
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdevplatform
cmake 로 makefile 을 생성한다.
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .
빌드,설치
make & make install

kdevelop 을 빌드한다.
svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdevelop
cmake 로 makefile 을 생성한다.
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .
빌드,설치
make & make install

php 플러그인을 빌드한다.
svn checkout svn://anonsvn.kde.org/home/kde/trunk/playground/devtools/kdevelop4-extra-plugins/php
마찬가지로 cmake 로 makefile 을 생성한다.
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .
역시 마찬가지로 이제 빌드,설치
make & make install



참조, kdevplatform 을 건너띄다가.


ps. 그런데, kdevelop 은 프로젝트 import 가 생각대로 되지 않는다.ㅜㅜ
 다시 eclipse 로 가야겠다. 이런.


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
자세한 방법은 다음을 참조한다.

큐브리드가 이미 설치되어 있는 상태를 가정한다.

1. 큐브리드 소스 다운 받기(svn)
svn checkout --username anonsvn https://dev.naver.com/svn/cubrid/trunk/contrib/php
2. 관련 패키지 설치
 apx2 가 필요하다. 해당 명령이 있는지 확인하고 없으면 관련 패키지를 설치한다.
apt-get install apache2-prefork-dev
그리고 phpize 도 필요하다. 역시 마찬가지로 없으면
apt-get install php5-dev

3. 빌드하기
src 디렉토리에서
phpize5
./configure
make
를 각각 실행하면  modules 에 cubrid.so 가 생성된다.

modules/cubrid.so 와 cubrid_err.msg 를
extension 디렉토리에 복사한다.( /usr/lib/php5/20060613/ - 등의 extension 디렉토리를 확인)

4. php.ini 설정하기
php.ini 에 cubrid.so 를 등록한다.
extension=cubrid.so
cubrid.err_path="/usr/lib/php5/20060613"

phpinfo 등으로 정상적으로 cubrid.so 가 올라왔는지 확인한다.



ps. centos 의 경우 httpd-devel , php-devel 패키지가 필요하다.
yum install httpd-devel  php-devel


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Centos 를 쓰는데, 유난히 다운로드 속도가 떨어진다.
그래서 빠른 곳으로 바꾸고자 한다.

저장소 위치는 /etc/yum.repos.d/CentOS-Base.repo  파일을 바꾼다.

기본설정이 mirrorlist 로 되어 있다. baseurl 은 주석처리 되어 있다.
반대로 mirrolist 는 주석처리하고, baseurl 에 빠른 곳을 직접 지정하면 된다.

기본 설정은
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
으로 되어 있다.  난  ftp.daum.net 으로 지정했다.
baseurl=http://ftp.daum.net/centos/$releasever/os/$basearch/
이런식으로 바꿔줬다.


base , updates 등의 다른 탭들도 바꿔준다. (addons, extras, centosplus )
base , updates 정도만 바꿔줘도 될 듯하다. 나머지는 추가적인 패키지들.


WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  1개가 달렸습니다.
  1. yum-fastestmirror 패키지를 설치하시면 별도 파일 수정이 필요없습니다.
    설치법은 간단하게
    yum install yum-fastestmirror

    yum실행시 알아서 가장 빠른 미러를 찾아 연결합니다.
secret
Centos 에서 yum update 를 하면.  sqlite 관련 에러가 나오면서. 에러가 난다.
yum  File "/usr/bin/yum", line 29, in
...
...

 TypeError: unsubscriptable object.
해결 방법은
yum clean metadata
또는
yum clean all


또 다른 에러는
TypeError: rpmdb open failed
인 경우에는
rm -f /var/lib/rpm/__db*
rpm --rebuilddb
하라고 한다.


참조 :
sqlite 패키지를 이전 버전으로 다운그레이드(?) 하라는 방법도 있는데, 왠지 이건 아니다 싶다.
rpm -Uvh --oldpackage sqlite-3.2.8-1.i386.rpm



WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

트랙백  0 , 댓글  0개가 달렸습니다.
secret