뭘 이런걸..

Posted
Filed under Tech/프로그래밍
얼마전 우연히 RoundCube Webmail 이라는 걸 알게 되어 0.10statble 버전을 설치해 보았습니다. 일단 설치해 본 결과 상당히 깔끔하다는 인상을 받았는데.. stable 이라는 버전에 맞지않게 버그들도 좀 보이더군요.

기타 등등 각설하고, 일단 가장 큰 문제는 한글이 깨지는 문제가 있다는 것입니다. 물론 잘 나오는 메일도 있겠지만, 이런 문제가 발생하는 것은, 메일의 헤더나 multi-part 의 header 에 charset 이 지정되지 않았을 경우, RoundCube 가 charset 을 US-ASCII 로 강제 하는데서 발생하는 문제입니다. 더 정확히는 RoundCube 가 US-ASCII 로 처리하는 것이 아니라 imap server 가 그렇게 처리하게 됩니다. (이건 wu-imap 에서의 문제입니다. 다른 imapd 에서는 어떨지 모르곘군요.)

wu-imap package 를 사용하시는 분들이나 charset 이 지정되지 않은 경우 메일이 깨지면 다음의 patch 를 해 보시기 바랍니다.

0.1 patch file

0.1.1 patch file


P.S.
patch file 을 잘 보시면 main.inc.php 에

$rcmail_config['default_charset'] = 'euc-kr';

와 같이 지정하는 것이 있습니다. 이걸 지정해야 charset 이 없을 경우 기본 charset 으로 처리하게 됩니다.
2008/10/01 02:26 2008/10/01 02:26
조현철

이 쓰레드가 여기까지나 진행이 되었네요... ^^
예전 포스팅한 글을 보고 다람쥐를 내리고 RoundCube를 올렸었는데..
한글등 여러 문제로 사용하지 않고 있었는데요..

날로 먹는 기분이네요.. 고생해주신 덕분에 감사히 잘 사용토록 하겠습니다.
감사합니다.

살라딘

답변 감사드립니다..

귀중한 시간을 빼앗은것 같아 대단히 죄송합니다.

제출한 patch를 적용해보니 문제 없이 잘되네요...
많은 도움 얻어 갑니다.

살라딘

여기 저기 찾아가며, 설치는 했는데 여러가지 문제가 많네요...
그래서 도움 좀 구하고자 합니다...

현재 설치 버젼은 trunk-r1993 입니다.

문제1. roundcubemail에서 메일을 보내고 Outlook Express에서 회신을 하게 되면...
회신 내용이 roundcubemail에서 깨져 보이네요..(헤더 정보를 보면 UTF-8로 보내서 UTF-8로 받는데...그리고 MS-Outlook에서 회신하게 되면 roundcubemail에서 깨져 보이지 않습니다. Outlook Express만의 문제인것 같습니다만...)

문제2. 최신 버젼은 아래와 같이 main.inc.php 파일에 설정하는 부분이 있습니다.
0, 1번 설정에 대해서는 파일첨부하여 보낼시 한글파일명이 깨집니다.
그리고 2번 설정에 대해서는 긴파일명(한글)에 대해서 깨집니다.

// Encoding of long/non-ascii attachment names:
// 0 - Full RFC 2231 compatible
// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default)
// 2 - Full 2047 compatible
$rcmail_config['mime_param_folding'] = '설정번호'

위 2문제로 낑낑대고 있는데...잘안되네요. 도움좀 부탁드립니다.

김정균

첫번째 OE 가 보낸 메일을 못 읽는 것은 UTF8 BOM 때문입니다. 보통 Unix 군에서는 UTF8 BOM을 사용하지 않는 것을 권장하고 있는데, MS의 몇몇 application (특히 notepad) 들이 BOM code 를 사용하고 있습니다. 여기서 OE가 UTF-8 encoding 을 할 때 BOM code 를 넣는 것 같군요. 일단 BOM code 제거를 하니 제대로 출력이 되는 것을 확인했습니다.

그리고 두번째 문제도 수정을 하기는 했습니다만, 패치를 받아 줄지는 모르겠군요. 딱히 버그라고 할 수도 없고, RFC2047에 보면 encoding 된 문자열이 75byte 가 넘지 않아야 한다고 되어 있어, roundcube 에서는 75자가 넘어갈 경우 그냥 뒤를 버려 버리므로서 발생하는 문제입니다. rfc2047에 의거하면, 75자가 넘을 경우, carrage return, new line, space를 이용해서 그 이후의 string 을 연결하면 된다고 되어 있어, 이렇게 수정해서 패치를 제공하기는 했습니다만.. 받아 들여줄지는 저도 보장은 못하겠습니다. :-)

일단, 두가지 문제에 대해서 patch는 제출한 상태이니 기다려 보시기 바랍니다.

오늘 하루 꼬박 날라갔군요. 앞으로는 더 이상 roundcube 문제 해결에 관여하지 않을 생각 입니다. roundcube 의 code 가 엄청나게 복잡한 관계로 문제가 되는 부분을 찾는데 걸리는 시간이 대부분이다 보니 회사에서의 눈치가 장난이 아닙니다. 제가 roundcube 를 굳이 사용하는 입장도 아닌 상황에서 무상 지원은 쉽지 않을 것 같습니다.

그리고 더 중요한 것은 끝이 없어요 T.T 저는 봉이 아니랍니다. ^^

김정균

http://trac.roundcube.net/ticket/1484961 에서 거부당했던 패치의 ticket 이 다시 열렸습니다. 0.2 에서 해당 내용이 많이 반영이 되었는데, 아직 좀 부족한 편입니다.

일단, charset 에 상관없이 charset 이 잘못 출력될 수 있는 버그 2개에 대한 패치를 제공한 상태이며, 여전히 body 에 charset이 지정되지 않았을 경우, IMAPD 가 US-ASCII나 X-UNKNOWN을 리턴해서 발생하는 부분은 여전히 고쳐지지 않았습니다. 그래서 패치를 다시 제출한 상태인데, 잘 받아들여질지는 모르겠군요.

다만, 해당 ticket 에 제시된 이미지들이 좀 낯뜨거운 이미지들이군요.. ^^; sample 제출을 잘 못한듯.. ㅋㅋ

김정균

Message body 에 charset 이 지정되지 않았을 경우가 문제가 되고 있네요. 개발자들이 사용하는 imapd 인 Courier의 경우에는 charset 이 지정되어 있지 않을 경우 NIL을 return 하기 때문에 제대로 보이는데, Cyrus-imapd 나 Wu-imapd 의 경우에는 US-ASCII 나 X-UNKNOWN을 return 하기 때문에 깨지는 문제가 발생하는데, 이 부분에 대한 조율이 쉽지 않네요. 쩝.. 0.2 에서는 이 문제가 해결이 되어 나올지 쉽지 않은 문제인것 같습니다.

문제가 하도 많아서.. SSL 모드시에 헤더 출력 부분은 현재 무시된 상태이고, 리스팅에서도 CHARSET을 가진 제목이 있을 경우 다음 나오는 제목이 CHARSET이 없을 경우 이전의 CHARSET 이 유지되는 문제도 있는데 역시 묻히고 있는 듯한 기분이 ^^;

안되는 영어로 하려니 저도 힘들고.. 보는 사람도 힘들지 않을까 예상 됩니다. ㅋㅋ

조셀

답변 감사합니다.
덕분에 메일부분은 잘 정리 된듯합니다.
많은 지식을 얻어 갑니다. ^_^

앞전에 적으신 "안녕리눅스 틈새 시장노린다~" 라는 글에 많은 도움 얻었습니다.
이번엔 freeradius + pptpd(poptop) + mysql + dialup_admin 연동하고 OpenWRT(DD-WRT)를 이용하여 공유기를 VPN장비로 사용 할 수 있도록 할 예정입니다.

목표는 공인아이피 대역을 공유기로 내려주고 공유기에서 각 할당된 공인아이피를 클라이언트로 재분배 하도록 할예정입니다.

제가 지식이 부족해서 많은 도움 부탁드리겠습니다. ^_^

조셀

전달 받은 내용대로 소스를 수정하니, 문제는 해결되었습니다.
전달해 주신 내용을 천천히 읽어 보니...

예전에 제가 해결하지 못한 imap server charset 문제로 결론을....

예전에 vpopmail + procmail 연동을 해서 "한글"로 차단을 하여 사용을 하였습니다.
아래와 같이 캐릭터 셋을 강제로 변환해서 적용하면 roundcube 웹메일에서 한글로 된 제목 캐릭터가 모조리 다 깨져어요.ㅡㅡ;

뭐 스팸으로 버리지 못했다면 제목을 원복을 해야 하는데...ㅎㅎ

결론은 imap default charset이 있다면 해결 될수 있었다는 답이 나왔는데...

제 느낌으로는 소스 수정으로 procmail 부분까지 해결 될듯 한데요???? 맞는지..?? ^_^

여튼 고생 많으셨습니다.
- 감사합니다 - (_ _);;


