hgサーバーを立ち上げる

http://mercurial.selenic.com/wiki/modwsgi
ここにならってやってみる。
環境は、ubuntu server 9.10にmoinmoin wikiを入れてwsgiで動かしているマシン。
wikiはwww.example.com/wikiでサービスしている。
上記ページの3.1までは終わっているから3.2から。
/etc/apache2/site-available/defaultののなかに以下を追加。

    WSGIScriptAlias /hg "/var/www/hg/script/hgwebdir.wsgi"
    
        Options ExecCGI FollowSymlinks
        AddHandler wsgi-script .wsgi
        AllowOverride None
        Order allow,deny
        Allow from all
    

    
        Options FollowSymlinks
        DirectoryIndex index.html
        AllowOverride None
        Order allow,deny
        Allow from all
    

hgwebdir.wsgiを以下のように作成し、/var/www/hg/scriptの下におく。

#!/usr/bin/env python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
application = hgwebdir('/var/www/hg/script/hgweb.config')

hgweb.configの中身は以下の通り。

[web]
style = coal
[paths]
/ = /var/www/hg/htdocs/**

これでブラウザでwww.example.com/hgとするとMercurial repositoryが見える。
repositoryを置くディレクトリhgを

sudo chown -R moin.moin hg
sudo chmod -R gu+rwX hg
sudo chmod -R o-rwx hg

としておく。
ためしに適当なファイルを作ってadd, commitしておく。
アクセスしようとすると、以下のエラーが出る。

error
An error occurred while processing your request:
Permission denied

wwwからパーミッションを変更。

sudo chown -R moin.moin hg
sudo chmod -R gu+rwX hg
sudo chmod -R o-rwx hg

今度は見られた。
次にやるべきことは、何らかの認証の設定とpushできるようにすること。
まずはpushのテスト。
レポジトリの.hgにhgrcを作成。次のように書き込む。

[web]
allow_push = *
push_ssl = false

リモートからTortoiseHGのsynchronizeでpush。
ちゃんと反映された。
次は認証設定。/var/etc/apache2/sites-available/defaultの に以下を追加。

AuthType Digest
AuthName "Mercurial repositories"
AuthDigestProvider file
AuthUserFile /home/moin/hg/hgusers
Require valid-user

ダイジェスト認証を有効にする。

sudo a2enmod auth_digest

パスワードファイルを/home/moin/hg/hgusersに作成。

cd /home/moin/hg
htdigest -c hgusers 'Mercurial repositories' username

ここで注意すべきことは、AuthNameで指定したrealmとhtdigestで指定するrealmをそろえなければいけないこと。
apache2を再起動。

sudo /etc/init.d/apache2 restart

これで認証がかかった。