Просмотр исходного кода

Merge pull request #51 from YunoHost-Apps/testing

Testing
Maniack Crudelis 6 лет назад
Родитель
Сommit
de8ab448d6
22 измененных файлов с 1007 добавлено и 1298 удалено
  1. 44 0
      CHANGELOG.md
  2. 5 4
      README.md
  3. 7 6
      README_fr.md
  4. 0 22
      actions.json
  5. 17 0
      actions.toml
  6. 1 13
      check_process
  7. 22 17
      conf/nginx.conf
  8. 0 422
      conf/php-fpm.conf
  9. 0 52
      config_panel.json
  10. 64 0
      config_panel.toml
  11. 2 2
      manifest.json
  12. 367 474
      scripts/_common.sh
  13. 1 7
      scripts/_variables
  14. 132 0
      scripts/_ynh_add_fpm_config
  15. 7 7
      scripts/actions/reset_default_config
  16. 27 27
      scripts/backup
  17. 24 28
      scripts/change_url
  18. 72 26
      scripts/config
  19. 63 66
      scripts/install
  20. 34 34
      scripts/remove
  21. 47 46
      scripts/restore
  22. 71 45
      scripts/upgrade

+ 44 - 0
CHANGELOG.md

@@ -0,0 +1,44 @@
+Changelog
+=========
+
+## Unreleased
+- Nothing for now...
+
+## [3.3.1~ynh6](https://github.com/YunoHost-Apps/pihole_ynh/pull/51) - 2020-03-29
+
+#### Added
+* [Add a changelog](https://github.com/YunoHost-Apps/pihole_ynh/pull/51/commits/7299718e45d115a9b22b1eeb59b37028a731b616)
+
+#### Changed
+- [Update to last standard](https://github.com/YunoHost-Apps/pihole_ynh/pull/51/commits/9294176a2d243d68b3095d0037466814d8efdcd5)
+- [Update helpers](https://github.com/YunoHost-Apps/pihole_ynh/pull/51/commits/3be3dbca2fb0ec2887b7962aa5dcce4276ab31ce)
+- [Use toml for actions and config-panel](https://github.com/YunoHost-Apps/pihole_ynh/pull/51/commits/b1ec989d2a74f6cefaf97eb1ed59dd6b9fc82bcf)
+* [use scalable phpfpm](https://github.com/YunoHost-Apps/pihole_ynh/pull/51/commits/1bf6783e334cd1260f418d641d29e8e11c7e6edc)
+- [Update to last standard](https://github.com/YunoHost-Apps/pihole_ynh/pull/51/commits/a719095dc51c8c7af8a6f34f75c92a08f45e0012)
+
+
+## [3.3.1~ynh5](https://github.com/YunoHost-Apps/pihole_ynh/pull/39) - 2019-02-03
+
+#### Added
+- [Add progression bar](https://github.com/YunoHost-Apps/pihole_ynh/pull/39/commits/887e6fcc79bfd71fbd8a97b59f912ef029f90cdf)
+* [Changelog & html email](https://github.com/YunoHost-Apps/pihole_ynh/pull/39/commits/2229f7817327ceb2d2ca41310493a5483fb94ef9)
+
+#### Changed
+- [Update php and nginx conf files to php7](https://github.com/YunoHost-Apps/pihole_ynh/pull/39/commits/65d1ba63fcaffba347ab01d690d9ced08837a69b)
+
+
+## [3.3.1~ynh4](https://github.com/YunoHost-Apps/pihole_ynh/pull/36) - 2019-01-24
+
+#### Fixed
+- [Fix #37 for post_domain_add](https://github.com/YunoHost-Apps/pihole_ynh/pull/38/commits/d34d953efbc93e3d3e4547e3d8585a35c1eb8751)
+
+## [3.3.1~ynh4](https://github.com/YunoHost-Apps/pihole_ynh/pull/36) - 2019-01-21
+
+#### Added
+- [Advertise config-panel and actions](https://github.com/YunoHost-Apps/pihole_ynh/pull/36/commits/a4a720a9e8bae6a6d4e43a860c71c9e8947fafea)
+
+#### Fixed
+- [Fix install issue](https://github.com/YunoHost-Apps/pihole_ynh/pull/36/commits/3b7e0608c42402433888f9129e8c9dacbb9f4797)
+
+#### Changed
+- [Update to last standart](https://github.com/YunoHost-Apps/pihole_ynh/pull/36/commits/0478648b332e312d980becea48e8381b01133c7b)

+ 5 - 4
README.md

@@ -1,6 +1,6 @@
 # Pi-hole for YunoHost
 
-[![Integration level](https://dash.yunohost.org/integration/pihole.svg)](https://dash.yunohost.org/appci/app/pihole)  
+[![Integration level](https://dash.yunohost.org/integration/pihole.svg)](https://dash.yunohost.org/appci/app/pihole) ![](https://ci-apps.yunohost.org/ci/badges/pihole.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/pihole.maintain.svg)  
 [![Install Pi-hole with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pihole)
 
 *[Lire ce readme en français.](./README_fr.md)*
@@ -39,9 +39,9 @@ Use the admin panel of your Pi-hole to configure this app. You may also need to
 
 #### Supported architectures
 
-* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/pihole%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/pihole/)
-* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/pihole%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/pihole/)
-* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/pihole%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/pihole/)
+* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/pihole%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/pihole/)
+* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/pihole%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/pihole/)
+* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/pihole%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/pihole/)
 
 ## Limitations
 
@@ -54,6 +54,7 @@ Use the admin panel of your Pi-hole to configure this app. You may also need to
 
  * Report a bug: https://github.com/YunoHost-Apps/pihole_ynh/issues
  * Pi-hole website: https://pi-hole.net/
+ * Pi-hole repository: https://github.com/pi-hole/pi-hole/
  * YunoHost website: https://yunohost.org/
 
 ---

+ 7 - 6
README_fr.md

@@ -1,6 +1,6 @@
 # Pi-hole pour YunoHost
 
-[![Niveau d'intégration](https://dash.yunohost.org/integration/pihole.svg)](https://dash.yunohost.org/appci/app/pihole)  
+[![Niveau d'intégration](https://dash.yunohost.org/integration/pihole.svg)](https://dash.yunohost.org/appci/app/pihole) ![](https://ci-apps.yunohost.org/ci/badges/pihole.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/pihole.maintain.svg)  
 [![Installer Pi-hole avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pihole)
 
 *[Read this readme in english.](./README.md)*
@@ -23,11 +23,11 @@ Aucune démo pour cette application.
 
 ## Configuration
 
-Utiliser le panneau d'administration de votre Pi-hole pour configurer cette application.
+Utiliser le panneau d'administration de votre Pi-hole pour configurer cette application. Vous devrez peut-être aussi suivre le [guide de post-installation] (https://docs.pi-hole.net/main/post-install/) pour configurer Pi-hole en tant que *serveur DNS* ou *serveur DHCP*.
 
 ## Documentation
 
-* Documentation officielle: Impossible à trouver
+* Documentation officielle: https://docs.pi-hole.net/
 * Pi-hole en tant que serveur DHCP: [dhcp.md](./dhcp.md)
 * Documentation YunoHost: Il n'y a pas d'autre documentation, n'hésitez pas à contribuer.
 
@@ -39,9 +39,9 @@ Utiliser le panneau d'administration de votre Pi-hole pour configurer cette appl
 
 #### Architectures supportées.
 
-* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/pihole%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/pihole/)
-* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/pihole%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/pihole/)
-* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/pihole%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/pihole/)
+* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/pihole%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/pihole/)
+* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/pihole%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/pihole/)
+* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/pihole%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/pihole/)
 
 ## Limitations
 
@@ -54,6 +54,7 @@ Utiliser le panneau d'administration de votre Pi-hole pour configurer cette appl
 
  * Reporter un bug: https://github.com/YunoHost-Apps/pihole_ynh/issues
  * Site de Pi-hole: https://pi-hole.net/
+ * Dépôt de Pi-hole: https://github.com/pi-hole/pi-hole/
  * Site de YunoHost: https://yunohost.org/
 
 ---

+ 0 - 22
actions.json

@@ -1,22 +0,0 @@
-[{
-		"id": "reset_default_setupvars",
-		"name": "Reset the config file and restore a default one.",
-		"command": "/bin/bash scripts/actions/reset_default_config \"setupVars.conf\"",
-		"user": "root",
-		"accepted_return_codes": [0],
-		"description": {
-			"en": "Reset the config file setupVars.conf.",
-			"fr": "Réinitialise le fichier de configuration setupVars.conf."
-		}
-},
-{
-		"id": "reset_default_ftl",
-		"name": "Reset the config file and restore a default one.",
-		"command": "/bin/bash scripts/actions/reset_default_config \"pihole-FTL.conf\"",
-		"user": "root",
-		"accepted_return_codes": [0],
-		"description": {
-			"en": "Reset the config file pihole-FTL.conf.",
-			"fr": "Réinitialise le fichier de configuration pihole-FTL.conf."
-		}
-}]

+ 17 - 0
actions.toml

@@ -0,0 +1,17 @@
+[reset_default_setupvars]
+name = "Reset the config file and restore a default one."
+command = "/bin/bash scripts/actions/reset_default_config \"setupVars.conf\""
+# user = "root"  # optional
+# cwd = "/" # optional
+# accepted_return_codes = [0, 1, 2, 3]  # optional
+accepted_return_codes = [0]
+description = "Reset the config file setupVars.conf."
+
+[reset_default_ftl]
+name = "Reset the config file and restore a default one."
+command = "/bin/bash scripts/actions/reset_default_config \"pihole-FTL.conf\""
+# user = "root"  # optional
+# cwd = "/" # optional
+# accepted_return_codes = [0, 1, 2, 3]  # optional
+accepted_return_codes = [0]
+description = "Reset the config file pihole-FTL.conf."

+ 1 - 13
check_process

@@ -1,5 +1,4 @@
 ;; Test complet
-	auto_remove=1
 	; Manifest
 		domain="domain.tld"	(DOMAIN)
 		path="/path"	(PATH)
@@ -16,24 +15,13 @@
 		upgrade=1	from_commit=d79ec131b3038ff4695c3317b5d3ee4eda9c8932
 		backup_restore=1
 		multi_instance=0
-		incorrect_path=1
 		port_already_use=1 (4711)
 		change_url=1
 ;;; Levels
-	Level 1=auto
-	Level 2=auto
-	Level 3=auto
-# Level 4: 
-	Level 4=na
 	Level 5=auto
-	Level 6=auto
-	Level 7=auto
-	Level 8=0
-	Level 9=0
-	Level 10=0
 ;;; Options
 Email=
-Notification=down
+Notification=change
 ;;; Upgrade options
 	; commit=d79ec131b3038ff4695c3317b5d3ee4eda9c8932
 		name= Stretch fix

+ 22 - 17
conf/nginx.conf

@@ -1,22 +1,27 @@
 #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
 location __PATH__/ {
-	alias __FINALPATH__/;
 
-	if ($scheme = http) {
-		rewrite ^ https://$server_name$request_uri? permanent;
-	}
-	index index.html index.php ;
-	try_files $uri $uri/ index.php;
-	location ~ [^/]\.php(/|$) {
-		fastcgi_split_path_info ^(.+?\.php)(/.*)$;
-		fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock;
-		fastcgi_index index.php;
-		include fastcgi_params;
-		fastcgi_param REMOTE_USER $remote_user;
-		fastcgi_param PATH_INFO $fastcgi_path_info;
-		fastcgi_param SCRIPT_FILENAME $request_filename;
-	}
+    # Path to source
+    alias __FINALPATH__/;
 
-	# Include SSOWAT user panel.
-	include conf.d/yunohost_panel.conf.inc;
+    # Force usage of https
+    if ($scheme = http) {
+        rewrite ^ https://$server_name$request_uri? permanent;
+    }
+
+    index index.html index.php ;
+
+    try_files $uri $uri/ index.php;
+    location ~ [^/]\.php(/|$) {
+        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
+        fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock;
+        fastcgi_index index.php;
+        include fastcgi_params;
+        fastcgi_param REMOTE_USER $remote_user;
+        fastcgi_param PATH_INFO $fastcgi_path_info;
+        fastcgi_param SCRIPT_FILENAME $request_filename;
+    }
+
+    # Include SSOWAT user panel.
+    include conf.d/yunohost_panel.conf.inc;
 }

+ 0 - 422
conf/php-fpm.conf

@@ -1,422 +0,0 @@
-; Start a new pool named 'www'.
-; the variable $pool can be used in any directive and will be replaced by the
-; pool name ('www' here)
-[__NAMETOCHANGE__]
-
-; Per pool prefix
-; It only applies on the following directives:
-; - 'access.log'
-; - 'slowlog'
-; - 'listen' (unixsocket)
-; - 'chroot'
-; - 'chdir'
-; - 'php_values'
-; - 'php_admin_values'
-; When not set, the global prefix (or /usr) applies instead.
-; Note: This directive can also be relative to the global prefix.
-; Default Value: none
-;prefix = /path/to/pools/$pool
-
-; Unix user/group of processes
-; Note: The user is mandatory. If the group is not set, the default user's group
-;       will be used.
-user = __USER__
-group = __USER__
-
-; The address on which to accept FastCGI requests.
-; Valid syntaxes are:
-;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
-;                            a specific port;
-;   'port'                 - to listen on a TCP socket to all addresses on a
-;                            specific port;
-;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
-;                            a specific port;
-;   'port'                 - to listen on a TCP socket to all addresses
-;                            (IPv6 and IPv4-mapped) on a specific port;
-;   '/path/to/unix/socket' - to listen on a unix socket.
-; Note: This value is mandatory.
- listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock
-
-; Set listen(2) backlog.
-; Default Value: 511 (-1 on FreeBSD and OpenBSD)
-;listen.backlog = 511
-
-; Set permissions for unix socket, if one is used. In Linux, read/write
-; permissions must be set in order to allow connections from a web server. Many
-; BSD-derived systems allow connections regardless of permissions.
-; Default Values: user and group are set as the running user
-;                 mode is set to 0660
-listen.owner = www-data
-listen.group = www-data
-;listen.mode = 0660
- 
-; When POSIX Access Control Lists are supported you can set them using
-; these options, value is a comma separated list of user/group names.
-; When set, listen.owner and listen.group are ignored
-;listen.acl_users =
-;listen.acl_groups =
-
-; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect.
-; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
-; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
-; must be separated by a comma. If this value is left blank, connections will be
-; accepted from any ip address.
-; Default Value: any
-;listen.allowed_clients = 127.0.0.1
-
-; Specify the nice(2) priority to apply to the pool processes (only if set)
-; The value can vary from -19 (highest priority) to 20 (lower priority)
-; Note: - It will only work if the FPM master process is launched as root
-;       - The pool processes will inherit the master process priority
-;         unless it specified otherwise
-; Default Value: no set
-; process.priority = -19
-
-; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user
-; or group is differrent than the master process user. It allows to create process
-; core dump and ptrace the process for the pool user.
-; Default Value: no
-; process.dumpable = yes
-
-; Choose how the process manager will control the number of child processes.
-; Possible Values:
-;   static  - a fixed number (pm.max_children) of child processes;
-;   dynamic - the number of child processes are set dynamically based on the
-;             following directives. With this process management, there will be
-;             always at least 1 children.
-;             pm.max_children      - the maximum number of children that can
-;                                    be alive at the same time.
-;             pm.start_servers     - the number of children created on startup.
-;             pm.min_spare_servers - the minimum number of children in 'idle'
-;                                    state (waiting to process). If the number
-;                                    of 'idle' processes is less than this
-;                                    number then some children will be created.
-;             pm.max_spare_servers - the maximum number of children in 'idle'
-;                                    state (waiting to process). If the number
-;                                    of 'idle' processes is greater than this
-;                                    number then some children will be killed.
-;  ondemand - no children are created at startup. Children will be forked when
-;             new requests will connect. The following parameter are used:
-;             pm.max_children           - the maximum number of children that
-;                                         can be alive at the same time.
-;             pm.process_idle_timeout   - The number of seconds after which
-;                                         an idle process will be killed.
-; Note: This value is mandatory.
-pm = dynamic
-
-; The number of child processes to be created when pm is set to 'static' and the
-; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
-; This value sets the limit on the number of simultaneous requests that will be
-; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
-; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
-; CGI. The below defaults are based on a server without much resources. Don't
-; forget to tweak pm.* to fit your needs.
-; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
-; Note: This value is mandatory.
-pm.max_children = 10
-
-; The number of child processes created on startup.
-; Note: Used only when pm is set to 'dynamic'
-; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
-pm.start_servers = 2
-
-; The desired minimum number of idle server processes.
-; Note: Used only when pm is set to 'dynamic'
-; Note: Mandatory when pm is set to 'dynamic'
-pm.min_spare_servers = 1
-
-; The desired maximum number of idle server processes.
-; Note: Used only when pm is set to 'dynamic'
-; Note: Mandatory when pm is set to 'dynamic'
-pm.max_spare_servers = 3
-
-; The number of seconds after which an idle process will be killed.
-; Note: Used only when pm is set to 'ondemand'
-; Default Value: 10s
-;pm.process_idle_timeout = 10s;
-
-; The number of requests each child process should execute before respawning.
-; This can be useful to work around memory leaks in 3rd party libraries. For
-; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
-; Default Value: 0
-; pm.max_requests = 500
-
-; The URI to view the FPM status page. If this value is not set, no URI will be
-; recognized as a status page. It shows the following informations:
-;   pool                 - the name of the pool;
-;   process manager      - static, dynamic or ondemand;
-;   start time           - the date and time FPM has started;
-;   start since          - number of seconds since FPM has started;
-;   accepted conn        - the number of request accepted by the pool;
-;   listen queue         - the number of request in the queue of pending
-;                          connections (see backlog in listen(2));
-;   max listen queue     - the maximum number of requests in the queue
-;                          of pending connections since FPM has started;
-;   listen queue len     - the size of the socket queue of pending connections;
-;   idle processes       - the number of idle processes;
-;   active processes     - the number of active processes;
-;   total processes      - the number of idle + active processes;
-;   max active processes - the maximum number of active processes since FPM
-;                          has started;
-;   max children reached - number of times, the process limit has been reached,
-;                          when pm tries to start more children (works only for
-;                          pm 'dynamic' and 'ondemand');
-; Value are updated in real time.
-; Example output:
-;   pool:                 www
-;   process manager:      static
-;   start time:           01/Jul/2011:17:53:49 +0200
-;   start since:          62636
-;   accepted conn:        190460
-;   listen queue:         0
-;   max listen queue:     1
-;   listen queue len:     42
-;   idle processes:       4
-;   active processes:     11
-;   total processes:      15
-;   max active processes: 12
-;   max children reached: 0
-;
-; By default the status page output is formatted as text/plain. Passing either
-; 'html', 'xml' or 'json' in the query string will return the corresponding
-; output syntax. Example:
-;   http://www.foo.bar/status
-;   http://www.foo.bar/status?json
-;   http://www.foo.bar/status?html
-;   http://www.foo.bar/status?xml
-;
-; By default the status page only outputs short status. Passing 'full' in the
-; query string will also return status for each pool process.
-; Example:
-;   http://www.foo.bar/status?full
-;   http://www.foo.bar/status?json&full
-;   http://www.foo.bar/status?html&full
-;   http://www.foo.bar/status?xml&full
-; The Full status returns for each process:
-;   pid                  - the PID of the process;
-;   state                - the state of the process (Idle, Running, ...);
-;   start time           - the date and time the process has started;
-;   start since          - the number of seconds since the process has started;
-;   requests             - the number of requests the process has served;
-;   request duration     - the duration in µs of the requests;
-;   request method       - the request method (GET, POST, ...);
-;   request URI          - the request URI with the query string;
-;   content length       - the content length of the request (only with POST);
-;   user                 - the user (PHP_AUTH_USER) (or '-' if not set);
-;   script               - the main script called (or '-' if not set);
-;   last request cpu     - the %cpu the last request consumed
-;                          it's always 0 if the process is not in Idle state
-;                          because CPU calculation is done when the request
-;                          processing has terminated;
-;   last request memory  - the max amount of memory the last request consumed
-;                          it's always 0 if the process is not in Idle state
-;                          because memory calculation is done when the request
-;                          processing has terminated;
-; If the process is in Idle state, then informations are related to the
-; last request the process has served. Otherwise informations are related to
-; the current request being served.
-; Example output:
-;   ************************
-;   pid:                  31330
-;   state:                Running
-;   start time:           01/Jul/2011:17:53:49 +0200
-;   start since:          63087
-;   requests:             12808
-;   request duration:     1250261
-;   request method:       GET
-;   request URI:          /test_mem.php?N=10000
-;   content length:       0
-;   user:                 -
-;   script:               /home/fat/web/docs/php/test_mem.php
-;   last request cpu:     0.00
-;   last request memory:  0
-;
-; Note: There is a real-time FPM status monitoring sample web page available
-;       It's available in: /usr/share/php/7.0/fpm/status.html
-;
-; Note: The value must start with a leading slash (/). The value can be
-;       anything, but it may not be a good idea to use the .php extension or it
-;       may conflict with a real PHP file.
-; Default Value: not set 
-;pm.status_path = /status
- 
-; The ping URI to call the monitoring page of FPM. If this value is not set, no
-; URI will be recognized as a ping page. This could be used to test from outside
-; that FPM is alive and responding, or to
-; - create a graph of FPM availability (rrd or such);
-; - remove a server from a group if it is not responding (load balancing);
-; - trigger alerts for the operating team (24/7).
-; Note: The value must start with a leading slash (/). The value can be
-;       anything, but it may not be a good idea to use the .php extension or it
-;       may conflict with a real PHP file.
-; Default Value: not set
-;ping.path = /ping
-
-; This directive may be used to customize the response of a ping request. The
-; response is formatted as text/plain with a 200 response code.
-; Default Value: pong
-;ping.response = pong
-
-; The access log file
-; Default: not set
-;access.log = log/$pool.access.log
-
-; The access log format.
-; The following syntax is allowed
-;  %%: the '%' character
-;  %C: %CPU used by the request
-;      it can accept the following format:
-;      - %{user}C for user CPU only
-;      - %{system}C for system CPU only
-;      - %{total}C  for user + system CPU (default)
-;  %d: time taken to serve the request
-;      it can accept the following format:
-;      - %{seconds}d (default)
-;      - %{miliseconds}d
-;      - %{mili}d
-;      - %{microseconds}d
-;      - %{micro}d
-;  %e: an environment variable (same as $_ENV or $_SERVER)
-;      it must be associated with embraces to specify the name of the env
-;      variable. Some exemples:
-;      - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
-;      - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
-;  %f: script filename
-;  %l: content-length of the request (for POST request only)
-;  %m: request method
-;  %M: peak of memory allocated by PHP
-;      it can accept the following format:
-;      - %{bytes}M (default)
-;      - %{kilobytes}M
-;      - %{kilo}M
-;      - %{megabytes}M
-;      - %{mega}M
-;  %n: pool name
-;  %o: output header
-;      it must be associated with embraces to specify the name of the header:
-;      - %{Content-Type}o
-;      - %{X-Powered-By}o
-;      - %{Transfert-Encoding}o
-;      - ....
-;  %p: PID of the child that serviced the request
-;  %P: PID of the parent of the child that serviced the request
-;  %q: the query string
-;  %Q: the '?' character if query string exists
-;  %r: the request URI (without the query string, see %q and %Q)
-;  %R: remote IP address
-;  %s: status (response code)
-;  %t: server time the request was received
-;      it can accept a strftime(3) format:
-;      %d/%b/%Y:%H:%M:%S %z (default)
-;      The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
-;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
-;  %T: time the log has been written (the request has finished)
-;      it can accept a strftime(3) format:
-;      %d/%b/%Y:%H:%M:%S %z (default)
-;      The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
-;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
-;  %u: remote user
-;
-; Default: "%R - %u %t \"%m %r\" %s"
-; access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
-
-; The log file for slow requests
-; Default Value: not set
-; Note: slowlog is mandatory if request_slowlog_timeout is set
-; slowlog = log/$pool.log.slow
-
-; The timeout for serving a single request after which a PHP backtrace will be
-; dumped to the 'slowlog' file. A value of '0s' means 'off'.
-; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
-; Default Value: 0
-;request_slowlog_timeout = 0
-
-; The timeout for serving a single request after which the worker process will
-; be killed. This option should be used when the 'max_execution_time' ini option
-; does not stop script execution for some reason. A value of '0' means 'off'.
-; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
-; Default Value: 0
-request_terminate_timeout = 1d
-
-; Set open file descriptor rlimit.
-; Default Value: system defined value
-;rlimit_files = 1024
-
-; Set max core size rlimit.
-; Possible Values: 'unlimited' or an integer greater or equal to 0
-; Default Value: system defined value
-;rlimit_core = 0
-
-; Chroot to this directory at the start. This value must be defined as an
-; absolute path. When this value is not set, chroot is not used.
-; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
-; of its subdirectories. If the pool prefix is not set, the global prefix
-; will be used instead.
-; Note: chrooting is a great security feature and should be used whenever
-;       possible. However, all PHP paths will be relative to the chroot
-;       (error_log, sessions.save_path, ...).
-; Default Value: not set
-;chroot = 
- 
-; Chdir to this directory at the start.
-; Note: relative path can be used.
-; Default Value: current directory or / when chroot
-chdir = __FINALPATH__
- 
-; Redirect worker stdout and stderr into main error log. If not set, stdout and
-; stderr will be redirected to /dev/null according to FastCGI specs.
-; Note: on highloaded environement, this can cause some delay in the page
-; process time (several ms).
-; Default Value: no
-;catch_workers_output = yes
-
-; Clear environment in FPM workers
-; Prevents arbitrary environment variables from reaching FPM worker processes
-; by clearing the environment in workers before env vars specified in this
-; pool configuration are added.
-; Setting to "no" will make all environment variables available to PHP code
-; via getenv(), $_ENV and $_SERVER.
-; Default Value: yes
-;clear_env = no
-
-; Limits the extensions of the main script FPM will allow to parse. This can
-; prevent configuration mistakes on the web server side. You should only limit
-; FPM to .php extensions to prevent malicious users to use other extensions to
-; execute php code.
-; Note: set an empty value to allow all extensions.
-; Default Value: .php
-;security.limit_extensions = .php .php3 .php4 .php5 .php7
-
-; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
-; the current environment.
-; Default Value: clean env
-;env[HOSTNAME] = $HOSTNAME
-;env[PATH] = /usr/local/bin:/usr/bin:/bin
-;env[TMP] = /tmp
-;env[TMPDIR] = /tmp
-;env[TEMP] = /tmp
-
-; Additional php.ini defines, specific to this pool of workers. These settings
-; overwrite the values previously defined in the php.ini. The directives are the
-; same as the PHP SAPI:
-;   php_value/php_flag             - you can set classic ini defines which can
-;                                    be overwritten from PHP call 'ini_set'.
-;   php_admin_value/php_admin_flag - these directives won't be overwritten by
-;                                     PHP call 'ini_set'
-; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
-
-; Defining 'extension' will load the corresponding shared extension from
-; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
-; overwrite previously defined php.ini values, but will append the new value
-; instead.
-
-; Note: path INI options can be relative and will be expanded with the prefix
-; (pool, global or /usr)
-
-; Default Value: nothing is defined by default except the values in php.ini and
-;                specified at startup with the -d argument
-;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
-;php_flag[display_errors] = off
-;php_admin_value[error_log] = /var/log/fpm-php.www.log
-;php_admin_flag[log_errors] = on
-;php_admin_value[memory_limit] = 32M

+ 0 - 52
config_panel.json

@@ -1,52 +0,0 @@
-{
-	"name": "PiHole configuration panel",
-	"version": "0.1",
-	"panel": [{
-		"name": "PiHole configuration",
-		"id": "main",
-		"sections": [{
-			"name": "Overwriting config files",
-			"id": "overwrite_files",
-			"options": [{
-				"name": "Overwrite the config file setupVars.conf ?",
-				"help": "If the file is overwritten, a backup will be created.",
-				"id": "overwrite_setupvars",
-				"type": "bool",
-				"default": true
-			},
-			{
-				"name": "Overwrite the config file pihole-FTL.conf ?",
-				"help": "If the file is overwritten, a backup will be created.",
-				"id": "overwrite_ftl",
-				"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 php-fpm config file ?",
-				"help": "If the file is overwritten, a backup will be created.",
-				"id": "overwrite_phpfpm",
-				"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
-			}]
-		}]
-	}
-]
-}

+ 64 - 0
config_panel.toml

@@ -0,0 +1,64 @@
+version = "0.1"
+name = "PiHole configuration panel"
+
+[main]
+name = "PiHole configuration"
+
+    [main.overwrite_files]
+    name = "Overwriting config files"
+
+        [main.overwrite_files.overwrite_setupvars]
+        ask = "Overwrite the config file setupVars.conf ?"
+        type = "boolean"
+        default = true
+        help = "If the file is overwritten, a backup will be created."
+
+        [main.overwrite_files.overwrite_ftl]
+        ask = "Overwrite the config file pihole-FTL.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_phpfpm]
+        ask = "Overwrite the php-fpm 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."
+
+
+    [main.php_fpm_config]
+    name = "PHP-FPM configuration"
+
+        [main.php_fpm_config.footprint]
+        ask = "Memory footprint of the service ?"
+        choices = ["low", "medium", "high", "specific"]
+        default = "low"
+        help = "low <= 20Mb per pool. medium between 20Mb and 40Mb per pool. high > 40Mb per pool.<br>Use specific to set a value with the following option."
+
+        [main.php_fpm_config.free_footprint]
+        ask = "Memory footprint of the service ?"
+        type = "number"
+        default = "0"
+        help = "Free field to specify exactly the footprint in Mb if you don't want to use one of the three previous values."
+
+        [main.php_fpm_config.usage]
+        ask = "Expected usage of the service ?"
+        choices = ["low", "medium", "high"]
+        default = "low"
+        help = "low: Personal usage, behind the sso. No RAM footprint when not used, but the impact on the processor can be high if many users are using the service.<br>medium: Low usage, few people or/and publicly accessible. Low RAM footprint, medium processor footprint when used.<br>high: High usage, frequently visited website. High RAM footprint, but lower on processor usage and quickly responding."

+ 2 - 2
manifest.json

@@ -6,7 +6,7 @@
 		"en": "Network-wide ad blocking via your own DNS server.",
 		"fr": "Filtrage publicitaire sur l'ensemble du réseau via votre propre serveur DNS."
 	},
-	"version": "3.3.1~ynh5",
+	"version": "3.3.1~ynh6",
 	"url": "https://pi-hole.net/",
 	"license": "EUPL-1.2",
 	"maintainer": {
@@ -14,7 +14,7 @@
 		"email": "maniackc_dev@crudelis.fr"
 	},
 	"requirements": {
-		"yunohost": ">= 3.4"
+		"yunohost": ">= 3.6"
 	},
 	"multi_instance": false,
 	"services": [

+ 367 - 474
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 <<EOF
-[$app]
-enabled = true
-port = $ports
-filter = $app
-logpath = $logpath
-maxretry = $max_retry
-EOF
-
-  tee $finalfail2banfilterconf <<EOF
-[INCLUDES]
-before = common.conf
-[Definition]
-failregex = $failregex
-ignoreregex =
-EOF
-
-	ynh_store_file_checksum "$finalfail2banjailconf"
-	ynh_store_file_checksum "$finalfail2banfilterconf"
-
-	if [ "$(lsb_release --codename --short)" != "jessie" ]; then
-		systemctl reload fail2ban
-	else
-		systemctl restart fail2ban
-	fi
-	local fail2ban_error="$(journalctl -u fail2ban | tail -n50 | grep "WARNING.*$app.*")"
-	if [ -n "$fail2ban_error" ]
-	then
-		echo "[ERR] Fail2ban failed to load the jail for $app" >&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 <upstreamversion>~ynh<packageversion>
-# 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 <upstreamversion>~ynh<packageversion>
-# 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 "<!DOCTYPE html>
 <html>
@@ -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
+# 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}
+
+    local original_changelog="$changelog"
+    local temp_changelog="changelog_temp"
+    local final_changelog="$output"
+
+    if [ ! -n "$original_changelog" ]
+    then
+        echo "No changelog available..." > "$final_changelog"
+        echo "No changelog available..." > "${final_changelog}_lite"
+        return 0
+    fi
+
+    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")
+
+    # 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
+
+    # 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"
+
+    # 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
+
+    # 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="<a href=\"\2\">\1</a>)" --target_file="$final_changelog"
+        ynh_replace_string --match_string="\[\(.*\)\](\(.*\))" --replace_string="<a href=\"\2\">\1</a>" --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
+}
+
+#=================================================
+
+# Check the amount of available RAM
 #
-# 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 () {
+# 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=( [d]=dest_dir= [s]=source_id= )
-	local dest_dir
-	local source_id
+	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}
 
-	source_id=${source_id:-app} # If the argument is not given, source_id equals "$app"
+	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 ))
 
-	# 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-)
-
-	# 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 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 ))
 
-	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
+	# Use the total amount of ram
+	local ram=$total_ram_swap
+	if [ $free_ram -eq 1 ]
+	then
+		# 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
 
-	# Check the control sum
-	echo "${file_sum} ${filename}" | ${file_sumprg} -c --status \
-		|| ynh_die "Corrupt file"
-
-	# Create the destination directory, if it's not already.
-	mkdir -p "$dest_dir"
+	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
 
-	# Move the file to its destination
-	mv $filename $dest_dir
+	# If no RAM is required, return the amount of available ram.
+	else
+		echo $ram
+	fi
 }
 
 #=================================================
 
-# Create a changelog for an app after an upgrade.
+# Define the values to configure php-fpm
 #
-# The changelog is printed into the file ./changelog for the time of the upgrade.
+# 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
 #
-# 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.
+# | 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.
 #
-# Because of the need of those info, ynh_app_changelog works only
-# with apps that have been installed from a list.
+# | arg: -p, --print - Print the result
 #
-# 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.
-
-		grep "$value\": \"" /etc/yunohost/apps/$app/status.json | sed "s/.*$value\": \"\([^\"]*\).*/\1/"
-	}
-
-	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" ]
-	then
-		ynh_print_warn "Unable to build the changelog..."
-		touch changelog
-		return 0
-	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
+#
+#
+# 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
+}
 
-	# 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
+# 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
 }

+ 1 - 7
scripts/_variables

@@ -1,10 +1,4 @@
 #!/bin/bash
 
 # Dependencies
-app_depencencies="sqlite idn2"
-# dhcpcd5 has been removed because it can cause some problems with the internet connection.
-if [ "$(ynh_debian_release)" != "jessie" ]; then
-	app_depencencies="$app_depencencies php-sqlite3"
-else
-	app_depencencies="$app_depencencies php5-sqlite"
-fi
+app_depencencies="sqlite idn2 php7.0-sqlite3"

+ 132 - 0
scripts/_ynh_add_fpm_config

@@ -0,0 +1,132 @@
+#!/bin/bash
+
+# Create a dedicated php-fpm config
+#
+# usage 1: ynh_add_fpm_config [--phpversion=7.X] [--use_template]
+# | arg: -v, --phpversion - Version of php to use.
+# | arg: -t, --use_template - Use this helper in template mode.
+#
+# -----------------------------------------------------------------------------
+#
+# usage 2: ynh_add_fpm_config [--phpversion=7.X] --usage=usage --footprint=footprint
+# | arg: -v, --phpversion - Version of php to use.#
+# | 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.
+#
+# Requires YunoHost version 2.7.2 or higher.
+ynh_add_fpm_config () {
+	# Declare an array to define the options of this helper.
+	local legacy_args=vtuf
+	declare -Ar args_array=( [v]=phpversion= [t]=use_template [u]=usage= [f]=footprint= )
+	local phpversion
+    local use_template
+    local usage
+    local footprint
+	# Manage arguments with getopts
+	ynh_handle_getopts_args "$@"
+	# The default behaviour is to use the template.
+    use_template="${use_template:-1}"
+    usage="${usage:-}"
+    footprint="${footprint:-}"
+    if [ -n "$usage" ] || [ -n "$footprint" ]; then
+        use_template=0
+    fi
+
+	# Configure PHP-FPM 7.0 by default
+	phpversion="${phpversion:-7.0}"
+
+	local fpm_config_dir="/etc/php/$phpversion/fpm"
+	local fpm_service="php${phpversion}-fpm"
+	# Configure PHP-FPM 5 on Debian Jessie
+	if [ "$(ynh_get_debian_release)" == "jessie" ]; then
+		fpm_config_dir="/etc/php5/fpm"
+		fpm_service="php5-fpm"
+	fi
+	ynh_app_setting_set --app=$app --key=fpm_config_dir --value="$fpm_config_dir"
+	ynh_app_setting_set --app=$app --key=fpm_service --value="$fpm_service"
+	finalphpconf="$fpm_config_dir/pool.d/$app.conf"
+	ynh_backup_if_checksum_is_different --file="$finalphpconf"
+
+	if [ $use_template -eq 1 ]
+	then
+        # Usage 1, use the template in ../conf/php-fpm.conf
+        sudo cp ../conf/php-fpm.conf "$finalphpconf"
+        ynh_replace_string --match_string="__NAMETOCHANGE__" --replace_string="$app" --target_file="$finalphpconf"
+        ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file="$finalphpconf"
+        ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="$finalphpconf"
+        ynh_replace_string --match_string="__PHPVERSION__" --replace_string="$phpversion" --target_file="$finalphpconf"
+
+	else
+        # Store settings
+        ynh_app_setting_set --app=$app --key=fpm_footprint --value=$footprint
+        ynh_app_setting_set --app=$app --key=fpm_usage --value=$usage
+
+        # Usage 2, generate a php-fpm config file with ynh_get_scalable_phpfpm
+        ynh_get_scalable_phpfpm --usage=$usage --footprint=$footprint
+
+        # Copy the default file
+        sudo cp "$fpm_config_dir/pool.d/www.conf" "$finalphpconf"
+
+        # Replace standard variables into the default file
+        ynh_replace_string --match_string="^\[www\]" --replace_string="[$app]" --target_file="$finalphpconf"
+        ynh_replace_string --match_string=".*listen = .*" --replace_string="listen = /var/run/php/php7.0-fpm-$app.sock" --target_file="$finalphpconf"
+        ynh_replace_string --match_string="^user = .*" --replace_string="user = $app" --target_file="$finalphpconf"
+        ynh_replace_string --match_string="^group = .*" --replace_string="group = $app" --target_file="$finalphpconf"
+        ynh_replace_string --match_string=".*chdir = .*" --replace_string="chdir = $final_path" --target_file="$finalphpconf"
+
+        # Configure fpm children
+        ynh_replace_string --match_string=".*pm = .*" --replace_string="pm = $php_pm" --target_file="$finalphpconf"
+        ynh_replace_string --match_string=".*pm.max_children = .*" --replace_string="pm.max_children = $php_max_children" --target_file="$finalphpconf"
+        ynh_replace_string --match_string=".*pm.max_requests = .*" --replace_string="pm.max_requests = 500" --target_file="$finalphpconf"
+        ynh_replace_string --match_string=".*request_terminate_timeout = .*" --replace_string="request_terminate_timeout = 1d" --target_file="$finalphpconf"
+        if [ "$php_pm" = "dynamic" ]
+        then
+            ynh_replace_string --match_string=".*pm.start_servers = .*" --replace_string="pm.start_servers = $php_start_servers" --target_file="$finalphpconf"
+            ynh_replace_string --match_string=".*pm.min_spare_servers = .*" --replace_string="pm.min_spare_servers = $php_min_spare_servers" --target_file="$finalphpconf"
+            ynh_replace_string --match_string=".*pm.max_spare_servers = .*" --replace_string="pm.max_spare_servers = $php_max_spare_servers" --target_file="$finalphpconf"
+        elif [ "$php_pm" = "ondemand" ]
+        then
+            ynh_replace_string --match_string=".*pm.process_idle_timeout = .*" --replace_string="pm.process_idle_timeout = 10s" --target_file="$finalphpconf"
+        fi
+
+        # Comment unused parameters
+        if [ "$php_pm" != "dynamic" ]
+        then
+            ynh_replace_string --match_string=".*\(pm.start_servers = .*\)" --replace_string=";\1" --target_file="$finalphpconf"
+            ynh_replace_string --match_string=".*\(pm.min_spare_servers = .*\)" --replace_string=";\1" --target_file="$finalphpconf"
+            ynh_replace_string --match_string=".*\(pm.max_spare_servers = .*\)" --replace_string=";\1" --target_file="$finalphpconf"
+        fi
+        if [ "$php_pm" != "ondemand" ]
+        then
+            ynh_replace_string --match_string=".*\(pm.process_idle_timeout = .*\)" --replace_string=";\1" --target_file="$finalphpconf"
+        fi
+
+        # Concatene the extra config.
+        if [ -e ../conf/extra_php-fpm.conf ]; then
+            cat ../conf/extra_php-fpm.conf >> "$finalphpconf"
+        fi
+	fi
+	sudo chown root: "$finalphpconf"
+	ynh_store_file_checksum --file="$finalphpconf"
+
+	if [ -e "../conf/php-fpm.ini" ]
+	then
+		echo "Packagers ! Please do not use a separate php ini file, merge your directives in the pool file instead." >&2
+		finalphpini="$fpm_config_dir/conf.d/20-$app.ini"
+		ynh_backup_if_checksum_is_different "$finalphpini"
+		sudo cp ../conf/php-fpm.ini "$finalphpini"
+		sudo chown root: "$finalphpini"
+		ynh_store_file_checksum "$finalphpini"
+	fi
+	ynh_systemd_action --service_name=$fpm_service --action=reload
+}

+ 7 - 7
scripts/actions/reset_default_config

@@ -12,10 +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}
-query_logging=$(ynh_app_setting_get $app query_logging)
+
+query_logging=$(ynh_app_setting_get --app=$app --key=query_logging)
 
 #=================================================
 # SORT OUT THE CONFIG FILE TO HANDLE
@@ -34,10 +34,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" = "setupVars.conf" ]
 then
@@ -46,7 +46,7 @@ then
 	main_iface=$(ip route | grep --max-count=1 default | awk '{print $5;}')
 	echo "PIHOLE_INTERFACE=$main_iface" > "$config_file"
 	echo "IPV4_ADDRESS=127.0.0.1" >> "$config_file"
-	echo "IPV6_ADDRESS=" >> "$config_file"
+	echo "IPV6_ADDRESS=::1" >> "$config_file"
 	echo "PIHOLE_DNS_1=" >> "$config_file"
 	echo "PIHOLE_DNS_2=" >> "$config_file"
 	if [ $query_logging -eq 1 ]; then
@@ -62,14 +62,14 @@ then
 	# Get the default file and overwrite the current config
 	cp /etc/yunohost/apps/$app/conf/pihole-FTL.conf "$config_file"
 
-	ynh_script_progression --message="Restart PiHole" --weight=2
+	ynh_script_progression --message="Restarting PiHole..." --weight=2
 
 	# Restart pihole-FTL
 	ynh_systemd_action --action=restart --service_name=pihole-FTL
 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"
 
 #=================================================
 # END OF SCRIPT

+ 27 - 27
scripts/backup

@@ -19,84 +19,84 @@ 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)
-path_url=$(ynh_app_setting_get $app path)
-domain=$(ynh_app_setting_get $app domain)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+path_url=$(ynh_app_setting_get --app=$app --key=path)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
 
 #=================================================
 # STANDARD BACKUP STEPS
 #=================================================
 # BACKUP THE MAIN APP DIRECTORIES
 #=================================================
-ynh_script_progression --message="Backup the app main directories" --weight=5
+ynh_script_progression --message="Backing up the main app directory..." --weight=5
 
 CHECK_SIZE "$final_path"
-ynh_backup "$final_path"
+ynh_backup --src_path="$final_path"
 
 CHECK_SIZE "/etc/.pihole"
-ynh_backup "/etc/.pihole"
+ynh_backup --src_path="/etc/.pihole"
 
 CHECK_SIZE "/etc/pihole"
-ynh_backup "/etc/pihole"
+ynh_backup --src_path="/etc/pihole"
 
 CHECK_SIZE "/opt/pihole"
-ynh_backup "/opt/pihole"
+ynh_backup --src_path="/opt/pihole"
 
 #=================================================
 # 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"
 
 #=================================================
 # BACKUP PHP-FPM CONFIGURATION
 #=================================================
-ynh_script_progression --message="Backup php-fpm configuration"
+ynh_script_progression --message="Backing up php-fpm configuration..."
 
-ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf"
+ynh_backup --src_path="/etc/php/7.0/fpm/pool.d/$app.conf"
 
 #=================================================
 # SPECIFIC BACKUP
 #=================================================
 # BACKUP CRON FILE
 #=================================================
-ynh_script_progression --message="Backup cron file"
+ynh_script_progression --message="Backing up cron file..."
 
-ynh_backup "/etc/cron.d/pihole"
+ynh_backup --src_path="/etc/cron.d/pihole"
 
 #=================================================
 # BACKUP SPECIFIC FILES
 #=================================================
-ynh_script_progression --message="Backup specific files"
+ynh_script_progression --message="Backing specific files..."
 
-ynh_backup "/usr/local/bin/pihole"
-ynh_backup "/etc/bash_completion.d/pihole"
+ynh_backup --src_path="/usr/local/bin/pihole"
+ynh_backup --src_path="/etc/bash_completion.d/pihole"
 
-ynh_backup "/etc/sudoers.d/pihole"
+ynh_backup --src_path="/etc/sudoers.d/pihole"
 
-ynh_backup "/etc/init.d/pihole-FTL"
-ynh_backup "/usr/bin/pihole-FTL"
+ynh_backup --src_path="/etc/init.d/pihole-FTL"
+ynh_backup --src_path="/usr/bin/pihole-FTL"
 
-ynh_backup "/etc/dnsmasq.d/01-pihole.conf"
+ynh_backup --src_path="/etc/dnsmasq.d/01-pihole.conf"
 if test -e "/etc/dnsmasq.d/02-pihole-dhcp.conf"; then
-	ynh_backup "/etc/dnsmasq.d/02-pihole-dhcp.conf"
+	ynh_backup --src_path="/etc/dnsmasq.d/02-pihole-dhcp.conf"
 fi
 if test -e "/etc/dnsmasq.d/03-pihole-wildcard.conf"; then
-	ynh_backup "/etc/dnsmasq.d/03-pihole-wildcard.conf"
+	ynh_backup --src_path="/etc/dnsmasq.d/03-pihole-wildcard.conf"
 fi
 if test -e "/etc/dnsmasq.d/04-pihole-static-dhcp.conf"; then
-	ynh_backup "/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
+	ynh_backup --src_path="/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
 fi
 
-ynh_backup "/usr/share/yunohost/hooks/conf_regen/50-dnsmasq_$app"
+ynh_backup --src_path="/usr/share/yunohost/hooks/conf_regen/50-dnsmasq_$app"
 
 #=================================================
 # END OF SCRIPT
 #=================================================
 
-ynh_script_progression --message="Backup completed" --last
+ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last

+ 24 - 28
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,24 +24,31 @@ 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)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
 
 #=================================================