[root@ns etc]# cat procmailrc
VIRTUALHOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`
MAILDIR=$VIRTUALHOME/Maildir/
DEFAULT=$MAILDIR
PATH=/usr/bin:/usr/local/bin:/bin
SHELL=/bin/sh
#LOCKFILE=$HOME/.lockmail
LOGFILE=/var/log/qmail/procmail/procmail.log
VERBOSE=no

:0 Efhw
*^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 Efhw
*^(Subject|From|Cc):.*=\?ks_c_5601-1987\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 Efhw
*^(Subject|From|Cc):.*=\?KSC5601\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 Efhw
*^(Subject|From|Cc):.*=\?ISO-8859-1\?(b|B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 BfHw
*^*.filename=.*=\?euc-kr\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0
*^Subject: .*(\{광|\[광|\(광|포르노|포X노|광고|광\ 고|홍보|광-고|성인|최저이자|기록\ 안남아요|대출|광1고|廣告|sex|SEX|porno)
/dev/null

*^Subject: .*대박
/dev/null

김정균

이건 procmail 의 변환 문제와는 별개 입니다. header 에 charset 이 정의 되어 있느냐 안되어 있느냐의 문제이기 때문입니다. 정의가 되어 있다면 수정하지 않은 roundcubemail 이 잘 처리하고 있기 때문입니다. 문제가 되는 것은 charset 이 정의 되어 있지 않은 메일까지 처리를 하려고 하다 보니 이런 문제가 발생을 하는 것이죠.

원래, MUA를 이용해서 정상적으로 메일을 보내는 경우는 거의 깨지지 않을 겁니다. 다만 스팸이나 웹에서 메일 발송 처리를 하는 것들 중에서 메일 파트 구성을 자기 멋대로 하는 경우가 문제가 발생되는 것이죠.

그래서 그냥 지금 imapd 에 default charset 을 지정하여 무조건 US-ASCII가 나오지 않도록 수정을 해 보고 있기는 합니다. 다른 imapd 는 써 본적이 없어서 고치지는 않겠지만 ^^;

김정균

흠.. roundcubemail 개발자와 bug tracking 을 하다가 좀 안습인 상황인 것을 발견했군요.

일단, 메일을 보낼 때 charset 을 정의해서 보내지 않은 메일을 제대로 뿌려주지 않아도 된다면 (Default charset 을 사용하지 않아도 되는 경우죠. 위의 02번 패치를 적용하지 않아도 된다면..) 03번 패치가 필요 없습니다. 03번 패치를 하지 않아도 roundcubemail 이 잘 처리를 해 준다는 의미입니다.

하지만, charset 이 정의되지 않은 메일 (Imap server 는 이 경우 US-ASCII를 return 합니다. 그래서 깨지는 거죠.) 을 US-ASCII 대신 default charset 으로 처리할 경우, 다른 영역에서 같이 사용하는 부분에 영향을 미치게 되어 더 수정을 하게 되는 것이죠.

프로그래밍 적으로는 위의 패치를 다 적용해서 제대로 하는 것이 맞겠지만, 실제로는 IMAP 서버가 default charset 을 지정해서 없을 경우 US-ASCII 대신 DEFAULT CHARSET 으로 return 해 줄 수 있다면.. 더 좋은 방법일 듯 싶습니다.

즉, 제가 roundcubemail 이 수정한 부분 때문에 영향을 받아서 계속 고치고 있느니 IMAP Server 를 수정하는 것이 더 간단한 일이 되어 버리게 되네요 쩝..

이런 안습인 상황이 나오다니 T.T

조셀

정말 이번 패치를 적용하고 여러가지 테스트를 해보니 다운로드가 잘됩니다. ^_^
정말 감사합니다.

패치를 적용하고 나서 아래와 같은 새로운 문제가 생겼습니다.(_ _);;

## 한글 메일폴더가 깨지는 현상 ##
http://www.zosel.net/tt.jpg

## 설정 화면엔 한글이 정상적으로 출력 됩니다. ##
http://www.zosel.net/tt1.jpg

김정균

음.. 함수를 정말 재활용 많이 하는 군요. --; 마지막 패치에 약간 수정을 해야 할 것 같군요.

roundcubemail/program/include/rcube_shared.inc 의 576라인에서

if ( preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {

부분을

if ( $_GET['_download'] && preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {

와 같이 수정해 주십시오.

본문의 패치들은 이 변경사항을 반영하여 다시 올려 놓았습니다.

조셀

일단 환경은 CentOS4.6에서 기본적인 APM을 사용하고 있습니다.
최근에 제작된 패치로 웹 메일서버를 재설치 하였습니다.
메일환경은 qmail+vpopmail+dovecot+mysql 로 설치 되어 있습니다.

패치 2개를 실행 후...

$rcmail_config['locale_string'] = 'kr';
$rcmail_config['default_charset'] = 'euc-kr';

이부분만 처리하면 한글부분은 깔끔하게 해결됩니다.(첨부파일 링크 제외)

첨부파일 링크를 해서 메일 확인을 누르고 다운을 받기위해 링크를 클릭하면 아래와
같은 화면이 나옵니다. mod_url은 모듈은 내렸습니다.


## 캡쳐화면 링크해 보냅니다. ##
http://www.zosel.net/cp1.jpg // 페이지 표시 할수 없음
http://www.zosel.net/cp2.jpg // 에러 메세지 나옴

번거롭지만 꼭 좀 부탁 드리겠습니다.

김정균

패치 올렸습니다. roundcubemail-0.1.1-UGLY-IE.patch 파일을 받으시면 됩니다. 이 문제는 오로지 IE에서만 발생하는 UGLY-IE 패치입니다. 이건 제작자 탓하기는 좀 그런데, 이 패치에 포함된 SSL관련 패치는 제작자가 좀 무심했었듯.. 이건 리포팅하면 받아질 것 같군요.

조셀

oops님, 이번에 만들어 주신 파일 패치를 적용하였는데...
한글 첨부가 되지 않네요.~
(첨부는 되지만, 다운로드 링크 활성화 되지 않습니다.)

## 아래 결과 ##
[root@ns html]# patch -p0 < roundcubemail-0.1.1-multibyte-attach.patch
patching file roundcubemail-0.1.1/program/include/rcube_imap.inc
patching file roundcubemail-0.1.1/program/include/rcube_shared.inc
patching file roundcubemail-0.1.1/program/lib/Mail/mime.php
patching file roundcubemail-0.1.1/program/lib/Mail/mimePart.php
patching file roundcubemail-0.1.1/program/lib/imap.inc
patching file roundcubemail-0.1.1/program/lib/is_utf8.class.php

## 위 적용 완료 후 한글 첨부파일을 웹메일로 보내고 받기함 //
한글 첨부에 링크가 활성화 되지 않음.
원인이 뭘까요?

김정균

일단 어떻게 안되는지를 보여 주셔야 할 것 같고요. (제가 인지하지 못한 부분일 수도 있으니까요.

그리고, config/main.inc.php 에서

$rcmail_config['locale_string'] = 'kr';
$rcmail_config['default_charset'] = 'euc-kr';

두가지 설정이 되어 있나요?

그리고, mod_url 설정 되어 있으면, rcube 에서는 off 시키도록 하세요. UTF8 로 오는 메시지가 변경되면 서버에서는 UTF8로 인코딩 하고 실제 넘어온 것은 EUC-KR이 되면 엉뚱한 문제가 발생할 수 있습니다.

조셀

너무 고생 많으셨습니다.
저도 손꼽아 기다리고 있었답니다. ^_^
이글 보는 즉시 바로 적용해 볼려고 합니다. ^^
수고 많으셨습니다.
그리고 감사합니다.

현호

너무고생하셨습니다. 감사드립니다~

낼출근하면 언능적용해봐야겠네요~^^

김정균

좀 삽질 하느라 오래 걸렸습니다. patch는 지난주에 만들었는데, UTF8 체크하는 부분을 만들다 라이센스 문제로, 아에 KSC5601 이라는 pear package 까지 만들어 버렸습니다. KSC5601 <-> Unicode (UCS4/NCR) <-> UTF8 을 통합적으로 관리할 수 있도록 하며, 예전에 만들어 놓았던 꾸질한 것들의 성능도 상당히 개선 시켰습니다.

이런 딴짓하느라 좀 오래 걸렸고, 오늘 마침 테스트 하다가, 이 패치 때문에, 첨부 이미지가 출력이 되지 않는 버그까지 잡아서 올립니다.

수정하면서 코드를 보다 보니, 열심히 만들었구나 하는 생각은 드는데, multibyte 관련 지원은 거의 없다고 보는 편이 맞을 것 같더군요. 아니 웹/메일상에서의 multibyte 관련 지식이 거의 없는 듯 싶은 느낌이 들었습니다.

조셀

예~ 감사합니다.
roundcube mail 이 고객쪽에 제공될 웹메일이라...^_^
이부분만 해결되면 한글 유저들에게 정말 유익한 웹메일이 될 것 같습니다.
항상 힘써 주셔서 다시 한번 감사 말씀 드립니다.

조셀

안녕하세요.
오늘도 혹시나 하는 맘에 들어 왔습니다.
아~ 수정한 것 같다고 하니, 한편으로 마음이 편안해 집니다.
수정패치는 언제 나오나요. 수정된 파일만 전달 받았으면 하는데...
혹시 가능 하다면 부탁 드리겠습니다.
zosel@zosel.net

김정균

다음주 내로는 나올 겁니다. UTF-8 관련 처리하는 부분의 코드가 라이센스가 걸려 배포하기가 좀 그래서 아예 새로 작성하고 있습니다. :-)

Posted
Filed under Tech/프로그래밍
상용 프로그램을 판매하는 아니, 무언가를 판매하는 회사에는 C/S 조직이 있기 마련입니다. 후진국이나 작은 회사가 아니고서는 customer 의 반응을 무시한다는 것은 곧 자멸하는 것과 마찬가지이기 때문입니다. (덕분에 제 아내도 C/S로 얼마동안 밥벌이 하기도 했습니다.)

제가 오픈소스 활동을 하면서 느낀점은 대부분의 오픈소스 개발자들에게 이 개념이 전혀 없다는 것입니다. 물론 회사에서 개발자가 C/S 개념을 가질 필요는 없을 수도 있습니다. 하지만 오픈 소스의 경우 프로젝트 리더가 곧 CEO와 마찬가지 이기 때문에 결국에는 개발자가 C/S 개념을 가져야 할 수도 있다고 생각합니다.

제가 오픈 소스 활동을 하는 이유는 이상적인 취미나 재미를 위해서는 절대 아닙니다. 제가 밥벌어 먹는데 상당히 중요한 역할을 하기 때문에 오픈소스 활동을 유지하고 있습니다. 하지만 저 말고도 시작은 이상적인 취미나 재미를 위해서 일지 모르겠지만, 그 프로젝트를 5년이상 유지하는 개발자의 경우 이상적인 부분말고 분명히 저와 같이 물질적인 보상 때문에 유지하는 경우가 더 많을 거라 생각 합니다. 그 물질적인 보상이 직접적이지는 않더라도 말이죠.

그렇다면 프로젝트의 산물은 회사의 Product 와 같은 개념이 됩니다. Product 를 더 많이 팔아 이윤을 남기기 위해서, 또는 내 프로젝트의 산물이 널리 사용해 져서 내 name value 가 높아져 내 연봉에 도움이 되게 하기 위해서는 결국에는 사용자는 customer 가 되게 됩니다. 이 customer 의 feed back 을 아주 중요하게 생각해야 한다는 것이죠.

하지만, 대부분의 open source 개발자들은 하잖은 일부 유저들이 올린 패치나 의견을 아주 더러운 기분이 들게끔 하면서 거부를 합니다. 비록 그들이 무시하지 않았다고 항변을 하더라도, 권위적이고 아주 귀찮다는 듯이 또는 표준이나 규약을 핑계삼아.. 너무나 뻔히 보이는 거부 핑계를 대는 것이죠. nateon 이 리눅스용 client 지원 요청에 대응하는 것과 비슷하겠지만 그래도 nateon 의 답변은 아주 정중하죠 ^^

제가 개발을 잘하는 것은 아니지만, 나름대로 필요한 것은 만들어 사용할 수 있는 능력이 되고, 또한 이렇게 만든 것을 open 하여 공유를 하고 있는 입장에서, 다른 개발자들의 행태를 보면 좀 이해를 할 수가 없습니다.

제가 생각하기에는 가장 중요한 것은 조화입니다. 하지만 대부분의 개발자들은 조화 보다는 제약을 좋아하는 것 같습니다. 더군다나 그 제약이라는 것에 대하여 제가 받은 느낌들은 대부분 거절을 하기 위한 핑계로 보인다는 것이고요. (그래서 저는 개인적으로 RMS를 좋아하지 않습니다. 제게는 꼭 파쇼처럼 보이거든요)

어떠한 의견이 제시되면, 왜 이런 의견이 제시가 되었을까? 난 이해가 되지 않지만 이런 의견이 제시가 되었다면 문제가 있는 것이 아닐까? 라는 진행이 되는 곳을 한번도 만나보지 못했다는 것이 이해가 되지를 않는 군요.

제목은 거창하게 적었습니다만.. 결국에는 푸념이 되고 마는..

P.S.
이 글은 제가 패치를 제출한 어떤 프로젝트의 개발자와 설전을 하다가 관점의 차이를 인정하지 않는 짜증나는 개발자 때문에 적는 글입니다. 모든 개발자가 다 그렇지는 않을거라 믿습니다. :-)
2008/04/20 05:37 2008/04/20 05:37
kss

c/s의 개념을 오픈소스 개발자들이 갖는 것은 상당히 어려운 일일 것 같습니다. 일반적인 개발자들도 그렇고요.

대체로 프로젝트 초기 단계에서는 외부로부터의 기능추가/수정 요청이나 패치에 대해 매우 환영하고 수용적이지만 시간이 갈수록 어느정도 프로젝트가 안정화되고 뭔가를 추가하는 것보다는 더이상 뺄 것이 없는 상태를 지향하게 된다면 보수적으로 바뀔 수밖에 없습니다. 그시점을 좀더 넘어간다면 외부로부터의 input이 귀찮을(?) 수도 있는 것이지요.

결국엔 어떻게 접근하느냐의 문제로 귀결되겠지만 사람과 사람사이의 문제가 아닐까 합니다. 오픈소스 프로젝트 개발자들에게 조금더 개방적이고 수용적인 자세를 기대하는 것은 자연스러운 일이라고 생각하지만 그것이 must가 되어야 하는 것은 아니기 때문에 오픈소스라고 해서 특별히 다른 잣대를 댈 필요는 없다는 것이죠... ㅎㅎ

김정균

그걸 잘 알기 때문에 다른 오픈소스에의 참여가 망설여 진다는 것이죠. 참여해서 내가 해야할 일 보다 다른 무언가를 더 노력해야 한다는 것이 과연 가치있는 일을 하는 것인가 나 자신에게 반문을 하는 것입니다. 다만 그 작업이 별로 가치있을 것 같지 않다는 생각이 더 우세하니 문제겠죠. ^^

Posted
Filed under Tech/Tip & Trick
PXE 시스템을 운영할 때 DHCP 의 Mac Address binding 은 매우 중요합니다. 특히 설치 자동화를 위해서는 Mac Aaddress 와 IP address 를 매치해 놓는 것이 중요한데, 이 경우 등록되지 않는 Mac Address 를 거부해야 할 일들이 가끔 존재합니다.

ISC 의 Dhcpd 의 경우에는 이를 기본으로 지원을 하는데, MS 의 Dhcpd 는 이를 지원하지를 않습니다. 우리 회사에서 ISC Dhcpd 와 MS Dhcpd 가 동시에 운영을 하고 있어서 항상 PXE 설치시에는 MS Dhcpd 를 내리고 설치하는 불편함이 있었는데, MS 의 DHCP Team Blog 에서 Mac Address 기반 filtering dll 을 비 공식적으로 제공하고 있습니다.

현재는, mackere2 라는 thrid party dll 을 이용하고 있었는데, 이걸 한번 이용해 봐야 겠군요.

DHCP Team Blog:
http://blogs.technet.com/teamdhcp/archive/2007/10/03/dhcp-server-callout-dll-for-mac-address-based-filtering.aspx
설치 파일 및 문서:
http://blogs.technet.com/teamdhcp/attachment/2098336.ashx
2008/01/09 19:12 2008/01/09 19:12
Posted
Filed under Tech/Tip & Trick
Mindterm 에 대해서 아시는 분들도 꽤 있을 거라 생각됩니다. google 검색에서 검색을 해 봐도 한글 문서가 꽤 나오니까요. 대부분의 문서가 2.1에 대한 것이기는 하지만요.

저도 mindterm을 요긴하게 사용하곤 합니다. Mindterm 을 유용하게 사용할 수 있는 방법으로 다음의 경우가 있습니다.

1. PC 에 ssh client 가 설치되어 있지 않고, 새로 설치할 수 없는 경우나 귀찮을 경우 2. X11 forwarding 을 사용해야 하는데, 내가 사용하는 ssh client 가 X11 forwarding 을 지원하지 않을 경우 3. SSH Tunnel 을 사용하고 싶을 경우


보통은 1번의 이유로 많이 사용을 하게 될텐데.. 기존의 2.1 환경에서는 한글이 제대로 지원이 되지 않던 문제가 있습니다. 일단 출력은 되는데, 겹쳐서 출력되는 문제나, 한글 입력이 되지 않는 문제가 있었습니다. 그래서 아주 비상 사항이 아니면 사용을 하지 않았는데, 올해 초 3.1.2가 나와서 테스트를 해 보려고 하다가 까먹고 지금에야 와서 만지게 되었는데, 한글 입출력이 아주 훌륭하게 되더군요. 이젠 client 로 사용을 해도 무방할 정도로 Xterm mode 와 Ansi mode 를 잘 지원을 합니다.

다음은 Mindterm 3.1.2 를 설치해서 사용하는 방법을 기술합니다.

1. 라이센스 Mindterm 의 라이센스는 개인 사용자에 한하여 무료입니다. 이 무료 버전은 설치된 서버로만 SSH 연결을 할 수 있습니다. 유료 버전은 아마도 다른 서버로 직접 연결이 가능한 것으로 기억이 납니다. 2. 다운로드 http://www.appgate.com/products/80_MindTerm/110_MindTerm_Download/index.php 위 URL 에서 binary 와 source code, 문서를 다운로드 받을 수 있습니다. 빌드할 일은 없으니 바이너리 버전을 다운로드 받습니다. Mindterm 은 Java Applet 으로 작동하기 때문에 Client 에 설치하는 것이 아니기 때문에 웹서비스를 할 수 있는 곳에서 받도록 합니다. 3. 압축을 해제하도록 합니다. Linux 에서는 unzip 명령을 이용하면 됩니다. shell> unzip mindterm_3.1.2-bin.zip inflating: mindterm-3.1.2/LICENSE.txt inflating: mindterm-3.1.2/README.txt inflating: mindterm-3.1.2/THIRD_PARTY_SW.txt inflating: mindterm-3.1.2/Applet.txt inflating: mindterm-3.1.2/Settings.txt inflating: mindterm-3.1.2/RELEASE_NOTES.txt inflating: mindterm-3.1.2/mindterm.jar 4. 압축을 푼 후에 필요한 파일은 mindterm.jar 1개만 있으면 됩니다. 이 파일을 웹상의 경로에 잘 위치 시킨 후에, applet 을 호출할 수 있는 웹 문서를 다음과 같이 생성해 주도록 합니다. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"> <head> <title>Mindterm WEB SSH Gate</title> <style type="text/css"> h1 { font-size: 25px; font-family: tahoma, sans-serif; font-weight: bold; text-align: center; margin-top: 50px; } </style> </head> <body> <h1>Mindterm WEB SSH Gate</h1> <applet archive="mindterm312.jar" code="com.mindbright.application.MindTerm.class" width="0" height="0"> <param name="cabinets" value="mindterm312.cab" /> <param name="protocol" value="ssh2" /> <param name="sepframe" value="true" /> <param name="debug" value="true" /> <param name="bg-color" value="black" /> <param name="fg-color" value="white" /> <param name="cursor-color" value="yellow" /> <param name="encoding" value="euc-kr" / > <param name="font-name" value="Monospaced" / > <param name="exit-on-logout" value="true" / > </applet> </body> </html> 5. 브라우저로 방금 생성한 웹문서로 접근을 해 봅니다. 주의할 것은 웹브라우징을 하는 PC 에 Java JRE 나 JVM 이 설치가 되어 있어야 합니다. JRE 6 에서는 잘 작동하는 것을 확인했습니다.

2007/12/13 18:28 2007/12/13 18:28
Posted
Filed under Tech/Tip & Trick
GeoIP 를 커널에서 사용하기 위하여 커널을 다시 빌드하는 경우가 많은 듯 싶어, 기존의 커널에 geoip module 만 빌드하는 스크립트를 공개합니다. 모듈만 빌드하는 방법에 대해서는

BuildingKernelModules

의 문서를 참고하면 됩니다. 굳이 커널을 모두 빌드할 필요는 없지요. 이 과정도 귀찮거나.. 또는 영어가 어려우신 분들은 첨부된 파일을 받아서 다음의 과정을 거치면 간단하게 해결이 될 수 있을 겁니다.

1. build script download RHEL/CentOS 4/5 용이 구분이 되어 있으니 구분하여 받으시기 바랍니다. 2. 압축 해제 임의의 디렉토리에서 압축을 해제합니다. 압축을 해제하면 geoip 라는 디렉토리가 생성됩니다. shell> tar xvfpz geoip-patch-o-matic-cent5.tar.gz 3. 커널 빌드 shell> cd geoip shell> ./geoip-check


와 같이 하면 빌드가 되고 등록까지 됩니다. 커널 업데이트에 대비하여 geoip-check 를 다음과 같이 이용할 수도 있습니다. rc.local 에 다음과 같이 등록을 해 놓으면 커널이 변경이 되어 geoip 모듈이 없을 경우 빌드를 하고 올리도록 할 수 있습니다.

/YOUR_PATH/geoip-check >& /dev/null [ $? -eq 0 ] && iptables -A INPUT -m geoip --src-cc CN -j REJECT


파일 받기



RHEL 6 또는 CentOS 6의 경우에는 RPM으로 아예 묶어 놓았으니 이를 이용하시면 되겠습니다.

1. http://mirror.oops.org/pub/AnNyung/2/AnNyung.repo 를 /etc/yum.repos.d 에 다운로드
2. yum clean all
3. yum install kmod-geoip
4. yum update iptables
5. yum install GeoIP
6. geoip-csv2bin

이렇게까지 하시면 사용을 하실 수 있습니다. 6번의 경우 매달 한번씩 실행해 주시면 geoip data가 갱신이 됩니다.
2007/11/22 15:56 2007/11/22 15:56

작성자: 주인장 디지문(http://www.digimoon.net/) 일전에 커널과 iptables 소스를 새로 받아다가 완전히 새로 컴파일하여 geoip 모듈을 탑재하는 걸 포스팅한 적이 있는데 이번엔 기존 커널 & iptables rpm 패키지를 그대로 유지한 채 geoip 모듈만 리빌드하는 방법을 포스팅합니다. rpm으로 기본 탑재된 커널도 충분히 재구실을 하는지라... 사실 커널 소스를 받아 컴파일해서 설치하는 건 요즘 들어선 불필요...

김정균

안녕 리눅스 2에서는 kmod-geoip 로 커널 모듈을 지원합니다. yum install kmod-geoip 하시면 되겠습니다.

움트트움트

저도 so파일이 안생기네요...흠...
CentOS 4, CentOS 5 둘다 테스트 해보는데
똑같은 증상입니다.
왜그런걸까요...?
iptables v1.3.5: Couldn't load match `geoip':/lib/iptables/libipt_geoip.so: cannot open shared object file: No such file or directory

