Subversion ist eine Sourcecodeverwaltung von Dateien und Ordnern in einem Repository werden die dem Projekt zugehörigen Daten abgelegt. Auf einem Server können mehrere solcher Projektarchive abgelegt und verwaltet werden. Über diese Archive werden alle Versionsstände auf dem Server abgelegt. Die Benutzer arbeiten üblicherweise mit dem aktuellsten Stand, den ein solches Archiv hat.
Ich habe online einen solchen Server aufgesetzt und möchte diesen in einen neueren Server (den ich dieses mal anders aufgesetzt habe) migrieren. Dabei möchte ich idealerweise auf einen Dump verzichten (großer Dateitransfer, viele mögliche Fehlerquellen). Im Folgenden beschreibe ich, wie eine solche MIgration durchgeführt werden kann.
Installation von Subversion
Die Installation von einem neuen Debian Jessie Server ist recht einfach durchzuführen. Als Admin (root):
apt-get update
apt-get install subversion apache2 libapache2-svn
a2enmod authz_user
mkdir /var/lib/svn
svnadmin create /var/lib/svn
chown -R www-data /var/lib/svn
Nach erfolgreicher Installation werden Benutzer angelegt. Für unsere Instanz wird der erste Benutzer mit „-cm“ angelegt, die folgenden nur mit „-m“. Die Vorgestellte Option „-b“ erlaubt uns das passwort über die commandline einzugeben statt interaktiv danach zu fragen.
htpasswd -bcm /etc/apache2/dav_svn.passwd testuser1 testuser1
htpasswd -bm /etc/apache2/dav_svn.passwd testuser2 testuser2
Den Inhalt der erstellten Passwort-Datei kann mit folgendem Befehl abgefragt werden:
cat /etc/apache2/dav_svn.authz
Jetzt kann der Subversion Deamon gestartet werden und mit der Konfiguration von Webdav fortgeschritten werden.
svnserve -d -r /var/lib/svn a2enmod dav a2enmod dav_svn a2enmod authz_svn
Abschließend die Datei /etc/apache2/mods-available/dav_svn.conf anpassen.
nano /etc/apache2/mods-available/dav_svn.conf
Damit sie so aussieht (https ist nicht aktiviert):
<Location />
DAV svn
SVNParentPath /var/lib/svn/
SVNListParentPath on
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
Require valid-user
</Location>
Am Ende noch den Apache durchstarten, damit ist alles fertig installiert und konfiguriert.
/etc/init.d/apache2 restart
Migration Remote to Local Subversion
Zuerst wird lokal ein Repository benötigt:
cd /var/lib/svn mkdir testlocal svnadmin create testlocal
Mit diesem Repository können wir den Vorgang starten:
echo '#!/bin/sh' > testlocal/hooks/pre-revprop-change chmod +x testlocal/hooks/pre-revprop-change svnsync init file:////var/lib/svn/testlocal http://<IP>:<PORT>/<REPOSITORY>
Jetzt sind die Vorbereitungen abschlossen und wir können den Transfer starten:
svnsync sync file:////var/lib/svn/testlocal
Das ganze dauert nun ein wenig, danach sind alle historischen Daten vom alten auf das neue Repository übertragen.
Migration Remote to Remote Subversion
Hier verfahren wir nach dem gleichen Muster. Zuerst das Repository (testlocal) anlegen:
cd /var/lib/svn mkdir testlocal svnadmin create testlocal
Mit diesem Repository können wir nun den Vorgang ebenfalls starten:
echo '#!/bin/sh' > testlocal/hooks/pre-revprop-change chmod +x testlocal/hooks/pre-revprop-change svnsync init http://<TARGET-IP>/testlocal http://<SOURCE-IP>/testlocal
Jetzt sind die Vorbereitungen abschlossen und wir können den Transfer starten:
svnsync sync http://<TARGET-IP>/testlocal
Auch hier dauert das ganze nun ein wenig, danach sind alle historischen Daten vom alten auf das neue Repository übertragen.
Quellen
- https://www.thomas-krenn.com/de/wiki/Subversion_unter_Debian_mit_Webaccess
- http://pogopixels.com/blog/dumping-a-svn-repository-from-a-remote-url/
- http://petrkout.com/linux/copy-your-subversion-repository-using-urls-with-svnsync/