Subversion unter SUSE Linux 10, Apache2 und Plesk installieren

Ich habe heute beschlossen, einen Subversion-Server auf meinem VPS zu installieren, den ich bei Host Europe angemietet habe. Mein Server läuft unter SUSE Linux 10, Apache2 mit Plesk.

[Update 2008-06-01: Plesk Version ist 8.3]

Mein Ziel war, Subversion so zu installieren, dass es mit Plesk nicht ins Gehege kommt. Nach einiger Recherche habe ich auf verschiedenen Seiten und in Foren Informationen gefunden, die beschreiben, was ungefähr getan werden muss. Allerdings habe ich nirgends eine zusammenhängende Anleitung gefunden, in der die komplette Einrichtung beschrieben ist.

Bevor jetzt irgendjemand anfängt und das nachmacht, was ich hier beschreibe ein wichtiger Hinweis:

Ich habe keine Ahnung, ob das was ich hier beschreibe auf jedem System funktioniert. Bitte macht auf jeden Fall ein Backup, bevor Ihr anfangt und lest Euch im Zweifel die verlinkte Dokumentation durch. Prüft, ob die von mir verwendeten Pfade und Benutzer bei Euch Sinn geben.

Vor allem macht mich nicht dafür verantwortlich, sollte etwas schief gehen…

Ihr braucht auf jeden Fall die Root-Rechte für Euren Server. Soweit nicht anders beschrieben, werden alle folgenden Schritte als Benutzer root ausgeführt.

Ich gehe davon aus, dass Ihr auf Eurem lokalen Rechner schon einen Subversion-Client installiert habt.

Schritte, die auf dem VPS ausgeführt werden müssen, sind mit

remote:~#

gekennzeichnet. Schritte, die Ihr auf Eurem lokalen Rechner ausführt, sind mit

local:~#

gekennzeichnet.

Hier eine Liste der Schritte, die für die Installation notwendig sind:

Darüber hinaus enthält der Artikel noch folgende Informationen:

Los geht’s!
1. Subversion und Subversion-Server installieren
Als erstes müssen die Software-Pakete subversion und subversion-server installiert werden. Hierzu in ein Terminal wechseln und als root-Benutzer folgendes Kommando absetzen:

remote:~# rug install subversion subversion-server

Falls Subversion schon installiert sein sollte, kommt folgende Fehlermeldung:

ERROR: 'subversion' is not available, or is fully up-to-date.

Ihr könnt prüfen, ob Subversion installiert ist, in dem Ihr folgendes Kommando abschickt:

remote:~# rug info subversion subversion-server

In der Ausgabe gibt es für jedes der beiden Pakete einen Abschnitt. In beiden Abschnitten müssen die Texte Installed: Yes und Status: up-to-date vorkommen.

Falls auf Eurem Server Subversion schon installiert war, kann das natürlich bedeuten, dass die im Folgenden beschriebenen Schritte eventuell nicht mehr funktionieren.

2. Subversion-Repository anlegen

Nachdem uns nun die Software zur Verfügung steht, können wir weiter machen. Damit wir unseren Subversion-Server testen können, brauchen wir ein Repository. Als Speicherort für das Repository habe ich mir /srv/svn/ ausgesucht. Das Repository habe ich einfach mal repos genannt.

Das Anlegen des Repositories erfolgt ebenfalls im Terminal:

remote:~# svnadmin create /srv/svn/repos

Damit der Apache das Repository lesen und beschreiben kann, müssen wir im die Rechte dazu geben:

remote:~# chown -R wwwrun:www /srv/svn/repos

3. Den Subversion-Server konfigurieren

Ich gehe im Folgenden davon aus, dass Ihr auf Eurem VPS eine Domain (im Beispiel example.com) liegen habt, über die der Zugriff auf Subversion erfolgen soll. Für den Zugriff auf die Repositories möchte ich die URL http://example.com/svn/repos nutzen.

Wechselt in das Verzeichnis, in dem die Konfigurationsdateien für Eure Domain liegen:

remote:~# cd /srv/www/vhost/example.com/conf

In diesem Verzeichnis müsst Ihr die Datei vhost.conf bearbeiten. Falls die Datei noch nicht existiert, könnt Ihr sie einfach anlegen.

In diese Datei müsst Ihr folgende Zeilen kopieren (falls Ihr auf 64bit-Systemen lauft, müsst Ihr statt /usr/lib den Pfad /usr/lib64 nehmen):

