hoogi.eu

Lighttpd für go get konfigurieren

Eine kurze Beschreibung, wie lighttpd für “go get” in Verbindung mit z.B. cgit konfiguriert werden kann.

Bei einem “go get” wird ggf. ein Metatag ausgewertet, falls es keinen eindeutigen Hinweis auf die Versionsverwaltung in der URL gibt. Siehe Dokumentation dazu.

Damit “go get” nun trotzdem weiß, wo und wie die Abhängigkeiten geladen werden können, muss im HTML ein Metatag mit dem Namen “go-import” definiert werden. Das Metatag wird vor dem Laden der Abhängigkeit abgefragt, dazu wird an die URL des Imports der Parameter “?go-get=1” an die aufzulösende Import URL angehangen.

Zum Beispiel wird das Modul “github.com/gorilla/csrf” importiert. Ein “go get” ruft dann “https://github.com/gorilla/csrf?go-get=1” auf und sucht nach dem Metatag mit dem Namen “go-import”.

Bei Github erscheint im HTML folgendes Tag:

<meta name="go-import" content="github.com/gorilla/csrf git https://github.com/gorilla/csrf.git">

Im ‘content’ steht einmal der Modulname, die verwendete Versionsverwaltung und die URL welche zum Repository führt.

Da cgit selber den URL Parameter nicht auswertet, nutze ich das Modul mod_magnet von lighttpd, um auf das “go-get=1” entsprechend zu reagieren und mit dem Metatag zu antworten.

Dafür braucht es ein kleines Lua Script:

if (lighty.env["uri.query"] == "go-get=1") then
   local uri = string.gmatch(lighty.env["request.orig-uri"], "([^?]+)")
	
   local t={} ; i=1

   for str in uri do
	-- 1 -> repo name
	-- 2 -> query params (go-get=1)
	t[i] = str
	i = i + 1
   end

   lighty.content = { "<!DOCTYPE html><head><meta name=\"go-import\" content=\"" , lighty.env["uri.authority"] ,  t[1] , " git " , lighty.env["uri.scheme"] , "://" , lighty.env["uri.authority"] , t[1] , "\"></head><body></body></html>\n" }

   return 200
end

Damit das Skript aufgerufen wird, einfach in der lighttpd.conf folgendes in eure Site eintragen:

$HTTP["host"] == "git.hoogi.eu" { 
     ...
     magnet.attract-physical-path-to = ( "/etc/lighttpd/go-get.lua" )
}