-# 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=11
 
-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
@@ -64,19 +70,12 @@ then
 	change_path=1
 fi
 
-#=================================================
-# MANAGE FAILURE OF THE SCRIPT
-#=================================================
-
-# Exit if an error occurs during the execution of the script
-ynh_abort_if_errors
-
 #=================================================
 # STANDARD MODIFICATIONS
 #=================================================
 # MODIFY URL IN NGINX CONF
 #=================================================
-ynh_script_progression --message="Modify url in nginx configuration" --weight=4
+ynh_script_progression --message="Updating nginx web server configuration..." --weight=4
 
 nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf
 
@@ -84,15 +83,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
@@ -101,11 +97,11 @@ 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
 
 #=================================================
@@ -113,14 +109,14 @@ 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
 
 #=================================================
 # DEACTIVE MAINTENANCE MODE
 #=================================================
-ynh_script_progression --message="Disable maintenance mode" --weight=5
+ynh_script_progression --message="Disabling maintenance mode..." --weight=5
 
 path_url=$old_path
 domain=$old_domain
@@ -130,4 +126,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

+ 72 - 26
scripts/config

@@ -8,6 +8,7 @@
 
 source _common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config
 
 #=================================================
 # RETRIEVE ARGUMENTS
@@ -27,44 +28,65 @@ app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
 # Otherwise, keep the value from the app config.
 
 # Overwrite setupVars.conf file
