前回、gitリポジトリを管理するツールgitoliteをインストールして、管理ツールgitolite-adminリポジトリをcloneしました。(このエントリでの「サーバ」とか「クライアント」のざっくりした用語は前回のブログに合わせて使ってます)
今回はgitolite-adminを使うツボというか、どうやってgitリポジトリを管理するのかを理解するところまで進めます。といっても、ちょっと調べてみたらややこしいことにはならないようです。基本的にはcloneしたgitolite-adminの下に出来てきた、
conf/gitolite.conf
このファイルにリポジトリごとに、ユーザのアクセス権の設定を書き、
keydir/
このディレクトリにユーザからごにょごにょして送ってもらった公開鍵を置いてマスターリポジトリにpushするだけのようです。
…ということで別アカウントでgitリポジトリにアクセスしてみるテストをしてみます。前回の準備編ではgitolite-adminをインストールしたクライアントは管理者権限を与えているので、別クライアントを用意してこれを権限の低いアカウントとしてみます(ここではクライアントBとでも名付けておきます)。
クライアントBでssh-keygenで公開鍵を作成します。公開鍵の作成時にパスフレーズを設定すると、git pushやgit pullなどのリモートリポジトリの操作時にパスフレーズを要求されます。ちょっと面倒だけど、毎回パスフレーズを入力して安全性を確保したい人はパスフレーズを設定しておきましょう。
注意。サーバのログファイルには公開鍵のファイル名が記録されます。また、後述するconf/gitolite.confに書くアクセス権の設定はこのファイル名でハンドリングさせるので、「どこそこの誰それ」と判るようなファイル名にしておいたほうがよいでしょう。
作成した公開鍵(仮にhoge.pubというファイルにしておきます)をごにょごにょして、gitolite-adminをインストールしたクライアント(面倒なので以降、クライアントAと名づけます)のkeydirにコピーします。そしてgitのaddコマンドでローカルリポジトリにhoge.pubを追加します。
git add hoge.pub
続いてconf/gitolite.confに上記で追加したアカウント(=ファイル名)に対してリポジトリ毎のアクセス権を書きます。gitolite-adminをインストールした状態でのgitolite.confは、
repo gitolite-admin RW+ = jun_ya repo testing RW+ = @all
となっています。2行目の"RW+ = jun_ya"は前回の記事で行った、
$ gitolite setup -pk jun_ya.pub
の管理者権限設定のアカウント(=ファイル名)です。jun_yaアカウントはgitolite-adminリポジトリに対しては"RW+"権限を持もっています。直感的に"R"は読み込み、"W"は書き込みであると判るのですが、"+"は何だろう?とググったら"git reset"が可能なアカウントとのことです。resetって何だろうかまだ判らなけいけど、名前からして特権操作っぽいですね。
また、testingリポジトリ(サーバにgitoliteをインストールしたらtestingリポジトリという実験用リポジトリが作成されます)の"RW+ = @all"の"@all"はグループ指定でしょうね。testingリポジトリはアクセス出来る人に対しては全ての権限を与えるような設定。
で、今はまだリポジトリを作成していないので、gitolite.confは何も編集しません
ここまでの変更をコミットしてみます。
git commit -m "add hoge account"
そして、ローカルリポジトリをサーバのリモートリポジトリにpushしてみます。
git push
これでリモートリポジトリにhogeアカウントの追加が反映されたことになります。
このようにgitoliteは、gitolite-adminをインストールしたクライアントのkeydirディレクトリに、追加したいアカウントの公開鍵をコピーし、そのアカウントに対してリポジトリのアクセス権をgitolite.confに書いて、git pushするという流れで管理していくようです。
次回はクライアントBからgitで何かをcloneしてみようか。