HgWebDir unter lighttpd
Heute mal ein kleiner Trick, wie man hgwebdir.cgi problemlos unter lighttpd zum Laufen bekommt, da es ein paar kleine Tricks braucht. Aber eigentlich ist es ganz einfach.
Also zuerst sollte man sich das Script herunterladen. Ich lade es in /var/www/hg/ wobei /var/www/ mein Document-Root ist.
Danach muss man ein paar Zeilen zur Serverkonfiguration hinzufügen.
server.modules += ("mod_cgi")
$HTTP["url"] =~ "^/hg/" {
cgi.assign = (
".cgi" => "/usr/bin/python",
)
}
Damit führt lighttpd nach einem Restart alle .cgi Dateien in /hg/ mit Python aus. Dies können wir unter http://server-name/hg/hgwebdir.cgi testen. Es sollte eine Seite mit einer leeren Liste und einem Mercurial-Logo erscheinen.
Jetzt kann man im gleichen Verzeichnis in dem auch die Datei hgwebdir.cgi die Datei hgweb.config erstellen.
Diese Datei könnte etwa so aussehen:
[web] style = gitweb [paths] repo1 = /pfad/zum/repository repo2 = /pfad/zum/anderen/repository
Das Ergebnis sollte dann etwa so wie hier aussehen.
Jetzt ist http://server-name/hg/hgwebdir.cgi aber keine schöne URL und http://server-name/hg/ wäre doch viel schöner. Dazu können wir mod_rewrite verwenden. Die Konfiguration könnte dann etwa so aussehen:
server.modules += ("mod_cgi", "mod_rewrite")
$HTTP["url"] =~ "^/hg/" {
cgi.assign = (
".cgi" => "/usr/bin/python",
)
}
url.rewrite-once = (
"^/hg(/.*)$" => "/hg/hgwebdir.cgi$1",
)
Das endet aber in einem Chaos. Viel besser hierfür geeignet ist mod_alias. Damit lässt sich das ganze problemlos machen:
server.modules += ("mod_cgi", "mod_alias")
$HTTP["url"] =~ "^/hg/" {
cgi.assign = (
".cgi" => "/usr/bin/python",
)
alias.url = (
"/hg" => "/var/www/hg/hgwebdir.cgi"
)
}
Damit funktioniert alles perfekt. Wichtig ist, dass der volle Pfad zum CGI-Script angegeben wird.
Im Mercurial Wiki finden sich weitere Informationen, wie man Push-Support unter lighttpd einrichtet.


