バージョン管理システムGitのインストール、初期設定、Tipsなど。

git-daemon

Ubuntu 10.04でgit-daemonをxinetd経由で起動させるための設定方法。 ここではローカルネットワーク内からのアクセスのみを許可する条件で設定を行う。

設定

まずはgit-coreパッケージをインストールしておく。

sudo apt-get install git-core

まずはsvnserveを動作させるためのユーザ(ここではgitとする)を作成する。

sudo useradd git

続いてリポジトリを格納するルートディレクトリ(ここでは/srv/git)を作成する。 git-daemonが書き込めるようにオーナをgitにしておく。

sudo mkdir /srv/git
sudo chown -R git:git /srv/git

/etc/servicesにgitのサービス名と使用ポート番号が記述されていることを確認する(もしなければ追記する)。

$ grep Git /etc/services 
git		9418/tcp			# Git Version Control System

/etc/hosts.allowに下記の内容を追記し、内部ネットワークからの接続のみを許可する。

/etc/hosts.allow
git-daemon : 127.0.0.1 192.168.0.0/24

また、iptablesなどを使ってファイヤーウォールの設定がされている場合は、9418番のポート(/etc/servicesで指定したポート)を忘れずに空けておくこと。

続いて、xinetdでgit-daemonを起動するための設定を行う。 /etc/xinetd.d配下にgit-daemonというファイルを作成し、下記の内容を書き込む。

/etc/xinetd.d/git-daemon
service git
{
        disable         = no
        type            = UNLISTED
        port            = 9418
        socket_type     = stream
        wait            = no
        user            = git
        server          = /usr/lib/git-core/git-daemon
        server_args     = --inetd --export-all --enable=receive-pack --base-path=/srv/git
        log_on_failure  += USERID
        only_from       = 192.168.0.0/24 127.0.0.1
}

設定項目の意味は次の通り。

user
git-daemonを実行するユーザ
server
git-daemonへのフルパス
server_args
git-daemonに渡す引数
--base-path=/srv/git
リポジトリのルートディレクトリを/srv/gitに設定
--enable=receive-pack
認証なしでpushできるようにする(xinetd経由で動作させた場合は認証機構がないため)
log_on_failure
接続に失敗した場合、ユーザ名をログに記録する

起動設定が整ったところで、xinetdの設定を再読み込みする。

sudo service xinetd reload

公開用のリポジトリの作成

sandboxというリポジトリを/srv/gitに作成する場合の例。 まずは適当な場所でローカルリポジトリを作成、コミットする。

mkdir temp
cd temp/
git init
touch README
git add README
git commit -m "initial commit"

--bareオプションを付けて公開用のリポジトリを作成する。 (リポジトリのオーナgitで実行するか、chown -Rしてオーナを変更するのを忘れないこと)

sudo -u git -s
git clone --bare temp/ /srv/git/sandbox.git
exit

作成したローカルリポジトリは不要になるので削除する。

rm -rf temp/

git cloneで公開用リポジトリを複製できるかどうか試す。

$ git clone git://localhost/sandbox.git
Initialized empty Git repository in /home/smdn/sandbox/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.