gitoliteというソフトウェアを使うと簡単にgitのセンターリポジトリを構築できる。安くて使い勝手のいいさくらのVPSに構築することで、簡単にプライベートなgitリポジトリを持つことができるのだ。

先日社内に発足した「もくもく会」的な集いで構築してみたので、作業メモを晒しておく。

VPSのOSはデフォルトのCentOS 5.5 64bitを前提にしているが、yum以外は他のOSでもあまり変わらないだろう。

ちなみにリモート(サーバ)のコマンドは緑、ローカル(ワークステーション)のコマンドは青で表記している。

gitのインストール (3分)

yumのリポジトリにrpmforgeを追加する。こちらの記事を参考に「サードパーティ製リポジトリ追加」を実行しよう。

% sudo wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
% sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

追加したらgitのインストール。

% sudo yum install git

git管理用ユーザの作成と設定 (1分)

ここではgitoliteというユーザがgitへのアクセスを行うことにする。

# useradd gitolite
# passwd gitolite

ローカルから鍵認証で入れるように設定しておく。やることは…

  • /home/gitolite/.ssh/を作り、パーミションを0700にする。
  • /home/gitolite/.ssh/に公開鍵(id_ras.pub)をコピーする。
  • authorized_keysという名前に変更し、パーミションを0600にする。
% cd ~
% mkdir .ssh -m 0700
% cp id_rsa.pub .ssh/authorized_keys
% chmod 0600 .ssh/authorized_keys

ローカルからログインできればok。

% ssh gitolite@sakura_vps.exapmle.com

gitoliteのインストール (1分)

以下の作業はすべて「ローカルのマシン」で行うということに注意。

% git clone git://github.com/sitaramc/gitolite
% cd gitolite/src

インストールコマンドのヘルプを見てみる。

% ./gl-easy-install --help
Usage: ./gl-easy-install [-q] user host [port] admin_name     # install
       ./gl-easy-install [-q] user host [port]                # upgrade
(snip)

ユーザ名、サーバのホスト名、管理者名が必要。

nameはgitolite接続用のユーザ名。先ほど作った「gitolite」のこと。admin_nameは自分の名前。

% ./gl-easy-install --help gitolite sakura_vps.example.com {admin_name}

-qオプションは「quiet mode」。仕組みが気になるならつけないで実行し、出力を読んでみよう。基本的にはenterを押していくだけ。

途中、gitoliteアクセス専用のキーペアを作る。パスフレーズの入力を求められるのでお好みのものを。サーバ側のauthorized_keyを見るといろいろ制限されてるので、個人的にはパスフレーズなしでもいいと思う。

インストーラがしてくれることは…

  • gitoliteアクセス用キーペアの作成
  • SSH設定ファイルの追記

作成してくれるキーペアは以下の2ファイル。

~/.ssh/{admin_user}
~/.ssh/{admin_user}.pub

~/.ssh/configには以下が追記される。

host gitolite
     user {user}
     hostname sakura_vps.example.com
     port 22
     identityfile ~/.ssh/{admin_user}

リポジトリへのアクセス (1分)

.ssh/configに設定されていれば、管理者は以下でリポジトリにアクセスできる。

gitolite:reponame.git

他のユーザがアクセスするには以下。下はSSHが22番以外のポートで待ち受けている場合に使う。

gitolite@sakura_vps.exapmle.com:reponame.git
ssh://gitolite@sakura_vps.exapmle.com:22/reponame.git

ユーザの追加 (3分)

hogeさんを追加してみよう。

% ssh-keygen -t rsa

以下のファイルが作られる。

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

秘密鍵(id_rsa)はhogeさんに渡す。安全な方法でね。

公開鍵(id_rsa.pub)はadminリポジトリにcommitする。

% mv ~/.ssh/id_rsa.pub ~/gitolite-admin/keydir/hoge.pub

公開鍵の名前は{username}.pubに固定されている。「.pub」で終わらないと怒られるので注意。

あとはgitでaddしてcommitしてpushすれば、hogeさんはリポジトリへのアクセスが可能になる。「設定ファイルにhogeさんの名前がないが大丈夫か?」と警告してくれるという親切設計。

hogeさん側は、リポジトリへアクセスするときもらった秘密鍵を使う、という設定を~/.ssh/configに書いておく。

Host sakura_vps.exapmle.com
  Port 22
  IdentityFile ~/.ssh/hoge

すでに「testing」というリポジトリが存在するので、cloneしてみよう。

% git clone gitolite@sakura_vps.exapmle.com:testing.git

リポジトリの追加 (2分)

~/gitolite-admin/conf/gitolite.confを編集する。「testing」があるので参考にしよう。Rは読み込み、Wは書き込み、+はrewindの権限。先頭に「@」がつくとグループ指定になる。

repo    dotfiles
        RW+     =   kwappa

ファイルごと / パスごとに制限かけるなど細かい設定もできるようだ。詳細はPro Gitとcloneしたgitoliteのconf/example.confを参考にしよう。

まとめ

実は足すと11分経過しているし、そもそも10分というタイトルが釣りだしごめんなさい。

しかし、gitのリモートリポジトリを簡単に持てるのは非常にありがたい。すべてのコードをgithubに晒すわけにはいかないよね。今後は個人webのソースなどもどんどんこっちで管理してしまおう。

なお、この記事の内容はほとんどこちらの記事とかぶってしまっている。社内もくもく会でやった内容を記録するために書いていたら、すでに先達がいた…というわけ。しっかり参考にさせていただいた(ありがとうございました)。

また、もくもく会で参照していたのは「Pro Git」の4-8日本語版にはまだ反映されていないので、英語がんばろう。