Subversion ist eines der verbreitetsten Versionsverwaltungsysteme, auch wenn es mittlerweile durch dezentrale Verfahren wie zum Beispiel Git oder Mercurial in Bedrängnis kommt.
Um einen Subversion Server zu betreiben gibt es verschiedene Protokolle, welche genutzt werden können. Typischerweise empfehle ich jedoch, die Repositorys SSL geschützt über einen Apache auszuliefern. Obwohl das HTTP Verfahren langsamer als die anderen Verfahren ist, ergeben sich einige markante Vorteile:
1. Die HTTP/S Ports sind üblicherweise nicht gesperrt.
2. Die Nutzerverwaltung kann innerhalb eines LDAP-Servers realisiert werden.
3. Einfache und sichere SSL Verschlüsselung.
4. Das Repository lässt sich mit jedem gängigen Webbrowser öffnen.
Zusätzlich zu einem vorhandenen Apache2 Webserver benötigt man noch das Subversion Paket und das passende Subversion Apache-Modul, unter einem Debian/Ubuntu Linux installiert sich es wie folgt:
apt-get install subversion libapache2-svn
Da Subversion vom Apache über ein spezielles WebDAV Modul ausgeliefert wird sollte man dieses aktivieren:
a2enmod mod_dav_svn
/etc/init.d/apache2 restart
Jetzt wird ein Verzeichnis angelegt, in dem sich später alle Subversion Projekte befinden:
mkdir -p /data/svn/
Jetzt kann das erste Subversion Repository angelegt werden:
1. Anlegen des Verzeichnisses:
mkdir /data/svn/projekt
2. Subversion initialisieren:
svnadmin create /data/svn/projekt
3. Die Rechte setzen:
chgrp -R www-data /data/svn/projekt
chmod -R 750 /data/svn/projekt
chmod 2770 /data/svn/projekt/db
# Wird ab SVN 1.6 benötigt:
chmod 760 ${SVN_REPOSITORY}/db/rep-cache.db
Jetzt muss dem Apache noch mitgeteilt werden, wie er dieses Projekt auszuliefern hat. Unter /etc/apache2/conf.d/svn-projekt.conf füge ich folgende Konfiguration ein:
<Location /svn/projekt>
DAV svn
</Location>
SVNPath '/data/svn/projekt/'
Options +Indexes
Allow from all
RewriteEngine off
AuthType Basic
AuthName "Projektname"
require group 'projekt'
AuthUserFile /etc/apache2/passwd
AuthGroupFile /etc/apache2/htgroups
SSLRequireSSL
Zum Schluss sollte man die Apache Konfiguration einmal neuladen:
/etc/init.d/apache2 reload