miau's blog?

XREA FREE で Mercurial を

以前から悩んでいたんですが、普段複数の PC を使っているせいで、作ったスクリプトが色んな PC に分散しがちです。「あー、あのマクロ使おうと思ったけど、あっちの PC で作ったんだった」みたいなことも多かったり。

それで「Subversion のレポジトリとか作って、ちゃんと同期できればなー」と思ってたところ、こんな記事を見かけまして。

Mercurial で手軽な共有レポジトリをつくろう - steps to phantasien t(2007-05-19)

Mercurial だと CGI でレポジトリ公開できるらしい。ということはこの XREA のサーバでレポジトリ管理できるってこと?それはなかなかいいような。

例えば blog で公開しているスクリプトも Mercurial で管理すれば気軽にバージョンアップできるし、普段「これは公開するレベルじゃないな」みたいな感じで blog で載せてなかったような手抜きスクリプトもとりあえず置いておける。
ついでに分散型のレポジトリなんで、インターネットに繋がってないメインの開発機での更新もちゃんと管理できると。

と言うことで、Mercurial のインストールその他諸々について。


(2008-12-27 追記)

1.1.1 にバージョンアップしたら hgweb がおかしなことに・・・。リンク周りがおかしいみたいなので、気が向いたら対応します。



■XREA でのインストールについて

色々書こうと思ってたんだけど、のんびりしてるうちにもう似たようなこと書いてる人が。

XREAでMercurialをインストール | Sarabande Internet Archive

でもこれは XREA の有料サービスのような気がする。たぶん XREA FREE ではちょっと違う点があるから、そこに焦点を絞って書こうかと。

■XREA FREE での制限(1)

たぶん FREE だからだと思うんだけど、ログインシェルで rbash が使われてる。

Xrea.comさんのサーバー応用編: rbash - restricted shell

何が困るかっていうと、コンソールで python とか使えない。

-rbash-2.05b$ python
-rbash: python: command not found
-rbash-2.05b$ /usr/local/bin/python
-rbash: /usr/local/bin/python: restricted: cannot specify `/' in command names
-rbash-2.05b$ export PATH=$PATH:/usr/local/bin/python
-rbash: PATH: readonly variable

つまり、python setup.py install 〜 の部分が実行できないわけですね。

■CGI 経由でインストール

まあコンソールでインストールできないなら CGI 経由でやればいいわけで。
基本的に先頭の URL と同じ手順でやったけど、Mercurial のインストール部分だけは以下のようにする。

(1) mercurial-*.tar.gz を public_html 配下に解凍する

tar -xvzf public_html/mercurial-0.9.5.tar.gz -C public_html/


(2) setup.py を setup.cgi にリネームして、内容変更

import sys

の部分を、

print "Content-Type: text/plain"
print

import sys
sys.argv = ['setup.cgi', 'install', '--home=/virtual/miau/local', '--force']

こう変更。標準出力の内容をブラウザで拾いたいから HTTP のヘッダを吐いてやって、あとはコンソールから呼び出したときと同じような引数を偽装。

(3) パーミッションを設定

chmod 0755 public_html/mercurial-0.9.5/setup.cgi


(4) ブラウザから http://miau.s9.xrea.com/mercurial-0.9.5/setup.cgi にアクセス

こんな感じの出力が得られるはず。

running install
running build
(中略)
copying templates/raw/map -> /virtual/miau/local/lib/python/mercurial/templates/raw
copying templates/raw/changeset.tmpl -> /virtual/miau/local/lib/python/mercurial/templates/raw

全部で 406 行くらい。

(5) public_html/mercurial-0.9.5 の削除

■XREA FREE での制限(2)

その他手順を踏んで hgweb.cgi を置くと、ブラウザから確かにアクセスできた。でもレポジトリとして利用する場合は hgweb.cgi はちゃんと動作しない。これは XREA FREE の広告が挿入されているせい。たぶん。

いつかやったように、.htaccess でLayoutIgnoreURI * とか書いてもいいんだけど、ここはもっとお手軽に拡張子を .cgi から .xcg に変えてやる。

あと、.htaccess で

DirectoryIndex hgweb.xcg

とやろうと思ったけど、こうやってファイル名を省略してしまうと結局広告が挿入されるらしい。DirectoryIndex は index.html(誘導ページ)にしておいた。

■見れるようになった

miau's Mercurial repository: shortlog

changeset がハッシュ値っぽいの(d8fc6181d6a7 とか)で管理されてるのがちょっとわかりにくい+美しくない気がするけど、ひとまず気にしない。

■文字コードどうしよう

工房「藤車」 > SCM メモ > Mercurial の利用 > 文字コード

に書いてあるとおり、文字コードを適切に設定しないとコミットに失敗してしまう。

xrea では getpreferredencoding() の結果が ANSI_X3.4-1968 だったので、hgweb.xcg で

import os
os.environ["HGENCODING"] = "UTF-8"

みたいなことをやる必要があるけど、この文字コードはブラウザでの表示にも使われる文字コード。UTF-8 に設定してしまうと、Shift_JIS のファイルソースを読むような場合に文字化けしてしまう。(こんな感じ
cp932 を指定すれば文字化けは解決するけど、逆に UTF-8 のファイルを登録しようとしたときに困るよなぁ・・・。メタデータの文字コードとファイルの文字コードが一緒じゃないといけない、ってのはちょっといただけないな。

ブラウザからのアクセスでは Trac を使う、というのも考えたけど、単純にファイルサイズが大きいのでやめ。XREA FREE は 50 MB しか使えないからちょっときつい。

・・・とひとしきり迷ったけど、やっぱメタデータは UTF-8 がいい気がする。RSS にも使われるっぽいし。文字化けに関しては、ソースいじれば対応できるでしょ。

ということで UTF-8 で設定したけど、TortoiseHG の対応っぷりはどんな感じかというと、Shift_JIS のファイルを commit しようとした場合・・・

hg_commit

意外とちゃんと表示できてる。でも push しようとすると・・・

hg_push

なんか変なエラーが。仕方ないからここだけはコマンドラインで。

E:\repo>hg push
pushing to http://miau.s9.xrea.com/hg/hgweb.xcg
searching for changes
http authorization required
realm: Mercurial
user: miau
password:
adding changesets
adding manifests
adding file changes
added 1 changesets with 3 changes to 3 files

OK っぽい。


(2008-09-21 追記)

rbash 上で export もできない旨を追記。


(2009-04-20 追記)

そういえば年末に Mercurial 1.0 系を入れたんですが、上記の設定では画像等がうまく表示できませんでした。URL が「http://miau.s9.xrea.com/hg/hgweb.xcg/static/hglogo.png」みたいになっていて .xcg 以外の拡張子とみなされている→広告が挿入されているというオチのような気がするので、.htaccess に

LayoutIgnoreURI *

を追加して対処しました。
posted at 10:26:05 on 2008-01-31 by miau - Category: General No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。