뭘 이런걸..

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
Posted
Filed under Tech/프로그래밍
얼마전 어느분이 제게 CVS 에 rls 가 지원되도록 요청을 해 주셨습니다. CVS 1.2 로 업데이트를 하면 간단하게 해결이 되지만, CVS 1.2 가 아직 stable 이 아닌 관계로 별로 업데이트를 하고 싶지 않더군요. 그래서 1.12.13 의 rls 기능을 CVS 1.11 에 백포팅을 해 보았습니다.

strftime 관련하여서 m4 파일의 수정 문제가 귀찮아서 그냥 오리지날 strftime 을 사용하도록 변경한 것 외에는 거의 동일할 것 같습니다.

패치 파일을 첨부하니 관심 있으신 분들은 사용해 보시기 바랍니다. 이 패치파일은 RHEL 5 의 cvs 1.11.22-5 에 패치를 한 것이니 다른 버전에서는 참고하여 수정을 하시면 될 듯 싶습니다.

2007/10/21 05:09 2007/10/21 05:09
Posted
Filed under Tech/프로그래밍
얼마전 제 홈페이지의 QnA 게시판에 lighttpd 에서 mod_url 을 사용할 수 없냐는 문의가 들어와서 작성해 보았습니다. 물론 IE7 대응되게 작성이 되어졌으며, redirect 를 사용하지 않고 새로 만들어진 apache mod_url 처럼 내부에서 직접 physical.path 를 수정하도록 변경을 했습니다.

Apache mod_url 의 공식 개발자가 된 기념으로 lighttpd 용 mod_url 역시 apache mod_url site 인 http://modurl.kldp.net 에서 관리하도록 하겠습니다. 이 사이트에서 받으실 수 있으며, 문서를 참고 하실 수 있습니다. 물론 문의/버그등도 이 사이트를 이용해 주시면 되겠습니다.
2007/10/19 03:17 2007/10/19 03:17
Posted
Filed under Tech/프로그래밍
얼마전 W3C 의 HTML validator 가 0.8.1 로 업데이트 되었습니다. 기존의 0.7 대와는 많은 것이 달라졌습니다. 그래서 KLDP 의 open service 중의 하나인 http://validator.kldp.org 도 0.8.1 로 업데이트 하기 위해 준비중이었는데..

결정적으로 0.7 대까지 되던 localization 이 0.8 에서는 안되는 문제가 있더군요. 빡세게 번역을 했는데, 한글 출력이 되지 않는 안습의 상황이 발생하고 있습니다.

고쳐볼까 하고 코드를 살짝 둘러봤는데, 쉬운 문제가 아닌 것 같은 느낌이 들어 일단 포기하고 W3C 버그리스트를 살펴보니 0.9 milestone 에서 처리하려는 듯한 글만 찾을 수 있었습니다.

이걸 업데이트 해야 하는지 말아야 하는지 갈등이군요. 현재 영문으로 출력되는 것은 http://opens.kldp.org 에서 확인을 할 수는 있습니다. (아직 전체적인 정상 작동 여부는 확인을 안했습니다만..)
2007/10/01 15:37 2007/10/01 15:37
김정균

한글 출력 문제를 드디어 해결을 했습니다. :-) css-validator 와 비슷한 문제이더군요. cgi-bin/check 를 다음과 같이 수정함으로 해결이 가능 합니다.

