2012年10月2日火曜日

git daemon

git daemon の設定方法をメモっておきます。

Ubuntu と RHEL/CentOS 両方やってみましたが、やり方がちょっと違いますので、分けて説明します。

まずは Ubuntu でのやり方:
Ubuntu 12.04.1 LTSで試しました。

$ sudo apt-get install git-daemon-run
$ sudo sv start git-daemon

でできた。

あとは、export したいgit リポジトリの下に git-daemon-export-ok という空ファイルを作っておく。

Ubuntu だと sv というのがあるんですね。RHELにはないです。
この辺の事情は知りません。。

man sv を読むと、デフォルトで /etc/service の下をサーチするとある。
確かに
/etc/service/git-daemon
というのがある。

これは
/etc/sv/git-daemon ディレクトリへのシンボリックリンクになっている。

/etc/sv/git-daemon/run の内容は以下のようになっていた。


#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
  "$(git --exec-path)"/git-daemon --verbose --reuseaddr \
    --base-path=/var/cache /var/cache/git


Debian 系は /var/cache/git の下にリポジトリがあるのを期待している。
なので、 gitweb や git-daemon などの etc ファイルをいちいち書き変えるよりも、
/var/cache/git から本当のリポジトリ置き場へシンボリックリンクを貼っておくのがよいと思う。

/var/cache/git に直にリポジトリを置いてもいいんですが、FHS的には、/var/cache/ 以下はアプリケーションのキャッシュとして使われるということなので、ちょっと気持ち悪い気がする。

--base-path=/var/cache は アクセスするときに、パスの先頭から /var/cache をはぎ取るという意味だから、
/var/cache/git/repo.git をクローンする場合、
$ git clone git://hostname/git/repo.git
みたいな感じでアクセスすればよい。


引き続いて、RHEL/CentOS でのやり方:
RHEL 6.3で試しました。

# yum install git-daemon
でインストールする。
xinetd もついでに依存関係で入る。

/etc/xinetd.d/git の設定ファイルができているので、
ちょこっと編集します。


# default: off
# description: The git dæmon allows git repositories to be exported using \
#       the git:// protocol.

service git
{
#        disable         = yes    ← コメントアウト
        disable         = no      ← 追加
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/libexec/git-core/git-daemon
#        server_args     = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose     ←コメントアウト
        server_args     = --base-path=/var --export-all --user-path=public_git --syslog --inetd --verbose /var/git    ←追加
        log_on_failure  += USERID
}


disable を noにして、server_args の部分を書き換えています。

git clone git://my.git.server/git/hoge.git
で /var/git/hoge.git へアクセスするようになります。

あとは
# service xinetd restart
とします。

git daemon はデフォルト 9418番ポートを listen するので、
ファイアウォールを使っている場合は、9418/tcp を開ける。

0 件のコメント:

コメントを投稿