February 26, 2009

gitosis を使って Git リポジトリの管理をお手軽に〜♪

gitosis とは

gitosis は、Git リポジトリの管理やアクセス制御などを簡単に行えるようにするツールです。

入れてみた

gitosis を実際にサーバーに入れてみました。

前提

OS は CentOS 5.2 です。

事前準備

サーバーに python-setuptools が入ってなかったので以下のようにしてインストールしました。

sudo yum install python-setuptools

git は前にすでにインストールしてました。
一応、インストール方法は以下。

sudo yum install git

gitosis のインストール

リポジトリから gitosis のソースを取ってきてインストールします。

git clone git://eagain.net/gitosis.git
sudo python setup.py install

python なんですね。

git ユーザーの作成

gitosis 用に git という名前のユーザーを作成します。

sudo adduser --shell /bin/sh --home /home/git git

gitosis の初期化

自分の公開鍵を使って gitosis の初期化を行います。
以下のようにします。

sudo -H -u git gitosis-init < id_dsa.pub

「id_dsa.pub」は自分の公開鍵です。

初期化を行うと git ユーザーのホームディレクトリ(/home/git)にいろいろ作られます。

hook のパーミッションを 755 に

gitosis は hook でいろいろやってるようです。
なので、hook のパーミッションを適切に設定しておく必要があります。
以下のようにします。

sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

管理用リポジトリをローカルに持ってくる

※ 以降の操作はすべてローカルマシンで行います

gitosis の初期化を行うと gitosis-admin というリポジトリが作られます。
これは管理用のリポジトリで、設定ファイルとユーザーの公開鍵が置かれています。
gitosis の管理者はこのリポジトリのファイルを操作することで権限の管理等を行います。

以下のようにして gitosis-admin リポジトリをローカルに持ってきます。

git clone git@ホスト名:gitosis-admin.git

gitosis-admin リポジトリのディレクトリ構成は以下のようになっています。

gitosis-admin/
|-- gitosis.conf         <= 設定ファイル
`-- keydir
    |-- jugyo.pub        <= 公開鍵
    ...

gitosis.conf が設定ファイルで、keydir は公開鍵を置いておくためのディレクトリです。
初期状態では自分の公開鍵だけが keydir に入っています。

gitosis の設定

gitosis の設定はとても簡単です。
設定ファイル(gitosis.conf)は初期状態で以下のようになっています。

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = jugyo

設定の意味は以下の通り。

[gitosis]

[group gitosis-admin]     <= gitosis-admin という名前のグループを定義
writable = gitosis-admin  <= アクセス可能なリポジトリを指定
members = jugyo           <= グループのメンバーを指定

ユーザーの追加

公開鍵を keydir ディレクトリに置くことでユーザーの追加が行えます。
「jugyo」というユーザーを追加したい場合、jugyo さんから公開鍵をもらい、「jugyo.pub」という名前で keydir に置きます。

グループの設定

以下のような感じでグループを定義できます。

...
[group グループ名]
writable = リポジトリ1 リポジトリ2
members = ユーザー1 ユーザー2
...

writable と members にはスペース区切りで複数のリポジトリおよびユーザーを指定することができます。
writable の他に readonly というのも指定できるようです。

リポジトリ作成の流れ

リポジトリ作成の流れを説明します。
試しに foo というリポジトリを作ってみることにします。

<<<追記

すみません、大事なことを書き忘れてました!
リポジトリを追加(push)する前に、gitosis-admin リポジトリにある設定ファイル(gitosis.conf)のグループの記述のところに新規作成するリポジトリ(今回の例だと foo)を追加しておく必要があります!

例:

[group グループ名]
writable = リポジトリ1 リポジトリ2 foo <= foo を追加
members = ユーザー1 ユーザー2

>>>追記

まず、git リポジトリを作成し、適当なファイルを追加します。

mkdir foo
cd foo
git init
touch README
git add README
git commit README -m 'init'

remote の設定を行います。

git remote add origin git@ホスト名:foo.git

push します。

git push origin master

これで完了です。

簡単ですね!

ちなみに

ちなみに、yum に gitosis パッケージがあったりします(後で気づいた…)。
yum を使ってインストールした場合は gitosis というユーザーが作られ、ホームディレクトリは /var/lib/gitosis になるようです。

UPDATE

一人のユーザー(例えば jugyo さん)が複数の公開鍵を使いたいこともあると思います。
そういう場合は gitosis-admin/keydir ディレクトリに設置されている公開鍵ファイル(例えば jugyo.pub)に複数の公開鍵を書いておけばよいようです。

参考

以下が大変参考になりました。

scie.nti.st » Hosting Git repositories, The Easy (and Secure) Way
gitosis - Git リポジトリ群の管理とアクセス制御 vol.0 - openbooth
gitosis - Git リポジトリ群の管理とアクセス制御 vol.1 - openbooth
gitosis - Git リポジトリ群の管理とアクセス制御 vol.2 - openbooth