diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..827e1b2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,55 @@ +Changelog +========= + +## Unreleased +- Nothing for now... + +## [0.11.6~ynh1](https://github.com/YunoHost-Apps/lutim_ynh/pull/42) - 2020-01-02 + +#### Added +* [Set workers according to cpu](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/58e291949769d678ec48306199bcc03e3be20631) +- [Add changelog](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/b0859ab1612c22d210321d6302cad7872ec17abd) + +#### Fixed +- [Fix cron tasks](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/dec8d0820fb46e984b2ca65e1012f5f737861965) + +#### Changed +- [Update to last standard](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/5e5bf7c7a8f68b0768555005797ec3024a223299) [(twice)](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/51113ba7544991a3400abc9a78258ba594d58b4b) +- [Use toml for actions and config-panel](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/4f7bac24481138654e3e3128ba6637cdf8855855) +* [Update to 0.11.6](https://github.com/YunoHost-Apps/lutim_ynh/pull/42/commits/4b50a261fb4515aa2a32b7ca20c750c322bfd5c0) + + +## [0.11.5~ynh1](https://github.com/YunoHost-Apps/lutim_ynh/pull/35) - 2019-05-06 + +#### Changed +* [Update to Lutim 0.11.5](https://github.com/YunoHost-Apps/lutim_ynh/pull/35) + + +## [0.11.4~ynh3](https://github.com/YunoHost-Apps/lutim_ynh/pull/33) - 2019-02-18 + +#### Changed +- [Upgrade protected_regex](https://github.com/YunoHost-Apps/lutim_ynh/pull/33) + + +## [0.11.4~ynh2](https://github.com/YunoHost-Apps/lutim_ynh/pull/31) - 2019-02-03 + +#### Added +- [Add progression bar](https://github.com/YunoHost-Apps/lutim_ynh/pull/31/commits/6b63a2ce2feca4550e55f2404e8b18f13ef58fc7) +- [Changelog & html email](https://github.com/YunoHost-Apps/lutim_ynh/pull/31/commits/746d00174c3fde429f64b514d4f113b01780e701) + +#### Fixed +- [Do not open port](https://github.com/YunoHost-Apps/lutim_ynh/pull/31/commits/0c2af89b610a420129588e62537bb248d7810777) +- [Delete dedicated user](https://github.com/YunoHost-Apps/lutim_ynh/pull/31/commits/f9d7f124f0966870004aa620ac4626dd8ebb19ff) + + +## [0.11.4~ynh1](https://github.com/YunoHost-Apps/lutim_ynh/pull/30) - 2019-01-21 + +#### Changed +* [Update to Lutim 0.11.4](https://github.com/YunoHost-Apps/lutim_ynh/pull/30/commits/0b3640581ce18b9f823baae7130ab0645f9f1e8e) +- [Update to last standart](https://github.com/YunoHost-Apps/lutim_ynh/pull/30/commits/9d37c8b9f50ef728ebe4a05031de4c70f76940b4) + + +## [0.10.4~ynh2](https://github.com/YunoHost-Apps/lutim_ynh/pull/29) - 2018-09-30 + +#### Added +* [Panel-config + actions fully tested](https://github.com/YunoHost-Apps/lutim_ynh/pull/29/commits/6cf6b6331170fd6f36575c9c06a17b11a9da66d0) diff --git a/README.md b/README.md index b2ad3ad..b9c070f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to Lutim stores images and allows you to see them, download them or share them on social networks. Images are indefinitely stored unless you request that they will be deleted at first view or after 24 hours / one week / one month / one year. -**Shipped version:** 0.11.5 +**Shipped version:** 0.11.6 ## Screenshots @@ -39,9 +39,9 @@ Not relevant. #### Supported architectures -* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/lutim%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/lutim/) -* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/lutim%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/lutim/) -* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/lutim%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/lutim/) +* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/lutim%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/lutim/) +* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/lutim%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/lutim/) +* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/lutim%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/lutim/) ## Limitations @@ -51,6 +51,7 @@ Not relevant. * Report a bug: https://github.com/YunoHost-Apps/lutim_ynh/issues * Lutim website: https://lut.im/ + * Dépôt de Lutim: https://framagit.org/fiat-tux/hat-softwares/lutim * YunoHost website: https://yunohost.org/ --- diff --git a/README_fr.md b/README_fr.md index 89e1cdc..b9816ae 100644 --- a/README_fr.md +++ b/README_fr.md @@ -13,7 +13,7 @@ Si vous n'avez pas YunoHost, merci de regarder [ici](https://yunohost.org/#/inst Lutim stocke les images et vous permet de les voir, de les télécharger ou de les partager sur les réseaux sociaux. Les images sont stockées indéfiniment à moins que vous ne demandiez qu'elles soient effacées à la première vue ou après 24 heures / une semaine / un mois / un an. -**Version embarquée:** 0.11.5 +**Version embarquée:** 0.11.6 ## Captures d'écran @@ -23,7 +23,7 @@ Les images sont stockées indéfiniment à moins que vous ne demandiez qu'elles ## Configuration -Editez le fichier `/var/www/lutim/lutim. conf` pour éditer la configuration de Lutim. +Editez le fichier `/var/www/lutim/lutim.conf` pour éditer la configuration de Lutim. Rechargez ensuite le service lutim. ## Documentation @@ -39,9 +39,9 @@ Non applicable. #### Architectures supportées. -* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/lutim%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/lutim/) -* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/lutim%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/lutim/) -* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/lutim%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/lutim/) +* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/lutim%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/lutim/) +* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/lutim%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/lutim/) +* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/lutim%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/lutim/) ## Limitations @@ -51,6 +51,7 @@ Non applicable. * Reporter un bug: https://github.com/YunoHost-Apps/lutim_ynh/issues * Site de Lutim: https://lut.im/ + * Dépôt de Lutim: https://framagit.org/fiat-tux/hat-softwares/lutim * Site de YunoHost: https://yunohost.org/ --- diff --git a/actions.json b/actions.json deleted file mode 100644 index 499d3e7..0000000 --- a/actions.json +++ /dev/null @@ -1,64 +0,0 @@ -[{ - "id": "clean_ip", - "name": "Clean old ip from database", - "command": "/bin/bash scripts/actions/clean_ip", - "user": "root", - "accepted_return_codes": [0], - "description": { - "en": "Remove obsolete IP from the database.", - "fr": "Supprime les IP obsolètes de la base de donnée." - } -}, -{ - "id": "clean_images", - "name": "Clean old images", - "command": "/bin/bash scripts/actions/clean_images", - "user": "root", - "accepted_return_codes": [0], - "description": { - "en": "Remove expired images.", - "fr": "Supprime les images dont le délai a expiré." - } -}, -{ - "id": "check_quota", - "name": "Check disk quota", - "command": "/bin/bash scripts/actions/check_quota", - "user": "root", - "accepted_return_codes": [0], - "description": { - "en": "Check the disk quota for images stored by Lutim.", - "fr": "Vérifie l'occupation de l'espace du dossier des images." - } -}, -{ - "id": "reset_default_config", - "name": "Reset the config file and restore a default one.", - "command": "/bin/bash scripts/actions/reset_default_config \"lutim.conf\"", - "user": "root", - "accepted_return_codes": [0], - "description": { - "en": "Reset the config file lutim.conf.", - "fr": "Réinitialise le fichier de configuration lutim.conf." - } -}, -{ - "id": "public_private", - "name": "Move to public or private", - "command": "/bin/bash scripts/actions/public_private", - "user": "root", - "accepted_return_codes": [0], - "description": { - "en": "Change the public access of the app." - }, - "arguments": [ - { - "name": "is_public", - "type": "boolean", - "ask": { - "en": "Is it a public app ?" - }, - "default": true - } - ] -}] diff --git a/actions.toml b/actions.toml new file mode 100644 index 0000000..fdbb619 --- /dev/null +++ b/actions.toml @@ -0,0 +1,35 @@ +[clean_ip] +name = "Clean old ip from database" +command = "/bin/bash scripts/actions/clean_ip" +accepted_return_codes = [0] +description = "Remove obsolete IP from the database." + +[clean_images] +name = "Clean old images" +command = "/bin/bash scripts/actions/clean_images" +accepted_return_codes = [0] +description = "Remove expired images." + +[check_quota] +name = "Check disk quota" +command = "/bin/bash scripts/actions/check_quota" +accepted_return_codes = [0] +description = "Check the disk quota for images stored by Lutim." + +[reset_default_config] +name = "Reset the config file and restore a default one." +command = "/bin/bash scripts/actions/reset_default_config \"lutim.conf\"" +accepted_return_codes = [0] +description = "Reset the config file lutim.conf." + +[public_private] +name = "Move to public or private" +command = "/bin/bash scripts/actions/public_private" +accepted_return_codes = [0] +description = "Change the public access of the app." + + [public_private.arguments] + [public_private.arguments.is_public] + type = "boolean" + ask = "Is it a public app ?" + default = true diff --git a/check_process b/check_process index ce69c2e..d6cc2f0 100644 --- a/check_process +++ b/check_process @@ -15,22 +15,11 @@ upgrade=1 from_commit=4c29aa94f9d9048411c6e165e122e03574fb9b8d backup_restore=1 multi_instance=0 - incorrect_path=1 port_already_use=1 (8095) change_url=1 ;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto -# Level 4: Pas de gestion des utilisateurs - Level 4=na # Level 5: https://github.com/YunoHost/package_linter/issues/36 Level 5=1 - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 ;;; Options Email= Notification=down diff --git a/conf/app.src b/conf/app.src index 6c3ab7f..ab8ab41 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://framagit.org/fiat-tux/hat-softwares/lutim/-/archive/0.11.5/lutim-0.11.5.tar.gz -SOURCE_SUM=5fd0197495da3ddcf122d0c701b62035 +SOURCE_URL=https://framagit.org/fiat-tux/hat-softwares/lutim/-/archive/0.11.6/lutim-0.11.6.tar.gz +SOURCE_SUM=092fc5b914fc8a2dd46f7101fe94c493 SOURCE_SUM_PRG=md5sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/conf/cron_lutim b/conf/cron_lutim index bba1a65..f96f975 100644 --- a/conf/cron_lutim +++ b/conf/cron_lutim @@ -1,11 +1,11 @@ # Génération des statistiques. Tous les jours, à 5h. -0 5 * * * www-data cd "__FINALPATH__" && $(which carton) exec script/lutim cron stats +0 5 * * * __APP__ cd "__FINALPATH__" && $(which carton) exec script/lutim cron stats # Suppression des adresses IP obsolètes. Tous les jours, à 6h. -0 6 * * * www-data cd "__FINALPATH__" && $(which carton) exec script/lutim cron cleanbdd +0 6 * * * __APP__ cd "__FINALPATH__" && $(which carton) exec script/lutim cron cleanbdd # Suppression des images dont le délai a expiré. Tous les jours, à 6h. -0 6 * * * www-data cd "__FINALPATH__" && $(which carton) exec script/lutim cron cleanfiles +0 6 * * * __APP__ cd "__FINALPATH__" && $(which carton) exec script/lutim cron cleanfiles # Vérification de l'occupation du dossier des images. Tous les jours, à 7h. -0 7 * * * www-data cd "__FINALPATH__" && $(which carton) exec script/lutim cron watch +0 7 * * * __APP__ cd "__FINALPATH__" && $(which carton) exec script/lutim cron watch diff --git a/conf/lutim.conf.template b/conf/lutim.conf.template index 5a6f5f5..c4c6234 100644 --- a/conf/lutim.conf.template +++ b/conf/lutim.conf.template @@ -11,6 +11,9 @@ # if you use Lutim behind a reverse proxy like Nginx, you want to set proxy to 1 # if you use Lutim directly, let it commented proxy => 1, + + # Number of worker processes + workers => __WORKERS__, }, ################ @@ -69,7 +72,6 @@ # here's an example to put the logo of your hoster # optional, no default #hosted_by => 'My super hoster Hoster logo', - hosted_by => 'Statistiques', # DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED # Lutim now checks if the X-Forwarded-Proto header is present and equal to https. diff --git a/conf/nginx.conf b/conf/nginx.conf index 72fc88c..78fb128 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,5 +1,6 @@ location __PATH__ { + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } diff --git a/config_panel.json b/config_panel.json deleted file mode 100644 index 48b376d..0000000 --- a/config_panel.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "Lutim configuration panel", - "version": "0.1", - "panel": [{ - "name": "Lutim configuration", - "id": "main", - "sections": [{ - "name": "Lutim configuration", - "id": "configuration", - "options": [{ - "name": "Force the encryption of images ?", - "id": "always_encrypt", - "type": "bool", - "default": true - }, - { - "name": "Anti-flood protection delay (seconds)", - "help": "Users won't be able to ask Lutim to download images more than one per anti_flood_delay seconds.", - "id": "antiflood", - "type": "number", - "default": 0 - }, - { - "name": "Default time limit for files", - "help": "We can't use a choices field for now. In the meantime please choose between one of this values:
None, Day, Week, Month, Year.", - "id": "delay", - "type": "text", - "//": "\"choices\" : [\"None\", \"Day\", \"Week\", \"Month\", \"Year\"]", - "default" : "Year" - }] - }, - { - "name": "Public access", - "id": "is_public", - "options": [{ - "name": "Is it a public app ?", - "id": "is_public", - "type": "bool", - "default": true - }] - }, - { - "name": "Overwriting config files", - "id": "overwrite_files", - "options": [{ - "name": "Overwrite the config file lutim.conf ?", - "help": "If the file is overwritten, a backup will be created.", - "id": "overwrite_settings", - "type": "bool", - "default": true - }, - { - "name": "Overwrite the nginx config file ?", - "help": "If the file is overwritten, a backup will be created.", - "id": "overwrite_nginx", - "type": "bool", - "default": true - }, - { - "name": "Overwrite the systemd config file ?", - "help": "If the file is overwritten, a backup will be created.", - "id": "overwrite_systemd", - "type": "bool", - "default": true - }] - }, - { - "name": "Global configuration", - "id": "global_config", - "options": [{ - "name": "Send HTML email to admin ?", - "help": "Allow app scripts to send HTML mails instead of plain text.", - "id": "email_type", - "type": "bool", - "default": true - }] - }] - } -] -} diff --git a/config_panel.toml b/config_panel.toml new file mode 100644 index 0000000..34b1565 --- /dev/null +++ b/config_panel.toml @@ -0,0 +1,63 @@ +version = "0.1" +name = "Lutim configuration panel" + +[main] +name = "Lutim configuration" + + [main.configuration] + name = "Lutim configuration" + + [main.configuration.always_encrypt] + ask = "Force the encryption of images ?" + type = "boolean" + default = true + + [main.configuration.antiflood] + ask = "Anti-flood protection delay (seconds)" + type = "number" + default = 0 + help = "Users won't be able to ask Lutim to download images more than one per anti_flood_delay seconds." + + [main.configuration.delay] + ask = "Default time limit for files" + choices = ["None", "Day", "Week", "Month", "Year"] + default = "Year" + help = "Users won't be able to ask Lutim to download images more than one per anti_flood_delay seconds." + + [main.is_public] + name = "Public access" + + [main.is_public.is_public] + ask = "Is it a public website?" + type = "boolean" + default = true + + [main.overwrite_files] + name = "Overwriting config files" + + [main.overwrite_files.overwrite_settings] + ask = "Overwrite the config file lutim.conf ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + + [main.overwrite_files.overwrite_nginx] + ask = "Overwrite the nginx config file ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + + [main.overwrite_files.overwrite_systemd] + ask = "Overwrite the systemd config file ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + + [main.global_config] + name = "Global configuration" + + [main.global_config.email_type] + ask = "Send HTML email to admin ?" + type = "boolean" + default = true + help = "Allow app scripts to send HTML mails instead of plain text." diff --git a/manifest.json b/manifest.json index 23e9ea7..d6ac6f8 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self hosting images and sharing anonymous application", "fr": "Application d'hébergement et de partage d'images anonyme" }, - "version": "0.11.5~ynh1", + "version": "0.11.6~ynh1", "url": "https://lut.im", "license": "AGPL-3.0", "maintainer": { @@ -14,7 +14,7 @@ "email": "maniackc_dev@crudelis.fr" }, "requirements": { - "yunohost": ">= 3.4" + "yunohost": ">= 3.5" }, "multi_instance": false, "services": [ diff --git a/scripts/_common.sh b/scripts/_common.sh index e74bc0f..3770c0f 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,5 +1,9 @@ #!/bin/bash +#================================================= +# PERSONAL HELPERS +#================================================= + #================================================= # BACKUP #================================================= @@ -27,25 +31,12 @@ CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant #================================================= IS_PACKAGE_CHECK () { - return $(env | grep -c container=lxc) -} - -#================================================= -# BOOLEAN CONVERTER -#================================================= - -bool_to_01 () { - local var="$1" - [ "$var" = "true" ] && var=1 - [ "$var" = "false" ] && var=0 - echo "$var" -} - -bool_to_true_false () { - local var="$1" - [ "$var" = "1" ] && var=true - [ "$var" = "0" ] && var=false - echo "$var" + if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ] + then + return 0 + else + return 1 + fi } #================================================= @@ -129,359 +120,6 @@ ynh_multimedia_addaccess () { usermod -a -G multimedia $user_name } -#================================================= - -# Create a dedicated fail2ban config (jail and filter conf files) -# -# usage: ynh_add_fail2ban_config log_file filter [max_retry [ports]] -# | arg: -l, --logpath= - Log file to be checked by fail2ban -# | arg: -r, --failregex= - Failregex to be looked for by fail2ban -# | arg: -m, --max_retry= - Maximum number of retries allowed before banning IP address - default: 3 -# | arg: -p, --ports= - Ports blocked for a banned IP address - default: http,https -ynh_add_fail2ban_config () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [l]=logpath= [r]=failregex= [m]=max_retry= [p]=ports= ) - local logpath - local failregex - local max_retry - local ports - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - max_retry=${max_retry:-3} - ports=${ports:-http,https} - - test -n "$logpath" || ynh_die "ynh_add_fail2ban_config expects a logfile path as first argument and received nothing." - test -n "$failregex" || ynh_die "ynh_add_fail2ban_config expects a failure regex as second argument and received nothing." - - finalfail2banjailconf="/etc/fail2ban/jail.d/$app.conf" - finalfail2banfilterconf="/etc/fail2ban/filter.d/$app.conf" - ynh_backup_if_checksum_is_different "$finalfail2banjailconf" 1 - ynh_backup_if_checksum_is_different "$finalfail2banfilterconf" 1 - - tee $finalfail2banjailconf <&2 - echo "WARNING${fail2ban_error#*WARNING}" >&2 - fi -} - -# Remove the dedicated fail2ban config (jail and filter conf files) -# -# usage: ynh_remove_fail2ban_config -ynh_remove_fail2ban_config () { - ynh_secure_remove "/etc/fail2ban/jail.d/$app.conf" - ynh_secure_remove "/etc/fail2ban/filter.d/$app.conf" - if [ "$(lsb_release --codename --short)" != "jessie" ]; then - systemctl reload fail2ban - else - systemctl restart fail2ban - fi -} - -#================================================= - -# Read the value of a key in a ynh manifest file -# -# usage: ynh_read_manifest manifest key -# | arg: -m, --manifest= - Path of the manifest to read -# | arg: -k, --key= - Name of the key to find -ynh_read_manifest () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [m]=manifest= [k]=manifest_key= ) - local manifest - local manifest_key - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - python3 -c "import sys, json;print(json.load(open('$manifest', encoding='utf-8'))['$manifest_key'])" -} - -# Read the upstream version from the manifest -# The version number in the manifest is defined by ~ynh -# For example : 4.3-2~ynh3 -# This include the number before ~ynh -# In the last example it return 4.3-2 -# -# usage: ynh_app_upstream_version [-m manifest] -# | arg: -m, --manifest= - Path of the manifest to read -ynh_app_upstream_version () { - declare -Ar args_array=( [m]=manifest= ) - local manifest - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - manifest="${manifest:-../manifest.json}" - if [ ! -e "$manifest" ]; then - manifest="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - version_key=$(ynh_read_manifest --manifest="$manifest" --manifest_key="version") - echo "${version_key/~ynh*/}" -} - -# Read package version from the manifest -# The version number in the manifest is defined by ~ynh -# For example : 4.3-2~ynh3 -# This include the number after ~ynh -# In the last example it return 3 -# -# usage: ynh_app_package_version [-m manifest] -# | arg: -m, --manifest= - Path of the manifest to read -ynh_app_package_version () { - declare -Ar args_array=( [m]=manifest= ) - local manifest - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - manifest="${manifest:-../manifest.json}" - if [ ! -e "$manifest" ]; then - manifest="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - version_key=$(ynh_read_manifest --manifest="$manifest" --manifest_key="version") - echo "${version_key/*~ynh/}" -} - -# Checks the app version to upgrade with the existing app version and returns: -# - UPGRADE_APP if the upstream app version has changed -# - UPGRADE_PACKAGE if only the YunoHost package has changed -# -## It stops the current script without error if the package is up-to-date -# -# This helper should be used to avoid an upgrade of an app, or the upstream part -# of it, when it's not needed -# -# To force an upgrade, even if the package is up to date, -# you have to set the variable YNH_FORCE_UPGRADE before. -# example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp -# -# usage: ynh_check_app_version_changed -ynh_check_app_version_changed () { - local force_upgrade=${YNH_FORCE_UPGRADE:-0} - local package_check=${PACKAGE_CHECK_EXEC:-0} - - # By default, upstream app version has changed - local return_value="UPGRADE_APP" - - local current_version=$(ynh_read_manifest --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" --manifest_key="version" || echo 1.0) - local current_upstream_version="$(ynh_app_upstream_version --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json")" - local update_version=$(ynh_read_manifest --manifest="../manifest.json" --manifest_key="version" || echo 1.0) - local update_upstream_version="$(ynh_app_upstream_version)" - - if [ "$current_version" == "$update_version" ] ; then - # Complete versions are the same - if [ "$force_upgrade" != "0" ] - then - echo "Upgrade forced by YNH_FORCE_UPGRADE." >&2 - unset YNH_FORCE_UPGRADE - elif [ "$package_check" != "0" ] - then - echo "Upgrade forced for package check." >&2 - else - ynh_die "Up-to-date, nothing to do" 0 - fi - elif [ "$current_upstream_version" == "$update_upstream_version" ] ; then - # Upstream versions are the same, only YunoHost package versions differ - return_value="UPGRADE_PACKAGE" - fi - echo $return_value -} - -#================================================= - -# Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started -# -# usage: ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ] -# | arg: -n, --service_name= - Name of the service to reload. Default : $app -# | arg: -a, --action= - Action to perform with systemctl. Default: start -# | arg: -l, --line_match= - Line to match - The line to find in the log to attest the service have finished to boot. -# If not defined it don't wait until the service is completely started. -# | arg: -p, --log_path= - Log file - Path to the log file. Default : /var/log/$app/$app.log -# | arg: -t, --timeout= - Timeout - The maximum time to wait before ending the watching. Default : 300 seconds. -# | arg: -e, --length= - Length of the error log : Default : 20 -ynh_systemd_action() { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [n]=service_name= [a]=action= [l]=line_match= [p]=log_path= [t]=timeout= [e]=length= ) - local service_name - local action - local line_match - local length - local log_path - local timeout - - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - local service_name="${service_name:-$app}" - local action=${action:-start} - local log_path="${log_path:-/var/log/$service_name/$service_name.log}" - local length=${length:-20} - local timeout=${timeout:-300} - - # Start to read the log - if [[ -n "${line_match:-}" ]] - then - local templog="$(mktemp)" - # Following the starting of the app in its log - if [ "$log_path" == "systemd" ] ; then - # Read the systemd journal - journalctl -u $service_name -f --since=-45 > "$templog" & - else - # Read the specified log file - tail -F -n0 "$log_path" > "$templog" & - fi - # Get the PID of the tail command - local pid_tail=$! - fi - - echo "${action^} the service $service_name" >&2 - systemctl $action $service_name \ - || ( journalctl --lines=$length -u $service_name >&2 \ - ; test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2 \ - ; false ) - - # Start the timeout and try to find line_match - if [[ -n "${line_match:-}" ]] - then - local i=0 - for i in $(seq 1 $timeout) - do - # Read the log until the sentence is found, that means the app finished to start. Or run until the timeout - if grep --quiet "$line_match" "$templog" - then - echo "The service $service_name has correctly started." >&2 - break - fi - echo -n "." >&2 - sleep 1 - done - if [ $i -eq $timeout ] - then - echo "The service $service_name didn't fully started before the timeout." >&2 - echo "Please find here an extract of the end of the log of the service $service_name:" - journalctl --lines=$length -u $service_name >&2 - test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2 - fi - - echo "" - ynh_clean_check_starting - fi -} - -# Clean temporary process and file used by ynh_check_starting -# (usually used in ynh_clean_setup scripts) -# -# usage: ynh_clean_check_starting -ynh_clean_check_starting () { - # Stop the execution of tail. - kill -s 15 $pid_tail 2>&1 - ynh_secure_remove "$templog" 2>&1 -} - -#================================================= - -# Print a message as INFO and show progression during an app script -# -# usage: ynh_script_progression --message=message [--weight=weight] [--time] -# | arg: -m, --message= - The text to print -# | arg: -w, --weight= - The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script. -# | arg: -t, --time= - Print the execution time since the last call to this helper. Especially usefull to define weights. -# | arg: -l, --last= - Use for the last call of the helper, to fill te progression bar. -increment_progression=0 -previous_weight=0 -# Define base_time when the file is sourced -base_time=$(date +%s) -ynh_script_progression () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [m]=message= [w]=weight= [t]=time [l]=last ) - local message - local weight - local time - local last - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - weight=${weight:-1} - time=${time:-0} - last=${last:-0} - - # Get execution time since the last $base_time - local exec_time=$(( $(date +%s) - $base_time )) - base_time=$(date +%s) - - # Get the number of occurrences of 'ynh_script_progression' in the script. Except those are commented. - local helper_calls="$(grep --count "^[^#]*ynh_script_progression" $0)" - # Get the number of call with a weight value - local weight_calls=$(grep --perl-regexp --count "^[^#]*ynh_script_progression.*(--weight|-w )" $0) - - # Get the weight of each occurrences of 'ynh_script_progression' in the script using --weight - local weight_valuesA="$(grep --perl-regexp "^[^#]*ynh_script_progression.*--weight" $0 | sed 's/.*--weight[= ]\([[:digit:]].*\)/\1/g')" - # Get the weight of each occurrences of 'ynh_script_progression' in the script using -w - local weight_valuesB="$(grep --perl-regexp "^[^#]*ynh_script_progression.*-w " $0 | sed 's/.*-w[= ]\([[:digit:]].*\)/\1/g')" - # Each value will be on a different line. - # Remove each 'end of line' and replace it by a '+' to sum the values. - local weight_values=$(( $(echo "$weight_valuesA" | tr '\n' '+') + $(echo "$weight_valuesB" | tr '\n' '+') 0 )) - - # max_progression is a total number of calls to this helper. - # Less the number of calls with a weight value. - # Plus the total of weight values - local max_progression=$(( $helper_calls - $weight_calls + $weight_values )) - - # Increment each execution of ynh_script_progression in this script by the weight of the previous call. - increment_progression=$(( $increment_progression + $previous_weight )) - # Store the weight of the current call in $previous_weight for next call - previous_weight=$weight - - # Set the scale of the progression bar - local scale=20 - # progress_string(1,2) should have the size of the scale. - local progress_string1="####################" - local progress_string0="...................." - - # Reduce $increment_progression to the size of the scale - if [ $last -eq 0 ] - then - local effective_progression=$(( $increment_progression * $scale / $max_progression )) - # If last is specified, fill immediately the progression_bar - else - local effective_progression=$scale - fi - - # Build $progression_bar from progress_string(1,2) according to $effective_progression - local progression_bar="${progress_string1:0:$effective_progression}${progress_string0:0:$(( $scale - $effective_progression ))}" - - local print_exec_time="" - if [ $time -eq 1 ] - then - print_exec_time=" [$(date +%Hh%Mm,%Ss --date="0 + $exec_time sec")]" - fi - - ynh_print_info "[$progression_bar] > ${message}${print_exec_time}" -} - #================================================= # EXPERIMENTAL HELPERS #================================================= @@ -660,6 +298,8 @@ ynh_maintenance_mode_ON () { domain=$(ynh_app_setting_get $app domain) fi + mkdir -p /var/www/html/ + # Create an html to serve as maintenance notice echo " @@ -730,128 +370,381 @@ ynh_maintenance_mode_OFF () { #================================================= -# Download and check integrity of a file from app.src_file +# Create a changelog for an app after an upgrade from the file CHANGELOG.md. # -# The file conf/app.src_file need to contains: +# usage: ynh_app_changelog [--format=markdown/html/plain] [--output=changelog_file] --changelog=changelog_source] +# | arg: -f --format= - Format in which the changelog will be printed +# markdown: Default format. +# html: Turn urls into html format. +# plain: Plain text changelog +# | arg: -o --output= - Output file for the changelog file (Default ./changelog) +# | arg: -c --changelog= - CHANGELOG.md source (Default ../CHANGELOG.md) # -# FILE_URL=Address to download the file -# FILE_SUM=Control sum -# # (Optional) Program to check the integrity (sha256sum, md5sum...) -# # default: sha256 -# FILE_SUM_PRG=sha256 -# # (Optionnal) Name of the local archive (offline setup support) -# # default: Name of the downloaded file. -# FILENAME=example.deb -# -# usage: ynh_download_file --dest_dir="/destination/directory" [--source_id=myfile] -# | arg: -d, --dest_dir= - Directory where to download the file -# | arg: -s, --source_id= - Name of the source file 'app.src_file' if it isn't '$app' -ynh_download_file () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [d]=dest_dir= [s]=source_id= ) - local dest_dir - local source_id - # Manage arguments with getopts - ynh_handle_getopts_args "$@" +# The changelog is printed into the file ./changelog and ./changelog_lite +ynh_app_changelog () { + # Declare an array to define the options of this helper. + local legacy_args=foc + declare -Ar args_array=( [f]=format= [o]=output= [c]=changelog= ) + local format + local output + local changelog + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + format=${format:-markdown} + output=${output:-changelog} + changelog=${changelog:-../CHANGELOG.md} - source_id=${source_id:-app} # If the argument is not given, source_id equals "$app" + local original_changelog="$changelog" + local temp_changelog="changelog_temp" + local final_changelog="$output" - # Load value from configuration file (see above for a small doc about this file - # format) - local src_file="$YNH_CWD/../conf/${source_id}.src_file" - # If the src_file doesn't exist, use the backup path instead, with a "settings" directory - if [ ! -e "$src_file" ] - then - src_file="$YNH_CWD/../settings/conf/${source_id}.src_file" - fi - local file_url=$(grep 'FILE_URL=' "$src_file" | cut -d= -f2-) - local file_sum=$(grep 'FILE_SUM=' "$src_file" | cut -d= -f2-) - local file_sumprg=$(grep 'FILE_SUM_PRG=' "$src_file" | cut -d= -f2-) - local filename=$(grep 'FILENAME=' "$src_file" | cut -d= -f2-) + if [ ! -n "$original_changelog" ] + then + echo "No changelog available..." > "$final_changelog" + echo "No changelog available..." > "${final_changelog}_lite" + return 0 + fi - # Default value - file_sumprg=${file_sumprg:-sha256sum} - if [ "$filename" = "" ] ; then - filename="$(basename "$file_url")" - fi - local local_src="/opt/yunohost-apps-src/${YNH_APP_ID}/${filename}" + local current_version=$(ynh_read_manifest --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" --manifest_key="version") + local update_version=$(ynh_read_manifest --manifest="../manifest.json" --manifest_key="version") - if test -e "$local_src" - then # Use the local source file if it is present - cp $local_src $filename - else # If not, download the source - local out=`wget -nv -O $filename $file_url 2>&1` || ynh_print_err $out - fi + # Get the line of the version to update to into the changelog + local update_version_line=$(grep --max-count=1 --line-number "^## \[$update_version" "$original_changelog" | cut -d':' -f1) + # If there's no entry for this version yet into the changelog + # Get the first available version + if [ -z "$update_version_line" ] + then + update_version_line=$(grep --max-count=1 --line-number "^##" "$original_changelog" | cut -d':' -f1) + fi - # Check the control sum - echo "${file_sum} ${filename}" | ${file_sumprg} -c --status \ - || ynh_die "Corrupt file" + # Get the length of the complete changelog. + local changelog_length=$(wc --lines "$original_changelog" | awk '{print $1}') + # Cut the file before the version to update to. + tail --lines=$(( $changelog_length - $update_version_line + 1 )) "$original_changelog" > "$temp_changelog" - # Create the destination directory, if it's not already. - mkdir -p "$dest_dir" + # Get the length of the troncated changelog. + changelog_length=$(wc --lines "$temp_changelog" | awk '{print $1}') + # Get the line of the current version into the changelog + # Keep only the last line found + local current_version_line=$(grep --line-number "^## \[$current_version" "$temp_changelog" | cut -d':' -f1 | tail --lines=1) + # If there's no entry for this version into the changelog + # Get the last available version + if [ -z "$current_version_line" ] + then + current_version_line=$(grep --line-number "^##" "$original_changelog" | cut -d':' -f1 | tail --lines=1) + fi + # Cut the file before the current version. + # Then grep the previous version into the changelog to get the line number of the previous version + local previous_version_line=$(tail --lines=$(( $changelog_length - $current_version_line )) \ + "$temp_changelog" | grep --max-count=1 --line-number "^## " | cut -d':' -f1) + # If there's no previous version into the changelog + # Go until the end of the changelog + if [ -z "$previous_version_line" ] + then + previous_version_line=$changelog_length + fi - # Move the file to its destination - mv $filename $dest_dir + # Cut the file after the previous version to keep only the changelog between the current version and the version to update to. + head --lines=$(( $current_version_line + $previous_version_line - 1 )) "$temp_changelog" | tee "$final_changelog" + + if [ "$format" = "html" ] + then + # Replace markdown links by html links + ynh_replace_string --match_string="\[\(.*\)\](\(.*\)))" --replace_string="\1)" --target_file="$final_changelog" + ynh_replace_string --match_string="\[\(.*\)\](\(.*\))" --replace_string="\1" --target_file="$final_changelog" + elif [ "$format" = "plain" ] + then + # Change title format. + ynh_replace_string --match_string="^##.*\[\(.*\)\](\(.*\)) - \(.*\)$" --replace_string="## \1 (\3) - \2" --target_file="$final_changelog" + # Change modifications lines format. + ynh_replace_string --match_string="^\([-*]\).*\[\(.*\)\]\(.*\)" --replace_string="\1 \2 \3" --target_file="$final_changelog" + fi + # else markdown. As the file is already in markdown, nothing to do. + + # Keep only important changes into the changelog + # Remove all minor changes + sed '/^-/d' "$final_changelog" > "${final_changelog}_lite" + # Remove all blank lines (to keep a clear workspace) + sed --in-place '/^$/d' "${final_changelog}_lite" + # Add a blank line at the end + echo "" >> "${final_changelog}_lite" + + # Clean titles if there's no significative changes + local line + local previous_line="" + while read line <&3 + do + if [ -n "$previous_line" ] + then + # Remove the line if it's a title or a blank line, and the previous one was a title as well. + if ( [ "${line:0:1}" = "#" ] || [ ${#line} -eq 0 ] ) && [ "${previous_line:0:1}" = "#" ] + then + ynh_replace_special_string --match_string="${previous_line//[/.}" --replace_string="" --target_file="${final_changelog}_lite" + fi + fi + previous_line="$line" + done 3< "${final_changelog}_lite" + + # Remove all blank lines again + sed --in-place '/^$/d' "${final_changelog}_lite" + + # Restore changelog format with blank lines + ynh_replace_string --match_string="^##.*" --replace_string="\n\n&\n" --target_file="${final_changelog}_lite" + # Remove the 2 first blank lines + sed --in-place '1,2d' "${final_changelog}_lite" + # Add a blank line at the end + echo "" >> "${final_changelog}_lite" + + # If changelog are empty, add an info + if [ $(wc --words "$final_changelog" | awk '{print $1}') -eq 0 ] + then + echo "No changes from the changelog..." > "$final_changelog" + fi + if [ $(wc --words "${final_changelog}_lite" | awk '{print $1}') -eq 0 ] + then + echo "No significative changes from the changelog..." > "${final_changelog}_lite" + fi } #================================================= -# Create a changelog for an app after an upgrade. +# Check the amount of available RAM # -# The changelog is printed into the file ./changelog for the time of the upgrade. -# -# In order to create a changelog, ynh_app_changelog will get info from /etc/yunohost/apps/$app/status.json -# In order to find the current commit use by the app. -# The remote repository, and the branch. -# The changelog will be only the commits since the current revision. -# -# Because of the need of those info, ynh_app_changelog works only -# with apps that have been installed from a list. -# -# usage: ynh_app_changelog -ynh_app_changelog () { - get_value_from_settings () - { - local value="$1" - # Extract a value from the status.json file of an installed app. +# usage: ynh_check_ram [--required=RAM required in Mb] [--no_swap|--only_swap] [--free_ram] +# | arg: -r, --required= - Amount of RAM required in Mb. The helper will return 0 is there's enough RAM, or 1 otherwise. +# If --required isn't set, the helper will print the amount of RAM, in Mb. +# | arg: -s, --no_swap - Ignore swap +# | arg: -o, --only_swap - Ignore real RAM, consider only swap. +# | arg: -f, --free_ram - Count only free RAM, not the total amount of RAM available. +ynh_check_ram () { + # Declare an array to define the options of this helper. + declare -Ar args_array=( [r]=required= [s]=no_swap [o]=only_swap [f]=free_ram ) + local required + local no_swap + local only_swap + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + required=${required:-} + no_swap=${no_swap:-0} + only_swap=${only_swap:-0} - grep "$value\": \"" /etc/yunohost/apps/$app/status.json | sed "s/.*$value\": \"\([^\"]*\).*/\1/" - } + local total_ram=$(vmstat --stats --unit M | grep "total memory" | awk '{print $1}') + local total_swap=$(vmstat --stats --unit M | grep "total swap" | awk '{print $1}') + local total_ram_swap=$(( total_ram + total_swap )) - local current_revision="$(get_value_from_settings revision)" - local repo="$(get_value_from_settings url)" - local branch="$(get_value_from_settings branch)" - # ynh_app_changelog works only with an app installed from a list. - if [ -z "$current_revision" ] || [ -z "$repo" ] || [ -z "$branch" ] + local free_ram=$(vmstat --stats --unit M | grep "free memory" | awk '{print $1}') + local free_swap=$(vmstat --stats --unit M | grep "free swap" | awk '{print $1}') + local free_ram_swap=$(( free_ram + free_swap )) + + # Use the total amount of ram + local ram=$total_ram_swap + if [ $free_ram -eq 1 ] then - ynh_print_warn "Unable to build the changelog..." - touch changelog - return 0 + # Use the total amount of free ram + ram=$free_ram_swap + if [ $no_swap -eq 1 ] + then + # Use only the amount of free ram + ram=$free_ram + elif [ $only_swap -eq 1 ] + then + # Use only the amount of free swap + ram=$free_swap + fi + else + if [ $no_swap -eq 1 ] + then + # Use only the amount of free ram + ram=$total_ram + elif [ $only_swap -eq 1 ] + then + # Use only the amount of free swap + ram=$total_swap + fi fi - # Fetch the history of the repository, without cloning it - mkdir git_history - (cd git_history - ynh_exec_warn_less git init - ynh_exec_warn_less git remote add -f origin $repo - # Get the line of the current commit of the installed app in the history. - local line_to_head=$(git log origin/$branch --pretty=oneline | grep --line-number "$current_revision" | cut -d':' -f1) - # Cut the history before the current commit, to keep only newer commits. - # Then use sed to reorganise each lines and have a nice list of commits since the last upgrade. - # This list is redirected into the file changelog - git log origin/$branch --pretty=oneline | head --lines=$(($line_to_head-1)) | sed 's/^\([[:alnum:]]*\)\(.*\)/*(\1) -> \2/g' > ../changelog) - # Remove 'Merge pull request' commits - sed -i '/Merge pull request #[[:digit:]]* from/d' changelog - # As well as conflict resolving commits - sed -i '/Merge branch .* into/d' changelog + if [ -n "$required" ] + then + # Return 1 if the amount of ram isn't enough. + if [ $ram -lt $required ] + then + return 1 + else + return 0 + fi - # Get the value of admin_mail_html - admin_mail_html=$(ynh_app_setting_get $app admin_mail_html) - admin_mail_html="${admin_mail_html:-0}" - - # If a html email is required. Apply html to the changelog. - if [ "$admin_mail_html" -eq 1 ] - then - sed -in-place "s@\*(\([[:alnum:]]*\)) -> \(.*\)@* __URL_TAG1__\2__URL_TAG2__${repo}/commit/\1__URL_TAG3__@g" changelog - fi + # If no RAM is required, return the amount of available ram. + else + echo $ram + fi +} + +#================================================= + +# Define the values to configure php-fpm +# +# usage: ynh_get_scalable_phpfpm --usage=usage --footprint=footprint [--print] +# | arg: -f, --footprint - Memory footprint of the service (low/medium/high). +# low - Less than 20Mb of ram by pool. +# medium - Between 20Mb and 40Mb of ram by pool. +# high - More than 40Mb of ram by pool. +# Or specify exactly the footprint, the load of the service as Mb by pool instead of having a standard value. +# To have this value, use the following command and stress the service. +# watch -n0.5 ps -o user,cmd,%cpu,rss -u APP +# +# | arg: -u, --usage - Expected usage of the service (low/medium/high). +# low - Personal usage, behind the sso. +# medium - Low usage, few people or/and publicly accessible. +# high - High usage, frequently visited website. +# +# | arg: -p, --print - Print the result +# +# +# +# The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM. +# So it will be used to defined 'pm.max_children' +# A lower value for the footprint will allow more children for 'pm.max_children'. And so for +# 'pm.start_servers', 'pm.min_spare_servers' and 'pm.max_spare_servers' which are defined from the +# value of 'pm.max_children' +# NOTE: 'pm.max_children' can't exceed 4 times the number of processor's cores. +# +# The usage value will defined the way php will handle the children for the pool. +# A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the +# service is used, otherwise no child will stay alive. This config gives the lower footprint when the +# service is idle. But will use more proc since it has to start a child as soon it's used. +# Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children +# equal to pm.min_spare_servers will stay alive. So the service can be quick to answer to any request. +# The number of children can grow if needed. The footprint can stay low if the service is idle, but +# not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few +# children already available. +# Set as 'high', the process manager will be set at 'static'. There will be always as many children as +# 'pm.max_children', the footprint is important (but will be set as maximum a quarter of the maximum +# RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many +# children ready to answer. +ynh_get_scalable_phpfpm () { + local legacy_args=ufp + # Declare an array to define the options of this helper. + declare -Ar args_array=( [u]=usage= [f]=footprint= [p]=print ) + local usage + local footprint + local print + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + # Set all characters as lowercase + footprint=${footprint,,} + usage=${usage,,} + print=${print:-0} + + if [ "$footprint" = "low" ] + then + footprint=20 + elif [ "$footprint" = "medium" ] + then + footprint=35 + elif [ "$footprint" = "high" ] + then + footprint=50 + fi + + # Define the way the process manager handle child processes. + if [ "$usage" = "low" ] + then + php_pm=ondemand + elif [ "$usage" = "medium" ] + then + php_pm=dynamic + elif [ "$usage" = "high" ] + then + php_pm=static + else + ynh_die --message="Does not recognize '$usage' as an usage value." + fi + + # Get the total of RAM available, except swap. + local max_ram=$(ynh_check_ram --no_swap) + + less0() { + # Do not allow value below 1 + if [ $1 -le 0 ] + then + echo 1 + else + echo $1 + fi + } + + # Define pm.max_children + # The value of pm.max_children is the total amount of ram divide by 2 and divide again by the footprint of a pool for this app. + # So if php-fpm start the maximum of children, it won't exceed half of the ram. + php_max_children=$(( $max_ram / 2 / $footprint )) + # If process manager is set as static, use half less children. + # Used as static, there's always as many children as the value of pm.max_children + if [ "$php_pm" = "static" ] + then + php_max_children=$(( $php_max_children / 2 )) + fi + php_max_children=$(less0 $php_max_children) + + # To not overload the proc, limit the number of children to 4 times the number of cores. + local core_number=$(nproc) + local max_proc=$(( $core_number * 4 )) + if [ $php_max_children -gt $max_proc ] + then + php_max_children=$max_proc + fi + + if [ "$php_pm" = "dynamic" ] + then + # Define pm.start_servers, pm.min_spare_servers and pm.max_spare_servers for a dynamic process manager + php_min_spare_servers=$(( $php_max_children / 8 )) + php_min_spare_servers=$(less0 $php_min_spare_servers) + + php_max_spare_servers=$(( $php_max_children / 2 )) + php_max_spare_servers=$(less0 $php_max_spare_servers) + + php_start_servers=$(( $php_min_spare_servers + ( $php_max_spare_servers - $php_min_spare_servers ) /2 )) + php_start_servers=$(less0 $php_start_servers) + else + php_min_spare_servers=0 + php_max_spare_servers=0 + php_start_servers=0 + fi + + if [ $print -eq 1 ] + then + ynh_debug --message="Footprint=${footprint}Mb by pool." + ynh_debug --message="Process manager=$php_pm" + ynh_debug --message="Max RAM=${max_ram}Mb" + if [ "$php_pm" != "static" ]; then + ynh_debug --message="\nMax estimated footprint=$(( $php_max_children * $footprint ))" + ynh_debug --message="Min estimated footprint=$(( $php_min_spare_servers * $footprint ))" + fi + if [ "$php_pm" = "dynamic" ]; then + ynh_debug --message="Estimated average footprint=$(( $php_max_spare_servers * $footprint ))" + elif [ "$php_pm" = "static" ]; then + ynh_debug --message="Estimated footprint=$(( $php_max_children * $footprint ))" + fi + ynh_debug --message="\nRaw php-fpm values:" + ynh_debug --message="pm.max_children = $php_max_children" + if [ "$php_pm" = "dynamic" ]; then + ynh_debug --message="pm.start_servers = $php_start_servers" + ynh_debug --message="pm.min_spare_servers = $php_min_spare_servers" + ynh_debug --message="pm.max_spare_servers = $php_max_spare_servers" + fi + fi +} + +#================================================= + +# Execute a command as another user +# usage: exec_as USER COMMAND [ARG ...] +exec_as() { + local USER=$1 + shift 1 + + if [[ $USER = $(whoami) ]]; then + eval "$@" + else + sudo -u "$USER" "$@" + fi } diff --git a/scripts/actions/check_quota b/scripts/actions/check_quota index 627dab3..bd5d58b 100755 --- a/scripts/actions/check_quota +++ b/scripts/actions/check_quota @@ -12,11 +12,10 @@ source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} -final_path=$(ynh_app_setting_get $app final_path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # CHECK IF ARGUMENTS ARE CORRECT @@ -31,9 +30,9 @@ final_path=$(ynh_app_setting_get $app final_path) #================================================= # CHECK THE DISK QUOTA FOR IMAGES STORED BY LUTIM #================================================= -ynh_script_progression --message="Check the disk quota for images stored by lutim" --weight=9 +ynh_script_progression --message="Checking the disk quota for images stored by lutim..." --weight=9 -(cd "$final_path" && $(which carton) exec script/lutim cron watch) +(cd "$final_path" && exec_as $app $(which carton) exec script/lutim cron watch) #================================================= # END OF SCRIPT diff --git a/scripts/actions/clean_images b/scripts/actions/clean_images index 098fc70..b671415 100755 --- a/scripts/actions/clean_images +++ b/scripts/actions/clean_images @@ -12,11 +12,10 @@ source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} -final_path=$(ynh_app_setting_get $app final_path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # CHECK IF ARGUMENTS ARE CORRECT @@ -31,9 +30,9 @@ final_path=$(ynh_app_setting_get $app final_path) #================================================= # REMOVE EXPIRED IMAGES #================================================= -ynh_script_progression --message="Remove expired images" --weight=9 +ynh_script_progression --message="Removing expired images..." --weight=9 -(cd "$final_path" && $(which carton) exec script/lutim cron cleanfiles) +(cd "$final_path" && exec_as $app $(which carton) exec script/lutim cron cleanfiles) #================================================= # END OF SCRIPT diff --git a/scripts/actions/clean_ip b/scripts/actions/clean_ip index d40adbf..8e7db98 100755 --- a/scripts/actions/clean_ip +++ b/scripts/actions/clean_ip @@ -12,11 +12,10 @@ source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} -final_path=$(ynh_app_setting_get $app final_path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # CHECK IF ARGUMENTS ARE CORRECT @@ -31,9 +30,9 @@ final_path=$(ynh_app_setting_get $app final_path) #================================================= # REMOVE OBSOLETE IP FROM THE DATABASE #================================================= -ynh_script_progression --message="Remove obsolete ip from the database" --weight=9 +ynh_script_progression --message="Removing obsolete ip from the database..." --weight=9 -(cd "$final_path" && $(which carton) exec script/lutim cron cleanbdd) +(cd "$final_path" && exec_as $app $(which carton) exec script/lutim cron cleanbdd) #================================================= # END OF SCRIPT diff --git a/scripts/actions/public_private b/scripts/actions/public_private index bfb74ae..1d166c3 100755 --- a/scripts/actions/public_private +++ b/scripts/actions/public_private @@ -12,14 +12,13 @@ source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" # Get is_public is_public=${YNH_ACTION_IS_PUBLIC} app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) #================================================= # CHECK IF ARGUMENTS ARE CORRECT @@ -29,11 +28,11 @@ path_url=$(ynh_app_setting_get $app path) # CHECK IF AN ACTION HAS TO BE DONE #================================================= -is_public_old=$(ynh_app_setting_get $app is_public) +is_public_old=$(ynh_app_setting_get --app=$app --key=is_public) if [ $is_public -eq $is_public_old ] then - ynh_die "is_public is already set as $is_public." 0 + ynh_die --message="is_public is already set as $is_public." --ret_code=0 fi #================================================= @@ -41,12 +40,13 @@ fi #================================================= # MOVE TO PUBLIC OR PRIVATE #================================================= + if [ $is_public -eq 0 ]; then public_private="private" else public_private="public" fi -ynh_script_progression --message="Move the application to $public_private" --weight=3 +ynh_script_progression --message="Moving the application to $public_private..." --weight=3 if [ $is_public -eq 0 ] then @@ -57,23 +57,24 @@ then fi # Modify the domain to be used in a regex domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set $app protected_regex "$domain_regex$path_url/stats$","$domain_regex$path_url/manifest.webapp$","$domain_regex$path_url/$","$domain_regex$path_url/d/.*$","$domain_regex$path_url/m/.*$" + ynh_app_setting_set --app=$app --key=protected_regex --value="$domain_regex$path_url/stats/?$","$domain_regex$path_url/manifest.webapp/?$","$domain_regex$path_url/?$","$domain_regex$path_url/[d-m]/.*$" else - ynh_app_setting_delete $app protected_regex + ynh_app_setting_delete --app=$app --key=protected_regex fi +ynh_script_progression --message="Upgrading SSOwat configuration..." # Regen ssowat configuration yunohost app ssowatconf # Update the config of the app -ynh_app_setting_set $app is_public $is_public +ynh_app_setting_set --app=$app --key=is_public --value=$is_public #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reload nginx" +ynh_script_progression --message="Reloading nginx web server..." -ynh_systemd_action --action=reload --service_name=nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # END OF SCRIPT diff --git a/scripts/actions/reset_default_config b/scripts/actions/reset_default_config index 87ad555..d68db89 100755 --- a/scripts/actions/reset_default_config +++ b/scripts/actions/reset_default_config @@ -12,15 +12,14 @@ source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" --weight=3 app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} -final_path=$(ynh_app_setting_get $app final_path) -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -port=$(ynh_app_setting_get $app port) -always_encrypt=$(ynh_app_setting_get $app always_encrypt) -secret=$(ynh_app_setting_get $app secret) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +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) +always_encrypt=$(ynh_app_setting_get --app=$app --key=always_encrypt) +secret=$(ynh_app_setting_get --app=$app --key=secret) #================================================= # SORT OUT THE CONFIG FILE TO HANDLE @@ -37,10 +36,10 @@ fi #================================================= # RESET THE CONFIG FILE #================================================= -ynh_script_progression --message="Reset the config file $config_file" --weight=9 +ynh_script_progression --message="Resetting the config file $config_file..." --weight=9 # Verify the checksum and backup the file if it's different -ynh_backup_if_checksum_is_different "$config_file" +ynh_backup_if_checksum_is_different --file="$config_file" if [ "$file" = "lutim.conf" ] then @@ -48,17 +47,19 @@ then cp /etc/yunohost/apps/$app/conf/lutim.conf.template "$config_file" # Recreate the default config - ynh_replace_string "__DOMAIN__" "$domain" "$config_file" - ynh_replace_string "__PATH__" "$path_url" "$config_file" - ynh_replace_string "__PORT__" "$port" "$config_file" - ynh_replace_string "__ENCRYPT__" "$always_encrypt" "$config_file" - ynh_replace_string "__SECRET__" "$secret" "$config_file" + ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$config_file" + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file="$config_file" + ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$config_file" + ynh_replace_string --match_string="__ENCRYPT__" --replace_string="$always_encrypt" --target_file="$config_file" + ynh_replace_string --match_string="__SECRET__" --replace_string="$secret" --target_file="$config_file" + # Set the number of process for Lutim to twice the number of CPU core. + ynh_replace_string --match_string="__WORKERS__" --replace_string="$(( $(nproc) * 2 ))" --target_file="$final_path/lutim.conf" fi # Calculate and store the config file checksum into the app settings -ynh_store_file_checksum "$config_file" +ynh_store_file_checksum --file="$config_file" -ynh_script_progression --message="Restart Lutim" --weight=5 +ynh_script_progression --message="Restarting Lutim..." --weight=5 # Wait for lutim to be fully started ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path="/var/log/$app/production.log" --timeout="120" diff --git a/scripts/backup b/scripts/backup index 5b32012..d6be7f4 100644 --- a/scripts/backup +++ b/scripts/backup @@ -19,55 +19,55 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Load settings" --weight=2 +ynh_script_progression --message="Loading installation settings..." --weight=2 app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get $app final_path) -domain=$(ynh_app_setting_get $app domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) #================================================= # STANDARD BACKUP STEPS #================================================= # BACKUP THE APP MAIN DIR #================================================= -ynh_script_progression --message="Backup the app main dir" --weight=4 +ynh_script_progression --message="Backing up the main app directory..." CHECK_SIZE "$final_path" -ynh_backup "$final_path" +ynh_backup --src_path="$final_path" #================================================= # BACKUP NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Backup nginx configuration" +ynh_script_progression --message="Backing up nginx web server configuration..." -ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # SPECIFIC BACKUP #================================================= # BACKUP LOGROTATE #================================================= -ynh_script_progression --message="Backup logrotate configuration" +ynh_script_progression --message="Backing up logrotate configuration" -ynh_backup "/etc/logrotate.d/$app" +ynh_backup --src_path="/etc/logrotate.d/$app" #================================================= # BACKUP SYSTEMD #================================================= -ynh_script_progression --message="Backup systemd configuration" +ynh_script_progression --message="Backing up systemd configuration" -ynh_backup "/etc/systemd/system/$app.service" +ynh_backup --src_path="/etc/systemd/system/$app.service" #================================================= # BACKUP A CRON FILE #================================================= -ynh_script_progression --message="Backup cron file" +ynh_script_progression --message="Backing up cron file" -ynh_backup "/etc/cron.d/$app" +ynh_backup --src_path="/etc/cron.d/$app" #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Backup script completed. Please wait for YunoHost to create the backup." --last +ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last diff --git a/scripts/change_url b/scripts/change_url index 1449a94..701a082 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -12,7 +12,6 @@ source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" old_domain=$YNH_APP_OLD_DOMAIN old_path=$YNH_APP_OLD_PATH @@ -25,26 +24,33 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Load settings" --weight=2 +ynh_script_progression --message="Loading installation settings..." --weight=2 -final_path=$(ynh_app_setting_get $app final_path) -is_public=$(ynh_app_setting_get $app is_public) -port=$(ynh_app_setting_get $app port) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +port=$(ynh_app_setting_get --app=$app --key=port) #================================================= -# CHECK THE SYNTAX OF THE PATHS +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_script_progression --message="Check the syntax of the paths" +ynh_script_progression --message="Backing up the app before changing its url (may take a while)..." --weight=20 -test -n "$old_path" || old_path="/" -test -n "$new_path" || new_path="/" -new_path=$(ynh_normalize_url_path $new_path) -old_path=$(ynh_normalize_url_path $old_path) +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # 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 #================================================= # ACTIVATE MAINTENANCE MODE #================================================= -ynh_script_progression --message="Activate maintenance mode" +ynh_script_progression --message="Activating maintenance mode..." path_url=$old_path domain=$old_domain @@ -82,7 +88,7 @@ ynh_abort_if_errors #================================================= # MODIFY URL IN NGINX CONF #================================================= -ynh_script_progression --message="Modify url in nginx configuration" --weight=2 +ynh_script_progression --message="Updating nginx web server configuration..." --weight=2 nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf @@ -90,15 +96,12 @@ nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf if [ $change_path -eq 1 ] then # Make a backup of the original nginx config file if modified - ynh_backup_if_checksum_is_different "$nginx_conf_path" + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" # Set global variables for nginx helper domain="$old_domain" path_url="$new_path" - # Store path_url setting - ynh_app_setting_set $app path_url "$path_url" - # Create a dedicated nginx config ynh_add_nginx_config fi @@ -107,17 +110,17 @@ fi if [ $change_domain -eq 1 ] then # Delete file checksum for the old conf file location - ynh_delete_file_checksum "$nginx_conf_path" + 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 "/etc/nginx/conf.d/$new_domain.d/$app.conf" + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" fi #================================================= # UPDATE SSOWAT #================================================= -ynh_script_progression --message="Reconfigure SSOwat" +ynh_script_progression --message="Reconfiguring SSOwat..." if [ $is_public -eq 0 ] then @@ -128,7 +131,7 @@ then fi # Modify the domain to be used in a regex domain_regex=$(echo "$new_domain" | sed 's@-@.@g') - ynh_app_setting_set $app protected_regex "$domain_regex$new_path/stats/?$","$domain_regex$new_path/manifest.webapp/?$","$domain_regex$new_path/?$","$domain_regex$new_path/[d-m]/.*$" + ynh_app_setting_set --app=$app --key=protected_regex --value="$domain_regex$new_path/stats/?$","$domain_regex$new_path/manifest.webapp/?$","$domain_regex$new_path/?$","$domain_regex$new_path/[d-m]/.*$" fi #================================================= @@ -137,21 +140,21 @@ fi # REPLACE THE PATH IN THE CONFIG OF LUTIM #================================================= -ynh_replace_string "\(^ *prefix.*=> '\).*" "\1$new_path'," "$final_path/lutim.conf" +ynh_replace_string --match_string="\(^ *prefix.*=> '\).*" --replace_string="\1$new_path'," --target_file="$final_path/lutim.conf" #================================================= # GENERIC FINALISATION #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reload nginx" --weight=2 +ynh_script_progression --message="Reloading nginx web server..." -ynh_systemd_action --action=reload --service_name=nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # START AND CHECK LUTIM BOOTING #================================================= -ynh_script_progression --message="Restart Lutim" --weight=3 +ynh_script_progression --message="Restarting Lutim..." --weight=3 # Wait for lutim to be fully started ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path="/var/log/$app/production.log" --timeout="120" @@ -159,7 +162,7 @@ ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path=" #================================================= # DEACTIVE MAINTENANCE MODE #================================================= -ynh_script_progression --message="Disable maintenance mode" --weight=5 +ynh_script_progression --message="Disabling maintenance mode..." path_url=$old_path domain=$old_domain @@ -169,4 +172,4 @@ ynh_maintenance_mode_OFF # END OF SCRIPT #================================================= -ynh_script_progression --message="Change of url completed" --last +ynh_script_progression --message="Change of URL completed for $app" --last diff --git a/scripts/config b/scripts/config index c7a776c..aa830ef 100644 --- a/scripts/config +++ b/scripts/config @@ -15,7 +15,7 @@ source /usr/share/yunohost/helpers app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} -final_path=$(ynh_app_setting_get $app final_path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # SPECIFIC CODE @@ -42,7 +42,6 @@ get_config_value() { # always_encrypt old_always_encrypt="$(get_config_value always_encrypt)" -old_always_encrypt=$(bool_to_true_false $old_always_encrypt) always_encrypt="${YNH_CONFIG_MAIN_CONFIGURATION_ALWAYS_ENCRYPT:-$old_always_encrypt}" # antiflood old_antiflood="$(get_config_value anti_flood_delay)" @@ -63,28 +62,23 @@ fi delay="${YNH_CONFIG_MAIN_CONFIGURATION_DELAY:-$old_delay}" # is_public -old_is_public="$(ynh_app_setting_get $app is_public)" -old_is_public=$(bool_to_true_false $old_is_public) +old_is_public="$(ynh_app_setting_get --app=$app --key=is_public)" is_public="${YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC:-$old_is_public}" # Overwrite settings.json file -old_overwrite_settings="$(ynh_app_setting_get $app overwrite_settings)" -old_overwrite_settings=$(bool_to_true_false $old_overwrite_settings) +old_overwrite_settings="$(ynh_app_setting_get --app=$app --key=overwrite_settings)" overwrite_settings="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_SETTINGS:-$old_overwrite_settings}" # Overwrite nginx configuration -old_overwrite_nginx="$(ynh_app_setting_get $app overwrite_nginx)" -old_overwrite_nginx=$(bool_to_true_false $old_overwrite_nginx) +old_overwrite_nginx="$(ynh_app_setting_get --app=$app --key=overwrite_nginx)" overwrite_nginx="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_NGINX:-$old_overwrite_nginx}" # Overwrite systemd configuration -old_overwrite_systemd="$(ynh_app_setting_get $app overwrite_systemd)" -old_overwrite_systemd=$(bool_to_true_false $old_overwrite_systemd) +old_overwrite_systemd="$(ynh_app_setting_get --app=$app --key=overwrite_systemd)" overwrite_systemd="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_SYSTEMD:-$old_overwrite_systemd}" # Type of admin mail configuration -old_admin_mail_html="$(ynh_app_setting_get $app admin_mail_html)" -old_admin_mail_html=$(bool_to_true_false $old_admin_mail_html) +old_admin_mail_html="$(ynh_app_setting_get --app=$app --key=admin_mail_html)" admin_mail_html="${YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE:-$old_admin_mail_html}" #================================================= @@ -119,20 +113,19 @@ apply_config() { # always_encrypt if [ "$always_encrypt" != "$old_always_encrypt" ] then - always_encrypt=$(bool_to_01 $always_encrypt) - ynh_replace_string ".*always_encrypt *=>.*" " always_encrypt => $always_encrypt," "$config_file" + ynh_replace_string --match_string=".*always_encrypt *=>.*" --replace_string=" always_encrypt => $always_encrypt," --target_file="$config_file" restart_lutim=1 fi # antiflood if [ "$antiflood" != "$old_antiflood" ] then - ynh_replace_string ".*anti_flood_delay *=>.*" " anti_flood_delay => $antiflood," "$config_file" + ynh_replace_string --match_string=".*anti_flood_delay *=>.*" --replace_string=" anti_flood_delay => $antiflood," --target_file="$config_file" # Disable anti_flood_delay if the delay is 0 if [ $antiflood = 0 ]; then - ynh_replace_string "\(anti_flood_delay *=>.*\)" "#\1" "$config_file" + ynh_replace_string --match_string="\(anti_flood_delay *=>.*\)" --replace_string="#\1" --target_file="$config_file" fi - ynh_app_setting_set $app antiflood "$antiflood" + ynh_app_setting_set --app=$app --key=antiflood --value="$antiflood" restart_lutim=1 fi @@ -150,8 +143,8 @@ apply_config() { else delay=360 fi - ynh_replace_string ".*default_delay *=>.*" " default_delay => $delay," "$config_file" - ynh_app_setting_set $app delay "$delay" + ynh_replace_string --match_string=".*default_delay *=>.*" --replace_string=" default_delay => $delay," --target_file="$config_file" + ynh_app_setting_set --app=$app --key=delay --value="$delay" restart_lutim=1 fi @@ -170,18 +163,14 @@ apply_config() { fi # Set overwrite_settings - overwrite_settings=$(bool_to_01 $overwrite_settings) - ynh_app_setting_set $app overwrite_settings "$overwrite_settings" + ynh_app_setting_set --app=$app --key=overwrite_settings --value="$overwrite_settings" # Set overwrite_nginx - overwrite_nginx=$(bool_to_01 $overwrite_nginx) - ynh_app_setting_set $app overwrite_nginx "$overwrite_nginx" + ynh_app_setting_set --app=$app --key=overwrite_nginx --value="$overwrite_nginx" # Set overwrite_systemd - overwrite_systemd=$(bool_to_01 $overwrite_systemd) - ynh_app_setting_set $app overwrite_systemd "$overwrite_systemd" + ynh_app_setting_set --app=$app --key=overwrite_systemd --value="$overwrite_systemd" # Set admin_mail_html - admin_mail_html=$(bool_to_01 $admin_mail_html) - ynh_app_setting_set $app admin_mail_html "$admin_mail_html" + ynh_app_setting_set --app=$app --key=admin_mail_html --value="$admin_mail_html" } #================================================= diff --git a/scripts/install b/scripts/install index dbb969c..217b5c3 100644 --- a/scripts/install +++ b/scripts/install @@ -24,7 +24,6 @@ ynh_abort_if_errors #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -ynh_script_progression --message="Retrieve arguments from the manifest" domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH @@ -36,61 +35,59 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THIS ARGS #================================================= -ynh_script_progression --message="Check if the app can be installed" --weight=2 +ynh_script_progression --message="Validating installation parameters..." --weight=2 final_path=/var/www/$app -test ! -e "$final_path" || ynh_die "This path already contains a folder" - -# Normalize the url path syntax -path_url=$(ynh_normalize_url_path $path_url) +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" # Register (book) web path -ynh_webpath_register $app $domain $path_url +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -ynh_script_progression --message="Store settings from manifest" --weight=2 +ynh_script_progression --message="Storing installation settings..." --weight=2 -ynh_app_setting_set $app domain $domain -ynh_app_setting_set $app is_public $is_public -ynh_app_setting_set $app always_encrypt $always_encrypt +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=is_public --value=$is_public +ynh_app_setting_set --app=$app --key=always_encrypt --value=$always_encrypt -ynh_app_setting_set $app overwrite_settings "1" -ynh_app_setting_set $app overwrite_nginx "1" -ynh_app_setting_set $app overwrite_systemd "1" -ynh_app_setting_set $app admin_mail_html "1" +ynh_app_setting_set --app=$app --key=overwrite_settings --value=1 +ynh_app_setting_set --app=$app --key=overwrite_nginx --value=1 +ynh_app_setting_set --app=$app --key=overwrite_systemd --value=1 +ynh_app_setting_set --app=$app --key=admin_mail_html --value=1 #================================================= # STANDARD MODIFICATIONS #================================================= # FIND AND OPEN A PORT #================================================= -ynh_script_progression --message="Find a free port" --weight=3 +ynh_script_progression --message="Configuring firewall..." --weight=3 # Find a free port -port=$(ynh_find_port 8095) -ynh_app_setting_set $app port $port +port=$(ynh_find_port --port=8095) +ynh_app_setting_set --app=$app --key=port --value=$port #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_script_progression --message="Setting up source files..." -ynh_app_setting_set $app final_path $final_path -# Download, check integrity and uncompress the source from app.src -ynh_setup_source "$final_path" +ynh_app_setting_set --app=$app --key=final_path --value=$final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$final_path" #================================================= # INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Install dependencies" --weight=60 +ynh_script_progression --message="Installing dependencies..." --weight=60 ynh_install_app_dependencies $app_depencencies #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Configure nginx" --weight=2 +ynh_script_progression --message="Configuring nginx web server..." --weight=2 # Create a dedicated nginx config ynh_add_nginx_config @@ -98,7 +95,7 @@ ynh_add_nginx_config #================================================= # CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Create a dedicated user" --weight=2 +ynh_script_progression --message="Configuring system user..." --weight=2 # Create a dedicated system user ynh_system_user_create $app @@ -112,20 +109,22 @@ ynh_script_progression --message="Configure Lutim" --weight=2 # Configure Lutim cp ../conf/lutim.conf.template "$final_path/lutim.conf" -ynh_replace_string "__DOMAIN__" "$domain" "$final_path/lutim.conf" -ynh_replace_string "__PATH__" "$path_url" "$final_path/lutim.conf" -ynh_replace_string "__PORT__" "$port" "$final_path/lutim.conf" -ynh_replace_string "__ENCRYPT__" "$always_encrypt" "$final_path/lutim.conf" +ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$final_path/lutim.conf" +ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file="$final_path/lutim.conf" +ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/lutim.conf" +ynh_replace_string --match_string="__ENCRYPT__" --replace_string="$always_encrypt" --target_file="$final_path/lutim.conf" secret=$(ynh_string_random) -ynh_replace_string "__SECRET__" "$secret" "$final_path/lutim.conf" -ynh_app_setting_set $app secret "$secret" +ynh_replace_string --match_string="__SECRET__" --replace_string="$secret" --target_file="$final_path/lutim.conf" +ynh_app_setting_set --app=$app --key=secret --value="$secret" +# Set the number of process for Lutim to twice the number of CPU core. +ynh_replace_string --match_string="__WORKERS__" --replace_string="$(( $(nproc) * 2 ))" --target_file="$final_path/lutim.conf" # Calculate and store the config file checksum into the app settings -ynh_store_file_checksum "$final_path/lutim.conf" +ynh_store_file_checksum --file="$final_path/lutim.conf" #================================================= # SETUP SYSTEMD #================================================= -ynh_script_progression --message="Configure systemd" --weight=2 +ynh_script_progression --message="Configuring a systemd service..." --weight=2 # Create a dedicated systemd config ynh_add_systemd_config @@ -135,13 +134,14 @@ ynh_add_systemd_config #================================================= cp ../conf/cron_lutim /etc/cron.d/$app -ynh_replace_string "__FINALPATH__" "$final_path/" /etc/cron.d/$app +ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path/" --target_file=/etc/cron.d/$app +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file=/etc/cron.d/$app chmod +x $final_path/script/lutim #================================================= # INSTALL LUTIM WITH CARTON #================================================= -ynh_script_progression --message="Install Lutim with Carton" --weight=60 +ynh_script_progression --message="Installing Lutim with Carton..." --weight=60 mkdir -p /var/log/$app/ (cd $final_path @@ -151,9 +151,9 @@ carton install 2>&1 | tee -a "/var/log/$app/setup_carton.log") arch_dir=$(ls -1 $final_path/local/lib/perl5/ | grep linux-gnu) if [ "$?" -ne 0 ] then - ynh_die "Unable to find the perl directory for your architecture." + ynh_die --message="Unable to find the perl directory for your architecture." fi -ynh_replace_string "__ARCHDIR__" "$arch_dir" "$final_path/script/lutim" +ynh_replace_string --match_string="__ARCHDIR__" --replace_string="$arch_dir" --target_file="$final_path/script/lutim" #================================================= # SETUP LOG FILE @@ -176,7 +176,7 @@ chown -R $app: $final_path #================================================= # SETUP LOGROTATE #================================================= -ynh_script_progression --message="Configure logrotate" --weight=2 +ynh_script_progression --message="Configuring log rotation..." --weight=2 # Use logrotate to manage application logfile(s) ynh_use_logrotate @@ -185,14 +185,14 @@ ynh_use_logrotate # ADVERTISE SERVICE IN ADMIN PANEL #================================================= -yunohost service add lutim -l $final_path/log/production.log +yunohost service add $app --log $final_path/log/production.log #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Setup SSOwat" +ynh_script_progression --message="Configuring SSOwat..." -ynh_app_setting_set $app skipped_uris "/" +ynh_app_setting_set --app=$app --key=skipped_uris --value="/" if [ $is_public -eq 0 ] then # If the app is private, viewing images stays publicly accessible. @@ -202,20 +202,20 @@ then fi # Modify the domain to be used in a regex domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set $app protected_regex "$domain_regex$path_url/stats/?$","$domain_regex$path_url/manifest.webapp/?$","$domain_regex$path_url/?$","$domain_regex$path_url/[d-m]/.*$" + ynh_app_setting_set --app=$app --key=protected_regex --value="$domain_regex$path_url/stats/?$","$domain_regex$path_url/manifest.webapp/?$","$domain_regex$path_url/?$","$domain_regex$path_url/[d-m]/.*$" fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reload nginx" --weight=2 +ynh_script_progression --message="Reloading nginx web server..." --weight=2 -ynh_systemd_action --action=reload --service_name=nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # CHECK LUTIM BOOTING #================================================= -ynh_script_progression --message="Restart Lutim" --weight=6 +ynh_script_progression --message="Restarting Lutim..." --weight=6 # Wait for lutim to be fully started ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path="/var/log/$app/production.log" --timeout="120" @@ -237,10 +237,10 @@ You can also find some specific actions for this app by using the experimental _ If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/lutim_ynh__URL_TAG3__." > mail_to_send -ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type="install" +ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type=install #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation completed" --last +ynh_script_progression --message="Installation of $app completed" --time --last diff --git a/scripts/remove b/scripts/remove index 611f6d3..8480254 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,18 +12,19 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Load settings" --weight=2 +ynh_script_progression --message="Loading installation settings..." --weight=2 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) +domain=$(ynh_app_setting_get --app=$app --key=domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # STANDARD REMOVE #================================================= # STOP AND REMOVE SERVICE #================================================= -ynh_script_progression --message="Stop and remove the service" --weight=6 +ynh_script_progression --message="Stopping and removing the systemd service..." --weight=6 # Remove the dedicated systemd config ynh_remove_systemd_config @@ -33,16 +34,16 @@ ynh_remove_systemd_config #================================================= # Check if the service is declared in YunoHost -if yunohost service status | grep -q $app +if ynh_exec_fully_quiet yunohost service status $app then - ynh_print_info "Remove $app service" >&2 + ynh_script_progression --message="Removing $app service..." yunohost service remove $app fi #================================================= # REMOVE DEPENDENCIES #================================================= -ynh_script_progression --message="Remove dependencies" --weight=20 +ynh_script_progression --message="Removing dependencies..." --weight=20 # Remove metapackage and its dependencies ynh_remove_app_dependencies @@ -50,15 +51,15 @@ ynh_remove_app_dependencies #================================================= # REMOVE APP MAIN DIR #================================================= -ynh_script_progression --message="Remove app main directory" --weight=2 +ynh_script_progression --message="Removing app main directory..." --weight=2 # Remove the app directory securely -ynh_secure_remove "/var/www/$app" +ynh_secure_remove --file="$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Remove nginx configuration" +ynh_script_progression --message="Removing nginx web server configuration..." # Remove the dedicated nginx config ynh_remove_nginx_config @@ -66,7 +67,7 @@ ynh_remove_nginx_config #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= -ynh_script_progression --message="Remove logrotate configuration" +ynh_script_progression --message="Removing logrotate configuration..." # Remove the app-specific logrotate config ynh_remove_logrotate @@ -77,20 +78,20 @@ ynh_remove_logrotate # REMOVE CRON JOB #================================================= -ynh_secure_remove "/etc/cron.d/$app" +ynh_secure_remove --file="/etc/cron.d/$app" #================================================= # GENERIC FINALISATION #================================================= # REMOVE DEDICATED USER #================================================= -ynh_script_progression --message="Remove the dedicated user" --weight=5 +ynh_script_progression --message="Removing the dedicated system user..." --weight=5 # Delete dedicated system user -ynh_system_user_delete $app +ynh_system_user_delete --username=$app #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Deletion completed" --last +ynh_script_progression --message="Removal of $app completed" --time --last diff --git a/scripts/restore b/scripts/restore index c9070d7..f5388e7 100644 --- a/scripts/restore +++ b/scripts/restore @@ -25,27 +25,28 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Load settings" --weight=2 +ynh_script_progression --message="Loading settings..." --weight=2 app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get $app final_path) -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_script_progression --message="Validating restoration parameters..." -ynh_webpath_available $domain $path_url \ - || ynh_die "Path not available: ${domain}${path_url}" +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ - || ynh_die "There is already a directory: $final_path " + || ynh_die --message="There is already a directory: $final_path " #================================================= # ACTIVATE MAINTENANCE MODE #================================================= -ynh_script_progression --message="Activate maintenance mode" --weight=2 +ynh_script_progression --message="Activating maintenance mode..." --weight=2 ynh_maintenance_mode_ON @@ -55,22 +56,22 @@ ynh_maintenance_mode_ON # RESTORE THE NGINX CONFIGURATION #================================================= -ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR #================================================= -ynh_script_progression --message="Restore the app main directory" +ynh_script_progression --message="Restoring the app main directory..." -ynh_restore_file "$final_path" +ynh_restore_file --origin_path="$final_path" #================================================= # RECREATE THE DEDICATED USER #================================================= -ynh_script_progression --message="Recreate the dedicated user" --weight=2 +ynh_script_progression --message="Recreating the dedicated system user..." --weight=2 # Create the dedicated user (if not existing) -ynh_system_user_create $app +ynh_system_user_create --username=$app #================================================= # RESTORE USER RIGHTS @@ -84,7 +85,7 @@ chown -R $app: $final_path #================================================= # REINSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Reinstall dependencies" --weight=60 +ynh_script_progression --message="Reinstalling dependencies..." --weight=60 ynh_install_app_dependencies $app_depencencies @@ -92,21 +93,21 @@ ynh_install_app_dependencies $app_depencencies # ADVERTISE SERVICE IN ADMIN PANEL #================================================= -yunohost service add $app --log "/var/log/$app/APP.log" +yunohost service add $app --log $final_path/log/production.log #================================================= # RESTORE SYSTEMD #================================================= -ynh_script_progression --message="Restore the systemd configuration" +ynh_script_progression --message="Restoring the systemd configuration..." -ynh_restore_file "/etc/systemd/system/$app.service" +ynh_restore_file --origin_path="/etc/systemd/system/$app.service" systemctl enable $app.service #================================================= # RESTORE THE CRON FILE #================================================= -ynh_restore_file "/etc/cron.d/$app" +ynh_restore_file --origin_path="/etc/cron.d/$app" #================================================= # SETUP LOG FILE @@ -121,21 +122,21 @@ chown $app -R /var/log/$app # RESTORE LOGROTATE CONFIGURATION #================================================= -ynh_restore_file "/etc/logrotate.d/$app" +ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # GENERIC FINALISATION #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reload nginx" --weight=2 +ynh_script_progression --message="Reloading nginx web server..." --weight=2 -ynh_systemd_action --action=reload --service_name=nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # START AND CHECK LUTIM BOOTING #================================================= -ynh_script_progression --message="Restart Lutim" --weight=3 +ynh_script_progression --message="Restarting Lutim..." --weight=3 # Wait for lutim to be fully started ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path="/var/log/$app/production.log" --timeout="120" @@ -143,7 +144,7 @@ ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path=" #================================================= # DEACTIVE MAINTENANCE MODE #================================================= -ynh_script_progression --message="Disable maintenance mode" --weight=7 +ynh_script_progression --message="Disabling maintenance mode..." --weight=7 ynh_maintenance_mode_OFF @@ -161,10 +162,10 @@ You can also find some specific actions for this app by using the experimental _ If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/lutim_ynh__URL_TAG3__." > mail_to_send -ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type="restore" +ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type=restore #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed" --last +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 5fdad75..e5b1313 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -14,24 +14,26 @@ source _variables #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Load settings" --weight=4 +ynh_script_progression --message="Loading installation settings..." --weight=4 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -is_public=$(ynh_app_setting_get $app is_public) -port=$(ynh_app_setting_get $app port) -always_encrypt=$(ynh_app_setting_get $app always_encrypt) -final_path=$(ynh_app_setting_get $app final_path) -secret=$(ynh_app_setting_get $app secret) -overwrite_settings=$(ynh_app_setting_get $app overwrite_settings) -overwrite_nginx=$(ynh_app_setting_get $app overwrite_nginx) -overwrite_systemd=$(ynh_app_setting_get $app overwrite_systemd) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +port=$(ynh_app_setting_get --app=$app --key=port) +always_encrypt=$(ynh_app_setting_get --app=$app --key=always_encrypt) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +secret=$(ynh_app_setting_get --app=$app --key=secret) + +overwrite_settings=$(ynh_app_setting_get --app=$app --key=overwrite_settings) +overwrite_nginx=$(ynh_app_setting_get --app=$app --key=overwrite_nginx) +overwrite_systemd=$(ynh_app_setting_get --app=$app --key=overwrite_systemd) +admin_mail_html=$(ynh_app_setting_get --app=$app --key=admin_mail_html) # Optional parameters from config-panel feature -antiflood=$(ynh_app_setting_get $app antiflood) -delay=$(ynh_app_setting_get $app delay) +antiflood=$(ynh_app_setting_get --app=$app --key=antiflood) +delay=$(ynh_app_setting_get --app=$app --key=delay) #================================================= # CHECK VERSION @@ -42,55 +44,54 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= -ynh_script_progression --message="Ensure downward compatibility" --weight=2 +ynh_script_progression --message="Ensuring downward compatibility..." --weight=2 # Fix is_public as a boolean if [ "$is_public" = "Yes" ]; then - ynh_app_setting_set $app is_public 1 + ynh_app_setting_set --app=$app --key=is_public --value=1 is_public=1 elif [ "$is_public" = "No" ]; then - ynh_app_setting_set $app is_public 0 + ynh_app_setting_set --app=$app --key=is_public --value=0 is_public=0 fi # if final_path isn't set, which can happens with old scripts, set final_path. -if [ "${#final_path}" -eq 0 ] -then +if [ -z "$final_path" ]; then final_path=/var/www/$app - ynh_app_setting_set $app final_path $final_path + ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi # Fix always_encrypt as a boolean if [ "$always_encrypt" = "Yes" ]; then - ynh_app_setting_set $app always_encrypt 1 + ynh_app_setting_set --app=$app --key=always_encrypt --value=1 always_encrypt=1 elif [ "$always_encrypt" = "No" ]; then - ynh_app_setting_set $app always_encrypt 0 + ynh_app_setting_set --app=$app --key=always_encrypt --value=0 always_encrypt=0 fi # If overwrite_settings doesn't exist, create it if [ -z "$overwrite_settings" ]; then overwrite_settings=1 - ynh_app_setting_set $app overwrite_settings $overwrite_settings + ynh_app_setting_set --app=$app --key=overwrite_settings --value=$overwrite_settings fi # If overwrite_nginx doesn't exist, create it if [ -z "$overwrite_nginx" ]; then overwrite_nginx=1 - ynh_app_setting_set $app overwrite_nginx $overwrite_nginx + ynh_app_setting_set --app=$app --key=overwrite_nginx --value=$overwrite_nginx fi # If overwrite_systemd doesn't exist, create it if [ -z "$overwrite_systemd" ]; then overwrite_systemd=1 - ynh_app_setting_set $app overwrite_systemd $overwrite_systemd + ynh_app_setting_set --app=$app --key=overwrite_systemd --value=$overwrite_systemd fi # If secret doesn't exist, create it if [ -z "$secret" ]; then secret=$(grep "secrets *=>" "$final_path/lutim.conf" | cut -d\' -f2) - ynh_app_setting_set $app secret $secret + ynh_app_setting_set --app=$app --key=secret --value=$secret fi # Close opened port @@ -102,7 +103,7 @@ fi #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_script_progression --message="Backup the app before upgrading" --weight=15 +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=15 # Backup the current version of the app ynh_backup_before_upgrade @@ -120,12 +121,12 @@ ynh_abort_if_errors #================================================= # Normalize the URL path syntax -path_url=$(ynh_normalize_url_path $path_url) +path_url=$(ynh_normalize_url_path --path_url=$path_url) #================================================= # ACTIVATE MAINTENANCE MODE #================================================= -ynh_script_progression --message="Activate maintenance mode" --weight=2 +ynh_script_progression --message="Activating maintenance mode..." --weight=2 ynh_maintenance_mode_ON @@ -137,15 +138,15 @@ ynh_maintenance_mode_ON if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Download, check and unpack source" + ynh_script_progression --message="Upgrading source files..." # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source "$final_path" + ynh_setup_source --dest_dir="$final_path" fi #================================================= # UPGRADE DEPENDENCIES #================================================= -ynh_script_progression --message="Upgrade dependencies" --weight=9 +ynh_script_progression --message="Upgrading dependencies..." --weight=9 ynh_install_app_dependencies $app_depencencies @@ -156,17 +157,17 @@ ynh_install_app_dependencies $app_depencencies # Overwrite the nginx configuration only if it's allowed if [ $overwrite_nginx -eq 1 ] then - ynh_script_progression --message="Reconfigure nginx" --weight=2 + ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=2 ynh_add_nginx_config fi #================================================= # CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Create a dedicated user" +ynh_script_progression --message="Making sure dedicated system user exists..." # Create a dedicated user (if not existing) -ynh_system_user_create $app +ynh_system_user_create --username=$app #================================================= # SPECIFIC UPGRADE @@ -180,26 +181,28 @@ if [ $overwrite_settings -eq 1 ] then # Configure Lutim # Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script. - ynh_backup_if_checksum_is_different "$final_path/lutim.conf" + ynh_backup_if_checksum_is_different --file="$final_path/lutim.conf" cp ../conf/lutim.conf.template "$final_path/lutim.conf" - ynh_replace_string "__DOMAIN__" "$domain" "$final_path/lutim.conf" - ynh_replace_string "__PATH__" "$path_url" "$final_path/lutim.conf" - ynh_replace_string "__PORT__" "$port" "$final_path/lutim.conf" - ynh_replace_string "__ENCRYPT__" "$always_encrypt" "$final_path/lutim.conf" - ynh_replace_string "__SECRET__" "$secret" "$final_path/lutim.conf" + ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$final_path/lutim.conf" + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file="$final_path/lutim.conf" + ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/lutim.conf" + ynh_replace_string --match_string="__ENCRYPT__" --replace_string="$always_encrypt" --target_file="$final_path/lutim.conf" + ynh_replace_string --match_string="__SECRET__" --replace_string="$secret" --target_file="$final_path/lutim.conf" + # Set the number of process for Lutim to twice the number of CPU core. + ynh_replace_string --match_string="__WORKERS__" --replace_string="$(( $(nproc) * 2 ))" --target_file="$final_path/lutim.conf" # Recalculate and store the checksum of the file for the next upgrade. - ynh_store_file_checksum "$final_path/lutim.conf" + ynh_store_file_checksum --file="$final_path/lutim.conf" # Optional parameters from config-panel feature if [ -n "$antiflood" ]; then - ynh_replace_string ".*anti_flood_delay *=>.*" " anti_flood_delay => $antiflood," "$final_path/lutim.conf" + ynh_replace_string --match_string=".*anti_flood_delay *=>.*" --replace_string=" anti_flood_delay => $antiflood," --target_file="$final_path/lutim.conf" # Disable anti_flood_delay if the delay is 0 if [ $antiflood = 0 ]; then - ynh_replace_string "\(anti_flood_delay *=>.*\)" "#\1" "$final_path/lutim.conf" + ynh_replace_string --match_string="\(anti_flood_delay *=>.*\)" --replace_string="#\1" --target_file="$final_path/lutim.conf" fi fi if [ -n "$delay" ]; then - ynh_replace_string ".*default_delay *=>.*" " default_delay => $delay," "$final_path/lutim.conf" + ynh_replace_string --match_string=".*default_delay *=>.*" --replace_string=" default_delay => $delay," --target_file="$final_path/lutim.conf" fi fi @@ -210,7 +213,7 @@ fi # Overwrite the systemd configuration only if it's allowed if [ $overwrite_systemd -eq 1 ] then - ynh_script_progression --message="Reconfigure systemd" --weight=2 + ynh_script_progression --message="Upgrading systemd configuration..." --weight=2 ynh_add_systemd_config fi @@ -219,7 +222,8 @@ fi #================================================= cp ../conf/cron_lutim /etc/cron.d/$app -ynh_replace_string "__FINALPATH__" "$final_path/" /etc/cron.d/$app +ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path/" --target_file=/etc/cron.d/$app +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file=/etc/cron.d/$app #================================================= # UPDATE LUTIM WITH CARTON @@ -227,7 +231,7 @@ ynh_replace_string "__FINALPATH__" "$final_path/" /etc/cron.d/$app if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrade Lutim with carton" --weight=4 + ynh_script_progression --message="Upgrading Lutim with carton..." --weight=4 (cd $final_path carton install 2>&1 | tee -a "/var/log/$app/setup_carton.log") fi @@ -244,7 +248,7 @@ chown -R $app: $final_path #================================================= # SETUP LOGROTATE #================================================= -ynh_script_progression --message="Reconfigure logrotate" +ynh_script_progression --message="Upgrading logrotate configuration..." ynh_use_logrotate --non-append chown $app -R /var/log/$app @@ -252,28 +256,28 @@ chown $app -R /var/log/$app #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Reconfigure SSOwat" +ynh_script_progression --message="Upgrading SSOwat configuration..." -ynh_app_setting_set $app skipped_uris "/" +ynh_app_setting_set --app=$app --key=skipped_uris --value="/" if [ $is_public -eq 0 ] then # If the app is private, viewing images stays publicly accessible. # Modify the domain to be used in a regex domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set $app protected_regex "$domain_regex$path_url/stats/?$","$domain_regex$path_url/manifest.webapp/?$","$domain_regex$path_url/?$","$domain_regex$path_url/[d-m]/.*$" + ynh_app_setting_set --app=$app --key=protected_regex --value="$domain_regex$path_url/stats/?$","$domain_regex$path_url/manifest.webapp/?$","$domain_regex$path_url/?$","$domain_regex$path_url/[d-m]/.*$" fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reload nginx" +ynh_script_progression --message="Reloading nginx web server..." -ynh_systemd_action --action=reload --service_name=nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # START AND CHECK LUTIM BOOTING #================================================= -ynh_script_progression --message="Restart Lutim" --weight=4 +ynh_script_progression --message="Restarting Lutim..." --weight=4 # Wait for lutim to be fully started ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path="/var/log/$app/production.log" --timeout="120" @@ -281,7 +285,7 @@ ynh_systemd_action --action=restart --line_match="Manager.*started" --log_path=" #================================================= # DEACTIVE MAINTENANCE MODE #================================================= -ynh_script_progression --message="Disable maintenance mode" --weight=7 +ynh_script_progression --message="Disabling maintenance mode..." --weight=7 ynh_maintenance_mode_OFF @@ -307,10 +311,10 @@ If you're facing an issue or want to improve this app, please open a new issue i Changelog since your last upgrade: $(cat changelog)" > mail_to_send -ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type="upgrade" +ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type=upgrade #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade completed" --last +ynh_script_progression --message="Upgrade of $app completed" --last