From d2778e2eb4f7189bacfaf89f88acc4e0cfe7cca7 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 14 Jun 2020 06:25:54 +0200 Subject: [PATCH] Apply example_ynh --- README.md | 44 ++++-- check_process | 68 ++++----- conf/app.src | 6 + conf/nginx.conf | 28 ++-- conf/php-fpm.conf | 297 +++++++++++++++++++++++++++++++-------- issue_template.md | 46 ++++++ manifest.json | 19 +-- pull_request_template.md | 18 +++ scripts/_common.sh | 20 +++ scripts/backup | 87 +++++++----- scripts/install | 211 ++++++++++++--------------- scripts/remove | 70 +++++---- scripts/restore | 125 +++++++++------- scripts/upgrade | 206 +++++++++++++++++---------- 14 files changed, 819 insertions(+), 426 deletions(-) create mode 100644 conf/app.src create mode 100644 issue_template.md create mode 100644 pull_request_template.md create mode 100644 scripts/_common.sh diff --git a/README.md b/README.md index 6ac964a..5e7bc67 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,37 @@ -# Set of games from Framagames +# Framagames for YunoHost -[![Integration level](https://dash.yunohost.org/integration/framagames.svg)](https://dash.yunohost.org/appci/app/framagames) ![](https://ci-apps.yunohost.org/ci/badges/framagames.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/framagames.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/framagames.svg)](https://dash.yunohost.org/appci/app/framagames) ![](https://ci-apps.yunohost.org/ci/badges/framagames.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/framagames.maintain.svg) +[![Install Framagames with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=framagames) -* Status -
Should be working fine -
Needs to be validated by package_checker -
Package_linter is OK +> *This package allows you to install Framagames quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* -* Sources -
Original sources are from here : [Framagames](https://git.framasoft.org/framasoft/framagames.git) -
In this depot we use the github copy for convenience reasons -
We use the lastest commit from 27th July 2016 +## Overview +Set of games from Framagames + +## YunoHost specific features + +#### Supported architectures + +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/framagames%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/framagames/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/framagames%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/framagames/) + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/framagames_ynh/issues + * Upstream app repository: https://framagit.org/framasoft/framagames + * YunoHost website: https://yunohost.org/ + +--- + +Developer info +---------------- + +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/framagames_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/framagames_ynh/tree/testing --debug +or +sudo yunohost app upgrade framagames -u https://github.com/YunoHost-Apps/framagames_ynh/tree/testing --debug +``` diff --git a/check_process b/check_process index 37a88b6..8bc1094 100644 --- a/check_process +++ b/check_process @@ -1,35 +1,37 @@ -;; master - auto_remove=1 -# Commentaire ignorĂ© +# See here for more information +# https://github.com/YunoHost/package_check#syntax-check_process-file + +# Move this file from check_process.default to check_process when you have filled it. + +;; Test complet ; Manifest - domain="$DOMAIN" (DOMAIN) - path="/path" (PATH) - language="fr" - is_public="Yes" (PUBLIC|public=Yes|private=No) -# password="$PASSWORD" (PASSWORD) -# port="666" (PORT) - ; Checks - pkg_linter=1 - setup_sub_dir=1 - setup_root=1 - setup_nourl=0 - setup_private=1 - setup_public=1 - upgrade=1 - backup_restore=1 - multi_instance=1 - wrong_user=0 - wrong_path=1 - incorrect_path=1 - corrupt_source=0 - fail_download_source=0 - port_already_use=0 (XXXX) - final_path_already_use=0 + domain="domain.tld" (DOMAIN) + path="/path" (PATH) + language="fr" + is_public=1 (PUBLIC|public=1|private=0) + ; Checks + pkg_linter=1 + setup_sub_dir=1 + setup_root=1 + setup_nourl=0 + setup_private=1 + setup_public=1 + upgrade=1 + upgrade=1 from_commit=bd2c87a6fd4212771f9c06e7965598a5ea744ffc + backup_restore=1 + multi_instance=1 + # This test is no longer necessary since the version 2.7 (PR: https://github.com/YunoHost/yunohost/pull/304), you can still do it if your app could be installed with this version. + # incorrect_path=1 + port_already_use=0 + change_url=1 ;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto - Level 4=1 - Level 5=1 - Level 6=auto - Level 7=auto + # If the level 5 (Package linter) is forced to 1. Please add justifications here. + Level 5=auto +;;; Options +Email= +Notification=none +;;; Upgrade options + ; commit=CommitHash + name=Name and date of the commit. + manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666& + diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..f694dbf --- /dev/null +++ b/conf/app.src @@ -0,0 +1,6 @@ +SOURCE_URL=https://framagit.org/framasoft/framagames/-/archive/6808f75cd18f4a1bb0345ce65d055e2dfef8c0b7/framagames-6808f75cd18f4a1bb0345ce65d055e2dfef8c0b7.tar.gz +SOURCE_SUM=6c2bf60663dad46ac6660ddb3634d1c05dcf38cea1f2687b8ee26743deb8a10e +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= diff --git a/conf/nginx.conf b/conf/nginx.conf index 7024722..0f61dcc 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,16 +1,24 @@ -location PATHTOCHANGE { - alias ALIASTOCHANGE; +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { + # Path to source + alias __FINALPATH__/ ; + + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } - client_max_body_size 10G; - index index.php index.html; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm-NAMETOCHANGE.sock; + index index.php index.html; + + # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file + client_max_body_size 10G; + + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; + fastcgi_index index.php; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; @@ -18,6 +26,6 @@ location PATHTOCHANGE { fastcgi_param SCRIPT_FILENAME $request_filename; } - include conf.d/yunohost_panel.conf.inc; - + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf index 6d9a887..1adba6e 100644 --- a/conf/php-fpm.conf +++ b/conf/php-fpm.conf @@ -1,10 +1,11 @@ ; Start a new pool named 'www'. -; the variable $pool can we used in any directive and will be replaced by the +; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) -[NAMETOCHANGE] +[__NAMETOCHANGE__] ; Per pool prefix ; It only applies on the following directives: +; - 'access.log' ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' @@ -16,21 +17,43 @@ ; 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 = www-data +group = www-data + ; 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 address on +; '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/php5-fpm-NAMETOCHANGE.sock +listen = /var/run/php/php__PHPVERSION__-fpm-__NAMETOCHANGE__.sock -; Set listen(2) backlog. A value of '-1' means unlimited. -; Default Value: 128 (-1 on FreeBSD and OpenBSD) -;listen.backlog = -1 +; Set listen(2) backlog. +; Default Value: 511 (-1 on FreeBSD and OpenBSD) +;listen.backlog = 511 -; List of ipv4 addresses of FastCGI clients which are allowed to connect. +; 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 = 0600 +; 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 @@ -38,26 +61,26 @@ listen = /var/run/php5-fpm-NAMETOCHANGE.sock ; Default Value: any ;listen.allowed_clients = 127.0.0.1 -; 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 0666 -listen.owner = www-data -listen.group = www-data -listen.mode = 0600 +; 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 -; 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 = www-data -group = www-data +; 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: +; 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. @@ -69,16 +92,23 @@ group = www-data ; 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 to be created when pm is set to 'dynamic'. +; 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. -; Note: Used when pm is set to either 'static' or 'dynamic' +; 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 = 6 @@ -97,6 +127,11 @@ pm.min_spare_servers = 3 ; Note: Mandatory when pm is set to 'dynamic' pm.max_spare_servers = 5 +; 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. @@ -104,33 +139,98 @@ pm.max_spare_servers = 5 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. By default, the status page shows the following -; information: -; accepted conn - the number of request accepted by the pool; +; recognized as a status page. It shows the following informations: ; pool - the name of the pool; -; process manager - static or dynamic; +; 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. +; 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') -; The values of 'idle processes', 'active processes' and 'total processes' are -; updated each second. The value of 'accepted conn' is updated in real time. +; pm 'dynamic' and 'ondemand'); +; Value are updated in real time. ; Example output: -; accepted conn: 12073 ; pool: www ; process manager: static -; idle processes: 35 -; active processes: 65 -; total processes: 100 -; max children reached: 1 +; 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' or 'json' as a query string will return the corresponding output -; syntax. Example: +; '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. @@ -154,12 +254,73 @@ ping.path = /ping ; Default Value: pong ;ping.response = pong -; 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 = 120s +; 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 %{}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 %{}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 = /var/log/nginx/NAMETOCHANGE.slow.log ; 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'. @@ -167,10 +328,12 @@ request_terminate_timeout = 120s ; Default Value: 0 request_slowlog_timeout = 5s -; The log file for slow requests -; Default Value: not set -; Note: slowlog is mandatory if request_slowlog_timeout is set -slowlog = /var/log/nginx/NAMETOCHANGE.slow.log +; 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 = 120s ; Set open file descriptor rlimit. ; Default Value: system defined value @@ -204,6 +367,23 @@ chdir = /var/www/NAMETOCHANGE ; 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 @@ -238,6 +418,13 @@ catch_workers_output = yes ;php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 32M -;php_value[upload_max_filesize] = 10G -;php_value[post_max_size] = 10G -;php_value[mail.add_x_header] = Off +; Common values to change to increase file upload limit +; php_admin_value[upload_max_filesize] = 50M +; php_admin_value[post_max_size] = 50M +; php_admin_flag[mail.add_x_header] = Off + +; Other common parameters +; php_admin_value[max_execution_time] = 600 +; php_admin_value[max_input_time] = 300 +; php_admin_value[memory_limit] = 256M +; php_admin_flag[short_open_tag] = On diff --git a/issue_template.md b/issue_template.md new file mode 100644 index 0000000..2c9be53 --- /dev/null +++ b/issue_template.md @@ -0,0 +1,46 @@ +--- +name: Bug report +about: Create a report to help us debug, it would be nice to fill the template as much as you can to help us, help you and help us all. + +--- + +**How to post a meaningful bug report** +1. *Read this whole template first.* +2. *Determine if you are on the right place:* + - *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change url...), you are on the right place!* + - *Otherwise, the issue may be due to Framagames itself. Refer to its documentation or repository for help.* + - *If you have a doubt, post here, we will figure it out together.* +3. *Delete the italic comments as you write over them below, and remove this guide.* +--- + +**Describe the bug** +*A clear and concise description of what the bug is.* + +**Versions** +- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...* +- YunoHost version: x.x.x +- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...* +- Are you in a special context or did you perform some particular tweaking on your YunoHost instance ?: *no / yes* + - If yes, please explain: +- Using, or trying to install package version/branch: +- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`* + +**To Reproduce** +*Steps to reproduce the behavior.* +- *If you performed a command from the CLI, the command itself is enough. For example:* + ```sh + sudo yunohost app install framagames + ``` +- *If you used the webadmin, please perform the equivalent command from the CLI first.* +- *If the error occurs in your browser, explain what you did:* + 1. *Go to '...'* + 2. *Click on '....'* + 3. *Scroll down to '....'* + 4. *See error* + +**Expected behavior** +*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.* + +**Logs** +*After a failed command, YunoHost makes the log available to you, but also to others, thanks to `yunohost log display [log name] --share`. The actual command, with the correct log name, is displayed at the end of the failed attempt in the CLI. Execute it and copy here the share link it outputs.* +*If applicable and useful, add screenshots to help explain your problem.* diff --git a/manifest.json b/manifest.json index efb6ac0..2ae591b 100644 --- a/manifest.json +++ b/manifest.json @@ -6,20 +6,21 @@ "en": "Set of games Framagames from Framasoft", "fr": "Ensemble de jeux Framagames venant de Framasoft" }, + "version": "1.0~ynh2", "url": "https://github.com/YunoHost-Apps/framagames_ynh", "license": "free", "maintainer": { "name": "polytan02", "email": "polytan02@mcgva.org" }, + "requirements": { + "yunohost": ">= 3.5" + }, "multi_instance": true, "services": [ "nginx", - "php5-fpm" + "php7.0-fpm" ], - "requirements": { - "yunohost": ">= 2.4.0" - }, "arguments": { "install" : [ { @@ -29,7 +30,7 @@ "en": "Choose a domain for your framagames", "fr": "Choisissez un domaine pour vos framagames" }, - "example": "domain.tld" + "example": "example.com" }, { "name": "path", @@ -43,12 +44,12 @@ }, { "name": "is_public", + "type": "boolean", "ask": { - "en": "Is it a public website ?", - "fr": "Est-ce un site publique ?" + "en": "Is it a public application?", + "fr": "Est-ce une application publique ?" }, - "choices": ["Yes", "No"], - "default": "Yes" + "default": true } ] } diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 0000000..6bcff4d --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,18 @@ +## Problem +- *Description of why you made this PR* + +## Solution +- *And how do you fix that problem* + +## PR Status +- [ ] Code finished. +- [ ] Tested with Package_check. +- [ ] Fix or enhancement tested. +- [ ] Upgrade from last version tested. +- [ ] Can be reviewed and tested. + +## Package_check results +--- +*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results* + +[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/framagames_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/framagames_ynh%20PR-NUM-%20(USERNAME)/) diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..ecd263f --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +#================================================= +# COMMON VARIABLES +#================================================= + +# dependencies used by the app +pkg_dependencies="" + +#================================================= +# PERSONAL HELPERS +#================================================= + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= diff --git a/scripts/backup b/scripts/backup index 6e3da91..2b1cd14 100755 --- a/scripts/backup +++ b/scripts/backup @@ -1,45 +1,60 @@ #!/bin/bash -# Exit on command errors and treat unset variables as an error -#set -eu +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -#TRAP_ON () { # Activate signal capture -# trap EXIT_PROPERLY ERR # Capturing ex it signals on error -#} - -# Active trap pour arrĂȘter le script si une erreur est dĂ©tectĂ©e. -#TRAP_ON - -# See comments in install script -app=$YNH_APP_INSTANCE_NAME - -# Source YunoHost helpers +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -final_path=$(ynh_app_setting_get $app final_path) -path=$(ynh_app_setting_get $app path) -domain=$(ynh_app_setting_get $app domain) -is_public=$(ynh_app_setting_get $app is_public) -finalnginxconf=$(ynh_app_setting_get $app finalnginxconf) -finalphpconf=$(ynh_app_setting_get $app finalphpconf) +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= -# Backup sources & data -# Note: the last argument is where to save this path, see the restore script. -ynh_backup "$final_path" "sources" +ynh_clean_setup () { + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors -### MySQL (remove if not used) ### -# If a MySQL database is used: -# # Dump the database -# dbname=$app -# dbuser=$app -# dbpass=$(ynh_app_setting_get "$app" mysqlpwd) -# mysqldump -u "$dbuser" -p"$dbpass" --no-create-db "$dbname" > ./dump.sql -### MySQL end ### +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info --message="Loading installation settings..." -# Copy NGINX configuration -ynh_backup "$finalnginxconf" "nginx.conf" +app=$YNH_APP_INSTANCE_NAME -### PHP (remove if not used) ### -# If a dedicated php-fpm process is used: -# # Copy PHP-FPM pool configuration -ynh_backup "$finalphpconf" "php-fpm.conf" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) + +#================================================= +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + +#================================================= +# BACKUP THE APP MAIN DIR +#================================================= + +ynh_backup --src_path="$final_path" + +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# BACKUP THE PHP-FPM CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/install b/scripts/install index d049e4f..3531e3e 100644 --- a/scripts/install +++ b/scripts/install @@ -1,152 +1,113 @@ #!/bin/bash -#set -eu -# Charge les fonctions gĂ©nĂ©riques habituellement utilisĂ©es dans le script -#source fonctions +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Active trap pour arrĂȘter le script si une erreur est dĂ©tectĂ©e. -EXIT_PROPERLY () { # Provoque l'arrĂȘt du script en cas d'erreur. Et nettoye les rĂ©sidus. - exit_code=$? - if [ "$exit_code" -eq 0 ]; then - exit 0 # Quitte sans erreur si le script se termine correctement. - fi - trap '' EXIT - set +eu - echo -e "\e[91m \e[1m" # Shell in light red bold - echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2 - - if type -t CLEAN_SETUP > /dev/null; then # VĂ©rifie l'existance de la fonction avant de l'exĂ©cuter. - CLEAN_SETUP # Appel la fonction de nettoyage spĂ©cifique du script install. - fi - - # Compense le bug de ssowat qui ne supprime pas l'entrĂ©e de l'app en cas d'erreur d'installation. - sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json - - ynh_die -} - -TRAP_ON () { # Activate signal capture - set -eu # Exit if a command fail, and if a variable is used unset. - trap EXIT_PROPERLY EXIT # Capturing exit signals on shell script -} - -TRAP_ON - -# Source app helpers +source _common.sh source /usr/share/yunohost/helpers -# Retrieve arguments -app=$YNH_APP_INSTANCE_NAME +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= + domain=$YNH_APP_ARG_DOMAIN -path=$YNH_APP_ARG_PATH +path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC -# We check variables are not empty -CHECK_VAR () { # VĂ©rifie que la variable n'est pas vide. -# $1 = Variable Ă  vĂ©rifier -# $2 = Texte Ă  afficher en cas d'erreur - test -n "$1" || (echo "$2" >&2 && false) -} +app=$YNH_APP_INSTANCE_NAME -CHECK_VAR "$app" "app name not set" +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." -# Check the path value and correct it (adds / at begining and removes it at the end) -CHECK_PATH () { # VĂ©rifie la prĂ©sence du / en dĂ©but de path. Et son absence Ă  la fin. - if [ "${path:0:1}" != "/" ]; then # Si le premier caractĂšre n'est pas un / - path="/$path" # Ajoute un / en dĂ©but de path - fi - if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then # Si le dernier caractĂšre est un / et que ce n'est pas l$ - path="${path:0:${#path}-1}" # Supprime le dernier caractĂšre - fi -} - -CHECK_PATH; - -# Check domain and path availibility -CHECK_DOMAINPATH () { # VĂ©rifie la disponibilitĂ© du path et du domaine. - sudo yunohost app checkurl $domain$path -a $app -} - -CHECK_DOMAINPATH - -# Check destination folder is not used already final_path=/var/www/$app +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" -CHECK_FINALPATH () { # VĂ©rifie que le dossier de destination n'est pas dĂ©jĂ  utilisĂ©. - if [ -e "$final_path" ] - then - echo "This path already contains a folder" >&2 - false - fi -} +# Register (book) web path +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url -CHECK_FINALPATH +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= +ynh_script_progression --message="Storing installation settings..." -# Define variables and Save app settings -ynh_app_setting_set "$app" domain "$domain" -#ynh_app_setting_set "$app" path "$path" -ynh_app_setting_set "$app" is_public "$is_public" -ynh_app_setting_set "$app" final_path "$final_path" +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=is_public --value=$is_public -finalnginxconf="/etc/nginx/conf.d/${domain}.d/${app}.conf" -ynh_app_setting_set "$app" finalnginxconf "$finalnginxconf" +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." -finalphpconf="/etc/php5/fpm/pool.d/${app}.conf" -ynh_app_setting_set "$app" finalphpconf "$finalphpconf" +ynh_app_setting_set --app=$app --key=final_path --value=$final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$final_path" -# Creation of folder -sudo mkdir -p $final_path +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring nginx web server..." -# We download the sources and go to latest revision -#URL=`sudo cat ../sources/source_url`; -#SHA1=`sudo cat ../sources/source_sha1`; -#sudo rm -rf ./gitsources -#sudo mkdir gitsources -#sudo chmod 777 gitsources -# We get the repository address -#sudo git clone $URL gitsources -# We reset to the latest known revision and copy the files to final_path -#cd gitsources -#sudo git reset --hard $SHA1 -#sudo cp -a * $final_path -#cd .. +# Create a dedicated nginx config +ynh_add_nginx_config -# We download the sources and check the md5sum -SHA1=`sudo cat ../sources/source_sha1`; -sed -i "s@SHA1TOCHANGE@$SHA1@g" ../sources/source_url -sed -i "s@SHA1TOCHANGE@$SHA1@g" ../sources/source_md5 -sudo wget -nv -i ../sources/source_url -O framagames-${SHA1}.zip -sudo md5sum -c ../sources/source_md5 --status || (echo "Corrupt source" >&2 && false) -sudo unzip framagames-${SHA1}.zip -d ../sources/ -sudo cp -R ../sources/framagames-${SHA1}/* $final_path +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring php-fpm..." -# Set permissions -sudo chmod 775 -R $final_path -sudo chown -hR www-data:www-data $final_path +# Create a dedicated php-fpm config +ynh_add_fpm_config -# Modify Nginx configuration file and copy it to Nginx conf.d directory -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf -sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf -sed -i "s@NAMETOCHANGE@$app@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf $finalnginxconf +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= +ynh_script_progression --message="Securing files and directories..." -# Modify php-fpm configuration file and copy it to php-fpm pool.d directory -sed -i "s@NAMETOCHANGE@$app@g" ../conf/php-fpm.conf -sed -i "s@FOLDERTOCHANGE@$final_path@g" ../conf/php-fpm.conf -sudo cp ../conf/php-fpm.conf $finalphpconf -sudo chown root: $finalphpconf -sudo chmod 644 $finalphpconf +# Set permissions to app files +chmod 775 -R $final_path +chown -hR www-data:www-data $final_path + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring SSOwat..." # Make app public if necessary -is_public=$(ynh_app_setting_get $app is_public) -if [ "$is_public" = "Yes" ]; +if [ $is_public -eq 1 ] then - ynh_app_setting_set $app skipped_uris "/" -else - ynh_app_setting_set $app protected_uris "/" + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" fi -# Reload Nginx and regenerate SSOwat conf -sudo service php5-fpm reload -sudo service nginx reload -sudo yunohost app ssowatconf +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index 74c31b2..60a2caf 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,41 +1,53 @@ #!/bin/bash -#set -eu -# Charge les fonctions gĂ©nĂ©riques habituellement utilisĂ©es dans le script -#source fonctions +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Active trap pour arrĂȘter le script si une erreur est dĂ©tectĂ©e. -#TRAP_ON - -# Source app helpers +source _common.sh source /usr/share/yunohost/helpers -# We retrieve app parameters +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + app=$YNH_APP_INSTANCE_NAME -# We check variables are not empty +domain=$(ynh_app_setting_get --app=$app --key=domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) -CHECK_VAR () { # VĂ©rifie que la variable n'est pas vide. -# $1 = Variable Ă  vĂ©rifier -# $2 = Texte Ă  afficher en cas d'erreur - test -n "$1" || (echo "$2" >&2 && false) -} -CHECK_VAR "$app" "app name not set" +#================================================= +# STANDARD REMOVE +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_script_progression --message="Removing app main directory..." -path=$(ynh_app_setting_get $app path) -domain=$(ynh_app_setting_get $app domain) -final_path=$(ynh_app_setting_get $app final_path) -finalnginxconf=$(ynh_app_setting_get $app finalnginxconf) -finalphpconf=$(ynh_app_setting_get $app finalphpconf) +# Remove the app directory securely +ynh_secure_remove --file="$final_path" -# Suppression du dossier de la webapp -sudo rm -rf $final_path +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing nginx web server configuration..." -# Suppression de la config nginx de la webapp -sudo rm -f $finalnginxconf -sudo rm -f $finalphpconf +# Remove the dedicated nginx config +ynh_remove_nginx_config -# We reload the services -sudo service php5-fpm reload -sudo service nginx reload -sudo yunohost app ssowatconf +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Removing php-fpm configuration..." + +# Remove the dedicated php-fpm config +ynh_remove_fpm_config + + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 3220296..0095e89 100755 --- a/scripts/restore +++ b/scripts/restore @@ -1,61 +1,90 @@ #!/bin/bash -# Note: each files and directories you've saved using the ynh_backup helper -# will be located in the current directory, regarding the last argument. +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Exit on command errors and treat unset variables as an error -#set -eu - -#TRAP_ON () { # Activate signal capture -# trap EXIT_PROPERLY ERR # Capturing ex it signals on error -#} - -# Active trap pour arrĂȘter le script si une erreur est dĂ©tectĂ©e. -#TRAP_ON - -# See comments in install script -app=$YNH_APP_INSTANCE_NAME - -# Source YunoHost helpers +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -# Retrieve old app settings -final_path=$(ynh_app_setting_get $app final_path) -path=$(ynh_app_setting_get $app path) -domain=$(ynh_app_setting_get $app domain) -is_public=$(ynh_app_setting_get $app is_public) -finalnginxconf=$(ynh_app_setting_get $app finalnginxconf) -finalphpconf=$(ynh_app_setting_get $app finalphpconf) +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= -# Restore sources & data -sudo mkdir -p $final_path -sudo cp -a ./sources/* $final_path/ +ynh_clean_setup () { + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors -# Restore permissions to app files -# you may need to make some file and/or directory writeable by www-data (nginx user) -sudo chown -R www-data:www-data $final_path +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading settings..." -# Restore NGINX configuration -sudo cp -a ./nginx.conf $finalnginxconf +app=$YNH_APP_INSTANCE_NAME -### PHP (remove if not used) ### -# If a dedicated php-fpm process is used: -# # Copy PHP-FPM pool configuration and reload the service -sudo cp -a ./php-fpm.conf $finalphpconf -### PHP end ### +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) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -# Make app public if necessary -is_public=$(ynh_app_setting_get $app is_public) -if [ "$is_public" = "Yes" ]; -then - ynh_app_setting_set $app skipped_uris "/" -else - ynh_app_setting_set $app protected_uris "/" -fi +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration parameters..." +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" +test ! -d $final_path \ + || ynh_die --message="There is already a directory: $final_path " -# Restart webserver -sudo service nginx reload -sudo service php5-fpm reload -sudo yunohost app ssowatconf +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the nginx configuration..." +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." + +ynh_restore_file --origin_path="$final_path" + +#================================================= +# RESTORE USER RIGHTS +#================================================= +ynh_script_progression --message="Restoring user rights..." + +# Restore permissions on app files +chown -R www-data:www-data $final_path + +#================================================= +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring PHP-FPM configuration..." + +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading nginx web server and php-fpm..." + +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 2522fc0..1b2de3d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,84 +1,148 @@ #!/bin/bash -# We retrieve app parameters -app=$YNH_APP_INSTANCE_NAME +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Backup the current version of the app, restore it if the upgrade fails -#if sudo yunohost backup list | grep -q ${app}-before-upgrade > /dev/null 2>&1; then # Supprime l'ancienne archive seulement si elle existe -# sudo yunohost backup delete ${app}-before-upgrade -#fi -#sudo yunohost backup create --ignore-hooks --apps $app --name ${app}-before-upgrade -EXIT_PROPERLY () { - exit_code=$? - if [ "$exit_code" -eq 0 ]; then - exit 0 # Quitte sans erreur si le script se termine correctement. - fi - trap '' EXIT - set +eu - sudo yunohost app remove $app # Supprime l'application avant de la restaurer. - sudo yunohost backup restore --ignore-hooks ${app}-before-upgrade --apps $app --force # Restore the backup if upgrade failed - ynh_die "Upgrade failed. The app was restored to the way it was before the failed upgrade." -} -#set -eu -#trap EXIT_PROPERLY EXIT - -# Source app helpers +source _common.sh source /usr/share/yunohost/helpers -# We check variables are not empty -CHECK_VAR () { # VĂ©rifie que la variable n'est pas vide. -# $1 = Variable Ă  vĂ©rifier -# $2 = Texte Ă  afficher en cas d'erreur - test -n "$1" || (echo "$2" >&2 && false) -} -CHECK_VAR "$app" "app name not set" +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -path=$(ynh_app_setting_get $app path) -domain=$(ynh_app_setting_get $app domain) -final_path=$(ynh_app_setting_get $app final_path) -finalnginxconf=$(ynh_app_setting_get $app finalnginxconf) -finalphpconf=$(ynh_app_setting_get $app finalphpconf) +app=$YNH_APP_INSTANCE_NAME -# Removal of old folder and restart from fresh -sudo rm -rf $final_path -sudo mkdir -p $final_path +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) -# We download the sources and check the md5sum -SHA1=`sudo cat ../sources/source_sha1`; -sed -i "s@SHA1TOCHANGE@$SHA1@g" ../sources/source_url -sed -i "s@SHA1TOCHANGE@$SHA1@g" ../sources/source_md5 -sudo wget -nv -i ../sources/source_url -O framagames-${SHA1}.zip -sudo md5sum -c ../sources/source_md5 --status || (echo "Corrupt source" >&2 && false) -sudo unzip framagames-${SHA1}.zip -d ../sources/ -sudo cp -R ../sources/framagames-${SHA1}/* $final_path +#================================================= +# CHECK VERSION +#================================================= +ynh_script_progression --message="Checking version..." -# Set permissions -sudo chmod 775 -R $final_path -sudo chown -hR www-data:www-data $final_path +upgrade_type=$(ynh_check_app_version_changed) -# Modify Nginx configuration file and copy it to Nginx conf.d directory -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf -sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf -sed -i "s@NAMETOCHANGE@$app@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf $finalnginxconf +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." -# Modify php-fpm configuration file and copy it to php-fpm pool.d directory -sed -i "s@NAMETOCHANGE@$app@g" ../conf/php-fpm.conf -sed -i "s@FOLDERTOCHANGE@$final_path@g" ../conf/php-fpm.conf -sudo cp ../conf/php-fpm.conf $finalphpconf -sudo chown root: $finalphpconf -sudo chmod 644 $finalphpconf - -# Make app public if necessary -is_public=$(ynh_app_setting_get $app is_public) -if [ "$is_public" = "Yes" ]; -then - ynh_app_setting_set $app skipped_uris "/" -else - ynh_app_setting_set $app protected_uris "/" +# Fix is_public as a boolean value +if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=1 + is_public=1 +elif [ "$is_public" = "No" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=0 + is_public=0 fi -# Reload Nginx and regenerate SSOwat conf -sudo service php5-fpm reload -sudo service nginx reload -sudo yunohost app ssowatconf +# If db_name doesn't exist, create it +if [ -z "$db_name" ]; then + db_name=$(ynh_sanitize_dbid --db_name=$app) + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi + +# If final_path doesn't exist, create it +if [ -z "$final_path" ]; then + final_path=/var/www/$app + ynh_app_setting_set --app=$app --key=final_path --value=$final_path +fi + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK THE PATH +#================================================= + +# Normalize the URL path syntax +# N.B. : this is for app installations before YunoHost 2.7 +# where this value might be something like /foo/ or foo/ +# instead of /foo .... +# If nobody installed your app before 2.7, then you may +# safely remove this line +path_url=$(ynh_normalize_url_path --path_url=$path_url) + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + ynh_script_progression --message="Upgrading source files..." + + ynh_secure_remove --file="$final_path" + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$final_path" +fi + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading nginx web server configuration..." + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading php-fpm configuration..." + +# Create a dedicated php-fpm config +ynh_add_fpm_config + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= +ynh_script_progression --message="Securing files and directories..." + +# Set permissions on app files +chmod 775 -R $final_path +chown -hR www-data:www-data $final_path + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Upgrading SSOwat configuration..." + +# Make app public if necessary +if [ $is_public -eq 1 ] +then + # unprotected_uris allows SSO credentials to be passed anyway + ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed"