Sauvegarder les configs de son serveur Linux

Comment stocker vos fichiers de configurations Linux sur un dépôt GIT ?

ATTENTION, c’est une approche simpliste : l’inconvénient majeur de cette technique est de ne pas pouvoir conserver les permissions de chaque fichier/répertoire. GIT n’est pas non plus une solution de backup hein (http://serverfault.com/questions/341199/git-as-a-backup-tool) … il y a bien des outils qui tentent de le faire, je ne les ai pas testé, l’idée est de rester simple.

Au départ, l’idée était de faire un repo GIT, mais donc le worktree serait « / ».
Le souci de cette technique est que le « git status » a tendance à planter, probablement en raison du trop grand nb de fichiers/répertoires que ça représente, voire parce qu’il y rencontre d’autres repos GIT qui le perturbent, etc.

Technique retenue :
Un bête script SH pour copier nos fichiers dans le dépôt GIT.

  1. Créer vous un compte sur https://bitbucket.org, celui-ci permettant de créer des « repositories » privés, gratuitement, contrairement à Github, qui nécessite un abonnement pour avoir des « repos » privés.
  2. Côté serveur, créer un projet GIT qui stockera votre repository GIT ainsi que d’autres fichiers si besoin, mais la plupart de vos fichiers seront en dehors de ce répertoire.
    cd /root && mkdir configs
    cd configs
    git init
    git remote add origin git@bitbucket.org:##username##/##repository-name##.git
  3. Ajouter votre script de sauvegarde backup.sh
    BACKUP_DIR=/root/config/backup
    
    # Votre liste de fichiers/répertoires à sauvegarder
    files=('/etc/automysqlbackup' '/etc/rkhunter.conf' '/etc/ntp.conf' '/etc/fail2ban' '/etc/apache2' '/etc/nginx' '/etc/network/interfaces' '/etc/proftpd' '/etc/mysql' '/etc/resolv.conf' '/home/droits.sh
    ' '/root/.bashrc' '/root/fwall-rules' '/root/.gitconfig' )
    
    echo "Purging..."
    rm -Rf $BACKUP_DIR
    mkdir $BACKUP_DIR
    
    echo "Backup"
    for i in "${files[@]}"
    do
      cp -r $i $BACKUP_DIR
    done
    
  4. Il ne reste qu’à ajouter, commiter et pusher vos éléments sur bitbucket.
    Vous pouvez même ajouter cette ligne dans votre backup.sh, avec un timestamp dans le commentaire du commit…
    Ou créer à chaque commit un tag git, pour retrouver vos versions, etc.

    git commit -a "My backup"