info@a-coding-project.de

Subversion (SVN): Svnserve

Obwohl SVN eng an den Apache gekoppelt ist, ist es nicht zwingend notwendig, den Apache als Subversion-Server zu verwenden. Subversion liefert bei der Installation ein Tool mit der Bezeichnung "svnserve" mit, mit dem ein alternativer Subversion-Server mit dem gleichen Namen eingerichtet werden kann.

Erreichbarkeit des Repositories

Wenn man die Möglichkeiten des Apache und des "svnserve"-Servers zusammenfasst, gibt es verschiedene Möglichkeiten, wie eine Server-URL angesprochen werden kann. In der folgenden Tabelle werden alle Alternativen zusammengefasst:

Schema Beschreibung
file:/// Ansprechen über das Filesystem
http:// Ansprechen über WebDAV und Apache
https:// gleich mit http:// nur mit SSL-Verschlüsselung
svn:// propritäres Protokoll für svnserve-Server
svn+ssh:// "svn://"-Variante über einen SSL-Tunnel

Vergleich zwischen Apache und sunserve

Anhand von relevanten Features sollen die Vorteile und Nachteile der beiden Servervarianten, die SVN im Angebot hat, beleuchtet werden. Jeder Administrator muss dann selbst eine Entscheidung treffen, welchen Server er verwenden möchte. Die folgende Tabelle zeigt konkret die Unterschiede zwischen beiden Servern auf:

Feature Apache Svnserve
Authentifzierung Basic, X.509, LDAP, NTLM usw. CRAM-MD5
Zugänge für Nutzer eigene Dateien eigene Dateien
Zugriffsrechte Lese-/Schreibzugriff granulierbar Lese-/Schreibzugriff granulierbar
Verschlüsselung mit SSL möglich keine (*)
Protokollierung innerhalb des Apache keine
Kompatibilität mit allen Webdav-Clients nur mit SVN-clients
Browsersupport teilweise integriert nur mit externen Tools
Geschwindigkeit eher langsam eher schneller
Einrichtung des Servers eher komplex sehr einfach
(*) Der "svnserve"-Server kennt keine SSL-Verschlüsselung. Wenn die Daten zwischen Client und Server in diesem Fall verschlüsselt übertragen werden sollen, muss dies über einen SSH-Tunnel geschehen.

Einrichtung des svnserve-Servers

Das dazu notwendige Programm wird bereits bei der SVN-Installation mitgeliefert. Im "bin"-Ordner des Installationsverzeichnisses befindet sich das Programm "svnserve.exe", welches den Daemon für den Server liefert. Um den Server-Daemon zu starten muss in der Konsole folgendes Kommando eingegeben werden:

svnserve.exe -d 

Das Kommando liefert noch zwei Optionen mit, um den Serverdaemon zu beeinflussen. Mit der Option "-listen-port" kann ein IP-Port angegeben werden, auf den der Daemon lauschen soll und mit dem Parameter "-listen-host" kann der Daemon an einen bestimmten Host gebunden werden. Beide Parameter sind optional.
Die obige Variante des Serverdaemons bietet allerdings ein Sicherheitsrisiko, da damit alle Repositories über das Netzwerk erreichbar sind. Deshalb gibt es die Möglichkeit, den Serverdaemon nur für ein bestimmtes Repository zu starten. Zu diesem Zweck gibt es die Option "-r" und als Wert ist der lokale Pfad zum Repository notwendig. Das folgende Beispiel realisiert den Serverstart mit nur einem bestimmten Repository:

svnserve.exe -d -r "D:/subversion/myrepos"

Zum Beispiel beim "Auschecken" der Dateien kann das obige Repository durch das folgende Kommando angesprochen werden:

svn co svn://localhost/projekt1/trunk/

svnserve-Server als Windows Service

Wenn es sich um ein Betriebssystem der Windows NT-Reihe handelt (z.B. Windows 2000, Windows 2003, Windows XP oder Windows Vista) besteht die Möglichkeit, den svnserve-Daemon als Windows Service laufen zu lassen. Dies ist wesentlich praktischer als die Konsolenvariante, bei der immer ein Konsolenfenster geöffnet werden, ein Kommando eingegeben werden muss und das Fenster während der gesamten Windows-Sitzung nicht mehr geschlossen werden darf. Zuerst muss mit dem Kommando "sc", welches ebenfalls mit "Subversion" mitgeliefert wird, der Service angelegt werden. Ein Beispiel für das Kreieren dieses Services sieht so aus:

sc create svn
   binpath= ""D:ProgrammeSubversionbinsvnserve.exe" -service
   -r "D:/subversion/myrepos" 
   displayname= "Subversion Server"
   depend= Tcpip
   start= auto

Wichtig dabei ist, dass der Wert in der binpath-Zeile maskiert wird, da es sich um eine Zeile in der Konsole handeln soll und nicht um einen Pfad zu einer ausführbaren Datei. Eine weitere elementare Angabe ist die Option "-service", mit der festgelegt wird, dass der svnserve-Daemon als Service gestartet werden soll.
Wenn der Service einmal eingerichtet ist, kann er durch die bekannten Konsolenkommandos "net stop svn" und "net start svn" gestoppt bzw. gestartet werden. "svn" ist in diesem Fall der Name des Windows Service.

Zugriff auf svnserve-Server mit ssh

Wenn der svnserve-Daemon mit einer SSH-Unterstützung gestartet werden soll, muss dem Daemon die Option "-t" (t = tunneling) ohne einen bestimmten Wert hinzugefügt werden. Dabei spielt es keine Rolle, ob der Daemon über die Konsole oder als Windows-Service gestartet wird.
Das Betriebssystem "Windows" unterstützt standardmäßig kein SSH. Dies kann über die Programme "PuTTY" oder "WinSCP" realisiert werden. Die Linux-Familie besitzt normalerweise schon eine SSH-Unterstützung. Wenn man per SSH auf svnserve zugreifen möchte, geschieht dies automatisch mit dem aktuellen Systemuser und einem propritären Aufruf der Repository-URL. Das folgende Beispiel zeigt ein grundlegendes Prinzip:

svn ls svn+ssh://localhost/projekt1/trunk/

Danach wird mit der folgenden Zeile ein Passwort verlangt:

testuser@localhost's password:  *****

Wenn das Passwort stimmt, wird der Inhalt des Repositories wie gewünscht angezeigt.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant