'설치'에 해당되는 글 1건

  1. 2008.11.26 Mercurial on Cafe24

Mercurial on Cafe24

IT 2008. 11. 26. 02:53
사실 Mercurial은 분산 작업 환경을 염두에 두고 만들어진 버전 관리 시스템이기 때문에 중앙 서버 없이도 작업에 전혀 문제가 없지만, 편의성을 생각한다면 역시 항상 구동 가능한 형태의 서버가 하나 있는 편이 낫다. 특히나 한국같이 네트웍이 공유기라든가 각종 설정때문에 복잡하게 얽혀 있어 80포트를 이용하는 http 서버마저도 정상적으로 동작하지 않는 경우 - 특정 ISP에서는 저런 포트를 부러 차단하는 경우도 있고 - 를 가끔 보는 상황에서는 ChangeSet 동기화를 위해 서버를 열었더니 접속이 안된대더라, 는 문제가 생기지 말라는 법이 없기 때문에 더욱 그렇다. 다행히도 Mercurial의 서버는 SubVersion이나 CVS같은 중앙 집중식이 아니기 때문에 딱히 서버 셋팅에 공들일 필요 없이 그냥 상시 구동되는 PC하나에 Mercurial 서버를 열어두는 것 뿐이며, Python 기반의 코드 덕분에 어지간한 웹 호스팅 위에서도 문제 없이 구동이 된다. 개인 홈페이지를 올려두고 있는 호스팅 업체인 Cafe24에 계정을 하나 더 만들어서 서버를 설정해 보았는데, 문제 없이 깔끔하게 구동되어서 만족하고 있다. 다만 몇 가지 설정해 두어야 할 사항들이 있는데, 비단 Cafe24 뿐 아니라 일반적인 웹 호스팅에서 Mercurial을 서버로 구동하고자 한다면 대부분 해당될 사항들이기는 하다.

* Prerequisites
- 당연히, 호스팅 계정. 
- 32Bit Linux : 64bit Linux에 설치되는 Python 모듈 일부에서 문제가 있다는 이야기가 있으니 안전하게.
- Python : 2.3 이상이면 되는 것 같지만 되도록이면 2.5 이상으로 업그레이드를 요청하는 것이 좋다.
- SSH : Mercurial은 http로도 동기화 할 수 있지만 일단은 SSH를 사용.
- 이건 말할 필요도 없지만 ssh나 telnet으로 접속 가능해야 한다.

* 설치하기
Mercurial을 설치할 수 있는 방법은 크게 두 가지인데, 한 가지는 전역으로 설치하는 방법이고 두 번째는 각 유저별로 설치하는 방법이다. 호스팅으로 제공받은 계정의 경우 전역 설치는 불가능하기 때문에 포기하고, 할당받은 유저에 대해 설치하는 것으로 한다. 먼저 최신 버전을 


을 통해 다운로드받고 적절한 위치에 압축을 풀어 둔다. 윈도우로 다운받아 ftp로 재전송하는 경우 정상적으로 압축을 해제할 수 없는 경우가 가끔 있으니 원격 Shell에서 wget으로 바로 다운로드받는 편이 낫다. 다음 방법을 통해 압축을 풀고 설치를 마치도록 하자.

[ver]은 다운로드받은 최신 버전에 따라 달라진다
$ tar xvzf mercurial-[ver].tar.gz
$ cd mercurial-[ver]
$ make install-home

설치가 완료되면 bin / lib 디렉토리가 생긴 것을 볼 수 있다. 64bit 사용자의 경우는 lib대신 lib64 디렉토리가 생긴다.

다음은 Repositor들이 저장될 위치를 정하는 것인데, HOME 바로 아래에 적절하게 디렉토리 하나를 생성해 두면 된다. 현재 서버는 HOME/hgrepo로 지정해 두었다.

* 경로 설정하기
설치를 마치고 나서도 바로 Mercurial을 실행할 수가 없다. 경로가 정상적으로 지정되지 않았기 때문인데, 기본적으로는 .bashrc를 통해 사용자별로 기동할 때 경로를 지정하도록 해 두면 되지만 cafe24에서는 이상하게 이 방법이 동작하지 않아서 조금 무식하게 선택한 것이 .bash_profile을 직접 수정하는 것. .bash_profile을 연 후에 아래와 같이 경로를 추가해 주면 된다.

# .bash_profile

# Get the aliases and functions
if [ -f /etc/userbashrc ]; then
        . /etc/userbashrc
fi
# User specific environment and startup programs


#LANG=ko_KR.eucKR
#export LANG

JAVA_HOME=/usr/local/jdk
export JAVA_HOME

