ログ日記

作業ログと日記とメモ

gitosisを使ってみる

http://d.hatena.ne.jp/n314/20091111/1257937482 の続き。

aptitude install gitosis
...
Adding system user `gitosis' (UID 106) ...
Adding new group `gitosis' (GID 109) ...
Adding new user `gitosis' (UID 106) with group `gitosis' ...

gitosisユーザが作られる。
ホームディレクトリは /srv/gitosis になる。


初期設定。

su gitosis
cd
gitosis-init < adminuser.pub

任意の(gitosisサーバ上ではなくクライアントの)公開鍵はgitosisユーザが読めるところに置いておく。
adminuserはとりあえず普段開発に使ってるユーザにした。


クライアントからadminuserでテスト。

git clone gitosis@server:gitosis-admin.git

クローンできたらgitosis.confを編集してユーザを追加する。
自動生成された設定では、user@server.pub のファイルができていた。サーバー名も入るらしい。


gitosis.confを編集する。

[gitosis]

gitweb = yes
daemon = yes

[group gitosis-admin]
writable = gitosis-admin
members = adminuser@local

[group office]
members = adminuser@local user1

[group projectA]
members = @office
writeable = projectA

[repo projectA]
description = Test Project
owner = adminuser@local
gitweb = yes
daemon = yes

keydirに公開鍵も追加してcommit & pushする。


続いてgitwebの設定。これまでの設定は一応置いておいて、以下を末尾に追加して設定を上書き。

$projects_list = "/srv/gitosis/gitosis/projects.list";
$projectroot = "/srv/gitosis/repositories";
@git_base_url_list = ('git clone gitosis@server:', 'git clone git://server');

本当はURLだけ書くぽいけど、git cloneから書いてみた。
ここでプロジェクトのリストが表示されない場合はリポジトリのWebアクセス権がないかもしれない。
デフォルトでは

ls -l
drwxr-x--- 7 gitosis gitosis 4096 2009-11-12 15:04 projectA.git

グループに読み込み権限はあるようなので、Webサーバにグループを追加する。

usermod -G www-data,subversion,bazaar,gitosis www-data

あと利用するならgit-daemonの設定もする。

cat /etc/sv/git-daemon/run
#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec git-daemon --verbose --user=gitosis --group=gitosis --reuseaddr \
  --base-path=/srv/gitosis/repositories /srv/gitosis/repositories
sv restart git-daemon


gitosisでは、pushしたときにpost-updateのhookが起動し、daemonやgitwebに設定された値を見て /srv/gitosis/gitosis/projects.list が更新されたり git-daemon-export-ok ファイルが作られるようだ。
最初に構築したときにユーザの権限を試している段階では、公開鍵の変更がない限りは /srv/gitosis/.gitosis.conf を直接編集してテストしても構わない。ただgitwebやgit-daemonのテストは本来の手順通りpushで設定を反映させないといけない。




ユーザごとのリポジトリ

[group user1]
members = user1
writable = user1/*

とやりたいところだが出来ないようだ。


リポジトリのレイアウトはどうするのがいいんだろう。



複数のクライアントから同じユーザで別の公開鍵を使うこともできる。
Linux用の公開鍵とCygwin用の公開鍵を同じユーザ名で使うときとか。

cat cygwin.pub >> keydir/user.pub

追記すれば良い。