[gelöst] lighttpd + git

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

[gelöst] lighttpd + git

Beitrag von frankw » 24.10.2018 13:11:52

Hallo,

ich habe lighttpd auf stretch aufgesetzt und möchte darüber git betreiben. Funktioniert soweit...

Probleme habe ich bei großen Git-Repos (Kernel-Fork), hier bricht der git-client immer mit folgender Meldung ab:

Code: Alles auswählen

error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400 Bad Request
fatal: The remote end hung up unexpectedly
auf der Server-Seite kommt folgende Fehlermeldung in die LOG:

Code: Alles auswählen

(connections-glue.c.403) chunked data size too large -> 400
habe natürlich schon eine Weile gegoogled und folgende 2 Bugs gefunden:
ersterer ist in Version 1.4.49 gefixt, der zweite sollte eigentlich schon gefixt sein...stretch hat 1.4.45

bevor ich mir jetzt alles selbst kompiliere, dacht eich mir es gibt evtl. eine einfache Möglichkeit eine neuere Version drauf zu bekommen...in den normalen Backports ist lighttpd scheinbar (noch) nicht drin und wenn ich versuche aus buster zu installieren, wird die libc mitgezogen...da weis ich nicht, ob ich das Gefahrlos machen kann.

Wie würdet ihr vorgehen?

Gruß Frank
Zuletzt geändert von frankw am 31.10.2018 19:56:46, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: lighttpd + git

Beitrag von Meillo » 24.10.2018 13:39:10

Hallo und willkommen im Forum.
frankw hat geschrieben: ↑ zum Beitrag ↑
24.10.2018 13:11:52
ich habe lighttpd auf stretch aufgesetzt und möchte darüber git betreiben.
Was meinst du mit ``möchte darüber git betreiben''?
Use ed once in a while!

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: lighttpd + git

Beitrag von frankw » 24.10.2018 13:57:36

hallo,

man kann ein git-repo an einen Webservice puschen, wenn dieser entsprechend eingerichtet ist...hier meine /etc/lighttpd/conf-enabled/11-git.conf:

Code: Alles auswählen

alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend" )
$HTTP["url"] =~ "^/git" {
        cgi.assign = ("" => "")
        setenv.add-environment = (
                "GIT_PROJECT_ROOT" => "/mnt/vcs/git",
                "GIT_HTTP_EXPORT_ALL" => ""
        )
}

#anonymous read+auth write
#$HTTP["querystring"] =~ "service=git-receive-pack" {
#       include "git-auth.conf"
#}
#$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
#       include "git-auth.conf"
#}

#auth read+write
$HTTP["url"] =~ "^/git/private" {
        include "git-auth.conf"
}
das repo muss serverseitig eingerichtet werden und für http-receive-pack freigegeben werden...und natürlich die Schreibrechte vorhanden sein (für den user unter dem lighttpd läuft)

dann kann man sein repo so auf den Server schreiben:

Code: Alles auswählen

git push --mirror http://10.0.3.109/git/kernel
habe meine web-VM mal gecloned und lighttpd aus buster installiert (und den Abhängigkeiten)...scheint soweit zu funktionieren

das zieht er alles mit:

Code: Alles auswählen

root@stretch:~# apt-get -t buster install lighttpd
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
The following additional packages will be installed:
  libc-bin libc-dev-bin libc-l10n libc6 libc6-dev libmariadbclient-dev
  libmariadbclient18 locales spawn-fcgi
Vorgeschlagene Pakete:
  glibc-doc rrdtool php-cgi apache2-utils lighttpd-doc
Die folgenden NEUEN Pakete werden installiert:
  lighttpd spawn-fcgi
Die folgenden Pakete werden aktualisiert (Upgrade):
  libc-bin libc-dev-bin libc-l10n libc6 libc6-dev libmariadbclient-dev
  libmariadbclient18 locales
8 aktualisiert, 2 neu installiert, 0 zu entfernen und 282 nicht aktualisiert.
Es müssen 12,7 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 8.885 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] 

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: lighttpd + git

Beitrag von frankw » 25.10.2018 12:05:03

is das der richtige Weg mit dem lighttpd-Packet aus buster, oder handele ich mir mit dem (libc)-upgrade mehr Probleme ein? das git-push (2GB) läuft in meiner test-vm jedenfalls sauber durch

gibt es sinnvolle Alternativen?

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: lighttpd + git

Beitrag von Meillo » 25.10.2018 17:43:50

frankw hat geschrieben: ↑ zum Beitrag ↑
25.10.2018 12:05:03
gibt es sinnvolle Alternativen?
Ich habe das ueber SSH realisiert, fuer mich selber direkt und fuer andere mit einem generischen git-User, SSH-Key-Login und git-shell.
Use ed once in a while!

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: lighttpd + git

Beitrag von frankw » 25.10.2018 21:11:45

Hätte das schon gern als http,da ich ssh der vm nicht weitergeleitet habe

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: lighttpd + git

Beitrag von Meillo » 25.10.2018 21:20:00

frankw hat geschrieben: ↑ zum Beitrag ↑
25.10.2018 21:11:45
Hätte das schon gern als http,da ich ssh der vm nicht weitergeleitet habe
Dann kann ich leider nicht weiterhelfen.