김정균

이 에러는 iptables의 geoip extension이 없어서 발생하는 문제 입니다. 이 글을 iptables의 geoip extension을 알아서 준비하셨거나 하실 거라고 가정을 하고, geoip kernel netfilter module을 빌드하기 위한 방법을 적은 것입니다.

즉, iptables 를 geoip extension을 넣어서 새로 빌드 하셔야 한다는 얘기 입니다. geoip extension은 patch-o-matics 에서 찾으실 수 있는데, 요즘 geoip extension이 있는 사이트가 죽은 모양인지 연결이 안되서, 인터넷을 뒤져야 할 수도 있을 것 같습니다. ^^;

즉, iptables에서 geoip를 사용하기 위해서는 ipbltales geoip extension과 kernel netfilter iptables module 이 필요하고, 이 글은 후자(kernel module)을 빌드하기 위한 글 입니다. (즉, iptblaes에서 geoip를 사용하기 위한 전반적인 내용을 담고 있는 것이 아닙니다.)

http://zosel.idtail.com/

안녕하세요. 오랫만에 찾아 뵙습니다. ^^;;
그동안 잘 지내셨죠.
예전에 얼핏 말씀드린 VPN 서비스는 잘 런칭이 되었습니다.
qos부분 역시 브릿지 방식의 cbq로 약간의 python과 radius server db 연동으로
잘 해결 되었어요. ^^ (oops님의 글이 많은 도움이 되었습니다. [_ _] )


