From de45255dc90fd528e4fb5a8dc3c19d1e4c0ce43a Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Fri, 6 Jan 2017 00:59:32 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Upgrade=20s=C3=A9curis=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Je veux bien des review avant de merger ça. On vient déjà de foirer une install de nextcloud, je préfère être sûr... --- scripts/upgrade | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 526e0ee..9dfe07e 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -9,10 +9,21 @@ dbname=$app dbuser=$app # Backup the current version of the app, restore it if the upgrade fails -if sudo yunohost backup list | grep -q $app-before-upgrade > /dev/null 2>&1; then # Supprime l'ancienne archive seulement si elle existe - sudo yunohost backup delete $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 $app --name $app-before-upgrade +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 @@ -20,9 +31,13 @@ EXIT_PROPERLY () { fi trap '' EXIT set +eu - sudo yunohost app remove $app # Supprime l'application avant de la restaurer. - sudo yunohost backup restore --ignore-hooks $app-before-upgrade --apps $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 + then + 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 From 6ee618fd5582d77391ebb11d5fd886226f3a1a2e Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Fri, 6 Jan 2017 01:26:47 +0100 Subject: [PATCH 2/5] then en trop et ynh_die avant helpers --- scripts/upgrade | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 9dfe07e..7bcf770 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 dbname=$app @@ -33,7 +36,6 @@ EXIT_PROPERLY () { set +eu 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 - then 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." @@ -42,9 +44,6 @@ EXIT_PROPERLY () { 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 [[ $YNH_APP_ID == owncloud ]] \ From 8117339356b1b70814310ee419fe65703b858696 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Sun, 8 Jan 2017 21:36:39 +0100 Subject: [PATCH 3/5] backup_core_only upgrade --- scripts/upgrade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index 7bcf770..83042eb 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,6 +18,7 @@ if sudo yunohost backup list | grep -q $app-before-upgrade1 > /dev/null 2>&1; th backup_number=2 # Et passe le numéro de l'archive à 2 old_backup_number=1 fi +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. @@ -30,6 +31,7 @@ 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 From 7accc9a6e6f5389d08250ec606345bb4b213c9fc Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Sun, 8 Jan 2017 21:37:51 +0100 Subject: [PATCH 4/5] backup_core_only restore --- scripts/restore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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" From 05d10bb0ad8fd00a960afbf26d54eccac2433d79 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Sun, 8 Jan 2017 21:38:35 +0100 Subject: [PATCH 5/5] backup_core_only backup --- scripts/backup | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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