gitosis による git サーバーの管理 のバックアップ(No.4)

更新


公開メモ

gitosis について

gitosis は、(複数の)git リポジトリの管理を容易にしてくれるソフトウェア。
詳しい説明は、http://openbooth.org/archives/60.html あたりを参照のこと。

gitosis により管理されるサーバーには

git clone gitosis-account@some.your.server.com:your-gitosis-project

のような形でアクセスすることになる。

some.your.server.com
gitosis をインストールしたサーバーのアドレス
gitosis-account
some.your.server.com に(通常は)1つだけ作成された gitosis 用のアカウント名
すべてのユーザーはこのアカウントを通じてリポジトリにアクセスする
your-gitosis-project
git リポジトリの名前
1つの gitosis-account で複数の git リポジトリを管理することができる

リポジトリへのアクセス制御は公開鍵(rsa)ベースで、 ユーザーごと、そして、リポジトリごとに、 読み取り専用、または、読み書き可能、を指定できる。

git リポジトリの管理は、shell ログインすることなくリモートから行える。

  • 新しいリポジトリの作成
  • ユーザーアカウントの追加・削除
  • リポジトリごと、ユーザーごとのアクセス制御

Debian での gitosis のインストール

と同様にやれば良いんだけれど、 はまるのは、git というユーザーを使おうとするとうまく行かない事。

gitosis というユーザーが自動的に作られるので、それを使う。

手順としては、

  1. aptitude で gitosis をインストール (1行目)
  2. 1人目の管理者(自分)の公開鍵を用いて gitosis を初期化 (10行目)
  3. 自分のアカウントからアクセスできることを確認する (17行目)
LANG:console
$ sudo aptitude install gitosis
 以下の新規パッケージがインストールされます:
   gitosis python-pkg-resources{a} python-setuptools{a} 
 更新: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
 284kB のアーカイブを取得する必要があります。展開後に 1217kB のディスク領域が新たに消費されます。
$ sudo su gitosis
gitosis$ cd
gitosis$ pwd
 /srv/gitosis
gitosis$ gitosis-init < ~osamu/.ssh/id_rsa.pub
 Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
 Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
gitosis$ ls -a
 .ssh     gitosis  repositories
gitosis$ exit
$ cd
$ ssh gitosis@localhost
 PTY allocation request failed on channel 0
 ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
 Connection to localhost closed.

管理作業

を参考に、osamu@another-server を管理者として登録してみる。

gitosis のリポジトリ管理情報は、それ自体1つの git リポジトリで管理されている。

手順は、

  1. 管理情報リポジトリ gitosis-admin をローカルにコピー : git clone
  2. 管理情報をローカルで編集  : jed など
  3. 編集結果をローカルリポジトリに登録 : git add / git commit
  4. ローカルリポジトリをサーバーに送信 : git push
LANG:console
$ git clone gitosis@localhost:gitosis-admin.git
 Initialized empty Git repository in /home/osamu/gitosis-admin/.git/
 remote: Counting objects: 5, done.
 remote: Compressing objects: 100% (4/4), done.
 remote: Total 5 (delta 0), reused 5 (delta 0)
 Receiving objects: 100% (5/5), done.
$ cd gitosis-admin/
$ ls
 gitosis.conf
 
 keydir:
 osamu@debian-server.pub
$ cat gitosis.conf
 [gitosis]
 
 [group gitosis-admin]
 writable = gitosis-admin
 members = osamu@debian-server
$ jed gitosis.conf
 [gitosis]
 
 [group gitosis-admin]
 writable = gitosis-admin
 members = osamu@debian-server, osamu@another-server
$ scp osamu@another-server:.ssh/id_rsa.pub keydir/osamu@another-server.pub
$ git add keydir/osamu@another-server.pub
$ git commit -a
 Created commit d7e6afb: osamu@another-server.pub was added as admin
  1 files changed, 1 insertions(+), 0 deletions(-)
  create mode 100644 keydir/takeuchi@dora.pub
$ git status
 # On branch master
 nothing to commit (working directory clean)
$ git push
 Counting objects: 6, done.
 Compressing objects: 100% (4/4), done.
 Writing objects: 100% (4/4), 730 bytes, done.
 Total 4 (delta 0), reused 0 (delta 0)
 To gitosis@localhost:gitosis-admin.git
    31412ce..d7e6afb  master -> master

これで、新しいユーザーが追加され、 登録した公開鍵を使って gitosis アカウントにログイン可能になっている。

LANG:console
$ ssh osamu@another-server
$$ git clone gitosis@gitosis.server:gitosis-admin.git
 Initialized empty Git repository in ~/gitosis-admin/.git/
 remote: Counting objects: 10, done.
 remote: Compressing objects: 100% (9/9), done.
 remote: Total 10 (delta 1), reused 4 (delta 0)
 Receiving objects: 100% (10/10), done.
 Resolving deltas: 100% (1/1), done.
$$ rm -r gitosis-admin

うまく行っている。

管理情報の構成

gitosis の管理情報は以下のようなファイル構成になっている。

gitosis-admin/
  gitosis.conf
  keydir/
    osamu@another-server.pub
    osamu@debian-server.pub
gitosis.conf
管理情報フォルダのルートにある
リポジトリごと、ユーザーアカウントごとのアクセス制御情報が書かれている
keydir/*
ユーザーアカウントごとの公開鍵

gitosis.conf の設定方法

使い方は /usr/share/doc/gitosis/example/* を見る。

基本は、

[group グループ名]
members = member1 member2 member3 @other-group ...
writable = リポジトリ1 リポジトリ2 リポジトリ3 ...
readonly = リポジトリ1 リポジトリ2 リポジトリ3 ...

という設定。

member? は keydir/* に保存した公開鍵ファイルの名前で指定します。
他のグループ名を @ 付きで指定することもできます。

gitosis-admin リポジトリ自体もこの形式のアクセス制御が可能なので、 容易に複数の管理者アカウントを作成・管理することができます。

あとは、必要に応じてリポジトリごとの設定。

[repo リポジトリ1]
## Allow gitweb to show this repository.
#gitweb = yes

## Oneline description of the project, mostly for gitweb.
#description = blah blah

## Owner of this repository. Used in gitweb list of projects.
#owner = John Doe

## Allow git-daemon to publish this repository.
#daemon = yes

設定は、書き換えたら

LANG:console
git commit -a -m "message"
git push

を忘れずに行う。

新しいリポジトリを作成するには、上記方法でリポジトリへの書き込み権限を作ってから git push することになる。

LANG:console
$ git clone gitosis@git.server.com:gitosis-admin.git
  ...

$ cd gitosis-admin/
$ jed gitosis.conf
...

[group myteam]
members = member1 member2 member3
writable = my_project
...

$ git commit -a -m "my_project created"
$ git push
$ mkdir my_project
$ cd my_project
$ git init
$ git remote add origin gitosis@git.server.com:free_monkey.git
$ # do some work, git add and commit files
$ git push origin master:refs/heads/master

コメント

自由にコメントを付けて下さい。





Counter: 45192 (from 2010/06/03), today: 3, yesterday: 3