tfeserver : Blog de tfe

Catégorie Tutorial - posté le 26/10/08 15:18:43

Bien que de nombreux tutoriels sont déjà présents sur internet, j'ai décidé d'en écrire un aujourd'hui résumant les étapes à suivre pour monter un système de backup en utilisant subversion (svn).

Étape 1: identification des fichiers à sauvegarder

SVN est un système de gestion de versions, permettant de sauvegarder des fichiers par modifications. On peut ainsi obtenir différentes versions d'un fichier, à un instant donné.
Par défaut les fichiers de configurations se situent dans /etc, mais il se peut que pour vos besoins personnels, vous ayez à sauvegarder égallement /usr/local/etc, ou les fichiers de configuration de votre /home par exemple.

Étape 2: création d'un repository

Après avoir installé svn sur votre système, nous allons créer un repository du nom de "backup".
$ svnadmin create /var/opt/svn/backup

Cette commande va crée le dossier /var/opt/svn/backup, ainsi que les sous-dossiers "conf", "db", "format" et "locks".
Utilisant subversion en local sur notre machine, nous n'aurons pas besoin ici de configurer le serveur. Aucun besoin donc de modifier le fichier de configuration conf/svnserve.conf.
Aucun besoin non plus de lance le serveur "svnserve".

Étape 3: création du working directory
Le working directory sera le dossier à sauvegarder. Ici pour l'exemple nous prendrons "/etc".
$ cd /etc
$ svn co file:///var/opt/svn/backup .
Revisión obtenida: 0
Notre repository étant vide cela nous a juste crée un dossier .svn a la racine du dossier /etc.

Étape 3: ajout des dossiers et fichiers de configuration
Nous allons par la suite ajouter les fichiers et dossiers au repository, pour qu'ils soient pris  en compte par svn.
On peut égallement spécifier uniquement les fichiers/dossiers à sauvegarder.
$ cd /etc
$ svn add *
ou
$ svn add -N apache2 && svn add -apache2/conf
Des dizaines de lignes apparaissent alors, vous indiquant les dossiers et fichiers ajoutés.
Pour valider les modifications, commit suffit:
$ cd /etc
$ svn commit
Votre éditeur de texte apparaît alors, vous demandant d'entrer un message. Entrez le texte de votre choix (du genre "Fichiers initiaux"), enregistrez les modifications et sortez.

$ svn commit
Transmitiendo contenido de archivos .................
Commit de la revisión 1.
Vous remarquez par la suite que dans chaque sous dossier de votre arborescence s'est crée un dossier .svn.
Votre système de backup est presque prêt.
Étape 4: ignorer certains fichiers
Dans le cas ou vous ne voulez sauvegarder que certains fichiers, il faut spécifier à SVN de ne pas traiter les autres éléments.
$ cd /etc
$ svn propedit svn:ignore .
Votre éditeur de texte s'ouvre alors. Vous devez entre un nom de dossier/fichier par ligne.
Pour vérifier que vous n'avez rien oublié:
$ cd /etc
$ svn status
Vous ne devez alors aucun ligne commençant par "?".
Étape 5: auto-mise à jour du backup
SVN va détecter pour chaque fichier si des modifications ont eu lieue, et vous permettre de modifier votre sauvegarde.
$ svn status
M resolv.conf
Nous remarquons que svn a détecté un changement au niveau du fichier resolv.conf: le "M" indique que ce fichier a été modifié.
Nous pouvons alors auto-accepter ces modifications via un commit.
Étape 6: monitoring des modifications
Afin de vérifier les modifications de votre système, je vous propose un petit script:
#!/bin/sh

# Variables
#SVNPATH="/usr/local/etc /etc"
SVNBIN=/usr/local/subversion1.4.6/bin/svn
SVNADMINBIN=/usr/local/subversion1.4.6/bin/svnadmin
SVNLOOK=/usr/local/subversion1.4.6/bin/svnlook
SVNREP_PATH=/var/opt/svn/backup/
BACKUP=/var/backup/backup/svn.bz2
SVNPATH="/etc /usr/local"
SVNLOG="/var/log/backupsvn.log"

#Check svn status
for currentpath in $SVNPATH 
do
	COUNT=`$SVNBIN status $currentpath|egrep -c -v ^[MAD]`

	if [ $COUNT -gt 0 ]
	then
		echo "(ERREUR?): $COUNT fichiers/dossiers differents de (Modifie, Ajoute, Supprime) dans $currentpath... verifier a la main le repertoire! "|mail votre@mail.com -s "Update configuration $currentpath"
		echo "`date`: $COUNT modifications dans $currentpath" >> $SVNLOG
	else

		COUNT=`$SVNBIN status $currentpath|wc -l`
		if [ $COUNT -gt 0 ]
		then
			echo "`date`: Commit des modifications: $COUNT modifications aportees" >> $SVNLOG
			$SVNBIN commit $currentpath -m "Update `date`" >> $SVNLOG
			$SVNADMINBIN dump $SVNREP_PATH | bzip2 -c -9 > $BACKUP
			chmod 400 $BACKUP

			LASTREV=`$SVNLOOK youngest $SVNREP_PATH`

			# Envoi de l'email
			echo "Modifications rencontrees dans $currentpath:
			
	Liste des modifiations:

`$SVNLOOK changed $SVNREP_PATH -r $LASTREV`
			
	Liste detaillee des diferences:

`$SVNBIN diff $currentpath -r $(($LASTREV - 1)) --diff-cmd /usr/bin/diff -x "-y --suppress-common-lines"`
			"|mail votre@mail.com -s "Update configuration $currentpath"
		else
			echo "`date`: Aucune modification dans $currentpath" >> $SVNLOG
		fi
	fi
done
Vous pouvez alors mettre ce script dans votre cron. Ce script auto-valide les modifications de fichiers, mais vous avise de modifications autres dans le répertoire (ajout de fichiers, ajout de dossiers, conflits, etc...)
Récuperation de la sauvegarde (au besoin)
Comme une sauvegarde n'est rien si elle n'est pas externalisée, voici la commande pour récupérer l'image du svn.
$ svnadmin dump /var/opt/svn/backup | bzip2 -c -9 >repos_svn.bz2

Vous récupérerez alors un fichier compressé contenant l'ensemble des versions des fichiers, que vous pouvez externaliser comme bon vous semble.

Pour récupérer la sauvegarde après un crash par exemple:
$ bunzip2 repos_svn.bz2 | svn load /var/opt/svn/backup
En espérant que vous n'ayez pas à utiliser la récupération. Ce n'est jamais très bon signe lorsque l'on doit l'utiliser :)


0 commentaire(s) linux tutorial svn backup