svn und svnsync in der SVN-Chroot

Ein Anwendungsfall für die SVN-Chroot ist es z.b. Nicht nur SVN-Repositorys über das SVN-Protokoll mit svnserve zur verfügung zu stellen, sondern auch ein SVN-Repository ind er Chroot zu Synchronisieren.

In meinem Spezifischen Fall möchte ich die SVN-Chroot jetz dazu benutzen, mein GoogleCode SVN Repo bei mir Lokal auf dem Server zu Synchronisieren, so dass ich von dem gesamten Repo eine Sicherung habe.

Wie dies funktioniert, möchte ich in den folgenden 8 Schritten erklären…

1. Herunterladen der Chroot

1
2
3
4
5
6
7
8
9
10
11
SRVSVN001:~# wget http://linuxchroots.googlecode.com/files/svnchroot-1.6.tar.bz2
--2010-11-16 02:06:20--  http://linuxchroots.googlecode.com/files/svnchroot-1.6.tar.bz2
Resolving linuxchroots.googlecode.com... 74.125.43.82
Connecting to linuxchroots.googlecode.com|74.125.43.82|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4718587 (4.5M) [application/x-bzip2]
Saving to: `svnchroot-1.6.tar.bz2'
 
100%[======================================>] 4,718,587   1.40M/s   in 3.8s
 
2010-11-16 02:06:24 (1.19 MB/s) - `svnchroot-1.6.tar.bz2' saved [4718587/4718587]


2. Entpacken der eingepackten Chroot

1
SRVSVN001:~# tar -xvjf svnchroot-1.6.tar.bz2

3. Aufrufen der entpackten Chroot

1
2
3
4
5
6
7
8
9
SRVSVN001:~# chroot svnchroot-1.6
SVN-Chroot 1.6
--------------
 
 
BusyBox v1.1.3 (2006.06.01-20:13+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
 
SRVSVN001:/$

4. Einrichten der Chroot

1
2
3
4
5
6
7
8
9
10
11
12
SRVSVN001:/$ /svneinrichten
Wo sollen die Subversion Repos liegen? [/repos]:
Soll ein Test-Repo angelegt werden? [Y/n]:
Auf welchem Port soll svnserve laufen? [3690]:
Ordner für Repos anlegen...
mkdir: Cannot create directory `/repos': File exists
Test-Repo anlegen...
Test-Benutzer im Test-Repo anlegen...
Subversion in Start-Script eintragen...
 
Subversion ist nun eingerichtet und kann ueber /start gestartet werden.
Benutzer für das Test-Repo: test (passwort: test)

5. Ein neues Repo für die Synchronisation anlegen (Ich nenne es hier „mirror“)

1
2
3
4
5
6
7
8
9
10
SRVSVN001:/$ /svn_createrepo
Wo sollen das neue Subversion Repo ungelegt werden? [/repos]:
Wie ist der Name des neuen SVN-Repos? [repo_neu]: mirror
Name des SVN-Benutzers fuer das Repo? [admin]: sven
Passwort fuer den SVN-Benutzer? [password]: lala
Ordner für Repos anlegen...
Neues SVN-Repo anlegen...
Benutzer im SVN-Repo anlegen...
Das neue SVN-Repo ist nun eingerichtet und kann erreicht werden.
Benutzer für das SVN-REPO mirror: sven (passwort: lala)

6. Das neue Repo für die Synchronisation vorbereiten

1
2
echo "#!/bin/sh" > /repos/mirror/hooks/pre-revprop-change
chmod 755 /repos/mirror/hooks/pre-revprop-change

7. SVN-Synchronisation auf das Repo Initialisieren (geht mit Init)

1
2
SRVSVN001:/$ /srv/subversion/bin/svnsync init file:///repos/mirror http://frickelblog.googlecode.com/svn/trunk/
Copied properties for revision 0.

Tut sich hier längere Zeit nichts, so sollte man die Nameserver in der /etc/resolv.conf überprüfen!

8. Und letzendlich das Repo einmal Synchronisieren

1
2
3
4
5
6
7
SRVSVN001:/$ /srv/subversion/bin/svnsync sync file:///repos/mirror           Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Transmitting file data .............
Committed revision 3.
Copied properties for revision 3.

Um das ganze jetzt zu testen, werden wir das lokale Repo auch einmal lokal abrufen:

1
2
3
4
5
6
7
8
9
10
SRVSVN001:/$ /srv/subversion/bin/svn co file:///repos/mirror /tmp/mirror
SRVSVN001:/$ ls /tmp/mirror/trunk/samples/DataBinding_INotifyPropertyChanged/DataBinding_INotifyPropertyChanged.csproj
DataBinding_INotifyPropertyChanged.sln
DataBinding_INotifyPropertyChanged.suo
Form1.Designer.cs
Form1.cs
Form1.resx
Program.cs
Properties
bin

Wunderbar – Alles da 🙂

Wer das Repo jetz dauer-Synchronisiert haben möchte, muss sich nur noch einen CronJob anlegen, der folgendes aufruft:

1
SRVSVN001:/$ /srv/subversion/bin/svnsync sync file:///repos/mirror

Und man hat eine Dauer-Synchrone sicherung des ganzen Repositories 🙂

leave your comment


*

Unterstütze den Frickelblog!