#!/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 # ----------------------------------------------------------- # **********************************************************************************************