Cgit

提供: ArchWiki
2015年7月6日 (月) 19:19時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「Category:バージョン管理システム en:Cgit [http://git.zx2c4.com/cgit/ Cgit] は git バージョン管理システムの高速なウェブインタ...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Cgitgit バージョン管理システムの高速なウェブインターフェイスです。キャッシュを使うことで git サーバーの負担を減らしています。

インストール

公式リポジトリから cgit をインストールしてください。

cgit を利用するには、システムに Apache などのウェブサーバーをインストールする必要があります。

ウェブサーバーの設定

Apache

以下を /etc/httpd/conf/httpd.conf ファイルの末尾に追加するか /etc/httpd/conf/extra/ ディレクトリのファイルに記述します:

ScriptAlias /cgit/ "/usr/lib/cgit/cgit.cgi/"
Alias /cgit-css "/usr/share/webapps/cgit/"
<Directory "/usr/share/webapps/cgit/">
   AllowOverride None
   Options None
   Require all granted
</Directory>
<Directory "/usr/lib/cgit/">
   AllowOverride None
   Options ExecCGI FollowSymlinks
   Require all granted
</Directory>

次の行をアンコメントして httpd.conf で cgi モジュールをロードするようにしてください:

LoadModule cgi_module modules/mod_cgi.so

httpd.service を再起動することで変更が適用されます。

Lighttpd

The following configuration will let you access cgit through http://your.server.com/cgit with http://your.server.com/git redirecting to it. It is not perfect (for example you will see "cgit.cgi" in all repos' url) but works.

Create the file /etc/lighttpd/conf.d/cgit.conf:

server.modules += ("mod_redirect",
                  "mod_alias",
                  "mod_cgi",
                  "mod_fastcgi",
                  "mod_rewrite" )

var.webapps  = "/usr/share/webapps/"
$HTTP["url"] =~ "^/cgit" {
    server.document-root = webapps
    server.indexfiles = ("cgit.cgi")
    cgi.assign = ("cgit.cgi" => "")
    mimetype.assign = ( ".css" => "text/css" )
}
url.redirect = (
    "^/git/(.*)$" => "/cgit/cgit.cgi/$1",
)

And include this file in /etc/lighttpd/lighttpd.conf:

include "conf.d/cgit.conf"

and restart lighttpd.

Lighttpd サブドメイン

This alternative lighttpd configuration will serve Cgit on a sub-domain like git.example.com with optional SSL support, and rewrites creating nice permalinks:

   # GIT repository browser
   #$SERVER["socket"] == "127.0.0.1:443" {
   $SERVER["socket"] == "127.0.0.1:80" {
     #ssl.engine                    = "enable"
     #ssl.pemfile                   = "/etc/lighttpd/ssl/git.example.com.pem"
     
     server.name          = "git.example.com"
     server.document-root = "/usr/share/webapps/cgit"
     
     index-file.names     = ( "cgit.cgi" )
     cgi.assign           = ( "cgit.cgi" => "/usr/share/webapps/cgit/cgit.cgi" )
     url.rewrite-once     = (
       "^/([^?/]+/[^?]*)?(?:\?(.*))?$"   => "/cgit.cgi?url=$1&$2",
     )
   }

Nginx

fcgiwrap を使う

The following configuration uses fcgiwrap and will serve Cgit on a subdomain like git.example.com.

Configure Nginx:

/etc/nginx/nginx.conf
worker_processes          1;
 
events {
  worker_connections      1024;
}
 
http {
  include                 mime.types;
  default_type            application/octet-stream;
  sendfile                on;
  keepalive_timeout       65;
  gzip                    on;
 
  # Cgit
  server {
    listen                80;
    server_name           git.example.com;
    root                  /usr/share/webapps/cgit;
    try_files             $uri @cgit;

    location @cgit {
      include             fastcgi_params;
      fastcgi_param       SCRIPT_FILENAME $document_root/cgit.cgi;
      fastcgi_param       PATH_INFO       $uri;
      fastcgi_param       QUERY_STRING    $args;
      fastcgi_param       HTTP_HOST       $server_name;
      fastcgi_pass        unix:/run/fcgiwrap.sock;
    }
  }
}

uwsgi を使う

The following example will setup cgit using the native cgi plugin for uwsgi.

First, install uwsgi and uwsgi-plugin-cgi.

Add below server block to your configuration:

 server {
   listen 80;
   server_name git.example.com;
   root /usr/share/webapps/cgit;
 
 # Serve static files with nginx
 location ~* ^.+(cgit.(css|png)|favicon.ico|robots.txt) {
     root /usr/share/webapps/cgit;
     expires 30d;
   }
   location / {
     try_files $uri @cgit;
   }
   location @cgit {
     gzip off;
     include uwsgi_params;
     uwsgi_modifier1 9;
     uwsgi_pass unix:/run/uwsgi/cgit.sock;
   }
 } 

Add a uwsgi configuration for cgit.

/etc/uwsgi/cgit.ini
[uwsgi]
master = true
plugins = cgi
socket = /run/uwsgi/%n.sock
uid = http
gid = http
procname-master = uwsgi cgit
processes = 1
threads = 2
cgi = /usr/lib/cgit/cgit.cgi

Enable and start the corresponding socket (you could also enable and start the service manually).

# systemctl enable uwsgi@cgit.socket
# systemctl start uwsgi@cgit.socket

Cgit の設定

基本設定

Before you can start adding repositories you will first have to create the basic cgit configuration file at /etc/cgitrc.

#
# cgit config
#

css=/cgit.css
logo=/cgit.png

# Following lines work with the above Apache config
#css=/cgit-css/cgit.css
#logo=/cgit-css/cgit.png

# Following lines work with the above Lighttpd config
#css=/cgit/cgit.css
#logo=/cgit/cgit.png

# if you do not want that webcrawler (like google) index your site
robots=noindex, nofollow

# if cgit messes up links, use a virtual-root. For example has cgit.example.org/ this value:
virtual-root=/

リポジトリの追加

Now you can add your repos:

#
# List of repositories.
# This list could be kept in a different file (e.g. '/etc/cgitrepos')
# and included like this:
#   include=/etc/cgitrepos
#

repo.url=MyRepo
repo.path=/srv/git/MyRepo.git
repo.desc=This is my git repository

repo.url=MyOtherRepo
repo.path=/srv/git/MyOtherRepo.git
repo.desc=That's my other git repository

If you prefer not having to manually specify each repository, it is also possible to configure cgit to search for them:

scan-path=/srv/git/

If you are coming from gitweb and want to keep the descriptions and owner information, then use:

enable-git-config=1

For detailed documentation about the available settings in this configuration file, please see the manpage (`man cgitrc`).

シンタックスハイライト

Cgit supports syntax highlighting when viewing blobs. To enable syntax highlighting, you have to install the highlight package.

# pacman -S highlight

Edit /usr/lib/cgit/filters/syntax-highlighting.sh. Comment out version 2 and comment in version 3. You may want to add --inline-css to the options of highlight for a more colorfull output without editing cgit's css file.

 # This is for version 2
 #exec highlight --force -f -I -X -S "$EXTENSION" 2>/dev/null
 
 # This is for version 3
 exec highlight --force --inline-css -f -I -O xhtml -S "$EXTENSION" 2>/dev/null

Enable the filter in /etc/cgitrc

source-filter=/usr/lib/cgit/filters/syntax-highlighting.sh

Note: If you edit the /usr/lib/cgit/filters/syntax-highlighting.sh, the changes will be lost the next time cgit is updated. To avoid this, copy /usr/lib/cgit/filters/syntax-highlighting.sh to /usr/lib/cgit/filters/syntax-highlighting-edited.sh, and change /etc/cgitrc to use the copied file instead

source-filter=/usr/lib/cgit/filters/syntax-highlighting-edited.sh

Alternately you can prevent pacman from extracting the file by adding the following to /etc/pacman.conf:

NoExtract = usr/lib/cgit/filters/syntax-highlighting.sh

統合

Gitosis

If you want to integrate with gitosis you will have to run two commands to give apache permission to look though the folder.

# chgrp http /srv/gitosis
# chmod a+rx /srv/gitosis

Gitolite

gitolite によって管理されているリポジトリを追加する場合、ウェブサーバーがファイルにアクセスできるようにパーミッションを変更する必要があります。

  • http ユーザーを gitolite グループに追加:
    • # usermod -aG gitolite http
  • 今後のリポジトリのパーミッションを変更:
  • gitolite ホームディレクトリと既存のリポジトリのパーミッションを変更。以下のコマンドを実行してください:
    • # chmod g+rX /var/lib/gitolite
    • # chmod -R g+rX /var/lib/gitolite/repostitories

トラブルシューティング

snapshots が正しく表示されない

If you have enabled scan-path as well as snapshots, the order in cgitrc matters. According to cgit mailing list, snapshots should be specified before scan-path

snapshots=tar.gz tar.bz2 zip
scan-path=/path/to/your/repositories

source-filter が正しく機能しない

If you have enabled scan-path, again, the order in cgitrc matters. source-filter should be specified before scan-path, otherwise it will have no effect.

参照