Archive for the ‘svn’ Category

Sauvegarde incrémental du "/etc"

En discutant avec des administrateurs système au travail. J’ai pu remarquer que souvent des erreurs de configuration pourraient être simplement évitées en utilisant un gestionnaire de contrôle de version (VCS). Et de faites, il y a quelque temps que j’ai développé un script bash / cron pour faire ce travail. Mais il comporte plusieurs défauts tels que l’utilisation intensive des particularités du système d’exploitation que j’utilise présentement, c’est-à-dire Gentoo Linux. Mais bon il fonctionne très bien pour moi.

#!/bin/sh

BACKUPNAME="etc-backup"
LOGFILE="/var/log/${BACKUPNAME}.log"
SVNDIR="/var/tmp/${BACKUPNAME}"
SVNBASEDIR="/var/svn"
SVNURL="file://${SVNBASEDIR}/${BACKUPNAME}"
TARGETDIR="/etc"

if [[ ! -d $SVNDIR ]]; then 
  svnadmin create ${SVNBASEDIR}/${BACKUPNAME} >> ${LOGFILE} 
  svn co ${SVNURL} ${SVNDIR} >> ${LOGFILE}
fi

cfg-update -ua >> ${LOGFILE}rsync -a --exclude='*.svn*' ${TARGETDIR}/ ${SVNDIR}/
cd ${SVNDIR}

# be sure every thing is clean and safe
svn cleanup >> ${LOGFILE}

# be sure every thing is up to date
svn update >> ${LOGFILE}
FILEINCONFLICT=$( svn status | grep "C " | cut -c 3-)
for file in ${FILEINCONFLICT}
do
 svn revert ${file} >> ${LOGFILE}
done

FILETOADD=$( svn status | grep "? " | cut -c 3- )
for file in ${FILETOADD}
do
 if [[ -e $file ]]; then 
   svn add --quiet ${file} >> ${LOGFILE}  
 fi
done

FILETODEL=$( svn status | grep "! " | cut -c 3- )
for file in ${FILETODEL}
do
 svn rm --quiet ${file} >> ${LOGFILE}
done
svn commit -m "backup of $(date)" >>  ${LOGFILE}

Pour les ceux qui n’aiment pas faire l’utilisation de subversion. On pourrait simplement porté le script vers git ou bazaar. S’il y a des demandes, je suis prèt à faire la modification.

Je suggère aussi l’utilisation du projet etc-keeper. En faites, probablement que je ferai un peu de travail pour un support Gentoo, le projet semble très intéressant. Et je suis aussi sûr qu’une intégration avec Bcfg2 / Puppet pourrait être gagnante.