PATH=/home/bin:/bin:$JAVA_HOME/bin[....]:${HOME}/bin

PYTHONPATH=${HOME}/lib64/python

export PYTHONPATH
export PATH
unset USERNAME

굵게 표시한 부분만 경로 설정을 위해 추가한 부분이다. 

이걸로 끝이 아니라, ssh로 서버를 동기화할 때 모듈을 찾지 못하는 문제또한 해결해야 한다. 원래는 ssh 구동시 환경설정만 맞추어두면 되는데 어느 쪽에 문제가 있는지 도통 동작하질 않아서 Mercurial 구동부 중 일부를 직접 수정하였다. bin/hg를 연 후 다음과 같이 경로를 맞추어 준다.

#!/home/bin/python
#
# mercurial - scalable distributed SCM
#
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.

import sys
sys.path.append('/home/hosting_users/hgsvr/lib64/python')
sys.path.append('/home/hosting_users/hgsvr/bin')
 
# enable importing on demand to reduce startup time
from mercurial import demandimport; demandimport.enable()

import mercurial.util
import mercurial.dispatch

for fp in (sys.stdin, sys.stdout, sys.stderr):
    mercurial.util.set_binary(fp)

mercurial.dispatch.run()

단순히 시스템 경로에 Mercurial의 설치 경로를 지정해 주기만 하면 정상적으로 동작함을 알 수 있다. 

* 정상적인 동작 확인하기
총 세 가지 방법으로 동작을 확인한다.

1. Remote shell에서 [hg debuginstall] 실행 : 설치시에 문제가 없는지 확인하고 표시해 준다. 정상적으로 설치되었다면 다음과 같은 메시지를 볼 수 있다.

Checking encoding (ISO-8859-1)...
Checking extensions...
Checking templates...
Checking patch...
Checking commit editor...
Checking username...
No problems detected

처음 설치하고 바로 실행하면 username이 없다는 에러 메시지를 받을 텐데, .hgrc 파일이 생성되어 있지 않기 때문이다. 서버에 .hgrc를 전역으로 생성해버리면 동기화하는 모든 프로젝트의 유저명이 하나로 통일되기 때문에 신경쓰지 말고, 각 Repository가 각각의 .hgrc를 통해 설정하도록 놓아두면 된다.

2. plink로 [hg debuginstall] 실행 : 대부분의 클라이언트가 윈도우 환경에서 tortoisehg같은 GUI frontend를 쓰는데, 이 때 ssh 접속을 위해 이용하는 plink를 통해 hg가 정상적으로 구동되는지 확인한다. Plink를 다운로드받고

Plink.exe -ssh -2 -l [ID] -pw [PASS] [SERVERNAME] "hg debuginstall"

와 같이 실행한 뒤 로그메시지를 살펴보면 정상적으로 설정된 경우 위와 동일한 메시지를 출력하는 것을 볼 수 있다.

3. 실제 동기화 실행

실제로 동기화가 이루어지는지 마지막으로 확인해 본다. 로컬에서 사용하는 Repository가 있을 경우 바로 Clone을 실행해서 대상을 서버로 지정하면 되고, 그렇지 않은 경우 서버에서 [hg init]으로 Repository를 만들거나 혹은 로컬에서 만들고 서버를 대상으로 Clone해도 좋다. 어쨌든 Clone이 끝난 다음 로컬에서 작업 내용을 한 번 변경하고 Commit한 후에, 서버 쪽으로 Push하고 이력을 확인하거나 로컬 쪽 Repository를 지우고 서버에서 끌어와서 확인해도 좋다.

4. 번외 : 웹 페이지 설정

Mercurial은 웹에서 변경사항을 볼 수 있도록 하는 방법 몇 가지를 제공하는 데, 그 중 여러 Repository를 관리할 수 있는 hgwebdir.cgi를 설정해 두면 간편하게 브라우저로 접근이 가능하다. 먼저 hgwebdir.cgi를 www디렉토리 아래로 옮기고, 

chmod a+x hgwebdir.cgi

로 권한을 변경한다. 그 후 hgwebdir.cgi 파일을 열고 Mercurial이 설치된 부분을 찾는 경로를 현재 위치에 맞게 수정한다. 그리고 나서 같은 위치에 hgweb.config 파일을 생성한 후

[collections]
/home/username/repo = /home/username/repo

를 자신의 경로에 맞추어 기입해 주면 된다. 나머지 설정은 기호에 맞추어 문서를 참조하여 변경하면 된다.

설치와 관련한 다른 문제들은 
와 나머지 위키 페이지의 기술을 참조하면 된다.


: