mirror of
https://github.com/YunoHost-Apps/nextcloud_ynh.git
synced 2024-09-03 19:55:57 +02:00
Merge pull request #12 from YunoHost-Apps/secure_upgrade
Upgrade sécurisé
This commit is contained in:
commit
94a56e7103
3 changed files with 38 additions and 12 deletions
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 ]] \
|
||||
|
|
Loading…
Add table
Reference in a new issue