cgit

提供: ArchWiki
ナビゲーションに移動 検索に移動

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

以下の設定で http://your.server.com/git または http://your.server.com/cgit から cgit にアクセスできるようになります。完璧ではありませんが動作はします (全てのリポジトリの url で "cgit.cgi" が見えてしまいます)。

/etc/lighttpd/conf.d/cgit.conf ファイルを作成:

server.modules += ( "mod_cgi", "mod_alias" )

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

alias.url += (
    "/git" => "/usr/share/webapps/cgit/cgit.cgi",
)
$HTTP["url"] =~ "^/git" {
    cgi.assign = ( "" => "" )
}

/etc/lighttpd/lighttpd.conf からファイルを include:

include "conf.d/cgit.conf"

そして lighttpd を再起動してください。

Lighttpd サブドメイン

SSL を有効にして git.example.com のようなサブドメインで Cgit をアクセスできるようにして、パーマリンクを作成する lighttpd 設定:

server.modules += ( "mod_cgi", "mod_rewrite" )

#$SERVER["socket"] == ":443" {
$SERVER["socket"] == ":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" => "" )
    url.rewrite-once     = (
        "^/([^?/]+/[^?]*)?(?:\?(.*))?$"   => "/cgit.cgi?url=$1&$2",
    )
}

Nginx

fcgiwrap を使う

以下を設定することによって fcgiwrap を使って git.example.com のようなサブドメインで Cgit を表示できます。

fcgiwrap.socket起動有効化してから、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 を使う

以下の例では uwsgi によってネイティブの cgi プラグインを使って cgit をセットアップします。

まず、uwsgiuwsgi-plugin-cgi をインストールしてください。

以下の server ブロックを設定に追加:

/etc/nginx/nginx.conf
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;
  }
} 

cgit の uwsgi 設定を追加:

/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

適切なソケットを起動・有効化 (手動でサービスを起動・有効化することもできます):

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

h2o

Package h2o-gitAUR has its own CGI wrapper fastcgi-cgi, which supports cgit with the following configuration.

/etc/h2o/h2o.conf
  "git.domain.tld:443":
    listen:
      port: 443
      ssl:
        ...
    paths:
      /cgit.css:
        file.file: /usr/share/webapps/cgit/cgit.css
        file.send-compressed: ON
      /favicon.ico:
        file.file: /usr/share/webapps/cgit/favicon.ico
        file.send-compressed: ON
      /robots.txt:
        file.file: /usr/share/webapps/cgit/robots.txt
      /cgit.png:
        file.file: /usr/share/webapps/cgit/cgit.png
      /:
        fastcgi.spawn: /usr/share/h2o/fastcgi-cgi
        setenv:
          SCRIPT_FILENAME: /usr/lib/cgit/cgit.cgi
        compress: ON

Caddy

Caddycaddy-cgi プラグインをインストールしてください (例: caddy-with-cgiAUR)。以下の設定は最新の caddy-cgi プラグインの except サブディレクティブを使用します:

/etc/caddy/caddy.conf.d/cgit.conf
git.example.com {
  # other settings such as TLS, headers, ...
  root /usr/share/webapps/cgit
  cgi {
    match /
    exec  /usr/share/webapps/cgit/cgit.cgi
    except /cgit.png /favicon.ico /cgit.css /robots.txt
  }
}

cgit の設定

設定オプションの一覧は cgitrc(5) を見てください。

基本設定

リポジトリを追加する前に、先に /etc/cgitrc に cgit の基本設定ファイルを作成してください。

#
# 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

# Allow http transport git clone
#enable-http-clone=0

# 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, cgit.example.org/ has this value:
virtual-root=/

リポジトリの追加

リポジトリを追加:

#
# 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

# For a non-bare repository
repo.url=MyOtherRepo
repo.path=/srv/git/MyOtherRepo.git
repo.desc=That's my other git repository

リポジトリを手動で指定したくない場合、cgit に自動的に検索させるように設定することもできます:

scan-path=/srv/git/

上記の方法を使用する場合、.git/description ファイルに説明を追加して、作者を表示するための以下の行を追加してください:

.git/config
[gitweb]
        owner = John Cena <john@riseup.net>

gitweb から移行して説明とオーナー情報を変更したくない場合:

enable-git-config=1

設定ファイルで利用できる設定に関する詳細は man ページ (cgitrc(5)) を見て下さい。

シンタックスハイライト

Cgit はソースコードを表示したときのシンタックスハイライトをサポートしています。シンタックスハイライトを有効にする方法は複数存在します。

python-pygments を使う

python-pygments をインストールして /etc/cgitrc にフィルターを追加:

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

カラーのスタイルを変更したい場合、syntax-highlighting.py ファイル内で HtmlFormatter に渡されている style 引数を修正してください。例えば、カラースタイルを 'tango' に変更するには:

 formatter = HtmlFormatter(encoding='utf-8', style='tango')

利用可能なカラースタイルは以下のコマンドで確認できます:

 $ python
 >>> from pygments.styles import get_all_styles
 >>> list(get_all_styles())
 ['manni', 'igor', 'xcode', 'vim', 'autumn', 'vs', 'rrt', 'native', 'perldoc', 'borland', 'tango', 'emacs', 'friendly', 'monokai', 'paraiso-dark', 'colorful', 'murphy', 'bw', 'pastie', 'paraiso-light', 'trac', 'default', 'fruity']

markdown ファイル (README.md など) をカラー化したい場合は、python-pygments-markdown-lexerAUR をインストールしてください。

highlight を使う

highlight パッケージをインストールしてください。

/usr/lib/cgit/filters/syntax-highlighting.sh/usr/lib/cgit/filters/syntax-highlighting-edited.sh にコピーします。そして、コピーしたファイルを編集して、バージョン2をコメントアウトしてバージョン3をアンコメントしてください。また、highlight のオプションに --inline-css を追加することで、cgit の css ファイルを弄らなくてもよりカラフルな出力ができます:

 # 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

/etc/cgitrc でフィルターを有効化:

source-filter=/usr/lib/cgit/filters/syntax-highlighting-edited.sh
ノート: /usr/lib/cgit/filters/syntax-highlighting.sh を直接編集してしまうと cgit がアップデートされたときに変更した部分が戻ってしまいます。

統合

Gitosis

gitosis と統合したい場合、以下の2つのコマンドを実行して apache にフォルダを閲覧する権限を与える必要があります:

# 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/repositories

トラブルシューティング

snapshots が正しく表示されない

scan-pathsnapshots の両方を有効にした場合、cgitrc での順番が大事です。cgit のメーリングリスト によれば、snapshotsscan-path よりも前に指定する必要があります:

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

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

上記と同じように source-filterscan-path より前に記述しないと適用されません。

参照