Unix

hg serve 설정

ForceCore 2009. 3. 4. 18:19
아파치고 뭐고 별로 건들고 싶지 않다 ㅡ,.ㅡ
http://forcecore.tistory.com/928
필자의 트랙 설정한 것을 보면 알겠지만 -_-; standalone을 무지 좋아하고 그냥 최대한 간단히 가는걸 좋아한다. 물론 큰 시스템/프로젝트면 이렇게 하면 곤란하다.

필자가 원하는 사양은 이렇다.
1. 웹으로 접속해서 보고 commit할 수 있어야 한다. ssh프로토콜로 pull/push하지 않을 것임.
2. 아무나 여기 접근하지 못해야 한다. 인증해야 내용을 볼 수 있다.
3. 인증된 사용자는 push도 가능해야 한다.
4. 되도록 아파치를 안 거치고, 그냥 hg serve 로 어떻게든 해본다. (optional)
1, 2, 3을 이루기 위해 hg serve가 불충분하면 아파치를 쓰긴 해야 함...

...??!!
authentication 부분이 없다?

컨닝 교재와 방식을 바꾸자.
http://www.selenic.com/mercurial/wiki/index.cgi/HgWebDirStepByStep#head-f023b01c83cbf2b92bab261b782a988325fd5f38
apache - CGI 방식을 택하겠다.

... CGI를 켜야 한다 ㅡ,.ㅡ
아파치는 이미 설치되어 있다고 치자.
이미 CGI는 켜있다. 다만, 어디 설정이 있는지 약간 헤맬 수 있다.
/etc/apache2/sites-enabled
여기 이 파일에 있다.
/usr/lib/cgi-bin이 cgi파일을 놓아야 할 곳이군...

hgwebdir.cgi를 찾아보니
/usr/share/doc/mercurial/examples/hgwebdir.cgi 에 있다.
이를 /usr/lib/cgi-bin 에 복사. chmod +x 도 해줘야만 된다.

아파치 설정을 조금 건드려줘야 한다. 필자의 경우...
/etc/apache2/sites-enabled/000-default 에다가
ScriptAliasMatch        ^/hg(.*)        /usr/lib/cgi-bin/hgwebdir.cgi$1
이 한 줄을 넣었다. (사실 필자는, 000-default말고, 다른 파일을 만들어서 다른 port를 listen하도록 설정하여 virtual host를 사용하고 있다 ㅡ,.ㅡ)

... 생략 ...
    # hg stuff
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#    ScriptAlias /hg/ /usr/lib/cgi-bin/ 이거 넣으면 엉터리로 동작하게 됨.
    ScriptAliasMatch        ^/hg(.*)        /usr/lib/cgi-bin/hgwebdir.cgi$1
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
...생략...
필자의 설정은 이런 식이다.

성공한다면,
http://myserver/hg/ 여기가 접속 가능해야 한다.

이제 hgwebdir.cgi 를 적당히 설정을 해줘야 한다.
이 파일의 제일 아래 부분에 보면...
# Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
# or use a dictionary with entries like 'virtual/path': '/real/path'

application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

이런 부분이 있는데... hgweb.config 이게 설정파일의 위치이다. 절대 경로로 지정해줘도 됨.

hgweb.config나... 어쨌거나 지정해준 설정파일의 내용은 대충 아래와 같이 하면 된다.
[paths]
pljec = /export/hg/pljec

[web]
; style = gitweb
contact = fcore
description = pljec
allow_push = *
push_ssl = false
allow_archive = gz zip bz2

이제 보안 부분.
아까 설정 부분에서...
디렉토리 부분을 잘 설정해주면 된다.

   # hg stuff
    ScriptAliasMatch ^/hg(.*) /usr/lib/cgi-bin/hgwebdir.cgi$1
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all

        AuthType Basic
        AuthUserFile /export/trac/passwd
        AuthName "login please"
        require valid-user
    </Directory>

이런식으로 하면 된다.
/export/trac/passwd 파일은, tracd 설정 나름인데, 트랙과 공유 가능하다.
단... --basic-auth 옵션으로 tracd를 돌려야지 된다.
아닌가... basic auth를 쓰지 않으려면, htdigest 명령어로 파일을 관리하면 됨...
Realm이 들어가서 약간 더 복잡해지긴 할 것이다.