GitoliteとGitWebを連携させる方法(Gitリポジトリの閲覧とBASIC認証の自動化)

Gitリポジトリのアクセス制御を行う「Gitolite」とWebフロントエンドの「GitWeb」を導入してみました。

個々の導入に関してはともかく、GitoliteとGitWebの連携に関する情報があまりなくハマったため、GitoliteとGitWebを連携させる方法を紹介します。

  1. GitoliteのリポジトリをGitWebで表示する方法
  2. GitWebのBASIC認証をGitoliteと連携させる方法

GitoliteのリポジトリをGitWebで表示する方法

Gitoliteで管理するリポジトリをGitWebから閲覧するためには、Gitoliteで管理しているリポジトリディレクトリ・ファイルのパーミッションを変更し、Webサーバー(Apache)がGitoliteのリポジトリにアクセスできるようします。

(Gitoliteの管理用リポジトリ(gitolite-admin.git)の設定ファイル(gitolite.conf)で、GitWebのアクセス権限を設定(R = gitwebを追加)する方法もあるようですが、今回の方法では特に必要ありません。)

まず、Webサーバー(Apache)の実行ユーザー(apache)をGitoliteの実行グループ(gitolite)に追加します。

su -
usermod -a -G gitolite apache

次に、Gitoliteグループ(gitolite)のユーザーがリポジトリにアクセスできるようにするため、リポジトリがあるディレクトリとリポジトリのディレクトリ・ファイルのパーミションを変更します。

chmod g+rx /home/gitolite
chmod -R g+r /home/gitolite/repositories
find /home/gitolite/repositories -type d -exec chmod g+x {} +

新規作成するリポジトリも同様のパーミッションにするため、Gitoliteの設定(.gitolite.rc)でumask値を変更します。

vi /home/gitolite/.gitolite.rc
.gitolite.rc
# $REPO_UMASK = 0077;
# ↓ 変更
$REPO_UMASK = 0027;

Gitoliteで管理するリポジトリの場所をGitWebの設定(gitweb.conf)で指定します。

vi /etc/gitweb.conf
gitweb.conf
# $projectroot = "/srv/git/repositories";
# ↓ 変更
$projectroot = "/home/gitolite/repositories";

以上でGitWebからGitoliteで管理するリポジトリを閲覧できるようになります。

GitWebのBASIC認証をGitoliteと連携させる方法

ユーザーがGitoliteのリポジトリへアクセスするための公開鍵認証を利用して、GitWebのBASIC認証をユーザー自身で管理できるようにします。

まず、BASIC認証を行うための「.htaccess」ファイルをGitWebの公開ディレクトリ(/var/www/git)に作成します。

su -
cd /var/www/git/
vi .htaccess
.htaccess
AuthType Basic
AuthName "Please enter your ID and password"
AuthUserFile /var/www/git/.htpasswd
AuthGroupFile /dev/null
require valid-user

次に、BASIC認証用に「.htpasswd」ファイルを作成します。Gitoliteの実行グループ(gitolite)でアクセスできるようにするため、所有グループとパーミションを変更します。

touch .htpasswd
chown :gitolite .htpasswd
chmod g+rw .htpasswd

「.htpasswd」ファイルの場所をGitoliteの設定(.gitolite.rc)で指定します。

vi /home/gitolite/.gitolite.rc
.gitolite.rc
# $HTPASSWD_FILE = "";
# ↓ 変更
$HTPASSWD_FILE = "/var/www/git/.htpasswd";

後は、Gitoliteを利用する各々のユーザーが各自SSHでGitoliteにアクセスし、パスワードの設定を行います。

ssh gitolite@example.com htpasswd

Gitoliteのインストール時に作成した管理ユーザーなどGitoliteの実行ユーザー(gitolite)としてシェルログインもできるユーザーの場合や、「~/.ssh/config」でGitoliteへのSSH接続で使用する秘密鍵を指定していない場合は、Gitolite専用の秘密鍵を指定してSSHに接続します。

ssh gitolite@example.com -i ~/.ssh/admin htpasswd

Gitolite専用の秘密鍵を指定しない場合、通常の秘密鍵(id_rsaなど)が使われるため、SSH接続が行える場合でも単にLinuxの「htpasswd」コマンドが実行されるのみになり、連携機能を利用したパスワードの設定は行えません。

以上で、最初に作成した「.htpasswd」ファイルに自動的にパスワードが設定され、Gitoliteのアクセス制御とGitWebのBASIC認証を連携させることができます。なお、パスワードを変更する場合も同様の方法で行うことでき、Gitoliteの各ユーザーが自分自身でGitWebのパスワードを管理できるようになります。

コメント (1)

  • mn
  • 2012-04-24 21:31

大変参考になりました!ありがとうございます
「404 No projects found」から開放されました。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/220/trackback/
この記事のURI
http://dxd8.com/archives/220/