Backup de Subversion & Envio por email, usando hot-backup.py
Sunday, May 27th, 2007Desde no hace mucho estoy empezando a obligarme a usar subversion para tener un control de versiones de lo que hago en casa con mi proyecto final de carrera.
A pesar de tener 2 discos en RAID 1, no me siento seguro ya que en cualquier momento puedo perder todo. Asà que hoy me ha tocado mirarme el tema del backup del subversion. Es bastante sencillo, pero no me sirve de nada tener un backup en la propia máquina ni tener que hacerlo manualmente.
Con subversion se pueden hacer 2 tipos de backups. Totales e incrementales. De momento este script solo usa el backup total, si en un futuro los ficheros generados son muy grandes ya lo modificaré para adaptarlo.
El objetivo es hacer una copia total del subversion de forma diaria, automática y que se envie a una cuenta de email (gmail por ejemplo, 2,5 Gb de espacio.
)
1. Cogemos la última versión del script hot-backup.py
# wget http://svn.collab.net/repos/svn/trunk/tools/backup/hot-backup.py.in
2. Movemos el fichero a /usr/sbin (no sé si es la mejor ruta)
# mv ~/hot-backup.py.in /usr/sbin/hot-backup.py
3. Abrimos el fichero con nuestro editor y ajustamos los valores de svnlook y svnadmin según nuestra configuración
# vi /usr/sbin/hot-backup.py
# Path to svnlook utility
svnlook = “/your/path/to/svnlook”# Path to svnadmin utility
svnadmin = “/your/path/to/svnadmin”
# Number of backups to keep around (0 for “keep them all”)
num_backups = 1
4. Creamos el script /usr/sbin/send_mail_backup que será el encargado de enviar por email el dump del repositorio (modificad la ruta y el email)
# vi /usr/sbin/send_mail_backup
#!/bin/bash
SVNROOT=/my/backup/location1
EMAIL=tu-email@gmail.comfor REPO in `ls $SVNROOT`; do
VARDATE=`date -u +%Y/%m/%d-%H:%M:%S`
FILE=$SVNROOT/$REPO
echo | mutt -s “[SubVersion BACKUP repository] $VARDATE ” -a $FILE $EMAIL
done
5. Para automatizar el backup, creamos un cron que ejecute el hot-backup.py, encargado de crear el dump del repositorio. Se puede elegir que el fichero generado sea un gz, bz2 o un zip. Una vez creado, que lo envie por email ejecutando el script send_mail_backup. (Importante, configurad que solo se cree un fichero de backup en el hot-backup.py. Por defecto está a 64, manteniendo 64 copias generadas. Si no se modifica se enviaran las últimas 64 copias del repositorio cada dia, y es mejor que no)
#vi /etc/cron.daily/backup_subversion
#!/bin/bash
hot-backup.py –archive-type=gz /my/repository1 /my/backup/location1
send_mail_backup
# chmod +x /etc/cron.daily/backup_subversion
6. Testeamos el script
# /etc/cron.daily/backup_subversion
Beginning hot backup of '/my/repository1'.
Youngest revision is XX
Backing up repository to '/my/backup/location1/repository1-XX'...
Done.
Archiving backup to '/my/backup/location1/repository1-XX.tar.gz'...
Archive created, removing backup '/my/backup/location1/repository1-XX'...
No pretende ser el mejor script de backup de subversion, simplemente algo casero y que funcione. Se puede hacer mil veces mejor agrupandolo todo en uno seguramente, con copias diferenciales, etc… pero no he querido complicarme la vida de momento.