From b9df8d590523f24b69c3aaff6ecf6dd39fb7ff53 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 19 Jun 2022 21:05:33 +0200 Subject: [PATCH] Apply last example_ynh --- README.md | 6 +- check_process | 45 ++-- conf/app.src | 16 +- conf/monitorix.conf | 16 +- conf/nginx.conf | 34 +-- conf/nginx_status.conf | 24 +- .../experimental_helper.sh => doc/.gitkeep | 0 doc/DESCRIPTION.md | 1 + doc/DISCLAIMER.md | 214 ++++++++++++++++++ doc/screenshots/.gitkeep | 0 doc/screenshots/mail.png | Bin 0 -> 151972 bytes manifest.json | 24 +- scripts/_common.sh | 27 +-- scripts/backup | 65 ++++-- scripts/change_url | 179 +++++++++++---- scripts/install | 159 +++++++++---- scripts/remove | 77 +++++-- scripts/restore | 126 +++++++---- scripts/upgrade | 159 +++++++++---- 19 files changed, 849 insertions(+), 323 deletions(-) rename scripts/experimental_helper.sh => doc/.gitkeep (100%) create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/.gitkeep create mode 100644 doc/screenshots/mail.png diff --git a/README.md b/README.md index d44d077..c1ad717 100644 --- a/README.md +++ b/README.md @@ -150,13 +150,13 @@ priority = 5 # ----------------------------------------------------------------------------- - 0 = /, /home, /var, /tmp, swap + 0 = /, /home, /var, /$tempdir, swap / = Root FS /home = home /var = var - /tmp = tmp + /$tempdir = tmp @@ -166,7 +166,7 @@ priority = 5 / = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_rootfs.sh /home = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_home.sh /var = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_var.sh - /tmp = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_tmp.sh + /$tempdir = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_tmp.sh swap = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_swap.sh diff --git a/check_process b/check_process index f83c2c0..68812c6 100644 --- a/check_process +++ b/check_process @@ -1,24 +1,21 @@ -;; General - auto_remove=1 -# Commentaire ignoré - ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) - ; Checks - pkg_linter=1 - setup_sub_dir=1 - setup_root=1 - setup_nourl=0 - setup_private=0 - setup_public=0 - upgrade=1 - backup_restore=1 - multi_instance=0 - wrong_user=0 - wrong_path=1 - incorrect_path=1 - corrupt_source=1 - fail_download_source=1 - port_already_use=1 (8080) - final_path_already_use=1 - change_url=1 +;; Test complet + ; Manifest + domain="domain.tld" + path="/path" + ; Checks + pkg_linter=1 + setup_sub_dir=1 + setup_root=1 + setup_nourl=0 + setup_private=0 + setup_public=0 + upgrade=1 + # 3.12.0~ynh1 + upgrade=1 from_commit=c09953008a913b5e1d46be561a10a746eab6d23e + backup_restore=1 + multi_instance=0 + port_already_use=0 + change_url=1 +;;; Options +Email= +Notification=none diff --git a/conf/app.src b/conf/app.src index 959d6ab..43f3137 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,17 +1,7 @@ -SOURCE_URL=http://www.monitorix.org/old-versions/monitorix_3.12.0-izzy1_all.deb -SOURCE_SUM=4fb9fa233463e036020e71aa2e545f5dc2c1106f2c8397017de5c3cb17de1263 -# (Optional) Program to check the integrity (sha256sum, md5sum...) -# default: sha256 +SOURCE_URL=http://www.monitorix.org/old-versions/monitorix_3.13.1-izzy1_all.deb +SOURCE_SUM=17a48021c46bf5656caeacbcf2da6bff63816496bf1d4f4926daa64c76a4733f SOURCE_SUM_PRG=sha256sum -# (Optional) Archive format -# default: tar.gz SOURCE_FORMAT=deb -# (Optional) Put false if sources are directly in the archive root -# default: true -# Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories -# to remove. SOURCE_IN_SUBDIR=false -# (Optional) If it set as false don't extract the source. -# (Useful to get a debian package or a python wheel.) -# default: true +SOURCE_FILENAME= SOURCE_EXTRACT=false diff --git a/conf/monitorix.conf b/conf/monitorix.conf index e069317..76a218b 100644 --- a/conf/monitorix.conf +++ b/conf/monitorix.conf @@ -21,13 +21,13 @@ include_dir = /etc/monitorix/conf.d base_dir = /var/lib/monitorix/www/ base_lib = /var/lib/monitorix/ -base_url = __YNH_WWW_PATH__ -base_cgi = __YNH_WWW_PATH__/cgi +base_url = __PATH_URL__ +base_cgi = __PATH_URL_SLASH_LESS__/cgi enabled = y host = localhost - port = __SERVICE_PORT__ + port = __PORT__ user = www-data group = nogroup log_file = /var/log/monitorix-httpd @@ -289,7 +289,7 @@ secure_log_date_format = %b %e list = System, Users - 0 = /var/spool/mail, /var/spool/mqueue, /etc, /var/ftp, /tmp + 0 = /var/spool/mail, /var/spool/mqueue, /etc, /var/ftp, /$tempdir 1 = /home/ace, /home/gene, /home/paul, /home/peter @@ -475,7 +475,7 @@ secure_log_date_format = %b %e conn_type = socket list = /run/mysqld/mysqld.sock - /run/mysqld/mysqld.sock = 3306, __MYSQL_USER__, __MYSQL_PASSWORD__ + /run/mysqld/mysqld.sock = 3306, __DB_USER__, __DB_PWD__ rigid = 0, 2, 0, 0, 0, 0 limit = 100, 100, 100, 100, 100, 100 @@ -591,7 +591,7 @@ secure_log_date_format = %b %e 2 = [postfix], [postfix-sasl], [dovecot] 3 = [nginx-http-auth] 4 = [sshd], [sshd-ddos] - 5 = __F2B_ADDITIONAL_JAIL__ + 5 = __ADDITIONAL_JAIL__ graphs_per_row = 2 rigid = 0 @@ -743,9 +743,9 @@ secure_log_date_format = %b %e # ----------------------------------------------------------------------------- enabled = n - url_prefix = http://127.0.0.1:__SERVICE_PORT____YNH_WWW_PATH__ + url_prefix = http://127.0.0.1:__PORT____PATH_URL__ smtp_hostname = localhost - from_address = noreply@__YNH_DOMAIN__ + from_address = noreply@__DOMAIN__ hour = 0 minute = 0 diff --git a/conf/nginx.conf b/conf/nginx.conf index 7c64fe4..fda0f6c 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,21 +1,21 @@ location __PATH__ { - proxy_pass http://127.0.0.1:__PORT____PATH__; - allow 127.0.0.0/8; + proxy_pass http://127.0.0.1:__PORT____PATH__; + allow 127.0.0.0/8; - location ~ ^__PATH__/(.+\.png)$ { - alias /var/lib/monitorix/www/$1; - } - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; + location ~ ^__PATH__/(.+\.png)$ { + alias /var/lib/monitorix/www/$1; + } - proxy_connect_timeout 600; - proxy_send_timeout 600; - proxy_read_timeout 600; - send_timeout 600; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_connect_timeout 600; + proxy_send_timeout 600; + proxy_read_timeout 600; + send_timeout 600; - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; -} \ No newline at end of file + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; +} diff --git a/conf/nginx_status.conf b/conf/nginx_status.conf index e877c13..29cc4da 100644 --- a/conf/nginx_status.conf +++ b/conf/nginx_status.conf @@ -1,15 +1,15 @@ server { - listen __PORT__; - listen [::]:__PORT__; + listen __NGINX_STATUS_PORT__; + listen [::]:__NGINX_STATUS_PORT__; - access_log /var/log/nginx/localhost-nginx_status_monitorix.lan-access.log; - error_log /var/log/nginx/localhost-nginx_status_monitorix.lan-error.log; + access_log /var/log/nginx/localhost-nginx_status_monitorix.lan-access.log; + error_log /var/log/nginx/localhost-nginx_status_monitorix.lan-error.log; - location /nginx_status_monitorix { - stub_status on; - access_log off; - allow 127.0.0.1; - allow ::1; - deny all; - } -} \ No newline at end of file + location /nginx_status_monitorix { + stub_status on; + access_log off; + allow 127.0.0.1; + allow ::1; + deny all; + } +} diff --git a/scripts/experimental_helper.sh b/doc/.gitkeep similarity index 100% rename from scripts/experimental_helper.sh rename to doc/.gitkeep diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..1324d1f --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +Monitorix is a free, open source, lightweight system monitoring tool designed to monitor as many services and system resources as possible. It has been created to be used under production Linux/UNIX servers, but due to its simplicity and small size can be used on embedded devices as well. diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..dc8886c --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,214 @@ +### More sensor + +If you want to see the temperature of some sensor you can install the `lm-sensor` packet. For disk temperature you can instal the `hddtemp` packet. + +### Custom config + +If you want do custom the monitorix config for more personnal information you can add a file in `/etc/monitorix/conf.d/`. This config file will be overwritte the original config in `/etc/monitorix/monitorix.conf`. + +You will have a full complete documentation for monitorix config here : https://www.monitorix.org/documentation.html + +By example you can extends the basic config by this : + +``` +priority = 5 + + + + disk = y + lmsens = y + gensens = y + mail = y + + +# LMSENS graph +# ----------------------------------------------------------------------------- + + + core0 = temp1 + core1 = + mb0 = + cpu0 = + fan0 = + fan1 = + fan2 = + volt0 = + volt1 = + volt2 = + volt3 = + volt4 = + volt5 = + volt6 = + volt7 = + + + +# GENSENS graph +# ----------------------------------------------------------------------------- + + + 0 = cpu_temp + 1 = cpu0_freq, cpu1_freq, cpu2_freq, cpu3_freq + + + cpu_temp = /sys/class/thermal/thermal_zone0/temp + cpu0_freq = /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq + cpu1_freq = /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq + cpu2_freq = /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_cur_freq + cpu3_freq = /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_cur_freq + + + cpu_temp = 1000 + cpu0_freq = 0.001 + cpu1_freq = 0.001 + cpu2_freq = 0.001 + cpu3_freq = 0.001 + + + cpu_temp = CPU Temperature + cpu0_freq = CPU 0 Frequency + cpu1_freq = CPU 1 Frequency + cpu2_freq = CPU 2 Frequency + cpu3_freq = CPU 3 Frequency + + + cpu_temp = 300, 65, /etc/monitorix/monitorix_alerts_scripts/cpu_temp.sh + + + +# DISK graph +# ----------------------------------------------------------------------------- + + + 0 = /dev/sda + + + realloc_enabled = y + realloc_timeintvl = 0 + realloc_threshold = 1 + realloc_script = /etc/monitorix/monitorix_alerts_scripts/disk_realloc.sh + pendsect_enabled = y + pendsect_timeintvl = 0 + pendsect_threshold = 1 + pendsect_script = /etc/monitorix/monitorix_alerts_scripts/disk_pendsect.sh + + + +# FS graph +# ----------------------------------------------------------------------------- + + + 0 = /, /home, /var, /$tempdir, swap + + + / = Root FS + /home = home + /var = var + /$tempdir = tmp + + + + rigid = 2, 0, 2, 0 + limit = 100, 1000, 100, 1000 + + / = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_rootfs.sh + /home = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_home.sh + /var = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_var.sh + /$tempdir = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_tmp.sh + swap = 3600, 98, /etc/monitorix/monitorix_alerts_scripts/fs_swap.sh + + + + +# MAIL graph +# ----------------------------------------------------------------------------- + + mta = postfix + greylist = postgrey + stats_rate = real + rigid = 0, 0, 0, 0, 0 + limit = 1, 1000, 1000, 1000, 1000 + + delvd_enabled = y + delvd_timeintvl = 60 + delvd_threshold = 100 + delvd_script = /etc/monitorix/monitorix_alerts_scripts/mail_delvd.sh + mqueued_enabled = y + mqueued_timeintvl = 3600 + mqueued_threshold = 100 + mqueued_script = /etc/monitorix/monitorix_alerts_scripts/mail_mqueued.sh + + + + +# NET graph +# ----------------------------------------------------------------------------- + + list = eth0,lo + + eth0 = FastEthernet LAN, 0, 10000000 + lo = loopback, 0, 10000000 + + + gateway = eth0 + + +# PROCESS graph +# ----------------------------------------------------------------------------- + + + 0 = sshd, ntpd, monitorix, monitorix-httpd + 1 = openvpn, ... + ... + 6 = mysqld, slapd, postgresql + + + master = Postfix + imap = Dovecot + + rigid = 2, 0, 0, 0, 0, 0, 0, 0 + limit = 100, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + + + + + enabled = y + url_prefix = http://127.0.0.1:8081/monitorix + smtp_hostname = localhost + from_address = noreply@domain.tld + hour = 2 + minute = 7 + + enabled = y + graphs = system, fs, gensens, disk, netstat, port, nginx + to = user@domain.tld + + + enabled = y + graphs = system, fs, gensens, disk, kern, proc, net, netstat, process, serv, port, user, nginx, mysql, fail2ban, int + to = user@domain.tld + + + enabled = y + graphs = system, fs, gensens, disk, kern, proc, net, netstat, process, serv, port, user, nginx, mysql, fail2ban, int + to = user@domain.tld + + + enabled = y + graphs = system, fs, gensens, disk, kern, proc, net, netstat, process, serv, port, user, nginx, mysql, fail2ban, int + to = user@domain.tld + + + +``` + +In this config we have : +- We set the process priority to 5 (which mean that it will be lower priority than the other process). +- We get the lmsensor sensor data. +- We get some sensors data not accessible with lmsensor (with gensens) +- We check the disk health and send an email if any error happens. For that you need to make some script. An example is available in `/usr/share/doc/monitorix/monitorix-alert.sh`. +- We check the filesystem. +- We check the traffic in the network card. +- We check some process. +- We send every day, week, month and year a rapport. diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/mail.png b/doc/screenshots/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..0497a3f2a6b73bb1739fef8ac9c245f9276e68a2 GIT binary patch literal 151972 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 z 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
7_vXU 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index f21d53c..38ee9fe 100644 --- a/manifest.json +++ b/manifest.json @@ -6,15 +6,22 @@ "en": "A monitoring tools", "fr": "Un outils de monitoring" }, - "version": "3.12.0~ynh1", + "version": "3.13.1~ynh1", "url": "http://monitorix.org", + "upstream": { + "license": "GPL-2.0", + "website": "http://monitorix.org", + "demo": "https://www.fibranet.cat/monitorix/", + "admindoc": "https://www.monitorix.org/documentation.html", + "code": "https://github.com/mikaku/Monitorix" + }, "license": "GPL-2.0", "maintainer": { "name": "Josué Tille", "email": "josue@familletille.ch" }, "requirements": { - "yunohost": ">= 4.0.0" + "yunohost": ">= 4.3.0" }, "multi_instance": false, "services": [ @@ -22,23 +29,14 @@ "mysql" ], "arguments": { - "install" : [ + "install": [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain name for Monitorix", - "fr": "Choisissez un nom de domaine pour Monitorix" - }, - "example": "example.com" + "type": "domain" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for Monitorix", - "fr": "Choisissez un chemin pour Monitorix" - }, "example": "/monitorix", "default": "/monitorix" } diff --git a/scripts/_common.sh b/scripts/_common.sh index 22be3cb..e93da42 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,22 +1,21 @@ +#!/bin/bash + #================================================= -# SET ALL CONSTANTS +# COMMON VARIABLES #================================================= -app=$YNH_APP_INSTANCE_NAME +# dependencies used by the app +pkg_dependencies="rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl pflogsumm libxml-libxml-perl" #================================================= # DEFINE ALL COMMON FONCTIONS #================================================= -install_dependances() { - ynh_install_app_dependencies rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl pflogsumm libxml-libxml-perl -} - get_install_source() { - ynh_setup_source --dest_dir /tmp + ynh_setup_source --dest_dir /$tempdir ynh_package_update - dpkg --force-confdef --force-confold -i /tmp/app.deb + dpkg --force-confdef --force-confold -i /$tempdir/app.deb ynh_secure_remove --file=/etc/monitorix/conf.d/00-debian.conf ynh_package_install -f } @@ -45,16 +44,8 @@ config_monitorix() { fi done - monitorix_conf=/etc/monitorix/monitorix.conf - cp ../conf/monitorix.conf $monitorix_conf - ynh_replace_string --match_string __SERVICE_PORT__ --replace_string $port --target_file $monitorix_conf - ynh_replace_string --match_string __YNH_DOMAIN__ --replace_string $domain --target_file $monitorix_conf - ynh_replace_string --match_string __NGINX_STATUS_PORT__ --replace_string $nginx_status_port --target_file $monitorix_conf - ynh_replace_string --match_string __YNH_WWW_PATH__/ --replace_string "${path_url%/}/" --target_file $monitorix_conf - ynh_replace_string --match_string __YNH_WWW_PATH__ --replace_string $path_url --target_file $monitorix_conf - ynh_replace_string --match_string __MYSQL_USER__ --replace_string $dbuser --target_file $monitorix_conf - ynh_replace_string --match_string __MYSQL_PASSWORD__ --replace_string $dbpass --target_file $monitorix_conf - ynh_replace_string --match_string __F2B_ADDITIONAL_JAIL__ --replace_string "$additional_jail" --target_file $monitorix_conf + path_url_slash_less=${path_url%/} + ynh_add_config --template="../conf/monitorix.conf" --destination="/etc/monitorix/monitorix.conf" } set_permission() { diff --git a/scripts/backup b/scripts/backup index 7738d6f..3ce82d7 100755 --- a/scripts/backup +++ b/scripts/backup @@ -3,39 +3,64 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Import common cmd -source ../settings/scripts/experimental_helper.sh +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh - -# Source YunoHost helpers source /usr/share/yunohost/helpers -# Stop script if errors +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + true +} +# Exit if an error occurs during the execution of the script ynh_abort_if_errors -# Retrieve arguments +#================================================= +# LOAD SETTINGS +#================================================= ynh_print_info --message="Loading installation settings..." -domain=$(ynh_app_setting_get --app $app --key domain) + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + +#================================================= +# BACKUP THE NGINX CONFIGURATION #================================================= -# Copy NGINX configuration -ynh_print_info --message="Backing up configuration..." -domain=$(ynh_app_setting_get --app $app --key domain) -ynh_backup --src_path "/etc/nginx/conf.d/${domain}.d/${app}.conf" -ynh_backup --src_path "/etc/nginx/conf.d/monitorix_status.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup --src_path="/etc/nginx/conf.d/monitorix_status.conf" -# Copy hook -ynh_backup --src_path "/etc/yunohost/hooks.d/post_iptable_rules/50-$app" +#================================================= +# BACKUP VARIOUS FILES +#================================================= -# Copy Monitorix configuration -ynh_backup --src_path "/etc/monitorix" +ynh_backup --src_path="/etc/yunohost/hooks.d/post_iptable_rules/50-$app" -# Copy Monitorix data -ynh_print_info --message="Backing up data..." -ynh_backup --src_path "/var/lib/monitorix" +ynh_backup --src_path="/etc/monitorix" + +ynh_backup --src_path="/var/lib/monitorix" + +#================================================= +# BACKUP THE MYSQL DATABASE +#================================================= +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 2e1e383..a43c407 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -1,62 +1,163 @@ #!/bin/bash #================================================= -# GENERIC START +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS #================================================= -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - -# Source YunoHost helpers +source _common.sh source /usr/share/yunohost/helpers -# Stop script if errors -ynh_abort_if_errors +#================================================= +# RETRIEVE ARGUMENTS +#================================================= +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= ynh_script_progression --message="Loading installation settings..." -# Retrive arguments -path_url=$(ynh_normalize_url_path --path_url $YNH_APP_NEW_PATH) -old_domain=$YNH_APP_OLD_DOMAIN -domain=$YNH_APP_NEW_DOMAIN -port=$(ynh_app_setting_get --app $app --key http_port) -nginx_status_port=$(ynh_app_setting_get --app $app --key nginx_status_port) -dbuser=$app -dbname=$app -dbpass=$(ynh_app_setting_get --app $app --key mysqlpwd) +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +# Add settings here as needed by your application +port=$(ynh_app_setting_get --app=$app --key=port) +nginx_status_port=$(ynh_app_setting_get --app=$app --key=nginx_status_port) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) + +#================================================= +# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_clean_check_starting + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi #================================================= # STANDARD MODIFICATIONS #================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping a systemd service..." -ynh_script_progression --message="Updating nginx configuration..." +ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" -# Update nginx config -if [ "$old_domain" != "$domain" ] +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating NGINX web server configuration..." + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the NGINX config file +if [ $change_path -eq 1 ] then - # Delete file checksum for the old conf file location - ynh_delete_file_checksum --file "/etc/nginx/conf.d/$old_domain.d/$app.conf" - - mv "/etc/nginx/conf.d/$old_domain.d/$app.conf" "/etc/nginx/conf.d/$domain.d/$app.conf" - - # Store file checksum for the new config file location - ynh_store_file_checksum --file "/etc/nginx/conf.d/$domain.d/$app.conf" + # Make a backup of the original NGINX config file if modified + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" + # Set global variables for NGINX helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated NGINX config + ynh_add_nginx_config fi -config_nginx -ynh_script_progression --message="Updating monitorix configuration..." +# Change the domain for NGINX +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum --file="$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi +ynh_add_config --template="../conf/nginx_status.conf" --destination="/etc/nginx/conf.d/monitorix_status.conf" -# Update monitorix configuration -config_monitorix +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a configuration file..." -ynh_script_progression --message="Restarting monitorix services..." --weight=3 -# Reload monitorix -# While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that -# So this fix that -systemctl stop monitorix.service -sleep 1 -pkill -f "monitorix-httpd listening on" || true -ynh_systemd_action -l ' - Ok, ready.' -p '/var/log/monitorix' +domain="$new_domain" +path_url="$new_path" + +jail_list=$(fail2ban-client status | grep 'Jail list:' | sed 's/.*Jail list://' | sed 's/,//g') +additional_jail="" +for jail in $jail_list; do + if ! [[ "$jail" =~ (recidive|pam-generic|yunohost|postfix|postfix-sasl|dovecot|nginx-http-auth|sshd|sshd-ddos) ]]; then + if [ -z "$additional_jail" ]; then + additional_jail="[$jail]" + else + additional_jail+=", [$jail]" + fi + fi +done + +path_url_slash_less=${path_url%/} +ynh_add_config --template="../conf/monitorix.conf" --destination="/etc/monitorix/monitorix.conf" + +chown www-data:root -R /etc/monitorix +chmod u=rX,g=rwX,o= -R /etc/monitorix +chown www-data:root -R /var/lib/monitorix +chmod u=rwX,g=rwX,o= -R /var/lib/monitorix + +#================================================= +# GENERIC FINALISATION +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=3 + +# Start a systemd service +ynh_systemd_action --service_name=$app --action="restart" --log_path="/var/log/monitorix" --line_match=" - Ok, ready." + +#================================================= +# 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="Change of URL completed for $app" --last diff --git a/scripts/install b/scripts/install index af49246..605b127 100755 --- a/scripts/install +++ b/scripts/install @@ -3,82 +3,145 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - -# Source YunoHost helpers +source _common.sh source /usr/share/yunohost/helpers -# Stop script if errors +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + ynh_clean_check_starting +} +# Exit if an error occurs during the execution of the script ynh_abort_if_errors -ynh_script_progression --message="Validating installation parameters..." +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= -# Retrieve arguments domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH -# Check domain/path availability -test $(ynh_webpath_available --domain $domain --path_url $path_url) == 'True' || ynh_die --message "$domain$path_url is not available, please use an other domain or path." -ynh_webpath_register $app $domain $path_url +app=$YNH_APP_INSTANCE_NAME -# Find a port for built-in monitorix HTTP server -ynh_script_progression --message="Finding available ports..." -port=$(ynh_find_port --port 8080) -nginx_status_port=$(ynh_find_port --port $(($port +1))) +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." -# store config in yunohost +# Register (book) web path +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url + +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= ynh_script_progression --message="Storing installation settings..." -ynh_app_setting_set --app $app --key http_port --value $port -ynh_app_setting_set --app $app --key nginx_status_port --value $nginx_status_port + +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url #================================================= # STANDARD MODIFICATIONS #================================================= +# FIND AND OPEN A PORT +#================================================= +ynh_script_progression --message="Finding an available port..." -# Install package +# Find an available port +port=$(ynh_find_port --port=8080) +ynh_app_setting_set --app=$app --key=port --value=$port +nginx_status_port=$(ynh_find_port --port $(($port +1))) +ynh_app_setting_set --app=$app --key=nginx_status_port --value=$nginx_status_port + +#================================================= +# INSTALL DEPENDENCIES +#================================================= ynh_script_progression --message="Installing dependencies..." --weight=7 -install_dependances -# Download package and install it -ynh_script_progression --message="Installing sources files..." --weight=7 -get_install_source +ynh_install_app_dependencies $pkg_dependencies +tempdir="$(mktemp -d)" +ynh_setup_source --dest_dir="$tempdir" +ynh_package_update +dpkg --force-confdef --force-confold -i /$tempdir/app.deb +ynh_package_install -f +ynh_secure_remove --file="$tempdir" -# # Generate MySQL user -ynh_script_progression --message="Configuring MySQL database..." -dbuser=$app -dbpass=$(ynh_string_random 12) -ynh_app_setting_set --app $app --key mysqlpwd --value "$dbpass" -ynh_mysql_create_user $dbuser $dbpass +#================================================= +# CREATE A MYSQL DATABASE +#================================================= +ynh_script_progression --message="Creating a MySQL database..." -# Config nginx -ynh_script_progression --message="Configuring nginx..." --weight=1 -config_nginx +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 -# Update monitorix configuration -ynh_script_progression --message="Configuring application..." --weight=3 -config_monitorix +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring NGINX web server..." --weight=1 + +# Create a dedicated NGINX config +ynh_add_nginx_config +ynh_add_config --template="../conf/nginx_status.conf" --destination="/etc/nginx/conf.d/monitorix_status.conf" + +#================================================= +# SPECIFIC SETUP +#================================================= +# ADD A CONFIGURATION +#================================================= +ynh_script_progression --message="Adding a configuration file..." --weight=3 + +jail_list=$(fail2ban-client status | grep 'Jail list:' | sed 's/.*Jail list://' | sed 's/,//g') +additional_jail="" +for jail in $jail_list; do + if ! [[ "$jail" =~ (recidive|pam-generic|yunohost|postfix|postfix-sasl|dovecot|nginx-http-auth|sshd|sshd-ddos) ]]; then + if [ -z "$additional_jail" ]; then + additional_jail="[$jail]" + else + additional_jail+=", [$jail]" + fi + fi +done + +path_url_slash_less=${path_url%/} +ynh_add_config --template="../conf/monitorix.conf" --destination="/etc/monitorix/monitorix.conf" + +chown www-data:root -R /etc/monitorix +chmod u=rX,g=rwX,o= -R /etc/monitorix +chown www-data:root -R /var/lib/monitorix +chmod u=rwX,g=rwX,o= -R /var/lib/monitorix #================================================= # GENERIC FINALIZATION #================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." -# Set access -ynh_script_progression --message="Protecting directory..." -set_permission - -# register yunohost service yunohost service add monitorix -# Reload monitorix -ynh_script_progression --message="Starting monitorix services..." --weight=3 -# While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that -# So this fix that -systemctl stop monitorix.service -sleep 1 -pkill -f "monitorix-httpd listening on" || true -ynh_systemd_action -l ' - Ok, ready.' -p '/var/log/monitorix' +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=3 + +# Start a systemd service +ynh_systemd_action --service_name=$app --action="restart" --log_path="/var/log/monitorix" --line_match=" - Ok, ready." + +#================================================= +# 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 diff --git a/scripts/remove b/scripts/remove index dcf1a32..102d30c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -3,48 +3,79 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - -# Source YunoHost helpers +source _common.sh source /usr/share/yunohost/helpers +#================================================= +# LOAD SETTINGS +#================================================= ynh_script_progression --message="Loading installation settings..." +app=$YNH_APP_INSTANCE_NAME -# Retrieve app settings -domain=$(ynh_app_setting_get --app $app --key domain) +domain=$(ynh_app_setting_get --app=$app --key=domain) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name #================================================= # STANDARD REMOVE #================================================= +# REMOVE SERVICE INTEGRATION IN YUNOHOST +#================================================= -# Stop service -ynh_script_progression --message="Stoping services..." -systemctl stop monitorix.service +# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) +if ynh_exec_warn_less yunohost service status $app >/dev/null +then + ynh_script_progression --message="Removing $app service integration..." + yunohost service remove $app +fi -# Drop MySQL database and user -ynh_script_progression --message="Removing databases..." -dbname=$app -dbuser=$app -ynh_mysql_drop_db "$dbname" || true -ynh_mysql_drop_user "$dbuser" || true +#================================================= +# STOP AND REMOVE SERVICE +#================================================= +ynh_script_progression --message="Stopping and removing the systemd service..." + +systemctl stop $app.service + +#================================================= +# 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 APP MAIN DIR +#================================================= +ynh_script_progression --message="Removing app main directory..." + +# Remove the app directory securely -# Remove data -ynh_script_progression --message="Removing logs..." ynh_secure_remove --file=/var/lib/monitorix -# Remove nginx config +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing NGINX web server configuration..." + +# Remove the dedicated NGINX config + ynh_secure_remove --file="/etc/nginx/conf.d/monitorix_status.conf" ynh_remove_nginx_config -# Autoremove package -ynh_script_progression --message="Removing dependencies" --weight=10 +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." --weight=10 ynh_remove_app_dependencies -ynh_package_autoremove monitorix +ynh_package_autoremove $app -yunohost service remove monitorix +#================================================= +# END OF SCRIPT +#================================================= ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index c4ebcf4..d2bb9d0 100755 --- a/scripts/restore +++ b/scripts/restore @@ -3,71 +3,115 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Import common cmd -source ../settings/scripts/experimental_helper.sh +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh - -# Source YunoHost helpers source /usr/share/yunohost/helpers -# Stop script if errors +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + ynh_clean_check_starting +} +# Exit if an error occurs during the execution of the script ynh_abort_if_errors -ynh_script_progression --message="Loading settings..." +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -# Retrieve old app settings -domain=$(ynh_app_setting_get --app $app --key domain) -path_url=$(ynh_normalize_url_path --path_url $(ynh_app_setting_get --app $app --key path)) +app=$YNH_APP_INSTANCE_NAME -# Check domain/path availability -ynh_webpath_available --domain $domain --path_url $path_url || ynh_die --message "$domain/$path_url is not available, please use an other domain or path." +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name #================================================= # STANDARD RESTORATION STEPS #================================================= -# Install package +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= ynh_script_progression --message="Reinstalling dependencies..." --weight=5 -install_dependances -# Download package and install it -ynh_script_progression --message="Installing sources files..." --weight=7 -get_install_source +# Define and install dependencies +ynh_install_app_dependencies $pkg_dependencies +tempdir="$(mktemp -d)" +ynh_setup_source --dest_dir="$tempdir" +ynh_package_update +dpkg --force-confdef --force-confold -i /$tempdir/app.deb +ynh_secure_remove --file=/etc/monitorix/conf.d/00-debian.conf +ynh_package_install -f +ynh_secure_remove --file="$tempdir" -# Create user for database -ynh_script_progression --message="Configuring MySQL database..." -dbuser=$app -dbpass=$(ynh_app_setting_get --app $app --key mysqlpwd) -ynh_mysql_create_user $dbuser $dbpass +#================================================= +# 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" +ynh_restore_file --origin_path="/etc/nginx/conf.d/monitorix_status.conf" + +#================================================= +# 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 +ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql + +#================================================= +# RESTORE VARIOUS FILES +#================================================= +ynh_script_progression --message="Restoring various files..." --weight=10 -# Restore all config and data -ynh_script_progression --message="Restoring files..." --weight=10 ynh_secure_remove --file=/etc/monitorix # we remove the directory because if it is not empty the ynh_restore cmd fail ynh_secure_remove --file=/var/lib/monitorix -ynh_restore + +ynh_restore_file --origin_path="/etc/yunohost/hooks.d/post_iptable_rules/50-$app" +ynh_restore_file --origin_path="/etc/monitorix" +ynh_restore_file --origin_path="/var/lib/monitorix" + +chown www-data:root -R /etc/monitorix +chmod u=rX,g=rwX,o= -R /etc/monitorix +chown www-data:root -R /var/lib/monitorix +chmod u=rwX,g=rwX,o= -R /var/lib/monitorix + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add monitorix + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=3 + +ynh_systemd_action --service_name=$app --action="restart" --log_path="/var/log/monitorix" --line_match=" - Ok, ready." #================================================= # GENERIC FINALIZATION #================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." -# Set access -ynh_script_progression --message="Protecting directory..." -set_permission +ynh_systemd_action --service_name=nginx --action=reload -# register yunohost service -yunohost service add monitorix - -# Reload nginx -systemctl reload nginx.service - -# Reload monitorix -ynh_script_progression --message="Starting monitorix services..." --weight=3 -# While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that -# So this fix that -systemctl stop monitorix.service -sleep 1 -pkill -f "monitorix-httpd listening on" || true -ynh_systemd_action -l ' - Ok, ready.' -p '/var/log/monitorix' +#================================================= +# END OF SCRIPT +#================================================= ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index a63538d..84dd2a9 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -3,36 +3,44 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - -# Source YunoHost helpers +source _common.sh source /usr/share/yunohost/helpers -# Stop script if errors -ynh_abort_if_errors - +#================================================= +# LOAD SETTINGS +#================================================= ynh_script_progression --message="Loading installation settings..." -# Retrieve app settings -domain=$(ynh_app_setting_get --app $app --key domain) -path_url=$(ynh_normalize_url_path --path_url $(ynh_app_setting_get --app $app --key path)) -port=$(ynh_app_setting_get --app $app --key http_port) -nginx_status_port=$(ynh_app_setting_get --app $app --key nginx_status_port) -dbuser=$app -dbname=$app -dbpass=$(ynh_app_setting_get --app $app --key mysqlpwd) +app=$YNH_APP_INSTANCE_NAME -# Stop services -ynh_script_progression --message="Stoping services..." -systemctl stop monitorix.service +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +port=$(ynh_app_setting_get --app=$app --key=port) +nginx_status_port=$(ynh_app_setting_get --app=$app --key=nginx_status_port) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +dbuser=$db_name +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_clean_check_starting + # Restore it if the upgrade fails ynh_restore_upgradebackup } # Exit if an error occurs during the execution of the script @@ -41,43 +49,106 @@ ynh_abort_if_errors #================================================= # STANDARD UPGRADE STEPS #================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping a systemd service..." -# Install package -ynh_script_progression --message="Installing dependencies..." --weight=6 -install_dependances +ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" -# Download package and install it -ynh_script_progression --message="Upgrading source files..." --weight=6 -get_install_source +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." -# Update nginx config -config_nginx +# If db_name doesn't exist, create it +if [ -z "$db_name" ]; then + db_name=$(ynh_sanitize_dbid --db_name=$app) + dbuser=$db_name + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi -# Update monitorix configuration -ynh_script_progression --message="Configuring application..." -config_monitorix +# If port doesn't exist, create it +if [ -z "$port" ]; then + port=$(ynh_app_setting_get --app=$app --key=http_port) + ynh_app_setting_set --app=$app --key=port --value=$port + ynh_app_setting_delete --app=app --key=http_port +fi # Remove old hook if exist ynh_secure_remove --file=/usr/share/yunohost/hooks/post_iptable_rules/50-$app +#================================================= +# UPGRADE DEPENDENCIES +#================================================= +ynh_script_progression --message="Upgrading dependencies..." --weight=6 + +ynh_install_app_dependencies $pkg_dependencies +tempdir="$(mktemp -d)" +ynh_setup_source --dest_dir="$tempdir" +ynh_package_update +dpkg --force-confdef --force-confold -i /$tempdir/app.deb +ynh_package_install -f +ynh_secure_remove --file="$tempdir" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." + +# Create a dedicated NGINX config +ynh_add_nginx_config +ynh_add_config --template="../conf/nginx_status.conf" --destination="/etc/nginx/conf.d/monitorix_status.conf" + +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a configuration file..." + +jail_list=$(fail2ban-client status | grep 'Jail list:' | sed 's/.*Jail list://' | sed 's/,//g') +additional_jail="" +for jail in $jail_list; do + if ! [[ "$jail" =~ (recidive|pam-generic|yunohost|postfix|postfix-sasl|dovecot|nginx-http-auth|sshd|sshd-ddos) ]]; then + if [ -z "$additional_jail" ]; then + additional_jail="[$jail]" + else + additional_jail+=", [$jail]" + fi + fi +done + +path_url_slash_less=${path_url%/} +ynh_add_config --template="../conf/monitorix.conf" --destination="/etc/monitorix/monitorix.conf" + +chown www-data:root -R /etc/monitorix +chmod u=rX,g=rwX,o= -R /etc/monitorix +chown www-data:root -R /var/lib/monitorix +chmod u=rwX,g=rwX,o= -R /var/lib/monitorix + #================================================= # GENERIC FINALIZATION #================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." -# Set access -ynh_script_progression --message="Protecting directory..." -set_permission - -# register yunohost service yunohost service add monitorix -# Reload monitorix -# While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that -# So this fix that -ynh_script_progression --message="Starting monitorix services..." --weight=3 -systemctl stop monitorix.service -sleep 1 -pkill -f "monitorix-httpd listening on" || true -ynh_systemd_action -l ' - Ok, ready.' -p '/var/log/monitorix' +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=3 + +ynh_systemd_action --service_name=$app --action="restart" --log_path="/var/log/monitorix" --line_match=" - Ok, ready." + +#================================================= +# 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" --last