뭘 이런걸..

Posted
Filed under Tech/프로그래밍
cvs 를 이용해서 프로젝트를 할 때 가장 귀찮은 것이 퍼미션/소유권 관리입니다. 이를 위해서 여러가지 꽁수를 쓰는데,

1. 유저들을 공통 그룹으로 묶고 umask 와 setgid 를 이용해서 퍼미션과 그룹권한을 유지시키는 방법
2. CVSROOT/passwd 를 이용하여 CVS passwd 의 User map 을 이용하는 방법
3. CVSROOT tree 의 모든 파일들에 주기적으로 w 권한을 주는 방법

등등 여러가지 형태로 운영이 되는데, 이를 근본적으로 해결할 길이 없을까 찾다가 그냥, 패치를 해 보았습니다. 원래는 2번의 방법을 애용했었는데, 이번에 개발서버들을 AD + winbind 를 이용하여 Active directory
를 이용하여 통합 인증을 구현하다 보니, 2번의 방법이 상당히 번거로와 졌는데, 결국 이를 해결하기 위해, cvs 1.12 의 pam pactch (1.11 을 위한 패치는 Fedora 5 의 cvs 에 들어 있습니다.) 와 아래의 usermap patch 를 만들게 되었네요.

요즘은 SVN 을 많이 사용하는 것 같은데, CVS data 가 너무 많아서 SVN 으로 가기는 힘들거나 귀찮고, user mapping 이 필요한 경우에는 사용하시면 유용할 것 같습니다. 설정은.. CVSROOT/usermap 파일을 생성하시고, loginuser:mapping_user 와 같이 한라인에 하나씩 지정 하시면 됩니다. mapping_user 는 system 에 존재하는 계정이어야 합니다.

diff -urNp src.org/server.c src/server.c --- src.org/server.c 2006-08-21 18:47:02.000000000 +0900 +++ src/server.c 2006-08-21 20:17:57.000000000 +0900 @@ -5785,7 +5785,53 @@ handle_return: It might or might not be the same as host_user. */ CVS_Username = xmalloc (strlen (username) + 1); strcpy (CVS_Username, username); - } + + if ( ! strcmp (username, host_user) ) { + char filename[256] = { 0, }; + FILE *op; + int userlen = strlen (username); + char *linebuf = NULL; + size_t linebuf_len; + sprintf (filename, "%s/%s/usermap", repository, CVSROOTADM); + + syslog (LOG_DAEMON | LOG_NOTICE, "oops: %s", filename); + + op = CVS_FOPEN (filename, "r"); + if ( op != NULL ) { + while ( getline (&linebuf, &linebuf_len, op) >= 0 ) { + if ( (strncmp (linebuf, username, userlen) == 0) + && (linebuf[userlen] == ':') ) { + char *mapuser = NULL; + char *ws = NULL; + char mapuserlen = 0; + + mapuser = strchr (linebuf, ':'); + if ( (ws = strchr (mapuser, ' ')) ) + mapuser[ws - mapuser] = 0; + else if ( (ws = strchr (mapuser, '\t')) ) + mapuser[ws - mapuser] = 0; + else if ( (ws = strchr (mapuser, '\r')) ) + mapuser[ws - mapuser] = 0; + else if ( (ws = strchr (mapuser, '\n')) ) + mapuser[ws - mapuser] = 0; + + mapuserlen = strlen (mapuser) - 1; + if ( mapuserlen > 0 ) { + free (host_user); + host_user = xstrdup (mapuser + 1); + } + break; + } + } + } + if (linebuf) free (linebuf); + + if ( ferror (op) ) + error (0, errno, "cannot read %s", filename); + if ( fclose (op) < 0 ) + error (0, errno, "cannot close %s", filename); + } + } return host_user; }
2006/08/21 21:24 2006/08/21 21:24

얼마전 올렸던 usermap patch 의 버그 수정입니다. 이전 패치에서 usermap 파일이 없을 경우 에러가 발생하는 문제가 있었습니다. 파일이 없으면 CVS_FOPEN 이 에러가 발생할 것이라는 엄청난 착각을 한 결과이네요. 이런저런 경우의 수를 다해서 테스트를 했다고 생각했는데.. diff -urNp cvs-1.11.17.org/src/server.c cvs-1.11.17/src/server.c --- cvs-1.11.17.org/src/s..

Posted
Filed under 주절주절
무지개가 떴어요
군이랑 연날리고 오는길에 아주 커다란 무지개를 발견하고 사진을 찍었습니다.

아무생각 없이 오고 있었는데, 군이가 "무지개다!" 하고 소리쳐서 보니 정말 이렇게 큰 무지개는 처음 본것 같았네요. 카메라를 가지고 오지 않아서 그냥 카메라폰으로 찍어서 화질이 별로인게 좀 아쉽지만.. :-)

더군다나, 비온 후의 무지개는 많이 봤어도 비오기 전의 무지개는 처음 보는 것 같네요.
2006/08/19 20:35 2006/08/19 20:35
Posted
Filed under Tech/Mozilla
* Beta 2 Code Freeze on August 16th, 11:59pm PDT * Beta 2 QA Cycle from August 17th to August 22nd * Beta 2 Release midday on August 23rd


현재까지는 잘 따라가고 있습니다만, 회사일의 습격으로 어떻게 될지 모르겠군요. 그래도 Firefox 2 작업에서는 김인환님과 박찬균님의 QA 로 1.5 보다 품질이 상당히 좋아진 느낌입니다.

전 뭐하냐고요? 보통은 처음 작업 시작할 때, 이전 언어팩을 새로운 구조로 옮기는 scripting 작업이나, tinderbox 에 난 불을 끄는 정도만 작업을 하고 있지요 ^^; 1.5 때는 제가 거의 다 했었는데, 그러다 보니 품질이 좋지 않아서 ㅋㅋ
2006/08/10 16:19 2006/08/10 16:19
김정균

lockdown 얼마 남겨 놓지 않고 또 불을 지르다니.. --; 예정대로 라면 beta2 lockdown 이 대략 6시간 정도 남았군요. 또 뭔짓을 하려나..

Posted
Filed under Tech/프로그래밍
프로그래밍을 하다 보면 coredump file 을 남겨서 segfault 에 대한 debugging 을 원할 때가 있습니다. 하지만 Redhat Linux 는 전통적으로 기본으로 coredump file 을 생성하지 못하도록 되어 있습니다. 더군다나, init script 에서도 이렇게 남기지 않게 되어 있 곤란을 겪을 때가 있습니다.

그래서 RH 에서 coredump 를 남기기 위한 작업을 기술해 봅니다.

1. /etc/profile

대략 26라인 즈음에 보면

ulimit -S -c 0 > /dev/null 2>&1


이라는 설정으로 core 를 남기지 않도록 되어 있습니다. 암울 합니다. --;

ulimit -c unlimited >/dev/null 2>&1


와 같이 수정해 줍니다. 시스템 파일을 건드리고 싶지 않다면, ~/.bash_profile 이나 ~/.bashrc 에 설정 합니다.

2. /etc/sysctl.conf

커널 파라미터 역시 기본으로 core 를 남기지 않도록 되어 있습니다. /etc/sysctl.conf 에 아래 설정을 추가합니다.

kernel.suid_dumpable = 1 kernel.core_uses_pid = 1


설정을 한 후에, sysctl.conf 의 변경 사항을 커널에 반영합니다.

[root@www SPECS]# sysctl -p


여기까지는 시스템에서 기본적으로 coredump 를 남기도록 하는 겁니다.

RH 의 경우에는 한술 더 떠서, init script 로 실행하는 모든 데몬에 대해서 core 를 남기지 않도록 initscripts package 에서 관리하고 있습니다. 그러므로, /etc/init.d/httpd 를 실행했을 때 core
를 남기도록 하려면..

1. /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'


를 추가해 줍니다.

2. 위의 설정은 init script 로 실행된 모든 스크립트에 영향을 줍니다. 각 init script 에서 /etc/init.d/functions 를 호출하기 전에

DAEMON_COREFILE_LIMIT='unlimited'


를 넣어 주시면 반영이 됩니다.

참조: http://kbase.redhat.com/faq/FAQ_80_7935.shtm
2006/08/10 16:08 2006/08/10 16:08