From b8823d863a49f2e179da4a2cae25dc10ac60180e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 19 Mar 2023 14:07:55 +0100 Subject: [PATCH] v2 --- conf/extra_php-fpm.conf | 4 + conf/nginx.conf | 3 +- conf/php-fpm.conf | 430 --------------------------------------- doc/DISCLAIMER.md | 0 doc/DISCLAIMER_fr.md | 0 doc/screenshots/home.png | Bin 24927 -> 0 bytes manifest.json | 78 ------- manifest.toml | 16 +- scripts/backup | 21 -- scripts/change_url | 86 -------- scripts/install | 75 +------ scripts/remove | 30 --- scripts/restore | 41 ---- scripts/upgrade | 63 +----- tests.toml | 15 ++ 15 files changed, 32 insertions(+), 830 deletions(-) create mode 100644 conf/extra_php-fpm.conf delete mode 100644 conf/php-fpm.conf delete mode 100644 doc/DISCLAIMER.md delete mode 100644 doc/DISCLAIMER_fr.md delete mode 100644 doc/screenshots/home.png delete mode 100644 manifest.json create mode 100644 tests.toml diff --git a/conf/extra_php-fpm.conf b/conf/extra_php-fpm.conf new file mode 100644 index 0000000..700c37c --- /dev/null +++ b/conf/extra_php-fpm.conf @@ -0,0 +1,4 @@ +; Additional php.ini defines, specific to this pool of workers. + +php_admin_value[upload_max_filesize] = 50M +php_admin_value[post_max_size] = 50M diff --git a/conf/nginx.conf b/conf/nginx.conf index 9eaa40e..b978198 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -5,8 +5,9 @@ location __PATH__/ { alias __INSTALL_DIR__/; index index.php; + # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file - #client_max_body_size 50M; + client_max_body_size 50M; location __PATH__/libreto/assets/ { alias __INSTALL_DIR__/libreto/assets/; diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf deleted file mode 100644 index 13a53b0..0000000 --- a/conf/php-fpm.conf +++ /dev/null @@ -1,430 +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; -; '[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/php__PHPVERSION__-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 = 5 - -; 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 %{}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 = 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 = __INSTALL_DIR__ - -; 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 - -; 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/doc/DISCLAIMER.md b/doc/DISCLAIMER.md deleted file mode 100644 index e69de29..0000000 diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md deleted file mode 100644 index e69de29..0000000 diff --git a/doc/screenshots/home.png b/doc/screenshots/home.png deleted file mode 100644 index 7319dfbb11c0b35abbc747bfce829e3a1cb11337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24927 zcmeFZXIN8f*De|>3JPn9h^T;y0)l{a>4E|ZBE2^SfdB@i_e4QNsTMlYr8j|u4pEU_ z5^5j;A|Rb4)C34g&cyY;-&*@S`^VnbxvsN+?3W+TIOj~}e8w}LG464Xd(O9dk2Fs+ zUtk7-K&Kzvzh?jf9l?S?hm}qo2lljG0d;{umq8EisT%ozTAft6&o?kjp&GurrgP$| z;ODoG-)jtfSBLAt>t1T!YCA1>Q+2RT<>tdHAE;yBj z6EZgLe7X+K&d$5_>N)eMYmyHh(d$Vw#;d8lpFYWXc`Bz!I`s~GJPKSI1X{gC6aD=G zgg>cz@%N{w6TrOze`fd42e$|MdNow$U<*3;C;ZUC_RE{B(+ArZ>PI05ThPs`;3Egy z$AA9kC;nrL|KI$g=5noyn7t$1cWH~_RMr;#a8++yU}wP#cMI!+FWmURmOp*f z733gK=O4M0gBb=_xiMyfda1-}Xijq@mU2mGdp&jFl>r8&bv;S?9CPPR>xGmly_r=V zOK^m`>6!Vb^F$*z_D%UcORdB%fV5@FJM*p*~a4Epu_rIDT@07c*w3 zQPe|0Avr}+2>5x!PWPw#vynfdus$W!i*XLlX6|LfG2Y&O6;Fe0vi0t?=sm35dV9|0 zNKB9T_s7mk;3R6~+tX#`DAymA70+Fn+!oBmaC2z}!cS5LL?EWmka`n(=vUjbJCm&o z>z+LFTlKLE-h_n}lT0J1?lbL@l}+Z|BO5XOi<)$Eq}ZcvdwHQum8_rltV&=u*2;H< zGjVxJ^5kg*&cm6Po1)6P0HR@Khqche{UBt`BhG{FnSJ zlp?IDBw!j_)1Y`G1|h31J1a$hrWoIG>FWTyDlW1nwC08`r7KftSF#*%Ei1(`9;4kO z%xyLCf}dQg*YH@glReR*uF|kF!mL-BsD{ISkCx2?q?mhxMO;^MKp79-Wnr~`!UHM9 z&6~8YDV?Bf+~8mSV=p?CzqD&YI}EjD!Sja#X=RaUB@Vk|zfypeYaDg-)c6LN1TQVD zS$6I?fOWs^dN7G!`D$pMibwX0(|6|A-y`XYnEr9Z==}G*mkjHVDD>ch zTh0Sso5plUyhu7l6>%^{lwl3D+xjKfDL0$=Pt*%c`~4jpQcrX^Y?NA%eO_Y-M$I@K z4^P7xTzh(UZ$kM66j&x`6Etf=nC-65c<;kD8Rg@zJs{A1Y+yj4IQytkbt!q9MM3rNc4@<4@2om z7uHcriuBa8*1w3IN~{U<{gvd)yIlLRZex(O>64Svvm~}!i}TXV<+e#=Ybc`=)qx6; zVkp||z0y!^B!4O&$x~jMRZ0kseBX2xUN8*~}elUh2?j*8btbuPp?yD&1| zoj&zPXw5OgQ3!q}V0)Ml^^kVibs?%rsa!~f+H+csRqWn3G-;yBew>xrgNuD= zSv@3WlCoWFq$rdr4y-r9#G5V)%gs5;H<<{jFK2xfZ?boRQBNAf)vQ{MXO?{4Dk1&) zQ5Q-F!bKcP#+E))QW3N;Yi4_3pGhY{{$G;%BI(9SL0;>^X#a7}K*A=sbG%L59mh&Q=PUoHSQ*5}V)y`&D_9z?0h`0X>>pj9SYd zw#yPi`^#yZzeE5m+%mJ8q{gAz7@)A`nXz4GZ3B4e_f(O@{0DnN$18{=%AmmQh~Yi2 z1{1%%YYSN<#rts$#|b9NwcgJ+4fG?#_CidpWfqhtg3!b!wqmvmfE|W_Ih)lTR=Qda z*J#yTD}4qN2_^+SlO3n+dZJ@pH;WS}wE?V+TX-^-QSu>bHd5-71zVOakSF2NKEcBw z%l;!@*RGaSHUz~_`8+rEx<3A+hr(psQUP7A8_Kz-X+!bxsxX>Uign_ONnTsv%(ItU z4nF-@SjGN__wB-F#o=V}kxa^ll`9pN5VCXIWRrs>Jf8Hn>JKi%d8mxys1X)DlQM#aeR6k@WC)FJ_O4XVqXibs*h@-i+TBAYqQu1r^Hqg~ zc<{B1fnl(-&Zkcclv-YR8W|6V{lo#0Meo9$I9G{)Ld3)Hi883Hf;GOOF;}^m!e0dgv3#q@AUy76U)tb$VYEvA_`_{GaOFM_ z--m;3nc7Z=KQ#NOqKgRGH|_F&sLU|+_Yu`B^CR%*O7IsK^%lucBvUVm=*$tl^(^;h zG6q)ZMFzWfb##tCy_(mS$PCj$^2e2B3R)|UV6`588}JY|h2vB-wlkl2iQi;T#TZQ6 z1aV^WTZ>aAO9cMyCVwNYGa#j{bc`veLNdh=X>j*f4 z>cU@zbv+BWN5=1PF@ldK4DsbJAAik;!afvreI|9;{xGx7P1h^7;&)*FMxNL6v&1*r zsyHYT#>!K|S$a2#OY1fMpH>saYu}aeQ1k2-l>Qc?;L|!QArblY-|{ zFwf>2z6A=FK}oW1vNpV=IV=gz4!7QOS0EtaEwA2k%Lm7S76pJ}?$qavJCKF}m(j0} zapt_Hx9CalqG5l~WI+eV1dqF%cZ{=0f8(+gP1Rl(%V8Y9gFgP^P}`l;px5kwopey_ znf$H>(Hx9T7|nf46&a^+@b$ls{Lkw|whs|bd83kADqD>=#k77z_s$ftUSbgP_sycr zczIo?&5}?SQCulw*;O2w(ljq~zU&vlxgHQ3IZOoA^(Kb)$;;Y_lEiVU&vkpX3A8FlUFB(b#nh zJQQwsvWy#<$RL|mLv!C}QaCDL!^^MUyU#UQk=uQy7+#Rh`cFya3-Pla>tp>FYOW-; z6eMnwv2!gmjCH*!U**~HZ2kgCEWNbAq+g_#6v;-yn)4=|gaqp>Av;}q&#O~xyDI_= zUBoW~XrT6EU_%jG&-g?Y0BgbX`r!qRwC;|eYAuqx;NEWiBlyCu!WTOQ_KOzQnPQX0 zvt#F6>LHk(%0r;9%Avj;-A6dt(VbfQOVvRTl7N(5bo*djX2pY!4u^exojlzH(G1~A z<=m{3t`d}-T!AIZT$#a&IG1F_$gCydlTs3sPlZ<5D+i4vL@IKWyk2j@nJYnexXw-D zfEounShe#G8O`5It1q>C50r_o2mPkHXD+~bi3q7b^}vDJuDf1&o?JSy7mjhFdcxov zFS^bjD}dd2uVTF6WX0DmSm(dDdx7E^zcR|JCs>nrZ`vv?Jczq)6=`k_Jx1`OwbWsJ z18v&xNv9!4`p0uUjgPcyR5)j^iW2OA=xm=8NmCqfY$*(1dVXUyn047wk?yw;xqIY- zr3!F5Lgu3+bF7;)^^wbsQ^TVHcvSV11y7qmxq?e^QMJCKrKhEpZI@NTfSDO-nL%#D z8WL;MQH!6$y-JoUi%kUG1i|eHJ^GO5{F0$-xfbsw#$d8a zR^=~T@K+79YXwXS_UZCud_pJ6)^YgPLWgsk$dsa(hTtj7{3{ zd#aF$)t^FaD+pq$FOZ3$QYQq6|Zt^w;Y7oVT+%W%=3*J1xW;b?cv89*%! zJdly(`%MraF7bwauaj}DD3qCmg*B8iWAhlUuFL+y4(_9(-5td)??Nc1hS`y-A(kB~ zS>X9fD;1JFc%eAWFg-WKZ6Pnot9!l9-_^+t(zzS#K|f`JbCsnsi_Jk6B;{SECtQ3> zT_)3o=VdSSC??rnM0ajAsb#-1@EaU3*WlwX9iIt`2w65o_giOxC7zy*%!DNrIU^0A z6)>B(C8>7a|axeHsR8JoP&mpG4IOfG z)Beal%e;4FV^^hnOB^k9IypE>IxIOVTI1mz!#2OTIYA6$vKi(^CAp#9idJ>7>ecek+r6rowrzd6f-{_c~nd)zX zUlCJnv?L%bL&B3bYBssjR|*n}W@F+Kyl6+YNc9S)y}Tpe*KKJh!li@uZT3{Z+cHn4 zZx``?yIpSf+1ps|1GF@Cbh6IYgI@VKNa?2Jp0Y6bR7iW1^Tq6!GG$&r&ev(zwKfqPHIXEOY=WjKEOG%O$HbB>4Z5lDA{x{qe zG6(9RO_`Q`u?a&p+8zAaeft{D4dlB^kr2Uv@?TbWTIvVSQXlON7vI?TiqOh)`n9R> ztf$h}!{!vELmOQ#g8OuLM~RxJSEAbJ(r6P4aIIt@i_AY+8-5&Uxn$FxS~SaVlX_-n zypH;i@JAC|pZDF?$QIc;Vf zkN6K5jmeQV=wPG=gZ@UxMi{4ViL#bYc@!r7{MNjC?yIpC1t{p zokDgeu+|6RL%sle3TuOXx4CP;;3}=fxRE(*x^ewZ-oI!QF4Ev6fEwa^|0Q&NaAYbh z*s5iqP-CA1QXHnd?TYo?ZCQy361f*0Jf!ZB`D?JEjtPQt@B*_0EhXD0lj$kVmw^1b z$_MuA?fD6m)BZ+4e0`Q5_$|?lKDVj#4>XKJg}*R}dcwu%m{An4h(QUScWJ8AbGd$V zHuIkV7uiiY7I>padr4AVCSFi^Icpw|WW<->iv9=SU2hP^wx2&{Z)rg_``Kw*|Mh*6 zr&L`Ip@Grv<9r=lt4E$EV!|vk zj}S7YuvqkddCuKO2}BBeU%xg*W>OVRM!)`qO4>s`Zfy3gtynVv zvSBVeX~CpNm0EN*Fy^G7i6EW|^~xy}m*6+~^A3(=nErjk$@W8#$C9byQAmY@YuzoI z+%|O6v%gbZ6KjSLuj&~+!E+S>N8fsHtrh;#dZ=puE6M>$91rpbC?9kC+(TUKdSE+q zmfeo_u$Bl-2!E3F8RpJ-UcUGimo0y>g{r3jsM=yWd((EHkWNYSrLadvC-UGWYm!IE znRnG)m~1L-wf3W7%Ke3V9_lvT17N+y8it0CvoJVFtkJb`$3OlZa!W9+Ydhzh3m!AL z4l}KJr~k~Z$*BBoU1Fq|EezRcYIohFf$g?LMfiSw;w2*Ab+Di6(B@#P+=%aiVJ>Vd zApnOGrTpbk&(@U17ED%Dsn)oa*}Mdt3g@k$QH$Q&O%;>MBR6is_80%a%#PENCSR*>4BlqE>tw#LZ=BoPJ2xO)K~AsWh%smJYm_! zw6zETp#L%0ro_p;StP(WLUV=s zvi%}2I4mE(aTM|suZmU(juy zZ>wdwm71Ns20D|O>GuM@Z2SrTjkDx0yhEv!-`~F%#AZ`tJ=G3?Sp_4Z0|xmr9;{ZB zwoxM>18-2S0BWKZJ)?nbcEV%`EqnP)|jpgwHZ}az@@rR3132dJ!CU_XRl6 z4b#KzbT;iokJDl1wlfwAP!R^<-}JE!qj2OTAHKVuS$EJ0HU!sQ8+E^=)C^Xr&IVt* znW<8$cQZThyH|k99AS7{n{hWv<-&G2YtxpJ$cSxN%LdlrB2V`;HqIn|=-)K6Up-Xi z;l-5tZeF|Q(IAr|Z#DZ&{0)GNX6dw9-dolCIK%~kxpmm5xz;Ogo5GRH(>g^7UwRi! z)a5>_dE8ZHAB~%(kmDplAnQA5;+X4h56rw|*A>E>>FOgcG;3?Jp|uwhP%<3&u)WuH zd&fk<31xfajU1o-;SKc}3#^L%)%wzRMVFeS@Z^Q8@Bf5;M$dw7LURaFnuK!_k*}je zg%|Q(;#!*%`GE@7-B|=yZX}x9rJwuLZkME6fwel-lU!)0q6<$Eb9o|fb>Y+*_{(!6 zOmF5Fd}A8D+V&5{lw|@Gu|--J*D=jnc!&VvEIe)dB#-UK*tnjZ+*GYhA!|ibyATav zL{Eu%P3{ZOC5Fow=jg^D1#Sk5b=Y%<)NNIi&#j^3@=eIY+=G@87Xg9%- zg$2i&sI@Bf9cPh%Y#X~8V2jd>eVELel-Ite3fOVxOE3^fcmwbo`P^^sXc?o^Q$uyB)^6U-V zcL=f0aJk_{m($LgrrdQvyX8%3)^=xC&m^};b|Wk?u@)z=W$_)?!MsWnE>DI9>!8+H z&H7S472cASvV_?QO3NY8nl+HWy?+y<+Xuv`iKecoYNO-V%4Qq7&(u&&PgrCFwMiRC zF553lHWB1bcaX9>oT`)~DnnBbdV0cw~S%gvd+j4bvCKAngi-qq`UXO2h zADdCmt%d@y*dx_OkIbKQ(x;EuwkWTSP_#vk6Zk`PSGG-U`D-EmHzF)m0?~vlf*uJ$ z+aw3x7$er0WBTXFWAhd_;{Y19fth#oS*17ig?qzB$MR^L7lV2n^wm!tO&nG?vG<{T z0U5;`hD)jKF4!q2K2r0kJ}Hq-3JBy19ie~^o~Rs z)gL7^w0tqtdt>=;Ex_x)eNi#KRa-^g@!_@%&>yQ|P`p&XyvDQf z(^fRl2i3fM)^9%Z1^;G6aanC*>_M1P1Hx3vUx3L@;xE9oX91qediM_XN;*Z^xcIqc z^O|0D7NG%>lm&?n9YV%;{?(V-MBLY%)?E@B8QXh1*k)K(_T%g&Zbs9Y&HDR~{s&0( zbEHf|p(6aMaNXgU=J>;RpWb~tlgp~Obuoc8@*;D}7k*fV3w6hR$!gyUKW*LERT%x& zMaZkTj~30ZsXdgu!g<$qLcl-hA1r5%6~J=VH^qe2c-fluXyb=0XmUwi%`hL~h$N^K z;!NT?3hc`;D%#J^=RYj*-ZqmWBD)VQWKN!1X+}I=sm!dHt?Wbm33o-Y7c4CxH+%9V zUZ06o(S!SbIs{r|4Xru--x)&2&bB(^zu;2>r~Kww_+$-GgxPalSK;w6pd@F=5{Lq4 zxkQwRPoIgG5L6-}jYRv&>tmd-CECXob&+A#PqDIRr8GX)n>P9|2TP9A9FEZr9V>|H zR_&yW>%1Szc#h*Fi2uk=Z2WkFW4B{I>UtsLv8KqDRfK))BQ~yi)kgt0F`d1yF zp40XDx#P~llaXM75~S(vGX9J1b9lh88ohr2DXh{=Y30Bzy!fUD5RchtT2?wh-K}>d z6f^(bTUViz{Iylt^{xT^#(fdgBp_8ORQ-K=MV57i-kTmLJB#L3zx0C}8WHq-&D(mp7Vcq{XoP&jc@=>{(zFKC2BbS}Rp+!&`^>wkb!el)hg&eZ7B5F@9Pn zElQ)^XicE|CDpjgnNQL$2d^up^$^q44+LTv&^8MQbn6aaB{aYmRYdpf*r#@X0!tA4=`7HMoCm6==PcO&DZNxN(X&R~Fe%zjj!wZW zub27uXQWmF;DS(T8;75R)?5CpdAbVVzY3fY#ibm?`cVq3A8gN(0TH(+jhfBJf4oO~gb@;d^;j4Cq)u)UdJY31C< zi>~7Ed53qb%qMq&F3OT&9&_#7W5N}1Cbx@cpbbj`B?6E&?YACGEel)RK|A5v*>^Wo zEQCWw7T0Zn<++~P5%l2iMJ~TjU7R*g13255<4*xC#9IfEU%bLRj5&kX5t`Rc?U*m{ z+1@N^7U(iWD^Ka6&jVgSwM79QdgR4_6jlFGm;K+Zw0kWCX5blOz-oB$ zw9$i11p2zR=y$u7GC-=C@Whe)e%I^4x-?d&9p$~rL`yg7UlPU_B)t%@(HWfBJzow%3rcYYw=#ylQh|0Ld5UImnHmKPB5GCx}NqI zCE(q5i|P6n{#GsT@3z*9^7Hdqujm)&$#;LtBGDYJm*UZ|)(I#O9vVc`Qi_%Zb*|-3 z9unjPffmdEaVcxxio7?#QNEOgzYf;?ebCJC{0oW4Yq93js6@2{(`wqLmd!S!8elGn z7yorR$zfHhAGAJDzW4ydZ&HSJo=5`#1Jh30-7Jy6c0Si^x{Q<=k~J~u3h}txm3Byw z<@joH^Nr>+H6PR3iZ`wPAW)EKhc@&5K4ZxxFp^vXWVNWKz}7|34czXP!dX4 zFxp2x3gU$0CImnrMinr!=68K<98x3pd0jM3?o)ThkAM4ZLe)mvo=U&qg}p+~Q1Y$C zZSfug$~4nG*AlyQ>+`wtazx7RiSFi;*z{F)&f8 z2d3u-*XFG)Bxw{chi54*2EuwX5c2vV#OVDd(z7&EjF!={Ii8~gR?11xSLCzgFay&A z%H2r((FO`UUH5>0R}*lD-GxwJQBG5^caxft;jvKP66SFKzUFI3396V)d*8&OlVsvT zK?#tWe9pkd`V+>)OdeP_{PRaK6V|TT8+P}==B`e^SOfqcpx0+jN`%(%g_75n2;xB) z@}B=lz-*ebe)$lA%(r#Gc&Zz{ zbbw}v#G$s0bNP1 z0JtMmW{4nUHtH4N&tLVp{>xo`XRm-c-FOg&ipHJ{J=c_+54&EF%w}%~bNctb+!_`E zt*5LBV=BgbsOkdRS+@+}L{m>>A)+^Xl&lLkZyK304l*=u;KWV=0K{Zz|A9`3@(Sf^ zc$%yOV}Hc4+^FEK)sp|1(8AiKY6}1unPy4?eIf;6FcgzTTPvQJ%k@PO5kcg_)seK? zy+D6M;)Z#U6D5;0*%&5b`lA2tMIA7aO%Ft~6B_-7a`u8;tn5(bUrOtZ$Y{aib$)V`JByhye6=_Y22s+BvMd zgnS0VxQ_XBTrJLv+Q0)K^^t(oXklq~a=wKeu{E&wLVe++yZR(znP}3LYW!WP>yz*b zytxD^on2o@!17*fXhE?PpuyuRP2gI8gH6f@1kH;ewWFq3*I+7d>m7_=pn5G}>x1Y1 zyaIaBvaF-GApvD}eYT$T!HLJs;o>jx08JlsyK*T87@#?wS(jW_%d< zH|}=YOTuiKMXGm2tgtWxnpRW(J^rL8%O6~snb?HZ1|8PVsn>7o>9oqu|_u{*K zTO+Tb5(x7Ny~hta#l=PUzuJd5A`d5U-u3ED4ZyfbSTr|}WqX0PjRf$w!T1Sb1U@*e z3(Ikz*9Kt;=J~R6*so=hHw1`jR+zBC$=nYjF`0*f-%NwavTh_#RI)bIv8DNlzabQ) zL6G=ki}#SB$mcqPrd zkw9q#r7xPI%g>E=TB)gg;1Z$j=kW^noGv&^&9^RJm3!6LRS%}s>>oNt;}tNvGXNlI zLKE0ae043OkRMa6^$V4tOfT`CzE`s1(IMRRt!-$poUD9B(NmMR6Gbwc0$QJ8&c)xP&fBhjQJ^f2a!0)gmF|$fU0GVR z1K?eEL7B-#(;ptR+rEvwj%KkbjbUmz4O9CbdGbq7Nj%z=m4$AyYuJ4Dnfgd1tkYIO zMXT2kO{6Q!ZmLIQL4nmey`U^pQtpU!uK4*!m83f4oI4_Dy>xY?x+*CyFQ`g_)wBke z5qTVRhuXjyZ{ zGS&LUqb&t6Q-P$G!sOlEwH$BkQgLn1NOMD#G1FdWpgu0iHjMOrr0j!A6gH%=^rQcz zOfb8pmbAtG&v}!QA%wtUonurVDXhGLI(lwYUeIkAQvwu3H0o>97i|5HE)_uHu8D}i z=hn@3_-mF6wv-=)_ju8g3&k?siSQ+3!V@`1qD{i568iqP9ov$Q{O2AP?3XRAl6$q$ z#69JbyFpd{6%*ENl`TO7Qy$v^dUb`??+7XuJv8H*fw=Q*V%RRs@y(n;#R7H^+J2H* z3+W1*kOkyNxxC>{5tSV!z7jpG_Irir=(mGqS-X;(1nlp#{Pt;qzkFIHtVS%+$N3Ja zn<$2n?d_~+C%KNj>)_~7@VOw(Lqwb{3UC)J*Qvd+;)mJO-&DqXS1wgpa)-+lc%~LY z&nn$aer{-MVsB>w@v9U;5q{0qH9j;&$`3pxRD{#{eI##o^hWgnZ5EVBfmj7=Fi^p6 z)qTO2)KFFmib(Z+XZ`()(lS~SkqgB#psa!h_V`cjAH+rWoypC6<Z>*j>iyx&sn8W~?MnSo%{<$t)}m)HMPkPlf8S?0>lI;y*EMP$xkUQv zsN;$F$@EdbTOLvAr9)ouG{i@t?dtQF!pQF~Nt*hwd^OLo)*FYmsG~()aFFZ|Y_b@w z+oGRGUtVI#IRpyq2-GXK3`VfjmYm*8Zb|}tf7$L2oURxSiey2*Z8=Inzpk;o=_Dg* zXxLvTlTH-y4ZPfhDOo5-QQhud!#x)-0aVqKYT!eC=Ww^_tV7iy!smFe&z*%URXih# zgW0;oUF$>Q=!1`BGa&RW>rh`7mJilGSHL8EprtENnXr^HU5|L@Ok-Zjit7rJd%gPk zAlGbF{grD_9E8((z~v`hdg*nW#_J7LeZte*-KMgS>fEdbM6WG}l8v%sN;26Ne1={J z%Vdr#mZ~-`n8H^`AFJfUku|j7sH_kyKC6!d0=mOC&W1IQ8HtAF*kA_MUCb+2o4J+13Ih2<qk zw!*J09P7XiM`bD9>?nP!Ho3k^toX#RLbo&;SCM%L`v?HF;rzxMsl`BhlqbGCGIBIJ zvy{=PvS`0y6MN+(mXOqZknmxlzVO|Zl_o)PYiiVcOc9re)Gvhy;U<{^gT~S34z#bA z0Y>gProvLxDcdZ_VPXTGZFBS>q@QjcQL^~H$%n>np^g!NmZ}R63SshvF(w59HM9ll z1@4rLHwcWG*}U@kYq)3NII*CEnT0B8Hs&4UbbI7_F4D#Gs`v1_OoWU+`yw9~fm}*# zek~KBDRIxD8PMnB5GYnD@iJ`F2P`m9sg6<)TsiTVWyqHG3V_*ZTlte#1f@~Tg#BsI z`3vN*53TB@10p2*t_WGm9r-o;4W54t6d79c_9=X2{b@fDBl_wbICu`x`r4|tq5iGQ zw632C49IQ)sO++qPrx$9U;BqakD-twhO=w<6A|(?iZr#Uq600RV{uEsGq8SBN$7x z%prA3<|OPiP>kI)+O&avEP0bI^E9IEN^s>}Qufbf6C6(_DG2>&5=Ja21Vi*<_XlGO z*4Fb0+t}FaSzQxRljM=y-^S>#9<>{pW4-R)NDrRhL*u?PPw7^jg)2-txvEkZ+ozQY z6U~$ote;r7d4P>P2voMBrRQ0vi{o@{y1ZJD1{5nXeXWt7Nh=*T-%Xl9kS9VP zRfLk!m#Qx~A>u~gIFESIynj~7zbeMnad@XFRqB%U`1dE1%hPYa=dRGe zOs2Ki2}ayZ3VWVdqe2-k2qZ9hQfqtV$9Z=2Sl~xo36Y49x29%%ag5_`8H%ubIFYK%V%o>s!SfdaL}d+cA>4zAmy~WOU2WRe6yME z^t&%&UI#BdM~t1{z1m|jrh@5ji-O{tmwx6Oje3igj4!RHg3gUTZJ+z|j%iziF;WMp zEMYc1D#}eOlsUwQ@Z-YgrzTyVd@uUsQ8w?MP{w@Ky_+UCGH3;NJ0t~&UY5)!%|i|hLJje`{L>3MTp{lgn(qp^tjNAX@*@|WnYph~t-U#bJZ+Q@G> zmC%I3<@+oYWotWA075zu2p*)Rjm*#bSQw3znsyHfn5J>?VsieqnD z2g$}U`P!;M64t{;A77Y>Wp$z~DTm4tulLKJDeFrjFeP8Es#K)ICQCe?TQMH4TDWDG z0VUP=+r1lPV)|_KImL%bJc(IK4?9-&Yh&akag3ynHM8sEOf-y_G3Sw-a-a8EP_JohL^Y&)o5)J9{DR z5jY$DU9yA3gGldL?3ih4*J#~HSOI1p#k*ukfH!3gJwHZxsp9A(Y!&NA@ObLREQ`X5 zWC+#Uiiao|8cD#)2^xgYVObFO%=BY~;;KswV zK!^3SaUKCis<5A4!IEbzM~$iqx57Kt@K*4J<~+-^?J0r%6c8v{^p* zd0VTR9|-g_Q|52F^6R9r{`=zaTi;Wa9J56LxzNNvE@^sz(XWEv+hRi&Vf6rg`uN{e zBEVdtCtAzSx$v0EBtlnzAN=~ygGSlJ-M5lTA<(NJ(0QAG5S*$0hAx$Xe@X!$8%k-m z0-A;A|3R*TSLg42q%W(Z^O@agVgUbnp7|f&1#nV>-QS}I{`>!xnN@etJ1qY<9sIS6 zv2M!%XkjHsDzyneeG0FM?8q0X1?UqH=+jnE79a*kc9JOp$X2eFIB1;CzbNC|OO!hR z(+bl^A{j49c6Fg-1~7dtD54UG4*zx~c3vh5-|9Ra0e^aIh ztSG?y|ChSc2WS50?FIj5-sG^)ARN5&LZ3=rzw!NA-yipGz2gsUlloI6UY$if?JP^0 zhTb3VrI^pnhhLt4+4RRz^TFgt7r%YK`q>~utps@S#n_t!#e}@Pyt!>*{(%P)lKhS) z))dR&$EF`Ydi6)AP*ag0wSTD>F5mmt8!P^=+QEqKHrG+{t3XhW?S+z}4&vGim0$YW zv-&Z=NR2Q*pHgwj>=Zs{2GPhF`0(+aGG*Qbw_Om&HLD37wJeWyNUJ%Al3$>>3UQxJ zs9}#x(QkV#5Z|9(>_1dbKQHk*3E{E5x2e`|@^rb5D_%?rqAqRjgCwbruNQu>S(%)y zmXSCaQ#wV)Ftz?!`E0zNCBYWDPz|LP4zo!+3!D|tty*<(&~52#2t)sVsBA6b=+XCS zL6G=Z#N@m0r?I*gmiNJ>TRVqlshz0hmkQw8J`$$d)Oz&YpQbKF#fUJLIjw-0(-$NA zcuIzAfIEsVG*Dm@BXJ9YZPQ%_s}N?S0yh2A4zUOy@1hA}zJZBR(O}pfD^?bh`anY( zzGmq_5`3ZZ8FTrJBidJa)BZb26KcXXp-Qc$o>?^U>MGPQ zsWA3n?3WhDr=Yh6ym0%hl;056nXlTsVfv4(M{&sKMKX94w_gMO%yRZ)nYsQgdH6aqg=rIbtY6Sk`k;;i2M3& z-TCd%5hL>6O}`*z(m30)t{$4~is};s%f>obdc@3$!9zTY>(}e-fb!^AOuZbbvIvir zhv{XDU&i_p0!`o;wEC4{tma>N{&zGja+OLVj}1ucW)L zn%u7|EqP%Cy^J93Sx@x|e&}_@O>$z2NYt3SG17kMQ$9TU9kqZ?2}n%5gZMuQm?57` zc+DSv-+Og*oF&VS4mfWrMpi(|JS5N$Et)jXaZ$y) z97!x;E0^Rvb+>Xor>6YyD5)g%Sqb9ftX@$$--52tNCg7XSoC>hB718IR&wIv@76o) zz6wymSd0)x;;*I*VKDVj)6Q{VRoa;}-4JR`#til>%~nkN1xe?1mQo9st4Gh}T(D?x zThV=sbIY*G&!Rw&=_n+Va+EBvHtc~^uG=|EAV0>=CM!Hr!Xq0;d!Ji< zWCBJ*vxpn25jJHLO2@l8%M_1Q^wew@_(;_mrJ6q5uN}oIGYp1W_49;@UzQP)bE?|2 z>llX-C*If45x6zdczPlv={a&6H?A-Bq0z@zIodS+Ic&Sopmh@E1fglc(;Z_;VSfe9 zYo&Zx!j%cRoK%d-to~eLi2!QN(v3$ID%Tz8SJ9@Q$%k!$C_9t1Jj+Y^x+R+9GHN%W zz@+p;g`FEhmmb*MEzcrMG9^(i4UjK--9bZvmtd4PyWblvyaC~AQ4L}MGt_$WI^mTt zSfS^uTtcHXTmRB7vHCI@Rib6iwJ=Qa+xkX*?Lf&5k}gOc9i^nGR(yY$C?GQROXiRKbRQ(>8kc|S0~THo()VIX->?ai8SLX zv+|zs+0PPG7;n(_M^Htlt?gM)U`fsuJ=IzxIfK4x;*!OkYp?kIM2*K%*iK>l2bRfM z%`i$~S+Gghbm1w!^6Yh=vQIu4T0Eu=8(T!>9VSTTc4Gj%fp((CsCeFXULf%krk6<5 z{xa2hPoX^=dGOQ<5IiWxVlF={O!`Uuo?m%^=d*!*YY<39{!<6h+t)AhM*c2dex`Zy zu*igb<%6$Pp1_7Z${Gl;ZpSG%9!So1p!7{VV_Ix`e1-M9CYs0lF!fabU+8FO>fq$d zzb^#(sdjLTi51J4T9cDn+5jVGt@;~1px7UEb3<6WD}VU8Y-aDMCaKwvgba<&n0KI% zUnjOiqUntbOC>HVvqgiBT3!OSS+-)d61f#4+DGak(9ZGHIF$=Fqpw$DQQ@D;-mHjg zTtuF^AdKKSGJ>nAwCd{CDz8PX6jitETyzPapO}+4X`V6^7c%kDwr_l8pYEW=R1rss zJgqC3u3$Vs3*Pv;-LWuWI|76>A4t>gZofUjvBiM<4f+o_Q~Fo7lLr9eIpl>K5uqU)=h<|{#JmA~?9QZ<tFbmH|nN*DW->DM@7B~ko-WQE)TO*c-EU{57a)DOr3BBmWaFq`~Km?Bt3 zP=VOsTAyM}%+L20K7rsK@TKh&RqOM3t9lFVx&lOanxRh;<07jxXCsq6PWPQd3}BCp z2Q$3g42z}LkV zLX~GrX@`XQ^|JY78!U5jltPhJpX|bw>p?!&HvoCn<+G3ecrfp3aVe%}%4hj~e^#?8 z5={;e9&7T#Et*oBhB<9;PZ(saJYH+vST2iZ;(2^fZ8O~mTk;b^`5LlVe4UOw2fV^Y zA#<;gAgvn0m34eOtwPpysCF64+nwRpzfj%15LYp+@SL`E1N+Gyqfh9Fx0Cvar`*`k|^R@&>Uxhob5^~Tv= zq@^@l$Jcg-NQ4hPOYH_<&nJx5Yz)eKg&C_%*o`i8&FE)y5P*Tp1Ixa5Rq}r<9~zxn zb+@wLWr1V@_)xLjY~CoSIhOCIk9A0sf-zR==_#kJ>cDI(sEzn$L}EX_y7W_xUG@Ld z-j%*JeRW$Lv4|j5>VUwbRjg376`7|ZEmTy-U}WyA21r7PfDj-iC`j?;WzgD)5N2d1 zi9!;F5aQ69GKVpeFj+n6LR+X03rk2^+p+>G!lZ8`dsYi%7|MeQ@VjR)LUrWI&s-3-kesJZ9uT z2>;y+l;}}cwmZQf*YwI`SU!E;(=Io*BaScRLYqq!83UTRfybWBuhi$ZrP95^cGkLV z%-3h|hMRi@jmKUKdC5paoxqep7kdm}UhEO(!uS4da+udiqI+~7M)Y#4)uLPM! ztSTDKNN3ce%D+D5z($hlCYoY*$K*04qPXYHM4#jNTzPk*u5CGp%mpAyMylrnEjsU+ z)O$H@7h$3dHUw!o7OHXnyJETsT3vAI4WVladjx)aiq2&{UgpYG-zcX8F0OJ5@iHHU z9!k=o4M|h>a)~tfcSKFkg9(}#uurpYU-GAcZv<6&DBN;pFi*zslLlw<8P#wqN%)2}aeMiv}+u=|qgyupHs>um?UJycy3+hHdhvVUfJe9qw1tT0D$z?K#TZ zRWylth&uHgwNkIUHFc2Bmur%G-tf^mBO_cDC_Y-&#p!j|#k2_XcVTf#@sal+Nw`Bb zn}rvO7<$o0XHp3DnuIg(t@dC-L++OlmYvL>U{a5X;~2j0m(PeM6-nXo*k6o^J3UM}{3-A~Zn1c}6jp@xkx zp|@b80nMrN*U;8OPLrc{V5eL|yTK7$>jpk&FTh-NACc=ae}5`M&^>6L)`SSu=H;89>}gOA_HMsBV|x-HT?CnxPej z!|pkeDag$_xH(-aTAIjya;h>eBalx*gqt3H9Usv*n)fU40$|{$@aA9wpyzXD#mp{p z$pMg->;ts;`QVfz24E=7rcT+6J|R3PVtJS0N!f!{;XL{3&f7;Pf)U|1brA9S^hX8r zOD)Wq&MI#mcZKs1>2H+;N9!)be{V@<9V&Wh-_$FSzkv zci*{Iu7=HZ^erf5b|sG@7HViy!ROe-NhWu4B+cq^)DJCg1{!-ab4qawQS3dhA1vpT z8d6a!Bwah5@2RMaZM^!zS<7oCzfLm!-+y$el)4ibo>Kg$vhm?NtVJ^bN-*Yn-f_wi zcOz~jRt9@;csOOO!=Jcw2dXwW;`X@oJfE^l;eQjR4+`N$M zif@;o(BGL$?Yv&{#V^;VLlkS=LMPcnwjQd#WBX}FvyOcGFzqf4elvuTqG<4?)liGP zd$LT=I+S&SfjD6vmzuDk9OBO~Z?7*FP@b|w*w$wU?y&aVjt6gs`Kzh@vpY4WgVwe9 zlN3${!mVcFwm2R5 zn`t`FIjc9O^5kREw3nZzb`6bP|M}Kl9!2S6sX418fSb?*c<98H6m!{lrzj;&1nSCqAB}ziIA)T=LL2vRttj45 zltf#G%YKz!S}f~%PR}__;7>rhGEM!H7b!;C1CwhcEns#cu)KV-!ejn4QO)vyZ}PN1 zMiZs5`HXjPuZzLNTLYt zkr5T78IT)9ly$@0bTJyrNl+J-W^d7>Y9`cC^Ep>d>YwWS|JF#DZ1t~PTmRtWBaaN$ zvmlp^m0Ja3x1s^RpjX8aJ@&ZkAEMMHDoV!(bpyg7&u81e$PHy(k_$2lj(B}_%?$?1 zpjNenI9b_w#r`qrR_)rF3yXpEEu%Kf-UNNAY?e}xNpegBf=?0NF3d@_AvFYR+p8I} zz0_?&{pLFb-A!bznvw!k?>S@Fxe&I)S3)}i4=7Bn>oeqslMU=B^HE10vc4&qRGo_G zzoYDn$O+|(ba=miya#9`Az4(-jaa=MokFXCa`4Col@QWefL1wd^1NF5+-maS)-X<$ z_=hvVL}`=S>?e{CjOC|;KA{&jrJo4VrXcg#n0=mUaR?HAwCwHq%UBFTb<`j;i;NV_ zUP*5{DKaK?dz?1IsA{gk{I0VQeMY~5^VW5*b`b~|2$aeZZqLM_CYU+C& z3Yc%dGO3(cD_fe??e(Yl+t`lYI9oT|mu6wYDi!frcVf1JOQ5S17k+gp9BEcM|Dmov zRd5o+(W$v^`rjBKEkjK%HH75aQiO>93AcV3@@MyF}{`z?16o~5~mru zgKLIDt#N}xJ4Xy_FzT*&QnJ`0{s?3K+ z5NZ7|U^w!SspQi{Jd!Og-H=~p=CLQEt8mQ75$48`0Z?JOpu*zFkN*9Z2&R(JEARl< za1V=&ZjGBRvyFxI0Np!p6B_k^Si?GxcT6VpMT;Sg~+U*XAXCVw1-|l zx76XrP?v`E0EfG_+Te{)zW&1U9`Tuz{7aFsiclETK((>^;6f3kVZSA`ZGQJIP)Xi^ zJ>JjvwZqiVChEegK0o^lktb-m07ZiWoByDd=pyrDTk=%#S^KV$E?wr!*5$&RQ~FeU zp0Gu3TT?868BNwnUhU#-j5bepS8<=yZ)u8}*@7mA0`ApnjD&`fm1ds^(xV`$_JVhL zDSnD__wAy)wqe8a!8YH{7Ig^wZNPpfBG@4yu zPb{HWj*8)p-I}s3RsLeN5r|u>((`q#WFugrYI-Q~mcpz;zFoBwL|_>PZm<7ZNcW2q z`RBp%eX?&LOmWI5PG}>Ij{%>QooQo5iCU$*O}PZSPf7nI5ovsP|I@Qf4UK#MxVr!U z4}aU=|F4Qi=*!QJXlQKNy7`R&0F3{uIa*X}?9_mfZmxAMf+%QQ_`&mg^7)@q{|h>m B6sQ0I diff --git a/manifest.json b/manifest.json deleted file mode 100644 index 68c6d8b..0000000 --- a/manifest.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "Libreto", - "id": "libreto", - "packaging_format": 1, - "description": { - "en": "Aggregate your pads to create a wiki", - "fr": "Agrégez vos pads pour créer un wiki" - }, - "version": "0.0.20180605~ynh4", - "url": "https://libreto.net", - "upstream": { - "license": "GPL-3.0-or-later", - "website": "https://libreto.net", - "demo": "https://libreto.net", - "code": "https://github.com/Ventricule/libreto" - }, - "license": "GPL-3.0-or-later", - "maintainer": { - "name": "ljf", - "email": "ljf+libreto_ynh@reflexlibre.net", - "url": "https://reflexlibre.net" - }, - "requirements": { - "yunohost": ">= 4.3.0" - }, - "multi_instance": true, - "services": [ - "nginx", - "php7.3-fpm" - ], - "arguments": { - "install": [ - { - "name": "domain", - "type": "domain" - }, - { - "name": "path", - "type": "path", - "example": "/libreto", - "default": "/libreto" - }, - { - "name": "is_public", - "type": "boolean", - "help": { - "en": "If enabled, Libreto will be accessible by people who do not have an account. This can be changed later via the webadmin.", - "fr": "Si cette case est cochée, Libreto sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." - }, - "default": true - }, - { - "name": "etherpad_instance", - "type": "string", - "ask": { - "en": "Choose etherpad URL Libreto should use?", - "fr": "Choisissez l'URL de l'instance etherpad que Libreto utilisera ?" - }, - "help": { - "en": "Libreto need an Etherpad instance, you should install before the package etherpad. You need a valid certificate.", - "fr": "Libreto a besoin d'une instance Etherpad, vous devriez installer le paquet Libreto avant. Vous devez avoir un certificat valide." - }, - "optional": true, - "example": "https://annuel2.framapad.org", - "default": "https://annuel2.framapad.org" - }, - { - "name": "creation_open", - "type": "boolean", - "ask": { - "en": "Is non member can create a Libreto wiki?", - "fr": "Est-ce qu'une personne sans compte YunoHost peut créer un wiki Libreto ?" - }, - "default": true - } - ] - } -} diff --git a/manifest.toml b/manifest.toml index 9acd061..d586e25 100644 --- a/manifest.toml +++ b/manifest.toml @@ -18,22 +18,20 @@ cpe = "???" # FIXME: optional but recommended if relevant, this is meant to cont fund = "???" # FIXME: optional but recommended (or remove if irrelevant / not applicable). This is meant to be an URL where people can financially support this app, especially when its development is based on volunteers and/or financed by its community. YunoHost may later advertise it in the webadmin. [integration] -yunohost = ">= 4.3.0" -architectures = "all" # FIXME: can be replaced by a list of supported archs using the dpkg --print-architecture nomenclature (amd64/i386/armhf/arm64), for example: ["amd64", "i386"] +yunohost = ">= 11.1.15" +architectures = "all" multi_instance = true -ldap = "?" # FIXME: replace with true, false, or "not_relevant". Not to confuse with the "sso" key : the "ldap" key corresponds to wether or not a user *can* login on the app using its YunoHost credentials. -sso = "?" # FIXME: replace with true, false, or "not_relevant". Not to confuse with the "ldap" key : the "sso" key corresponds to wether or not a user is *automatically logged-in* on the app when logged-in on the YunoHost portal. -disk = "50M" # FIXME: replace with an **estimate** minimum disk requirement. e.g. 20M, 400M, 1G, ... -ram.build = "50M" # FIXME: replace with an **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ... -ram.runtime = "50M" # FIXME: replace with an **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ... +ldap = false +sso = false +disk = "50M" +ram.build = "50M" +ram.runtime = "50M" [install] [install.domain] - # this is a generic question - ask strings are automatically handled by Yunohost's core type = "domain" [install.path] - # this is a generic question - ask strings are automatically handled by Yunohost's core type = "path" default = "/libreto" diff --git a/scripts/backup b/scripts/backup index 6887c3e..18f83fe 100755 --- a/scripts/backup +++ b/scripts/backup @@ -10,27 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -#REMOVEME? ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_print_info --message="Loading installation settings..." - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= diff --git a/scripts/change_url b/scripts/change_url index a61c584..16e0f3c 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -9,59 +9,6 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# RETRIEVE ARGUMENTS -#================================================= - -#REMOVEME? old_domain=$YNH_APP_OLD_DOMAIN -#REMOVEME? old_path=$YNH_APP_OLD_PATH - -#REMOVEME? new_domain=$YNH_APP_NEW_DOMAIN -#REMOVEME? new_path=$YNH_APP_NEW_PATH - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 - -#REMOVEME? # Needed for helper "ynh_add_nginx_config" -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) - -#================================================= -# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP -#================================================= -#REMOVEME? ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." --weight=3 - -# Backup the current version of the app -#REMOVEME? ynh_backup_before_upgrade -#REMOVEME? ynh_clean_setup () { - # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. -#REMOVEME? ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" - - # Restore it if the upgrade fails -#REMOVEME? ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# CHECK WHICH PARTS SHOULD BE CHANGED -#================================================= - -#REMOVEME? change_domain=0 -#REMOVEME? if [ "$old_domain" != "$new_domain" ] -then - #REMOVEME? change_domain=1 -fi - -#REMOVEME? change_path=0 -#REMOVEME? if [ "$old_path" != "$new_path" ] -then - #REMOVEME? change_path=1 -fi - #================================================= # STANDARD MODIFICATIONS #================================================= @@ -71,39 +18,6 @@ ynh_script_progression --message="Updating NGINX web server configuration..." -- ynh_change_url_nginx_config -#REMOVEME? nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf - -# Change the path in the NGINX config file -if [ $change_path -eq 1 ] -then - # Make a backup of the original NGINX config file if modified -#REMOVEME? ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for NGINX helper -#REMOVEME? domain="$old_domain" -#REMOVEME? path="$new_path" - # Create a dedicated NGINX config -#REMOVEME? ynh_add_nginx_config -fi - -# Change the domain for NGINX -if [ $change_domain -eq 1 ] -then - # Delete file checksum for the old conf file location -#REMOVEME? ynh_delete_file_checksum --file="$nginx_conf_path" -#REMOVEME? mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf - # Store file checksum for the new config file location -#REMOVEME? ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" -fi - -#================================================= -# GENERIC FINALISATION -#================================================= -# RELOAD NGINX -#================================================= -#REMOVEME? ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -#REMOVEME? #REMOVEME? ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index 36050d8..2691a50 100755 --- a/scripts/install +++ b/scripts/install @@ -9,67 +9,20 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -#REMOVEME? ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# RETRIEVE ARGUMENTS FROM THE MANIFEST -#================================================= - -#REMOVEME? domain=$YNH_APP_ARG_DOMAIN -#REMOVEME? path=$YNH_APP_ARG_PATH -#REMOVEME? is_public=$YNH_APP_ARG_IS_PUBLIC -#REMOVEME? etherpad_instance=$YNH_APP_ARG_ETHERPAD_INSTANCE -#REMOVEME? creation_open=$YNH_APP_ARG_CREATION_OPEN - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -#================================================= -#REMOVEME? ynh_script_progression --message="Validating installation parameters..." --weight=1 - -#REMOVEME? install_dir=/var/www/$app -#REMOVEME? test ! -e "$install_dir" || ynh_die --message="This path already contains a folder" - -# Register (book) web path -#REMOVEME? ynh_webpath_register --app=$app --domain=$domain --path=$path - #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -#REMOVEME? ynh_script_progression --message="Storing installation settings..." -#REMOVEME? ynh_app_setting_set --app=$app --key=domain --value=$domain -#REMOVEME? ynh_app_setting_set --app=$app --key=path --value=$path ynh_app_setting_set --app=$app --key=etherpad_instance --value=$etherpad_instance ynh_app_setting_set --app=$app --key=creation_open --value=$creation_open -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# CREATE DEDICATED USER -#================================================= -#REMOVEME? ynh_script_progression --message="Configuring system user..." --weight=1 - -# Create a system user -#REMOVEME? ynh_system_user_create --username=$app --home_dir="$install_dir" - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Setting up source files..." --weight=4 -#REMOVEME? ynh_app_setting_set --app=$app --key=install_dir --value=$install_dir - git config --system --add safe.directory $install_dir + # Note: We use git instead of ynh_setup_source, cause this repo use submodules git clone https://github.com/zamentur/libreto.git "$install_dir" --quiet @@ -78,7 +31,6 @@ pushd "$install_dir" git submodule update --init --recursive --quiet popd -chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" @@ -88,8 +40,7 @@ chown -R $app:www-data "$install_dir" ynh_script_progression --message="Configuring PHP-FPM..." --weight=2 # Create a dedicated PHP-FPM config -ynh_add_fpm_config -#REMOVEME? phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +ynh_add_fpm_config --usage=low --footprint=low #================================================= # NGINX CONFIGURATION @@ -121,28 +72,6 @@ fi # Calculate and store the config file checksum into the app settings ynh_store_file_checksum "$install_dir/config.php" -#================================================= -# GENERIC FINALIZATION -#================================================= -# SETUP SSOWAT -#================================================= -#REMOVEME? ynh_script_progression --message="Configuring permissions..." --weight=1 - -# Make app public if necessary -#REMOVEME? if [ $is_public -eq 1 ] -then - # Everyone can access the app. - # The "main" permission is automatically created before the install script. -#REMOVEME? ynh_permission_update --permission="main" --add="visitors" -fi - -#================================================= -# RELOAD NGINX -#================================================= -#REMOVEME? ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -#REMOVEME? ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/remove b/scripts/remove index 3d2ec92..787cb2c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -9,26 +9,6 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) - -#================================================= -# STANDARD REMOVE -#================================================= -# REMOVE APP MAIN DIR -#================================================= -#REMOVEME? ynh_script_progression --message="Removing app main directory..." --weight=3 - -# Remove the app directory securely -#REMOVEME? ynh_secure_remove --file="$install_dir" - #================================================= # REMOVE NGINX CONFIGURATION #================================================= @@ -45,16 +25,6 @@ ynh_script_progression --message="Removing PHP-FPM configuration..." --weight=1 # Remove the dedicated PHP-FPM config ynh_remove_fpm_config -#================================================= -# GENERIC FINALIZATION -#================================================= -# REMOVE DEDICATED USER -#================================================= -#REMOVEME? ynh_script_progression --message="Removing the dedicated system user..." --weight=1 - -# Delete a system user -#REMOVEME? ynh_system_user_delete --username=$app - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/restore b/scripts/restore index 1d6a408..b080003 100755 --- a/scripts/restore +++ b/scripts/restore @@ -10,46 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -#REMOVEME? ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." --weight=1 - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? path=$(ynh_app_setting_get --app=$app --key=path) -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) -#REMOVEME? phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -#REMOVEME? ynh_script_progression --message="Validating restoration parameters..." --weight=2 - -#REMOVEME? test ! -d $install_dir \ - || ynh_die --message="There is already a directory: $install_dir " - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -#REMOVEME? ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -#REMOVEME? ynh_system_user_create --username=$app --home_dir="$install_dir" - #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -57,7 +17,6 @@ ynh_script_progression --message="Restoring the app main directory..." --weight= ynh_restore_file --origin_path="$install_dir" -chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" diff --git a/scripts/upgrade b/scripts/upgrade index 7c57065..2f7655c 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -9,62 +9,12 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# LOAD SETTINGS -#================================================= -#REMOVEME? ynh_script_progression --message="Loading installation settings..." - -#REMOVEME? app=$YNH_APP_INSTANCE_NAME - -#REMOVEME? domain=$(ynh_app_setting_get --app=$app --key=domain) -#REMOVEME? path=$(ynh_app_setting_get --app=$app --key=path) -#REMOVEME? #REMOVEME? install_dir=$(ynh_app_setting_get --app=$app --key=install_dir) -#REMOVEME? etherpad_instance=$(ynh_app_setting_get --app=$app --key=etherpad_instance) -#REMOVEME? creation_open=$(ynh_app_setting_get --app=$app --key=creation_open) - #================================================= # CHECK VERSION #================================================= -ynh_script_progression --message="Checking version..." upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -#REMOVEME? ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." - -# Backup the current version of the app -#REMOVEME? ynh_backup_before_upgrade -#REMOVEME? ynh_clean_setup () { - # Restore it if the upgrade fails -#REMOVEME? ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -#REMOVEME? ynh_abort_if_errors - -#================================================= -# STANDARD UPGRADE STEPS -#================================================= -# ENSURE DOWNWARD COMPATIBILITY -#================================================= -ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 - -# Cleaning legacy permissions -#REMOVEME? if ynh_legacy_permissions_exists; then -#REMOVEME? ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -#================================================= -# CREATE DEDICATED USER -#================================================= -#REMOVEME? ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 - -# Create a dedicated user (if not existing) -#REMOVEME? ynh_system_user_create --username=$app --home_dir="$install_dir" - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -86,7 +36,6 @@ then popd fi -chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" @@ -94,8 +43,9 @@ chown -R $app:www-data "$install_dir" # PHP-FPM CONFIGURATION #================================================= ynh_script_progression --message="Upgrading PHP-FPM configuration..." --weight=2 + # Create a dedicated PHP-FPM config -ynh_add_fpm_config +ynh_add_fpm_config --usage=low --footprint=low #================================================= # NGINX CONFIGURATION @@ -116,15 +66,6 @@ ynh_backup_if_checksum_is_different --file="$install_dir/config.php" # Recalculate and store the checksum of the file for the next upgrade. ynh_store_file_checksum --file="$install_dir/config.php" -#================================================= -# GENERIC FINALIZATION -#================================================= -# RELOAD NGINX -#================================================= -#REMOVEME? ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -#REMOVEME? ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..5dc9c12 --- /dev/null +++ b/tests.toml @@ -0,0 +1,15 @@ +test_format = 1.0 + +[default] + + # ------------------------------- + # Default args to use for install + # ------------------------------- + + args.etherpad_instance = "https://annuel2.framapad.org" + + # ------------------------------- + # Commits to test upgrade from + # ------------------------------- + + test_upgrade_from.ce19369d.name = "Upgrade from 0.0.20180605~ynh3"