2014年8月16日土曜日

GitWeb で、リポジトリを参照できるように、設定してみる。

概要

GitWeb を利用して、以下のような条件で、リポジトリを Web で参照できるように、設定してみた。

  • Gitolite3 管理用リポジトリは、公開対象から除外する。
  • Gitolite3 管理用リポジトリで、公開設定が行える。

参考サイト




利用ソフト

  • Apache2 (2.4.7-1ubuntu4.1)
  • git (1:1.9.1-1)
  • Gitolite3 (3.5.3.1-2)
  • GitWeb (1:1.9.1-1)


前提条件

Ubuntu 14.04 上で、設定を行った。
Apache2 および git は、インストール済みとする。

Gitolite

Gitolite3 のインストールおよび設定は、以下のサイトを参考に行った。
Gitolite3 パッケージ名は、gitolite3 と、指定する必要があるので注意。gitolite は、バージョン2.3で古かった。
Gitolite3 ユーザーは、パッケージインストール時、/var/lib/gitolite3 に自動的に作成される。

Git管理の神ツール「Gitolite」なら、ここまでできる! (1/2)


GitWeb

インストール

sudo aptitude install gitweb
sudo a2enmod cgi

Apache2 の設定

まず、Apache の設定で、/etc/apache2/conf.d/gitweb がインストールされているが、場所もファイル名も間違っている。
sites-available に gitweb.conf とリネームして移動して、conf.d ディレクトリを削除する。
gitweb.conf の中身は、変更なし。

GitWeb の設定

次に、/etc/gitweb.conf を修正。
$projectroot には、Gitolite3 のリポジトリを指定。その他は、コメントインするだけ。
sudo vi /etc/gitweb.conf

$projectroot = "/var/lib/gitolite3/repositories";
$git_temp = "/tmp";
$home_text = "indextext.html";
$projects_list = $projectroot;
@stylesheets = ("static/gitweb.css");
$javascript = "static/gitweb.js";
$logo = "static/git-logo.png";
$favicon = "static/git-favicon.png";
@diff_opts = ();

リポジトリパーミッションの設定

このままでは、www-data ユーザで、Gitolite3 のリポジトリにアクセスする権限が無いので、その設定を行う。
sudo gpasswd -a www-data gitolite3
sudo chmod g+rx /var/lib/gitolite3
sudo chmod g+r /var/lib/gitolite3/projects.list
sudo chmod -R g+r /var/lib/gitolite3/repositories
sudo find /var/lib/gitolite3/repositories -type d -exec chmod g+x {} +


新規にリポジトリを追加する場合に、グループ読み取り可になるようパーミッションを設定。
sudo vi /var/lib/gitolite3/.gitolite.rc
    UMASK                           =>  0077,
                                                 ↓ 変更
    UMASK                           =>  0027,


Apache2 をリスタート
sudo apache2ctl restart


以上の設定で、すべてのリポジトリが公開できる。

公開リポジトリ設定

このままでは、管理用リポジトリも一覧に出てしまうので、指定したものだけリストアップされるように設定。

sudo vi /etc/gitweb.conf

$projects_list = $projectroot;
  ↓ 変更
$projects_list = "/var/lib/gitolite3/projects.list";

以下追加。一覧にあるリポジトリ以外は、直接 URL を指定しても表示されなくなる。
$strict_export = "true";


上記で指定した project.list ファイルには、Gitolite3 で @all または、gitweb に参照権限を付与したプロジェクトが、リストアップされる。
Gitolite3 管理リポジトリの gitolite-admin/conf/gitolite.conf ファイルを、以下のように変更して push すると、project.list ファイルに、公開リポジトリが書き込まれる。

repo  foobar
    R    =    gitweb