-old_overwrite_setupvars="$(ynh_app_setting_get $app overwrite_setupvars)"
-old_overwrite_setupvars=$(bool_to_true_false $old_overwrite_setupvars)
+old_overwrite_setupvars="$(ynh_app_setting_get --app=$app --key=overwrite_setupvars)"
 overwrite_setupvars="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_SETUPVARS:-$old_overwrite_setupvars}"
 
 # Overwrite pihole-FTL.conf file
-old_overwrite_ftl="$(ynh_app_setting_get $app overwrite_ftl)"
-old_overwrite_ftl=$(bool_to_true_false $old_overwrite_ftl)
+old_overwrite_ftl="$(ynh_app_setting_get --app=$app --key=overwrite_ftl)"
 overwrite_ftl="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_FTL:-$old_overwrite_ftl}"
 
 # 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 php-fpm configuration
-old_overwrite_phpfpm="$(ynh_app_setting_get $app overwrite_phpfpm)"
-old_overwrite_phpfpm=$(bool_to_true_false $old_overwrite_phpfpm)
+old_overwrite_phpfpm="$(ynh_app_setting_get --app=$app --key=overwrite_phpfpm)"
 overwrite_phpfpm="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_PHPFPM:-$old_overwrite_phpfpm}"
 
+
 # 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}"
 
