Gitweb : Installation et configuration d'une interface web pour git

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Gitweb est une interface web permettant de voir tous les commits, les commentaires etc... pour git.

2 Installation

Sur Debian, c'est facile :

Command apt-get
apt-get install gitweb

3 Configuration

Personnellement, j'utilise lighttpd, mais je vais essayer de donner une configuration correcte pour apache aussi.

3.1 Serveur Web

3.1.1 Lighttpd

Si vous êtes sur Lighttpd, assurez vous que les modules serveurs suivant soient bien chargés :

  • mod_cgi
  • mod_redirect

Ensuite, créer un fichier pour votre configuration de lighttpd :

Configuration File /etc/lighttpd/conf-available/50-gitweb.conf
# Gitweb
 
url.redirect += (
    "^/gitweb$" => "http://www.deimos.fr/gitweb/",
)
alias.url += (
    "/gitweb/" => "/usr/lib/cgi-bin/gitweb.cgi",
    "/gitweb.css" => "/usr/share/gitweb/gitweb.css",
    "/git-favicon.png" => "/usr/share/gitweb/git-favicon.png",
    "/git-logo.png" => "/usr/share/gitweb/git-logo.png",
)
 
$HTTP["url"] =~ "^/gitweb/" {
    setenv.add-environment = (
        "GITWEB_CONFIG" => "/etc/gitweb.conf",
    )
    cgi.assign = ( "" => "" )
}
 
$HTTP["host"] =~ "^(git|gitweb)\.(.*)" { url.redirect = ( "^/(.*)" => "http://www.%2/gitweb/" )}

Puis activez ceci :

Command
cd /etc/lighttpd/conf-enabled/
ln -s /etc/lighttpd/conf-available/50-gitweb.conf .

Redémarrez ou reloader ensuite votre serveur lighttpd.

3.1.2 Apache

Et voici la configuration pour apache, pour ceux qui l'utilisent :

Configuration File /etc/apache2/conf.d/gitweb
<VirtualHost *:80>
    ServerName git.example.org
    DocumentRoot /pub/git
    SetEnv  GITWEB_CONFIG   /etc/gitweb.conf
    RewriteEngine on
    # make the front page an internal rewrite to the gitweb script
    RewriteRule ^/$  /cgi-bin/gitweb.cgi
    # make access for "dumb clients" work
    RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI}  [L,PT]
</VirtualHost>

Ou bien, dans la version Squeeze de Debian, on peut trouver ceci :

Configuration File /etc/apache2/conf.d/gitweb
Alias /gitweb /usr/share/gitweb
 
<Directory /usr/share/gitweb>
  Options FollowSymLinks +ExecCGI
  AddHandler cgi-script .cgi
</Directory>

Redémarrez ou reloader ensuite votre serveur apache.


3.1.3 Nginx

Sous Nginx, il va falloir autoriser certaines extensions dans php-fpm :

Configuration File /etc/php5/fpm/pool.d/www.conf
[...]
security.limit_extensions = .php .php3 .php4 .php5 .cgi
[...]

Et voici un exemple de configuration à adapter à vos besoins :

Configuration File /etc/nginx/sites-available/git.deimos.fr
server {
    listen 80;
    listen 443 ssl;
 
    ssl_certificate /etc/nginx/ssl/deimos.fr/server-unified.crt;
    ssl_certificate_key /etc/nginx/ssl/deimos.fr/server.key;
    ssl_session_timeout 5m;
 
    server_name git.deimos.fr;
    root /usr/share/gitweb/;
 
    access_log /var/log/nginx/git.deimos.fr_access.log;
    error_log /var/log/nginx/git.deimos.fr_error.log;
 
    index gitweb.cgi;
 
    location /gitweb.cgi {
        fastcgi_cache mycache;
        fastcgi_cache_key $request_method$host$request_uri;
        fastcgi_cache_valid any 1h;
        include fastcgi_params;
        fastcgi_pass  unix:/run/fcgiwrap.socket;
    } 
}

Ensuite nous allons avoir besoin d'un wrapper cgi :

Command aptitude
aptitude install fcgiwrap

Créez le lien, puis reloadez la configuration :

Command
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/git.deimos.fr .
/etc/init.d/nginx reload
/etc/init.d/fcgiwrap restart
/etc/init.d/php5-fpm reload

3.2 Gitweb

Adaptez selon vos besoin ce fichier :

Configuration File /etc/gitweb.conf
# path to git projects (<project>.git)
$projectroot = "/var/lib/git";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link <nowiki>= $my_uri || "/";

# html text to include at home page
$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = $projectroot;

# stylesheet to use
$stylesheet = "/gitweb.css";

# logo to use
$logo = "/git-logo.png";

# the 'favicon'
$favicon = "/git-favicon.png";

# change default git logo url
$logo_url = "http://www.deimos.fr/gitweb";
$logo_label = "Deimos.fr Git Repository";

# This prevents gitweb to show hidden repositories
$export_ok = "git-daemon-export-ok";
$strict_export = 1;

# This lets it make the URLs you see in the header
@git_base_url_list = ( 'git://www.deimos.fr/git' );

3.2.1 Restreindre les accès

Il est possible de désactiver l'accès à certains repository. Pour ce faire, activez ceci dans la configuration de gitweb :

Configuration File /etc/gitweb.conf
$export_ok = "gitweb-export-ok";

Puis créez ce fichier dans chaque repository que vous voulez uniquement afficher :

Command touch
touch /var/cache/git/git_deimosfr.git/gitweb-export-ok

Seuls les repository disposant de ce fichier seront affichés

3.2.2 Changer le header

Si vous souhaitez changer le header de votre gitweb, créez un fichier indextext.html à l'emplacement des cgi et insérez du code HTML :

Configuration File /usr/lib/cgi-bin/indextext.html
<h2>Deimos Git</h2>
 
Welcome on my Gitweb. I store here my configurations that I usually use every days.<br /><br />
 
Other links :<br />
- My blog : <a href="http://www.deimos.fr/blog">http://www.deimos.fr/blog</a><br />
- My wiki : <a href="http://www.deimos.fr/blocnotesinfo">http://www.deimos.fr/blocnotesinfo</a><br />

4 Interface web

Maintenant votre serveur est accessible via l'interface web suivante http://serveur/gitweb

4.1 Thème plus sexy

Il existe un thème plus sexy que celui par défaut de gitweb. Téléchargez l'archive ici et lancez ces commandes :

Command
tar -xzvf kogakure-gitweb-theme.tar.gz
cd kogakure-gitweb-theme
mv /usr/share/gitweb/gitweb.css /usr/share/gitweb/gitweb-old.css
cp gitweb.css /usr/share/gitweb/
cp -Rf img /usr/share/gitweb/
chown -Rf www-data. /usr/share/gitweb/

Et voilà, votre nouveau thème est en place.

4.2 Intégration Piwik

Si vous souhaitez qu'il y ai une intégration avec piwik, c'est assez simple, j'ai fais un patch, à vous de modifier le code javascript a afficher dans votre page dans ce patch :

Configuration File piwik4gitweb.patch
*** gitweb.old	2011-04-05 14:05:06.120951481 +0200
--- gitweb.cgi	2011-04-05 14:04:41.913944817 +0200
***************
*** 3612,3617 ****
--- 3612,3633 ----
  		      qq!</script>\n!;
  	}
 
+ 
+ 	print <<PIWIK;
+ <!-- Piwik -->
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://www.deimos.fr/piwik/" : "http://www.deimos.fr/piwik/");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script><script type="text/javascript">
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 10);
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script><noscript><p><img src="http://www.deimos.fr/piwik/piwik.php?idsite=10" style="border:0" alt="" /></p></noscript>
+ <!-- End Piwik Tracking Code -->
+ PIWIK
+ 
  	print "\n</body>\n" .
  	      "</html>";
  }
***************
*** 7033,7038 ****
--- 7049,7066 ----
  	}
  	print <<XML;
  </outline>
+ <!-- Piwik -->
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://www.deimos.fr/piwik/" : "http://www.deimos.fr/piwik/");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script><script type="text/javascript">
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 10);
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script><noscript><p><img src="http://www.deimos.fr/piwik/piwik.php?idsite=10" style="border:0" alt="" /></p></noscript>
+ <!-- End Piwik Tracking Code -->
  </body>
  </opml>
  XML

5 FAQ

5.1 Unnamed repository; edit this file to name it for gitweb.

J'ai ceci qui s'affiche au début de mon interface web, j'aimerais le changer, comment faire ?

C'est assez simple, dans votre repository git, vous avez un fichier 'description'. Editez le et mettez ce que vous souhaitez dedans.