diff --git a/scripts/backup b/scripts/backup index 8a35241..1231263 100755 --- a/scripts/backup +++ b/scripts/backup @@ -22,8 +22,14 @@ DESTDIR="/var/www/$app" ynh_backup "$DESTDIR" "www" # Copy the data directory -DATADIR="/home/yunohost.app/${app}/data" -ynh_backup "$DATADIR" "data" 1 +backup_core_only=$(ynh_app_setting_get "$app" backup_core_only) +if [ -z $backup_core_only ] # Si backup_core_only a une valeur dans le fichier settings.yml, ne sauvegarde pas le dossier data +then + DATADIR="/home/yunohost.app/${app}/data" + ynh_backup "$DATADIR" "data" 1 +else + echo "Data dir will not saved, because backup_core_only is set." >&2 +fi # Copy the conf files mkdir ./conf diff --git a/scripts/restore b/scripts/restore index a88e502..2b285cc 100755 --- a/scripts/restore +++ b/scripts/restore @@ -55,7 +55,11 @@ sudo useradd -c "$app system account" \ # Restore the app files sudo cp -a ./www "$DESTDIR" sudo mkdir -p "$DATADIR" -sudo cp -a ./data/. "$DATADIR" +if [ -d ./data ] # Le dossier data est restauré seulement si il existe. Si le backup a été fait avec l'option backup_core_only, ce dossier n'a pas été sauvegardé. +then + sudo cp -a ./data/. "$DATADIR" +fi +ynh_app_setting_delete $app backup_core_only # Retire l'option backup_core_only du fichier settings.yml le cas échéant # Create and restore the database ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" diff --git a/scripts/upgrade b/scripts/upgrade index fb84763..031fec5 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -3,6 +3,9 @@ # Load common variables and helpers source ./_common.sh +# Source app helpers +source /usr/share/yunohost/helpers + # Set app specific variables app=$APPNAME real_app=$YNH_APP_INSTANCE_NAME # real_app prendra la valeur nextcloud ou owncloud dans le cas d'une migration @@ -10,27 +13,40 @@ dbname=$app dbuser=$app # Backup the current version of the app, restore it if the upgrade fails -if sudo yunohost backup list | grep -q $real_app-before-upgrade > /dev/null 2>&1; then # Supprime l'ancienne archive seulement si elle existe - sudo yunohost backup delete $real_app-before-upgrade +backup_number=1 +old_backup_number=2 +if sudo yunohost backup list | grep -q $app-before-upgrade1 > /dev/null 2>&1; then # Vérifie l'existence d'une archive déjà numéroté à 1. + backup_number=2 # Et passe le numéro de l'archive à 2 + old_backup_number=1 fi -sudo yunohost backup create --ignore-hooks --apps $real_app --name $real_app-before-upgrade +ynh_app_setting_set $app backup_core_only 1 # Indique au backup/restore de ne pas sauvegarder le dossier de data, uniquement le core de nextcloud. +sudo yunohost backup create --ignore-hooks --apps $app --name $app-before-upgrade$backup_number # Créer un backup différent de celui existant. +if [ "$?" -eq 0 ]; then # Si le backup est un succès, supprime l'archive précédente. + if sudo yunohost backup list | grep -q $app-before-upgrade$old_backup_number > /dev/null 2>&1; then # Vérifie l'existence de l'ancienne archive avant de la supprimer, pour éviter une erreur. + sudo yunohost backup delete $app-before-upgrade$old_backup_number > /dev/null + fi +else # Si le backup a échoué + ynh_die "Backup failed, the upgrade process was aborted." +fi + EXIT_PROPERLY () { exit_code=$? if [ "$exit_code" -eq 0 ]; then + ynh_app_setting_delete $app backup_core_only exit 0 # Quitte sans erreur si le script se termine correctement. fi trap '' EXIT set +eu - sudo yunohost app remove $real_app # Supprime l'application avant de la restaurer. - sudo yunohost backup restore --ignore-hooks $real_app-before-upgrade --apps $real_app --force # Restore the backup if upgrade failed - ynh_die "Upgrade failed. The app was restored to the way it was before the failed upgrade." + echo "Upgrade failed." >&2 + if sudo yunohost backup list | grep -q $app-before-upgrade$backup_number > /dev/null 2>&1; then # Vérifie l'existence de l'archive avant de supprimer l'application et de restaurer + sudo yunohost app remove $app # Supprime l'application avant de la restaurer. + sudo yunohost backup restore --ignore-hooks $app-before-upgrade$backup_number --apps $app --force # Restore the backup if upgrade failed + ynh_die "The app was restored to the way it was before the failed upgrade." + fi } set -eu trap EXIT_PROPERLY EXIT -# Source app helpers -source /usr/share/yunohost/helpers - # Migrate from ownCloud to Nextcloud if [[ $YNH_APP_INSTANCE_NAME != $app ]]; then # Si le nom de l'app donné lors de la commande n'est pas nextcloud, vérifie si c'est owncloud pour lancer la migration. [[ $YNH_APP_ID == owncloud ]] \