From b10a449d50c26cb7c72673ff4676ba9483fbb1bc Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 28 Feb 2019 00:12:48 +0100 Subject: [PATCH] add upgrade --- scripts/install | 7 +- scripts/upgrade | 190 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 scripts/upgrade diff --git a/scripts/install b/scripts/install index 98acbfd..40ab25d 100755 --- a/scripts/install +++ b/scripts/install @@ -72,7 +72,8 @@ ynh_app_setting_set $app final_path $final_path ynh_setup_source $final_path mv $final_path/dotclear/* $final_path/ -rmdir $final_path/dotclear + +ynh_secure_remove "$final_path/dotclear" #================================================= # NGINX CONFIGURATION @@ -101,7 +102,7 @@ master_key=$(dd if=/dev/urandom bs=1 count=200 2>/dev/null | tr -c -d '[A-Za-z0- firstname=$(yunohost user info $admin | grep firstname: | cut -d' ' -f2 | tr -d '\n') lastname=$(yunohost user info $admin | grep lastname: | cut -d' ' -f2 | tr -d '\n') email=$(yunohost user info $admin | grep mail: | cut -d' ' -f2 | tr -d '\n') -timezone=$(cat /etc/timezone | tr -d '\n') +ynh_app_setting_set $app master_key $master_key cp $php_config.in $php_config @@ -127,6 +128,8 @@ ynh_replace_string "'DC_MASTER_KEY', ''" "'DC_MASTER_KEY', '$master_key'" $php_c ynh_replace_string "'DC_ADMIN_URL', ''" "'DC_ADMIN_URL', 'https://$domain$admin_url'" $php_config ynh_replace_string "'DC_ADMIN_MAILFROM', ''" "'DC_ADMIN_MAILFROM', '$email'" $php_config +ynh_store_file_checksum $php_config + #================================================= # SETUP APPLICATION WITH CURL #================================================= diff --git a/scripts/upgrade b/scripts/upgrade new file mode 100644 index 0000000..e5b8e49 --- /dev/null +++ b/scripts/upgrade @@ -0,0 +1,190 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info "Loading installation settings..." + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get $app domain) +path_url=$(ynh_app_setting_get $app path) +admin=$(ynh_app_setting_get $app admin) +is_public=$(ynh_app_setting_get $app is_public) +final_path=$(ynh_app_setting_get $app final_path) +db_name=$(ynh_app_setting_get $app db_name) +db_pwd=$(ynh_app_setting_get $app mysqlpwd) +password=$(ynh_app_setting_get $app password) +master_key=$(ynh_app_setting_get $app master_key) + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_print_info "Ensuring downward compatibility..." + +# Fix is_public as a boolean value +if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set $app is_public 1 + is_public=1 +elif [ "$is_public" = "No" ]; then + ynh_app_setting_set $app is_public 0 + is_public=0 +fi + +# If db_name doesn't exist, create it +if [ -z $db_name ]; then + db_name=$(ynh_sanitize_dbid $app) + ynh_app_setting_set $app db_name $db_name +fi + +# If final_path doesn't exist, create it +if [ -z $final_path ]; then + final_path=/var/www/$app + ynh_app_setting_set $app final_path $final_path +fi + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_print_info "Backing up the app before upgrading (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK THE PATH +#================================================= + +# Normalize the URL path syntax +path_url=$(ynh_normalize_url_path $path_url) + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_print_info "Upgrading source files..." + +php_config=$final_path/inc/config.php + +### And create a backup of this file if the checksum is different. So the file will be backed up if the admin had modified it. +ynh_backup_if_checksum_is_different "$php_config" + +ynh_secure_remove "$final_path" + +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" + +mv $final_path/dotclear/* $final_path/ + +ynh_secure_remove "$final_path/dotclear" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_print_info "Upgrading nginx web server configuration..." + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_print_info "Making sure dedicated system user exists..." + +# Create a dedicated user (if not existing) +ynh_system_user_create $app + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_print_info "Upgrading php-fpm configuration..." + +# Create a dedicated php-fpm config +ynh_add_fpm_config + +#================================================= +# SPECIFIC UPGRADE +#================================================= +# CONFIGURE DOTCLEAR +#================================================= + +cp $php_config.in $php_config + +firstname=$(yunohost user info $admin | grep firstname: | cut -d' ' -f2 | tr -d '\n') +lastname=$(yunohost user info $admin | grep lastname: | cut -d' ' -f2 | tr -d '\n') +email=$(yunohost user info $admin | grep mail: | cut -d' ' -f2 | tr -d '\n') +admin_url=$(ynh_url_join $path_url admin/index.php) + +# Config as if we called in admin/install/wizard.php +ynh_replace_string "'DC_DBDRIVER', ''" "'DC_DBDRIVER', 'mysqli'" $php_config +ynh_replace_string "'DC_DBHOST', ''" "'DC_DBHOST', 'localhost'" $php_config +ynh_replace_string "'DC_DBUSER', ''" "'DC_DBUSER', '$app'" $php_config +ynh_replace_string "'DC_DBPASSWORD', ''" "'DC_DBPASSWORD', '$db_pwd'" $php_config +ynh_replace_string "'DC_DBNAME', ''" "'DC_DBNAME', '$db_name'" $php_config +ynh_replace_string "'DC_MASTER_KEY', ''" "'DC_MASTER_KEY', '$master_key'" $php_config +ynh_replace_string "'DC_ADMIN_URL', ''" "'DC_ADMIN_URL', 'https://$domain$admin_url'" $php_config +ynh_replace_string "'DC_ADMIN_MAILFROM', ''" "'DC_ADMIN_MAILFROM', '$email'" $php_config + +# Config as if we called in admin/install/wizard.php +ynh_replace_string "'DC_DBDRIVER', ''" "'DC_DBDRIVER', 'mysqli'" $php_config +ynh_replace_string "'DC_DBHOST', ''" "'DC_DBHOST', 'localhost'" $php_config +ynh_replace_string "'DC_DBUSER', ''" "'DC_DBUSER', '$app'" $php_config +ynh_replace_string "'DC_DBPASSWORD', ''" "'DC_DBPASSWORD', '$db_pwd'" $php_config +ynh_replace_string "'DC_DBNAME', ''" "'DC_DBNAME', '$db_name'" $php_config +ynh_replace_string "'DC_MASTER_KEY', ''" "'DC_MASTER_KEY', '$master_key'" $php_config +ynh_replace_string "'DC_ADMIN_URL', ''" "'DC_ADMIN_URL', 'https://$domain$admin_url'" $php_config +ynh_replace_string "'DC_ADMIN_MAILFROM', ''" "'DC_ADMIN_MAILFROM', '$email'" $php_config + +# Recalculate and store the checksum of the file for the next upgrade. +ynh_store_file_checksum "$php_config" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +# Set permissions on app files +chown -R $app: $final_path + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_print_info "Upgrading SSOwat configuration..." + +# Make app public if necessary +if [ $is_public -eq 1 ] +then + # unprotected_uris allows SSO credentials to be passed anyway + ynh_app_setting_set $app unprotected_uris "/" +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_print_info "Reloading nginx web server..." + +systemctl reload php7.0-fpm +systemctl reload nginx + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Upgrade of $app completed" \ No newline at end of file