2021-07-27 20:34:58 +02:00
|
|
|
#! /bin/bash
|
|
|
|
|
2022-04-13 19:59:58 +02:00
|
|
|
# Fonctions et variables
|
|
|
|
###########################################################
|
2022-06-23 17:48:27 +02:00
|
|
|
W="--width=600"
|
|
|
|
H="--height=500"
|
2022-04-13 19:59:58 +02:00
|
|
|
|
2021-08-03 16:55:22 +02:00
|
|
|
ZenityPulsate () {
|
2022-07-04 11:01:05 +02:00
|
|
|
zenity $W --window-icon=borg --progress --pulsate --auto-close
|
2021-08-03 16:55:22 +02:00
|
|
|
}
|
|
|
|
|
2022-04-13 19:59:58 +02:00
|
|
|
TestBorgRepo () {
|
|
|
|
if [ ! -f "config" ]; then
|
2022-07-12 21:36:11 +02:00
|
|
|
zenity $W --error --text="Impossible de trouver le fichier de configuration du dépôt."
|
|
|
|
TestBorgErr="true"
|
|
|
|
else
|
|
|
|
TestBorgErr="false"
|
2022-04-13 19:59:58 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -d "data" ]; then
|
2022-07-12 21:36:11 +02:00
|
|
|
zenity $W --error --text="Impossible de trouver le dossier des données du dépôt."
|
|
|
|
TestBorgErr="true"
|
|
|
|
else
|
|
|
|
TestBorgErr="false"
|
2022-04-13 19:59:58 +02:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2022-04-11 08:19:54 +02:00
|
|
|
dossierprofil="$HOME/.config/borg/profils-borg-zenity/"
|
2022-07-12 21:36:11 +02:00
|
|
|
mkdir -p "$dossierprofil" && cd "$dossierprofil" || exit
|
2021-08-03 16:55:22 +02:00
|
|
|
|
2022-04-13 19:59:58 +02:00
|
|
|
# Affichage du menu
|
|
|
|
###########################################################
|
2021-08-03 16:55:22 +02:00
|
|
|
|
2021-07-27 20:34:58 +02:00
|
|
|
choixmenu=$(echo -e "\
|
2021-08-03 16:55:22 +02:00
|
|
|
cp\nCréer un nouveau profil/dépôt\n\
|
2022-07-12 21:36:11 +02:00
|
|
|
ajd\nCréer un nouveau profil et le lier à un dépôt existant\n\
|
2022-07-14 15:05:52 +02:00
|
|
|
ap\nAfficher les profils\n\
|
|
|
|
mp\nModifier un profil (connaissance en ligne de commande borg requise)\
|
2022-07-12 21:36:11 +02:00
|
|
|
" | zenity $H $W --window-icon=borg --list --column "id" --column "choix" --hide-column=1 --hide-header)
|
2021-07-27 20:34:58 +02:00
|
|
|
|
2022-04-13 19:59:58 +02:00
|
|
|
# Gestion des choix du menu
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
### Créer un nouveau profil/dépôt ###
|
2021-07-27 20:34:58 +02:00
|
|
|
|
2021-08-03 16:55:22 +02:00
|
|
|
if [ "$choixmenu" = "cp" ];then
|
2022-04-29 17:42:23 +02:00
|
|
|
|
2022-06-23 18:08:33 +02:00
|
|
|
borg_repo=$(zenity --title "Dossier du dépôt" --file-selection --directory)
|
2022-06-23 17:48:27 +02:00
|
|
|
if [ ! -z "$(ls -A "$borg_repo")" ]; then
|
2021-08-03 16:55:22 +02:00
|
|
|
zenity $W --error --text="Erreur, le dossier n'est pas vide."
|
|
|
|
exit
|
2021-07-27 20:34:58 +02:00
|
|
|
fi
|
|
|
|
|
2022-06-23 18:08:33 +02:00
|
|
|
zenity $W --question --text "Chiffrer le dépôt ?\n\n\
|
|
|
|
Si vous chiffrez le dépôt, le fichier-clé du dépôt sera stocké dans le dossier <tt>$HOME/.config/borg/keys/</tt>.\n\
|
|
|
|
Veuillez à sauvegarder ce dossier dans un endroit sûr.\n\
|
|
|
|
Si cette clé ne peut être lue les données ne seront pas récupérables. Notez qu'il n'existe aucun mécanisme de récupération de clé.\n\n\
|
|
|
|
Si vous ne chiffrez pas le dépôt, les données qu'il contient seront librement accessible par toute personne ayant accès aux fichiers du dépôt.
|
|
|
|
"
|
2021-08-03 16:55:22 +02:00
|
|
|
|
|
|
|
if [ "$?" = "0" ];then
|
2022-07-04 19:40:14 +02:00
|
|
|
export BORG_PASSPHRASE=""
|
2022-07-04 11:01:05 +02:00
|
|
|
borg init --encryption=keyfile "$borg_repo" | ZenityPulsate
|
2022-04-15 11:34:24 +02:00
|
|
|
zenity $W --info --text "Un nouveau dépôt chiffré a été généré dans <tt>$borg_repo</tt>"
|
2022-06-23 20:14:31 +02:00
|
|
|
repo_status="chiffré"
|
2021-08-03 16:55:22 +02:00
|
|
|
elif [ "$?" = "1" ];then
|
2022-07-04 11:01:05 +02:00
|
|
|
borg init --encryption=none "$borg_repo" | ZenityPulsate
|
2022-04-15 11:34:24 +02:00
|
|
|
zenity $W --info --text "Un nouveau dépôt en clair a été généré dans <tt>$borg_repo</tt>"
|
2022-06-23 20:14:31 +02:00
|
|
|
repo_status="non chiffré"
|
2021-08-03 16:55:22 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
borg_dir=$(zenity --title "Dossier à sauvegarder" --file-selection --directory)
|
2022-06-23 20:14:31 +02:00
|
|
|
profilename=$(zenity --entry --title "Nom de profil" --text "Nom de profil (pas d'espace ni caractères spéciaux)")
|
|
|
|
nomsauvegarde=$(echo "$profilename")
|
2022-04-29 17:42:23 +02:00
|
|
|
|
2022-06-23 20:14:31 +02:00
|
|
|
if [ "$profilename" = "" ];then zenity $W --error --text "Pas de nom de profil";exit;fi
|
2022-04-29 19:45:49 +02:00
|
|
|
if [ "$nomsauvegarde" = "" ];then zenity $W --error --text "Pas de nom de sauvegarde";exit;fi
|
2022-06-23 20:14:31 +02:00
|
|
|
|
2022-04-11 08:19:54 +02:00
|
|
|
cat << EOF >> "$dossierprofil""$profilename".conf
|
2021-08-03 16:55:22 +02:00
|
|
|
nomsauvegarde="$nomsauvegarde"
|
|
|
|
borg_repo="$borg_repo"
|
2022-04-13 19:59:58 +02:00
|
|
|
borg_archive="\$(date +%d_%B_%Y_%H-%M)"
|
2021-08-03 16:55:22 +02:00
|
|
|
borg_dir="$borg_dir"
|
2022-06-23 18:08:33 +02:00
|
|
|
borg_excludes=""
|
2021-08-03 16:55:22 +02:00
|
|
|
borg_compress=""
|
|
|
|
dryrun=""
|
|
|
|
EOF
|
2021-07-27 20:34:58 +02:00
|
|
|
|
2022-07-12 21:36:11 +02:00
|
|
|
zenity $W --info --text "\
|
|
|
|
Le profil «$profilename» a été créé avec ces paramètres\n\n\
|
|
|
|
Nom de profil : $profilename\n\
|
|
|
|
Chemin à sauvegarder : $borg_dir\n\
|
|
|
|
Chemin du dépôt : $borg_repo\n\
|
|
|
|
Statut du dépôt : $repo_status"
|
2022-04-29 17:42:23 +02:00
|
|
|
|
2022-04-13 19:59:58 +02:00
|
|
|
### Ajouter un dépôt existant ###
|
|
|
|
|
|
|
|
elif [ "$choixmenu" = "ajd" ];then
|
|
|
|
|
2022-07-12 21:36:11 +02:00
|
|
|
TestBorgErr="true"
|
|
|
|
while [ "$TestBorgErr" = "true" ];do
|
|
|
|
borg_repo_test=$(zenity --title "Dossier du dépôt" --file-selection --directory)
|
|
|
|
if [ $? = "1" ];then exit;fi
|
|
|
|
cd "$borg_repo_test" && TestBorgRepo
|
|
|
|
if [ "$TestBorgErr" = "false" ];then borg_repo=$borg_repo_test;fi
|
|
|
|
done
|
2022-04-13 19:59:58 +02:00
|
|
|
|
2022-07-12 21:36:11 +02:00
|
|
|
borg_dir=$(zenity --title "Dossier à sauvegarder" --file-selection --directory)
|
|
|
|
profilename=$(zenity --entry --title "Nom de profil" --text "Nom de profil (pas d'espace ni caractères spéciaux)")
|
|
|
|
nomsauvegarde=$(echo "$profilename")
|
2022-04-13 19:59:58 +02:00
|
|
|
|
|
|
|
cat << EOF >> "$dossierprofil""$profilename".conf
|
|
|
|
nomsauvegarde="$nomsauvegarde"
|
|
|
|
borg_repo="$borg_repo"
|
|
|
|
borg_archive="\$(date +%d_%B_%Y_%H-%M)"
|
|
|
|
borg_dir="$borg_dir"
|
|
|
|
borg_excludes=""
|
|
|
|
borg_compress=""
|
|
|
|
dryrun=""
|
|
|
|
EOF
|
|
|
|
|
|
|
|
zenity $W --info --text "Le dépôt à bien été ajouté.\nLancez «Borg Zenity Sauvegarde» pour faire une sauvegarde."
|
|
|
|
|
|
|
|
### Afficher les profils ###
|
|
|
|
|
2021-08-03 16:55:22 +02:00
|
|
|
elif [ "$choixmenu" = "ap" ];then
|
2022-07-12 21:36:11 +02:00
|
|
|
fichierprofil=$(ls -1 *.conf | zenity $H $W --window-icon=borg --list --title "Liste des profils" --text "Choisir un profil dans la liste" --hide-header --column "profil")
|
2022-07-12 21:45:33 +02:00
|
|
|
if [ "$fichierprofil" != "" ];then
|
2022-04-29 19:45:49 +02:00
|
|
|
zenity $W $H --info --text="<tt>$(cd "$dossierprofil" && cat "$fichierprofil")</tt>"
|
2022-07-12 21:45:33 +02:00
|
|
|
fi
|
2021-07-27 20:34:58 +02:00
|
|
|
|
2022-07-21 21:09:52 +02:00
|
|
|
### Modifier un profil ###
|
2022-07-14 15:05:52 +02:00
|
|
|
elif [ "$choixmenu" = "mp" ];then
|
|
|
|
fichierprofil=$(ls -1 *.conf | zenity $H $W --window-icon=borg --list --title "Liste des profils" --text "Choisir un profil dans la liste" --hide-header --column "profil")
|
2022-07-21 21:09:52 +02:00
|
|
|
cp "$fichierprofil" "$fichierprofil.tmp"
|
|
|
|
return=$(zenity $W $H --text-info --editable --title="profil $fichierprofil" --filename "$fichierprofil.tmp")
|
|
|
|
if [ "$return" = "" ];then
|
|
|
|
rm "$fichierprofil.tmp"
|
|
|
|
exit
|
|
|
|
else
|
|
|
|
echo "$return" > "$fichierprofil.tmp"
|
|
|
|
mv "$fichierprofil.tmp" "$fichierprofil"
|
|
|
|
fi
|
2022-07-14 15:05:52 +02:00
|
|
|
|
2021-07-27 20:34:58 +02:00
|
|
|
elif [ "$choixmenu" = "" ];then
|
2021-08-03 16:55:22 +02:00
|
|
|
exit
|
2021-07-27 20:34:58 +02:00
|
|
|
fi
|