Subversion
Subversion ist ein sog. Version-Kontrollsystem. Diese Systeme sind dazu gedacht, einen Datenbestand (meistens Programmcode oder Text-Dokumente) zu verwalten und Änderungen zu dokumentieren. Damit können z.B. mehrere Autoren an einem Programm schreiben und es ist jederzeit möglich, einzelne Änderungen zu verfolgen oder rückgängig zu machen.
Auch für HTML- oder PHP-Dateien ist Subversion sehr empfehlenswert.
Funktionsweise
Subversion arbeitet immer mit einem sog. Repository in dem das System seine Aufzeichnungen speichert und einer Working copy, die den aktuellen Stand enthält und in der der Benutzer seine Änderungen direkt durchführt.
Allerdings gibt es verschiedene Möglichkeiten, wie das Subversion-Programm auf sein Repository zugreift.
lokales Repository
Im trivialen Fall ist das Repository einfach ein Verzeichnis auf der selben Festplatte. Dann muss der Benutzer, der Subversion aufruft nur Lese- und Schreibrechte in dem Verzeichnis haben und kann sofort mit Subversion arbeiten. Diese Variante ist nur zu empfehlen, wenn nur wenige (besser: nur ein) benutzer an immer dem selben Rechner arbeitet.
Diese Variante ist auf schokokeks.org zwar ohne weiteres nutzbar, wir empfehlen aufgrund der genannten Einschränkungen jedoch die Einrichtung eines Servers wie folgt...
Subversion-Server
Meistens ist es praktischer, einen zentralen Server zu haben, auf dem das Repository gespeichert ist. Es ist damit möglich von verschiedenen Computern mit verschiedenen Benutzern zu arbeiten und alle Änderungen trotzdem zentral zu erfassen.
Bei uns ist die Vorkehrung vorhanden um Subversion über WebDAV zu betreiben. Webdav erweitert das normale HTTP-Protokoll um eine direkte Upload-Fähigkeit und einige andere Techniken zur Datei-Manipulation. Das Subversion-Modul im Webserver sorgt nun einerseits dafür, dass das Subversion-Programm direkt mit dem Server kommunizieren kann und dort die Änderungen verwaltet werden, andererseits besteht aber zudem die Möglichkeit mit einem ganz normalen Browser auf den jeweils aktuellen Stand des Repositories zuzugreifen. Dieses Feature ist besonders interessant, wenn neben den Autoren der Daten auch Besucher einzelne Daten herunterladen können sollen (das ist natürlich konfigurierbar), denn diese brauchen dann keine weitere Software als einfach den Browser. Ob man für den Zugriff Benutzernamen und Passwort eingeben muss lässt sich frei konfigurieren.
Im folgenden werde ich technisch beschreiben, wie der Subversion-via-Webdav-Zugriff eingerichtet werden kann. Beachten Sie, es ist noch nicht möglich, diese Änderungen vollständig selbst durchzuführen, ein Administrator muss die Konfiguration des Webservers darauf anpassen (s. unten). Bitte melden Sie sich also bei einem Administrator nachdem die Vorbereitungen erfüllt sind.
Einrichtung des Webdav-Zugriffs
Bitte lesen Sie zum Verständnis auch den Artikel zu WebDAV im allgemeinen. Es werden trotzdem alle Schritte hier nochmals erklärt.
Vorbereitung
Auch als einfacher Benutzer können Sie schon vieles selbst vorbereiten. Dazu brauchen Sie nur einen SSH-Zugang.
Pfade
Vorab eine Bemerkung zu den bei uns verwendeten Pfaden. Damit Admins bei Support-Anfragen nicht lange nachschauen müssen, haben wir festgelegt, wie einzelne Anwendungen auf dem Server gespeichert werden sollen. Im Einzelfall kann dies natürlich immer geändert werden, aber sofern kein besonderer Grund vorliegt, bitten wir die Standard-Pfade einzuhalten.
Hier in dieser Anleitung will der Benutzer bernd unter der Subdomain svn.bwurst.org ein Subversion-Repository betreiben. Wann immer die Pfade diese Teile enthalten, sollte das bei Ihnen durch den zu verwendenden Namen ersetzt werden.
Vorbereitungen
Als erster Schritt muss das Subversion-Unterverzeichnis im Benutzer-Home-Verzeichnis angelegt werden:
mkdir ~/subversion
Dort wird dann für die passende Subdomain ein Daten-Verzeichnis angelegt:
mkdir ~/subversion/svn.bwurst.org
Damit der Webserver dieses Verzeichnis benutzen kann, muss man ihm das x-Recht einräumen:
setfacl -m u:apache:x /home/bernd /home/bernd/subversion /home/bernd/subversion/svn.bwurst.org
(Hierbei ist wichtig, dass der Webserver auf alle Zwischen-Ebenen mindestens ein x-Recht bekommt um das Verzeichnis zu durchqueren.)
Der Subversion-Server arbeitet nach dem Prinzip, dass man ein Verzeichnis vorgibt, in dem sich dann mehrere Repositories befinden können. Zusätzlich werden noch zwei Dateien gebraucht, die ebenfalls zum Subversion-System der betreffenden Subdomain gehören, jedoch nicht in diesem repositories-Verzeichnis sein sollten:
mkdir ~/subversion/svn.bwurst.org/repositories touch ~/subversion/svn.bwurst.org/acl touch ~/subversion/svn.bwurst.org/users
Für diese zwei Dateien und das Repositories-Verzeichnis müssen wir ebenfalls die Rechte verteilen:
setfacl -m u:apache:rx ~/subversion/svn.bwurst.org/repositories setfacl -m u:apache:r ~/subversion/svn.bwurst.org/acl setfacl -m u:apache:r ~/subversion/svn.bwurst.org/users
Damit der Apache in allen neuen Repositories automatisch das Recht erhält, beliebig zu lesen und zu schreiben, setzen wir noch das hier:
setfacl -m default:u:apache:rwx ~/subversion/svn.bwurst.org/repositories
Nach dieser Vorbereitung kann schon das SVN-Repository bei den Admins beantragt werden. Wenn die normalen Pfade benutzt werden sollen, braucht der Admin nur den Namen der Subdomain kennen.
Repository erstellen
Nach dieser Vorbereitung kann man dann das wirkliche Daten-Repository erstellen.
Erstellen des Repositories »test«:
cd ~/subversion/svn.bwurst.org/repositories svnadmin create test
Benutzer und ACL einrichten
Zu den beiden vorgenannten Dateien komme ich nun. Die Datei users enthält eine Liste der erlaubten Benutzer. Für diejenigen, die sich mit Apache-Authentifizierung auskennen: Es ist eine ganz normale .htpasswd-Datei. Diese kann mit dem Programm /usr/sbin/htpasswd2 erstellt und bearbeitet werden. In der Hilfe des Programms wird erklärt, wie man damit Benutzer anlegt und verändert:
/usr/sbin/htpasswd2 /home/bernd/subversion/svn.bwurst.org/users bernd
würd z.B. einen Benutzer bernd anlegen und nach dem gewünschten Passwort fragen. Mehr dazu mit
/usr/sbin/htpasswd2 --help
Wenn man nun mindestens einen Benutzer angelegt hat, dann kann man mit Hilfe der ACL (Access control list) festlegen, was dieser Benutzer darf und was z.B. der anonyme Benutzer (ohne Authentifizierung) darf.
Ich gehe im Folgenden davon aus, dass der Benutzer bernd der Administrator ist und zugriff auf alles haben soll, ein nicht angemeldeter Benutzer soll im Repository test jedoch nur Zugriff auf das Unterverzeichnis trunk (Laut subversion-Dokumentation soll trunk den grade aktuellen Stand wiederspiegeln) bekommen. Dazu erstelle ich folgende ACL-Datei:
[test:/] bernd = rw [test:/trunk] * = r bernd = rw
Nicht aufgeführte Benutzer für eine bestimmte Sektion haben keinen Zugriff. Wenn der Eintrag *:r nicht gesetzt wird, dann wird eine Anmeldung mit gültigen Benutzerdaten unbedingt verlangt.
Mehr Informationen und Hintergründe zur Konfiguration von Subversion finden Sie (auf englisch) im Subversion book.
Später weitere repositories anlegen
Wenn der SVN-über-DAV-Zugang einmal eingerichtet ist, können beliebig viele Repositories ohne Administrator-Arbeit erstellt und verwaltet werden.
Dazu muss einfach im Verzeichnis das die Repositories enthält (im Beispiel /home/bernd/subversion/svn.bwurst.org/repositories) der Befehl svnadmin create foobar ausgeführt werden, wobei foobar der Name des neuen Repositories ist.
Zudem ist in den meisten Fällen nötig, dass man in der oben erstellten Datei acl einen neuen Eintrag äquivalent zum alten erstellt.