오늘은 최근에 또다른 이슈가 생겨서 방문하게 되었습니다.
DDOS 존을 구축하는 임무를 수행하고 있는데요.
syn_proxy서버 구축 + iptables connlimit를 이용한 세션 제어까지는 마무리 하였습니다.(모두 브리지방식 입니다. ^^)

추가로 해외망 차단 부분을 목적지 아이피 별로 제어를 하고 싶은데요.
바로 적용 되지는 않는듯합니다.
일단 램이 사양이 높아 PAE로 DKMS방식으로 yum 업그레이드 한 상태입니다.
이상태에서 스크립트 내용을 분석해서 필요한 부분만 적용을 해도 .so 파일이 생성되지 않습니다.;;

어떤 부분이 문제가 될까요?

drawhan

iptables -L로 리스트를 확인해봐도 안나오던데.... 어떻게 확인해봐야 할까요?

김정균

GeoIP CentOS 5 용을 업데이트 했습니다. CentOS 5.2 에서 모듈 체크 제대로 못하는 문제와 GeoIP kernel module 의 버그를 fix해서 다시 올립니다.

단풍

geoip 제대로 동작을 하나요?

저 같은 경우는 geoip 데이터베이스에 해당 ip 가 있음에도 불구하고
제대로 동작 하지 않더군요.

