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
で追記すれば良い。