ホーム > サーバ構築 > CentOS5にMercurial1.3をインストール

CentOS5にMercurial1.3をインストール

CentOS5にMercurial1.3をインストールした際に、マルチレポジトリ環境を構築したのですが、ブラウザでレポジトリのリストが表示されない状態になってしまいました。その時のトラブルシューティングです。

CentO+S5.4では、RPMForegeをインストールすれば、yum管理でMercurial1.3がインストールできます。ローカルでMercurialを使う環境を整えるのは比較的簡単にできますが、レポジトリ公開用の環境構築に癖があります。CVSやSVNの場合は、ブラウザベースでレポジトリを公開する場合は、一般的にViewvcなどが使われますが、Mercurialでは、標準で用意されています。標準で用意されている機能としては、以下の3つがあります。

  • hg serveコマンドによる簡易サーバ
  • レポジトリを1つ公開するためのhgweb
  • 複数のレポジトリを公開するためのhgwebdir

hgwebサーバの構築または、hgwebdirサーバの構築には、以下の構築手順書があります。

  • http://mercurial.selenic.com/wiki/PublishingRepositories
  • http://mercurial.selenic.com/wiki/modwsgi

CentOS5.4の場合は、mod_wsgi はyumでインストールできるのでwsgi環境を整える(Pythonの環境)を整えるのは難しくありません。

私の場合は、上記手順書で、hgwebdirサーバの構築を行ったのですが、http://mercurial.selenic.com/wiki/modwsgiの「3.3 Mercurial」で書かれている設定ではブラウザからレポジトリ公開のトップページは表示できるけれど、レポジトリ一覧が表示できない状態でした。以下のように、CGI 設定ファイルに当たるhgweb.config を絶対パスで指定することで解決できました。

from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
application = hgwebdir('/var/www/myhg/hgweb.config') # 絶対パス

トラブルシューティングの手順としては、

  1. コマンドラインでMercurialのテストプロジェクトを作って動作確認する。これによりMercurial自体に問題ないことを検証。
  2. hgweb,hgwebdirを使わずに、hg serveコマンドで簡易サーバを立てて、ブラウザからのアクセスを行う。ここでファイアウォールやブラウザ環境に問題ないことを確認。
  3. hgwebdirの構築を行って動作確認。問題がある場合は、パーミッション、Apacheの設定、hgweb.config の設定などが考えられます。
#hg serve -p 8111 --webdir-conf /var/www/myhg/hgweb.config

SVNとViewvcで構築した場合は、SVN自体の管理と、Viewvcの管理が必要になりますが、Mercurialでは、単体でViewvcのようなソースコードブラウザの管理ができ、また複数のレポジトリをサーバの再起動せずに反映させることが可能です。

また、yumでmercurial1.3をインストールした場合、以下ディレクトリに、hgwebdir.wsgiが存在するのでこれをコピーして使います。

[root@xxx ~]# rpm -ql mercurial-1.3.1-1.el5.rf | grep hgwebdir
/usr/lib/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.py
/usr/lib/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.pyc
/usr/lib/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.pyo
/usr/share/doc/mercurial-1.3.1/contrib/hgwebdir.fcgi
/usr/share/doc/mercurial-1.3.1/contrib/hgwebdir.wsgi
カテゴリー: サーバ構築 タグ: ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。