近年、分散バージョン管理システム「Git」が急速にシェアを伸ばしています。筆者は、チケットシステムやバージョン管理の勉強会などを開催したりしていますが、Gitユーザーがかなり増えてきていると感じます。
しかしながら、そのような勉強会でアンケートを取ってみると、実案件では半分以上の人がSubversionを利用しており、Gitの導入はまだまだ進んでいません。移行コストが掛かったり、プロジェクトマネージャ層への知名度がまだまだ低いというのもありますが、理由の1つとして、ユーザー管理が煩雑であったり、アクセス制御に関する情報が不足しているということもあると思います。
そういうわけで本稿では、Gitリポジトリのユーザー管理やアクセス制御を簡単に行う「Gitolite」を紹介します。
なお、本稿ではGitの利用方法については紹介しませんので、Git自身の使い方については改めて「分散バージョン管理システムGit入門」などを参照してください。
「Gitolite」は、Gitで共有リポジトリのユーザー管理やアクセス管理を行うためのツールで、GitHubで公開されています。リポジトリの管理とリポジトリにアクセスするユーザーの管理、リポジトリ・ブランチ・ファイル/ディレクトリへのアクセス制御ができます。
Gitのユーザー管理については、同様なツールとして「Gitosis」が使われていましたが、Gitoliteの方が高機能であるため、最近ではGitoliteが利用されています。
Subversionでは、共有リポジトリはApacheを利用してHTTP(DAV)プロトコルで公開していますが、Gitoliteでは、「ssh」の鍵の管理によってユーザーを管理します。
管理情報は、「gitolite-admin」という名前のgitリポジトリで管理されており、このリポジトリへユーザーの鍵やリポジトリの設定情報をGitを用いてプッシュすることにより、リポジトリを管理します。図に、その概要を記述します。
Gitoliteのユーザーは、ユーザーの公開鍵をgitolite-adminリポジトリに登録することにより管理します。
リポジトリのアクセス権は、gitolite-adminリポジトリに格納された設定ファイル(gitolite.conf)により管理します。リポジトリの作成も設定ファイルに新規リポジトリを追加すると、可能になります。
各ユーザーは秘密鍵を利用してsshプロトコルでリポジトリへアクセスします。Gitoliteは登録された公開鍵に対応するユーザーを認証します。ユーザーの端末では、sshの秘密鍵の設定が必要です。
なお、本稿では、コマンドの先頭は以下のように意味するので、覚えておいてください。
Gitoliteをインストールするサーバをユーザー端末として利用することも可能ですが、説明上、クライアント側の操作とサーバ側の操作を混同しないように分けて説明します。クライアントのセットアップは、管理者端末も一般ユーザーの端末も同じです。
UbuntuやFedoraのようなLinuxの場合は、「yum」「aptitude」コマンドを利用してgitパッケージをインストールすれば完了です。
Windowsの場合は、Cygwinに同梱のGitを利用する方法と、Gitの配布サイトから取得できるMSysGitを利用する方法があります。
MSysGitはシェルの日本語入力に不具合があるので(1.7.11-preview0620の時点)、シェルから日本語を入力したい場合は、Cygwinを利用するか、MSysGitのシェルをWindows標準のコンソールから起動できるようにしておくといいでしょう。
Mac OS Xでは、Xcodeをインストールすると、Gitもインストールされます。
Windowsを利用している場合、「HOME」環境変数も設定しましょう。例えば、「C:\Users\okamototk」などに設定します。
必要に応じて下記のようにGitの設定をしておきましょう。
$ git config --global user.name "Takashi Okamoto"
$ git config --global user.email okamototk@homu.com
$ git config --global core.quotepath false (ファイル名の文字化けを防ぐ)
また、ファイル名に日本語を利用したい場合は、lsの出力の文字化けを防ぐために.profileに次の設定を行っておきましょう。~/.profileファイル(Windowsの場合は、「C:\Program Files\Git\etc\profile」)へ下記の行を追記します。
alias ls='/bin/ls --show-control-chars'
ssh-keygenコマンドを利用してリポジトリにアクセスする鍵を作成します。ここでは、管理者ようの鍵を「admin」という名前で作成してみます。
Linuxの場合は、sshパッケージに含まれるssh-keygenコマンドで、MSysGitを利用している場合は、MSysGitをインストールした下のbinディレクトリにssh-keygen.exeコマンドがあるので、それを使います。
ここでは、MSysGitを利用した例で紹介します。
C:\Users\okamototk>"c:\Profram Files\Git\bin\ssh-keygen.exe"
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa): admin
Enter passphrase (empty for no passphrase): (何も入力せず[Enter]キーを押す)
Enter same passphrase again:(何も入力せず[Enter]キーを押す)
Your identification has been saved in admin.
Your public key has been saved in admin.pub.
The key fingerprint is:
ce:1d:13:ed:2d:d4:68:fc:f2:0b:26:8c:b6:13:f5:d0 okamototk@MYPC
鍵のパスワードは必要に応じて設定してください。ここではパスワードは設定せずに鍵を作ってみます。コマンドを実行すると、カレントディレクトリに以下の2つのファイルが作成されます。
Gitサーバにアクセスするための秘密鍵を登録します。ホームディレクトリ(Windowsでは環境変数HOMEで設定したディレクトリ)の下の「.ssh」ディレクトリ(なければ作成)に、先ほど作成した秘密鍵(admin)をコピーしてください。
公開鍵(admin.pub)はコピーしてもしなくてもどちらでもいいですが、なくすと困るので、一緒に「.ssh」ディレクトリへコピーしておきましょう。
コピーしたら、「~/.ssh/config」ファイルに公開鍵を利用してアクセスする情報を記述します。
host gitserver
user gitolite
hostname 192.168.1.8(Gitサーバのホスト名 or IP)
port 22
identityfile ~/.ssh/admin
Gitoliteは、標準では「gitolite」というUNIXユーザー名でアクセスを受け付けるので、userにgitoliteを設定しています。この設定で、URL「ssh://gitserver/{リポジトリ名}」でGitリポジトリへアクセスできるようになります。ここまでで、「.sshディレクトリ」には、下記のファイルが存在しているはずです。
Gitoliteのサーバのセットアップを行いましょう。Gitoliteのサーバには、Linuxを利用します。先ほど作成した管理者の公開鍵(admin.pub)をリポジトリサーバにコピー(例えば、「/tmp/admin.pub」など)しておき、全てのユーザーに読み込みを許可しておきます。
Gitoliteのインストールは、gitoliteパッケージをインストールすれば完了です。Sientific Linux6.1/CentOS 6.1の場合。EPELの設定を行い、gitoliteパッケージをインストールします。下記の操作をルートユーザで行ってください。
gitoliteパッケージをインストールすると、gitoliteユーザーが作成されます。gitoliteユーザーでGitoliteのセットアップを行う「gl-setup」コマンドを、管理者用の公開鍵を引数に指定して実行します。
# chmod a+r /tmp/admin.pub
# su - gitolite
$ gl-setup /tmp/admin.pub
……
hit enter……([Enter]キーを押す)
この後.gitolite.rc編集画面になりますが、「ESC :(コロン)q」でviを終了してください。
これで、admin鍵を持つユーザーを管理者として登録し、Gitoliteのセットアップを完了しました。次ページでは、使い方を紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.