GitWebで簡単にGitサーバーの情報を閲覧できるようにする

Gitサーバーを単純にたてただけだと、ソースコードの閲覧など Subversion でデフォルトでできていた、以下のような感じのWebページが存在しない。

subversion_browse

GitHub とか Bitbucket とか使ってれば、そんなこと気にしなくてもよいのだが、まぁ諸般の事情で独自にGitサーバーを構築したいこともあるだろう。

ということで、GitWebがお手軽そうなので、試してみる。

環境は、レンタルサーバーのCentOS6.3

1.インストール

http://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-GitWeb

# yum search gitweb
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                         | 3.7 kB     00:00
extras                                                                       | 3.4 kB     00:00
updates                                                                      | 3.4 kB     00:00
updates/primary_db                                                           | 2.5 MB     00:00
vz-base                                                                      |  951 B     00:00
vz-updates                                                                   |  951 B     00:00
======================================= N/S Matched: gitweb ========================================
gitweb.noarch : Simple web interface to git repositories

  Name and summary matches only, use "search all" for everything.

yum でインストール

# yum install -y gitweb

2.Gitのビルド

GitWebの設定をするために、ソースコードから、Gitをビルドする。

Git でソースコードを取得する

# git clone git://git.kernel.org/pub/scm/git/git.git
Initialized empty Git repository in /home/piroto/download/git/.git/
remote: Counting objects: 183667, done.
remote: Compressing objects: 100% (47770/47770), done.
remote: Total 183667 (delta 134102), reused 183217 (delta 133864)
Receiving objects: 100% (183667/183667), 49.28 MiB | 3.70 MiB/s, done.
Resolving deltas: 100% (134102/134102), done.

GITWEB_PROJECTROOT に、Gitリポジトリのルートパスをを指定して make

# cd git
# make GITWEB_PROJECTROOT="/var/www/git" prefix=/usr gitweb
GIT_VERSION = 2.3.3.262.ge80e85a
    SUBDIR gitweb
    SUBDIR ../
make[2]: `GIT-VERSION-FILE' is up to date.
    GEN gitweb.cgi
    GEN static/gitweb.js
# cp -Rf gitweb /var/www

3.VirtualHostの設定

httpd.conf に、rev.typea.info で、GitWebにアクセスできるように VirtualHostの指定を行う。

<VirtualHost *:80>
    ServerName rev.typea.info
    DocumentRoot /var/www/gitweb
    <Directory /var/www/gitweb>
        Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride All
        order allow,deny
        Allow from all
        AddHandler cgi-script cgi
        DirectoryIndex gitweb.cgi
    </Directory>
</VirtualHost>

4.トラブルシュート

以下のようなエラー

Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at /var/www/gitweb/gitweb.cgi line 20.
BEGIN failed--compilation aborted at /var/www/gitweb/gitweb.cgi line 20.

ライブラリをインストールする。

http://flatworld21.blogspot.jp/2012/04/perlcant-locate-timehirespm.html

# yum install perl-Time-HiRes

5.Basic認証をかける

ソースコードや設定ファイルには、いろいろなアクセスキーやら、パスワードやらをハードコーディングすることが多いため(昔Amazonのアクセスキーが公開されていると、Amazonから電話がかかってきたことがある)まずいため、上記のVirtualHostの設定を思い直して、Basic認証をかける状態に最低限しておく。

5.1 アカウントの登録

# cd /etc/httpd
# htpasswd /etc/httpd/.passwd git
New password:
Re-type new password:
Adding password for user git

5.2 VirtualHostの書き直し

<VirtualHost *:80>
    ServerName rev.typea.info
    DocumentRoot /var/www/gitweb
    <Directory /var/www/gitweb>
        Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride All
        order allow,deny
        Allow from all
        AddHandler cgi-script cgi
        DirectoryIndex gitweb.cgi
    </Directory>
    <Directory "/">
        AuthType Basic
        AuthName "Git Repository"
        AuthUserFile /etc/httpd/.passwd
        Require user git
    </Directory>
</VirtualHost>

6.出来上がり

6.1 httpd のリスタート

# /sbin/service httpd restart

6.2 Basic認証

gitweb_basic_auth

6.3 プロジェクトのソースコードが閲覧可能に!

もちろん、コミット履歴やログやタグなんかも確認できます。便利!

gitweb02