390 lines
12 KiB
Bash
390 lines
12 KiB
Bash
|
#!/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
|
|||
|
# -----------------------------------------------------------
|
|||
|
# **********************************************************************************************
|
|||
|
|
|||
|
|