최근에 다시 피씨를 세팅할 일이 생겨서 (Windows 7) EmacsW32 최신 버젼과 서브버젼 (Subversion) 최신 버젼을 설치하게 되었습니다.

어찌된 일인지 갑자기 잘 되던 SVN 과 Emacs 의 연동이 안되더군요. 그래서 여러가지 방법을 시도하던 와중에 문제점을 발견했습니다.

디렉토리 구조중 최상위 (Root) 를 제외하고는 .svn 폴더들이 전부 사라진 것이였습니다.


이것도 모르고 Emacs 를 버젼별로 깔아대는 삽질을 하고 있었습니다. 결국 비효율적이라고 판단한 svn 개발팀에서 하위 디렉토리의 .svn 폴더들을 삭제하는 결정을 한 것이겠지요. 따라서 엄한 emacs 사용자들만 야단이 났습니다. 지금 릴리즈 되는 버젼들에는 저 변동사항이 적용이 안 되어 있기 때문이지요.

해결 방법은

1. http://bzr.savannah.gnu.org/lh/emacs/trunk/files/head:/lisp/vc/ 사이트에 가셔서 vc-svn.el 을 다운 받고

2. emacs 가 설치되어 있는 곳의 lisp 파일 모아둔 곳으로 이동하셔서 (제 경우에는 C:\Program Files\Emacs\emacs\lisp 에 있습니다) vc-svn.el 과 vc-svn.elc 를 삭제하시고

3. 1에서 다운 받은 파일을 대신 복사해 주는 것입니다. (vc-svn.el 을 컴파일 하고 안하고는 자유 이십니다. 전 귀찮아서 안했음)

완벽하게 해결이 된 것을 확인하 실 수 있습니다.

간단한 파일하고 설정만으로 매킨토시 컴퓨터에 SVN 서버를 설정할 수 있습니다. 