예를 들어서 중국 IP 대역을 차단 했는데 국내 몇 IP 도 차단되어서
이 기능을 꺼 놓고 사용 하는대요
(geoip 데이터베이스는 업데이트 해줬습니다.)

김정균

GeoIP Lite 의 경우 국가 database 의 정확성은 90% 라고 나옵니다. 실제 상용을 사용해 본적이 없어서 근거는 없고요 ^^;

그래서 저는 libkrisp 를 만들어서 국내 IP는 이걸 이용하고, libkrisp 가 GeoIP 연동을 하도록 하여, 국외의 IP는 GeoIP database를 사용하도록 해서 사용합니다.

GeoIP 의 정확성에 대해서는 저도 장담을 할 수는 없지요. 국내 IP가 geoiplookup 에서 중국 IP로 나온다면.. GeoIP의 문제가 아니라 GeoIP database 의 문제인 것이겠죠. ^^;

Posted
Filed under Tech/Tip & Trick
요 몇년간, 웹 표준이라는 단어에 대하여 관심이 높아지고 있습니다. 저 역시 2년전 부타 웹 표준에 관심을 가지기 시작했고, 새로 제작하는 페이지들은 꼭 validator 를 통과 시키고 있기는 합니다만.. 아무래도 브라우저별 또는 OS마다 렌더링의 차이에 의한 부분에 대하여서는 어떻게 할 방법이 없었죠. 모든 OS 와 모든 브라우저를 모두 확인하지 않는 한은 말이죠.

