diff --git a/scripts/backup b/scripts/backup new file mode 100755 index 0000000..6a626d7 --- /dev/null +++ b/scripts/backup @@ -0,0 +1,43 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + ### Remove this function if there's nothing to clean before calling the remove script. + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# LOAD SETTINGS +#================================================= + +app=$YNH_APP_INSTANCE_NAME +domain=$(ynh_app_setting_get $app domain) + +#================================================= +# STANDARD BACKUP STEPS +#================================================= + +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# SPECIFIC BACKUP +#================================================= +ynh_backup "/etc/webmin/miniserv.conf" diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..14ab233 --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,92 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + + +#================================================= +# CHECK THE SYNTAX OF THE PATHS +#================================================= + +test -n "$old_path" || old_path="/" +test -n "$new_path" || new_path="/" +new_path=$(ynh_normalize_url_path $new_path) +old_path=$(ynh_normalize_url_path $old_path) + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + # Make a backup of the original nginx config file if modified + ynh_backup_if_checksum_is_different "$nginx_conf_path" + # Set global variables for nginx helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated nginx config + ynh_add_nginx_config +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum "$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum "/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# ... +#================================================= + +#================================================= +# GENERIC FINALISATION +#================================================= +# RELOAD NGINX +#================================================= + +systemctl reload nginx diff --git a/scripts/install b/scripts/install index 15ad98c..f6a7c7c 100644 --- a/scripts/install +++ b/scripts/install @@ -107,6 +107,27 @@ sudo rm jcameron-key.asc sudo apt-get update sudo apt-get install -y webmin +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +### `ynh_replace_string` is used to replace a string in a file. +### (It's compatible with sed regular expressions syntax) + +ynh_replace_string "port=10000" "port=$port" "/etc/webmin/miniserv.conf" +ynh_replace_string "listen=10000" "listen=$port" "/etc/webmin/miniserv.conf" + +#================================================= +# STORE THE CONFIG FILE CHECKSUM +#================================================= + +### `ynh_store_file_checksum` is used to store the checksum of a file. +### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`, +### you can make a backup of this file before modifying it again if the admin had modified it. + +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum "/etc/webmin/miniserv.conf" + #================================================= # SETUP SSOWAT #================================================= @@ -119,6 +140,6 @@ yunohost app addaccess --users=$admin $app # RELOAD NGINX AND START WEBMIN #================================================= systemctl enable webmin -systemctl start webmin +systemctl restart webmin sudo service nginx reload diff --git a/scripts/remove b/scripts/remove index cfcd355..15d3508 100644 --- a/scripts/remove +++ b/scripts/remove @@ -42,10 +42,8 @@ then yunohost firewall disallow TCP $port 2>&1 fi -adminuser=$(sudo yunohost app setting webmin admin_user) sudo apt-get remove --purge webmin sudo rm -r /etc/apt/sources.list.d/webmin.list -sudo rm -f /etc/nginx/conf.d/$domain.d/webmin.conf diff --git a/scripts/restore b/scripts/restore new file mode 100755 index 0000000..68fce10 --- /dev/null +++ b/scripts/restore @@ -0,0 +1,104 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + #### Remove this function if there's nothing to clean before calling the remove script. + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# LOAD 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) +port=$(ynh_app_setting_get $app port) + +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= + +ynh_webpath_available $domain $path_url \ + || ynh_die "Path not available: ${domain}${path_url}" + +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= + +ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" + +# FIND AND OPEN A PORT +#================================================= + +### Use these lines if you have to open a port for the application +### `ynh_find_port` will find the first available port starting from the given port. +### If you're not using these lines: +### - Remove the section "CLOSE A PORT" in the remove script + +yunohost firewall allow --no-upnp TCP $port 2>&1 + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= + +# Define and install dependencies +ynh_install_app_dependencies perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python + + + +sudo sh -c "echo 'deb http://download.webmin.com/download/repository sarge contrib' > /etc/apt/sources.list.d/webmin.list" +sudo sh -c "echo 'deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib' >> /etc/apt/sources.list.d/webmin.list" + + +sudo wget http://www.webmin.com/jcameron-key.asc +sudo apt-key add jcameron-key.asc +sudo rm jcameron-key.asc + +sudo apt-get update +sudo apt-get install -y webmin + +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +### `ynh_replace_string` is used to replace a string in a file. +### (It's compatible with sed regular expressions syntax) + +ynh_replace_string "port=10000" "port=$port" "/etc/webmin/miniserv.conf" +ynh_replace_string "listen=10000" "listen=$port" "/etc/webmin/miniserv.conf" + +#================================================= +# SETUP SSOWAT +#================================================= + +# Restrict access to admin only +yunohost app addaccess --users=$admin $app + + +#================================================= +# RELOAD NGINX AND START WEBMIN +#================================================= +systemctl enable webmin +systemctl restart webmin +sudo service nginx reload diff --git a/scripts/upgrade b/scripts/upgrade index 2d06fb5..e668050 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,6 +1,87 @@ #!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD 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) +port=$(ynh_app_setting_get $app port) + +#================================================= +# CHECK THE PATH +#================================================= + +# Normalize the URL path syntax +path_url=$(ynh_normalize_url_path $path_url) + +#================================================= +# NGINX CONFIGURATION +#================================================= + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# UPGRADE DEPENDENCIES +#================================================= + +ynh_install_app_dependencies perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python + +#================================================= +# SPECIFIC UPGRADE +#================================================= + +sudo sh -c "echo 'deb http://download.webmin.com/download/repository sarge contrib' > /etc/apt/sources.list.d/webmin.list" +sudo sh -c "echo 'deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib' >> /etc/apt/sources.list.d/webmin.list" + +sudo wget http://www.webmin.com/jcameron-key.asc +sudo apt-key add jcameron-key.asc +sudo rm jcameron-key.asc + sudo apt-get update sudo apt-get upgrade -sudo service nginx reload -sudo yunohost app ssowatconf + +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +### `ynh_replace_string` is used to replace a string in a file. +### (It's compatible with sed regular expressions syntax) + +ynh_replace_string "port=10000" "port=$port" "/etc/webmin/miniserv.conf" +ynh_replace_string "listen=10000" "listen=$port" "/etc/webmin/miniserv.conf" + +### Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script. +### 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 "/etc/webmin/miniserv.conf" +# Recalculate and store the checksum of the file for the next upgrade. +ynh_store_file_checksum "/etc/webmin/miniserv.conf" + +#================================================= +# SETUP SSOWAT +#================================================= + +# Restrict access to admin only +yunohost app addaccess --users=$admin $app + +#================================================= +# RELOAD NGINX AND START WEBMIN +#================================================= +systemctl enable webmin +systemctl restart webmin +sudo service nginx reload +