diff --git a/check_process b/check_process index 6589238..c9f0ce2 100644 --- a/check_process +++ b/check_process @@ -1,17 +1,12 @@ -# See here for more information -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) - admin="john" (USER) + domain="domain.tld" + path="/path" + admin="john" language="fr" - is_public=1 (PUBLIC|public=1|private=0) + is_public=1 password="pass" - port="666" (PORT) + port="666" ; Checks pkg_linter=1 setup_sub_dir=1 @@ -20,14 +15,15 @@ setup_private=1 setup_public=1 upgrade=1 + # 4.4~ynh1 + upgrade=1 from_commit=5cd502c98fdf4731938503541cf64a59aa43eda7 backup_restore=1 multi_instance=0 - incorrect_path=1 port_already_use=1 change_url=1 -;;; Levels -# https://framagit.org/Mickael-Martin/zabbix_ynh/blob/master/scripts/install#L156 - Level 8=auto ;;; Options Email= Notification=none +;;; Upgrade options + ; commit=5cd502c98fdf4731938503541cf64a59aa43eda7 + name=4.4~ynh1 diff --git a/doc/.gitkeep b/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..034fae1 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,13 @@ +* Any known limitations, constrains or stuff not working, such as (but not limited to): + * Configuration at install. SSO works. You can add your users in a group in Zabbix (for permissions/rights). + * Only Debian - Stretch 64b supported actually. + * Do not change the default admin user password. The user is disabled juste after the install but used to update templates. + * The Zabbix server port is not opened by default for external monitoring (active agent). + * A Yunohost template is imported and linked to the host "Zabbix-server" (127.0.0.1) for basic monitoring for YunoHost. + * If you want more information about Yunohost in the template, please open an issue on git. + +* Other infos that people should be aware of, such as: + * any specific step to perform after installing (such as manually finishing the install, specific admin credentials, ...) + * how to configure / administrate the application if it ain't obvious + * upgrade process / specificities / things to be aware of ? + * security considerations ? diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/hooks/post_user_create b/hooks/post_user_create index 925adeb..aaada9d 100644 --- a/hooks/post_user_create +++ b/hooks/post_user_create @@ -11,7 +11,7 @@ db_user=$(ynh_app_setting_get $app db_user) db_pwd=$(ynh_app_setting_get $app mysqlpwd) language=$(ynh_app_setting_set $app language) -if [ "$language" == "fr" ];then +if [ $language == "fr" ];then lang="fr_FR" else lang="en_GB" diff --git a/manifest.json b/manifest.json index 3ea3116..c7e20ae 100644 --- a/manifest.json +++ b/manifest.json @@ -8,20 +8,28 @@ }, "version": "4.4~ynh1", "url": "https://www.zabbix.com", - "license": " LGPL-2.0-or-later", + "upstream": { + "license": "LGPL-2.0-or-later", + "website": "https://example.com", + "demo": "https://demo.example.com", + "admindoc": "https://yunohost.org/packaging_apps", + "userdoc": "https://www.zabbix.com/manuals", + "code": "https://framagit.org/Mickael-Martin/zabbix_ynh" + }, + "license": "LGPL-2.0-or-later", "maintainer": { "name": "Mickael Martin", "email": "mickael@librement-votre.fr", "url": "http://www.librement-votre.fr" }, "requirements": { - "yunohost": ">= 3.8.1" + "yunohost": ">= 4.1.3" }, "multi_instance": false, "services": [ "nginx", "mysql", - "php7.0-fpm", + "php7.3-fpm", "snmpd" ], "arguments": { @@ -29,38 +37,22 @@ { "name": "domain", "type": "domain", - "ask": { - "en": "Choose a domain name for Zabbix", - "fr": "Choisissez un nom de domaine pour Zabbix" - }, "example": "example.com" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for Zabbix", - "fr": "Choisissez un chemin pour Zabbix" - }, "example": "/zabbix", "default": "/zabbix" }, { "name": "admin", "type": "user", - "ask": { - "en": "Choose an admin user", - "fr": "Choisissez l’administrateur" - }, "example": "mickael" }, { "name": "is_public", "type": "boolean", - "ask": { - "en": "Is it a public application?", - "fr": "Est-ce une application publique ?" - }, "help": { "en": "A public app doesn't need SSO auth : the auth page is opened for everyone", "fr": "Une application publique ne nécessite pas une authentification SSO : sa page d'authentication est ouverte au monde entier" @@ -69,7 +61,7 @@ }, { "name": "language", - "type": "string", + "type": "string", "ask": { "en": "Choose the application language", "fr": "Choisissez la langue de l'application" diff --git a/scripts/_common.sh b/scripts/_common.sh index d48999c..b42dec9 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,8 +4,13 @@ # COMMON VARIABLES #================================================= +# dependencies used by the app pkg_dependencies="libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 php7.3 php7.3-bcmath ttf-dejavu-core php7.3-bcmath patch smistrip unzip wget fping libcap2-bin libiksemel3 libopenipmi0 libpam-cap libsnmp-base libsnmp30 snmptrapd snmpd libjs-prototype jq zabbix-server-mysql zabbix-agent zabbix-frontend-php" +#================================================= +# PERSONAL HELPERS +#================================================= + #Zabbix part #===================GET GUEST DEFAULT USER STATE============== #return 0 if enable, else 1 @@ -163,7 +168,12 @@ check_proc_zabbixagent(){ } install_zabbix_repo(){ - ynh_install_extra_repo --repo="http://repo.zabbix.com/zabbix/4.4/debian $(lsb_release -sc) main" --key=https://repo.zabbix.com/zabbix-official-repo.key --priority=999 --name=zabbix + if dpkg --compare-versions $(cat /etc/debian_version) ge 11.0 + then + ynh_install_extra_repo --repo="http://repo.zabbix.com/zabbix/4.4/debian buster main" --key=https://repo.zabbix.com/zabbix-official-repo.key --priority=999 --name=zabbix + else + ynh_install_extra_repo --repo="http://repo.zabbix.com/zabbix/4.4/debian $(lsb_release -sc) main" --key=https://repo.zabbix.com/zabbix-official-repo.key --priority=999 --name=zabbix + fi } remove_zabbix_repo(){ @@ -203,7 +213,7 @@ convert_ZabbixDB(){ set_mediatype_default_yunohost(){ set -x if [ $($mysqlconn -BN -e "SELECT count(*) FROM media_type WHERE smtp_server LIKE 'mail.example.com' AND status=1;") -eq 1 ] ; then - $mysqlconn -BN -e "UPDATE media_type SET smtp_server = 'localhost', smtp_helo = '"$domain"', smtp_email = 'zabbix@"$domain"', smtp_port = '587', status=0 , smtp_security=1 WHERE smtp_server LIKE 'mail.example.com' AND status=1;" + $mysqlconn -BN -e "UPDATE media_type SET smtp_server = 'localhost', smtp_helo = '$domain', smtp_email = 'zabbix@$domain', smtp_port = '587', status=0 , smtp_security=1 WHERE smtp_server LIKE 'mail.example.com' AND status=1;" ynh_print_info "Default Media type added !" fi set +x diff --git a/scripts/backup b/scripts/backup index 0d2ea7f..67bd054 100644 --- a/scripts/backup +++ b/scripts/backup @@ -6,6 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -14,7 +15,6 @@ source /usr/share/yunohost/helpers #================================================= 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 @@ -23,58 +23,63 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_print_info --message="Loading installation settings..." -app="zabbix" - -final_path=$(ynh_app_setting_get $app final_path) -domain=$(ynh_app_setting_get $app domain) -db_name=$(ynh_app_setting_get $app db_name) -nonfree=$(ynh_app_setting_get $app nonfree) +app=$YNH_APP_INSTANCE_NAME +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +nonfree=$(ynh_app_setting_get --app=$app --key=nonfree) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP #================================================= -# BACKUP THE APP MAIN DIR -#================================================= - -#backup frontend config -ynh_print_info "Backup $final_path conf/zabbix.conf.php" -ynh_backup "$final_path/conf/zabbix.conf.php" -ynh_print_info "Backup /etc/zabbix/web" -ynh_backup "/etc/zabbix/web" -#ynh_print_info "Backup /etc/zabbix/web/init.zabbix.conf.php.sh" -#ynh_backup "/etc/zabbix/web/init.zabbix.conf.php.sh" -ynh_print_info "Backup /etc/apt/apt.conf.d/100update_force_init_zabbix_frontend_config" -ynh_backup "/etc/apt/apt.conf.d/100update_force_init_zabbix_frontend_config" - -#backup server confif -ynh_print_info "Backup /etc/zabbix/zabbix_server.conf" -ynh_backup "/etc/zabbix/zabbix_server.conf" - -#backup agent config -ynh_print_info "Backup /etc/zabbix/zabbix_agentd.conf" -ynh_backup "/etc/zabbix/zabbix_agentd.conf" -ynh_print_info "Backup /etc/zabbix/zabbix_agentd.d" -ynh_backup "/etc/zabbix/zabbix_agentd.d" - -#backup sudo file -ynh_print_info "Backup /etc/sudoers.d/zabbix" -ynh_backup "/etc/sudoers.d/zabbix" +ynh_print_info --message="Declaring files to be backed up..." #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= -ynh_print_info "Backup /etc/nginx/conf.d/$domain.d/$app.conf" -ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + #================================================= # BACKUP THE PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Backup /etc/php/7.0/fpm/pool.d/$app.conf" -ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf" + +ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + +#================================================= +# BACKUP VARIOUS FILES +#================================================= + +ynh_backup --src_path="$final_path/conf/zabbix.conf.php" + +ynh_backup --src_path="/etc/zabbix/web" + +#ynh_backup --src_path="/etc/zabbix/web/init.zabbix.conf.php.sh" + +ynh_backup --src_path="/etc/apt/apt.conf.d/100update_force_init_zabbix_frontend_config" + +#backup server confif +ynh_backup --src_path="/etc/zabbix/zabbix_server.conf" + +#backup agent config +ynh_backup --src_path="/etc/zabbix/zabbix_agentd.conf" +ynh_backup --src_path="/etc/zabbix/zabbix_agentd.d" + +#backup sudo file +ynh_backup --src_path="/etc/sudoers.d/zabbix" #================================================= # BACKUP THE MYSQL DATABASE #================================================= -ynh_print_info "Backup Zabbix database" -ynh_mysql_dump_db "$db_name" > db.sql \ No newline at end of file +ynh_print_info --message="Backing up the MySQL database..." + +ynh_mysql_dump_db --database="$db_name" > db.sql + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url index e727aa9..539341e 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -30,7 +30,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get $app final_path) # Add settings here as needed by your application -#db_name=$(ynh_app_setting_get "$app" db_name) +#db_name=$(ynh_app_setting_get $app db_name) #db_pwd=$(ynh_app_setting_get $app db_pwd) #================================================= diff --git a/scripts/install b/scripts/install index 00ebbae..94e6e73 100644 --- a/scripts/install +++ b/scripts/install @@ -1,5 +1,6 @@ #!/bin/bash -##================================================= + +#================================================= # GENERIC START #================================================= # IMPORT GENERIC HELPERS @@ -19,79 +20,42 @@ ynh_abort_if_errors # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -export domain="$YNH_APP_ARG_DOMAIN" -export path_url="$YNH_APP_ARG_PATH" -admin="$YNH_APP_ARG_ADMIN" -is_public="$YNH_APP_ARG_IS_PUBLIC" -language="$YNH_APP_ARG_LANGUAGE" +export domain=$YNH_APP_ARG_DOMAIN +export path_url=$YNH_APP_ARG_PATH +admin=$YNH_APP_ARG_ADMIN +is_public=$YNH_APP_ARG_IS_PUBLIC +language=$YNH_APP_ARG_LANGUAGE -### If it's a multi-instance app, meaning it can be installed several times independently -### The id of the app as stated in the manifest is available as $YNH_APP_ID -### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) -### The app instance name is available as $YNH_APP_INSTANCE_NAME -### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample -### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 -### - ynhexample__{N} for the subsequent installations, with N=3,4, ... -### The app instance name is probably what interests you most, since this is -### guaranteed to be unique. This is a good unique identifier to define installation path, -### db names, ... -app="$YNH_APP_INSTANCE_NAME" +app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= +ynh_script_progression --message="Validating installation parameters..." -### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". -### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" -final_path=/var/www/zabbix -test ! -e "$final_path" || ynh_die "This path already contains a folder" +final_path=/var/www/$app +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" -# Check web path availability -ynh_webpath_available --domain="$domain" --path_url="$path_url" # Register (book) web path -ynh_webpath_register --app="$app" --domain="$domain" --path_url="$path_url" +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -ynh_script_progression --message="Get infos from manifest" -w 1 +ynh_script_progression --message="Storing installation settings..." -ynh_app_setting_set "$app" domain "$domain" -ynh_app_setting_set "$app" path "$path_url" -ynh_app_setting_set "$app" admin "$admin" -ynh_app_setting_set "$app" is_public "$is_public" -ynh_app_setting_set "$app" language "$language" +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url +ynh_app_setting_set --app=$app --key=admin --value=$admin +ynh_app_setting_set --app=$app --key=is_public --value=$is_public +ynh_app_setting_set --app=$app --key=language --value=$language #================================================= # STANDARD MODIFICATIONS -#================================================= -# 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 - -### Zabbix server is not opened by default for external usage. -### if you want use zabbix server with external agent (in active mode), setup the listen address in server configuration and open port on firewall via the cmd yunohost firewall - -# Find a free port -#port=$(ynh_find_port 8095) -# Open this port -#yunohost firewall allow --no-upnp TCP $port 2>&1 -#ynh_app_setting_set $app port $port - #================================================= # INSTALL DEPENDENCIES #================================================= - -### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. -### Those deb packages will be installed as dependencies of this package. -### If you're not using this helper: -### - Remove the section "REMOVE DEPENDENCIES" in the remove script -### - As well as the section "REINSTALL DEPENDENCIES" in the restore script -### - And the section "UPGRADE DEPENDENCIES" in the upgrade script +ynh_script_progression --message="Installing dependencies..." pid=$(pgrep -f '/usr/bin/python3 /usr/bin/unattended-upgrade --download-only' || true) if [ ! -z "$pid" ] ;then @@ -116,31 +80,50 @@ dpkg -i --force-confmiss /var/cache/apt/archives/zabbix-server-mysql* ynh_replace_string --match_string="# fr_FR.UTF-8 UTF-8" --replace_string="fr_FR.UTF-8 UTF-8" --target_file=/etc/locale.gen locale-gen -ln -s /usr/share/zabbix "$final_path" +ln -s /usr/share/zabbix $final_path if [ -f "$final_path/conf/zabbix.conf.php" ];then - ynh_secure_remove "$final_path/conf/zabbix.conf.php" + ynh_secure_remove --file="$final_path/conf/zabbix.conf.php" fi #================================================= # CREATE A MYSQL DATABASE #================================================= -ynh_script_progression --message="Creation of database " -w 10 +ynh_script_progression --message="Creating a MySQL database..." -w 10 -### Use these lines if you need a database for the application. -### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. -### The password will be stored as 'mysqlpwd' into the app settings, -### and will be available as $db_pwd -### If you're not using these lines: -### - Remove the section "BACKUP THE MYSQL DATABASE" in the backup script -### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script -### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script +db_name=$(ynh_sanitize_dbid --db_name=$app) +db_user=$db_name +ynh_app_setting_set --app=$app --key=db_name --value=$db_name +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." + +ynh_app_setting_set --app=$app --key=final_path --value=$final_path + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring NGINX web server..." + +# Create a dedicated NGINX config +ynh_add_nginx_config + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring PHP-FPM..." + +# Create a dedicated PHP-FPM config +ynh_add_fpm_config + +#================================================= +# SPECIFIC SETUP +#================================================= +# DATABASE STUFF +#================================================= -declare db_pwd -db_name=$(ynh_sanitize_dbid "$app") -db_user="$db_name" -ynh_app_setting_set "$app" db_name "$db_name" -ynh_app_setting_set "$app" db_user "$db_user" -ynh_mysql_setup_db "$db_user" "$db_name" export mysqlconn="mysql -u$db_user -p$db_pwd $db_name" mysql --user=$db_user --password=$db_pwd --database=zabbix -e "ALTER DATABASE $db_name CHARACTER SET utf8 COLLATE utf8_general_ci;" @@ -153,15 +136,15 @@ convert_ZabbixDB #sso integration $mysqlconn -e "UPDATE \`config\` SET \`http_auth_enabled\` = '1', \`http_login_form\` = '1' WHERE \`config\`.\`configid\` = 1;" -if [ "$language" == "fr" ];then +if [ $language == "fr" ];then lang="fr_FR" else lang="en_GB" fi #admin creation -surname=$(ynh_user_get_info "$admin" lastname) -name=$(ynh_user_get_info "$admin" firstname) +surname=$(ynh_user_get_info --username=$admin --key=lastname) +name=$(ynh_user_get_info --username=$admin --key=firstname) $mysqlconn -e "INSERT INTO \`users\` (\`userid\`,\`alias\`, \`name\`, \`surname\`, \`passwd\`, \`url\`, \`autologin\`, \`autologout\`, \`lang\`, \`refresh\`, \`type\`, \`theme\`, \`attempt_failed\`, \`attempt_ip\`, \`attempt_clock\`, \`rows_per_page\`) VALUES (3,'$admin', '$admin', '$admin', '5fce1b3e34b520afeffb37ce08c7cd66', '', 0, '0', '$lang', '30s', 3, 'default', 0, '', 0, 50);" $mysqlconn -e "INSERT INTO \`users_groups\` (\`id\`, \`usrgrpid\`, \`userid\`) VALUES (5, 7, 3);" @@ -170,7 +153,7 @@ $mysqlconn -e "INSERT INTO \`users_groups\` (\`id\`, \`usrgrpid\`, \`userid\`) V i=4 for user in $(ynh_user_list); do - if [ "$user" != "$admin" ];then + if [ "$user" != $admin ];then surname=$(ynh_user_get_info "$user" lastname) name=$(ynh_user_get_info "$user" firstname) $mysqlconn -e "INSERT INTO \`users\` (\`userid\`, \`alias\`, \`name\`, \`surname\`, \`passwd\`, \`url\`, \`autologin\`, \`autologout\`, \`lang\`, \`refresh\`, \`type\`, \`theme\`, \`attempt_failed\`, \`attempt_ip\`, \`attempt_clock\`, \`rows_per_page\`) VALUES ($i,'$user', '$name', '$surname', '5fce1b3e34b520afeffb37ce08c7cd66', '', 0, '0', '$lang', '30s', 1, 'default', 0, '', 0, 50);" @@ -183,107 +166,9 @@ disable_guest_user set_mediatype_default_yunohost #================================================= -# DOWNLOAD, CHECK AND UNPACK SOURCE +# ADD A CONFIGURATION #================================================= - -### `ynh_setup_source` is used to install an app from a zip or tar.gz file, -### downloaded from an upstream source, like a git repository. -### `ynh_setup_source` use the file conf/app.src - -ynh_app_setting_set "$app" final_path "$final_path" -# Download, check integrity, uncompress and patch the source from app.src -#ynh_setup_source "$final_path" - -ynh_script_progression --message="Generate web config" -w 5 - -#================================================= -# NGINX CONFIGURATION -#================================================= - -### `ynh_add_nginx_config` will use the file conf/nginx.conf - -# Create a dedicated nginx config -ynh_add_nginx_config - -#================================================= -# CREATE DEDICATED USER -#================================================= - -# Create a system user -#ynh_system_user_create $app -# -### zabbix user created in zabbix server dpkg install - -#================================================= -# PHP-FPM CONFIGURATION -#================================================= - -### `ynh_add_fpm_config` is used to set up a PHP config. -### You can remove it if your app doesn't use PHP. -### `ynh_add_fpm_config` will use the files conf/php-fpm.conf and conf/php-fpm.ini -### If you're not using these lines: -### - You can remove these files in conf/. -### - Remove the section "BACKUP THE PHP-FPM CONFIGURATION" in the backup script -### - Remove also the section "REMOVE PHP-FPM CONFIGURATION" in the remove script -### - As well as the section "RESTORE THE PHP-FPM CONFIGURATION" in the restore script -### With the reload at the end of the script. -### - And the section "PHP-FPM CONFIGURATION" in the upgrade script - -# Create a dedicated php-fpm config -ynh_add_fpm_config - -#================================================= -# SPECIFIC SETUP -#================================================= -# ... -#================================================= - -#================================================= -# SETUP SYSTEMD -#================================================= - -### `ynh_systemd_config` is used to configure a systemd script for an app. -### It can be used for apps that use sysvinit (with adaptation) or systemd. -### Have a look at the app to be sure this app needs a systemd script. -### `ynh_systemd_config` will use the file conf/systemd.service -### If you're not using these lines: -### - You can remove those files in conf/. -### - Remove the section "BACKUP SYSTEMD" in the backup script -### - Remove also the section "STOP AND REMOVE SERVICE" in the remove script -### - As well as the section "RESTORE SYSTEMD" in the restore script -### - And the section "SETUP SYSTEMD" in the upgrade script - -# Create a dedicated systemd config -#ynh_add_systemd_config - -### Systemd service created when dpkg install - -#================================================= -# SETUP APPLICATION WITH CURL -#================================================= - -### Use these lines only if the app installation needs to be finalized through -### web forms. We generally don't want to ask the final user, -### so we're going to use curl to automatically fill the fields and submit the -### forms. - -# Reload SSOwat config -yunohost app ssowatconf - -# Reload Nginx -systemctl reload nginx - -# Installation with curl -#ynh_local_curl "/INSTALL_PATH" "key1=value1" "key2=value2" "key3=value3" - -#================================================= -# 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_script_progression -m "Generate zabbix config files" -w 5 +ynh_script_progression --message="Adding a configuration file..." confServerPath=$(find /var/cache/yunohost/ -name "usr_share_zabbix_conf_zabbix.conf.php") cp --remove-destination "$confServerPath" /usr/share/zabbix/conf/zabbix.conf.php @@ -291,7 +176,7 @@ ynh_replace_string --match_string="db_name" --replace_string="$db_name" --target ynh_replace_string --match_string="db_user" --replace_string="$db_user" --target_file=/usr/share/zabbix/conf/zabbix.conf.php ynh_replace_string --match_string="db_pwd" --replace_string="$db_pwd" --target_file=/usr/share/zabbix/conf/zabbix.conf.php -chown -R www-data. /usr/share/zabbix +chown -R www-data /usr/share/zabbix ynh_replace_string --match_string="DBName=zabbix" --replace_string="DBName=$db_name" --target_file=/etc/zabbix/zabbix_server.conf ynh_replace_string --match_string="DBUser=zabbix" --replace_string="DBUser=$db_user" --target_file=/etc/zabbix/zabbix_server.conf @@ -304,116 +189,52 @@ systemctl enable zabbix-server --quiet && systemctl restart zabbix-server #================================================= # INSTALL hook to verify if conf file is broken (after an update for example) #================================================= + update_initZabbixConf -#================================================= -# 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 "$final_path/CONFIG_FILE" - -#================================================= -# GENERIC FINALIZATION -#================================================= -# SECURE FILES AND DIRECTORIES -#================================================= - -### For security reason, any app should set the permissions to root: before anything else. -### Then, if write authorization is needed, any access should be given only to directories -### that really need such authorization. - -# Set permissions to app files -#chown -R root: $final_path - -#================================================= -# SETUP LOGROTATE -#================================================= - -### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. -### Use this helper only if there is effectively a log file for this app. -### If you're not using this helper: -### - Remove the section "BACKUP LOGROTATE" in the backup script -### - Remove also the section "REMOVE LOGROTATE CONFIGURATION" in the remove script -### - As well as the section "RESTORE THE LOGROTATE CONFIGURATION" in the restore script -### - And the section "SETUP LOGROTATE" in the upgrade script - -# Use logrotate to manage application logfile(s) -#native logrotate because install officials packages. -#ynh_use_logrotate - -#================================================= -# ADVERTISE SERVICE IN ADMIN PANEL -#================================================= - -### `yunohost service add` is a CLI yunohost command to add a service in the admin panel. -### You'll find the service in the 'services' section of YunoHost admin panel. -### This CLI command would be useless if the app does not have any services (systemd or sysvinit) -### If you're not using these lines: -### - You can remove these files in conf/. -### - Remove the section "REMOVE SERVICE FROM ADMIN PANEL" in the remove script -### - As well as the section ADVERTISE SERVICE IN ADMIN PANEL" in the restore script - -yunohost service add snmpd -d "Management of SNMP Daemon" -yunohost service add zabbix-server -d "Management Zabbix server daemon : Collect, agregate, compute and notify" -yunohost service add zabbix-agent -d "Management Zabbix agent daemon : send informations about this host to the server" - -# Make app public if for importing template -# unprotected_uris allows SSO credentials to be passed anyway -#ynh_app_setting_set "$app" unprotected_uris "/" - #================================================= # RELOAD NGINX AND PHP-FPM #================================================= +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." -systemctl reload nginx -systemctl reload php7.3-fpm - -# Reload SSOwat config -yunohost app ssowatconf +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload #================================================= # Import Yunohost template #================================================= -ynh_script_progression -m "Importing last template Yunohost in Zabbix" -w 5 +ynh_script_progression --message="Importing last template Yunohost in Zabbix" -w 5 + import_template #================================================= # Link Yunohost template to the ZAbbix Server Host #================================================= -ynh_script_progression -m "Importing last template Yunohost in Zabbix" -w 5 +ynh_script_progression --message="Importing last template Yunohost in Zabbix" -w 5 + link_template #================================================= # disable default admin #================================================= + disable_admin_user #================================================= -# SETUP SSOWAT +# GENERIC FINALIZATION #================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." -# Make app public if necessary -if [ $is_public -eq 1 ] -then - # Everyone can access the app. - # The "main" permission is automatically created before the install script. - ynh_permission_update --permission "main" --add "visitors" -fi +yunohost service add snmpd -d "Management of SNMP Daemon" +yunohost service add zabbix-server -d "Management Zabbix server daemon : Collect, agregate, compute and notify" +yunohost service add zabbix-agent -d "Management Zabbix agent daemon : send informations about this host to the server" #================================================= -# RELOAD NGINX AND PHP-FPM +# START SYSTEMD SERVICE #================================================= - -systemctl reload nginx -systemctl reload php7.3-fpm - -# Reload SSOwat config -yunohost app ssowatconf +ynh_script_progression --message="Starting a systemd service..." #test if zabbix server is started check_proc_zabbixagent @@ -421,8 +242,29 @@ check_proc_zabbixagent #test if zabbix agent is started check_proc_zabbixserver +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring permissions..." + +# Make app public if necessary +if [ $is_public -eq 1 ] +then + # Everyone can access the app. + # The "main" permission is automatically created before the install script. + ynh_permission_update --permission="main" --add="visitors" +fi + +#================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." + +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload + #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation of $app completed" --last \ No newline at end of file +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove index a1ac0e5..c4ec9e7 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,34 +12,43 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get "$app" domain) -port=$(ynh_app_setting_get "$app" port) -db_name=$(ynh_app_setting_get "$app" db_name) +domain=$(ynh_app_setting_get --app=$app --key=domain) +port=$(ynh_app_setting_get --app=$app --key=port) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_user=$db_name -#final_path=$(ynh_app_setting_get "$app" final_path) #not used #================================================= -# REMOVE SERVICE FROM ADMIN PANEL +# STANDARD REMOVE #================================================= -# Remove a service from the admin panel, added by `yunohost service add` - -yunohost service remove snmpd -yunohost service remove zabbix-server -yunohost service remove zabbix-agent - -#================================================= -# REMOVE PHP-FPM CONFIGURATION +# REMOVE SERVICE INTEGRATION IN YUNOHOST #================================================= -# Remove the dedicated php-fpm config -ynh_remove_fpm_config +if ynh_exec_warn_less yunohost service status snmpd >/dev/null +then + ynh_script_progression --message="Removing snmpd service integration..." + yunohost service remove snmpd +fi + +if ynh_exec_warn_less yunohost service status zabbix-server >/dev/null +then + ynh_script_progression --message="Removing zabbix-server service integration..." + yunohost service remove zabbix-server +fi + +if ynh_exec_warn_less yunohost service status zabbix-agent >/dev/null +then + ynh_script_progression --message="Removing zabbix-agent service integration..." + yunohost service remove zabbix-agent +fi #================================================= -# REMOVE DEPENDENCIES +# STOP AND REMOVE SERVICE #================================================= +ynh_script_progression --message="Stopping and removing the systemd service..." timeout 5 systemctl stop zabbix-server || killall zabbix_server systemctl disable zabbix-server --quiet @@ -49,10 +58,24 @@ timeout 5 systemctl stop zabbix-agent || killall zabbix_agentd systemctl disable zabbix-agent --quiet killall zabbix_agentd +#================================================= +# REMOVE THE MYSQL DATABASE +#================================================= +ynh_script_progression --message="Removing the MySQL database..." + +# Remove a database if it exists, along with the associated user +ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name + +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." + #Remove config file detection delete_initZabbixConf DEBIAN_FRONTEND=noninteractive apt-get purge zabbix-release -y +# Remove metapackage and its dependencies ynh_remove_app_dependencies #force removing if ynh_remove_app_dependencies not work (old zabbix version) @@ -61,23 +84,26 @@ do DEBIAN_FRONTEND=noninteractive apt-get purge --allow-change-held-packages "$zabbix_pkg" -y done -#================================================= -# REMOVE THE MYSQL DATABASE -#================================================= - -# Remove a database if it exists, along with the associated user -ynh_mysql_remove_db "$db_user" "$db_name" - #================================================= # REMOVE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Removing NGINX web server configuration..." -# Remove the dedicated nginx config +# Remove the dedicated NGINX config ynh_remove_nginx_config +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Removing PHP-FPM configuration..." + +# Remove the dedicated PHP-FPM config +ynh_remove_fpm_config + #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= +ynh_script_progression --message="Removing logrotate configuration..." # Remove the app-specific logrotate config ynh_remove_logrotate @@ -88,37 +114,39 @@ ynh_remove_logrotate if yunohost firewall list | grep -q "\- $port$" then - echo "Close port $port" >&2 - yunohost firewall disallow TCP "$port" 2>&1 + ynh_script_progression --message="Closing port $port..." + ynh_exec_warn_less yunohost firewall disallow TCP $port fi #================================================= # SPECIFIC REMOVE #================================================= -# REMOVE THE CRON FILE +# REMOVE VARIOUS FILES #================================================= +ynh_script_progression --message="Removing various files..." remove_zabbix_repo -if [ -d /var/www/zabbix ] ;then ynh_secure_remove /var/www/zabbix;fi +if [ -d /var/www/zabbix ] ;then ynh_secure_remove --file="/var/www/zabbix";fi # Remove a directory securely -if [ -d /etc/zabbix ] ;then ynh_secure_remove "/etc/zabbix";fi +if [ -d /etc/zabbix ] ;then ynh_secure_remove --file="/etc/zabbix";fi # Remove the log files -if [ -d /var/log/zabbix ] ;then ynh_secure_remove "/var/log/zabbix";fi +if [ -d /var/log/zabbix ] ;then ynh_secure_remove --file="/var/log/zabbix";fi # Remove the pid/socket files -if [ -d /run/zabbix ] ;then ynh_secure_remove "/run/zabbix";fi +if [ -d /run/zabbix ] ;then ynh_secure_remove --file="/run/zabbix";fi # Remove the sudoers file -if [ -f /etc/sudoers.d/zabbix ] ;then ynh_secure_remove "/etc/sudoers.d/zabbix";fi +if [ -f /etc/sudoers.d/zabbix ] ;then ynh_secure_remove --file="/etc/sudoers.d/zabbix";fi #REMOVE NONFREE PART PATCH IF NEEDED (snmp-mibs-downloader (non-free) installed in version 1) nonfreepackagelist=$(dpkg-query -W -f='${Section}\t${Package}\n' | grep ^non-free) + if [ $(echo $nonfreepackagelist | wc -l) -eq 1 ] && [ $(echo $nonfreepackagelist | grep -c "snmp-mibs-downloader") -eq 1 ] ;then - ynh_print_info "Removing snmp-mibs-downloader (non-free package)" + ynh_print_info --message="Removing snmp-mibs-downloader (non-free package)" cp /var/lib/dpkg/status{,.$(date "+%m%d%y")} ynh_replace_string --match_string=" snmp-mibs-downloader," --replace_string="" --target_file=/var/lib/dpkg/status DEBIAN_FRONTEND=noninteractive apt purge snmp-mibs-downloader -y @@ -133,6 +161,13 @@ fi #================================================= # REMOVE DEDICATED USER #================================================= +ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user ynh_system_user_delete zabbix + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 1fb9ff3..f969d89 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,10 +1,12 @@ #!/bin/bash + #================================================= # GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -15,46 +17,57 @@ source /usr/share/yunohost/helpers # Exit if an error occurs during the execution of the script ynh_abort_if_errors -### If it's a multi-instance app, meaning it can be installed several times independently -### The id of the app as stated in the manifest is available as $YNH_APP_ID -### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) -### The app instance name is available as $YNH_APP_INSTANCE_NAME -### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample -### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 -### - ynhexample__{N} for the subsequent installations, with N=3,4, ... -### The app instance name is probably what interests you most, since this is -### guaranteed to be unique. This is a good unique identifier to define installation path, -### db names, ... -app="zabbix" -final_path="/var/www/zabbix" #================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +# LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." -### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". -### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" -ynh_secure_remove $final_path +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +nonfree=$(ynh_app_setting_get --app=$app --key=nonfree) #================================================= -# STORE SETTINGS FROM MANIFEST +# CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_script_progression --message="Validating restoration parameters..." -domain=$(ynh_app_setting_get $app domain) -#path_url=$(ynh_app_setting_get $app path) #not used -#admin=$(ynh_app_setting_get $app admin) #not used -is_public=$(ynh_app_setting_get $app is_public) -#language=$(ynh_app_setting_get $app language) #not used -nonfree=$(ynh_app_setting_get $app nonfree) +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" +ynh_secure_remove --file=$final_path + +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the PHP-FPM configuration..." + +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= -# INSTALL DEPENDENCIES +# SPECIFIC RESTORATION #================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." -ynh_print_info "Install Zabbix repository" +ynh_print_info --message="Install Zabbix repository" install_zabbix_repo -ynh_print_info "Update and install dependencies" +ynh_print_info --message="Update and install dependencies" ynh_package_update ynh_install_app_dependencies $pkg_dependencies DEBIAN_FRONTEND=noninteractive apt-mark hold zabbix-server-mysql zabbix-frontend-php @@ -63,108 +76,80 @@ ynh_replace_string --match_string="# fr_FR.UTF-8 UTF-8" --replace_string="fr_FR. locale-gen ln -s /usr/share/zabbix /var/www/zabbix -ynh_secure_remove $final_path/conf/zabbix.conf.php - -ynh_app_setting_set $app final_path $final_path +ynh_secure_remove --file="$final_path/conf/zabbix.conf.php" #================================================= -# NGINX CONFIGURATION +# RESTORE THE MYSQL DATABASE #================================================= +ynh_script_progression --message="Restoring the MySQL database..." -### `ynh_add_nginx_config` will use the file conf/nginx.conf - -# Create a dedicated nginx config - -ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" +db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd +convert_ZabbixDB +ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql #================================================= -# PHP-FPM CONFIGURATION +# RESTORE VARIOUS FILES #================================================= - -ynh_restore_file "/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_script_progression --message="Restoring various files..." # Restore sudo file ynh_restore_file "/etc/sudoers.d/zabbix" -#================================================= -# Restore db -#================================================= +ynh_restore_file --origin_path="/usr/share/zabbix/conf/zabbix.conf.php" -db_name=$(ynh_app_setting_get $app db_name) -db_user=$(ynh_app_setting_get $app db_user) -db_pwd=$(ynh_app_setting_get $app mysqlpwd) +chown -R www-data /usr/share/zabbix -ynh_mysql_setup_db "$db_user" "$db_name" "$db_pwd" -convert_ZabbixDB -ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_name" < ./db.sql - - -#================================================= -# Restore configs files -#================================================= - -### `ynh_replace_string` is used to replace a string in a file. -### (It's compatible with sed regular expressions syntax) - -ynh_restore_file "/usr/share/zabbix/conf/zabbix.conf.php" - -chown -R www-data. /usr/share/zabbix - -ynh_restore_file "/etc/zabbix" +ynh_restore_file --origin_path="/etc/zabbix" ls -Rail "/etc/zabbix" -#ynh_restore_file "/etc/zabbix/web" -#ynh_restore_file "/etc/zabbix/web/init.zabbix.conf.php.sh" -ynh_restore_file "/etc/apt/apt.conf.d/100update_force_init_zabbix_frontend_config" +#ynh_restore_file --origin_path="/etc/zabbix/web" +#ynh_restore_file --origin_path="/etc/zabbix/web/init.zabbix.conf.php.sh" +ynh_restore_file --origin_path="/etc/apt/apt.conf.d/100update_force_init_zabbix_frontend_config" if [ ! -L /etc/zabbix/zabbix_agentd.d ];then ln -s /etc/zabbix/zabbix_agentd.conf.d /etc/zabbix/zabbix_agentd.d fi + +#================================================= +# RESTORE SYSTEMD +#================================================= +ynh_script_progression --message="Restoring the systemd configuration..." + systemctl enable --quiet zabbix-agent && systemctl restart zabbix-agent change_timeoutAgent systemctl enable --quiet zabbix-server && systemctl restart zabbix-server +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + yunohost service add snmpd -d "Management of SNMP Daemon" yunohost service add zabbix-server -d "Management Zabbix server daemon : Collect, agregate, compute and notify" yunohost service add zabbix-agent -d "Management Zabbix agent daemon : send informations about this host to the server" #================================================= -# SETUP LOGROTATE +# START SYSTEMD SERVICE #================================================= - -### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. -### Use this helper only if there is effectively a log file for this app. -### If you're not using this helper: -### - Remove the section "BACKUP LOGROTATE" in the backup script -### - Remove also the section "REMOVE LOGROTATE CONFIGURATION" in the remove script -### - As well as the section "RESTORE THE LOGROTATE CONFIGURATION" in the restore script -### - And the section "SETUP LOGROTATE" in the upgrade script - -# Use logrotate to manage application logfile(s) -#ynh_use_logrotate -#no need, use native logrotate in zabbix packages - -#================================================= -# SETUP SSOWAT -#================================================= - -# 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 -#================================================= - -systemctl reload nginx -systemctl reload php7.0-fpm - -# Reload SSOwat config -yunohost app ssowatconf +ynh_script_progression --message="Starting a systemd service..." #test if zabbix server is started check_proc_zabbixagent #test if zabbix agent is started check_proc_zabbixserver + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." + +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index a6351f3..8d91ed4 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,52 +12,77 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME trustedversion="4.4-1+stretch" forceupdate=0 -export domain=$(ynh_app_setting_get "$app" domain) -export path_url=$(ynh_app_setting_get "$app" path) -#admin=$(ynh_app_setting_get "$app" admin) #not used -is_public=$(ynh_app_setting_get "$app" is_public) -final_path=$(ynh_app_setting_get "$app" final_path) -#language=$(ynh_app_setting_get "$app" language) #not used -db_name=$(ynh_app_setting_get "$app" db_name) -db_user=$(ynh_app_setting_get "$app" db_user) -db_pwd=$(ynh_app_setting_get "$app" mysqlpwd) +export domain=$(ynh_app_setting_get --app=$app --key=domain) +export path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$(ynh_app_setting_get --app=$app --key=db_user) +db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) +#================================================= +# CHECK VERSION +#================================================= +ynh_script_progression --message="Checking version..." + +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="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 + +#================================================= +# STANDARD UPGRADE STEPS #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= +ynh_script_progression --message="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" +# Cleaning legacy permissions +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all fi export mysqlconn="mysql -u$db_user -p$db_pwd $db_name" +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." + +# Create a dedicated NGINX config +ynh_add_nginx_config + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading PHP-FPM configuration..." + +# Create a dedicated PHP-FPM config +ynh_add_fpm_config + +#================================================= +# SPECIFIC UPGRADE #================================================= # DISABLED SSOWAT #================================================= ynh_print_info "disable SSOWAT temporaly" -ynh_app_setting_set "$app" unprotected_uris "/" +ynh_app_setting_set $app unprotected_uris "/" systemctl reload nginx yunohost app ssowatconf @@ -109,9 +134,6 @@ if [ ! -z "$(yunohost service status | grep zabbix-client)" ];then yunohost service remove zabbix-client fi -#================================================= -# STANDARD UPGRADE STEPS -#================================================= #REMOVE DUPLICATE LOG ENTRY IN LOGROTATE PATCH IF NEEDED ynh_remove_logrotate @@ -185,25 +207,6 @@ convert_ZabbixDB #================================================= set_mediatype_default_yunohost -#================================================= -# Update php-fpm confi -#================================================= -ynh_print_info "Update php-fpm config" -# Remove the dedicated php-fpm config -ynh_remove_fpm_config -# Create a dedicated php-fpm config -ynh_add_fpm_config - -#================================================= -# Update nginx config -#================================================= -ynh_print_info "Update nginx config" -# Remove the dedicated nginx config -ynh_remove_nginx_config -# Create a dedicated nginx config -ynh_add_nginx_config - - #================================================= # RE-ENABLE SSOWAT #================================================= @@ -212,11 +215,20 @@ ynh_print_info "re-enable SSOWAT" if [ $is_public -eq 0 ] then # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_delete "$app" unprotected_uris + ynh_app_setting_delete $app unprotected_uris else - ynh_app_setting_set "$app" unprotected_uris "/" + ynh_app_setting_set $app unprotected_uris "/" fi -ynh_add_nginx_config -systemctl reload nginx -yunohost app ssowatconf +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed"