SVN Server einrichten (Subversion)

In den letzten Tagen habe ich SVN für mich entdeckt. Wer auf dieses Tutorial stößt wird wahrscheinlich schon wissen, dass er einen SVN Server braucht und damit wofür dieser gut ist. Für alle die neu sind hier eine kurze Beschreibung, was SVN ist.

Auch wenn das Tutorial relativ lang ist, ist die Einrichtung von SVN wirklich simpel! Fragen und Kommentare sind gerne willkommen.

Dieses Tutorial behandelt die Einrichtung eines SVN Servers und nicht die Benutzung von SVN. Dazu sollte ein anderes Tutorial gesucht werden (z.B. Subversion Tutorial von Daniel Grunwald (mit TortoiseSVN) oder Command-Line Subversion Tutorial von Simon Harris (Kommandozeile, Englisch))

Was ist SVN?
SVN ist Versionsverwaltung. Jedes mal wenn eine Datei geändert wurde speichert das SVN diese als eine neue Revision. Dabei bleiben alle alten Versionen dieser Datei erhalten. Im Detail wird das durchs SVN so gestaltet, dass das System nur die Änderungen verfolgt und so die Datei zu einem beliebigen Zeitpunkt (bzw. in einer beliebigen Revision) wieder herstellen kann. Zusätzlich lassen sich die verschiedenen Version miteinander vergleichen. Wenn man z.B. Programme entwickelt sind die Funktionen des branching und tagging sinnvoll. Mit diesen kann eine gewisse Revision als fertiges Produkt bereitgestellt werden (z.B. ExampleSoftware Version 1.0). Aber SVN ist für alle Dateien geeignet in denen man Änderungen vornimmt.
Zusammengehörende Dateien bzw. Projekte werden in einem s.g. Repository zusammengefasst.

Weitere Informationen zu SVN bei Wikipedia oder im kostenlosen Buch Version Control with Subversion.


Voraussetzung
Prinzipiell kann man SVN auch nur lokal benutzen (siehe TIPP unter dem Punkt Installation). Ich gehe jedoch davon aus, dass die Versionskontrolle auf einem externen Server installiert werden soll (z.B. ein externer V-Server oder Rootserver; oder auch eine virtuelle Maschine).
Dieses Tutorial geht von einem Server mit Ubuntu 10.04 aus. Die Installation sollte aber auf anderen Linux-Systemen ähnlich sein.


Installation
Wie immer ist diese sehr einfach. Unter Ubuntu einfach sudo apt-get install subversion eintippen. Sobald die Installation abgeschlossen ist, ist SVN verfügbar. Zu diesem Zeitpunkt läuft kein Server. SVN selbst ist nur das Programm, welches die Versionkontrolle erlaubt. Um diese von einem entfernten Rechner nutzen zu können, muss der Zugriff noch eingerichtet werden.

TIPP:
Wer SVN nur lokal nutzen möchte ist jetzt schon fast fertig. Es gibt fertige Installationspakete für alle gängigen Systeme inkl. Mac OS X und Windows.


Konfiguration – Benutzer
Damit alle berechtigten Benutzer Zugriff auf die SVN Dateien haben, müssen diese Rechte konfiguriert werden. Dazu sollte eine neue Gruppe erstellt werden – bei mir heißt diese “subversion”. Danach werden die Benutzer, die Zugriff auf das SVN haben zur Gruppe hinzugefügt.

groupadd subversion
usermod -G subversion david
usermod -G subversion user2
usermod -G subversion www-data

Der Benutzer www-data ist der Benutzer des Apache2 Webservers. Auf anderen System oder mit anderen Webservern kann dieser anders heißen. www-data sollte zur Gruppe subversion hinzugefügt werden, wenn der Zugriff per WebDAV (siehe weiter unten) eingerichtet werden soll.

Konfiguration – Pfade
Nun wird ein Verzeichnis benötigt in dem die SVN Dateien/Projekte liegen sollen. Bei mir ist dies /srv/svn. Der Pfad ist frei wählbar. Anschließend wird ein Ordner für das Projekt erstellt und SVN dafür aktiviert.

sudo mkdir /srv/svn
sudo mkdir /srv/svn/meinProjekt
sudo svnadmin create /srv/svn/meinProjekt

Damit die Zugriffsrechte stimmen werden diese noch verändert:

cd /srv/svn
sudo chown -R www-data:subversion meinProjekt
sudo chmod -R g+rws meinProjekt

Jetzt haben alle Mitglieder der Gruppe “subversion” Schreibrechte.

TIPP
Für eine ausschließlich lokale Konfiguration kann der Teil Konfiguration – Benutzer und im Teil Konfiguration – Pfade der zweite Code-Abschnitt (der die Zugriffsrechte anpasst) übersprungen werden. Außerdem ist für eine solche Konfiguration das Tutorial hiermit beendet.
Ein checkout auf einem solchen, lokalen, Repository sieht dann beispielsweise wie folgt aus:
svn co file:///srv/svn/meinProjekt


Externen Zugriff einrichten
Die wohl am meisten verbreitete Methode von außen auf das SVN-Repository zuzugreifen ist die via WebDAV. Dafür sollte nun das Paket libapache2-svn installiert werden. Hier gehe ich davon aus, dass auf dem Rechner ein Apache-Webserver läuft.

Konfiguration des WebDAV
Die Konfigurationsdatei befindet sich unter /etc/apache2/mods-available/dav_svn.conf. Für die o.g. Konfiguration mit den Pfaden sollte folgendes in diese Datei geschrieben werden:

< Location /svn/meinProjekt>
DAV svn
SVNPath /srv/svn/meinProjekt
AuthType Basic
AuthName “meinProjekt Subversion Repository”
AuthUserFile /etc/subversion/passwd
Require valid-user
< /Location>

(Bitte beim kopieren das Leerzeichen nach dem < im Location-tag entfernen)

Apache-Kenner sehen sofort, dass hier einfach der Zugriff mit einer Passwortdatei beschränkt wird. Das Location-tag besagt, dass wenn man im Browser die IP/Domain des Servers gefolgt von /svn/meinProjekt aufruft (z.B. http://www.example.com/svn/meinProjekt), dieses Verzeichnis angezeigt wird. Dies kann beliebig angepasst werden und hängt in keiner Weise mit dem Verzeichnis auf dem Server zusammen. Dieses wird in SVNPath angegeben.

Zugriffsliste
Die in AuthUserFile angegebene Datei muss nun erstellt werden. Hier werden alle Benutzer definiert, die Zugriff auf das Repository haben sollen. Der erste Benutzer wird mit
sudo htpasswd -c /etc/subversion/passwd username
erstellt, wobei username durch den gewünschten Benutzernamen ersetzt werden muss. Das Programm fragt dann nach einem Passwort für diesen Benutzer. ACHTUNG: Dies ist unabhängig von den Systembenutzern. Hier wird eine völlig neue Benutzername:Passwort Datei angelegt. Der Parameter -c sorgt dafür dass die Datei erstellt wird. Bei weiteren Benutzern sollte dieser also weggelassen werden.

Abschließend muss Apache neu gestartet werden und die Konfiguration ist abgeschlossen.
service apache2 restart
oder
/etc/init.d/apache2 restart

Ein checkout auf einem via WebDAV verfügbaren Repository sieht dann beispielsweise wie folgt aus:
svn co http://www.example.com/svn/meinProjekt

Leave a Reply