gitサーバをたててみる

XCode4にgitの機能が組み込まれたので、 折角VPSを契約したことでもあるしgitサーバをたててみた。

githubも良さそうなのだけど、git自体がLinux発のソフトということもあってオープンソース用ぽい。 privateなリポジトリなんか作らずに公開しちゃってみんなでワイワイやろうぜって雰囲気。 それは素晴らしいのだけど、ちょっと公開できないソースコードが沢山あるから、 それはこのサーバと併用することにする。

さて、まずはサーバにgitをインストールする

$sudo aptitude install git-core git-daemon-run
$sudo aptitude install python-setuptools

リポジトリの保存場所にするためにgitという名前のユーザを作成する。 このユーザアカウントでログインして使うわけではないのでdisabled-passwordしておく。

$sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git

SSHを利用してリポジトリアクセスを行うために、Gitosisというツールを利用する。 gitのリポジトリが公開されているので、チェックアウトしてインストールする。

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

gitosisコマンドが利用できるようになった。 gitosis-initコマンドに公開鍵を読み込ませることでリポジトリを作成する。 但し、このコマンドを実行したユーザのhomeディレクトリに作成されてしまうので、 gitユーザ権限で行うこと。

#su git
git$gitosis-init < id_rsa.pub

複数のユーザで使う場合、単純に次のユーザの鍵を持ってきて

$gitosis-init < nextUser_rsa.pub

してもダメ。 この辺は普通のSSHログインとは違うので注意。 方法は後述する。

さて、/home/git/repositoriesが作成されている。 この中に設定やスクリプトが入っている。 この設定は直接編集せず、ローカルにコピーして行う。

$git clone git@fff.io:gitosis-admin.git #うちのサーバの場合
$cd gitosis-admin
$ls
gitosis.conf keydir

このgitosis.confが設定ファイル。 ユーザやリポジトリの追加設定を行う。 ユーザを追加したら、keydirに公開鍵をコピーすることで利用できるようになる。(*1)

gitosis.conf

[gitosis]

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

[group group1]
writable = testProjectA testProjectB
members = arukansoft #このユーザ名はkeydirの公開鍵のファイル名に対応

keydirの中身

$cd keydir
$ls
arukansoft.pub

以上の設定を行ったらpushしてやる

$git add .
$git commit -m 'コメント'
$git push

うちの環境ではここでエラーがでた。 調べてみると、サーバ側のrepositoriesディレクトリの中の、 post-updateというスクリプトのパーミッションが間違っているようなので修正する。

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

これで設定完了。 さっき追加したtestProjectAはこんな感じでpushできる。

$git remote add origin ssh://git@fff.io/testProjectA.git #サーバ側の上げ先を作る
$mkdir testProjectA
$cd testProjectA
$git init
$echo 'test' > test.txt
$git add test.txt
$git commit -m 'ver 0.1'
$git push

以上。

Written on May 14, 2011