diff --git a/local/bin/castopod_update.sh b/local/bin/castopod_update.sh index 88808b3..50aa30b 100644 --- a/local/bin/castopod_update.sh +++ b/local/bin/castopod_update.sh @@ -5,31 +5,15 @@ # Description : Script de mise à jour Castopod -# Version 23.12.1 -# - Messages des logs améliorés avec plus de détail avec 'cp'. - -# Obtenir la date et l'heure actuelles -current_date=$(date +%Y%m%d_%H%M%S) - +# Version 23.12.14 # Definitions -archive_save="save_castopod.tar" rep_save="save_castopod" sources_save=("castopod/public/media" "castopod/.env") +php_bin="/usr/bin/php8.1" +castopod_root="castopod" -# Vérifier la présence d'une archive TAR -if [ -e "$archive_save" ]; then - - echo "Démarrer l'extraction de l'archive TAR" - pv "$archive_save" | tar xf - - rm "$archive_save" - - echo "Extraction terminée." -else - echo "Aucune archive TAR '$archive_save' trouvée. Pas de sauvegarde précédente trouvée." -fi - echo " -- " # Synchroniser les fichiers sources avec le dossier de sauvegarde @@ -46,19 +30,44 @@ for source in "${sources_save[@]}"; do rsync -a "$source" "$rep_save/" done +# LEGACY 23.12.14 : Suppression de l'archive TAR si elle existe. Elle n'est plus gérée. +archive_file="save_castopod.tar" + +if [ -f "$archive_file" ]; then + echo "L'archive $archive_file n'est plus gérée par le script. Seul le dossier 'save_castopod' est pris en compte." + rm -v "$archive_file" +fi + + echo " -- " # Vérifier la présence de l'archive ZIP if [[ -n $(ls castopod*.zip 2>/dev/null) ]]; then - # Supprimer tous les fichiers et dossiers, sauf .env et public/media - find castopod/ -not -name '.env' -not -path 'castopod/public/media/*' -delete + # Supprimer tous les fichiers et dossiers, sauf ceux présents dans sources_save + ## Construire la commande find à partir du tableau sources_save + find_command="find \"$castopod_root/\" " + for source in "${sources_save[@]}"; do + if [ -d "$source" ]; then + ### Si c'est un dossier, exclure tous les fichiers et sous-dossiers sous ce dossier + find_command+=" -type d -path \"$source\" -prune -o " + elif [ -f "$source" ]; then + ### Si c'est un fichier, exclure ce fichier spécifique + find_command+=" -not -name \"$(basename "$source")\" -o " + fi + done + find_command+=" -delete" - # Extraire le fichier ZIP présent dans le dossier courant - echo "Mise à jour en cours de déploiement ... " + ## Exécuter la commande find + eval "$find_command" + + + # Extraire le fichier ZIP de mise à jour présent dans le dossier courant + echo "Mise à jour en cours de déploiement ... " unzip -o -q castopod*.zip && echo " ... terminée." + # Désactiver l'archive en renommant les fichiers ZIP en ajoutant ".old" à leur nom echo "Désactivation de l'archive de mise à jour." for file in castopod*.zip; do @@ -67,7 +76,7 @@ if [[ -n $(ls castopod*.zip 2>/dev/null) ]]; then # Mettre à jour le schéma de la base de données - /usr/bin/php8.1 castopod/spark castopod:database-update + "$php_bin" castopod/spark castopod:database-update else @@ -76,23 +85,3 @@ fi echo " -- " - -# Créer une nouvelle archive compressée à partir du répertoire de sauvegarde et supprimer le répertoire - -if [ -e "$rep_save/" ]; then - - echo "Création de l'archive en cours '$archive_save'" - # Créer l'archive avec tar et afficher la progression - tar -cf - ./"$rep_save"/ -P | pv -s $(du -sb ./"$rep_save"/ | awk '{print $1}') > "$archive_save" - echo "Création de l'archive terminée." - echo " -- " - - # Supprimer le répertoire avec une barre de progression - echo "Suppression du répertoire en cours '$rep_save/'" - rm -vrf "$rep_save/" | pv -l -s $(du -a "$rep_save/" 2>/dev/null | wc -l) > /dev/null - echo "Suppression du répertoire terminée." -else - echo "Le répertoire '$rep_save/' n'existe pas. Interruption de l'opération." -fi - -echo " -- " diff --git a/local/share/doc/castopod_update.1.md b/local/share/doc/castopod_update.1.md new file mode 100644 index 0000000..b1c8685 --- /dev/null +++ b/local/share/doc/castopod_update.1.md @@ -0,0 +1,62 @@ +# NOM + +castopod_update - Mise à jour de CASTOPOD + +# SYNOPSIS + +**castopod_update** [OPTION] + +# DESCRIPTION + +Le script **castopod_update** permet de mettre à jour le dossier Web de CASTOPOD en utilisant le fichier de mise à jour au format ZIP fourni. + +## OPTIONS + +- Aucune option n'est nécessaire pour exécuter le script. + +## CONFIGURATION + +Le script a sa propre configuration qui n'est pas modifiable. + +Le dossier Web de CASTOPOD doit être nommé `castopod`. + +Le script doit être positionné au même niveau que le dossier Web de CASTOPOD. + +Le dossier `save_castopod` contient une copie des données de CASTOPOD, qui est rafraîchie au début de l'exécution du script. S'il n'existe pas, il sera créé. + +L'archive de mise à jour doit être spécifiquement nommée `castopod*.zip` et doit être positionnée au même niveau que le script et le dossier Web de CASTOPOD. + +Le script utilise `php8.1` pour effectuer des tâches de maintenance. + +## PRÉREQUIS + +Téléchargez l'archive de mise à jour disponible sur le site https://castopod.org/. + +# EXEMPLES + +Pour exécuter le script sans aucune option : + +``` +castopod_update +``` + +# VERSIONS + +Version 23.12.1 +- Messages des logs améliorés avec plus de détails lors de l'utilisation de 'cp'. + +Version 23.12.14 +- Suppression de l'archive TAR du dossier `save_castopod`. + + +## AUTEUR + +Ce script a été créé par Cédric Abonnel. + +## RAPPORT D'ERREURS + +Pour signaler des erreurs ou des problèmes : https://git.abonnel.fr/cedricAbonnel/scripts-bash + +# REMARQUES + +Ce script est fourni tel quel, sans aucune garantie. Vous êtes libre de le modifier et de le distribuer selon les termes de la licence applicable. \ No newline at end of file