scripts/backup_config.sh

390 lines
12 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
################################################################################################
##
## Nom: backup_config.sh
##
## Version: 0.4
##
## Licence: Creative Commons
##
## Comportement: Sauvegarde l'ensemble des éléments de configuration de mon système Debian
## Le script peut-être exécuté en root ou en utilisateur principal. Le premier permettra
## de sauvegarder certains fichiers dont lui seul a l'accès. Et le second permettra de
## sauvegarder uniquement les fichiers de son répertoire utilisateur.
## Deux modes d'exécution sont également disponible:
## - backup: pour sauvegarder les fichiers en fonction de l'utilisateur
## - restore: pour restaurer les fichiers en fonction de l'utilisateur
##
##
##
##
################################################################################################
##
## Date de création: 28-12-2011
##
## Auteur: Gardouille
##
##
## Dernière modifications:
## 28-12-2011 - 0.1:
## - Création
# **********************************************************************************************
## 2012/02/28 - 0.5.1:
## - Ajout de la configuration de tmux
## - Ajout de la sauvegarde des icônes
## 2012/01/12 - 0.4:
## - Ajout de la sauvegarde de la configuration de tint2
## - Ajout de la sauvegarde de la configuration de gsimplecal (calendrier graphique tout simple)
## - Ajout de la sauvegarde de la configuration de roxterm
## - Pour le moment, roxterm est uniquement utilisé avec dmenu faute de pouvoir utiliser la touche "tab" dans les raccourcis clavier.
## - Ajout de la sauvegarde d'Openbox
## 2012/01/11 - 0.3:
## - Ajout de la sauvegarde du script pour lancer dmenu
## 2012/01/05 - 0.2:
## - Ajout de la sauvegarde du fichier principal de devtodo
## - Ajout de la sauvegarde du répertoire personnel pour le jeu vvvvvv
##
# **********************************************************************************************
## À Modifier:
## - Ajouter le mode restore
## - La config dmenu via le Alt+F3
## - Ajouter la config de fbpanel
##
##
################################################################################################
# **********************************************************************************************
#
# Variables globales
#
# -----------------------------------------------------------
# Répertoire de l'utilisateur principal
USER_DIR="/home/$USER"
# Emplacement de stockage des fichiers des fichiers systèmes à sauvegarder
#BKP_DIR="/media/data/test_backup"
BKP_DIR="/media/backup/config_file-`date +%y-%m-%d`"
# Emplacement de stockage des fichiers de l'utilisateur
#BKP_DIR_USER="/media/data/test_backup/home"
BKP_DIR_USER="/media/backup/config_file-`date +%y-%m-%d`/home"
## Choix du mode d'exécution du script:
## Niveau 0 (mode_debug=0)
# Exécution automatique avec normalement aucune interaction avec l'utilisateur.
## Niveau 1 (mode_debug=1)
# ...
## Niveau 2 (mode_debug=2)
# L'installation n'est pas en automatique (aptitude, ...)
# La sortie des différentes commandes est envoyée sur la sortie standard
mode_debug=2
case "$mode_debug" in
0) ## Niveau minimum
# La sortie standard sera redirigée dans un fichier de log
sortie="> /dev/null 2> \"${fichier_erreur}\""
;;
1) ## Niveau moyen
# La sortie standard sera quand même affichée
sortie="2> \"${fichier_erreur}\""
;;
2) ## Niveau maximum
# Le résultat des commandes reste sur la sortie standard
sortie=""
;;
esac
## Fichier contenant les dernières erreurs
fichier_erreur="/tmp/erreur_backup_config.sh.tmp"
touch "${fichier_erreur}"
# Fin des variables globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fichiers globaux
#
# -----------------------------------------------------------
#
# Fin des fichiers globaux
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fonctions globales
#
# -----------------------------------------------------------
## Fonction de sauvegarde
# Prototype: backup $1 $2 $3 [$4]
# $1: Description de la sauvegarde
# $2: Répertoire/fichier à sauvegarder
# $3: Emplacement où stocker le répertoire/fichier
# $4: Filtre à appliquer si présent
backup()
{
if [ ! -d $3 ]; then # Si l'emplacement de sauvegarde n'existe pas
echod "Creation de $3"
mkdir -p $3
fi
echod "Sauvegarde de $1"
if [ $4 ]; then
# Synchronisation avec le filtre
#rsync -rl --delete --filter "- $4" $2 $3
rsync -rlpgoD --delete --filter "- $4" $2 $3
else
# Synchronisation classique
#rsync -rl --delete $2 $3
rsync -rlpgoD --delete $2 $3
fi
# r: Récurif dans les répertoires
# l: Copier les liens comme des liens
# Pour appliquer l'option -a (rlptgoD), il faudrait copier les données sur le même type de partition et non pas sur du ntfs/fat
}
## Fonction de restauration
# Prototype: restore $1 $2 $3
# $1: Répertoire/fichier à restaurer
# $2: Emplacement où restaurer le répertoire/fichier
# $3: Droits sur le répertoire/fichier
#restore()
#{
#}
# Possibilité d'utiliser cp
#cp --preserve=mode,ownership,timestamps ...
## Fonction d'affichage en fonction du mode debug choisi
echod() { [ "$mode_debug" -ge 2 ] && echo "(DEBUG) $*" ; }
echok() { [ "$mode_debug" -ge 2 ] && echo "(ok) $*" ; }
echoi() { [ "$mode_debug" -ge 1 ] && echo "(ii) $*" ; }
echow() { [ "$mode_debug" -ge 1 ] && echo "(!!) $*" ; }
echnk() { [ "$mode_debug" -ge 0 ] && echo "(EE) $*" ; }
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Programme principale
#
# -----------------------------------------------------------
# Vérification de l'existence des emplacements de sauvegarde
if [ ! -d $BKP_DIR ] || [ ! -d $BKP_DIR_USER ]; then
echo << EOF "
L'un des emplacements de sauvegarde spécifié n'existe pas:
- $BKP_DIR
ou
- $BKP_DIR_USER
Vérifier si les variable BKP_DIR et BKP_DIR_USER contiennent les bonnes valeurs.
Si c'est le cas, merci de créer manuellement les répertoires."
EOF
exit 1
fi
case "$1" in
backup)
if [ "${USER}" = "root" ]; then # Si le script est exécuté en root
echo "Exécution de la sauvegarde en tant que root"
## Répertoire /etc
# APT
backup "APT" /etc/apt/sources.list $BKP_DIR/etc/apt/
# Fichier fstab
backup "fstab" /etc/fstab $BKP_DIR/etc/
# Fichier hosts
backup "hosts" /etc/hosts $BKP_DIR/etc/
# Fichier interfaces (réseau)
backup "interfaces" /etc/network/interfaces $BKP_DIR/etc/network/
# Samba
backup "Samba" /etc/samba $BKP_DIR/etc/
# ZSH
backup "ZSH" /etc/zsh $BKP_DIR/etc/
backup "dir_colors" /etc/dir_colors $BKP_DIR/etc/
# Répertoire /usr
# VIM (dictionnaire)
# backup /usr/share/vim/vim73/spell/
# Hammerfight (jeux)
backup "Hammerfight" /usr/local/games/hammerfight/Saves $BKP_DIR/usr/local/games/hammerfight/
else # Si c'est un utilisateur "normal"
echo "Exécution de la sauvegarde en tant que $USER"
## Applications
# EOG (Eye Of Gnome)
## Devtodo
# 644/ .todo
backup "Devtodo" "$USER_DIR"/.todo "$BKP_DIR_USER"
## dmenu
# 644
backup "dmenu" "$USER_DIR"/.dmenu "$BKP_DIR_USER"
# Filezilla
backup "Filezilla" "$USER_DIR"/.filezilla "$BKP_DIR_USER"
# Freeplane
backup "Freeplane" "$USER_DIR"/.freeplane "$BKP_DIR_USER"
# Gedit
# Gnome
# Gsimplecal
backup "Gsimplecal" "$USER_DIR"/.config/gsimplecal "$BKP_DIR_USER"/.config/
# Icedove
#backup "Icedove" "$USER_DIR"/.icedove "$BKP_DIR_USER" ImapMail
backup "Icedove" "$USER_DIR"/.icedove "$BKP_DIR_USER"
# Iceweasel
backup "Iceweasel" "$USER_DIR"/.mozilla "$BKP_DIR_USER"
# Extension: Pentadactyl
backup "Pentadactyl" "$USER_DIR"/.pentadactyl "$BKP_DIR_USER"
backup "Pentadactyl" "$USER_DIR"/.pentadactylrc "$BKP_DIR_USER"
# icônes
backup "Icônes" "$USER_DIR"/.icons "$BKP_DIR_USER"
# Irssi
backup "Irssi" "$USER_DIR"/.irssi "$BKP_DIR_USER"
# Jitsi
backup "Jitsi" "$USER_DIR"/.jitsi "$BKP_DIR_USER"
# Lessfilter
backup "Lessfilter" "$USER_DIR"/.lessfilter "$BKP_DIR_USER"
# Libreoffice (templates, dictionnaires, ...)
backup "Libreoffice" "$USER_DIR"/.libreoffice "$BKP_DIR_USER"
# MOC (Music On Console)
backup "MOC" "$USER_DIR"/.moc "$BKP_DIR_USER"
# Modèles de documents
backup "Modeles" "$USER_DIR"/Modeles "$BKP_DIR_USER"
backup "user-dirs.dirs" "$USER_DIR"/.config/user-dirs.dirs "$BKP_DIR_USER"
# Nautilus (script)
backup "nautilus-scripts" "$USER_DIR"/.gnome2/nautilus-* "$BKP_DIR_USER"/.gnome2/
# Openbox
backup "openbox" "$USER_DIR"/.config/openbox "$BKP_DIR_USER"/.config/
# Pidgin (configuration et historique)
backup "Pidgin" "$USER_DIR"/.purple "$BKP_DIR_USER"
# Programme par défaut
backup "Programme par défaut" "$USER_DIR"/.local/share/applications/mimeapps.list "$BKP_DIR_USER"/.local/share/applications
# Pyload
backup "Pyload" "$USER_DIR"/.pyload "$BKP_DIR_USER"
# Rhythmbox (configuration, bibliothèque, ...)
backup "Rhythmbox" "$USER_DIR"/.local/share/rhythmbox "$BKP_DIR_USER"/.local/share/
backup "Rhythmbox" "$USER_DIR"/.gconf/apps/rhythmbox "$BKP_DIR_USER"/.gconf/apps/
# Roxterm
# 755: récursif sur les répertoires
# 644: récursif sur les fichiers
backup "Roxterm" "$USER_DIR"/.config/roxterm.sourceforge.net "$BKP_DIR_USER"/.config/
# Screen
backup "Screen" "$USER_DIR"/.screen "$BKP_DIR_USER"
# Script
backup "Script" "$USER_DIR"/bin "$BKP_DIR_USER"
# SSH
backup "SSH" "$USER_DIR"/.ssh "$BKP_DIR_USER"
# Teamviewer
backup "Teamviewer" "$USER_DIR"/.teamviewer "$BKP_DIR_USER"
# Terminator
backup "Terminator" "$USER_DIR"/.config/terminator "$BKP_DIR_USER"/.config/
# Tmux
backup "Tmux" "$USER_DIR"/.tmux.conf "$BKP_DIR_USER"/
# Transmission
backup "Transmission" "$USER_DIR"/.config/transmission "$BKP_DIR_USER"/.config
# Tsclient
backup "Tsclient" "$USER_DIR"/.tsclient "$BKP_DIR_USER"
# VIM
backup "VIM" "$USER_DIR"/.vim "$BKP_DIR_USER"
backup "VIM" "$USER_DIR"/.vimrc "$BKP_DIR_USER"
## Jeux
# Cave story +
# Hammerfight
# Sauvegarde effectuée par root car nécessite des privilèges
# Minecraft
backup "Minecraft" "$USER_DIR"/.minecraft "$BKP_DIR_USER"
# Minetest
backup "Minetest" "$USER_DIR"/.minetest "$BKP_DIR_USER"
# Shank
# Teeworlds
backup "Teeworlds" "$USER_DIR"/.teeworlds "$BKP_DIR_USER"
# vvvvvv
# 755: .vvvvvv
# 644 pour tous les fichiers
backup "vvvvvv" "$USER_DIR"/.vvvvvv "$BKP_DIR_USER"
fi
;;
* )
echo "Fonctionnement:"
echo "./backup_config.sh backup|restore"
esac # Fin du case
exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************