Es soll ein Repository mit Subversion eingerichtet und ein Export mit vollständiger Historie, aus einem anderen Subversion bzw. CVS Repository, importiert werden.

Aufsetzen eines Subversion Repositories

Nachdem die benötigte Software installiert und ein Benutzer svn sowie eine Benutzergruppe svn eingerichtet wurde, kann ein Subversion Repository angelegt werden. Dazu wird zuerst ein Ablageort erzeugt und ein rudimentäres Subversion Repository angelegt.

$ mkdir /srv/svn/repository
$ svnadmin create /srv/svn/repository

Dieses Subversion Repository muss nun dem Benutzer und der Benutzergruppe zu geordnet werden. Alle Benutzer dieses Subversion Repositories müssen der Benutzergruppe svn angehören.

$ chown -R svn /srv/svn/repository
$ chgrp -R svn /srv/svn/repository

Zusätzlich müssen alle Mitglieder der Benutzergruppe svn Schreibrecht auf das Subversion Repository haben. Allerdings wird das Schreib- und Leserecht auf die Konfiguration gleich wieder auf dem Benutzer svn beschränkt.

$ chmod -R g+w /srv/svn/repository
$ chmod -R go-rw /srv/svn/repository/conf
$ chmod -R o-r /srv/svn/repository/conf

Nun kann schon lokal auf das Subversion Repository z. B. mit …

$ svn list file:///srv/svn/repository

… zugegriffen werden. Da aber auch der entfernte Zugriff möglich sein soll, wird nun der Serverprozess gestartet.

$ svnserve -d

Der Standard-Port für den Subversion Server ist 3690. Mit dem Parameter --listen-port n kann ein anderer Port angegeben werden.

Damit nun auch die Benutzer zugreifen können, wird in der Datei conf/passwd die Benutzer mit ihren Passwörtern abgelegt. Diese Benutzer können dann über den Serverprozess auf das Subversion Repository zugreifen.

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
username = password

Danach müssen noch die Konfiguration conf/svnserve.conf für das Subversion Repository bearbeitet werden. Dort wird der generelle Zugriff für unautorisierte (Zeile 12) und autorisierte (Zeile 13) Benutzer bearbeitet. In der Zeile 20 wird der Dateiname mit den Passwörtern und in Zeile 32 der Name des Realm angegeben.

### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/ for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
anon-access = read
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file. If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
# authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
realm = My Repository

Nun kann auf das Subversion Repository von außen zugegriffen werden.

$ svn list svn://localhost/srv/svn/repository

Exportieren und Importieren eines Subversion Repositories

Zunächst wird ein bestehenden Subversion Repository mit vollständiger Historie exportiert. Dieses muss im gleichen Dateisystem erfolgen, wo auch das Subversion Repository liegt.

$ svnadmin dump /srv/svn/projects > projects-dumpfile
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
...

Als nächster Schritt wird im neuen Subversion Repository ein neues Verzeichnis projects angelegt.

$ svn mkdir -m "Initial projects root" file:///srv/svn/repository/projects
Committed revision 1.
$

Jetzt kann das alte Subversion Repository unter dem neuen Verzeichnis mit vollständiger Historie in das neue Subversion Repository eingespielt werden. Wiederum muss der Befehl im gleichen Dateisystem, wo das neue Subversion Repository liegt, durchgeführt werden.

$ svnadmin load /srv/svn/repository --parent-dir projects < projects-dumpfile
<<< Started new transaction, based on original revision 1
     * adding path : projects/... ... done.

------- Committed new rev 2 (loaded from original rev 1) >>>
...

Falls das alte Subversion Repository nicht unter dem neuen Verzeichnis abgelegt werden soll, so kann der Parameter --parent-dir weggelassen werden.

Liegen das alte und neue Subversion Repository im gleichen Dateisystem, kann auch folgender Befehl verwendet werden.

$ svnadmin dump /srv/svn/projects | svnadmin load /srv/svn/repository --parent-dir projects

Das neue Subversion Repository steht sofort nach den Änderungen bereit.

Exportieren und Importieren eines CVS Repositories

Zunächst wird ein bestehendes CVS Repository mit vollständiger Historie exportiert. Dazu muss unter Linux das Package cvs2svn installiert sein.

$ cvs2svn --dumpfile=projects-cvs2svn-dump --encoding=utf_8 /srv/cvs/projects

Nun wurde die Datei projects-cvs2svn-dump im aktuellen Verzeichnis erstellt. Diese kann nach dem Verfahren aus dem vorherigen Kapitel ins neue Subversion Repository mit vollständiger Historie importiert werden.

$ svnadmin load /srv/svn/repository --parent-dir projects < projects-cvs2svn-dump

Nun ist das alte CVS Repository mit allen seinen Historien im neuem Subversion Repository vorhanden.

Eine Alternative ist der folgende Befehl, wenn altes und neues Subversion Repository im gleichen Dateisystem liegen. Dieser kopiert direkt das alte CVS Repository mit allen Historien in das neue Subversion Repository.

$ cvs2svn -s /srv/svn/repository /srv/cvs/repository

Subversion auf einem QNAP NAS TS-409 einrichten

Auf Wunsch von Sven Müller, durch seinem Kommentar, habe ich hier noch beschrieben, wie auf einen QNAP TS-409 Pro Turbo NAS ein Subversion Repository angelegt werden kann.

Dazu über das Optware IPKG (Itsy Package Management System) der Subversion Server installiert werden. Das Optware IPKG ist ein Package Manager, welcher bei der Linux-Distribution für eingebettete Systeme OpenWRT verwendet wird.

Hinweis

Das Itsy Package Management System
wird nicht mehr weiterentwickelt.
Es gibt einen Fork opkg (Open PacKaGe management).

Zunächst wird die Software des Subversion Servers installiert.

[~] $ ipkg update
[~] $ ipkg install svn

Als nächstes muss das Starten des Subversion Servers im Init-Skript autorun.sh eingefügt werden. Dazu muss die Partition /dev/mtdblock5 mit den Init-Skripten gemounted werden.

[~] $ mount -t ext2 /dev/mtdblock5 /tmp/config
[~] $ vi /tmp/config/autorun.sh

In der Datei autorun.sh werden die folgende Befehle ab Zeile 3 angehangen.

#!/bin/sh

rm -ef /opt
ln -sf /share/MD0_DATA/optware/opt /opt

/opt/bin/svnserve -d --pid-file=/tmp/svnserve.pid

Nach dem Bearbeiten der Datei autorun.sh wird mit folgendem Befehl die Partition wieder ausgehangen.

[~] $ umount /tmp/config

Die offene Punkte

  • Den Zugriff über die HTTP/HTTPS Erweiterung WebDAV ermöglichen, dazu wird ein Apache 2-Webserver benötigt.
  • Upgrade von Subversion auf eine höhere Version.

Die Literaturempfehlungen

Frank Rahn
Letzte Artikel von Frank Rahn (Alle anzeigen)
3 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ihre E-Mail-Adresse wird nicht veröffentlicht. Ihr Kommentar wird verschlüsselt an meinen Server gesendet. Erforderliche Felder sind mit * markiert.

Weitere Informationen und Widerrufshinweise finden Sie in meiner Datenschutzerklärung.