GitLabとgit-daemonを連携させる

2013/07/03追記
最新版のGitLabではこの記事に載っている方法は使えません。

こんにちは。あっという間に春が終わり、夏に入ろうかという今日この頃。
GWはだらだらと過ごそうと思います笑

今回はGitLab(The first single application for the entire DevOps lifecycle - GitLab | GitLab)のお話です。
研究室にこのGitLabサーバーを建て、運用してますがなかなか便利です。
ただ、Gitプロトコルを使って気軽にクローンできないのは何かと不便な場面が出てきたので、GitLabのソースをちょこっと改造してgit-daemonと連携するようにしました。
忘れないようにそれのメモ。あ、改造して不具合が出ても自己責任でお願いします。

必要なもの

  • GitLabサーバー(Ubuntu 12.04、設置方法は公式通り)
  • Gitolite(構築した際に設定したはず)
  • git-daemon

手順

GitLabサービスを停止
$ sudo service gitlab stop
git-daemonをインストール
$ sudo apt-get install git-daemon-run
git-daemon-runの設定

/etc/sv/git-daemon/run を編集します。
gitoliteのレポジトリは /home/git/repositories にあるとします。

/etc/sv/git-daemon/run

#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon:git \
  "$(git --exec-path)"/git-daemon --verbose --reuseaddr \
    --base-path=/home/git/repositories --export-all --enable=receive-pack /home/git/repositories

になるようにしてください。この辺はあちこちのサイトに書いてあることと一緒ですね。

git-daemon起動
sudo sv start git-daemon

これでデーモンの設定が出来ました。

GitLabの改造

改造といっても一行加えるだけです。
GitLabを設置したディレクトリ(公式通りに設置したのであれば /home/gitlab/gitlab/)の
lib/gitlab/backend/gitolite_config.rb をいじります。

lib/gitlab/backend/gitolite_config.rb 197行目付近

...
      # Add write permissions
      repo.add_permission("RW+", "", name_writers) unless name_writers.blank?
      repo.add_permission("RW+", "", name_masters) unless name_masters.blank?

      # !!!追加!!!
      repo.add_permission("R", "", "daemon")

      repo
...
GitLabサービスを開始
sudo service gitlab start

以上で手順は終了です。

確認

これでこれから新たに作成されるレポジトリのすべてが、Gitデーモンによって公開されるようになりました。
すでにGitLabに登録されているレポジトリの場合、Administrator をレポジトリに登録、削除などしてレポジトリに変化を起こせば、デーモンが適用されたレポジトリに変更されます。

こんな感じのコマンドでクローン出来れば万々歳です。

git clone git://localhost/someproject.git

まぁ結局何をしたかというとGitolite の config に R = daemon を追加しただけです。直接 gitolite-admin の設定を変更しても良かったのですが、いちいち変更するのも面倒だったので、GitLabに少しだけ手を加えて楽をした、という具合ですね。

不要だとは思いますが、Gitwebも同様にして出来ます。気になる人はやってみてください。
では。