Archive for January, 2013

Git macht Spass. Lokale Repositories sind schnell herumgeschoben und man kann ohne Netz arbeiten. Etwas schwieriger ist es, ein schon angelegtes Repository auf einen zentralen Server zu schieben. Auch will man natürlich die Organisationsweite Authentisierung benützen, in meinem Fall Kerberos.

Voraussetzungen:

  • Apache Webserver mit DAV Module (ist in der default Installation dabei)
  • funktionierendes mod_auth_kerb (http://modauthkerb.sourceforge.net/ oder viele andere Anleitungen im Netz)

Server Repository vorbereiten

Als erstes müssen wir aus dem git repository ein bare repository machen. Dies ist ein git repository ohne working copy (vereinfacht gesagt, das .git Verzeichnis).

git clone /Pfad/zum/lokel/repo server-repo.git --bare

Um als remote repository auch das pushen zu unterstützen müssen wir jetzt noch die properties updaten und einen post-hook einrichten, der dies nach jedem push tut. Netterweise liegt eine Beispiel-skript im default repository bereits zur Verwendung bereit.

cd server-repo.git
git --bare update-server-info
mv hooks/post-update.sample hooks/post-update

Damit ist das repository bereit zum hochladen auf den server.

DAV access vorbereiten

Dieser Schritt ist im Prinzip einfach. Erstmals passen wir die apache config mit einer Location direktive an (Directory geht auch, aber dann muss man den Filesystem Pfad eingeben, bei Location verwenden wir den Webserver-Pfad, was das rumschieben auf dem Server vereinfacht.)

<Location /git/>
DAV on #DAV einschalten
AuthType Keberos # Kerberos auth
KrbMethodNegotiate On # single sign on erlauben
KrbAuthRealms SPAHAN.CH # der verwendete Kerberos realm
Krb5KeyTab /etc/httpd/httpd.keytab # wo die Kerberos keytab mit dem server principal liegt
KrbServiceName HTTP/server.spahan.ch # nur nötig wenn der server ein vhost ist und in der keytab der echte hostnamen steht
AuthName "Mein git Repository" # irgendwas sinnvolles
require user hanfi@SPAHAN.CH devel@SPAHAN.CH # Vollständiger Username MIT REALM!
</Location>

Jetzt noch kurz mit apachectl -t testen ob alles OK ist und dann den Server mit apachectl restart neu starten .

Testweise mal das /git Verzeichnis in der Document-root mit mkdir git anlegen und prüfen, ob Kerberos auth funktioniert. Wenn man ein Kerberos enabled OS und Browser verwendet, kann es sein, dass der Browser das OS-Ticket ohne nachfrage verwendet.

Im Server access log sollte man nun sehen, dass der Zugriff authentifiziert ist.

Hochladen und testen

Mit scp kann man das bare repository jetz auf den server hochladen (scp -r server-repo.git webserver:/var/www/html/), korrekt benennen (mv server-repo-git git) und die permissions setzten (chown -R www:www git)

Unter der git URL sollte nun das kerberos geschützte repository liegen (HEAD, branches, hooks und mehr Dateien sollten im Top Verzeichnis liegen).

Auf einem Client System können wir nun testen ob alles klappt.

Wenn wir ssl verwenden (und das sollte man bei Kerberos immer tun, alles andere ist Fahrlässig) muss entweder das Zertifikat “echt” sein oder wir müssen vor dem clonen dem git mit export GIT_SSL_NO_VERIFY noch sagen, dass das Zertifikat schon in Ordnung ist. Dann clonen wir das repo mit git clone hanfi@webserver/git
Wenn dies nicht klappt, muss man sich noch ein Kerberos Ticket hohlen (kinit hanfi@SPAHAN.CH). Danach sollte es ohne Passwortabfrage einfach clonen.

Jetzt kann man eine Harmlose Änderung durchführen, diese ins lokale repository commiten, und den push ausprobieren. Sollte das nicht gehen hilft am besten das Server access log, Fehler 403 deuten auf Falsche permissions hin (wenn man was auf dem server als root macht, und dann einzelne Dateien nicht mehr dem www user gehören -> chown -R www:www git). Fehler 502 hat mit DAV, proxy und dummen Headern zu tun (google nach “DAV svn https Bad Gateway” -> naxos-software hat einen guten Blogeintrag dazu )

Flattr this!

Comments Comments Off on Lokales git Repository auf einen DAV server mit kerberos klonen