+
+# Footprint for php-fpm
+old_fpm_footprint="$(ynh_app_setting_get --app=$app --key=fpm_footprint)"
+fpm_footprint="${YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FOOTPRINT:-$old_fpm_footprint}"
+
+# Free footprint value for php-fpm
+# Check if fpm_footprint is an integer
+if [ "$fpm_footprint" -eq "$fpm_footprint" ] 2> /dev/null
+then
+    # If fpm_footprint is an integer, that's a numeric value for the footprint
+    old_free_footprint=$fpm_footprint
+    fpm_footprint=specific
+else
+    old_free_footprint=0
+fi
+free_footprint="${YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FREE_FOOTPRINT:-$old_free_footprint}"
+
+# Usage for php-fpm
+old_fpm_usage="$(ynh_app_setting_get --app=$app --key=fpm_usage)"
+fpm_usage="${YNH_CONFIG_MAIN_PHP_FPM_CONFIG_USAGE:-$old_fpm_usage}"
+
 #=================================================
 # SHOW_CONFIG FUNCTION FOR 'SHOW' COMMAND
 #=================================================
 
 show_config() {
 	# here you are supposed to read some config file/database/other then print the values
-	# echo "YNH_CONFIG_${PANEL_ID}_${SECTION_ID}_${OPTION_ID}=value"
+	# ynh_return "YNH_CONFIG_${PANEL_ID}_${SECTION_ID}_${OPTION_ID}=value"
 
-	echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_SETUPVARS=$overwrite_setupvars"
-	echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_FTL=$overwrite_ftl"
-	echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_NGINX=$overwrite_nginx"
-	echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_PHPFPM=$overwrite_phpfpm"
+	ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_SETUPVARS=$overwrite_setupvars"
+	ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_FTL=$overwrite_ftl"
+	ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_NGINX=$overwrite_nginx"
+	ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_PHPFPM=$overwrite_phpfpm"
 
-	echo "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html"
+	ynh_return "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html"
+
+	ynh_return "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FOOTPRINT=$fpm_footprint"
+	ynh_return "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FREE_FOOTPRINT=$free_footprint"
+	ynh_return "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_USAGE=$fpm_usage"
 }
 
 #=================================================
@@ -72,22 +94,46 @@ show_config() {
 #=================================================
 
 apply_config() {
+
+    #=================================================
+    # MODIFY OVERWRITTING SETTINGS
+    #=================================================
+
 	# Set overwrite_setupvars
-	overwrite_setupvars=$(bool_to_01 $overwrite_setupvars)
-	ynh_app_setting_set $app overwrite_setupvars "$overwrite_setupvars"
+	ynh_app_setting_set --app=$app --key=overwrite_setupvars --value="$overwrite_setupvars"
 	# Set overwrite_ftl
-	overwrite_ftl=$(bool_to_01 $overwrite_ftl)
-	ynh_app_setting_set $app overwrite_ftl "$overwrite_ftl"
+	ynh_app_setting_set --app=$app --key=overwrite_ftl --value="$overwrite_ftl"
 	# 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_phpfpm
-	overwrite_phpfpm=$(bool_to_01 $overwrite_phpfpm)
-	ynh_app_setting_set $app overwrite_phpfpm "$overwrite_phpfpm"
+	ynh_app_setting_set --app=$app --key=overwrite_phpfpm --value="$overwrite_phpfpm"
+
+    #=================================================
+    # MODIFY EMAIL SETTING
+    #=================================================
 
 	# 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"
+
+    #=================================================
+    # RECONFIGURE PHP-FPM
+    #=================================================
+
+    if [ "$fpm_usage" != "$old_fpm_usage" ] || [ "$fpm_footprint" != "$old_fpm_footprint" ] || [ "$free_footprint" != "$old_free_footprint" ]
+    then
+        # If fpm_footprint is set to 'specific', use $free_footprint value.
+        if [ "$fpm_footprint" = "specific" ]
+        then
+            fpm_footprint=$free_footprint
+        fi
+
+        if [ "$fpm_footprint" != "0" ]
+        then
+            ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint
+        else
+            ynh_print_err --message="When selecting 'specific', you have to set a footprint value into the field below."
+        fi
+    fi
 }
 
 #=================================================

+ 63 - 66
scripts/install

@@ -8,6 +8,7 @@
 
 source _common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config
 # Load common variables for all scripts.
 source _variables
 
@@ -21,7 +22,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
@@ -34,50 +34,47 @@ 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"
+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=3
+ynh_script_progression --message="Storing installation settings..." --weight=3
 
-ynh_app_setting_set $app domain $domain
-ynh_app_setting_set $app path $path_url
-ynh_app_setting_set $app admin $admin
-ynh_app_setting_set $app query_logging $query_logging
-ynh_app_setting_set $app enable_dhcp $enable_dhcp
+ynh_app_setting_set --app=$app --key=domain --value=$domain
+ynh_app_setting_set --app=$app --key=path --value=$path_url
+ynh_app_setting_set --app=$app --key=admin --value=$admin
+ynh_app_setting_set --app=$app --key=query_logging --value=$query_logging
+ynh_app_setting_set --app=$app --key=enable_dhcp --value=$enable_dhcp
 
-ynh_app_setting_set $app overwrite_setupvars "1"
-ynh_app_setting_set $app overwrite_ftl "1"
-ynh_app_setting_set $app overwrite_nginx "1"
-ynh_app_setting_set $app overwrite_phpfpm "1"
-ynh_app_setting_set $app admin_mail_html "1"
+ynh_app_setting_set --app=$app --key=overwrite_setupvars --value=1
+ynh_app_setting_set --app=$app --key=overwrite_ftl --value=1
+ynh_app_setting_set --app=$app --key=overwrite_nginx --value=1
+ynh_app_setting_set --app=$app --key=overwrite_phpfpm --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 and open a free port" --weight=12
+ynh_script_progression --message="Configuring firewall..." --weight=12
 
 # Find a free port
-port=$(ynh_find_port 4711)
+port=$(ynh_find_port --port=4711)
 if [ $port -gt 4720 ]
 then
-	ynh_die "The ports 4711 to 4720 are already in use. Pi-hole can't works on another port. Please try to free one of this ports."
+	ynh_die --message="The ports 4711 to 4720 are already in use. Pi-hole can't works on another port. Please try to free one of this ports."
 fi
 # Open this port
 ynh_exec_fully_quiet yunohost firewall allow --no-upnp TCP $port
-ynh_app_setting_set $app port $port
+ynh_app_setting_set --app=$app --key=port --value=$port
 
 # Disable the port 53 for upnp
 ynh_exec_fully_quiet yunohost firewall disallow Both 53 --no-reload
@@ -86,26 +83,26 @@ ynh_exec_fully_quiet yunohost firewall allow Both 53 --no-upnp
 #=================================================
 # INSTALL DEPENDENCIES
 #=================================================
-ynh_script_progression --message="Install dependencies" --weight=12
+ynh_script_progression --message="Installing dependencies..." --weight=12
 
 ynh_install_app_dependencies $app_depencencies
 
 #=================================================
 # DOWNLOAD, CHECK AND UNPACK SOURCE
 #=================================================
-ynh_script_progression --message="Download, check and unpack source" --weight=4
+ynh_script_progression --message="Setting up source files..." --weight=4
 
-ynh_app_setting_set $app final_path $final_path
+ynh_app_setting_set --app=$app --key=final_path --value=$final_path
 # Make a copy of local pihole repository (for Gravity)
 pihole_local_repo="/etc/.pihole"
-ynh_setup_source "$pihole_local_repo"
+ynh_setup_source --dest_dir="$pihole_local_repo"
 # Install admin dashboard
-ynh_setup_source "$final_path" admin_dashboard
+ynh_setup_source --dest_dir="$final_path" --source_id=admin_dashboard
 
 #=================================================
 # 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
@@ -113,25 +110,25 @@ 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
+ynh_system_user_create --username=$app
 
 #=================================================
 # PHP-FPM CONFIGURATION
 #=================================================
-ynh_script_progression --message="Configure php-fpm" --weight=2
+ynh_script_progression --message="Configuring php-fpm..." --weight=2
 
 # Create a dedicated php-fpm config
-ynh_add_fpm_config
+ynh_add_fpm_config --usage=low --footprint=low
 
 #=================================================
 # SPECIFIC SETUP
 #=================================================
 # CREATE DIRECTORIES AND POPULATE THEM
 #=================================================
-ynh_script_progression --message="Create and populate directories"
+ynh_script_progression --message="Creating and populating directories..."
 
 pihole_storage="/etc/pihole"
 mkdir -p "$pihole_storage"
@@ -150,7 +147,7 @@ cp -a "$pihole_local_repo/advanced/Scripts/COL_TABLE" "$pihole_dir/"
 #=================================================
 # COPY PI-HOLE MAIN SCRIPT
 #=================================================
-ynh_script_progression --message="Copy Pi-Hole main script"
+ynh_script_progression --message="Copying Pi-Hole main script..."
 
 cp -a "$pihole_local_repo/pihole" /usr/local/bin/
 cp -a "$pihole_local_repo/advanced/bash-completion/pihole" /etc/bash_completion.d/pihole
@@ -184,21 +181,21 @@ sed -i "/# su #/d;" "$pihole_storage/logrotate"
 #=================================================
 # INSTALLATION OF PIHOLE-FTL
 #=================================================
-ynh_script_progression --message="Install PiHole-FTL" --weight=30
+ynh_script_progression --message="Installing PiHole-FTL..." --weight=30
 
 # Get the source of Pi-Hole-FTL
 FTL_temp_path=$(mktemp -d)
-ynh_setup_source "$FTL_temp_path" FTL
+ynh_setup_source --dest_dir="$FTL_temp_path" --source_id=FTL
 
 # Instead of downloading a binary file, we're going to compile it
 ( cd "$FTL_temp_path"
 ynh_exec_warn_less make
 ynh_exec_warn_less make install )
-ynh_secure_remove "$FTL_temp_path"
+ynh_secure_remove --file="$FTL_temp_path"
 
 cp "../conf/pihole-FTL.conf" "$pihole_storage"
 # Calculate and store the config file checksum into the app settings
-ynh_store_file_checksum "$pihole_storage/pihole-FTL.conf"
+ynh_store_file_checksum --file="$pihole_storage/pihole-FTL.conf"
 
 cp -a $pihole_local_repo/advanced/pihole-FTL.service /etc/init.d/pihole-FTL
 chmod +x /etc/init.d/pihole-FTL
@@ -214,7 +211,7 @@ setupVars="$pihole_storage/setupVars.conf"
 main_iface=$(ip route | grep --max-count=1 default | awk '{print $5;}')
 echo "PIHOLE_INTERFACE=$main_iface" > $setupVars
 echo "IPV4_ADDRESS=127.0.0.1" >> $setupVars
-echo "IPV6_ADDRESS=" >> $setupVars
+echo "IPV6_ADDRESS=::1" >> $setupVars
 echo "PIHOLE_DNS_1=" >> $setupVars
 echo "PIHOLE_DNS_2=" >> $setupVars
 if [ $query_logging -eq 1 ]; then
@@ -226,42 +223,42 @@ echo "QUERY_LOGGING=$query_logging" >> $setupVars
 echo "INSTALL_WEB=true" >> $setupVars
 
 # Calculate and store the config file checksum into the app settings
-ynh_store_file_checksum "$setupVars"
+ynh_store_file_checksum --file="$setupVars"
 
 #=================================================
 # SET UP DNSMASQ CONFIG
 #=================================================
-ynh_script_progression --message="Set up Dnsmasq config" --weight=2
+ynh_script_progression --message="Setting up Dnsmasq config..." --weight=2
 
 ynh_systemd_action --action=stop --service_name=dnsmasq
 
 pihole_dnsmasq_config="/etc/dnsmasq.d/01-pihole.conf"
 cp "$pihole_local_repo/advanced/01-pihole.conf" $pihole_dnsmasq_config
 # Use dns from /etc/resolv.dnsmasq.conf
-ynh_replace_string "@DNS1@" "" $pihole_dnsmasq_config
-ynh_replace_string "@DNS2@" "" $pihole_dnsmasq_config
-ynh_replace_string "^no-resolv" "#no-resolv" $pihole_dnsmasq_config
+ynh_replace_string --match_string="@DNS1@" --replace_string="" --target_file=$pihole_dnsmasq_config
+ynh_replace_string --match_string="@DNS2@" --replace_string="" --target_file=$pihole_dnsmasq_config
+ynh_replace_string --match_string="^no-resolv" --replace_string="#no-resolv" --target_file=$pihole_dnsmasq_config
 
-ynh_replace_string "@INT@" "$main_iface" $pihole_dnsmasq_config
+ynh_replace_string --match_string="@INT@" --replace_string="$main_iface" --target_file=$pihole_dnsmasq_config
 if [ "$query_logging" = "true" ]; then
-	ynh_replace_string "^#log-queries" "log-queries" $pihole_dnsmasq_config
+	ynh_replace_string --match_string="^#log-queries" --replace_string="log-queries" --target_file=$pihole_dnsmasq_config
 else
-	ynh_replace_string "^log-queries" "#log-queries" $pihole_dnsmasq_config
+	ynh_replace_string --match_string="^log-queries" --replace_string="#log-queries" --target_file=$pihole_dnsmasq_config
 fi
 
 # Fix a too recent option for our dnsmasq version.
-ynh_replace_string "log-queries=extra" "log-queries" $pihole_dnsmasq_config
+ynh_replace_string --match_string="log-queries=extra" --replace_string="log-queries" --target_file=$pihole_dnsmasq_config
 
 # Calculate and store the config file checksum into the app settings
-ynh_store_file_checksum "$pihole_dnsmasq_config"
+ynh_store_file_checksum --file="$pihole_dnsmasq_config"
 
 # To prevent any conflict with the original dnsmasq config, comment cache-size in the original config.
-ynh_replace_string "^cache-size=" "#pihole# cache-size=" /etc/dnsmasq.conf
+ynh_replace_string --match_string="^cache-size=" --replace_string="#pihole# cache-size=" --target_file=/etc/dnsmasq.conf
 
 #=================================================
 # CONFIGURE DNS FOR THE LOCAL DOMAINS
 #=================================================
-ynh_script_progression --message="Configure dns for the local domains" --weight=7
+ynh_script_progression --message="Configuring dns for the local domains..." --weight=7
 
 # Find the IP associated to the network interface
 localipv4=$(ip address | grep "${main_iface}\$" | awk '{print $2;}' | cut -d/ -f1)
@@ -270,7 +267,7 @@ localipv4=$(ip address | grep "${main_iface}\$" | awk '{print $2;}' | cut -d/ -f
 while read perdomain
 do
 	# Comment domain resolution in /etc/hosts on 127.0.0.1, because they can interfere with the local network resolution.
-	ynh_replace_string "^127.0.0.1.*$perdomain" "#Commented by pihole# &" /etc/hosts
+	ynh_replace_string --match_string="^127.0.0.1.*$perdomain" --replace_string="#Commented by pihole# &" --target_file=/etc/hosts
 
 	# And add a resolution on the local IP instead
 	grep -q "^$localipv4.*$perdomain" /etc/hosts || \
@@ -283,7 +280,7 @@ done <<< "$(yunohost domain list | grep "\." | sed 's/.*: \|.*- //')"
 
 if [ $enable_dhcp -eq 1 ]
 then
-	ynh_script_progression --message="Enable dhcp server"
+	ynh_script_progression --message="Enabling dhcp server..."
 	max_dhcp_range=250
 	dhcp_range=100
 	# Define the dhcp range from the current ip
@@ -304,9 +301,9 @@ then
 	cp "../conf/02-pihole-dhcp.conf" "/etc/dnsmasq.d/"
 
 	# And set the config
-	ynh_replace_string "__A_RANGE__" "$ip_beginning_part.$a_range" "/etc/dnsmasq.d/02-pihole-dhcp.conf"
-	ynh_replace_string "__B_RANGE__" "$ip_beginning_part.$b_range" "/etc/dnsmasq.d/02-pihole-dhcp.conf"
-	ynh_replace_string "__GATEWAY__" "$gateway" "/etc/dnsmasq.d/02-pihole-dhcp.conf"
+	ynh_replace_string --match_string="__A_RANGE__" --replace_string="$ip_beginning_part.$a_range" --target_file="/etc/dnsmasq.d/02-pihole-dhcp.conf"
+	ynh_replace_string --match_string="__B_RANGE__" --replace_string="$ip_beginning_part.$b_range" --target_file="/etc/dnsmasq.d/02-pihole-dhcp.conf"
+	ynh_replace_string --match_string="__GATEWAY__" --replace_string="$gateway" --target_file="/etc/dnsmasq.d/02-pihole-dhcp.conf"
 
 	# Set a static ip for the server.
 	echo "dhcp-host=$hw_adress,$localipv4" > "/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
@@ -318,7 +315,7 @@ ynh_exec_fully_quiet yunohost firewall allow UDP 67 --no-upnp
 #=================================================
 # RESTART DNSMASQ
 #=================================================
-ynh_script_progression --message="Restart Dnsmasq" --time --weight=2
+ynh_script_progression --message="Restarting Dnsmasq..." --weight=2
 
 ynh_systemd_action --action=restart --service_name=dnsmasq
 
@@ -328,12 +325,12 @@ ynh_systemd_action --action=restart --service_name=dnsmasq
 
 cp $pihole_local_repo/advanced/pihole.cron /etc/cron.d/pihole
 # Remove git usage for version. Which fails because we use here a release instead of master.
-ynh_replace_string ".*updatechecker.*" "#&" /etc/cron.d/pihole
+ynh_replace_string --match_string=".*updatechecker.*" --replace_string="#&" --target_file=/etc/cron.d/pihole
 
 #=================================================
 # BUILD THE LISTS WITH GRAVITY
 #=================================================
-ynh_script_progression --message="Build the lists with Gravity" --weight=7
+ynh_script_progression --message="Building the lists with Gravity..." --weight=7
 
 cp "$pihole_local_repo/adlists.default" "$pihole_storage/adlists.default"
 ynh_exec_warn_less /opt/pihole/gravity.sh
@@ -341,7 +338,7 @@ ynh_exec_warn_less /opt/pihole/gravity.sh
 #=================================================
 # START PIHOLE-FTL
 #=================================================
-ynh_script_progression --message="Restart PiHole-FTL" --weight=2
+ynh_script_progression --message="Restarting PiHole-FTL..." --weight=2
 
 ynh_systemd_action --action=restart --service_name=pihole-FTL
 
@@ -357,21 +354,21 @@ cp ../conf/dnsmasq_regenconf_hook /usr/share/yunohost/hooks/conf_regen/50-dnsmas
 # ADVERTISE SERVICE IN ADMIN PANEL
 #=================================================
 
-yunohost service add pihole-FTL --log "/var/log/pihole-FTL.log"
+yunohost service add pihole-FTL --description "PiHole backend service" --log "/var/log/pihole-FTL.log"
 
 #=================================================
 # RESTRAIN THE ACCESS TO THE ADMIN ONLY
 #=================================================
-ynh_script_progression --message="Restrain the access to the admin only" --weight=2
+ynh_script_progression --message="Restraining the access to the admin only..." --weight=2
 
 yunohost app addaccess --users=$admin $app
 
 #=================================================
 # RELOAD NGINX
 #=================================================
-ynh_script_progression --message="Reload nginx" --weight=4
+ynh_script_progression --message="Reloading nginx web server..." --weight=3
 
-ynh_systemd_action --action=reload --service_name=nginx
+ynh_systemd_action --service_name=nginx --action=reload
 
 #=================================================
 # SEND A README FOR THE ADMIN
@@ -395,10 +392,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/pihole_ynh__URL_TAG3__." > mail_to_send
 
-ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="$admin" --type="install"
+ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="$admin" --type=install
 
 #=================================================
 # END OF SCRIPT
 #=================================================
 
-ynh_script_progression --message="Installation completed" --last
+ynh_script_progression --message="Installation of $app completed" --last

+ 34 - 34
scripts/remove

@@ -12,12 +12,12 @@ 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)
-port=$(ynh_app_setting_get $app port)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+port=$(ynh_app_setting_get --app=$app --key=port)
 
 #=================================================
 # STANDARD REMOVE
@@ -26,9 +26,9 @@ port=$(ynh_app_setting_get $app port)
 #=================================================
 
 # Check if the service is declared in YunoHost
-if yunohost service status | grep -q pihole-FTL
+if ynh_exec_fully_quiet yunohost service status pihole-FTL
 then
-	ynh_print_info "Remove pihole-FTL service" >&2
+	ynh_script_progression --message="Removing pihole-FTL service..." --weight=2
 	yunohost service remove pihole-FTL
 fi
 
@@ -44,7 +44,7 @@ rm -f "/etc/init.d/pihole-FTL" "/usr/bin/pihole-FTL" "/var/run/pihole-FTL.pid" "
 #=================================================
 # REMOVE DEPENDENCIES
 #=================================================
-ynh_script_progression --message="Remove dependencies" --weight=7
+ynh_script_progression --message="Removing dependencies..." --weight=7
 
 # Remove metapackage and its dependencies
 ynh_remove_app_dependencies
@@ -52,21 +52,21 @@ ynh_remove_app_dependencies
 #=================================================
 # REMOVE THE DIRECTORIES OF THE APP
 #=================================================
-ynh_script_progression --message="Remove app main directories"
+ynh_script_progression --message="Removing app main directory..."
 
 # Remove storage directory
-ynh_secure_remove "/etc/pihole"
+ynh_secure_remove --file="/etc/pihole"
 # Remove app directory
-ynh_secure_remove "/opt/pihole"
+ynh_secure_remove --file="/opt/pihole"
 # Remove admin panel directory
-ynh_secure_remove "/var/www/pihole"
+ynh_secure_remove --file="/var/www/pihole"
 # Remove local clone of the repository
-ynh_secure_remove "/etc/.pihole"
+ynh_secure_remove --file="/etc/.pihole"
 
 #=================================================
 # 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
@@ -74,7 +74,7 @@ ynh_remove_nginx_config
 #=================================================
 # REMOVE PHP-FPM CONFIGURATION
 #=================================================
-ynh_script_progression --message="Remove php-fpm configuration" --weight=2
+ynh_script_progression --message="Removing php-fpm configuration..." --weight=2
 
 # Remove the dedicated php-fpm config
 ynh_remove_fpm_config
@@ -82,17 +82,17 @@ ynh_remove_fpm_config
 #=================================================
 # CLOSE PORTS
 #=================================================
-ynh_script_progression --message="Close ports" --weight=13
+ynh_script_progression --message="Closing port $port et 67..." --weight=13
 
 if yunohost firewall list | grep -q "\- $port$"
 then
-	ynh_print_info "Close port $port" >&2
+	ynh_print_info "Close port $port"
 	ynh_exec_quiet yunohost firewall disallow TCP $port
 fi
 
 if yunohost firewall list | grep -q "\- 67$"
 then
-	ynh_print_info "Close port 67" >&2
+	ynh_print_info "Close port 67"
 	ynh_exec_quiet yunohost firewall disallow UDP 67
 fi
 
@@ -102,35 +102,35 @@ fi
 # REMOVE CRON FILE
 #=================================================
 
-ynh_secure_remove "/etc/cron.d/pihole"
+ynh_secure_remove --file="/etc/cron.d/pihole"
 
 #=================================================
 # REMOVE OTHER FILES
 #=================================================
 
 # Remove logs
-ynh_secure_remove "/var/log/pihole.log"
-ynh_secure_remove "/var/log/pihole-FTL.log"
+ynh_secure_remove --file="/var/log/pihole.log"
+ynh_secure_remove --file="/var/log/pihole-FTL.log"
 
 # Remove main script
-ynh_secure_remove "/usr/local/bin/pihole"
-ynh_secure_remove "/etc/bash_completion.d/pihole"
+ynh_secure_remove --file="/usr/local/bin/pihole"
+ynh_secure_remove --file="/etc/bash_completion.d/pihole"
 
 # Remove sudoer file
-ynh_secure_remove "/etc/sudoers.d/pihole"
+ynh_secure_remove --file="/etc/sudoers.d/pihole"
 
 #=================================================
 # REMOVE DNSMASQ CONFIG
 #=================================================
-ynh_script_progression --message="Remove Dnsmasq config" --weight=2
+ynh_script_progression --message="Removing Dnsmasq config..." --weight=2
 
 ynh_systemd_action --action=stop --service_name=dnsmasq
-rm -f "/etc/dnsmasq.d/01-pihole.conf"
-rm -f "/etc/dnsmasq.d/02-pihole-dhcp.conf"
-rm -f "/etc/dnsmasq.d/03-pihole-wildcard.conf"
-rm -f "/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
+ynh_secure_remove --file="/etc/dnsmasq.d/01-pihole.conf"
+ynh_secure_remove --file="/etc/dnsmasq.d/02-pihole-dhcp.conf"
+ynh_secure_remove --file="/etc/dnsmasq.d/03-pihole-wildcard.conf"
+ynh_secure_remove --file="/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
 
-ynh_replace_string "#pihole# " "" /etc/dnsmasq.conf
+ynh_replace_string --match_string="#pihole# " --replace_string="" --target_file=/etc/dnsmasq.conf
 
 #=================================================
 # CLEAN /etc/hosts
@@ -138,7 +138,7 @@ ynh_replace_string "#pihole# " "" /etc/dnsmasq.conf
 ynh_script_progression --message="Clean /etc/hosts"
 
 # Uncomment lines in /etc/hosts
-sed -i "s/#Commented by pihole# //g" /etc/hosts
+ynh_replace_string --match_string="#Commented by pihole# " --replace_string="" --target_file=/etc/hosts
 
 # And remove extra lines, added by PiHole
 sed -i "/#Added by pihole#/d" /etc/hosts
@@ -146,7 +146,7 @@ sed -i "/#Added by pihole#/d" /etc/hosts
 #=================================================
 # RESTART DNSMASQ
 #=================================================
-ynh_script_progression --message="Restart Dnsmasq"
+ynh_script_progression --message="Restarting Dnsmasq..."
 
 ynh_systemd_action --action=restart --service_name=dnsmasq
 
@@ -154,19 +154,19 @@ ynh_systemd_action --action=restart --service_name=dnsmasq
 # REMOVE CONF_REGEN HOOK
 #=================================================
 
-ynh_secure_remove /usr/share/yunohost/hooks/conf_regen/50-dnsmasq_$app
+ynh_secure_remove --file=/usr/share/yunohost/hooks/conf_regen/50-dnsmasq_$app
 
 #=================================================
 # GENERIC FINALISATION
 #=================================================
 # REMOVE DEDICATED USER
 #=================================================
-ynh_script_progression --message="Remove the dedicated user" --weight=2
+ynh_script_progression --message="Removing the dedicated system user..." --weight=2
 
-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" --last

+ 47 - 46
scripts/restore

@@ -21,29 +21,30 @@ 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
 
-domain=$(ynh_app_setting_get $app domain)
-path_url=$(ynh_app_setting_get $app path)
-final_path=$(ynh_app_setting_get $app final_path)
-enable_dhcp=$(ynh_app_setting_get $app enable_dhcp)
-admin=$(ynh_app_setting_get $app admin)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+path_url=$(ynh_app_setting_get --app=$app --key=path)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+enable_dhcp=$(ynh_app_setting_get --app=$app --key=enable_dhcp)
+admin=$(ynh_app_setting_get --app=$app --key=admin)
 
 #=================================================
 # 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
 
@@ -53,28 +54,28 @@ 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 MAIN DIRECTORIES OF THE APP
 #=================================================
-ynh_script_progression --message="Restore the app main directories"
+ynh_script_progression --message="Restoring the app main directory..."
 
-ynh_restore_file "$final_path"
+ynh_restore_file --origin_path="$final_path"
 
-ynh_restore_file "/etc/.pihole"
+ynh_restore_file --origin_path="/etc/.pihole"
 
-ynh_restore_file "/etc/pihole"
+ynh_restore_file --origin_path="/etc/pihole"
 
-ynh_restore_file "/opt/pihole"
+ynh_restore_file --origin_path="/opt/pihole"
 
 #=================================================
 # 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
@@ -89,14 +90,14 @@ chown root: -R "/etc/pihole/logrotate"
 # RESTORE THE PHP-FPM CONFIGURATION
 #=================================================
 
-ynh_restore_file "/etc/php/7.0/fpm/pool.d/$app.conf"
+ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf"
 
 #=================================================
 # SPECIFIC RESTORE
 #=================================================
 # REINSTALL DEPENDENCIES
 #=================================================
-ynh_script_progression --message="Reinstall dependencies" --weight=12
+ynh_script_progression --message="Reinstalling dependencies..." --weight=12
 
 ynh_install_app_dependencies $app_depencencies
 
@@ -104,13 +105,13 @@ ynh_install_app_dependencies $app_depencencies
 # ADVERTISE SERVICE IN ADMIN PANEL
 #=================================================
 
-yunohost service add pihole-FTL --log "/var/log/pihole-FTL.log"
+yunohost service add pihole-FTL --description "PiHole backend service" --log "/var/log/pihole-FTL.log"
 
 #=================================================
 # RESTORE THE CRON FILE
 #=================================================
 
-ynh_restore_file "/etc/cron.d/pihole"
+ynh_restore_file --origin_path="/etc/cron.d/pihole"
 
 #=================================================
 # RECREATE LOG FILES
@@ -124,40 +125,40 @@ chown $dnsmasq_user:root /var/log/pihole.log
 #=================================================
 # RESTORE SPECIFIC FILES
 #=================================================
-ynh_script_progression --message="Restore specific files"
+ynh_script_progression --message="Restoring specific files..."
 
-ynh_restore_file "/usr/local/bin/pihole"
-ynh_restore_file "/etc/bash_completion.d/pihole"
+ynh_restore_file --origin_path="/usr/local/bin/pihole"
+ynh_restore_file --origin_path="/etc/bash_completion.d/pihole"
 
-ynh_restore_file "/etc/sudoers.d/pihole"
+ynh_restore_file --origin_path="/etc/sudoers.d/pihole"
 
-ynh_restore_file "/etc/init.d/pihole-FTL"
-ynh_restore_file "/usr/bin/pihole-FTL"
+ynh_restore_file --origin_path="/etc/init.d/pihole-FTL"
+ynh_restore_file --origin_path="/usr/bin/pihole-FTL"
 
-ynh_restore_file "/usr/share/yunohost/hooks/conf_regen/50-dnsmasq_$app"
+ynh_restore_file --origin_path="/usr/share/yunohost/hooks/conf_regen/50-dnsmasq_$app"
 
 #=================================================
 # RESTORE DNSMASQ CONFIG
 #=================================================
-ynh_script_progression --message="Restore Dnsmasq config"
+ynh_script_progression --message="Restoring Dnsmasq config..."
 
 ynh_systemd_action --action=stop --service_name=dnsmasq
 
-ynh_restore_file "/etc/dnsmasq.d/01-pihole.conf"
+ynh_restore_file --origin_path="/etc/dnsmasq.d/01-pihole.conf"
 test -e "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/02-pihole-dhcp.conf" && \
-	ynh_restore_file "/etc/dnsmasq.d/02-pihole-dhcp.conf"
+	ynh_restore_file --origin_path="/etc/dnsmasq.d/02-pihole-dhcp.conf"
 test -e "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/03-pihole-wildcard.conf" && \
-	ynh_restore_file "/etc/dnsmasq.d/03-pihole-wildcard.conf"
+	ynh_restore_file --origin_path="/etc/dnsmasq.d/03-pihole-wildcard.conf"
 test -e "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/04-pihole-static-dhcp.conf" && \
-	ynh_restore_file "/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
+	ynh_restore_file --origin_path="/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
 
 # To prevent any conflict with the original dnsmasq config, comment cache-size in the original config.
-ynh_replace_string "^cache-size=" "#pihole# cache-size=" /etc/dnsmasq.conf
+ynh_replace_string --match_string="^cache-size=" --replace_string="#pihole# cache-size=" --target_file=/etc/dnsmasq.conf
 
 #=================================================
 # CONFIGURE DNS FOR THE LOCAL DOMAINS
 #=================================================
-ynh_script_progression --message="Configure dns for the local domains" --weight=2
+ynh_script_progression --message="Configuring dns for the local domains..." --weight=2
 
 # Get the default network interface
 main_iface=$(ip route | grep --max-count=1 default | awk '{print $5;}')
@@ -168,7 +169,7 @@ localipv4=$(ip address | grep "${main_iface}\$" | awk '{print $2;}' | cut -d/ -f
 while read perdomain
 do
 	# Comment domain resolution in /etc/hosts on 127.0.0.1, because they can interfere with the local network resolution.
-	sed -i "s/^127.0.0.1.*$perdomain/#Commented by pihole# &/g" /etc/hosts
+	ynh_replace_string --match_string="^127.0.0.1.*$perdomain" --replace_string="#Commented by pihole# &" --target_file=/etc/hosts
 
 	# And add a resolution on the local IP instead
 	grep -q "^$localipv4.*$perdomain" /etc/hosts || \
@@ -178,7 +179,7 @@ done <<< "$(yunohost domain list | grep "\." | sed 's/.*: \|.*- //')"
 #=================================================
 # RESTART DNSMASQ
 #=================================================
-ynh_script_progression --message="Restart Dnsmasq"
+ynh_script_progression --message="Restarting Dnsmasq..."
 
 ynh_systemd_action --action=restart --service_name=dnsmasq
 
@@ -189,16 +190,16 @@ ynh_systemd_action --action=restart --service_name=dnsmasq
 setupVars="/etc/pihole/setupVars.conf"
 
 echo "PIHOLE_INTERFACE=$main_iface" > $setupVars
-ynh_replace_string "^PIHOLE_INTERFACE=.*" "PIHOLE_INTERFACE=$main_iface" $setupVars
-ynh_replace_string "^IPV4_ADDRESS=.*" "IPV4_ADDRESS=127.0.0.1" $setupVars
+ynh_replace_string --match_string="^PIHOLE_INTERFACE=.*" --replace_string="PIHOLE_INTERFACE=$main_iface" --target_file=$setupVars
+ynh_replace_string --match_string="^IPV4_ADDRESS=.*" --replace_string="IPV4_ADDRESS=127.0.0.1" --target_file=$setupVars
 
 # Recalculate and store the checksum of the file for the next upgrade.
-ynh_store_file_checksum "$setupVars"
+ynh_store_file_checksum --file="$setupVars"
 
 #=================================================
 # START PIHOLE-FTL
 #=================================================
-ynh_script_progression --message="Restart PiHole-FTL" --weight=2
+ynh_script_progression --message="Restarting PiHole-FTL..." --weight=2
 
 ynh_exec_warn_less systemctl enable pihole-FTL
 ynh_systemd_action --action=restart --service_name=pihole-FTL
@@ -208,7 +209,7 @@ ynh_systemd_action --action=restart --service_name=pihole-FTL
 #=================================================
 # RELOAD NGINX AND PHP-FPM
 #=================================================
-ynh_script_progression --message="Reload nginx and php-fpm"
+ynh_script_progression --message="Reloading nginx web server and php-fpm..."
 
 ynh_systemd_action --action=reload --service_name=php7.0-fpm
 ynh_systemd_action --action=reload --service_name=nginx
@@ -216,7 +217,7 @@ ynh_systemd_action --action=reload --service_name=nginx
 #=================================================
 # DEACTIVE MAINTENANCE MODE
 #=================================================
-ynh_script_progression --message="Disable maintenance mode" --weight=4
+ynh_script_progression --message="Disabling maintenance mode..." --weight=4
 
 ynh_maintenance_mode_OFF
 
@@ -242,10 +243,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/pihole_ynh__URL_TAG3__." > mail_to_send
 
-ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="$admin" --type="restore"
+ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="$admin" --type=restore
 
 #=================================================
 # END OF SCRIPT
 #=================================================
 
-ynh_script_progression --message="Restoration completed" --last
+ynh_script_progression --message="Restoration completed for $app" --last

+ 71 - 45
scripts/upgrade

@@ -8,27 +8,32 @@
 
 source _common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config
 # Load common variables for all scripts.
 source _variables
 
 #=================================================
 # LOAD SETTINGS
 #=================================================
-ynh_script_progression --message="Load settings" --weight=3
+ynh_script_progression --message="Loading installation settings..." --weight=3
 
 app=$YNH_APP_INSTANCE_NAME
 
-domain=$(ynh_app_setting_get $app domain)
-path_url=$(ynh_app_setting_get $app path)
-admin=$(ynh_app_setting_get $app admin)
-query_logging=$(ynh_app_setting_get $app query_logging)
-final_path=$(ynh_app_setting_get $app final_path)
-enable_dhcp=$(ynh_app_setting_get $app enable_dhcp)
-port=$(ynh_app_setting_get $app port)
-overwrite_setupvars=$(ynh_app_setting_get $app overwrite_setupvars)
-overwrite_ftl=$(ynh_app_setting_get $app overwrite_ftl)
-overwrite_nginx=$(ynh_app_setting_get $app overwrite_nginx)
-overwrite_phpfpm=$(ynh_app_setting_get $app overwrite_phpfpm)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+path_url=$(ynh_app_setting_get --app=$app --key=path)
+admin=$(ynh_app_setting_get --app=$app --key=admin)
+query_logging=$(ynh_app_setting_get --app=$app --key=query_logging)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+enable_dhcp=$(ynh_app_setting_get --app=$app --key=enable_dhcp)
+port=$(ynh_app_setting_get --app=$app --key=port)
+
+overwrite_setupvars=$(ynh_app_setting_get --app=$app --key=overwrite_setupvars)
+overwrite_ftl=$(ynh_app_setting_get --app=$app --key=overwrite_ftl)
+overwrite_nginx=$(ynh_app_setting_get --app=$app --key=overwrite_nginx)
+overwrite_phpfpm=$(ynh_app_setting_get --app=$app --key=overwrite_phpfpm)
+
+fpm_footprint=$(ynh_app_setting_get --app=$app --key=fpm_footprint)
+fpm_usage=$(ynh_app_setting_get --app=$app --key=fpm_usage)
 
 #=================================================
 # CHECK VERSION
@@ -39,36 +44,48 @@ upgrade_type=$(ynh_check_app_version_changed)
 #=================================================
 # ENSURE DOWNWARD COMPATIBILITY
 #=================================================
-ynh_script_progression --message="Ensure downward compatibility"
+ynh_script_progression --message="Ensuring downward compatibility..."
 
 # If overwrite_setupvars doesn't exist, create it
 if [ -z "$overwrite_setupvars" ]; then
 	overwrite_setupvars=1
-	ynh_app_setting_set $app overwrite_setupvars $overwrite_setupvars
+	ynh_app_setting_set --app=$app --key=overwrite_setupvars --value=$overwrite_setupvars
 fi
 
 # If overwrite_ftl doesn't exist, create it
 if [ -z "$overwrite_ftl" ]; then
 	overwrite_ftl=1
-	ynh_app_setting_set $app overwrite_ftl $overwrite_ftl
+	ynh_app_setting_set --app=$app --key=overwrite_ftl --value=$overwrite_ftl
 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_phpfpm doesn't exist, create it
 if [ -z "$overwrite_phpfpm" ]; then
 	overwrite_phpfpm=1
-	ynh_app_setting_set $app overwrite_phpfpm $overwrite_phpfpm
+	ynh_app_setting_set --app=$app --key=overwrite_phpfpm --value=$overwrite_phpfpm
+fi
+
+# If fpm_footprint doesn't exist, create it
+if [ -z "$fpm_footprint" ]; then
+	fpm_footprint=low
+	ynh_app_setting_set --app=$app --key=fpm_footprint --value=$fpm_footprint
+fi
+
+# If fpm_usage doesn't exist, create it
+if [ -z "$fpm_usage" ]; then
+	fpm_usage=low
+	ynh_app_setting_set --app=$app --key=fpm_usage --value=$fpm_usage
 fi
 
 #=================================================
 # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
 #=================================================
-ynh_script_progression --message="Backup the app before upgrading" --weight=7
+ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=7
 
 # Backup the current version of the app
 ynh_backup_before_upgrade
@@ -84,12 +101,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"
+ynh_script_progression --message="Activating maintenance mode..."
 
 ynh_maintenance_mode_ON
 
@@ -98,7 +115,7 @@ ynh_maintenance_mode_ON
 #=================================================
 # INSTALL DEPENDENCIES
 #=================================================
-ynh_script_progression --message="Upgrade dependencies" --weight=6
+ynh_script_progression --message="Upgrading dependencies..." --weight=6
 
 ynh_install_app_dependencies $app_depencencies
 
@@ -109,11 +126,11 @@ ynh_install_app_dependencies $app_depencencies
 pihole_local_repo="/etc/.pihole"
 if [ "$upgrade_type" == "UPGRADE_APP" ]
 then
-	ynh_script_progression --message="Download, check and unpack source" --weight=4
+	ynh_script_progression --message="Upgrading source files..." --weight=4
 	# Update the local copy pihole repository (for Gravity)
-	ynh_setup_source "$pihole_local_repo"
+	ynh_setup_source --dest_dir="$pihole_local_repo"
 	# Update admin dashboard
-	ynh_setup_source "$final_path" admin_dashboard
+	ynh_setup_source --dest_dir="$final_path" --source_id=admin_dashboard
 fi
 
 #=================================================
@@ -123,7 +140,7 @@ fi
 # 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
 	# Create a dedicated nginx config
 	ynh_add_nginx_config
 fi
@@ -131,10 +148,10 @@ 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
 
 #=================================================
 # PHP-FPM CONFIGURATION
@@ -143,9 +160,9 @@ ynh_system_user_create $app
 # Overwrite the php-fpm configuration only if it's allowed
 if [ $overwrite_phpfpm -eq 1 ]
 then
-	ynh_script_progression --message="Reconfigure php-fpm" --weight=3
+	ynh_script_progression --message="Upgrading php-fpm configuration..." --weight=3
 	# Create a dedicated php-fpm config
-	ynh_add_fpm_config
+	ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint
 fi
 
 #=================================================
@@ -164,7 +181,7 @@ cp -a "$pihole_local_repo/advanced/Scripts/COL_TABLE" "$pihole_dir/"
 #=================================================
 # COPY PI-HOLE MAIN SCRIPT
 #=================================================
-ynh_script_progression --message="Copy Pi-Hole main script"
+ynh_script_progression --message="Copying Pi-Hole main script..."
 
 cp -a "$pihole_local_repo/pihole" /usr/local/bin/
 cp -a "$pihole_local_repo/advanced/bash-completion/pihole" /etc/bash_completion.d/pihole
@@ -190,7 +207,7 @@ sed -i "/# su #/d;" "$pihole_storage/logrotate"
 #=================================================
 # UPDATE PIHOLE-FTL
 #=================================================
-ynh_script_progression --message="Upgrade PiHole-FTL" --weight=35
+ynh_script_progression --message="Upgrading PiHole-FTL..." --weight=35
 
 ynh_systemd_action --action=stop --service_name=pihole-FTL
 
@@ -198,23 +215,23 @@ if [ "$upgrade_type" == "UPGRADE_APP" ]
 then
 	# Get the source of Pi-Hole-FTL
 	FTL_temp_path=$(mktemp -d)
-	ynh_setup_source "$FTL_temp_path" FTL
+	ynh_setup_source --dest_dir="$FTL_temp_path" --source_id=FTL
 
 	# Instead of downloading a binary file, we're going to compile it
 	( cd "$FTL_temp_path"
 	ynh_exec_warn_less make
 	ynh_exec_warn_less make install )
-	ynh_secure_remove "$FTL_temp_path"
+	ynh_secure_remove --file="$FTL_temp_path"
 fi
 
 # Overwrite pihole-FTL config file only if it's allowed
 if [ $overwrite_ftl -eq 1 ]
 then
 	# Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script.
-	ynh_backup_if_checksum_is_different "$pihole_storage/pihole-FTL.conf"
+	ynh_backup_if_checksum_is_different --file="$pihole_storage/pihole-FTL.conf"
 	cp "../conf/pihole-FTL.conf" "$pihole_storage"
 	# Recalculate and store the checksum of the file for the next upgrade.
-	ynh_store_file_checksum "$pihole_storage/pihole-FTL.conf"
+	ynh_store_file_checksum --file="$pihole_storage/pihole-FTL.conf"
 fi
 
 cp -a $pihole_local_repo/advanced/pihole-FTL.service /etc/init.d/pihole-FTL
@@ -231,13 +248,13 @@ setupVars="$pihole_storage/setupVars.conf"
 if [ $overwrite_setupvars -eq 1 ]
 then
 	# Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script.
-	ynh_backup_if_checksum_is_different "$setupVars"
+	ynh_backup_if_checksum_is_different --file="$setupVars"
 
 	# Get the default network interface
 	main_iface=$(ip route | grep --max-count=1 default | awk '{print $5;}')
 	echo "PIHOLE_INTERFACE=$main_iface" > $setupVars
 	echo "IPV4_ADDRESS=127.0.0.1" >> $setupVars
-	echo "IPV6_ADDRESS=" >> $setupVars
+	echo "IPV6_ADDRESS=::1" >> $setupVars
 	echo "PIHOLE_DNS_1=" >> $setupVars
 	echo "PIHOLE_DNS_2=" >> $setupVars
 	if [ $query_logging -eq 1 ]; then
@@ -249,7 +266,7 @@ then
 	echo "INSTALL_WEB=true" >> $setupVars
 
 	# Recalculate and store the checksum of the file for the next upgrade.
-	ynh_store_file_checksum "$setupVars"
+	ynh_store_file_checksum --file="$setupVars"
 fi
 
 #=================================================
@@ -258,12 +275,12 @@ fi
 
 cp $pihole_local_repo/advanced/pihole.cron /etc/cron.d/pihole
 # Remove git usage for version. Which fails because we use here a release instead of master.
-ynh_replace_string ".*updatechecker.*" "#&" /etc/cron.d/pihole
+ynh_replace_string --match_string=".*updatechecker.*" --replace_string="#&" --target_file=/etc/cron.d/pihole
 
 #=================================================
 # START PIHOLE-FTL
 #=================================================
-ynh_script_progression --message="Restart PiHole-FTL" --weight=2
+ynh_script_progression --message="Restarting PiHole-FTL..." --weight=2
 
 ynh_systemd_action --action=restart --service_name=pihole-FTL
 
@@ -276,14 +293,14 @@ cp ../conf/dnsmasq_regenconf_hook /usr/share/yunohost/hooks/conf_regen/50-dnsmas
 #=================================================
 # RELOAD NGINX
 #=================================================
-ynh_script_progression --message="Reload nginx"
+ynh_script_progression --message="Reloading nginx web server..."
 
 ynh_systemd_action --action=reload --service_name=nginx
 
 #=================================================
 # DEACTIVE MAINTENANCE MODE
 #=================================================
-ynh_script_progression --message="Disable maintenance mode" --weight=5
+ynh_script_progression --message="Disabling maintenance mode..." --weight=5
 
 ynh_maintenance_mode_OFF
 
@@ -295,7 +312,16 @@ ynh_maintenance_mode_OFF
 admin_panel="https://$(grep portal_domain /etc/ssowat/conf.json | cut -d'"' -f4)/yunohost/admin/#/apps/$app"
 
 # Build the changelog
-ynh_app_changelog || true
+# 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
+    format=html
+else
+    format=plain
+fi
+ynh_app_changelog --format=$format
 
 if [ $enable_dhcp -eq 1 ]
 then
@@ -317,10 +343,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="$admin" --type="upgrade"
+ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="$admin" --type=upgrade
 
 #=================================================
 # END OF SCRIPT
 #=================================================
 
-ynh_script_progression --message="Upgrade completed" --last
+ynh_script_progression --message="Upgrade of $app completed" --last