diff --git a/manifest.json b/manifest.json index 3ea3116..0e408d9 100644 --- a/manifest.json +++ b/manifest.json @@ -15,61 +15,40 @@ "url": "http://www.librement-votre.fr" }, "requirements": { - "yunohost": ">= 3.8.1" + "yunohost": ">= 4.1.3" }, "multi_instance": false, "services": [ "nginx", - "mysql", - "php7.0-fpm", - "snmpd" + "php7.3-fpm", + "mysql" ], "arguments": { "install" : [ { "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" + "example": "johndoe" }, { "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" - }, "default": false }, { "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..d0e917a 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 @@ -35,27 +40,27 @@ disable_admin_user(){ lastid=$($mysqlconn -BN -e "SELECT max(id) from \`users_groups\`") lastid=$((lastid + 1 )) $mysqlconn -e "INSERT INTO \`users_groups\` (\`id\` , \`usrgrpid\`, \`userid\`) VALUES ($lastid ,9, 1);" - ynh_print_info "Default admin disabled" + ynh_print_info --message="Default admin disabled" else - ynh_print_info "Default admin already disabled" + ynh_print_info --message="Default admin already disabled" fi } enable_admin_user(){ if [ $(get_state_admin_user) = "1" ] ;then - ynh_print_info "Enable default admin" + ynh_print_info --message="Enable default admin" #enable default admin temporaly $mysqlconn -e "DELETE FROM users_groups where usrgrpid=9 and userid=1;" - ynh_print_info "Default admin enabled" + ynh_print_info --message="Default admin enabled" else - ynh_print_info "Default admin already enable" + ynh_print_info --message="Default admin already enable" fi } import_template(){ - ynh_print_info "Import yunohost template" + ynh_print_info --message="Import yunohost template" zabbixFullpath=https://$domain$path_url localpath=$(find /var/cache/yunohost/ -name "Template_Yunohost.xml") sudoUserPpath=$(find /var/cache/yunohost/ -name "etc_sudoers.d_zabbix") @@ -119,7 +124,7 @@ import_template(){ | grep -c "Imported successfully") if [ "$importState" -eq "1" ];then - ynh_print_info "Template Yunohost imported !" + ynh_print_info --message="Template Yunohost imported !" else ynh_print_warn "Template Yunohost not imported !" fi @@ -135,7 +140,7 @@ link_template(){ zabbixTemplateID=$(curl --noproxy $domain -k -s --resolve $domain:443:127.0.0.1 --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","method":"template.get","params":{"filter":{"host":["Template Yunohost"]}},"auth":"'"$tokenapi"'","id":1}' "${zabbixFullpath}/api_jsonrpc.php" | jq -r '.result[0].templateid') applyTemplate=$(curl --noproxy $domain -k -s --resolve $domain:443:127.0.0.1 --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","method":"host.massadd","params":{"hosts":[{"hostid":"'"$zabbixHostID"'"}],"templates":[{"templateid":"'"$zabbixTemplateID"'"}]},"auth":"'"$tokenapi"'","id":1}' "${zabbixFullpath}/api_jsonrpc.php" | jq -r '.result.hostids[]') if [ "$applyTemplate" -eq "$zabbixHostID" ];then - ynh_print_info "Template Yunohost linked to Zabbix server !" + ynh_print_info --message="Template Yunohost linked to Zabbix server !" else ynh_print_warn "Template Yunohost no linked to Zabbix server !" fi @@ -145,7 +150,7 @@ link_template(){ check_proc_zabbixserver(){ pgrep zabbix_server >/dev/null if [ $? -eq 0 ];then - ynh_print_info "zabbix server is started !" + ynh_print_info --message="zabbix server is started !" else ynh_print_err "Zabbix Server not started, try to start it with the yunohost interface." ynh_print_err "If Zabbix Server can't start, please open a issue on https://github.com/YunoHost-Apps/zabbix_ynh/issues" @@ -155,7 +160,7 @@ check_proc_zabbixserver(){ check_proc_zabbixagent(){ pgrep zabbix_agentd >/dev/null if [ $? -eq 0 ];then - ynh_print_info "zabbix agent is started" + ynh_print_info --message="zabbix agent is started" else ynh_print_err "Zabbix agent not started, try to start it with the yunohost interface." ynh_print_err "If Zabbix agent can't start, please open a issue on https://github.com/YunoHost-Apps/zabbix_ynh/issues" @@ -204,7 +209,7 @@ 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;" - ynh_print_info "Default Media type added !" + ynh_print_info --message="Default Media type added !" fi set +x } diff --git a/scripts/backup b/scripts/backup index 0d2ea7f..8a593bf 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,60 @@ 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 +#================================================= + +#backup frontend config +ynh_backup --src_path="$final_path/conf/zabbix.conf.php" +ynh_backup --src_path="/etc/zabbix/web" +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/install b/scripts/install index 0b56e8b..506a56c 100644 --- a/scripts/install +++ b/scripts/install @@ -1,5 +1,6 @@ #!/bin/bash -##================================================= + +#================================================= # GENERIC START #================================================= # IMPORT GENERIC HELPERS @@ -19,78 +20,41 @@ 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" 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=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 @@ -117,29 +81,19 @@ locale-gen 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 - -### 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 +ynh_script_progression --message="Creating a MySQL database..." 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" +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 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;" @@ -184,51 +138,24 @@ set_mediatype_default_yunohost #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_script_progression --message="Setting up source files..." -### `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 +ynh_app_setting_set --app=$app --key=final_path --value=$final_path #================================================= # NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Configuring NGINX web server..." -### `ynh_add_nginx_config` will use the file conf/nginx.conf - -# Create a dedicated nginx config +# 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_script_progression --message="Configuring PHP-FPM..." -### `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 +# Create a dedicated PHP-FPM config ynh_add_fpm_config #================================================= @@ -237,52 +164,20 @@ ynh_add_fpm_config # ... #================================================= -#================================================= -# 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 +# ADD A CONFIGURATION #================================================= - -### `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 @@ -303,70 +198,15 @@ 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" - #================================================= # RELOAD NGINX AND PHP-FPM #================================================= systemctl reload nginx -systemctl reload php7.3-fpm +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload # Reload SSOwat config yunohost app ssowatconf @@ -374,36 +214,40 @@ yunohost app ssowatconf #================================================= # 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 - ynh_permission_update --permission="main" --add="visitors" -fi +yunohost service add snmpd --description="Management of SNMP Daemon" +yunohost service add zabbix-server --description="Management Zabbix server daemon : Collect, agregate, compute and notify" +yunohost service add zabbix-agent --description="Management Zabbix agent daemon : send informations about this host to the server" #================================================= -# RELOAD NGINX AND PHP-FPM +# START SYSTEMD SERVICE #================================================= +ynh_script_progression --message="Starting a systemd service..." -systemctl reload nginx -systemctl reload php7.3-fpm +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload # Reload SSOwat config yunohost app ssowatconf @@ -414,8 +258,28 @@ 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 +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +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" diff --git a/scripts/remove b/scripts/remove index a1ac0e5..d4d9735 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,34 +12,38 @@ 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 SERVICE INTEGRATION IN YUNOHOST #================================================= -# Remove a service from the admin panel, added by `yunohost service add` +# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) yunohost service remove snmpd yunohost service remove zabbix-server yunohost service remove zabbix-agent #================================================= -# REMOVE PHP-FPM CONFIGURATION +# REMOVE THE MYSQL DATABASE #================================================= +ynh_script_progression --message="Removing the MySQL database..." -# Remove the dedicated php-fpm config -ynh_remove_fpm_config +# 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..." timeout 5 systemctl stop zabbix-server || killall zabbix_server systemctl disable zabbix-server --quiet @@ -61,64 +65,50 @@ 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 LOGROTATE CONFIGURATION +# REMOVE PHP-FPM CONFIGURATION #================================================= +ynh_script_progression --message="Removing PHP-FPM configuration..." -# Remove the app-specific logrotate config -ynh_remove_logrotate - -#================================================= -# CLOSE A PORT -#================================================= - -if yunohost firewall list | grep -q "\- $port$" -then - echo "Close port $port" >&2 - yunohost firewall disallow TCP "$port" 2>&1 -fi +# Remove the dedicated PHP-FPM config +ynh_remove_fpm_config #================================================= # 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 # 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 @@ -127,12 +117,18 @@ if [ $(echo $nonfreepackagelist | wc -l) -eq 1 ] && [ $(echo $nonfreepackagelist fi fi - #================================================= # GENERIC FINALIZATION #================================================= # REMOVE DEDICATED USER #================================================= +ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user -ynh_system_user_delete zabbix +ynh_system_user_delete --username=$app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 1fb9ff3..83f02cb 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,52 @@ 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..." + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get $app --key=domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +nonfree=$(ynh_app_setting_get --app=$app --key=nonfree) + +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration 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" ynh_secure_remove $final_path #================================================= -# STORE SETTINGS FROM MANIFEST +# STANDARD RESTORATION STEPS #================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." -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_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= -# INSTALL DEPENDENCIES +# 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" + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." -ynh_print_info "Install Zabbix repository" install_zabbix_repo -ynh_print_info "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 @@ -65,100 +73,53 @@ 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 +#================================================= +# RESTORE THE MYSQL DATABASE +#================================================= +ynh_script_progression --message="Restoring the MySQL database..." + +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 #================================================= -# NGINX CONFIGURATION +# RESTORE VARIOUS FILES #================================================= - -### `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" - -#================================================= -# PHP-FPM CONFIGURATION -#================================================= - -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" +ynh_restore_file --origin_path="/etc/sudoers.d/zabbix" -#================================================= -# Restore db -#================================================= - -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) - -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" +ynh_restore_file --origin_path="/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/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 + systemctl enable --quiet zabbix-agent && systemctl restart zabbix-agent change_timeoutAgent systemctl enable --quiet zabbix-server && systemctl restart zabbix-server -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" +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add snmpd --description="Management of SNMP Daemon" +yunohost service add zabbix-server --description="Management Zabbix server daemon : Collect, agregate, compute and notify" +yunohost service add zabbix-agent --description="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 +ynh_script_progression --message="Starting a systemd service..." # Reload SSOwat config yunohost app ssowatconf @@ -168,3 +129,19 @@ 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"