@@ -972,7 +972,7 @@ $template->param(file_source => &source(
# $T->param(file_outline => &outline($File)) if $T->param('opt_show_outline');

# transcode output from perl's internal to utf-8 and output
-print Encode::encode('UTF-8', $template->output);
+print Encode::encode('ISO-8859-1', $template->output);

#
# Get rid of $File object and exit.

Posted
Filed under Tech/프로그래밍
검색을 하다보니 rrdtool 1.3 beta 가 나왔더군요. rrdtool 의 frontend 이 rrdexec 는 여전히 rrdtool 1.2 에서 사용을 할 수가 없고, rrdtool php extension 역시 아무도 1.2 용으로 개발을 하지 않더군요. 그래서 간만에 rrdtool 1.2 를 지원하도록 두 프로그램을 업데이트 해 보았습니다.

rrdtool php extension 의 경우에는 ob stream 을 지원하기 위하여, embeded library 를 만들어야 하는데, 기존에 1.0 에서 어느정도 수정을 했는지를 까먹은지라 1.2 용 embeded library 를 제작하는데 고생좀 했습니다. T.T

뭐, 덕분에 이제 php 용 rrdtool extension 이 드디어 하나 출현하게 되었습니다. (아니면 제가 찾지를 못해서 삽질을 한 것일 수도.. --;)

더불어, rrdexec 도 rrdtool 1.2 하에서 빌드가 될 수 있도록 수정을 했습니다. 하지만, 아직 rrdtool 1.2 의 개선된 기능을 사용할 정도로 업데이트가 되지는 못했습니다. 그냥 rrdtool 1.0 에서 제공하는 기능 정도만 현재 사용이 가능하며, rrdtool 1.2 로 빌드만 가능할 뿐입니다. (multibyte font 라든지, 개선된 graph 옵션을 아직 지원하지 못합니다.)

일단, 초석으로 rrdtool 1.2 에서 빌드가 가능하게만 해 놓은 상태이며, rrdexec 는 rrdtool 1.2 의 개선 사항을 반영하여 정식으로 릴리즈 할 계획 입니다.

현재 mod_rrd 와 rrdexec 의 개선 사항은 CVS 에만 반영이 되어 있습니다.

http://cvs.oops.org/index.cgi/rrdexec/
http://cvs.oops.org/index.cgi/mod_rrd/?cvsroot=OOPS-PHP
2007/08/06 21:54 2007/08/06 21:54
Posted
Filed under Tech/프로그래밍
며칠전에 IE7 과 mod_url 문제 수정 이라는 글에서 IE7 에서 한글 URI 를 사용할 경우 mod_url 과의 충돌로 무한 루프가 발생하는 문제를 수정하여 포스팅을 했었습니다.

그 과정에서, 301 로 재접속을 시킬때, IE7 의 재변환을 막기 위하여 url encoding 을 하여 문제를 해결했는데, 그 해결을 위해 사용했던 코드가 php raw_url_encode 함수를 수정하여 처리를 했습니다. 그런데, PHP license 와 Apache license 가 충돌이 나는 이유로 어떻게 할까 고심을 하다가 완전히 새로 작성을 하게 되었습니다.

apache 는 URL 에 대하여 다음의 구조체를 가집니다.


struct request_rec {
..
char *filename;
char *path_info;
char *uri;
struct stat finfo;
char *unparsed_uri;
uri_components parsed_uri;
..
}



위에 나열된 변수들이 URL 과 관련되었으며, filename 은 system 상의 경로를 가지고 있습니다. 그래서 이것을 이용하여

  1. uri 를 iconv 로 convert 를 함
  2. uri convert 가 실패하면, 그냥 file not found 로 전송
  3. filename 을 convert 함.
  4. filename convert 를 실패하면 301 로 변환된 URI 를 이용한 주소로 재접속 하도록 함.
  5. convert 된 filename 이 시스템상이 있는지 확인
  6. 있으면 정상 출력 없으면 file not found

와 같이 처리되도록 변경이 되었습니다. 딱 1가지 경우만 빼고는 재접속을 하지 않게 되는 변경이 된것입니다. 다만, 4번 과정에서 재접속을 해야 하는데, 이 경우는 다음과 같습니다.

서버에서 다음과 같이 Alias 가 결려 있을 경우입니다.


Alias /xxx/한글/ /home/httpd/html/한글/

이 설정과 같이, Alias 이름에 한글이 들어가 있으면 apache 구조체의 filename 변수에 실제 경로 부분에는 EUC-KR 이 그리고 URI 에 해당 되는 부분에는 UTF-8 이 들어가기 때문에 iconv 에서 실패를 하게 됩니다. Alias 가 해석되는 과정에서 이게 섞이게 되는데, 이 경우는 재전송을 통하여 EUC-KR 로 들어오게 하는 방법외에는 없더군요 --;

뭐 하여튼, 이런 구조로 완전히 재설계가 되었습니다. :-)

문제는, 이 수정 사항을 KLDP.NET 의 공식 mod_url 에 반영을 해야 하는데, 패치 주고받고 하면서 하기가 상당히 귀찮네요. 코드도 완전히 바뀌었고, 그냥 mod_url2 로 fork 를 할까도 살짝 고민중입니다. ^^;

어쨌든.. apache1/2 용 모듈 2개 모두 현재 재작성이 되었고, apaceh2 용 모듈은 실제 테스트는 아직 해 보지 못했습니다. 다만 apache 2.2 의 소스를 참고하여 API 는 맞추어 놓았습니다.

재작성된 mod_url 은 http://cvs.oops.org/index.cgi/mod_url/?cvsroot=OOPS-Apache 에서 apache 1 용은 1.17, apache 2 용은 1.10 을 받으시면 됩니다.
2007/05/31 06:36 2007/05/31 06:36
강분도

Mod_url.c 감사 드립니다.

김정균

kldp.net 버전과 oops.org 버전이 merge 가 되었습니다. 제가 kldp.net 의 mod_url 의 개발자로 등록이 되어 정식 배포처는 http://modurl.kldp.net 을 이용하세요.

LeCieL

수정하지 않은 modurl의 문제입니다.
worker 에 그냥 기존에 있던거 올리고나서 돌린게 답니다;;
apache php 가 아닙니다. 미디어 전송 전용서버이므로
apache만 달랑 올라가있습니다.
돌고있는 모듈은 몇안되고 redurl이 여기에 있다가 부하 폭주시 워커의 줄사망이 있었습니다.

전송트래픽은 초당 400메가정도 됩니다. 커넥션은 폴링되고 있지만 약 4만개정도 사용하고 있구요

워커모듈에 별도로 돌고있는것은 메모리 캐시 모듈입니다.

지금버전을 테스트하기에는 실제 서버라 힘들듯합니다.

LeCieL

네 제가 써논 문서에도있다시피;; utf8 인코딩에 대한 단점이 있지요 ^^

참고로 redurl 을 위 형식대로 수정하였다가 스레드가 줄사망한것으로 기억합니다.. 커넥션이 엄청나게 많은 서버라 그래서 그런지;;
초반엔 멀쩡하다가 6시간정도 지나면 스레드가 덜렁 하나 남아있는 사태가 몇번 있었죠..
그래서 다른 소스로 변환했습니다.

김정균

일단은 어떻게 수정을 하셨는지 코드를 공개를 하지 않으셨기 때문에 mod_url 이 문제인지 아니면 수정한 부분이 문제인지는 저로서는 판단을 할 수 없고, mod_url (IE7 문제 수정전의 코드) 와 현재 제가 새로 수정한 부분을 worker 모델에서 2일동안

echo "한글.txt" > ./uri.txt
while [ 1 ]; do
ab -c 100 1000 http://localhost/test/$(iconv EUC-KR UTF-8 ./uri.txt)
done
rm -f ./uri.txt

와 같이 돌리고 있는데 별 문제 없는 것 같습니다. 한번 테스트 해 줘 보시죠. (음 Apache 2 thread safety issues 문서를 보니 race condition 하게 발생하기 때문에 thread safe 하다고 보장은 못하겠군요. 그래서 이 멘트 남깁니다. ^^)

그리고 apache + php 환경은 worker model 로는 별로 적합하지 않다고 생각이 됩니다만.. 일단 php extension 들이 thread safe 를 보장하지 못하고, apache 와 php 를 build 하기 위한 library 들이 thread safe 를 보장하지 못하는데 mod_url 이 아니라 다른 무엇이 문제가 될 수도 있을 테지요.

그리고, 수정한 일본의 모듈은 아마 mod_encoding 이 아닐까 예상합니다 :-) 이 모듈 역시 예전에 회자가 되어 어느정도 코드는 본 것입니다. 실제로 mod_url 역시 hooking first 로 처리를 해 보려고 했으나 완벽한 지원이 어려워 그냥 hooking last 로 처리한 것이고요. 그리고 수정된 mod_url 은 기존의 mod_url 코드와는 다릅니다. 현재 박 원규님과 메일을 주고 받고 있는데, 만약 받아들여지지 않는다면 혼동을 피하기 위해서 mod_url2 정도로 fork 할 듯 싶습니다.

LeCieL

수고가 많으시네요 ;;

그런데 redurl (modurl) 말고 일본에서 사용하던 뭐더라;; 저는 그걸 기반으로 작업했답니다.
일단 패치할 시간이 거의 없었고;; ie7 나온지 하루이틀안에 해결봐야해서 ㅎㅎ;;

그런데 성능적인 문제 (1대의 미디어 서버)를 감안한 경우 first hook 에 charset detection 이 들어가는것이
압도적인 차이를 준다고 생각합니다.

(물론 last 로 후킹하여 전처리 다 하고 매 컨버저닝마다 파일이 있는지 체크하는것도 좋습니다
그러나 워커모듈에서는 요러다 에러하나 나면 줄사탕인지라 ;;)

제가 패치한건 일반서버는 아예 이 모듈을 내려버렸고 (급한관계로),
컨텐츠 전송서버만 first hook 으로 강제 변환하도록 설정하였습니다. 아마도 그 일본에서 만든 modurl같은녀석을
여기저기 뜯어고쳤던듯합니다;;

김정균

redurl(mod_url) 은 요청하신 페이지가 존재하면 작동하지 않습니다. 즉, 해당 페이지가 존재하지 않을 경우에만 작동합니다. 이는 httpd.conf 에서 error log level 을 debug 로 맞추어 놓고선 error log 를 보시면 확인하실 수 있습니다.

hooking 을 전처리로 할 때의 문제는, 무조건 바꾸기 때문에 file system 에 정말 utf8 로 인코딩된 파일이름이 존재하고 있을 경우 찾을 수가 없습니다. 또한, Alias 와 같은 URL 을 처리할 수 없습니다. 저도 전처리로 하려고 했으나 이 부분 때문에 결국에는 LAST 로 처리한 것입니다.

그리고, worker model 은 솔직히 뭐라고 말은 못하겠습니다. 일단 mod_url 자체가 thread safe 한지 보장을 하지 못하기 때문에 worker model 에서 사용을 하라고 권장 자체를 못하기 때문입니다. :-)

김정균

apache 2 용은 1.10 이 아니라 1.12 입니다. 현재 2.0.52 와 2.2.3 에서 정상 작동 하는 것을 확인했습니다.

Posted
Filed under Tech/프로그래밍
IE7 에서 mod_url 이 설정되어 있는 서버로 한글 주소를 전송할 경우 encoding 이 맞으면 (즉, mod_url 이 작동할 일이 없으면..) 문제가 없지만, 맞지 않을 경우에는 무한 루프에 빠지게 되는 문제가 있습니다. 즉 예를 들어서, 다음의 조건에 해당될 경우 입니다.

  1. IE7 이 URL 의 utf8로 전송한다. (기본값임)
  2. 서버측의 mod_url 이 다음과 같이 설정이 되어 있다.
    CheckURL on ServerEncoding EUC-KR ClientEncoding UTF-8


이 조건에서, IE7 이 http://domain.com/한글.html 을 전송을 하면 실제로는

http://domain.com/%ED%95%9C%EA%B8%80.html


과 같이 "한글" 이 utf8 로 인코딩 되어 전송이 됩니다. (위에서는 편의상 urlencoding 을 했습니다. euc-kr 의 경우 인코딩을 하면 4byte 이지만, utf8 의 경우 6byte 가 되는 것으로 구분을 하기 위함입니다.)

그리고, 서버에서는 mod_url 이

iconv ("UTF-8", "EUC-KR", "%ED%95%9C%EA%B8%80");


이 성공을 하기 때문에

HTTP/1.1 301 Moved Permanently Location: http://domain.com/한글.html


을 브라우저에게 전송하게 됩니다. IE6 의 경우 이렇게 전달된 주소를 그대로 이용하기 때문에 문제가 없었는데, IE7 부터는 이 주소의 "한글" 을 다시 UTF8 로 만들어 재전송하기 때문에 무한루프에 빠지게 되는 겁니다. 그래서 이를 해결하기 위해서 return 하는 Location 의 주소를 RFC1738에 의거하여 URL encoding 하여 브라우저로 전송해 주는 방법을 사용할 수 있습니다.

HTTP/1.1 301 Moved Permanently Location: http://domain.com/%C7%D1%B1%DB.html


이를 해결하기 위해서는 다음 URL 을 참조 하시기 바랍니다.

KLDP.net mod_url project
OOPS.org mod_url CVS tree
2007/05/28 01:42 2007/05/28 01:42

며칠전에 IE7 과 mod_url 문제 수정 이라는 글에서 IE7 에서 한글 URI 를 사용할 경우 mod_url 과의 충돌로 무한 루프가 발생하는 문제를 수정하여 포스팅을 했었습니다. 그 과정에서, 301 로 재접속을 시킬때, IE7 의 재변환을 막기 위하여 url encoding 을 하여 문제를 해결했는데, 그 해결을 위해 사용했던 코드가 php raw_url_encode 함수를 수정하여 처리를 했습니다. 그런데, PHP license 와 Apa..

Posted
Filed under Tech/안녕리눅스
script 작업을 하다 보면 ssh client 가 host key 를 묻거나 변경된 host key 때문에 script 가 수행 중단되고 먹통이 되는 짜증(?) 나는 경우를 만난적이 많으실 겁니다.

저 역시 이런 경우를 많이 겪었으며, 이 때문에 rsh 을 사용하기도 하고 그랬습니다만.. 이런 불편함을 겪은 사람이 나 뿐은 아니겠지 생각하고 구글신께 열심히 갈구를 해 봤습니다만, 검색실력의 미천함 때문인지 아니면, 정말 이런 패치를 만든 사람이 없는 것인지 찾을 수가 없더군요.

찾아지면 제 작업이 헛 수고가 될지 모르니.. 제발 한 사람이 없기를 바라는 수 밖에 없을 듯 싶습니다. 뭐 각설하고,

shell> ssh -K oops@oops.org


와 같이 -K 옵션을 주면 아예 호스트 키 체크를 skip 해 버리는 패치를 AnNyung LInux 에 반영하여 openssh 를 업데이트 했습니다.

다른 배포본에서는 다음의 패치를 이용하실 수 있습니다. AnNyung LInux 의 openssh 4.6p1-2 에 적용된 패치를 첨부합니다. pure openssh 4.6p1 에서는 패치 파일로 패치가 가능 합니다.


2007/05/22 03:07 2007/05/22 03:07
uriel

host가 변경되면 어쩔 수 없지만 ssh keychain으로 해결이 불가능한가요?

김정균

keychain 은 인증시에 필요한 key 를 관리하는 것 아닌가요? 이 패치의 요점은 host key check 를 의미합니다.

즉, host key 가 등록되지 않은 서버에 접속 할때

[root@work ~]# ssh mirror.oops.org
The authenticity of host 'mirror.oops.org (210.124.122.30)' can't be established.
RSA key fingerprint is 77:d3:94:a9:bf:2e:ab:03:a6:ba:40:2f:8d:d8:99:33.
Are you sure you want to continue connecting (yes/no)?

과 같이 confirm 을 해야 하는 상황을 말하는 겁니다.

Posted
Filed under Tech/안녕리눅스
아하~ 무안하게도 1.3 R2 가 또 릴리즈 되고 말았습니다. 이제는 낯짝이 두꺼워져서 민망하지도 않습니다. :-)

1.3 R2 는 전체적으로 버전이 좀 낮은 패키지들의 판올림이 있었으며, kernel 업데이트가 있습니다. 별로 쓸 내용도 없네요 :-)

그냥 앗싸! 빨리 2.0 을 진행하자..

자세한 사항은

http://annyung.oops.org/?m=update&p=1.3&t=1179341954&n=68
2007/05/17 05:30 2007/05/17 05:30
Posted
Filed under Tech/안녕리눅스
Linux 2.4 부터 sysctl 에서 관리를 할 수 있었던 tcp_timewait kernel parameter 가 제거가 되었습니다. 즉, TIME_WAIT 이 kernel source 내의 tcp.h 에서

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT * state, about 60 seconds */


와 같이 static 하게 지정이 되도록 변경이 되었습니다. TIME_WAIT 관련하여 검색을 해 보면.. 거의 대부분 관련이 없는 tcp_fin_timeout 값을 줄이라는 식의 글들이 많고, 가끔.. TCP_TIMEWAIT_LEN 의 값을 수정하라는 문서들이 있더군요. (물론 한글 문서로는 이런 글은 못찾았습니다. ^^)

하지만, TCP_TIMEWAIT_LEN 의 값이 다른 값을 생성하는데 꽤 많이 쓰이는 관계로 이 값을 수정하는 것은 조금 애매해서 TIME_WAIT 에만 적용될 수 있도록 패치를 해 보았습니다. 또한, TIME_WAIT 을 static 하게 수정해서 빌드를 하면 그때 그때 커널이 달라져야 할 수 있어서 아예 sysctl 에서 관리할 수 있도록 수정했습니다. 다음 패치 파일을 받아서 적용하여 빌드 하시면 sysctl -a 에서 tcp_timewait 항목을 찾으실 수 있습니다.

tcp_timewait 을 0 으로 지정을 하면 기본값인 TCP_TIMEWAIT_LEN (60초)를 사용하게 되게 되어 있으므로, 최소값은 1초가 됩니다.


oops-2.4.34-sysctl-timewait.patch.gz

kernel 2.4.34 patch (AnNyung)





2.6.21.1 의 Vanilla kernel patch 는 실제로 빌드를 해 보지 않았습니다. 그리고 tcp_minisock.c 가 많이 변경이 되어 제대로 빌드가 될지 그리고 제대로 작동이 되는지 테스트를 해 보지 않은 것임을 알려 드립니다. 이 패치를 사용함에 있어 문제 발생시에 저는 책임을 지지 않습니다!
2007/05/16 18:46 2007/05/16 18:46