그러다 보니, 제가 사용하는 OS와 브라우저만을 고려를 하게 되다보니, Any Browser 를 지향하면서도 제한된 Any Browser 이기가 일수였습니다.

이런 현실 속에서 서핑 중에 Screen Shot 이라는 일본의 OS/브라우저별 출력 이미지를 보여주는 사이트를 발견하게 되었습니다. 유료 회원을 위한 제약이 있기는 하지만, 대략적으로 확인을 하는데는 크게 지장이 없군요.

모르시는 분들은 애용해 보시기 바랍니다.
2007/11/19 04:22 2007/11/19 04:22
Posted
Filed under Tech/안녕리눅스
잠시 한눈파는 사이에, 한달전에 proftpd 1.3.1이 릴리즈 되었습니다. 그래서 부랴부랴 Korean User Group 버전을 열심히 릴리즈 했습니다. (http://proftpd.oops.org)

이번 버전에서는 내부 API 가 변경된 부분이 있어, 기존의 패치들을 맞춰주느라 좀 귀찮았습니다. T.T

안녕 리눅스 1.3.0a 패키지에 포함되었던 sendfile API 사용시에 scoreboard 에 파일 전송량과 파일 전송률이 나오지 않던 부분을 수정을 했었는데, 이번 버전에서 이 기능을 좀더 향상을 시켜 보았습니다. 이전 버전에서 sendfile 로 넘기는 count 를 10Mbyte 로 고정을 해서, 회선이 빠르고 파일이 클 경우에는 출력을 잘 했지만, 회선이 느리거나 파일이 작을 경우에는 여전히 제대로 나오지를 않았었는데, 이번 버전에서는 제일 처음 sendfile 로 넘기는 값을 지시자로 만들고, 이 넘긴 값을 측정하여 클라이언트의 회선 속도를 보정하여 sendfile 로 넘기는 값을 유동적이게 변경을 했습니다. 이제 회선 속도나 파일 크기에 별로 구애받지 않고 출력이 잘 되는 듯 싶습니다.

1.3.1kr 의 릴리즈 노트는 다음과 같습니다.

- added 1.3.1 official fix bug2988: mod_wrap2_file ignores "ALL" keyword bug2989: Unable to authenticate users if RadiusUserInfo is not con... bug2990: TLSCryptoDevice does not work bug2992: The %f LogFormat variable expanded improperly to "-" for ... bug2993: Unable to compile 1.3.1 on Debian unstable/amd64 bug2995: The %f LogFormat variable expanded to same file for RNFR ... bug2996: Requirement for same OpenSSL header, library version in m... - Deprecate DisplayFirstChdir. Replace to DisplayChdir on proftpd.conf - add SendfileSize directive see also http://proftpd.oops.org/reference.php?mode=detail&key=SendfileSize
2007/11/14 04:30 2007/11/14 04:30
Posted
Filed under Tech/프로그래밍
이전에 포스팅한 CVS Web Interface 를 드디어 공개합니다. 아마 초기 버전이라 버그가 숭숭 나올것 같기는 한데.. 그래도 :-) 다음은.. OOPS-CVSd 의 README 파일의 일부입니다.

$Id: README,v 1.2 2007/11/07 07:50:04 oops Exp $ OOPS-CVSd Copyright @ 김정균 All right reserved sinse 1997 OOPS CVSd는 CVS 저장소의 웹 인터페이스이며, 웹에서 CVS 저장소의 상황을 손쉽게 확 인 할 수 있습니다. 이 프로그램은 FreeBSD 프로젝트 중의 하나이자 Web CVS 프로그램 중에서 가장 대표적인 cvsweb (http://www.freebsd.org/projects/cvsweb.html)의 기능 을 충실하게 지원하고자 했으며, cvsweb이 지원하지 못하는 아쉬운 기능들을 추가하고 한국어 환경에 최적화를 한 프로그램입니다. 1. 지원 세부 사항 1. CVS server 1.1 / 1.2 2. Repository 2-1. Remote Repository 1. rlist ( 1.2.8 부터 지원됩니다. 안녕 리눅스의 cvs 1.11 에서도 가능) 2. rlog 2-2. Local Repository 1. co, rlog, rcsdiff, cvs 명령이 필요 (rcs package 와 cvs package 가 설 치되어 있어야 합니다. Remote Repository를 사용시 rlog보다 rlist가 성능이 더 좋으나 cvs 저장소에서 의 지원 여부 문제 때문에 rlist를 지원하지 않는 저장소에는 rlog를 사용하십시 오. 3. 속도 개선 대부분의 CVS 웹인터페이스들이 정렬을 위하여 데이터를 배열로 생성화는 과정에 서 속도가 저하되는 문제가 있습니다. 이 증상들은 revision 수가 많아질수록 더 욱 심해지게 되는데 CVSd에서는 이런증상을 최소화 하기 위하여 line by line 파 싱을 하여 속도의 개선을 상당히 높였습니다. 4. 언어셋 문제 CVSd는 저장소에 저장되어 있는 소스의 언어셋과 CVSd의 언어셋을 적절하게 설정 을 할 수 있도록 설계가 되어 있습니다. 가령 예를 들어 CVSd의 언어셋은 EUC-KR 인데 (UTF8이 아닌 이유는 제가 아직 EUC-KR을 사용하기 때문입니다. ^^) 저장소 소스의 문서가 UTF-8일 경우, 이를 깨지지 않도록 내부적으로 변환을 할 수가 있 습니다. 이를 위해서는 php-iconv extension이 지원이 되어야 합니다. 또한 UTF8 사용시 commit을 할 때, cvs log 가 UTF8과 EUC-KR이 혼재가 되는 경우가 많습니 다. 이는 의도하지 않은 환경상의 차이일 수 있는데, 이 경우, 한글에 대해서는 CVSd가 직접 체크를 해서 보정을 할 수 있습니다. (아마 EUC-JP까지는 같이 사용 을 할 수 있을거라 예상합니다만.. 확인은 못해 보았습니다.) 5. 웹브라우저 Free CVSd는 XHTML 1.0과 CSS 2.0의 W3C표준을 지원하며 자바 스크립트 사용을 자제하 여 어떤 브라우저라도 기본 기능을 이용할 수 있도록 되어 있습니다. (몇몇 에러 처리시에 자바 스크립트 alert이 이용되기는 합니다만, 기본 기능 사용에는 문제 가 없습니다.) 또한 skin을 지원하며 저장소 별로 스킨을 다르게 설정할 수 있습 니다. 6. 다중 언어 지원 GNU Gettext를 이용하여 다중 언어를 지원합니다. php gettext extension이 없을 경우에는 pure php code를 이용하여 PO파일을 파싱하여 지원을 하기는 하지만 성 능상 gettext extension을 사용하는 것이 좋습니다. 2. 사용 환경 1. 필요 패키지 웹서버 php >= 5.0 php iconv extension php gettext extension rcs package (co, rlog, rcsdiff command) cvs package
2007/11/07 20:20 2007/11/07 20:20
Posted
Filed under Tech/프로그래밍
요즘은 대세가 Subversion 인가요? 하지만 구관이 명관이라는 말처럼 제게는 Subversion 이 그리 와닿지가 않습니다. 일단 설치하고 셋팅하는 것이 너무 빡세고 새로운 것을 받아들여야 하는 것이 예전처럼 그리 와닿지가 않는군요. :-)

