torutkのブログ

ソフトウェア・エンジニアのブログ

Mercurial

WindowsでのMercurialは一通りさわってみたので、分散リポジトリを試すべく、CentOS, Solarisの各マシンにMercurialをインストールしました。

CentOS

CentOS 4.4(x86)へのインストール

まずpythonをアップデート。CentOS 4.4の場合、Pythonのバージョンは2.3に固定。ちょっと古いかなと思いつつ

$ sudo yum update python
  :
$

MercurialのサイトからBinaryPackagesのダウンロードでCentOS 4.5用のrpmパッケージが入手できます。これをrpmコマンドでインストールしました。

$ sudo rpm -ivh mercurial-0.9.4-1.i686.CentOS-4.5.rpm
  :
$
リポジトリの公開(hg serve)

hg serveを起動後、アクセスするとエラーになってしまいました。

$ hg serve
  :
  File "/usr/lib/python2.3/posixpath.py", line 62, in join
    elif path == '' or path.endswith('/'):
AttributeError: 'NoneType' object has no attribute 'endswith'

pythonのバージョンをあげるべく、ActivePython 2.5.1をインストールし、Mercurialをソースからインストールしたところ、hg serveのエラーはなくなりました。

Solaris

Solaris 10 x86へのインストール

Solaris 10には、Phtyon 2.3がインストールされています。ここにソースからMercurialをインストールしたところ、やはりhg serveでCentOSと同様エラーが発生します。
そこで、Pythonの2.4を入れる方法を探していたところ、Patch 121607-02を当てるとPython 2.4がインストールされることが分かりました。
そこで、個別にpatchをダウンロードして当て、それからMercurialをソースからインストールしました。

リポジトリの公開(http経由)

hg serveコマンドでhttpによるリポジトリの公開ができます。リポジトリ(.hg)のあるディレクトリで、hg serve とコマンドを実行するだけです。デフォルトで8000ポート、ポート番号はコマンドラインオプション(-p)で指定できるようです。

ssl required

WindowsマシンからUNIX(Solaris)マシンへpushしたときに、"ssl required"エラーが発生しました。Mercurialのhg serveはデフォルトでSSLを使用するのですが、push側でSSLを使う設定が別途必要なようです。

なお、MercurialのFAQには、SSLを無効にする設定が記載されていました。リポジトリのhgrcファイルに以下を記述します。これはhttpサーバ側(pushされる側)のリポジトリ(.hg/hgrcなど)に記述します。

[web]
push_ssl = false
hg serveは書き込みは許さない

ということで、hg serveでHTTPサーバを起動したリポジトリに対してpushはできないのが仕様のようです。