S/W 개발 기반 시스템 구성 – 3. Mercurial 설치
이 글은 S/W 개발에 가장 기본이 되는 이슈 추적(Issue Tracker), 버전 관리(Version Control), 빌드(Build), 지속적인 통합(CI) 시스템을 구성하는 방법에 대한 일련의 글 중 세 번째이다. 이번에는 버전 관리 시스템으로 사용할 Mercurial을 설치하고 웹 환경에서 사용할 수 있도록 구성한다.
1. 미리 준비해야 하는 것들
- 인증은 OpenLDAP을 사용하며 설치 과정은 첫 번째 글을 참조한다.
- Apache 웹 서버를 통해 웹 기반으로 사용한다. 설치 과정은 두 번째 글을 참조한다.
- Mercurial을 웹 서버에서 구동하기 위해 파이썬(Python) 2.6.6 윈도용 패키지를 여기에서 받는다. 현재 Mercurial 파이썬 패키지가 2.6용만 있으므로 2.7.1은 받지 않는다.
- Mercurial을 여기에서 파이썬(Python) x86 패키지로 받는다.
- 파이썬 프로그램을 Apache 웹 서버에서 구동할 때 성능을 높이기 위한 모듈인 mod_wsgi를 여기에서 파이썬 2.6용으로 받는다.
- Mercurial 저장소를 웹으로 공유할 때 필요한 설정 정보인 hgweb.cgi를 여기에서 받는다.
2. 설치
먼저 파이썬 2.6.6을 설치한다. 설치 과정은 특별한 게 없으므로 기본 설정으로 설치하면 된다. 환경 변수 Path에 경로 정보가 자동으로 설정되지 않으면 다음 경로를 시스템 환경 변수에 추가한다.
1 |
C:\Python26;C:\Python26\Scripts |
파이썬 다음으로 Mercurial 파이썬 패키지를 설치한다. 이 역시 기본 설정으로 설치하면 된다. 파이썬 경로 정보를 설정해 뒀으면 명령 행에서 hg로 실행되는 것을 확인할 수 있다.
이제 웹 서버에서 mod_wsgi
를 사용하도록 설정한다. 받아 둔 mod_wsgi-win32-ap22py26-3.3.so
파일을 Apache 설치 디렉터리 아래 modules
에 복사하고 다음 내용을 confhttpd.conf
파일 모듈 설정 부분에 추가한다.
1 |
LoadModule wsgi_module modules/mod_wsgi-win32-ap22py26-3.3.so |
3. Mercurial 설정
Mercurial 기본 정보를 설정하도록 명령 행에서 다음 내용을 입력해 .hgrc
파일을 만든다.
1 2 3 4 |
cd %userprofile% copy con .hgrc [ctrl+z] [enter] |
방금 만든 .hgrc
파일에 username 정보를 다음 형식으로 적는다.
1 2 |
[ui] username = Hg Admin <hg.admin@plab.net> |
명령 행에서 다음처럼 입력하고 결과가 No problems detected라고 나오면 정상이다.
1 |
hg debuginstall |
저장소를 웹으로 접근하는데 필요한 cgi 스크립트와 설정 정보를 저장할 디렉터리를 만든다. 여기서는 D:\hgweb
이라고 만들었다. 이 디렉터리에 hgweb.cgi
파일을 두고 다음처럼 바꾼다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!C:/Python26/python.exe # # An example hgweb CGI script, edit as necessary # See also http://mercurial.selenic.com/wiki/PublishingRepositories # Path to repo or hgweb config to serve (see 'hg help hgweb') config = "D:/hgweb/hgweb.config" # Uncomment and adjust if Mercurial is not installed system-wide: #import sys; sys.path.insert(0, "/path/to/python/lib") # Uncomment to send python tracebacks to the browser if an error occurs: import cgitb; cgitb.enable() from mercurial import demandimport; demandimport.enable() from mercurial.hgweb import hgweb, wsgicgi application = hgweb(config) wsgicgi.launch(application) |
위 내용 중 config에 지정한 것처럼 D:\hgweb
에 hgweb.config
파일을 만들고 다음처럼 설정한다. 각 항목에 대한 자세한 내용은 여기를 참조한다. 참고로 encoding은 웹브라우저에서 사용할 인코딩이다. UTF-8로 사용하면 좋겠지만 diff에서 보여주는 소스 코드 내용에 한글이 포함되어 있으면 깨지는 단점이 있다. 소스 코드 파일 인코딩이 UTF-8이면 이 설정 역시 UTF-8로 하면 된다.
1 2 3 4 5 6 7 8 9 10 11 |
[web] logourl = http://plab.net/hg/ baseurl = http://plab.net/hg/ encoding = EUC-KR allow_push = * push_ssl = false style = default allow_archive = bz2 gz zip [paths] / = D:/Repos/hg/* |
위 내용에 따라 저장소는 D:\Repos\hg
에 두고 웹으로 접근할 때는 주소에 /hg
를 붙이면 된다.
이제 시험용으로 D:\Repos\hg\sandbox
저장소를 만든다. 이 저장소에만 적용할 설정은 D:\Repos\hg\sandbox\.hg\hgrc
파일에 하면 된다.
4. Apache 웹 서버 설정
다음 내용을 httpd-vhosts.conf 파일에 추가한다.
1 2 3 4 5 6 7 8 |
ScriptAlias /hg "D:/hgweb/hgweb.cgi" <Directory "D:/hgweb"> Order allow,deny Allow from all AllowOverride All Options ExecCGI AddHandler cgi-script .cgi </Directory> |
Apache 웹 서버를 중지했다 다시 실행한 후 http://plab.net/hg
로 접속한다. 아래처럼 저장소 화면이 나오면 정상이다.
현재는 아무런 인증을 하지 않으므로 누구나 접속해 내용을 볼 수 있고 커밋할 수도 있다. 이제 OpenLDAP을 사용해 인증하도록 바꿀 차례다.
httpd.conf에서 다음 내용에 대한 주석을 해제한다. 만약 없으면 추가한다.
1 2 |
LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so |
그리고 httpd-vhosts.conf 파일에 인증 설정을 추가한다. 위에서 추가한 내용을 포함해 전체 내용은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<VirtualHost *:80> ScriptAlias /hg "D:/hgweb/hgweb.cgi" <Directory "D:/hgweb"> Order allow,deny Allow from all AllowOverride All Options ExecCGI AddHandler cgi-script .cgi </Directory> <Location "/hg"> AuthName "PLAB Hg Repositories" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://localhost/ou=People,dc=plab,dc=net?uid?sub?(objectClass=*)" Require valid-user </Location> </VirtualHost> |
이제 http://plab.net/hg
에 접속하면 계정과 암호를 요청하는 창이 뜨는데 여기에는 OpenLDAP 계정(UserName)과 암호를 사용하면 된다.
로그인 했을 때 위처럼 저장소 화면이 나오면 된다.