Aber vielleicht hat ja noch jemand anderes einen Tipp.
Use ed once in a while!

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: lighttpd + git

Beitrag von frankw » 30.10.2018 18:36:28

ich habe nun mein lighttpd selbst kompiliert (1.4.51) mit folgenden optionen:

Code: Alles auswählen

./configure --prefix=/opt --with-openssl --with-openssl-libs=/usr/lib/arm-linux-gnueabihf/  --with-webdav-props --with-webdav-locks
siehe auch viewtopic.php?f=27&t=171142

bekomme aber git nicht zum laufen...mit dem 1.4.45 läuft es (bis auf den Fehler mit der repo-Begrenzung)...installiere ich die neue Version findet der git-client das repo nicht

in den server-logs habe ich das hier:

Code: Alles auswählen

2018-10-30 17:47:11: (response.c.657) Basedir      : /usr/lib/git-core/git-http-backend 
2018-10-30 17:47:11: (response.c.658) Rel-Path     : /git/web_brk/info/refs 
2018-10-30 17:47:11: (response.c.659) Path         : /usr/lib/git-core/git-http-backend/web_brk/info/refs 
2018-10-30 17:47:11: (response.c.671) -- handling physical path 
2018-10-30 17:47:11: (response.c.672) Path         : /usr/lib/git-core/git-http-backend/web_brk/info/refs 
2018-10-30 17:47:11: (response.c.679) -- handling subrequest 
2018-10-30 17:47:11: (response.c.680) Path         : /usr/lib/git-core/git-http-backend 
2018-10-30 17:47:11: (response.c.681) URI          : /git 
2018-10-30 17:47:11: (response.c.682) Pathinfo     : /web_brk/info/refs 
es wird also meine config geladen und der request auch an das http-backend weitergegeben...nur was danach passiert sehe ich nicht...besonders ob das backend auch weiß, wo die repos liegen

so sieht meine config aus:

Code: Alles auswählen

#https://git-scm.com/docs/git-http-backend
server.modules += (
  "mod_cgi",
#  "mod_alias",
#  "mod_auth",
  "mod_setenv")

alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend" )
$HTTP["url"] =~ "^/git" {
        cgi.assign = ("" => "")
        setenv.add-environment = (
                "GIT_PROJECT_ROOT" => "/mnt/vcs/git",
                "GIT_HTTP_EXPORT_ALL" => ""
        )
}

#anonymous read+auth write
#$HTTP["querystring"] =~ "service=git-receive-pack" {
#       include "git-auth.conf"
#}
#$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
#       include "git-auth.conf"
#}

#auth read+write
$HTTP["url"] =~ "^/git/private" {
        include "git-auth.conf"
}
normaler sollte sich lighttpd nicht starten lassen, wenn ein modul fehlt oder nicht geladen werden kann (weils nicht da liegt, wo es vermutet wird), richtig? Wie gesagt, die conf ist bei 1.4.45 funktionstüchtig nur bei 1.4.51 nicht

hat jemand eine Idee?

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: lighttpd + git

Beitrag von frankw » 31.10.2018 19:56:28

hier ist die Lösung https://stackoverflow.com/questions/528 ... tenv-issue :)

Code: Alles auswählen

„GIT_HTTP_EXPORT_ALL“ nicht auf „1“ sondern „“
zusammen mit dem lighttpd 1.4.51 habe ich jetzt mein 2GB-Repo puschen können ;)

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] lighttpd + git

Beitrag von Meillo » 31.10.2018 22:50:23

Klasse!

Danke, dass du uns an deinem Fortschritt und der Loesung teilhaben hast lassen.
Use ed once in a while!

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: [gelöst] lighttpd + git

Beitrag von frankw » 01.11.2018 15:17:59

Klar...sonst muss der nächste mit dem Problem auch ewig suchen und rumprobieren...

Eine Frage hab ich noch:

Durch die config

Code: Alles auswählen

 alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend" )
 $HTTP["url"] =~ "^/git" { cgi.assign = ("" => "") setenv.add-environment = ( "GIT_PROJECT_ROOT" => "/mnt/vcs/git", "GIT_HTTP_EXPORT_ALL" => "" ) }
wird alles,was mit git anfängt (in der url) an das git-backend weitergereicht...

so ganz glücklich finde ich das nicht,da ich z.B. gitlist (weboberfläche) zur Verfügung stellen will.

Wenn der ordner in meinem webroot liegt und gitlist heist,kann ich nicht drauf zugreifen...hat einige zeit gedauert bis ich herausgefunden habe woran das liegt...

Kann ich das irgenswie einschränken? Ich habe schon versucht,beim alias und bei url noch einen slash ranzuhängen...dann findet der gitclient aber wieder das repo nicht

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] lighttpd + git

Beitrag von Meillo » 01.11.2018 17:27:31

Schau mal, welcher Art die Regexps sind. Falls das PCREs sind, koenntest du einen negativen Lookahead verwenden, um ``gitlist'' auszuschliessen.

Oder du koennstest vielleicht ``gitlist'' auf sich selber umleiten, damit es danach die allgemeinere ``git''-Umleitung gar nicht mehr erreicht.

Bei den Bedinungen kannst du zwei Regexp-Matcher vielleicht auch ver-und-en.

Das mal als Ideen ...
Use ed once in a while!

Antworten