한동안 Subversion 을 돌아보지 않았더니 (사실 게을러서 예전에 설치한 버젼을 그냥 쓰는 주의라서..) 많은 변화가 있더군요. 먼저 서브버젼이 아파치쪽으로 이동한 듯 보이더군요.

바뀐사이트 : http://subversion.apache.org/

아마도 1.7.x 대부터 변경된 듯 합니다. 따라서 예전에 제가 작성한 패치는 전혀 동작하지를 않게 바꼈더군요. 그래도 혹시나 예전 버젼 (1.6.x) 을 사용하신다면 예전 포스트 를 보시고 따라하시면 되실것입니다.

설치환경

OSX  Lion 이 설치되어 있고 Mac Port 가 설치되어 있다고 가정합니다. 따라서 Mac Port 가 설치되어 있다고 하면 Command Line Tool 이 설치 되어 있다고 봐야 합니다. 또한 Command Line Tool 이 설치되어 있다는 것은 XCode 가 설치되어 있다는 것입니다.


Mac Port 가 설치되기 위한 준비를 하는 방법은 제 예전 포스트 에서 다루고 있습니다. 참조하세요.

1. Subversion 1.7.4 을 컴파일하기 위한 모든 환경을 만들어 줍니다.

$ sudo port install subversion


어느정도 긴 시간이 흐른 뒤에 설치가 되어 있을 것입니다.
 
2. Subversion 1.7.4 버젼의 소스를 받아옵니다.

http://subversion.apache.org/download/
위 사이트에서 1.7.4 버젼의 subversion-1.7.4.tar.gz 를 받아옵니다. 적당한 곳에 옮겨줍니다. (저는 보통 ~/work 에 복사해 둡니다)

3. 압축을 풀어줍니다.

$ cd ~/work
$ tar xvzf subversion-1.7.4.tar.gz


4. 여기서 두가지 방향이 있습니다.
  - 포스트 하단의 path.c 를 받아서 정해진 위치 (제 경우를 예를 들어서 설명하자면)
   
  $ cp path.c ~/work/subversion-1.7.4/subversion/libsvn_subr


  - 포스트 하단의 utf8_mac_1.7.4.diff 를 다운 받아서
   
    $ cp utf8_mac.1.7.4.diff ~/work
    $ cd ~/work
    $ patch -p0 < utf8_mac_1.7.4.diff

5. 파일 패치가 이루어 졌으므로 이제 소스를 컴파일 해줍니다.

$ cd ~/work/subversion-1.7.4
$ ./configure --with-ssl
$ make
$ sudo make install


6. 설치가 끝났습니다. 이제 PATH 만 손봐주면 될 듯합니다.

 
$ emacs ~/.profile (또는 mate , vi , vim 등 자신이 좋아하는 에디터)


에 아래처럼 "/usr/local/bin" 을 추가해줍니다.
 
export PATH=/usr/local/bin:/opt/local/bin:/opt/local/sbin:$PATH



이 문제는 제가 2년전부터 수정하고 있는데 계속해서 커밋을 신청하는 데 (제가 귀찮아 하는 관계로..) 채택이 되질 않는 군요. - 혹시 제 영어가 황이라서..? -




최근에 다시 피씨를 세팅할 일이 생겨서 (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 를 소유하게 되앴군요.




애플 터미널에서 한글 파일을 저장해서 svn에 올리면 제대로 올라가지만 그
파일을 윈도우에서 내려받아서 사용하면 글이 깨지는 현상이 발생합니다.

즉 제가 Mac OS 상에서 '해킹토시.txt' 라고 파일을 만들어서 svn 에
추가하면 잘 올라가지만 레파지토리상에서는 더미와 비슷하게 존재합니다.
따라서 windows 에서 그 파일을 받아서 보면 'ㅎㅐㅋㅣㅇㅌㅅㅣ.txt' 라는
이름으로 한글 자소가 분리된 형태로 파일이 받아집니다. 파일 지울때
rename 을 해줘야 하며, svn 레파지토리 관련 명령들도 잘 먹지 않습니다.

해결할려면 사용자 계정에 홈 디렉토리에 .inputrc 파일을 만들고

set convert-meta off
set meta-flag on
set output-meta on

이렇게 적어주면 파일 깨지는 현상이 사라지고, Mac(UTF-8) 용 터미널과
Windows(Euc-kr) 용 터미널에서의 파일명이 일치하게 됩니다.

기존의 svn 과 연동해서 작업하는데는 전혀 문제가 없습니다. 즉 기존의 소스를 가져오는 방식은
svn up svn://wiki.nully.co.kr/source 이런식으로 가져오고 있습니다. 이 방식은 ccnet 과 ccservice 방식에서 전부 동일하게 돌아갑니다..

문제는 svn up https://wiki.nully.co.kr/source 방식으로 가져오는 것이 문제인데 (즉 SSL을 통해서 소스를 가져오는 경우)  이는 인증서를 가져오는 문제가 있어서 에러가 발생하는데 , 프롬프트가 나오기 때문에 기존의 프로젝트를 돌리는 사용자와 서비스가 돌아가는 계정이 불일치 하기 때문에 발생하는 문제입니다.

그래서 기존의 Cruisecontrol.NET 서비스를 사용자를 프로젝트를 구동하는 유저로 로긴하게 바꾸어 주면 모든 것이 해결됩니다.

그림은 추후에 추가할 예정임

+ Recent posts