CommitBitの使い方

CommitBitというのは、JiftyベースのSubversionリポジトリ管理ツール。リポジトリ管理ツールといってもTracSVN::Webのようなコミットを管理するものとは違って、リポジトリにアクセスできるユーザのメールアドレスとかパスワードを管理するもの。実際の動作例はCommitBitのサイト自体をご覧いただくとして、一年ほど前に登場したときちらと触ったきりだったのですが、AliasことAdam Kennedy氏が春先にリポジトリをぶっ壊したとき、最新版のJiftyだとCommitBitが動かないと嘆いていたのは聞いていたので、なにか敷居の高い部分でもあるのかなとは思っていたのです。

が、実際に試してみたところ、設定さえしてしまえば、Windows上でもわりとあっさり動くのですね。

ただ、その設定が必要な項目がいささかわかりづらいので、以下、「とりあえず動く」というところまでのポイントをまとめておきます。

Subversion(と、必要ならApache2)をインストールする

していない人がCommitBitを使おうとは思わないと思いますが、念のため。

Jiftyをインストールする

インストールが成功する可能性は0%だそうですが(ぇ、まあ、気合いと根性でなんとかしてください。

Jifty::Plugin::Loginもインストールする

CPANからは入れられません。Jiftyのtarballを落としてくるか(CPAN経由でインストールした直後なら、.cpan/buildディレクトリの中にあるはず)、オフィシャルのリポジトリから落としてくるかして、plugins/Login/の中に入っているJifty::Plugin::Login関係のモジュールをインストール(するか、PERL5LIBに登録)しておきます。

CommitBitを落としてくる

CPANからtarballを落としてきます。最新版のJifty::DBIとは一部互換性がないので、直接CPANインストーラ経由でインストールしようとしてもうまくいきません(し、JiftyアプリをCPANから直接インストールするのはいずれにしてもおすすめしません)。

svn headのは作りかけのまま止まっているとのこと。表面的には動きますし、いろいろ改善されていてよさげなんですが、パスワードまわりの処理がまだ完全ではないようなので、おとなしくCPAN版を使っておきましょう。

lib/CommitBit/Model/User.pmを修正する

これだけ。

--- lib/CommitBit/Model/User.pm.org	2006-10-02 04:52:54.000000000 +0900
+++ lib/CommitBit/Model/User.pm	2007-08-31 08:30:45.767750000 +0900
@@ -7,7 +7,7 @@
 
 use CommitBit::Record schema {
     column 'nickname' => type is 'text';
-    column 'email' => type is 'text', is 'distinct', is 'immutable', is 'mandatory';
+    column 'email' => type is 'text', is distinct, is immutable, is mandatory;
     column 'password' => type is 'text', render_as 'password';
     column 'created' => type is 'timestamp', is immutable;
     column admin => type is 'boolean', default is '0';

etc/config.yamlを修正する

etc/site-config.yamlを書いてもいいです。ポイントは、

framework:
  AdminEmail: hoge@foo.com  ←追加
(中略)
application:
  repository_prefix: (今後作成するリポジトリの親ディレクトリに修正)

の二点。WindowsのようにそのままではEmail::Send::Sendmailが動かない環境の場合はさらに

framework:
  Mailer: SMTP
  MailerArgs:
    - Host
    - smtp.foo.com

のように修正。

その他、必要に応じて Database とか Web 以下の項目(HostとかBaseURLとかPortとか)を修正してください。Production環境に持っていくときは LogLevel を WARN とか ERROR にするのも忘れずに。

データベースを作成する

 > perl bin/jifty schema --setup
 > perl bin/create_admin --email=admin@foo.com

管理者の初期パスワードは password 固定になっているので、bin/create_admin の中身を適当に変えるか、あとでログインしたあと修正しましょう。

サーバを起動する

 > perl bin/jifty server

標準のままならブラウザで http://localhost:8888/ にアクセスすればCommitBitを利用できるはずです。

リポジトリのアクセスをsvn://〜で済ます場合はこれでOKですが、http://〜を使いたい場合はもう少し手をかける必要があります。

Apache2のhttpd.confを修正する

基本的には

Include (リポジトリの親ディレクトリ)/*/conf/httpd.conf

のようなのを追加しておけばよいはず……なんですが、これ、少なくともうちではうまくいかず。なにか勘違いしているような気もしますが、あれこれ考えたくなかったので、ここではさっさとCommitBitの方をこんな風に書き換えて、

--- lib/CommitBit/Model/Repository.pm.org	2006-09-17 20:42:41.000000000 +0900
+++ lib/CommitBit/Model/Repository.pm	2007-08-31 11:29:24.909250000 +0900
@@ -241,6 +241,11 @@
     return File::Spec->catdir($self->local_path, 'conf', @_);
 }
 
+sub httpdconf_file_path {
+    my $self = shift;
+    return File::Spec->catdir(Jifty->config->app('httpdconf_prefix'), @_);
+}
+
 
 sub write_svnserv_config {
     my $self = shift;
@@ -300,7 +305,7 @@
 EOF
 
     with_write_lock { 
-        open my $fh, '>', $self->svnconf_file_path('httpd.conf') or die $@;
+        open my $fh, '>', $self->httpdconf_file_path($self->name.'.conf') or die $@;
         print $fh $msg or die $@;
         close $fh or die $@;
     };

etc/config.yamlにも

application:
  httpdconf_prefix: foo/bar/repos/

とかいうのを追加。最後にhttpd.confに

Include foo/bar/repos/*.conf

しました。

あとは、タイミングを見て適当に再起動するスクリプトを用意するとか、tracSVN::Webとも同期できるようなものを用意するとか、必要に応じて適当に改造してください。

毎回毎回「htpasswdの結果送って〜」とかやるよりはいくらか管理が簡単になる *かも* しれませんよ。