Unterabschnitte

Die Versionsverwaltung Subversion

Ab Version 1.6.0 - Stand 24.01.2019

Allgemeines

Eine Versionsverwaltung ist ein Programm, das die Ablage von Dateien in verschiedenen Versionsständen ermöglicht und jederzeit den Zugriff auf ältere Versionen zulässt. Insbesondere im Bereich der Software-Entwicklung, aber nicht nur dort, ist eine Versionsverwaltung daher ein sehr nützliches Hilfsmittel.

Subversion ist der Nachfolger des bekannten CVS Tools. In ihm wurden viele der von dort bekannten Nachteile behoben. Im vorliegenden Eisfair-Paket sind sowohl die Client-, als auch die Serverkomponenten von Subversion enthalten. Damit kann man auf einfache Weise sowohl einen eigenen Subversion-Server realisieren, als auch auf Datenbestände entfernter Rechner zugreifen.

Wird Subversion als Server eingesetzt, so können mehrere unterschiedliche Datenbestände verwaltet werden. Jedes dieser Repositories verfügt dabei über seine eigene Benutzer- und Kennwortliste. Ist zusätzlich zu Subversion der Web-Server Apache2 auf dem selben Rechner installiert, dann ist neben dem Subversion-eigenen Protokoll (svn://...) zusätzlich der Zugriff über HTTP/WebDAV (http://...) möglich.

Voraussetzungen

Um Subversion als Server zu betreiben ist die Installation des xinetd - Daemons notwendig. Dieser befindet sich im Inet-Paket. Zudem kann als Ergänzung der Web-Server Apache2 installiert werden.

Wichtige Hinweise

Subversion verwaltet seine eigenen Benutzerlisten und Kennwörter, die nicht notwendigerweise auch Systembenutzer sein müssen. Dazu gibt es aber zwei wichtige Einschränkungen zu beachten:

Alle lokalen Anwender, die über die Zugriffsmethode ”file://” auf ein lokales Repository zugreifen möchten, müssen in der Benutzergruppe ”svn” Mitglied sein. Anderenfalls ist das Zurückschreiben von Änderungen nicht möglich.

Für die Zugriffsmethode ”svn+ssh://” ist auf dem entfernten Rechner für den jeweiligen Anwender ein ssh Zugang erforderlich, was i.d.R ein mit dem Benutzernamen identisches Anmeldekonto voraussetzt. Damit nicht bei jedem Zugriff ein Kennwort eingegeben werden muss, empfiehlt es sich zudem, auf dem Zielsystem einen Anmeldeschlüssel (Preshared Key) zu hinterlegen.

Bei der Wahl des Speicherortes für Repositories ist zu beachten, dass diese nur auf lokalen Datenträgern mit ext2 oder ext3 Dateisystemen liegen dürfen. Niemals sollte ein NFS-Laufwerk als Speicherort verwendet werden.

Konfiguration

Die Konfiguration kann über den Menüpunkt ”Edit Configuration” geändert werden. Nach Beendigung des Editors wird die Konfiguration automatisch auf Fehler überprüft. Werden Fehler festgestellt, so sollten die entsprechenden Einträge in jedem Fall korrigiert werden.

Server Einstellungen und Zugriffslisten

START_SUBVERSION

Mit diesem globalen Schalter werden alle Server-Funktionen von Subversion ein- bzw ausgeschaltet.

Gültige Werte: ”yes”, ”no”

SVN_ENABLE_SVNSERVE

Legt fest, ob der Zugriff auf lokale Repositories über den Subversion Server 'svnserve' möglich sein soll. Soll Subversion als Server arbeiten, dann kann diese Option auf ”yes” gestellt werden. Eine Alternative dazu ist der Zugriff über HTTP/WebDAV.

Gültige Werte: ”yes”, ”no”

SVN_SVNSERVE_ROOT_DIR

Mit diesem optionalen Parameter kann ein absoluter Pfad als Wurzelverzeichnis fuer svnserve angegeben werden, der allen Repositories gemein sein muss, die mit svnserve angesprochen werden sollen.

Wird der Wert angegeben, dann ist in der URL beim Zugriff auf eines der Repositories lediglich der Pfad anzugeben der relativ zum Wurzelverzeichnis liegt. Anderenfalls ist eine absolute Pfadangabe erforderlich.

Beispiel: ”/var/lib”

SVN_ENABLE_WEBDAV

Legt fest, ob der Zugriff auf lokale Repositories über die Zugriffsmethode HTTP/WebDAV möglich sein soll oder nicht. Es ist dabei zu beachten, dass einerseits der Web-Server Apache auf dem Server installiert sein muss und andererseits mit der Option SVN_REPOS_x_WEBDAV für das jeweilige der Zugriff zuzulassen ist, damit diese Methode funktioniert.

Gültige Werte: ”yes”, ”no”

SVN_WEBDAV_AUTH_METHOD

Wählt die Methode, die zur Anmeldung von Benutzern verwendet werden soll, sobald über HTTP/WebDAV auf ein Repository zugegriffen wird.

Falls ”basic” verwendet wird, werden die Anmeldedaten (Benutzername und/oder Kennwort) als einfach kodierte und leicht zu entschlüsselnde Base64-kodierte Zeichenkette über das Netzwerk übertragen.

Wird statt dessen ”digest” verwendet, werden die Anmeldedaten durch eine hash-Funktion verschlüsselt bevor sie übertragen werden. Zudem wird sichergestellt, dass ein Angreifer den Hash-Wert nicht abfangen und wiederverwenden kann.

Damit stellt ”digest” gegenüber ”basic” eine erheblich sicherere Authentifizierungsmethode dar und sollte wenn möglich verwendet werden. Solange der Client die Methode korrekt unterstützt bemerkt der Anwender keinen Unterschied im Vergleich zu ”basic”.

Gültige Werte: ”basic”, ”digest”

SVN_ACL_N

Anzahl der Zugriffslisten, die definiert werden sollen. Unter eisfair werden Subversion User in Zugriffslisten verwaltet, die den einzelnen Repositories zugeordnet werden. Ein User der auf ein Repository zu greifen möchte muss Mitglied in einer Zugriffsliste sein, die wiederum dem Repository zugeordent sein muss.

Um getrennte Userlisten für jedes Repository zu haben, wie es aus früheren Versionen dieses Pakets bekannt war, muss eine einzelne Zugriffsliste für jedes Repository angelegt werden. Diese wird dann dem jeweiligen Repo zugeordnet. Um statt dessen eine globale Liste von Anwendern zu erhalten, die gleichermaßen auf alle Repositories zugreifen dürfen, kann eine einzelne Zugriffsliste angelegt werden, die dann allen Repositories zugewiesen wird. Da es möglich ist, einem Repository mehrere Zugriffsliste zuzuordnen, können beide Zugriffsmodelle (global und lokal) kombiniert werden.

Beispiel: ”3”

SVN_ACL_x_NAME

Ein eindeutiger Name für die Zugriffsliste. Dieser Name wird verwendet, um die Zugriffsliste bei der Zuordnung zu einem Repository eindeutig zu identifizieren. Gültige Werte für ACL Namen bestehen aus Buchstaben, Zahlen und Unterstrichen. Die Groß-Kleinschreibung der Namen spielt keine Rolle.

Beispiel: ”DEVELOPERS”

SVN_ACL_x_USER_N

Anzahl der Anwender, die in der aktuellen Zugriffsliste (x) angelegt werden sollen.

Beispiel: ”10”

SVN_ACL_x_USER_x_ACTIVE

Wenn dieser Wert auf ”yes” steht, dann ist der jeweilige Anwender aktiv (Standard). Um den User (temporär) aus der aktuellen Liste zu entfernen, kann der Wert auf ”no” gesetzt werden. In diesem Fall wird der Anwernder ignoriert, wenn die Benutzerdatenbanken zusammengestellt werden.

Um den Anwender dauerhaft aus der Liste zu entfernen, wird er an das Ende der Liste verschoben (F3). Anschließend wird die Länge der Liste um ein Element reduziert.

Gültige Werte: ”yes”, ”no”

SVN_ACL_x_USER_x_NAME

Login Name des Anwenders.

Beispiel: ”hans”

SVN_ACL_x_USER_x_PASSWD

Kennwort des Anwenders (wird im ECE maskiert dargestellt).

Beispiel: ”geheim”

Repository Einstellungen

SVN_REPOS_N

Legt die Anzahl der Repositories auf diesem Server fest.

Bitte beachten: Beim Zugriff über den Subversion Server ”svnserve” wird die URL bei nur einem Repository aus dem Namen des Servers ohne den absoluten Pfad zum Repository gebildet. Bei mehreren Repositories dagegen muss der absolute Pfad hinter dem Servernamen angegeben werden. Beispiele:

svn://svn.myhome.local = URL bei einem Repository
svn://svn.myhome.local/var/lib/svn1 = URL bei mehreren Repositories

Beispiel: ”2”

SVN_REPOS_x_DIR

Basisverzeichnis des entsprechenden Subversion Repositories. Wenn das Verzeichnis nicht existiert, so wird es automatisch erstellt. Existiert nur ein Repository, so braucht dieser Pfad bei externem Zugriff nicht mit angegeben werden.

Beispiel: ”/var/lib/svn”

SVN_REPOS_x_WEBDAV

Legt fest, ob der Zugriff über HTTP/WebDAV auf dieses Repository erlaubt sein soll oder nicht. Wenn diese Option auf den Wert ”yes” gestellt wird, dann erscheint das Repository unter der URL:

http://yourserver/svn/$SVN_REPOS_x_WEBNAME

Diese Einstellung ist jedoch wirkungslos, solange der Web-Server 'apache2' nicht auf diesem Rechner installiert ist.

Gültige Werte: ”yes”, ”no”

SVN_REPOS_x_WEBNAME

Definiert den Namen (Alias) für den Zugriff über HTTP/WebDAV auf dieses Repository. Wenn SVN_REPOS_x_WEBDAV auf den Wert ”yes” gestellt ist, dann erscheint das Repository unter der URL:

http://yourserver/svn/$SVN_REPOS_x_WEBNAME

Diese Einstellung ist jedoch wirkungslos, solange der Web-Server 'apache2' nicht auf diesem Rechner installiert ist.

Gültige Werte: ”yes”, ”no”

SVN_REPOS_x_ANON_ACCESS

Regelt den Zugriff für anonyme Benutzer auf das Repository.

Gültige Werte: ”none”, ”read”, ”write”

SVN_REPOS_x_AUTH_ACCESS

Regelt den Zugriff für angemeldete Benutzer auf das Repository. Dabei ist zu beachten, das angemeldete Benutzer über WebDAV immer volle Zugriffsrechte haben, unabhängig vom Wert dieser Option.

Gültige Werte: ”none”, ”read”, ”write”

SVN_REPOS_x_ACL

Liste von ACL Namen durch Leerzeichen getrennt, die gültige Zugriffslisten identifizieren. Wenn sich in der Aufzählung ungültige Namen befinden, wird dies später angezeigt, wenn die Konfiguration aktualisiert wird.

Es ist allerdings zu beachten, dass ACL Namen nicht nach Groß-Kleinschreibung unterschieden werden. Das bedeutet, dass ”Gobal”, ”GLOBAL” und ”global” alle die selbe Zugriffsliste angeben.

Beispiel: ”DEVELOPERS ADMINS”

SVN_REPOS_x_BACKUP

Wenn dieses Repository automatisch gesichert werden soll, wird dieser Wert auf ”yes” gesetzt. Anderenfalls wird das Repo bei der Sicherung übergangen.

Gültige Werte: ”yes”, ”no”

SVN_REPOS_x_DIR_PERMISSIONS

Wenn diese Option auf ”yes” gesetzt wird, können Rechte auf Verzeichnisebene innerhalb des Repositories definiert werden. Im Falle von ”no” gelten lediglich die global eingestellten Zugriffsbeschränkungen.

Siehe dazu auch das Kapitel ”Zugriffssteuerung auf Verzeichnisebene”

Gültige Werte: ”yes”, ”no”

SVN_REPOS_x_DIR_PERM_N

Anzahl der Verzeichnisse innerhalb des Repositories, für welche Zugriffsberechtigungen angegeben werden sollen.

Siehe dazu auch das Kapitel ”Zugriffssteuerung auf Verzeichnisebene”

Beispiel: ”2”

SVN_REPOS_x_DIR_x_PATH

Pfad innerhalb der Verzeichnishierarchie des Repositories. Zu beachten ist, dass Zugriffsrechte einer höheren Verzeichnisebene auf alle Unterverzeichnisse übertragen werden, solange keine weitere Angabe dies explizit überschreibt. Ebenfalls zu beachten ist, dass das abschliessende Backslash-Zeichen im Verzeichnisnamen wegzulassen ist.

Siehe dazu auch das Kapitel ”Zugriffssteuerung auf Verzeichnisebene”

Beispiel: ”/my/repository/path”

SVN_REPOS_x_DIR_x_PERM

Liste der Zugriffsberechtigungen bestehend aus einem oder mehreren Ausdrücken, die Anwendernamen Zugriffsrechte zuweisen. Mit einem vorangestellten @ bezieht sich der Anwendername auf eine ACL-Liste. Ebenfalls kann der Asterisk als Platzhalter für alle Anwender verwendet werden. Gültige Werte für Zugriffsrechte sind ”r”, ”rw” und ””.

Siehe dazu auch das Kapitel ”Zugriffssteuerung auf Verzeichnisebene”

Beispiel: ”user1=r user2=rw user3=”

Einstellungen zur Datensicherung

SVN_BACKUP_SCHEDULE

Zeitvorgabe für den CRON-Dienst. Hier wird angegeben, wann die automatische Sicherung durchgeführt werden soll. Die 5 Werte stehen für: Minute, Stunde, Tag, Monat, Wochentag.

Beispiel:
”30 0 * * *” –> täglich um 0:30 Uhr
”0 1 */2 * *” –> Jeden zweiten Tag um 1:00 Uhr

SVN_BACKUP_TARGET

Das Verzeichnis, in das die Sicherungsdateien abgelegt werden sollen.

Standard: ”/var/lib/svn_backup”

SVN_BACKUP_MAXFILES

Gibt an, wieviele Kopien von Sicherungsdateien aufgehoben werden sollen.

Beispiel: ”4”

SVN_BACKUP_MOUNT

Bevor die Sicherung beginnt, wird das hier angegebene Kommando ausgeführt. Dies kann verwendet werden, um beispielsweise das Sicherungsmedium in das Dateisystem einzubinden. Soll kein Befehl ausgeführt werden bleibt das Feld leer.

Beispiel: ”mount -t udffs /dev/sr0 /mnt”

SVN_BACKUP_UMOUNT

Nachdem die Sicherung beendet wurde, wird das hier angegebene Kommando ausgeführt. Dies kann verwendet werden, um beispielsweise das Sicherungsmedium vom Dateisystem zu trennen. Soll kein Befehl ausgeführt werden bleibt das Feld leer.

Beispiel: ”umount /mnt”

SVN_BACKUP_NOTIFY

Wird hier eine e-mail Adresse angegeben, erfolgt im Falle von Fehlern bei der Datensicherung eine Benachrichtigung an den hier angegebenen Empfänger. Soll keine Benachrichtigung erfolgen bleibt das feld leer.

Hinweis: Die Benachrichtigung funktioniert nur dann, wenn das E-mail Paket installiert ist.

Beispiel: ”admin@localhost”

Das Paketmenü

Das Subversion Hauptmenü

Das Subversion Hauptmenü ist über den Menüpunkt ”Service administration” über den Befehl ”setup” zu erreichen. Es ist wie folgt aufgebaut:

Subversion Administration Tools

Subversion Backup and Restore

Zugriffssteuerung auf Verzeichnisebene

Neben der globalen Zugriffskontrolle, die Benutzern einmalig Lese- oder Schreibrechte auf das gesamte Repository einräumt, ist eine weitere Zugriffssteuerung verfügbar, die die Vergabe individueller Rechte auf Verzeichnisebene innerhalb des Repositories ermöglicht. Dieses Hilfsmittel ist optional und muss in der Konfiguration aktiviert werden damit es wirksam wird.

Zu beachten ist, dass die Zugriffskontrolle auf Verzeichnisebene nur dann wirksam ist, wenn der Zugriff auf das Repository entweder über WebDAV oder oder über den svnserve-Dienst erfolgt. Wird statt dessen über die Zugriffsmethode ”file://” auf ein Repository zugegriffen gelten die Rechte auf Verzeichnisebene nicht.

In der eisfair-Konfiguration wird zunächst das Verzeichnis angegeben, auf das Rechte vergeben werden sollen. Dann wird eine Liste von Anwendern genannt, denen über den Zuweisungsoperator entweder Leserechte (r) oder Schreibrechte (rw) eingeräumt werden. Wird hinter dem Gleichheitszeichen nichts weiter angegeben, bedeutet dies den Rechteentzug für den entsprechenden Anwender. Beispiel:

SVN_REPOS_x_DIR_x_PATH=”/my/repository/path”
SVN_REPOS_x_DIR_x_PERM=”user1=r user2=rw user3=”

Zu beachten ist, dass einmal vergebene Rechte in unveränderter Form für alle Unterverzeichnisse gelten, solange sie nicht explizit durch eine weitere Regel überschrieben werden. Wurden keine Angaben gemacht, hat dagegen kein Anwender irgendein Recht zum Zugriff auf die Repository-Dateien. Aus diesem Grund kann es sinnvoll sein, zunächst für die Wurzel des gesamten Verzeichnisbaums ein Leserecht für alle Anwender einzurichten und dieses bei Bedarf für einzelne Unterverzeichnisse und Anwender einzuschränken. Der Asterisk kann dabei als Platzhalter für alle Anwender verwendet werden. Beispiel:

SVN_REPOS_1_DIR_1_PATH=”/”
SVN_REPOS_1_DIR_1_PERM=”*=r”

SVN_REPOS_2_DIR_2_PATH=”/a/secret/directory”
SVN_REPOS_2_DIR_2_PERM=”user1=”

Die globalen Anwenderlisten (ACLs) können verwendet werden um eine Gruppe von Anwendern gleichermassen anzusprechen. Dabei wird der ACL-Name mit einem führenden ”@” versehen um ihn als Gruppe zu kennzeichnen. Beispiel:

SVN_REPOS_x_DIR_x_PATH=”/my/repository/path”
SVN_REPOS_x_DIR_x_PERM=”@GLOBAL=rw”

Zu erwähnen ist, dass der Wert der Option ”SVN_REPOS_x_ANON_ACCESS” einen signifikaten Einfluss auf die Funktion der Zugriffsrechte auf Verzeichnisbene hat. Solange eine Operation als anonymer Nutzer vorgenommen werden kann greifen die Rechte nicht. Erst wenn eine Operation einen authentifizierten Benutzer erfordert, kann an diesen Benutzer eine Rechtevergabe erfolgen. Ist der Wert der Option ”none” ist für jede Operation eine Authentifizierung erforderlich - wodurch auf Verzeichnisebene sowohl die Lese- als auch die Schreibrechte effektiv beeinfluss werden können. Wurde der Wert dagegen auf ”read” gesetzt, werden Einschränkungen von Leserechten auf der Verzeichnisebene nicht wirksam.

Subversion als Client

Lokale Arbeitskopien

Um mit der Arbeit zu beginnen, erstellen wir uns eine Arbeitskopie, indem wir die Dateien aus dem Repository auschecken:

svn checkout file:///var/svn
svn checkout svn://user@server
svn checkout http://server/svn/repo1

Werden mehrer Repositories verwendet, so muss der gesamte Pfad angegeben werden:

svn checkout svn://user@server/var/svn
svn checkout svn://user@server/var/svn2

Lokale Änderungen kann man sich wie folgt ansehen:

svn status

und zwischenzeitliche Änderungen auf dem Server mit:

svn status -u

Um lokale Änderungen ins Repository zurückzuschreiben, benutzt man:

svn commit -m ”set comment” *

Hinzufügen von Dateien/Verzeichnissen

Alle Arten von Dateien und Verzeichnissen werden bei Subversion mit dem gleichen Befehl hinzugefügt:

svn add <objekt>

Sogenannte Binärdateien werden dabei automatisch erkannt.