1. 저장소 만들기 
    
     mkdir /Users/crazia/svn 
     cd /Users/crazia/svn
     svnadmin create super_ultra

     chown -R www:www /Users/crazia/svn/*


svn 레파지토리가 될 디렉토리를 생성하고, svnadmin 을 이용해서 프로젝트를 생성합니다. 지금 보여지는 예제로는 super_ultra 가 되겠군요. 그리고 chown 을 이용해서 www:www 로 바꿔줍니다. 


2. 설정파일 만들기 
   
sudo emacs /etc/apache2/other/svn.conf 


 -- svn.conf -- 
   
 
    LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so

     <Location /svn>
       DAV svn
       SVNParentPath /Users/crazia/svn

       AuthType Basic
       AuthName "Subversion repository"
       AuthUserFile /etc/apache2/svn-auth-file
       Require valid-user

     </Location>

자신이 즐겨 쓰는 에디터 (vi, nano, emacs) 로 svn.conf 를 정해진 위치에다가 생성합니다. 그리고 그 안에 들어가는 내용을 아래와 같이 정리합니다. 


3. svn 계정만들기 

  sudo htpasswd -cm /etc/apache2/svn-auth-file crazia

svn 계정에 쓰일 (여기서는 crazia) 패스워드를 입력합니다. 


4. 아파치 재시작 

sudo apachectl restart 


 만약 에러 발생시 

sudo emacs /usr/sbin/apachectl

apachectl 파일에서 

     ULIMIT_MAX_FILES="ulimit -S -n `ulimit -H -n`"

 부분을  

     ULIMIT_MAX_FILES=""

 로 수정 하고 다시 아파치를 재시작합니다. 

  sudo apachectl restart 

 아파치 에서 에러가 발생하는 것을 알아보려면 
     
     tail -f /var/log/apache2/error_log

로 에러가 발생한 것을 알아본다. 







Ubuntu version - 10.04 LTS 루시드 링스(Lucid Lynx)

svn (뿐만 아니라 다른 소스 관리 툴)은 개발자 끼리 협업을 하기 위해서 뿐만 아니라 혼자서 연습 삼아서 개발한다고 해도 꼭 익혀야만 하는 개발자들만의 프로토콜 이라고 볼 수 있습니다.

이글은 우분투에 svn 서버 버젼을 세팅하는 데 관련된 팁입니다. 집에서 혼자 연습하는 경우라 하더라도 소스 레파지토리(Source Repository)를 쓰는 버릇을 들이는 것이 여러모로 좋습니다. 어쩌다가 외부에 나가서 협력하게 되는 경우가 생길 때 태연하게 '그냥 혼자 개발해서 합칠때 zip 으로 압축해서 한명이 합치면 되는 거지 뭘 귀찮게 그런걸 쓰나요? ' 라는 충격적인 질문을 받을 때가 많습니다. 중소기업 대기업을 가리지 않고 말이죠. 

1. 아파치, 서브버젼, 아파치에 연동되는 svn 모듈 설치

sudo apt-get install apache2 libapache2-svn subversion

2. 저장소 생성

sudo mkdir /svn

3. 아파치 관련 설정 파일 번경

sudo emacs /etc/apache2/mods-available/dav_svn.conf

개개인의 취향에 따라서 에디터 는 바뀔 수 있습니다. (emacs -> vim 이나 gedit)

다음에 나오는 것처럼 코멘트 기호를 삭제합니다. 

#<Location /svn>
..
#</Location>

를 

<Location /svn>
..
</Location>


# DAV svn

를 

DAV svn

로 

# SVNPath /var/lib/svn


SVNPath /svn


  
#AuthType Basic
#AuthName "Subversion Repository"
#AuthUserFile /etc/apache2/dav_svn.passwd


  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd


  #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
  #</LimitExcept> 


  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept> 


4. 아파치 재시작 (restart)

sudo /etc/init.d/apache2 restart

만약 문제가 생긴다면 3번을 자세히 살펴봐서 틀린 것이 있나 확인합니다. 

5. 프로젝트에 접속할 계정 생성 

3번에서 AuthUserFile 로 지정된 파일에 생성해 줘야 하겠지요? 

sudo htpasswd -c /etc/apache2/dav_svn.passwd crazia
 - 비밀번호 입력 처리

crazia 는 제 아이디 입니다. 본인의 아이디로 바꾸서 만들면 됩니다. 입력을 하면 비밀번호 세팅하는 과정이 나옵니다. 만약 처음으로 저 파일에 계정을 추가하는 것이라면 '-c' 옵션을 쓰는 것이고 다음부터 사람을 추가하는 것이라면 '-m' 으로 옵션을 바꿔서 입력하시면 됩니다. 계정 생성 잘못 했는데 수정하고 싶으면 간단하게 dav_svn.passwd 파일을 삭제하는 것을 추천합니다. 

6. 프로젝트 디렉토리 와 소유권 변경

sudo svnadmin create /svn
sudo chown -R www-data:www-data /svn

svn 은 아파치를 거쳐서 작업하기 때문에 svn 프로젝트가 저장되는 공간을 www-data 계정의 소유로 바꾸는 작업입니다. 

7. 테스트 

예전에 포스트에서 만들었던 echo-server (클릭) 을 올려보기로 하지요. echo-server 가 저장된 곳이 '~/work/echo-server' 라고 가정하면 

cd ~/work
svn import ./echo-server http://localhost/svn/echo-server -m "create echo-server repository" 

그리고 브라우져에서 

http://localhost/svn/echo-server 

로 가서 제대로 올라갔는지 확인하세요. 





 
snow leopard 의 세상이 왔습니다. 

EDITED: 온지는 한참 됐습니다.... 예전 글 갱신한 것이라서요

진짜 왔는가는 별도로 하고 배달된 스노우 레오파드를 깔아줬습니다. 저는 맥빠가 아니니 표범 그려진 껍데기 보면서 하앍거리는 일은 전혀 없었구요

기존의 깔려 있는 osx leopard 위에 걍 덮어서 씌웠습니다. 처음에는 별 감흥없이 돌아가더군요 메뉴바 같은게 바뀐거 같긴 한데 잘 모르겠고 암튼 그냥 새로운 '맥'이겠거니 하고 사용하고 있었는데 결국 문제가 발생했습니다.

svn 이 깔리면서 기존에 제가 패치해둔게 동작을 안하더군요. 스노우 레오파드가 되면서도 그 문제 많은 utf-8 문제를 해결을 안했더군요 (아마 영원히 안할듯 싶네요..) 그래서 깔려있던 subversion source 를 컴파일 해서 다시 사용하려고 했는데 기존에 깔려 있던 라이브러리들이 32bit 라 링크에서 문제가 생기더군요.

이거저거 하다가 귀찮아서 가비얍게 기존 버젼을 포맷해주고 다시 '스노우 레오파드'를 깔아줬습니다. 그리고 다시 시작하는 마음으로 경건하게 svn 을 돌려봤는데 기존에 제가 포스팅 했던 문제가 고쳐지지 않았더군요. 그래서 다시 subversion 을 다운 받았습니다.

1. subversion 소스만 받아서 컴파일을 해보니 컴파일이 되지가 않더군요.

2. subversion - depends 소스 까지 받아서 합쳐서 컴파일 하니 'svn st' 쓸 때마다 segmentation fault 가
발생하더군요.

3. mac port 를 이용해서 subversion 을 설치하면 새로 컴파일 된 버젼이 깔리기는 하는데 snow leopard 안에
포함된 버젼과 똑 같은 svn 이 설치되더군요.

자 여기까지는 사족이고 이제부터가 진짜입니다.

== snow leopard 에 한글 파일 문제 없는 subversion 설치하기 == 

EDITED: subversion 1.6.15 로 업그레이드에 맞춰서 다시 적용합니다

1. mac port 로 dependency 문제를 해결한다.  snow leopard 안에 포함된 subversion 과 같은 svn 이
설치됩니다. (1.6.15 버젼이 설치됨)

sudo port install subversion

2. 이곳 에서 소스를  받습니다. subversion-deps-1.6.15.tar.gz 와 subversion-1.6.15.tar.gz 를 각각 다운 받고 다른 폴더 에 저장합니다.

subversion-1.6.15 가 각각 생기는데 subversion-deps-1.6.15.tar.gz 를 압축 풀었을 때 생기는 subversion-1.6.15 밑의 neon 디렉토리를 subversion-1.6.15.tar.gz 를 압축 풀었을 때 생기는 디렉토리로 이동시킨다.

neon 을 포함시켜주는 이유는 http 나 https 방식으로 접근이 가능한 클라이언트를 만들기 위해서 입니다.

3. 예전 방식 을 이용해서 소스를 패치해줍니다. (아래쪽에 1.6.15 버젼에 맞춘 패치 파일 있음)

patch -p0 < utf8_mac.patch
cd subversion-1.6.15
./configure --with-ssl
make
sudo make install

make 에서 테스트 진행중에 error 가 발생해서 build 가 멈추지만 무시하시고 바로 다음 명령을 진행하시면
됩니다. (버클리 디비 없다고 어쩌구 에러 생기면 무시해 주세요)


매번 패치하는 것도 지겨운데 애플이나 subverion 이나 한국이 관심 대상 밖인 것은 알지만 이 문제는 CJK
들의 공통적인 문제일텐데 왜 아무런 대책이 없나 궁금합니다.





연일 맥을 가지고 놀다 보니 발견하게 되는 개발 환경과 작업 환경 세팅시의 문제점들이 발견 되는 군요. 저는 Emacs 로 텍스트 파일들을 작성해서 svn repository 에 보관을 합니다. 그렇게 집 , 회사 , 노트북 세가지를 동기화 시켜왔는데 이제  osx 를 사용하다 보니 첨 쓰게 되는 환경에 당황하게 되는군요. 너무 쉽게 됐던 것들이 안되니 참으로 난감하기도 하고 -ㅅ-; 암튼 구글링 저헐라게 하다가 우연히 알게 되는 사실로 해결이 되는 군요.

.emacs 에서 한글을 쓰기 위해서 세팅하는 과정입니다.

(set-language-environment "Korean")

(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)


이렇게만 설정해 주면 기본적으로 osx 에서 emacs 사용시 별 문제 없이 utf-8 환경으로 작동하게 되는 군요.
여기에다가 svn 을 살짝 연결 시켜서 사용하게 되면 linux 나 window 와는 다르게 에러가 발생합니다. 이미 고쳐버려서 어떤 메시지 였는지 확실하지는 않지만

svn: Commit failed (details follow):
svn: Can't convert string from native encoding to 'UTF-8':


이러한 메시지 였습니다.
정말로 고쳐볼려고 별의 별 방법을 다 써봤습니다. 구글링도 얼마나 한지 모릅니다. 그러다가 우연히 발견한 팁을 적용시켰습니다. emacs + svn + utf-8 으로 검사하니까 절대로 안나오더군요..

.profile 에 다음과 같이 추가해 줍니다.

export LC_CTYPE=en_US.UTF-8
export LANG=en_US.UTF-8


왜 인지 모르지만 너무 잘 돌아갑니다. -ㅅ-;;
osx 를 사용할 때, svn 을 사용해서 소스나 레파지토리에서 파일을 check out 을 하게 되면 영문 파일들은 잘 내려받고 서버와 동기화도 잘 되는 반면 한글 파일명을 가진 파일들은 오동작을 일으킵니다. 쉽고도 간단하게 확인이 가능한데

svn st


라고 입력을 하면 분명히 방금 checkout 을 한 경우라도 같은 파일이 레파지토리에 추가가 안되어 있다고 나옵니다. 이 문제는 osx 에서 쓰이는 utf-8 방식이 svn 과 달라서 발생하는 문제라고 합니다. 계속해서 reporting 되고 있는 문제긴 하지만 subversion 측에서 적용을 안하고 있는 것 같습니다. 최초 발생과 패치를 일본 프로그래머가 내놓은 시점이 1.4.4 버젼이였는데 현 버젼인 1.6.5 까지 아무런 적용이 안되고 있는 것을 보면 쉽게 추측이 가능합니다.

그 발생한 문제에 대한 이슈는 원문보기 에서 잘 나타나 있습니다. 그 달려있는 내용중에 보면 힌트가 나와 있습니다. 그 내용을 조금 정리하자면
curl -O
 http://www.opensource.apple.com/darwinsource/tarballs/other/subversion-16.tar.gz
curl -O http://www.opensource.apple.com/darwinsource/tarballs/other/neon-8.tar.gz
curl -O
http://subversion.tigris.org/nonav/issues/showattachment.cgi/780/utf8precompose_macosx.path

tar xzf subversion-16.tar.gz
tar xzf neon-8.tar.gz
patch -p0 < utf8precompose_macosx.path
mv neon-8/neon subversion-16/subversion
cd subversion-16/subversion
./configure --with-ssl
make
sudo make install

# patched version of svn will be installed on /usr/local/bin,
# make sure you have /usr/local/bin in your PATH environment variable.

이렇게 하라고 되어 있는데 , 실제로 잘 구동하지가 않습니다. 그래서 curl 명령 뒤에 붙어 있는
링크들을 클릭해서 직접 파일을 받아서 패치를 적용해 보았는데 제대로 동작을 하지를 않더군요. 게다가
버젼이 1.4.4 라 너무 낮습니다. 그래서 이 내용을 참조해서 1.6.5 버젼용 패치를 만들어 보았습니다.
이 패치는 오로지 osx Leopard 를 기준으로 합니다.

subversion 1.6.5 를 여기 를 클릭해서 내려받습니다. 적절한 곳에다 옮겨주시고

tar xzf subversion-1.6.5.tar.gz

하시고 그리고 패치파일을 받습니다. 그리고 패치를 적용해 줍니다.

patch -p0 < utf8_mac.patch
cd subversion-1.6.5/subversion
./configure
make
sudo make install


이제 문제가 해결된 svn client 를 소유하게 되앴군요.




+ Recent posts