2012-05-18 [長年日記]

gitoliteとgitweb

この間gitosisについて書いたばかりだけど、Ubuntuを11.10から12.04にあげたらgitosisが削除されてしまってgitoliteを使えということらしいのでそのメモ書き。gitosisのリポジトリ(repositories/*.git)が残っているはずなのでこれをコピーしてもいいんだけど、管理しているリポジトリ自体一つしかないので、gitoliteを新規でセットアップしてローカルからプッシュすることにした。

gitoliteの大きな特徴として、一般ユーザでもローカルのリモートリポジトリを作成することができるというのがあり、その場合は、

$gl-setup user.pub

とすれば*1、自分のhomeディレクトリ以下にrepositories/*.gitが生成される。ただ、今回はgitwebとの連携も考え普段使っているユーザとは別の、専用のユーザを作成することにした。ということでまずはユーザを作成し初期化する。

$sudo adduser --system --disabled-password --shell /bin/sh --group gitolite
$sudo -H -u gitolite gl-setup /path/to/user.pub

途中、.gitolite.rcの編集画面が出てくるので、gitwebで連携したい場合は、$REPO_UMASKを0077から0027に変更しておくとよい*2。 あとは、自動的に生成されるリポジトリgitolite-adminの内容を変更して管理を行う。

$git clone gitolite@localhost:gitolite-admin
$cd gitolite-admin
$vi conf/gitolite-admin.conf
(適当に編集)
$git commit -am "commit message"
$git push

こんな感じ。

ユーザの追加はkeydir/に公開鍵を追加してcommit,push。同じユーザ名で複数のマシンからアクセスしたい場合は、user@hostname.pubというファイル形式にすればOK。

$cp /path/to/user@hostname.pub keydir/
$git add keydir/user@hostname.pub
$git commit -am "add user"
$git push

こんな感じ。

gitwebとの連携

次にgitwebとの連携。まずはWebサーバーを動かしているユーザ(ubuntuだとwww-data)をグループgitoliteに加える。

$adduser www-data gitolite

次にgitolite-admin.confに以下の記述を追記する。

repo repository1 repository2
      R     = gitweb

これでprojects.listが適切に生成される。あとは/etc/gitweb.confを修正すればOK。repositories/へのパスと、projects.listへのパスを設定すれば動くはず。認証やアクセス制限をかける場合は、/etc/apache2/conf.d/gitwebを修正する。

Tags: linux

*1 user.pubは公開鍵。userの部分がgitoliteでの便宜的なユーザ名になるので適切につけておくとよい

*2 あとからでもできるけど、ちょっと面倒