Mirroring di un repository SVN (Subversion)

 

Spesso si ha necessità di avere una o più copie di un repository Subversion su una macchina remota.

In tali occasioni ci viene in aiuto l'utilissimo tool svnsync. Tale software è installato di default insieme al server SVN ma la sua documentazione è lacunosa.

Supponiamo di avere un repository SVN già funzionante che risponde all'URL

svn://10.0.0.1/repository

e di voler creare un mirror. Supponiamo anche che sul repository appena indicato esista un utente con username svnsync.

Installiamo Subversion sulla macchina mirror (supponiamo di voler mettere il repository nella cartella /svn-mirror). Se siamo sotto Ubuntu basta lanciare il comando:

sudo apt-get install subversion

mentre sotto FreeBSD eseguiamo:

cd /usr/ports/devel/subversion
make
make install
make clean

Maggiori informazioni sull'installazione sono reperibili qui.

Procediamo, prima creando il repository mirror

svnadmin create /svn-mirror

poi creiamo un hook che faccia in modo che solo l'utente svnsync possa fare commit sul repository (di fatto lo stiamo rendere un repository a solo lettura - quasi):

cat <<'EOF' > /svn-mirror/hooks/pre-revprop-change
#!/bin/sh
USER="$3"

if [ "$USER" = "svnsync" ]; then exit 0; fi

echo "Questa operazione puo' essere eseguita\
      solo dall'utente svnsync" >&2
exit 1
EOF

rendiamo l'hook eseguibile:

chmod a+x /svn-mirror/hooks/pre-revprop-change

a questo punto eseguiamo la prima sincronizzazione tra il repository originale ed il mirror

svnsync init --username svnsync \
        file:///svn-mirror svn://10.0.0.1/repository
svnsync sync --username svnsync file:///svn-mirror

Da questo momento in poi basterà eseguire periodicamente (ad esempio configurandolo nel cron) il seguente comando per far in modo che il mirror si sincronizzi con il repository principale:

svnsync sync --username svnsync file:///svn-mirror

Da notare che sul repository principale non è stato necessario eseguire nessuna operazione se non l'aggiunta dell'utente svnsync. In realtà potreste tranquillamente usare un qualsiasi altro utente valido (in tal caso cambiate il nome utente in tutti i comandi indicati fino ad ora).

Nota 1: per maggiori informazioni sull'amministrazione di un repository SVN vi consiglio di consultare l'ottimo manuale reperibile all'url http://svnbook.red-bean.com/

Nota 2: se quello che serve è semplicemente una copia di backup di un repository ed il repository non è troppo grosso (in termini di spazio occupato) è possibile eseguire un più semplice svnadmin hotcopy. Maggiori informazioni qui.

Nota 3: se il vosto repository mirror è esposto in rete tramite svnserve, ricordatevi di lanciare il demone con l'opzione -R in modo da assicurarvi che nessuno possa effettuare dei commit e desincronizzare quindi il mirror dal repository master.