LoadModule dav_module /usr/lib/apache2-prefork/mod_dav.so
LoadModule dav_svn_module /usr/lib/apache2/mod_dav_svn.so

<Location /svn>
 DAV svn
 SVNParentPath /srv/svn

 AuthType Basic
 AuthName "Authorization Realm"
 AuthUserFile /srv/svn/user_access/repos_passwdfile
 Require valid-user
</Location>

Damit die Konfiguration aus der vhost-Datei auch aktiv wird, muss die Konfiguration für den Webserver neu geschrieben und der Webserver durchgestartet werden. Dies wird mit folgendem Kommando durchgeführt:

remote:~# /usr/local/psa/admin/sbin/websrvmng −−reconfigure-vhost −−vhost-name=example.com −−restart

[Update 2008-03-05: Sollte später beim Aufruf der Repository-URL ein 404 auftreten, versucht es mal mit websrvmng -a -v und danach noch mal den reconfigure. Ich habe es nicht getestet, der Tipp stammt aus dem Kommentar von Micha (siehe unten)]

4. Benutzer für das Repository anlegen
Damit nicht jeder auf unser Repository zugreifen kann, habe ich einen Passwortschutz auf den Server gelegt. Die Benutzer und ihre Passworte werden in der Datei

/srv/svn/user_access/repos_passwdfile

gesucht. Um den ersten Benutzer test anzulegen verwendet Ihr folgenden Befehl:

remote:~# htpasswd2 -c /srv/svn/user_access/repos_passwdfile test

Ihr werdet nun nach dem Kennwort gefragt, das Ihr für den Benutzer test verwenden wollt. Das Kennwort müsst Ihr danach noch einmal bestätigen. Beim Anlegen weiterer Benutzer müsst Ihr den Schalter -c weglassen:

remote:~# htpasswd2 /srv/svn/user_access/repos_passwdfile noch_n_test

5. Der erste Zugriff auf den Server

Jetzt solltet Ihr schon in der Lage sein, auf Euer – noch leeres – Repository zuzugreifen. Ruft im Browser folgende URL auf:

http://example.com/svn/repos

Ihr werdet nach einem Benutzer und einem Kennwort gefragt. Hier gebt Ihr test und Euer Passwort an.

Wenn Ihr alles richtig gemacht habt, müsstet Ihr Euer leeres Repository sehen.

6. Ein Projekt importieren
Wir machen ein kleines Test-Projekt, das wir in das Repository legen wollen. Dazu baut Ihr Euch auf Eurem lokalen Rechner folgenden Verzeichnissbaum auf (dies müsst Ihr nun nicht mehr als root machen):

./test/branches/
./test/tags/
./test/trunk/
./test/trunk/README

In die Datei README könnt Ihr irgendetwas x-beliebiges reinschreiben.

Importiert das Test-Projekt von Eurem lokalen Rechner in das Repository:

local:~# svn import test http://example.com/svn/repos/test

Wenn Ihr nun erneut über den Browser auf Euren Server schaut, seht Ihr Euer Test-Projekt mit den Unterverzeichnissen und der Datei README.

Ab jetzt könnt Ihr mit Eurem Repository spielen, testen, etc.

Ich möchte noch einmal mit einem frischen Repository starten
Wenn Ihr Euer Repository noch einmal frisch anlegen wollt, löscht einfach das Verzeichnis /srv/svn/repos samt Inhalt und führt danach den Schritt 2 noch einmal aus.

Unschönheiten
Ein kleines Problem hat die oben beschriebene Vorgehensweise: Da ich die LoadModule-Direktiven in die vhost-Datei geschrieben habe, lässt sich auf einem VPS nur genau ein Subversion-Server für genau eine Domain betreiben. Wenn ein zweites Repository auf einer weiteren Domain genutzt werden soll, würden die LoadModule-Direktiven Fehlermeldungen auslösen.

Es wäre eventuell auch möglich die LoadModule-Direktiven in die Datei /etc/apache2/sysconfig.d/loadmodule.conf zu legen – ich wollte aber keine direkten Veränderungen am Apachen vornehmen…

Weiterführende Dokumentation
Um tiefer in die Materie zu kommen, empfehle ich folgende Dokumente und Webseiten:

Subversion
http://subversion.tigris.org – die offizielle Homepage von Subversion
Version Control with Subversion – das Buch über Subversion
Plesk
Dokumentation zu Plesk – hier insbesondere der Administrator’s Guide