Subversion enthält Svnserve, einen eigenständigen kleinen Server, der ein eigenes Protokoll auf einer Standard TCP/IP Verbindung nutzt. Er ist ideal für kleinere Installationen oder wo ein kompletter Apache nicht eingesetzt werden kann.
In den meisten Fällen ist svnserve einfacher aufzusetzen und arbeitet obendrein schneller als ein Apache basierter Server. Allerdings stehen einige fortgeschrittene Funktionen nicht zur Verfügung. Dadurch, dass mittlerweile SASL enthalten ist, kann der Server auch einfach abgesichert werden.
Laden Sie die neueste Subversion Version von http://subversion.apache.org/getting.html herunter. Alternativ können Sie sich ein Installationsprogramm von CollabNet unter http://www.collab.net/downloads/subversion herunterladen. Dieses Installationsprogramm richtet svnserve als Windows Dienst ein und enthält obendrein einige der Werkzeuge, die Sie zum Einrichten von SASL zur Absicherung des Servers benötigen.
Wenn Sie bereits Subversion installiert haben und svnserve läuft, müssen Sie den Dienst stoppen, bevor Sie weitermachen
Starten Sie das Subversion Installationsprogramm. Wenn Sie die Installation auf Ihrem Server durchführen (empfohlen), können Sie Schritt 4 überspringen.
Öffnen Sie das Installationsverzeichnis von Subversion im Windows Explorer. (normalerweise C:\Programme\Subversion). Aus dem bin Verzeichnis kopieren Sie die Dateien svnserve.exe, intl3_svn.dll, libapr.dll, libapriconv.dll, libapriutil.dll, libdb*.dll, libeay32.dll und ssleay32.dll in das Verzeichnis in dem Ihr Server installiert ist z.B. c:\svnserve.
Nun, da svnserve installiert ist, müssen Sie die Anwendung auch aktivieren. Die einfachste Variante ist, das folgende Skript in der Eingabeaufforderung zu starten:
svnserve.exe --daemon
Sie können auch eine Verknüpfung dafür anzulegen. Svnserve wird nun auf Anfragen warten, die über Port 3690 eingehen. Die --daemon Option zwingt svnserve, so lange als Dienst zu laufen, bis der Prozess manuell beendet wird.
Wenn Sie noch kein Projektarchiv angelegt haben, befolgen Sie die folgenden Anweisungen dazu „Konfiguration“.
Um schnell herauszufinden, ob svnserve arbeitet, rufen Sie mittels → den Projektarchivbetrachter aus dem Kontextmenü von TortoiseSVN auf.
Nehmen wir an, Ihr Projektarchiv befindet sich in c:\repos\TestRepo und Ihr Server heißt localhost. Dann müssen Sie in das URL Feld des Projektarchivbetrachters:
svn://localhost/repos/TestRepo
eingeben.
Sie können beim Eingeben von URLs Zeit sparen und die Sicherheit erhöhen, indem Sie svnserve mit der --root Option einen Basispfad für das Projektarchiv übergeben und den Zugriff auf ein bestimmtes Verzeichnis auf dem Server beschränken:
svnserve.exe --daemon --root drive:\path\to\repository\root
Mit dem vorigen Test als Vorgabe würde svnserve folgendermaßen aufgerufen:
svnserve.exe --daemon -r c:\repos
In TortoiseSVN würde sich die URL zum Projektarchiv dementsprechend verkürzen:
svn://localhost/TestRepo
Beachten Sie, dass die -r Option auch verwendet werden muss, wenn sich das Projektarchiv auf einer anderen Partition oder einem anderen Laufwerk auf dem Server befindet, als Svnserve.
Svnserve kann eine beliebige Anzahl von Projektarchiven bereitstellen. Sie müssen diese nur unterhalb des soeben von Ihnen festgelegten Basisordners erzeugen und über eine zum Basisordner relative URL darauf zugreifen.
Erstellen Sie kein Berkeley DB Projektarchiv auf einer Netzwerkfreigabe oder greifen auf eine solche zu. Eine BDB darf nicht auf einer Netzwerkfreigabe sein! Auch nicht wenn die Netzwerkfreigabe als Laufwerk verbunden ist. Wenn Sie versuchen ein solches Projektarchiv zu verwenden wird dies zu unvorhersehbaren Effekten führen - Sie können mysteriöse Fehlermeldungen gleich zu Beginn erhalten, oder es können Monate vergehen ehe Sie feststellen dass das Projektarchiv korrupt und nicht mehr zu retten ist.
Es ist normalerweise nicht die beste Lösung, svnserve als Anwender laufen zu lassen. Das bedeutet nämlich, dass ständig ein Anwender an Ihrem Server angemeldet ist oder dass jemand svnserve versehentlich beenden beziehungsweise nach einem Neustart vergessen könnte den Prozess ebenfalls zu starten. Eine bessere Möglichkeit besteht darin, svnserve als Dienst zu starten. Beginnend mit Subversion 1.4 kann svnserve als Windows-Dienst gestartet werden, vorherige Versionen benötigen ein Zusatzprogramm.
Um svnserve als Dienst einzurichten, der gemeinsam mit Windows startet, führen Sie folgenden Befehl aus.
sc create svnserve binpath= "c:\svnserve\svnserve.exe --service --root c:\repos" displayname= "Subversion" depend= tcpip start= auto
Die Eingabe des Befehls muss in einer einzigen Zeile erfolgen. Falls einer der Pfade Leerzeichen enthält, müssen Sie diesen folgendermaßen in Anführungszeichen einschließen
sc create svnserve
binpath= "\"C:\Program Files\Subversion\bin\svnserve.exe\"
--service --root c:\repos"
displayname= "Subversion"
depend= tcpip
start= auto
Sie können auch nach dem Start des Dienstes eine Beschreibung angeben. Diese wird im Windows Dienstemanager angezeigt.
sc description svnserve "Subversion server (svnserve)"
Beachten Sie bitte das eher unübliche Kommandozeilenformat von sc. In den Schlüssel= Wert Paaren darf kein Leerzeichen zwischen dem Schlüssel und dem = stehen, vor dem Wert hingegen muss ein Leerzeichen stehen.
Microsoft empfiehlt mittlerweile, dass Dienste entweder unter dem lokale Dienste- oder dem Netzwerkdienstekonto ausgeführt werden. Lesen Sie mehr dazu unter The Services and Service Accounts Security Planning Guide. Um den Dienst unter dem lokalen Dienstekonto einzurichten, fügen Sie den folgenden Text an das obenstehende Beispiel an.
obj="NT AUTHORITY\LocalService"
Beachten Sie, dass Sie dem lokalen Dienstekonto die entsprechenden Zugriffsberechtigungen sowohl auf Subversion als auch auf Ihre Projektarchive erteilen müssen. Das gilt auch für Anwendungen, die von Aktionsskripten aufgerufen werden. Die interne Gruppe dafür heißt "LOCAL SERVICE".
Sobald Sie den Dienst installiert haben, müssen Sie ihn im Dienstemanager von Hand starten (nur dieses eine Mal; Der Dienst wird automatisch aktiviert sobald der Rechner neu startet).
Für weitere Informationen schauen Sie bitte in Windows Service Support for Svnserve nach.
Falls Sie eine ältere Version von svnserve mit Hilfe des SvnService Programmes gestartet haben und nun svnserve direkt verwenden wollen, sollten Sie svnservice als Dienst deinstallieren. Vorher müssen sie den Dienst allerdings anhalten! Verwenden Sie einfach den Befehl
svnservice -remove
um den Diensteintrag zu entfernen.
Die Standardkonfiguration von svnserve lässt nur anonymen Lesezugriff zu, so dass Sie zwar das Projektarchiv über eine svn:// URL betrachten, auschecken und aktualisieren, jedoch keine weiteren Operationen wie übertragen vornehmen können.
Um Schreibzugriff auf das Projektarchiv zu ermöglichen, müssen Sie die conf/svnserve.conf Datei im Verzeichnis des Projektarchivs bearbeiten. Diese Datei enthält die Dokumentation sowie die Parameter zur Einrichtung des svnserve Dienstes.
Sie können anonymen Schreibzugriff ermöglichen, indem Sie einfach:
[general] anon-access = write
eintragen. Allerdings werden Sie nicht erfahren, wer Änderungen an Daten im Projektarchiv vorgenommen hat, weil die svn:author Eigenschaft leer bleibt. Obendrein können Sie nicht kontrollieren, wer Änderungen an Daten vornimmt, da Sie es ja explizit jedem, anonym gestatten!
Eine Möglichkeit, den Zugriff zu steuern, ist eine Passwortdatenbank anzulegen:
[general] anon-access = none auth-access = write password-db = userfile
Wobei userfile im gleichen Verzeichnis wie svnserve.conf liegt. Diese Datei kann auch an einer anderen Stelle im Dateisystem liegen (nützlich, wenn Sie mehrere Projektarchive haben, die die gleichen Zugriffsrechte benötigen). In diesem Fall muss mit einer absoluten Pfadangabe oder mit einer Pfadangabe relativ zum conf Verzeichnis auf die Datei verwiesen werden. Wenn Sie einen Pfad angeben muss er /wie/in/unix geschrieben werden. Ein \ oder ein Laufwerksbuchstabe funktionieren nicht. Die Datei userfile hat folgende Struktur:
[users] username = password ...
Auf diese Weise wird allen nicht angemeldeten (anon-access) Benutzern der Zugriff verweigert, wogegen alle in userfile aufgeführten Anwender Schreibzugriff erhalten.
Falls Sie mehrere Projektarchive mit derselben Passwortdatenbank verwalten, wird die Einrichtung eines Anmeldebereichs das Leben für die Anwender vereinfachen, weil TortoiseSVN Anmeldeinformationen speichern kann, so dass sie nur einmal eingegeben werden müssen. Weitere Informationen finden sich in folgenden Abschnitten des Subversion Buchs: Create a 'users' file and realm und Client Credentials Caching .
Beim Cyrus „Simple Authentication and Security Layer“ handelt es sich um eine Open Source Bibliothek, die von der Carnegie Mellon Universität geschrieben wurde. Sie fügt allgemeine Anmelde- und Verschlüsselungsfunktionen zu jedem Netzwerkprotokoll hinzu. Ab Subversion 1.5 unterstützen sowohl der svnserve Server und der TortoiseSVN Client diese Bibliothek.
Für eine vollständige Beschreibung der zur Verfügung stehenden Optionen sollten Sie sich im Subversion Buch das Kapitel Using svnserve with SASL durchlesen. Wenn Sie nur an einem einfachen Verfahren interessiert sind, mit dessen Hilfe Sie sichere Anmeldung und Verschlüsselung auf einem Windows Server einrichten können, so dass auf Ihr Projektarchiv sicher über das große böse Internet zugegriffen werden kann, lesen Sie hier weiter.
Um die SASL Mechanismen auf Ihrem Server zu aktivieren, müssen Sie drei Dinge tun. Als Erstes erstellen Sie eine [sasl] Sektion in der svnserve.conf Datei Ihres Projektarchivs, die folgenden Eintrag enthält:
use-sasl = true
Zweitens legen Sie eine Datei namens svn.conf an geeigneter Stelle an - typischerweise im Installationsverzeichnis von Subversion.
Drittens erzeugen Sie zwei neue Registrierungseinträge, damit SASL weiß, wo seine Dateien stehen. Erstellen Sie einen Schlüssel namens [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library] und legen Sie dort zwei neue Zeichenketten an: SearchPath zeigt auf das Verzeichnis, das die sasl*.dll enthält (Normalerweise im Subversion Installationsverzeichnis), und ConfFile zeigt auf das Verzeichnis, das die svn.conf Datei enthält. Falls Sie den CollabNet Installer verwendet haben, wurden diese Einträge bereits erzeugt.
Editieren Sie die svn.conf Datei, so dass sie folgende Einträge enthält:
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: DIGEST-MD5 sasldb_path: C:\TortoiseSVN\sasldb
Die letzte Zeile enthält den Ort der Anmeldedatenbank, eine Datei namens sasldb. Diese Datei kann überall liegen, ein guter Platz ist jedoch der Elternpfad des Projektarchivs. Stellen Sie sicher, dass der svnserve Dienst Lesezugriff auf diese Datei hat.
Falls svnserve bereits läuft, müssen Sie den Dienst neu starten, damit er die geänderte Konfiguration einliest.
Nun, da alles eingerichtet ist, müssen Sie nur noch die Benutzer und Passwörter einrichten. Dazu benötigen Sie das saslpasswd2 Programm. Falls Sie den CollabNet Installer benutzt haben, findet sich die Anwendung im Installationsverzeichnis. Der Aufruf lautet wie folgt:
saslpasswd2 -c -f C:\TortoiseSVN\sasldb -u Anmeldebereich Name
Der -f Parameter gibt den Ort der Datenbank an, Anmeldebereich muss der gleiche Wert wie in der svnserve.conf Datei Ihres Projektarchivs sein und Name ist, wie erwartet, der Name des Anwenders. Beachten Sie bitte, dass der Anmeldebereich keine Leerzeichen enthalten darf.
Sie können die in der Datenbank gespeicherten Benutzer mit Hilfe des sasldblistusers2 Programms auflisten.
Um verschiedene Stufen der Verschlüsselung ein- und auszuschalten, können Sie zwei Werte in der svnserve.conf Datei Ihres Projektarchivs setzen:
[sasl] use-sasl = true min-encryption = 128 max-encryption = 256
Die min-encryption und max-encryption Variablen legen die vom Server verlangte Verschlüsselung fest. Um die Verschlüsselung komplett abzuschalten, setzen Sie beide Werte auf Null. Für einfache Prüfsummen ohne Verschlüsselung (Verhindern von Manipulationen und Sicherstellen der Datenintegrität), setzen Sie beide Werte auf Eins. Wenn Sie Verschlüsselung zulassen aber nicht erzwingen wollen, setzen Sie den Minimalwert auf Null und den Maximalwert auf eine Bitlänge. Um Verschlüsselung zu erzwingen, setzen Sie beide Werte auf Zahlen größer als Eins. In unserem obenstehenden Beispiel verlangen wir von den Clients mindestens 128-Bit Verschlüsselung aber nicht mehr als 256-Bit Verschlüsselung.
Eine andere Möglichkeit Benutzer an einem svnserve basierten Server anzumelden, besteht darin, eine Secure Shell (SSH) zu installieren, durch die die Anfragen weitergeleitet (getunnelt) werden. Diese ist nicht so einfach einzurichten wie SASL, kann aber in manchen Fällen auch eine gute Lösung sein.
Mit diesem Ansatz läuft svnserve nicht als Dienst, sondern die Secure Shell startet svnserve mit den Berechtigungen des über SSH angemeldeten Benutzers. Dafür benötigen Sie allerdings einen SSH Dienst auf Ihrem Server.
Eine einfache Anleitung zum Einrichten Ihres Servers findet sich in Anhang G, Svnserve mit SSH sichern. Sie können weitere Beiträge zum Thema SSH in der FAQ finden, indem Sie nach „SSH“ suchen.
Weitere Informationen über svnserve finden sich in Versionskontrolle mit Subversion .
Beginnend mit Subversion 1.3, unterstützt svnserve die gleiche pfadbasierte Autorisierung über mod_authz_svn wie Apache. Sie müssen die Datei conf/svnserve.conf im Projektarchivverzeichnis bearbeiten und eine Zeile, die auf die Berechtigungsdatei verweist, einfügen:
[general] authz-db = authz
Bei authz handelt es sich um eine Datei, die Sie anlegen, um die Zugriffsberechtigungen zu definieren. Sie können dieselbe Datei für mehrere Projektarchive verwenden. Informationen über das Dateiformat finden sich in „Pfadbasierte Autorisierung“.