From 9ba22d0de2d671236baffcf0fe66bdea903a1e82 Mon Sep 17 00:00:00 2001 From: MilesTEG Date: Mon, 19 Apr 2021 19:07:56 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Modification=20du=20script=20de=20backup=20?= =?UTF-8?q?pour=20ne=20faire=20que=20la=20m=C3=A9thode=20archive=20dossier?= =?UTF-8?q?=20=20+=20Ajout=20de=20test=20du=20bon=20d=C3=A9roulement=20des?= =?UTF-8?q?=20commandes=20=20commandes=20$(docker=20start=20$NOM=5FCONTENE?= =?UTF-8?q?UR)=20et=20$(docker=20stop=20$NOM=5FCONTENEUR)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose/gitea/gitea-backup.sh | 109 ++++++++++++++++++--------- 1 file changed, 74 insertions(+), 35 deletions(-) diff --git a/docker-compose/gitea/gitea-backup.sh b/docker-compose/gitea/gitea-backup.sh index 66b8d17..25e7a39 100644 --- a/docker-compose/gitea/gitea-backup.sh +++ b/docker-compose/gitea/gitea-backup.sh @@ -10,6 +10,16 @@ ## = archive_dossier ## ## ## ##============================================================================================== + +##============================================================================================== +## ## +## MAJ du 19.04.2021 : La partie de sauvegarde gite_dump a été commentée, et n'est donc ## +## plus utilisée, car la restauration de cette archive est trop galère à mettre en place. ## +## Donc soit on ne donne aucun paramètre en argument au script, soit on met archive_dossier. ## +## L'autre paramètre n'aura donc plus aucun effet. ## +## ## +##============================================================================================== + ##============================================================================================== ## ## ## Objectif du script : faire une sauvegarde de l'installation Gitea @ Docker ## @@ -65,7 +75,7 @@ GITEA_DATA_DIR=data NOM_CONTENEUR=gitea # ID de l'utilisateur du NAS qui a les droits sur le conteneur -ID_USER_NAS=1060 +ID_USER_NAS=1000 ##──── ──────────────────────────────────────────────────────────────────────────────────────── ##──── ──────────────────────────────────────────────────────────────────────────────────────── @@ -141,56 +151,85 @@ esac ##============================================================================================== ## ## ## Partie concernant les sauvegardes ## -if [ $mode_backup -eq 0 ] || [ $mode_backup -eq 1 ]; then - # Aucune méthode n'est choisie ou bien méthode gitea_dump sélectionnée +# if [ $mode_backup -eq 0 ] || [ $mode_backup -eq 1 ]; then +# # Aucune méthode n'est choisie ou bien méthode gitea_dump sélectionnée - # Rappel des variables : - # GITEA_DOCKER_DIR=/volume1/docker/gitea - # GITEA_BACKUP_DIR=backup-data - # GITEA_DATA_DIR=data - # NOM_CONTENEUR=gitea - # ID_USER_NAS=1060 +# # Rappel des variables : +# # GITEA_DOCKER_DIR=/volume1/docker/gitea +# # GITEA_BACKUP_DIR=backup-data +# # GITEA_DATA_DIR=data +# # NOM_CONTENEUR=gitea +# # ID_USER_NAS=1060 - echo "-- Sauvegarde via Gitea dump. (un peu chiant à restaurer...)" - echo "###############################################################################" - # Dans la commande suivante, les chemins d'accès donnés en paramètres sont des chemins d'accès à l'intérieur du conteneur, montés avec le docker-compose.yml. - # Exemple de commande sans variables : - # docker exec -u 1060 -i -w /backup-data $(docker ps -qf "name=gitea") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini' - # Note : La commande lancée dans une tâche CRON (planifiée) ne permet pas l'utilisation du paramètre -t. - # Commande à lancer dans un terminal : - # docker exec -u 1060 -i -w /backup-data $(docker ps -qf "name=gitea") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini' - - docker exec -u $ID_USER_NAS -i -w /$GITEA_BACKUP_DIR $(/usr/local/bin/docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini" - num_erreur=$? # On stocke le code de retour de la commande précédente. - if [ $num_erreur -ne 0 ]; then # Si ce code n'est pas 0, il y a eu une erreur, on arrète le script. - echo "!!!!!! Erreur lors de la commande de backup gitea dump." - #echo "!!!!!! Commande lancée :" - #echo " docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini"" - echo "!!!!!! Abandon, avec code d'erreur $num_erreur" - exit $num_erreur - fi - echo "###############################################################################" - echo "-- Sauvegarde via Gitea dump terminée." -fi +# echo "-- Sauvegarde via Gitea dump. (un peu chiant à restaurer...)" +# echo "###############################################################################" +# # Dans la commande suivante, les chemins d'accès donnés en paramètres sont des chemins d'accès à l'intérieur du conteneur, montés avec le docker-compose.yml. +# # Exemple de commande sans variables : +# # docker exec -u 1060 -i -w /backup-data $(docker ps -qf "name=^gitea$") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini' +# # Note : La commande lancée dans une tâche CRON (planifiée) ne permet pas l'utilisation du paramètre -t. +# # Commande à lancer dans un terminal : +# # docker exec -u 1060 -i -w /backup-data $(docker ps -qf "name=^gitea$") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini' +# # Explication pour $(docker ps -qf "name=^gitea$") ici : https://stackoverflow.com/a/34497614 + +# docker exec -u $ID_USER_NAS -i -w /$GITEA_BACKUP_DIR $(docker ps -qf "name=^$NOM_CONTENEUR$") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini" +# num_erreur=$? # On stocke le code de retour de la commande précédente. +# if [ $num_erreur -ne 0 ]; then # Si ce code n'est pas 0, il y a eu une erreur, on arrète le script. +# echo "!!!!!! Erreur lors de la commande de backup gitea dump." +# #echo "!!!!!! Commande lancée :" +# #echo " docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini"" +# echo "!!!!!! Abandon, avec code d'erreur $num_erreur" +# exit $num_erreur +# fi +# echo "###############################################################################" +# echo "-- Sauvegarde via Gitea dump terminée." +# fi if [ $mode_backup -eq 0 ] || [ $mode_backup -eq 2 ]; then # Aucune méthode n'est choisie ou bien méthode archive_dossier sélectionnée echo "-- Sauvegarde par création d'une archive de tout le dossier $GITEA_DATA_DIR" echo "###############################################################################" - echo "-- Extinction du conteneur $NOM_CONTENEUR" cd $GITEA_DOCKER_DIR # Même si on est censé déjà être là... - docker stop $NOM_CONTENEUR - + + retour_cmd=1111 # Valeur reset + echo -e "\t-- Extinction du conteneur $(docker stop $NOM_CONTENEUR)\n" + retour_cmd=$? # Le code d'exit de la fonction est stocké dans cette variable. + if [ $retour_cmd -ne 0 ]; then + if [ $retour_cmd -eq 1111 ]; then + echo "### DEBUG : soucis avec la récupération du retour de commande #1470000 " + exit 1470000 + fi + echo "!! Le conteneur $NOM_CONTENEUR ne peut pas être arrêté..." + echo "!! Fin du script. Erreur 777" + echo + exit 777 + fi echo "-- Création de l'archive du dossier $GITEA_DATA_DIR" + + # Compression tar.gz : tar -czf $GITEA_BACKUP_DIR/Gitea-Data-Backup-`date +%Y-%m-%d--%Hh%Mm%Ss`.tar.gz ./$GITEA_DATA_DIR + + # Compression 7z après obtention d'un .tar # On Linux/Unix, in order to backup directories you must use tar : # - to backup a directory : tar cf - directory | 7z a -si directory.tar.7z # - to restore your backup : 7z x -so directory.tar.7z | tar xf - tar cf - ./$GITEA_DATA_DIR | 7z a -si $GITEA_BACKUP_DIR/Gitea-Data-Backup-`date +%Y-%m-%d--%Hh%Mm%Ss`.7z + echo "-- Archive de tout le dossier $GITEA_DATA_DIR créée." - echo "-- Redémarrage du conteneur Gitea..." - docker start $NOM_CONTENEUR + retour_cmd=1111 # Valeur reset + echo -e "\t-- Redémarrage du conteneur $(docker start $NOM_CONTENEUR)\n" + retour_cmd=$? # Le code d'exit de la fonction est stocké dans cette variable. + if [ $retour_cmd -ne 0 ]; then + if [ $retour_cmd -eq 1111 ]; then + echo "### DEBUG : soucis avec la récupération du retour de commande #1470000 " + exit 1470000 + fi + echo "!! Le conteneur $NOM_CONTENEUR ne peut pas être redémarré..." + echo "!! Fin du script. Erreur 777" + echo + exit 777 + fi + echo "###############################################################################" echo "-- Processus de sauvegarde par création d'archive terminé." -- 2.45.2 From 2a146e3355227a18dee65a99ea88d89cfb75fdb5 Mon Sep 17 00:00:00 2001 From: MilesTEG Date: Mon, 19 Apr 2021 19:09:53 +0200 Subject: [PATCH 2/3] =?UTF-8?q?Mise=20=C3=A0=20jour=20du=20docker-compose?= =?UTF-8?q?=20pour=20passer=20sur=20une=20version=20stable=201.x.x=20!!=20?= =?UTF-8?q?Super=20important=20car=20en=20:latest=20on=20est=20sur=20une?= =?UTF-8?q?=20version=20de=20DEV=20!!=20MAJ=20aussi=20pour=20refl=C3=A9ter?= =?UTF-8?q?=20le=20dossier=20backup-gitea=20qui=20doit=20=C3=AAtre=20mont?= =?UTF-8?q?=C3=A9=20dans=20le=20conteneur.=20(bon=20plus=20tr=C3=A8s=20uti?= =?UTF-8?q?le=20vu=20que=20l'on=20ne=20va=20plus=20vraiement=20se=20servir?= =?UTF-8?q?=20de=20la=20m=C3=A9thode=20gitea=5Fdump...=20mais=20si=20jamai?= =?UTF-8?q?s=20=C3=A7a=20devient=20le=20cas,=20au=20moins=20ce=20sera=20fa?= =?UTF-8?q?it.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose/gitea/docker-compose.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docker-compose/gitea/docker-compose.yml b/docker-compose/gitea/docker-compose.yml index dd77a09..d9ef8b5 100644 --- a/docker-compose/gitea/docker-compose.yml +++ b/docker-compose/gitea/docker-compose.yml @@ -1,5 +1,5 @@ ## Discord Plex FR : https://discord.gg/ERpYMqS -## Version 2021-03-30 +## Version 2021-04-19 ##============================================================================================== ## ## ## Fichier docker-compose.yml pour Gitea ## @@ -31,10 +31,10 @@ version: "2.4" services: server: - image: gitea/gitea:latest # https://docs.gitea.io/en-us/install-with-docker/ - # https://docs.gitea.io/fr-fr/install-with-docker/ - # https://github.com/go-gitea/gitea - + image: gitea/gitea:1 # On reste ici avec la dernière version stable de la branche 1.x.x + # https://docs.gitea.io/en-us/install-with-docker/ + # https://docs.gitea.io/fr-fr/install-with-docker/ + # https://github.com/go-gitea/gitea container_name: gitea #network_mode: "bridge" @@ -77,8 +77,9 @@ services: # ############### volumes: - - "/volume1/docker/gitea/data:/data" - - "/etc/localtime:/etc/localtime:ro" + - "/volume1/docker/gitea/data:/data" # Dossier pour les données de Gitea (Dépôts, BDD, config...) + - "/volume1/docker/gitea/backup-data:/backup-data" # Dossier pour les sauvegardes régulières à lancer avec un script en tâche planifiée. + - "/etc/localtime:/etc/localtime:ro" # Nécessaire pour avoir le temps local correct (vu que la variable TZ=Europe/Paris n'existe pas pour ce conteneur...) ports: - "8196:3000" # Choisir un port de connexion libre sur votre machine, ce sera la port de connexion pour l'interface graphique -- 2.45.2 From 210395eaf9ae8142c09a779ffbf276a987976b72 Mon Sep 17 00:00:00 2001 From: MilesTEG Date: Mon, 19 Apr 2021 19:11:04 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Version=20finale=20du=20script=20de=20resta?= =?UTF-8?q?uration=20:=20attention=20la=20m=C3=A9thode=20de=20restauration?= =?UTF-8?q?=20via=20l'archive=20gitea=5Fdump=20n'est=20pas=20=C3=A9crite?= =?UTF-8?q?=20et=20ne=20le=20sera=20probablement=20jamais...=20ce=20param?= =?UTF-8?q?=C3=A8tre=20n'aura=20donc=20aucun=20effet,=20si=20ce=20n'est=20?= =?UTF-8?q?de=20ne=20pas=20lancer=20de=20restauration.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose/gitea/gitea-restore.sh | 368 ++++++++++++++++++++++++++ 1 file changed, 368 insertions(+) create mode 100644 docker-compose/gitea/gitea-restore.sh diff --git a/docker-compose/gitea/gitea-restore.sh b/docker-compose/gitea/gitea-restore.sh new file mode 100644 index 0000000..ee9562b --- /dev/null +++ b/docker-compose/gitea/gitea-restore.sh @@ -0,0 +1,368 @@ +##============================================================================================== +## ## +## Script gitea-restore.sh ## +## ## +##============================================================================================== +## ## +## gitea-restore.sh ## +## = --gitea_dump ou --gdmp ## +## = --archive_dossier ou --ad ## +## = le nom du fichier archive à utiliser pour la restauration. ## +## Ne peut être qu'un .zip pour la méthode --gitea_dump, ## +## ou bien ## +## ne peut être qu'un .tar.gz pour la méthode --archive_dossier # +## Il faut impérativement donner le chemin d'accès complet de ce fichier archive... ## +## ## +##============================================================================================== + +##============================================================================================== +## ## +## Objectif du script : Restaurer la sauvegarde de Gitea passée en paramètre ## +## Il faudra indiquer la méthode de restauration basée sur le type de sauvegarde à restaurer. ## +## Il faudra également indiquer l'archive à utiliser pour la restauration. ## +## ## +##============================================================================================== +## ## +## Une méthode officielle de restauration, de la base de données est présente ici : ## +## https://docs.gitea.io/en-us/backup-and-restore/#restore-command-restore ## +## ## +##============================================================================================== + +##============================================================================================== +## ## +## MAJ du 19.04.2021 : La partie de sauvegarde gite_dump ne sera pas programmée car c'est ## +## trop galère à mettre en place. ## +## Donc soit on ne donne aucun paramètre en argument au script, soit on met archive_dossier. ## +## L'autre paramètre n'aura donc plus aucun effet. Ne pas l'utiliser ! ## +## Cependant le code pour distinguer les deux paramètres reste, mais il n'y aura rien dans ## +## la partie gitea_dump. ## +## ## +##============================================================================================== + + +# Récupération des arguments qu'on place dans des variables constantes +declare -r nb_arg=$# # Nombre d'argument(s) fourni(s) au script. +declare -r methode="$1" # 1er argument fourni +declare -r fichier="$2" # 2ème argument fourni +declare -r tous_les_args="$*" # Tous les arguments + +##============================================================================================== +## VALEURS À PERSONNALISER ## +## ## +## Chemin d'accès vers votre dossier docker et vers le dossier de backup de gitea ## +##============================================================================================== +# Chemin complet du dossier qui contient le dossier des données (data) et des backups (backup-data) +GITEA_DOCKER_DIR=/volume1/docker/gitea + +# Les noms des dossiers montés dans le conteneur doivent êtres identiques à ceux présents sur la machine hôte. Sinon faudra modifier le script... +# Nom du dossier contenant les backups qui doit exister car il doit être monté dans le conteneur à l'aide du docker-compose.yml. +GITEA_BACKUP_DIR=backup-data + +# Nom du dossier contenant les donneés de Gitea (data) +GITEA_DATA_DIR=data + +# Nom du conteneur +NOM_CONTENEUR=gitea + +# ID de l'utilisateur du NAS qui a les droits sur le conteneur +ID_USER_NAS=1000 +##============================================================================================== +##============================================================================================== + +echo +echo "Le script gitea-restore.sh permet de faire une restauration des données du conteneur Gitea." +echo + +##──── ──────────────────────────────────────────────────────────────────────────────────────── +## Début de la section concernant les fonctions ## +##──── ──────────────────────────────────────────────────────────────────────────────────────── + +f_affiche_syntaxe(){ + # Fonction pour afficher la syntaxe d'utilisation du fichier script. + # syntax: f_affiche_syntaxe [] + # 1er paramètre : $1 + # 2nd paramètre éventuel : $2 Ce sera ce qui a été fourni en argument du script. + local f_nb_arg=$# + local f_param_1=$1 + local f_param_2=$2 + echo + if [ "$f_param_1" = "#1" ]; then + echo "La méthode de restauration choisie '$f_param_2' est incorrecte." + echo + elif [ "$f_param_1" = "#2" ]; then + if [ -z "$f_param_2" ]; then + echo "Aucun paramètre n'a été fourni au script..." + else + echo "Le nombre de paramètre fourni n'est pas correct. Paramètres fournis : '$f_param_2'" + fi + echo + fi + echo "Utilisation : gitea-restore.sh " + #echo " * : --gitea_dump ou --gdmp pour utiliser la méthode gitea dump." + + echo " * : --archive_dossier ou --ad pour utiliser la méthode archive dossier." + echo " * : le nom du fichier archive à utiliser pour la restauration." + #echo " Ne peut être qu'un .zip pour la méthode --gitea_dump," + #echo " ou bien ne peut être qu'un .7z ou .tar.gz pour la méthode --archive_dossier" + echo " Ne peut être qu'un .7z ou un .tar.gz pour la méthode --archive_dossier." + echo " Il faut impérativement donner le chemin d'accès complet de ce fichier archive..." + echo + + if [ "$f_param_1" = "#3" ]; then + exit 1 + fi + exit 3 +} + +f_verif_fichier_existe() { + # Fonction qui vérifie si le fichier fourni en paramètre existe, et qu'il s'agit d'un + # fichier zip ou d'un fichier 7z. + # Quoiqu'il arrive, l'appel à cette fonction marque la fin du script. + # + # syntax: f_verif_fichier_existe [] + + local fichier_a_tester=$1 + + if [ -z "$fichier_a_tester" ]; then + echo "!! Erreur fatale, le paramètre à tester de la fonction f_verif_fichier_existe() est vide ! Revoir l'appel à la fonction..." + echo "!! Fin du script. Code d'erreur 10." + return 11 # On stoppe immédiatement l'exécution de la fonction ! + fi + if [ ! -s "$fichier_a_tester" ]; then # Le fichier 'fichier_a_tester' n'existe pas ou a un taille de 0 ! + return 1 # C'est le code d'erreur pour indiquer que le fichier n'existe pas. + fi + + # Quelle est l'extension du fichier fichier_a_tester ? + fullfilename="$fichier_a_tester" + filename=$(basename "$fullfilename") + ext="${filename#*.}" + echo $ext + return 0 +} + +f_verif_dossier_existe() { + # Fonction qui vérifie si le dossier fourni en paramètre existe. + # + # syntax: f_verif_dossier_existe + + local dossier_a_tester=$1 # On récupère le 1er paramètre passé en argument à la fonction. + + if [ -d "$dossier_a_tester" ]; then # Le dossier 'dossier_a_tester' existe ! Il sera renommé. + return 0 # C'est le code d'erreur pour indiquer que le dossier existe bien. + else + return 1 # C'est le code d'erreur pour indiquer que le dossier n'existe pas. + fi + + # Si le script arrive ici, c'est qu'il y a un soucis... + echo "BLABLA Si tu lis ça, c'est que y a une couille dans le paté !!! 9988" + exit 9988 +} +##──── ──────────────────────────────────────────────────────────────────────────────────────── +## Fin de la section concernant les fonctions ## +##──── ──────────────────────────────────────────────────────────────────────────────────────── + + +##──── ──────────────────────────────────────────────────────────────────────────────────────── +## Début du programme principal ## +##──── ──────────────────────────────────────────────────────────────────────────────────────── +if [ $nb_arg -ne 2 ]; then + f_affiche_syntaxe "#2" "$tous_les_args" # On affiche la syntaxe car le nombre de paramètres n'est pas correct. +fi + +mode_backup="" +case "$methode" in + --[hH][eE][lL][pP] | --[hH] | -[hH][eE][lL][pP] | -[hH] ) # Premier argument --help ou --h + f_affiche_syntaxe # On affiche la syntaxe + ;; + + --gitea_dump | --gdmp) + mode_backup="gitea_dump" + ;; # On ne surcharge pas cette partie avec le code de restauration, ce sera fait plus bas. + + --archive_dossier | --ad) + mode_backup="archive_dossier" + ;; # On ne surcharge pas cette partie avec le code de restauration, ce sera fait plus bas. + + *) # Aucune méthode sélectionnée valide ou bien trop d'arguments + mode_backup="non_choisi" + f_affiche_syntaxe "#1" "$methode" # On affiche la syntaxe car le paramètre de méthode est incorrect. + echo "BLABLA Si tu lis ça, c'est que y a une couille dans le paté !!! 9999" + exit 9999 + ;; +esac + +echo "La méthode de restauration choisie est : $methode " +echo + +# Test si le fichier en argument existe et est valide (archive zip pour ). +ext_fichier="" +ext_fichier="$(f_verif_fichier_existe $fichier)" # Vérification que le fichier à restaurer existe bien et est bien un .zip ou un .7z +retour_fct=$? # Le code d'exit de la fonction est stocké dans cette variable. +if [ $retour_fct -ne 0 ]; then + case "$retour_fct" in + 1) # Le fichier n'existe pas. + echo "!! Le fichier $fichier n'existe pas. La restauration ne peut pas s'effectuer." + echo "!! Fin du script. Erreur 10" + echo + exit 10 + ;; + 11) # Problème avec l'appelle de la fonction, revoir le code ci-dessus... + exit 11 + ;; + *) # Toutes autres valeurs ne devrait pas exister ! + echo "!! Erreur fatale qui ne devrait pas exister !" + echo "!! Code d'erreur 1000" + exit 1000 + ;; + esac +else + echo "Le fichier existe et a une taille non nulle. Le script peut continuer." + echo + echo "Début de la restauration ---" +fi + +cd $GITEA_DOCKER_DIR # On se place dans le dossier du conteneur gitea +retour_cmd=$? # Le code d'exit de la fonction est stocké dans cette variable. +if [ $retour_cmd -ne 0 ]; then + echo "!! Le dossier $GITEA_DOCKER_DIR semble ne pas exister. Vérifier la variable GITEA_DOCKER_DIR dans le script." + echo "!! Fin du script. Erreur 333" + echo + exit 333 +fi + +# Note : Si le dossier GITEA_DATA_DIR existe il sera renommé en GITEA_DATA_DIR--$(date +%Y-%m-%d--%Hh%M) +# avec la commande mv "$GITEA_DATA_DIR" "$GITEA_DATA_DIR--$(date +%Y-%m-%d--%Hh%M)" +# Ce test sera fait lors de l'appel de la fonction verif_dossier_existe(). +# Aucun choix ne sera possible, le dossier existant sera forcément renommé. +# +# Note : Il faut que le dossier GITEA_BACKUP_DIR existe, ce qui semble acquis vu que le fichier backup +# à restaurer doit être dedans... Mais il est vital que ce dossier existe car un dossier 'TEMP' +# y sera créé pour extraire les données de l'archive (zip, 7z, ou tar.gz)... +# +# On teste maintenant l'existence des deux dossiers précédents. +# Si un des deux dossiers n'est pas présents, le script sera interrompu. + +# 1er test : GITEA_DATA_DIR +retour_fct=11111 # Valeur reset. +f_verif_dossier_existe $GITEA_DATA_DIR +retour_fct=$? # Le code d'exit de la fonction est stocké dans cette variable. +if [ $retour_fct -eq 0 ]; then # Le dossier existe, on peut continuer + echo "-- Le dossier $dossier_a_tester existe et va être renommé en $dossier_a_tester--$(date +%Y-%m-%d--%Hh%M)" +else # Le dossier n'existe pas + echo "!! Le dossier $dossier_a_tester n'existe ! Veuillez créer le dossier $dossier_a_tester puis relancer le script." + echo "!! Interruption de l'exécution du script. Code 444" + exit 444 # C'est le code d'erreur pour indiquer que le dossier n'existe pas et que le script a été interrompu. +fi + +# 2ème test : GITEA_BACKUP_DIR +retour_fct=11111 # Valeur reset. +f_verif_dossier_existe $GITEA_BACKUP_DIR +retour_fct=$? # Le code d'exit de la fonction est stocké dans cette variable. +if [ $retour_fct -eq 0 ]; then # Le dossier existe, on peut continuer + echo "-- Le dossier $dossier_a_tester existe bien. La restauration peut continuer." +else # Le dossier n'existe pas + echo "!! Le dossier $dossier_a_tester n'existe ! Vérifier que ce dossier est bien paramétré dans le script." + echo "!! Interruption de l'exécution du script. Code 555" + exit 555 # C'est le code d'erreur pour indiquer que le dossier n'existe pas et que le script a été interrompu. +fi + +# Maintenant on sait que les deux dossiers GITEA_BACKUP_DIR et GITEA_DATA_DIR existent. + +case "$mode_backup" in + gitea_dump) + + if [ $ext_fichier != "zip" ]; then + echo "!! Le fichier archive $(basename "$fichier") n'est pas une archive ZIP." + echo "!! Fin du script." + f_affiche_syntaxe "#3" + fi + + echo -e "\t-- Méthode de restauration à venir, un jour si j'ai le courage...\n" + echo -e "\t-- Donc, pour le moment il ne se passera rien avec cette méthode...\n" + exit 0 + + # Extraction de l'archive zip créé avec gitea dump avec 7z : + # 7z x -o/volume1/docker/gitea/backup-data -tzip /volume1/docker/gitea/backup-data/gitea-dump-1618217429.zip + + echo + ;; + + archive_dossier) + + if [ $ext_fichier != "7z" ] && [ $ext_fichier != "tar.gz" ]; then + echo "!! Le fichier archive $(basename "$fichier") n'est pas une archive 7z ou tar.gz." + echo "!! Fin du script." + f_affiche_syntaxe "#3" # Le script est interrompu. + fi + + echo -e "\t-- Restauration de la sauvegarde $fichier \n\t par extraction de l'archive dans le dossier $GITEA_DATA_DIR\n" + + # Comme on sait que le dossier existe, il est renommée après avoir éteint le conteneur. + retour_cmd=1111 # Valeur reset + echo -e "\t-- Extinction du conteneur $(docker stop $NOM_CONTENEUR)\n" + retour_cmd=$? # Le code d'exit de la fonction est stocké dans cette variable. + if [ $retour_cmd -ne 0 ]; then + if [ $retour_cmd -eq 1111 ]; then + echo "### DEBUG : soucis avec la récupération du retour de commande #1470000 " + exit 1470000 + fi + echo "!! Le conteneur $NOM_CONTENEUR ne peut pas être arrêté..." + echo "!! Fin du script. Erreur 777" + echo + exit 777 + fi + + mv "$GITEA_DATA_DIR" "$GITEA_DATA_DIR--$(date +%Y-%m-%d--%Hh%M)" + + # En fonction du type d'archive donnée en paramètre au script, ce n'est pas la même manière d'extraire les données. + # Mais quoiqu'il arrive on crée un dossier TEMP dans le dossier GITEA_BACKUP_DIR pour y placer les données extraites. + # Ce dossier TEMP sera supprimé à la fin de la restauration. + mkdir "$GITEA_BACKUP_DIR/TEMP" + + case "$ext_fichier" in + 7z) + echo -e "\t-- Extraction des données de l'archive 7z utilisée.\n" + # Restauration d'un fichier 7z : + 7z x -so $fichier | tar xf - -C "$GITEA_BACKUP_DIR/TEMP" + ;; + tar.gz) + echo -e "\t-- Extraction des données de l'archive tar.gz utilisée.\n" + # Restauration d'un fichier tar.gz : + tar -xzf $fichier -C "$GITEA_BACKUP_DIR/TEMP" + ;; + *) + echo "Erreur d'extension non prévue ! Revoir le code. Erreur 88." + exit 88 + esac + + # On déplace le dossier extrait data dans GITEA_DOCKER_DIR (Rappel on est dans le dossier gitea qui contient le dossiers GITEA_BACKUP_DIR) + mv "$GITEA_BACKUP_DIR/TEMP/data" "$GITEA_DOCKER_DIR" # On pourrait utiliser "./" à la place de "$GITEA_DOCKER_DIR" + + # Le dossier TEMP étant maintenant vide, on le supprime + rm -rf "$GITEA_BACKUP_DIR/TEMP" + + retour_cmd=1111 # Valeur reset + echo -e "\t-- Redémarrage du conteneur $(docker start $NOM_CONTENEUR)\n" + retour_cmd=$? # Le code d'exit de la fonction est stocké dans cette variable. + if [ $retour_cmd -ne 0 ]; then + if [ $retour_cmd -eq 1111 ]; then + echo "### DEBUG : soucis avec la récupération du retour de commande #1470000 " + exit 1470000 + fi + echo "!! Le conteneur $NOM_CONTENEUR ne peut pas être redémarré..." + echo "!! Fin du script. Erreur 777" + echo + exit 777 + fi + ;; + + *) + echo "!! Un problème est survenu ! Revoir le script. Code XYZ = 199 !" + echo + return 199 + ;; +esac + +echo +echo "Restauration terminée. Bonne journée :)" +echo \ No newline at end of file -- 2.45.2