Möchte man ein Backup eines Subversion-Repositories erstellen, hat man prinzipiell drei Möglichkeiten:
- einen Dump vom Repository erstellen
- das komplette Verzeichnis des Repositories zu sichern
- mit svnsync das Repository kopieren
Mit svnsync ist es möglich, ein Repository von einer Maschine auf eine andere zu kopieren.
Wie man svnsync benutzt, ist z.B.
hier beschrieben.
Da ich keine Lust habe, mir das Thema bei jedem Anlegen eines Repositories neu zu erarbeiten,
habe ich ein kleines Skript names 'svn-create-backup' geschrieben.
Nun braucht man bei jedem Anlegen eines neuen Repositories auf der Backup-Maschine nur einen Einzeiler auszuführen:
./svn-create-backup meinrepository
#!/bin/bash
SVNBASE=https://subversion.meine-firma.de/repository
SVNUSER=backup
SYSBASE=~/repository
SYSUSER=subversion
if [ "$USER" != "$SYSUSER" ]; then
echo "Dieses Kommando darf nur vom Nutzer $SYSUSER ausgeführt werden."
exit 1
fi
if [[ ! $1 =~ ^[a-z0-9\-]+$ ]]; then
echo "Es wurde kein Verzeichnisname angegeben oder dieser enthielt ungültige Zeichen."
exit 2
fi
REPO=$1
OLDPWD=`pwd`
mkdir -p $SYSBASE
cd $SYSBASE
if [ -e $REPO ]; then
echo "Das Repository $REPO existiert bereits."
exit 3
fi
svnadmin create $REPO
echo "#!/bin/sh" > $REPO/hooks/pre-revprop-change
echo "USER=\"\$3\"" >> $REPO/hooks/pre-revprop-change
echo "if [ \"\$USER\" = \"$SVNUSER\" ]; then exit 0; fi" >> $REPO/hooks/pre-revprop-change
echo "echo \"Only the $SVNUSER user can change revprops\" >&2" >> $REPO/hooks/pre-revprop-change
echo "exit 1" >> $REPO/hooks/pre-revprop-change
chmod u+x $REPO/hooks/pre-revprop-change
svnsync init --username $SVNUSER file://`pwd`/$REPO $SVNBASE/$REPO
CRONROW="# $(($RANDOM%59)) $(($RANDOM%3+3)) * svnsync sync file://`pwd`/$REPO | logger -t svnsync-$REPO"
echo "$CRONROW" >> ~/.crontab
echo ""
echo "Der Datei ~/.crontab wurde ein auskommentierter Eintrag hinzugefügt:"
echo " $CRONROW"
echo "Nachdem dieser Eintrag angepasst wurde, kann das Kommando"
echo " crontab ~/.crontab"
echo "ausgeführt werden."
echo ""
cd $OLDPWD