Dieser Beitrag dient mir um meine durchgeführten Schritte später nachvollziehen zu können.
Ich installiere einen Subversion-Server und migriere meine alten Repositories aus Subversion Version 1.6 nach Version 1.9.
Subversion und Apache installieren
sudo apt install subversion apache2 libapache2-svn
Subversion-Gruppe erstellen
sudo addgroup subversion
Eigener User sowie Apache User der Subversion-Gruppe hinzufügen
sudo adduser www-data subversion sudo adduser <eigenerUser> subversion
Anschliessend aus- und wieder einloggen. Erst dann werden die Änderungen aktiv.
Nun das SVN-Home und Projekt-Verzeichnis anlegen
sudo mkdir /home/svn cd /home/svn sudo mkdir myproject
Nun das Subversion-Repository für das Projekt erstellen
sudo svnadmin create /home/svn/myproject
Berechtigungen setzen
cd /home/svn sudo chown -R www-data:subversion myproject sudo chmod -R g+rws myproject
WebDAV für Subversion konfigurieren
Config-File /etc/apache2/mods-available/dav_svn.conf anpassen
<Location /svn> DAV svn SVNParentPath /home/svn SVNListParentPath On AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/subversion/passwd Require valid-user LimitXMLRequestBody 0 </Location>
Apache restarten
sudo service apache2 restart
User-File für Zugang auf WebDAV erstellen
die -c Option nur beim erstellen verwenden. Bei Modifikationen eines bestehenden Files den Befehl ohne -c ausführen.
sudo htpasswd -c /etc/subversion/passwd user_name
Jetzt kann das vorhin erstellte Projekt über WebDAV ausgecheckt werden. Versuchen wir’s:
svn co http://hostname/svn/myproject myproject --username user_name
Migrieren der Repositories des alten Servers in den neuen Server
Dazu exportieren ich das alte Repository in ein Dump-File:
svnadmin dump --quiet /home/svn/myproject > myproject.dump
Es besteht nun auch die Möglichkeit aus diesem Dump-File spezielle Verzeichnisse weiter zu exportieren:
cat myproject.dump | svndumpfilter include trunk/subproject > subproject.dump
Nun kann das Dump-File auf dem neuen Server importiert werden
svnadmin load --quiet /home/svn/myproject < subproject.dump
Achtung: Wenn man ein Subfolder importiert, müssen die Parent-Folder exsistieren, sonst gibts einen Fehler „svnadmin: E160013: Datei nicht gefunden: »/trunk/myproject«
In diesem Falle muss also noch „trunk“ als Folder im neuen „myproject“ erstellt werden.
svn mkdir http://localhost/svn/pvs2/trunk -m "Create the trunk folder" --username=ralph
svndumpfilter3
Es kann vorkommen, dass das extrahieren von tags mit dem Fehler „svndumpfilter: Ungültiger Quellpfad einer Kopie“ fehlschlägt. Das kann offenbar auftreten, wenn man Files/Order im Repository kopiert/verschoben hat. Selbstverständlich habe ich das 🙂
Die Lösung bietet eine Erweiterung von svndumpfilter, svndumpfilter3. Gefunden hier. Dieses Phyton-Script herunterladen und folgendermassen starten:
cat svn-projects.dump | ./svndumpfilter3 --untangle=/var/svn-repos/projects tags/pvs2 > pvs2-tags.dump
Die –untangle Option zeigt auf das lokale SVN-Repository Root. Svndumpfliter3 benutzt dieses Repository um die Probleme auzulösen bzw. zu convertieren.
Reverse Proxy
Meinen Subversion-Server betreibe ich hinter einem Apache2 Reverse Proxy. Damit dies auch sauber funktioniert muss der redirect auf dem ReverseProxy angepasst werden. Anosten kann es zu 405-Fehlern kommen „Method not allowed“. Dazu definiere ich im VirtualHost folgende Location:
<Location / > <Limit OPTIONS PROPFIND GET REPORT MKACTIVITY PROPPATCH PUT CHECKOUT MKCOL MOVE COPY DELETE LOCK UNLOCK MERGE> Order Deny,Allow Allow from all Satisfy Any </Limit> </Location>