このページは CGIinstall の翻訳です。
MercurialのCGIサーバをセットアップする
Mercurialではウェブサーバを経由してリポジトリを公開することができます。Mercurialはウェブサーバを内蔵していて、hg serveで使えます。しかし、これは一度に1つのコネクションしか張ることができませんし、頑強ではありません。妙なタイミングで壊れたコネクションを張ろうとするとhg serveが止まります。より良い方法はApacheを使ってCGIスクリプト経由でMercurialにアクセスすることです。
以下にrepo-nameという名前のリポジトリをexample.orgという名のホストで公開する方法を説明しましょう。
Mercurialをインストールする
UnixInstall を見てサーバーにMercurialをインストールしてください。
ユーザを作りリポジトリをセットアップする
hgという名前のユーザを作り、/home/hg/repo-nameにリポジトリを作ります。
# adduser hg # su - hg $ mkdir /home/hg/repo-name; cd /home/hg/repo-name $ hg init
設定ファイルrepo-name/.hg/hgrcに以下のような内容を書いてリポジトリに関する情報を追加してください。
[web] description = short description of repo-name author = Example User <hg@example.com>
絶対に必要というわけではありませんが、リモートからこのリポジトリを更新したい場合は、/home/hg/.sshというディレクトリを作ってauthorized_keysを適切に設定してください(詳しくはSharedSSHを見てください)。以下のようにしてリモートからリポジトリを更新できます。
$ hg push ssh://hg@example.org/repo-name
CGIスクリプトを設定する
hgweb.cgiというファイルをMercurialのソースアーカイブから/var/www/cgi-hg/index.cgiにコピーし、hgweb.hgweb()の呼びだしの最初の引数にリポジトリへのパスを、2つめの引数にリポジトリ名を与えるように変更してください。
上の例の場合、以下のようになります。
import cgitb, os, sys cgitb.enable() # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install from mercurial import hgweb h = hgweb.hgweb("/home/hg/repo-name", "name of repository") h.run()
index.cgiを実行可能にするのを忘れないでください。
$ chmod a+x index.cgi
Apacheの設定ファイルを編集する
apacheの設定ファイルを以下のように変更し、apacheをreloadして設定の変更をサーバに反映します。
Alias /hg /var/www/cgi-hg <Directory "/var/www/cgi-hg"> DirectoryIndex index.cgi AddHandler cgi-script .cgi Options ExecCGI Order allow,deny Allow from all </Directory>
静的なファイルとしてしてリポジトリを公開したいなら(通常はする必要はないでしょう)以下のような設定を追加してください。
Alias /hg-static /home/hg/repo-name <Directory "/home/hg/repo-name"> Options Indexes Order allow,deny Allow from all </Directory>
以上!
リポジトリを公開してしまえば、http://example.org/hg/というURLでリポジトリにアクセスできます。
複数リポジトリ
一つではなく複数のリポジトリを公開する場合、Apacheの設定ファイルは そのままで、hgwebdir.cgiを/var/www/cgi-hg/index.cgiにコピーし、 リポジトリごとにhgweb.cgiを} としてコピーしてください。