vermischte Anleitungen
Hier finden sich sämtliche Informationen, Anregungen und Umsetzungsbeschreibungen von verschiedenen Dingen, die noch in keine andere Kategorie passen. Auch hier gilt: es kommt hin, was mich zu längeren Nachforschungen trieb, die ich fortan anderen ersparen möchte :)
Git-Repositories auf Apache ohne Virtualhosts
Git ist ein verteiltes Versionsverwaltungssystem, welches einige Vorteile gegenüber beispielsweise SVN vorweist, die mancher braucht und andere nicht - darum geht's hier aber nicht :-)
Das Problem, welches hier behandelt werden soll ist dass, ein Repository für andere Nutzer über http zugänglich zu machen, ohne dabei virtuelle Hosts von Apache nutzen zu müssen, für welche man üblicherweise eine Subdomain braucht. Denn wer es noch nicht mitbekommen hat: bei DynDNS sind Subdomains ohne weiteres nicht mehr einzurichten (auch die Hostnamenauswahl wurde für die Free-Nutzer stark eingeschränkt).
Diese Anleitung bezieht sich auf Debian Squeeze, ist aber sicher auch leicht auf andere Systeme anwendbar.
Zunächst braucht es einen Rechner mit Debian und Apache drauf:
apt-get install apache2
Anschließend müssen die WebDAV-Module geladen werden:
a2enmod dav_fs a2enmod dav
und der apache neu gestartet werden:
/etc/init.d/apache2 restart
Nun muss ein Ordner für die git-repos angelegt werden:
mkdir /data1/git
In diesem Ordner wird nun ein git-repository angelegt (dieses wird "bare", was soviel heißt, wie "als server-repo und nicht als ein normal nutzbares git-repository", angelegt):
cd /data1/git git init --bare git-test cd git-test/ git update-server-info
Die eben angelegten Ordner müssen für den Apache-Prozess les- und schreibbar sein:
cd /data1/ chown -R www-data:www-data git/
... Soweit so gut - jetzt kommt der spannende Teil, wo git mit Apache zusammen gebracht wird...
Um die Repos von allen clonebar, aber nur von angemeldeten Benutzern push-bar (also mit neuen Versionen beschreibbar) zu machen, wird HTTP Basic Auth genutzt, wofür eine Nutzerdatei angelegt werden muss, die wir sinnigerweise auch gleich mit einem Nutzer versehen:
mkdir -p /usr/verwaltung/git cd /usr/verwaltung/git/ htpasswd -c .htusers <username>
Unter /etc/apache2/sites-available/ wird nun eine Konfigurationsdatei (ich nenne sie einfach nur "git") für die Git-Repositories angelegt (natürlich ist es an dieser Stelle auch möglich, für jedes Git-Repository eine eigene Nutzergruppe zu definieren - dafür einfach für die Unterverzeichnisse von /git - z.B. für /git/test - ein weiteres Location-Tag hinzufügen, in dem nur die Authentifizierungssachen stehen) und mit folgendem Inhalt gefüllt:
Alias /git /data1/git <Location /git> DAV On AuthType Basic AuthName "My Gitrepos" AuthUserFile /usr/verwaltung/git/.htusers <Limitexcept GET HEAD PROPFIND OPTIONS REPORT> Require valid-user </Limitexcept> </Location>
Hier wird zunächst ein Alias auf /git angelegt, welcher umleitet in den Ordner, wo die Repositories liegen. Anschließend wird für diesen Ordner WebDAV aktiviert und der AuthType auf Basic gesetzt. Die AuthUserFile liegt, wie oben angegeben unter /usr/verwaltung/git/.htusers und nur diese Nutzer dürfen die HTTP-Methode PUT ausführen, welche für ein git push notwendig ist.
Nun ist diese Konfiguration noch zu aktivieren und Apache neu zu laden:
a2ensite git /etc/init.d/apache reload
und schon sollten sämtliche Repositories von jedem beliebigen Rechner mit Internetverbindung clonebar sein:
git clone http://<username>@servername.net/git/git-test/ .
Beim pushen von Änderungen wird man bei dieser Methode immer nach dem Passwort gefragt, was meines Erachtens sicherer ist, als es im Klartext in einer lokalen Datei zu speichern (würde über eine Datei .netrc im home-Ordner eines unix-artigen Systems aber funktionieren).
Dieses Repository ist für jeden Nutzer clonebar (kann auch über entsprechende Änderungen in der Apache-Konfiguration von oben auch unterbunden werden), aber nur für Nutzer aus der .htusers pushbar.