뭐 하여튼.. 그래서 전 CVS 를 사용하고 있다고 말을 하고 있습니다. CVS를 사용하다 보면 CVS Web UI 자주 사용하게 됩니다. 로그나 diff 같은 것을 보기가 상당히 편하게 되어 있으니까요. (Subversion 에서도 사용할 수 있는 Web UI가 있죠. 어쩌면 이런 부분에서는 Subversion 이 더 잘 되어 있습니다.) 그런데, 이 CVS Web UI의 속도가 느리고, local repository 밖에 다룰수 없다는 것이 상당히 불만이었습니다. 그래서 그냥 내가 만들어 버려.. 하고 생각한지 2년만에 틈틈히 손을 대기 시작했고, 드디어 어느정도의 성과물이 나왔습니다.

일단 새로 개발한 것의 특징은 원격 repository 를 지원하기 위하여, local rcs tool 을 이용한 것이 아니라 CVS protocol 을 hacking 하여 구현했다는 점입니다. 즉, anonymous 나 cvs account 권한이 있으면 서로 다른 repository 를 이 Web UI 에서 함께 관리할 수 있다는 점이 가장 큰 차이입니다. 이 기능은 CVS 1.2 의 rls 를 이용하거나 rls를 지원하지 않는 경우에는 따로 cvsdserver 라는 directory listing 을 해 주는 inet daemon 을 이용하여 처리를 하도록 되어 있습니다.

두번째로는, 속도의 향상에 있습니다. 기존의 Web UI 들이 모두 파싱을 하여 배열로 만들어서 이 배열을 정렬하든지 등등으로 관리를 하는데, 제가 만든 것은 네트워크 전송이 들어오는 족족 처리를 하도록 하여 속도의 향상을 시켰습니다. 다만, 이 부분 때문에 일부 자각하기는 힘든 기능들을 포기할 수 밖에 없었습니다. 일단 기본적인 기능은 FreeBSD 에서 배포하는 CVS Web을 기준으로 하였습니다.

현재까지..

사용을 하는데는 무리가 없을 정도.. 즉 세상에 꺼낼 정도는 만들어 졌습니다만.. 몇가지 처리사항을 더 하여 내 놓으려고 합니다. 일단, local repository 에 대하여 CVS protocol 을 탈 필요가 없기 때문에, 이를 처리하는 루틴이 들어가야 할 것입니다. 조만간.. 만날 수 있지 않을까 싶습니다. 다만.. 가장 큰 작업은 이를 어떻게 문서화를 하느냐가 아닐까 싶군요 ^^;
2007/10/30 22:39 2007/10/30 22:39
Posted
Filed under Tech/Tip & Trick
Redhat 8 이후부터 route 명령을 실행해 보면 다음과 같이 이상한 routing path 를 발견할 수 있습니다.

[root@db ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 211.115.85.0 * 255.255.255.224 U 0 0 0 eth0 172.16.0.0 * 255.255.0.0 U 0 0 0 eth1 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 default gw.kldp.org 0.0.0.0 UG 0 0 0 eth0


"어라.. 169.254.0.0는 내가 설정한 적이 없는데 어디서 튀어 나온거야?" 와 같은 의문을 가진 적이 없으신지요?

169.254.0.0/16은 Zero Configuration Networking 을 위하여 예약된 subnet 입니다. Zero Configuration Networking 이라는 것은.. DHCP 환경이 없는 네트워크에서 Peer to Peer 연결이나 Wireless 환경에서 관리자의 수동적인 설정이 없이 네트워킹을 할 수 있는 환경을 만들기 위한 규약입니다. (영어로 되어 있어서 대충 봐서 정확하지는 않습니다. 궁금하신 분들은 http://www.zeroconf.org/ 를 참고 하시기 바랍니다. 영어입니다!)

일반적인 IDC 환경에서는 별 의미가 없을 수 있지요. 그렇다면 이런글을 적는 이유는 무엇일까요? 바로 이 설정이 필요도 없고 보기도 싫으신 분들이 있을 것입니다. 부팅시나 네트워킹을 재시작 하여 이 정보가 올라오지 않게 하려면 /etc/sysconfig/network에 다음의 라인을 넣어주면 네트워킹이 재시작 된 이후부터는 나오지 않게 됩니다.

[root@db ~]# cat /etc/sysconfig/network NETWORKING=YES HOSTNAME=db.kldp.org NOZEROCONF=yes
2007/10/22 23:47 2007/10/22 23:47