1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/roundcube_ynh.git synced 2024-09-03 20:16:28 +02:00

Merge pull request #54 from YunoHost-Apps/testing

Testing
This commit is contained in:
Maniack Crudelis 2019-03-28 13:22:47 +01:00 committed by GitHub
commit c832d0e47f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 769 additions and 357 deletions

110
README.md
View file

@ -1,43 +1,61 @@
Roundcube for YunoHost # Roundcube for YunoHost
----------------------
[![Integration level](https://dash.yunohost.org/integration/roundcube.svg)](https://dash.yunohost.org/appci/app/roundcube)
[![Install Roundcube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=roundcube)
> *This package allow you to install Roundcube quickly and simply on a YunoHost server.
If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
## Overview
[Roundcube](https://roundcube.net/) is a browser-based multilingual IMAP client with [Roundcube](https://roundcube.net/) is a browser-based multilingual IMAP client with
an application-like user interface. an application-like user interface.
**Shipped version:** 1.3.6 **Shipped version:** 1.3.8
![](https://roundcube.net/images/screens/mailview.jpg) ## Screenshots
## Features ![](https://roundcube.net/images/screens/mailbox.png)
## Demo
* [YunoHost demo](https://demo.yunohost.org/webmail/)
## Configuration
You can extend - or even override - the Roundcube configuration which is coming with this package in the file `conf/local.inc.php`. Do not edit the file `conf/config.inc.php` as future upgrades will overwrite it.
## Documentation
* Official documentation: https://github.com/roundcube/roundcubemail/wiki
* YunoHost documentation: https://github.com/YunoHost/doc/blob/master/app_roundcube.md:
## Licence
LICENCE: GPL-3.0-only
## YunoHost specific features
In addition to Roundcube core features, the following are made available with In addition to Roundcube core features, the following are made available with
this package: this package
* Integrate with YunoHost users and SSO - i.e. logout button, YunoHost users #### Multi-users support
search
* Synchronize your email aliases as identities in Roundcube
* Install the [contextmenu](https://plugins.roundcube.net/packages/johndoh/contextmenu)
and [automatic addressbook](https://plugins.roundcube.net/packages/sblaisot/automatic_addressbook)
plugins by default
* Allow to install the [CardDAV](https://plugins.roundcube.net/packages/roundcube/carddav)
(address book) synchronization plugin at the installation - note that if
you have installed ownCloud or Baïkal, it will automatically add the
corresponding and existing address book.
## Extend and tweak #### Supported architectures
### Configuration * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/roundcube%20%28Official%29.svg)](https://ci-apps.yunohost.org/ci/apps/roundcube/)
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/roundcube%20%28Official%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/roundcube/)
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/roundcube%20%28Official%29.svg)](https://ci-stretch.nohost.me/ci/apps/roundcube/)
You can extend - or even override - the Roundcube configuration which is coming ## Limitations
with this package in the file `conf/local.inc.php`. Do not edit the file
`conf/config.inc.php` as future upgrades will overwrite it.
### Plugins ## Additional information
#### Plugins
You can also install other plugins - which will not be removed with upgrades. To do so, You can also install other plugins - which will not be removed with upgrades. To do so,
you can use the official [Plugin Repository](https://plugins.roundcube.net/). you can use the official [Plugin Repository](https://plugins.roundcube.net/).
#### From the Plugin Repository ##### From the Plugin Repository
Let's say for example that we want to install the Let's say for example that we want to install the
[html5_notifier](https://plugins.roundcube.net/packages/kitist/html5_notifier) plugin. [html5_notifier](https://plugins.roundcube.net/packages/kitist/html5_notifier) plugin.
@ -71,12 +89,56 @@ Let's say for example that we want to install the
Note that you should also check the plugin homepage for additional installation Note that you should also check the plugin homepage for additional installation
steps as needed. steps as needed.
#### Manual installation ##### Manual installation
You can also download the plugin and put it under the `plugins/` directory. In this You can also download the plugin and put it under the `plugins/` directory. In this
case, do not forget to change ownerships of this folder to `roundcube`. case, do not forget to change ownerships of this folder to `roundcube`.
## YunoHost specific features
In addition to Roundcube core features, the following are made available with
this package:
* Synchronize your email aliases as identities in Roundcube
* Install the [contextmenu](https://plugins.roundcube.net/packages/johndoh/contextmenu)
and [automatic addressbook](https://plugins.roundcube.net/packages/sblaisot/automatic_addressbook)
plugins by default
* Allow to install the [CardDAV](https://plugins.roundcube.net/packages/roundcube/carddav)
(address book) synchronization plugin at the installation - note that if
you have installed ownCloud or Baïkal, it will automatically add the
corresponding and existing address book.
#### Multi-users support
* Integrate with YunoHost users and SSO - i.e. logout button, YunoHost users
search
#### Supported architectures
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/roundcube%20%28Official%29.svg)](https://ci-apps.yunohost.org/ci/apps/roundcube/)
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/roundcube%20%28Official%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/roundcube/)
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/roundcube%20%28Official%29.svg)](https://ci-stretch.nohost.me/ci/apps/roundcube/)
## Limitations
* No known limitations.
## Links ## Links
* Report a bug: https://github.com/YunoHost-Apps/roundcube_ynh/issues
* Roundcube website: https://roundcube.net/ * Roundcube website: https://roundcube.net/
* YunoHost website: https://yunohost.org/ * YunoHost website: https://yunohost.org/
---
Developers info
----------------
**Only if you want to use a testing branch for coding, instead of merging directly into master.**
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/roundcube_ynh/tree/testing).
To try the testing branch, please proceed like that.
```
sudo yunohost app install https://github.com/YunoHost-Apps/roundcube_ynh/tree/testing --debug
or
sudo yunohost app upgrade roundcube -u https://github.com/YunoHost-Apps/roundcube_ynh/tree/testing --debug
```

View file

@ -12,7 +12,7 @@
setup_private=0 setup_private=0
setup_public=0 setup_public=0
upgrade=1 upgrade=1
upgrade=1 from_commit=8d0acb6953a4c4c2206985c7d9881c5b7b637ebd upgrade=1 from_commit=8d0acb6953a4c4c2206985c7d9881c5b7b637ebd
backup_restore=1 backup_restore=1
multi_instance=1 multi_instance=1
incorrect_path=1 incorrect_path=1

View file

@ -1,5 +1,5 @@
SOURCE_URL=https://github.com/roundcube/roundcubemail/releases/download/1.3.6/roundcubemail-1.3.6.tar.gz SOURCE_URL=https://github.com/roundcube/roundcubemail/releases/download/1.3.8/roundcubemail-1.3.8.tar.gz
SOURCE_SUM=5796670080c9c3c4071eecc70ddcb6b5df98d8a241a73e8a687fd536a9410c7a SOURCE_SUM=93314f125033d8ce2755198367c45bdd2f4cfee5d7688f913877beeb6c532858
SOURCE_SUM_PRG=sha256sum SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=tar.gz SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true SOURCE_IN_SUBDIR=true

View file

@ -1,41 +1,59 @@
<?php <?php
//// RCMCardDAV Plugin Admin Settings // RCMCardDAV Plugin Admin Settings
//// ** ADDRESSBOOK PRESETS // ** ADDRESSBOOK PRESETS
//// PRESET FOR: baikal /* PRESET FOR: baikal
//$prefs['Baïkal'] = array( $prefs['Baïkal'] = array(
// // required attributes // required attributes
// 'name' => 'Baïkal', 'name' => 'Baïkal',
// 'username' => '%u', 'username' => '%u',
// 'password' => '%p', 'password' => '%p',
// 'url' => '{baikal_url}/card.php/addressbooks/%u/', 'url' => '{baikal_url}/card.php/addressbooks/%u/',
//
// // optional attributes
// 'active' => true,
// 'readonly' => false,
// 'refresh_time' => '00:05:00',
//
// 'fixed' => array('username', 'password'),
// 'hide' => false,
//);
//// END: baikal
//// PRESET FOR: owncloud // optional attributes
//$prefs['ownCloud'] = array( 'active' => true,
// // required attributes 'readonly' => false,
// 'name' => 'ownCloud', 'refresh_time' => '00:05:00',
// 'username' => '%u',
// 'password' => '%p', 'fixed' => array('username', 'password'),
// 'url' => '{owncloud_url}/remote.php/dav/addressbooks/users/%u/default/', 'hide' => false,
// );
// // optional attributes END: baikal */
// 'active' => true,
// 'readonly' => false, /* PRESET FOR: owncloud
// 'refresh_time' => '00:05:00', $prefs['ownCloud'] = array(
// // required attributes
// 'fixed' => array('username', 'password'), 'name' => 'ownCloud',
// 'hide' => false, 'username' => '%u',
//); 'password' => '%p',
//// END: owncloud 'url' => '{owncloud_url}/remote.php/dav/addressbooks/users/%u/default/',
// optional attributes
'active' => true,
'readonly' => false,
'refresh_time' => '00:05:00',
'fixed' => array('username', 'password'),
'hide' => false,
);
END: owncloud */
/* PRESET FOR: nextcloud
$prefs['NextCloud'] = array(
// required attributes
'name' => 'nextCloud',
'username' => '%u',
'password' => '%p',
'url' => '{nextcloud_url}/remote.php/dav/addressbooks/users/%u/contacts/',
// optional attributes
'active' => true,
'readonly' => false,
'refresh_time' => '00:05:00',
'fixed' => array('username', 'password'),
'hide' => false,
);
END: nextcloud */

View file

@ -32,7 +32,7 @@ $config = array();
// Currently supported db_providers: mysql, pgsql, sqlite, mssql or sqlsrv // Currently supported db_providers: mysql, pgsql, sqlite, mssql or sqlsrv
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php // For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// NOTE: for SQLite use absolute path: 'sqlite:////full/path/to/sqlite.db?mode=0646' // NOTE: for SQLite use absolute path: 'sqlite:////full/path/to/sqlite.db?mode=0646'
$config['db_dsnw'] = 'mysql://#DBUSER#:#DBPASS#@localhost/#DBNAME#'; $config['db_dsnw'] = 'mysql://__DBUSER__:__DBPASS__@localhost/__DBNAME__';
// The mail host chosen to perform the log-in. // The mail host chosen to perform the log-in.
// Leave blank to show a textbox at login, give a list of hosts // Leave blank to show a textbox at login, give a list of hosts
@ -94,7 +94,7 @@ $config['product_name'] = 'YunoHost Webmail';
// in the session record (and the client cookie if remember password is enabled). // in the session record (and the client cookie if remember password is enabled).
// please provide a string of exactly 24 chars. // please provide a string of exactly 24 chars.
// YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS // YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS
$config['des_key'] = '#DESKEY#'; $config['des_key'] = '__DESKEY__';
// skin name: folder from skins/ // skin name: folder from skins/
$config['skin'] = 'larry'; $config['skin'] = 'larry';

View file

@ -1,6 +1,10 @@
location __PATH__ { #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
alias __FINALPATH__/; location __PATH__/ {
# Path to source
alias __FINALPATH__/ ;
# Force usage of https
if ($scheme = http) { if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent; rewrite ^ https://$server_name$request_uri? permanent;
} }
@ -13,7 +17,7 @@ location __PATH__ {
location ~ [^/]\.php(/|$) { location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock;
fastcgi_index index.php; fastcgi_index index.php;
fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_USER $remote_user;
fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_INFO $fastcgi_path_info;
@ -21,7 +25,7 @@ location __PATH__ {
include fastcgi_params; include fastcgi_params;
} }
# show YunoHost panel access # show YunoHost panel access
include conf.d/yunohost_panel.conf.inc; include conf.d/yunohost_panel.conf.inc;
} }

View file

@ -1,10 +1,11 @@
; Start a new pool named 'www'. ; 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) ; pool name ('www' here)
[__NAMETOCHANGE__] [__NAMETOCHANGE__]
; Per pool prefix ; Per pool prefix
; It only applies on the following directives: ; It only applies on the following directives:
; - 'access.log'
; - 'slowlog' ; - 'slowlog'
; - 'listen' (unixsocket) ; - 'listen' (unixsocket)
; - 'chroot' ; - 'chroot'
@ -24,28 +25,35 @@ group = __USER__
; The address on which to accept FastCGI requests. ; The address on which to accept FastCGI requests.
; Valid syntaxes are: ; 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; ; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; specific port; ; 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. ; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory. ; Note: This value is mandatory.
listen = /var/run/php5-fpm-__NAMETOCHANGE__.sock listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock
; Set listen(2) backlog. ; Set listen(2) backlog.
; Default Value: 128 (-1 on FreeBSD and OpenBSD) ; Default Value: 511 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 128 ;listen.backlog = 511
; Set permissions for unix socket, if one is used. In Linux, read/write ; 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 ; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. ; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user ; Default Values: user and group are set as the running user
; mode is set to 0660 ; mode is set to 0660
listen.owner = www-data listen.owner = www-data
listen.group = www-data listen.group = www-data
;listen.mode = 0660 ;listen.mode = 0660
; When POSIX Access Control Lists are supported you can set them using
; List of ipv4 addresses of FastCGI clients which are allowed to connect. ; 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 ; 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 ; 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 ; must be separated by a comma. If this value is left blank, connections will be
@ -59,7 +67,13 @@ listen.group = www-data
; - The pool processes will inherit the master process priority ; - The pool processes will inherit the master process priority
; unless it specified otherwise ; unless it specified otherwise
; Default Value: no set ; Default Value: no set
; priority = -19 ; 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. ; Choose how the process manager will control the number of child processes.
; Possible Values: ; Possible Values:
@ -96,7 +110,7 @@ pm = dynamic
; forget to tweak pm.* to fit your needs. ; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' ; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory. ; Note: This value is mandatory.
pm.max_children = 10 pm.max_children = 5
; The number of child processes created on startup. ; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic' ; Note: Used only when pm is set to 'dynamic'
@ -117,12 +131,12 @@ pm.max_spare_servers = 3
; Note: Used only when pm is set to 'ondemand' ; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s ; Default Value: 10s
;pm.process_idle_timeout = 10s; ;pm.process_idle_timeout = 10s;
; The number of requests each child process should execute before respawning. ; 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 ; 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. ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0 ; Default Value: 0
pm.max_requests = 500 ;pm.max_requests = 500
; The URI to view the FPM status page. If this value is not set, no URI will be ; 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: ; recognized as a status page. It shows the following informations:
@ -170,7 +184,7 @@ pm.max_requests = 500
; ;
; By default the status page only outputs short status. Passing 'full' in the ; By default the status page only outputs short status. Passing 'full' in the
; query string will also return status for each pool process. ; query string will also return status for each pool process.
; Example: ; Example:
; http://www.foo.bar/status?full ; http://www.foo.bar/status?full
; http://www.foo.bar/status?json&full ; http://www.foo.bar/status?json&full
; http://www.foo.bar/status?html&full ; http://www.foo.bar/status?html&full
@ -215,14 +229,14 @@ pm.max_requests = 500
; last request memory: 0 ; last request memory: 0
; ;
; Note: There is a real-time FPM status monitoring sample web page available ; Note: There is a real-time FPM status monitoring sample web page available
; It's available in: ${prefix}/share/fpm/status.html ; 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 ; 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 ; anything, but it may not be a good idea to use the .php extension or it
; may conflict with a real PHP file. ; may conflict with a real PHP file.
; Default Value: not set ; Default Value: not set
;pm.status_path = /status ;pm.status_path = /status
; The ping URI to call the monitoring page of FPM. If this value is not set, no ; 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 ; URI will be recognized as a ping page. This could be used to test from outside
; that FPM is alive and responding, or to ; that FPM is alive and responding, or to
@ -275,7 +289,7 @@ pm.max_requests = 500
; - %{megabytes}M ; - %{megabytes}M
; - %{mega}M ; - %{mega}M
; %n: pool name ; %n: pool name
; %o: ouput header ; %o: output header
; it must be associated with embraces to specify the name of the header: ; it must be associated with embraces to specify the name of the header:
; - %{Content-Type}o ; - %{Content-Type}o
; - %{X-Powered-By}o ; - %{X-Powered-By}o
@ -283,7 +297,7 @@ pm.max_requests = 500
; - .... ; - ....
; %p: PID of the child that serviced the request ; %p: PID of the child that serviced the request
; %P: PID of the parent 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 query string
; %Q: the '?' character if query string exists ; %Q: the '?' character if query string exists
; %r: the request URI (without the query string, see %q and %Q) ; %r: the request URI (without the query string, see %q and %Q)
; %R: remote IP address ; %R: remote IP address
@ -291,72 +305,85 @@ pm.max_requests = 500
; %t: server time the request was received ; %t: server time the request was received
; it can accept a strftime(3) format: ; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default) ; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %T: time the log has been written (the request has finished) ; %T: time the log has been written (the request has finished)
; it can accept a strftime(3) format: ; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default) ; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %u: remote user ; %u: remote user
; ;
; Default: "%R - %u %t \"%m %r\" %s" ; Default: "%R - %u %t \"%m %r\" %s"
;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" ;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
; The log file for slow requests ; The log file for slow requests
; Default Value: not set ; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set ; Note: slowlog is mandatory if request_slowlog_timeout is set
slowlog = /var/log/nginx/__NAMETOCHANGE__.slow.log ;slowlog = log/$pool.log.slow
; The timeout for serving a single request after which a PHP backtrace will be ; 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'. ; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0 ; Default Value: 0
request_slowlog_timeout = 5s ;request_slowlog_timeout = 0
; The timeout for serving a single request after which the worker process will ; 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 ; 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'. ; 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) ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0 ; Default Value: 0
request_terminate_timeout = 1d request_terminate_timeout = 1d
; Set open file descriptor rlimit. ; Set open file descriptor rlimit.
; Default Value: system defined value ; Default Value: system defined value
;rlimit_files = 1024 ;rlimit_files = 1024
; Set max core size rlimit. ; Set max core size rlimit.
; Possible Values: 'unlimited' or an integer greater or equal to 0 ; Possible Values: 'unlimited' or an integer greater or equal to 0
; Default Value: system defined value ; Default Value: system defined value
;rlimit_core = 0 ;rlimit_core = 0
; Chroot to this directory at the start. This value must be defined as an ; 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. ; 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 ; 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 ; of its subdirectories. If the pool prefix is not set, the global prefix
; will be used instead. ; will be used instead.
; Note: chrooting is a great security feature and should be used whenever ; Note: chrooting is a great security feature and should be used whenever
; possible. However, all PHP paths will be relative to the chroot ; possible. However, all PHP paths will be relative to the chroot
; (error_log, sessions.save_path, ...). ; (error_log, sessions.save_path, ...).
; Default Value: not set ; Default Value: not set
;chroot = ;chroot =
; Chdir to this directory at the start. ; Chdir to this directory at the start.
; Note: relative path can be used. ; Note: relative path can be used.
; Default Value: current directory or / when chroot ; Default Value: current directory or / when chroot
chdir = __FINALPATH__ chdir = __FINALPATH__
; Redirect worker stdout and stderr into main error log. If not set, stdout and ; 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. ; stderr will be redirected to /dev/null according to FastCGI specs.
; Note: on highloaded environement, this can cause some delay in the page ; Note: on highloaded environement, this can cause some delay in the page
; process time (several ms). ; process time (several ms).
; Default Value: no ; Default Value: no
catch_workers_output = yes ;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 ; 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 ; 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 ; FPM to .php extensions to prevent malicious users to use other extensions to
; exectute php code. ; execute php code.
; Note: set an empty value to allow all extensions. ; Note: set an empty value to allow all extensions.
; Default Value: .php ; Default Value: .php
;security.limit_extensions = .php .php3 .php4 .php5 ;security.limit_extensions = .php .php3 .php4 .php5 .php7
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment. ; the current environment.
; Default Value: clean env ; Default Value: clean env
@ -370,7 +397,7 @@ catch_workers_output = yes
; overwrite the values previously defined in the php.ini. The directives are the ; overwrite the values previously defined in the php.ini. The directives are the
; same as the PHP SAPI: ; same as the PHP SAPI:
; php_value/php_flag - you can set classic ini defines which can ; php_value/php_flag - you can set classic ini defines which can
; be overwritten from PHP call 'ini_set'. ; be overwritten from PHP call 'ini_set'.
; php_admin_value/php_admin_flag - these directives won't be overwritten by ; php_admin_value/php_admin_flag - these directives won't be overwritten by
; PHP call 'ini_set' ; PHP call 'ini_set'
; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. ; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
@ -391,5 +418,16 @@ catch_workers_output = yes
;php_admin_flag[log_errors] = on ;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M ;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
php_admin_value[upload_max_filesize] = 30M php_admin_value[upload_max_filesize] = 30M
php_admin_value[post_max_size] = 30M php_admin_value[post_max_size] = 30M

View file

@ -6,22 +6,22 @@
"en": "Open Source Webmail software", "en": "Open Source Webmail software",
"fr": "Webmail Open Source" "fr": "Webmail Open Source"
}, },
"version": "1.3.8~ynh2",
"url": "https://roundcube.net/", "url": "https://roundcube.net/",
"license": "GPL-3", "license": "GPL-3.0-only",
"version": "1.3.6~ynh1",
"maintainer": { "maintainer": {
"name": "YunoHost Contributors", "name": "YunoHost Contributors",
"email": "apps@yunohost.org" "email": "apps@yunohost.org"
}, },
"requirements": {
"yunohost": ">= 3.2.0"
},
"multi_instance": true, "multi_instance": true,
"services": [ "services": [
"nginx", "nginx",
"php5-fpm", "php7.0-fpm",
"mysql" "mysql"
], ],
"requirements": {
"yunohost": ">= 2.7.2"
},
"arguments": { "arguments": {
"install" : [ "install" : [
{ {

View file

@ -19,7 +19,6 @@
- [ ] **Approval (LGTM)** : - [ ] **Approval (LGTM)** :
- [ ] **Approval (LGTM)** : - [ ] **Approval (LGTM)** :
- **CI succeeded** : - **CI succeeded** :
[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/roundcube_ynh%20-BRANCH-%20(Official)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/roundcube_ynh%20-BRANCH-%20(Official)/) *Please replace '-BRANCH-' in this link for a PR from a local branch.* [![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/roundcube_ynh%20PR-NUM-/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/roundcube_ynh%20PR-NUM-/)
or *Please replace '-NUM-' in this link by the PR number.*
[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/roundcube_ynh%20PR-NUM-%20(Official_fork)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/roundcube_ynh%20PR-NUM-%20(Official_fork)/) *Replace '-NUM-' by the PR number in this link for a PR from a forked repository.*
When the PR is marked as ready to merge, you have to wait for 3 days before really merging it. When the PR is marked as ready to merge, you have to wait for 3 days before really merging it.

View file

@ -1,84 +1,60 @@
#!/bin/bash
# ============================================================================= # =============================================================================
# COMMON VARIABLES # COMMON VARIABLES
# ============================================================================= # =============================================================================
# Package dependencies # Package dependencies
pkg_dependencies="php5-cli php5-common php5-intl php5-json php5-mcrypt php-pear php-auth-sasl php-mail-mime php-patchwork-utf8 php-net-smtp php-net-socket php-net-ldap2 php-net-ldap3" pkg_dependencies="php-cli php-common php-intl php-json php-mcrypt php-pear php-auth-sasl php-mail-mime php-patchwork-utf8 php-net-smtp php-net-socket php-net-ldap2 php-net-ldap3 php-zip php-gd php-mbstring"
if [ "$(lsb_release --codename --short)" != "jessie" ]; then
pkg_dependencies="$pkg_dependencies php-zip php-gd php-mbstring"
else
pkg_dependencies="$pkg_dependencies php-crypt-gpg"
fi
# Plugins version # Plugins version
contextmenu_version=2.3 contextmenu_version=2.3
automatic_addressbook_version=v0.4.3 automatic_addressbook_version=v0.4.3
carddav_version=2.0.4 carddav_version=3.0.3
# ============================================================================= #=================================================
# COMMON ROUNDCUBE FUNCTIONS # EXPERIMENTAL HELPERS
# ============================================================================= #=================================================
# Execute a composer command from a given directory # Execute a command with Composer
# usage: composer_exec workdir COMMAND [ARG ...] #
exec_composer() { # usage: ynh_composer_exec [--workdir=$final_path] --commands="commands"
local workdir=$1 # | arg: -w, --workdir - The directory from where the command will be executed. Default $final_path.
shift 1 # | arg: -c, --commands - Commands to execute.
ynh_composer_exec () {
# Declare an array to define the options of this helper.
local legacy_args=wc
declare -Ar args_array=( [w]=workdir= [c]=commands= )
local workdir
local commands
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
workdir="${workdir:-$final_path}"
COMPOSER_HOME="${workdir}/.composer" \ COMPOSER_HOME="$workdir/.composer" \
php "${workdir}/composer.phar" $@ \ php "$workdir/composer.phar" $commands \
-d "${workdir}" --quiet --no-interaction -d "$workdir" --quiet --no-interaction
} }
# Install and initialize Composer in the given directory # Install and initialize Composer in the given directory
# usage: init_composer destdir #
init_composer() { # usage: ynh_install_composer [--workdir=$final_path]
local destdir=$1 # | arg: -w, --workdir - The directory from where the command will be executed. Default $final_path.
ynh_install_composer () {
# Declare an array to define the options of this helper.
local legacy_args=w
declare -Ar args_array=( [w]=workdir= )
local workdir
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
workdir="${workdir:-$final_path}"
# install composer curl -sS https://getcomposer.org/installer \
curl -sS https://getcomposer.org/installer \ | COMPOSER_HOME="$workdir/.composer" \
| COMPOSER_HOME="${destdir}/.composer" \ php -- --quiet --install-dir="$workdir" \
php -- --quiet --install-dir="$destdir" \ || ynh_die "Unable to install Composer."
|| ynh_die "Unable to install Composer"
# install composer.json # update dependencies to create composer.lock
cp "${destdir}/composer.json-dist" "${destdir}/composer.json" ynh_composer_exec --workdir="$workdir" --commands="install --no-dev" \
|| ynh_die "Unable to update core dependencies with Composer."
# update dependencies to create composer.lock
exec_composer "$destdir" install --no-dev \
|| ynh_die "Unable to update Roundcube core dependencies"
}
# Install and configure CardDAV plugin for Roundcube
# usage: install_carddav destdir
# https://plugins.roundcube.net/packages/roundcube/carddav
install_carddav() {
local destdir=$1
local carddav_config="${destdir}/plugins/carddav/config.inc.php"
local carddav_tmp_config="../conf/carddav.config.inc.php"
exec_composer "$destdir" require \
"roundcube/carddav $carddav_version"
# Look for installed and supported CardDAV servers
for carddav_app in "owncloud" "baikal"; do
local app_id=$(yunohost app list --installed -f "$carddav_app" \
--output-as json | grep -Po '"id":[ ]?"\K.*?(?=")' | head -1)
[[ -z "$app_id" ]] || {
# Retrieve app settings and enable relevant preset
carddav_domain=$(ynh_app_setting_get "$app_id" domain)
carddav_path=$(ynh_app_setting_get "$app_id" path)
carddav_url="https://${carddav_domain}${carddav_path%/}"
sed -i "s#{${carddav_app}_url}#${carddav_url}#g" "$carddav_tmp_config"
sed -i \
"/\/\/\/\/ PRESET FOR: ${carddav_app}/\
,/\/\/\/\/ END: ${carddav_app}/s/^\/\///" "$carddav_tmp_config"
}
done
# Copy plugin the configuration file
cp "$carddav_tmp_config" "$carddav_config"
} }

213
scripts/_getopts_fix.sh Normal file
View file

@ -0,0 +1,213 @@
#!/bin/bash
#=================================================
# FIX OF YNH_HANDLE_GETOPTS_ARGS FROM UNSTABLE
#=================================================
# Internal helper design to allow helpers to use getopts to manage their arguments
#
# [internal]
#
# example: function my_helper()
# {
# declare -Ar args_array=( [a]=arg1= [b]=arg2= [c]=arg3 )
# local arg1
# local arg2
# local arg3
# ynh_handle_getopts_args "$@"
#
# [...]
# }
# my_helper --arg1 "val1" -b val2 -c
#
# usage: ynh_handle_getopts_args "$@"
# | arg: $@ - Simply "$@" to tranfert all the positionnal arguments to the function
#
# This helper need an array, named "args_array" with all the arguments used by the helper
# that want to use ynh_handle_getopts_args
# Be carreful, this array has to be an associative array, as the following example:
# declare -Ar args_array=( [a]=arg1 [b]=arg2= [c]=arg3 )
# Let's explain this array:
# a, b and c are short options, -a, -b and -c
# arg1, arg2 and arg3 are the long options associated to the previous short ones. --arg1, --arg2 and --arg3
# For each option, a short and long version has to be defined.
# Let's see something more significant
# declare -Ar args_array=( [u]=user [f]=finalpath= [d]=database )
#
# NB: Because we're using 'declare' without -g, the array will be declared as a local variable.
#
# Please keep in mind that the long option will be used as a variable to store the values for this option.
# For the previous example, that means that $finalpath will be fill with the value given as argument for this option.
#
# Also, in the previous example, finalpath has a '=' at the end. That means this option need a value.
# So, the helper has to be call with --finalpath /final/path, --finalpath=/final/path or -f /final/path, the variable $finalpath will get the value /final/path
# If there's many values for an option, -f /final /path, the value will be separated by a ';' $finalpath=/final;/path
# For an option without value, like --user in the example, the helper can be called only with --user or -u. $user will then get the value 1.
#
# To keep a retrocompatibility, a package can still call a helper, using getopts, with positional arguments.
# The "legacy mode" will manage the positional arguments and fill the variable in the same order than they are given in $args_array.
# e.g. for `my_helper "val1" val2`, arg1 will be filled with val1, and arg2 with val2.
ynh_handle_getopts_args () {
# Manage arguments only if there's some provided
set +x
if [ $# -ne 0 ]
then
# Store arguments in an array to keep each argument separated
local arguments=("$@")
# For each option in the array, reduce to short options for getopts (e.g. for [u]=user, --user will be -u)
# And built parameters string for getopts
# ${!args_array[@]} is the list of all option_flags in the array (An option_flag is 'u' in [u]=user, user is a value)
local getopts_parameters=""
local option_flag=""
for option_flag in "${!args_array[@]}"
do
# Concatenate each option_flags of the array to build the string of arguments for getopts
# Will looks like 'abcd' for -a -b -c -d
# If the value of an option_flag finish by =, it's an option with additionnal values. (e.g. --user bob or -u bob)
# Check the last character of the value associate to the option_flag
if [ "${args_array[$option_flag]: -1}" = "=" ]
then
# For an option with additionnal values, add a ':' after the letter for getopts.
getopts_parameters="${getopts_parameters}${option_flag}:"
else
getopts_parameters="${getopts_parameters}${option_flag}"
fi
# Check each argument given to the function
local arg=""
# ${#arguments[@]} is the size of the array
for arg in `seq 0 $(( ${#arguments[@]} - 1 ))`
do
# And replace long option (value of the option_flag) by the short option, the option_flag itself
# (e.g. for [u]=user, --user will be -u)
# Replace long option with =
arguments[arg]="${arguments[arg]//--${args_array[$option_flag]}/-${option_flag} }"
# And long option without =
arguments[arg]="${arguments[arg]//--${args_array[$option_flag]%=}/-${option_flag}}"
done
done
# Read and parse all the arguments
# Use a function here, to use standart arguments $@ and be able to use shift.
parse_arg () {
# Read all arguments, until no arguments are left
while [ $# -ne 0 ]
do
# Initialize the index of getopts
OPTIND=1
# Parse with getopts only if the argument begin by -, that means the argument is an option
# getopts will fill $parameter with the letter of the option it has read.
local parameter=""
getopts ":$getopts_parameters" parameter || true
if [ "$parameter" = "?" ]
then
ynh_die --message="Invalid argument: -${OPTARG:-}"
elif [ "$parameter" = ":" ]
then
ynh_die --message="-$OPTARG parameter requires an argument."
else
local shift_value=1
# Use the long option, corresponding to the short option read by getopts, as a variable
# (e.g. for [u]=user, 'user' will be used as a variable)
# Also, remove '=' at the end of the long option
# The variable name will be stored in 'option_var'
local option_var="${args_array[$parameter]%=}"
# If this option doesn't take values
# if there's a '=' at the end of the long option name, this option takes values
if [ "${args_array[$parameter]: -1}" != "=" ]
then
# 'eval ${option_var}' will use the content of 'option_var'
eval ${option_var}=1
else
# Read all other arguments to find multiple value for this option.
# Load args in a array
local all_args=("$@")
# If the first argument is longer than 2 characters,
# There's a value attached to the option, in the same array cell
if [ ${#all_args[0]} -gt 2 ]; then
# Remove the option and the space, so keep only the value itself.
all_args[0]="${all_args[0]#-${parameter} }"
# Reduce the value of shift, because the option has been removed manually
shift_value=$(( shift_value - 1 ))
fi
# Declare the content of option_var as a variable.
eval ${option_var}=""
# Then read the array value per value
local i
for i in `seq 0 $(( ${#all_args[@]} - 1 ))`
do
# If this argument is an option, end here.
if [ "${all_args[$i]:0:1}" == "-" ]
then
# Ignore the first value of the array, which is the option itself
if [ "$i" -ne 0 ]; then
break
fi
else
# Else, add this value to this option
# Each value will be separated by ';'
if [ -n "${!option_var}" ]
then
# If there's already another value for this option, add a ; before adding the new value
eval ${option_var}+="\;"
fi
# Escape double quote to prevent any interpretation during the eval
all_args[$i]="${all_args[$i]//\"/\\\"}"
eval ${option_var}+=\"${all_args[$i]}\"
shift_value=$(( shift_value + 1 ))
fi
done
fi
fi
# Shift the parameter and its argument(s)
shift $shift_value
done
}
# LEGACY MODE
# Check if there's getopts arguments
if [ "${arguments[0]:0:1}" != "-" ]
then
# If not, enter in legacy mode and manage the arguments as positionnal ones..
# Dot not echo, to prevent to go through a helper output. But print only in the log.
set -x; echo "! Helper used in legacy mode !" > /dev/null; set +x
local i
for i in `seq 0 $(( ${#arguments[@]} -1 ))`
do
# Try to use legacy_args as a list of option_flag of the array args_array
# Otherwise, fallback to getopts_parameters to get the option_flag. But an associative arrays isn't always sorted in the correct order...
# Remove all ':' in getopts_parameters
getopts_parameters=${legacy_args:-${getopts_parameters//:}}
# Get the option_flag from getopts_parameters, by using the option_flag according to the position of the argument.
option_flag=${getopts_parameters:$i:1}
if [ -z "$option_flag" ]; then
ynh_print_warn --message="Too many arguments ! \"${arguments[$i]}\" will be ignored."
continue
fi
# Use the long option, corresponding to the option_flag, as a variable
# (e.g. for [u]=user, 'user' will be used as a variable)
# Also, remove '=' at the end of the long option
# The variable name will be stored in 'option_var'
local option_var="${args_array[$option_flag]%=}"
# Escape double quote to prevent any interpretation during the eval
arguments[$i]="${arguments[$i]//\"/\\\"}"
# Store each value given as argument in the corresponding variable
# The values will be stored in the same order than $args_array
eval ${option_var}+=\"${arguments[$i]}\"
done
unset legacy_args
else
# END LEGACY MODE
# Call parse_arg and pass the modified list of args as an array of arguments.
parse_arg "${arguments[@]}"
fi
fi
set -x
}

View file

@ -2,28 +2,24 @@
#================================================= #=================================================
# GENERIC START # GENERIC START
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
# Exit on command errors and treat access to unset variables as an error
set -eu
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then source ../settings/scripts/_common.sh
# Get the _common.sh file if it's not in the current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
@ -36,23 +32,33 @@ db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# BACKUP THE APP MAIN DIR # BACKUP THE APP MAIN DIR
#================================================= #=================================================
ynh_print_info "Backing up the main app directory..."
ynh_backup "$final_path" ynh_backup "$final_path"
#================================================= #=================================================
# BACKUP THE NGINX CONFIGURATION # BACKUP THE NGINX CONFIGURATION
#================================================= #=================================================
ynh_print_info "Backing up nginx web server configuration..."
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# BACKUP THE PHP-FPM CONFIGURATION # BACKUP THE PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_print_info "Backing up php-fpm configuration..."
ynh_backup "/etc/php5/fpm/pool.d/$app.conf" ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf"
#================================================= #=================================================
# BACKUP THE MYSQL DATABASE # BACKUP THE MYSQL DATABASE
#================================================= #=================================================
ynh_print_info "Backing up the MySQL database..."
ynh_mysql_dump_db "$db_name" > db.sql ynh_mysql_dump_db "$db_name" > db.sql
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."

View file

@ -6,8 +6,11 @@
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
source ./_common.sh source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
# Overload the helper ynh_handle_getopts_args to have fixes from unstable.
# Needed for composer helpers
source _getopts_fix.sh
#================================================= #=================================================
# MANAGE SCRIPT FAILURE # MANAGE SCRIPT FAILURE
@ -30,21 +33,21 @@ app=$YNH_APP_INSTANCE_NAME
#================================================= #=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#================================================= #=================================================
ynh_print_info "Validating installation parameters..."
# Normalize the url path syntax
path_url=$(ynh_normalize_url_path $path_url)
final_path=/var/www/$app final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder" test ! -e "$final_path" || ynh_die "This path already contains a folder"
# Check web path availability # Normalize the url path syntax
ynh_webpath_available $domain $path_url path_url=$(ynh_normalize_url_path $path_url)
# Register (book) web path # Register (book) web path
ynh_webpath_register $app $domain $path_url ynh_webpath_register $app $domain $path_url
#================================================= #=================================================
# STORE SETTINGS FROM MANIFEST # STORE SETTINGS FROM MANIFEST
#================================================= #=================================================
ynh_print_info "Storing installation settings..."
ynh_app_setting_set $app domain $domain ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path $path_url ynh_app_setting_set $app path $path_url
@ -56,20 +59,14 @@ ynh_app_setting_set $app with_enigma $with_enigma
#================================================= #=================================================
# INSTALL DEPENDENCIES # INSTALL DEPENDENCIES
#================================================= #=================================================
ynh_print_info "Installing dependencies..."
# jessie-backports is needed for php-net-ldap3
if [ "$(lsb_release --codename --short)" = "jessie" ]; then
grep -q -R 'jessie-backports' /etc/apt/sources.list{,.d} || {
echo "deb http://httpredir.debian.org/debian jessie-backports main" \
| tee -a /etc/apt/sources.list.d/backports.list >/dev/null
}
fi
ynh_install_app_dependencies "$pkg_dependencies" ynh_install_app_dependencies "$pkg_dependencies"
#================================================= #=================================================
# CREATE A MYSQL DATABASE # CREATE A MYSQL DATABASE
#================================================= #=================================================
ynh_print_info "Creating a MySQL database..."
db_name=$(ynh_sanitize_dbid $app) db_name=$(ynh_sanitize_dbid $app)
ynh_app_setting_set $app db_name $db_name ynh_app_setting_set $app db_name $db_name
@ -78,6 +75,7 @@ ynh_mysql_setup_db $db_name $db_name
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_print_info "Setting up source files..."
ynh_app_setting_set $app final_path $final_path ynh_app_setting_set $app final_path $final_path
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
@ -86,6 +84,7 @@ ynh_setup_source "$final_path"
#================================================= #=================================================
# NGINX CONFIGURATION # NGINX CONFIGURATION
#================================================= #=================================================
ynh_print_info "Configuring nginx web server..."
# Create a dedicated nginx config # Create a dedicated nginx config
ynh_add_nginx_config ynh_add_nginx_config
@ -93,6 +92,7 @@ ynh_add_nginx_config
#================================================= #=================================================
# CREATE DEDICATED USER # CREATE DEDICATED USER
#================================================= #=================================================
ynh_print_info "Configuring system user..."
# Create a system user # Create a system user
ynh_system_user_create $app ynh_system_user_create $app
@ -100,6 +100,7 @@ ynh_system_user_create $app
#================================================= #=================================================
# PHP-FPM CONFIGURATION # PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_print_info "Configuring php-fpm..."
# Create a dedicated php-fpm config # Create a dedicated php-fpm config
ynh_add_fpm_config ynh_add_fpm_config
@ -109,70 +110,104 @@ ynh_add_fpm_config
#================================================= #=================================================
# INSTALL AND INITIALIZE COMPOSER # INSTALL AND INITIALIZE COMPOSER
#================================================= #=================================================
ynh_print_info "Installing roundcube with composer..."
init_composer "$final_path" # Install composer.json
cp "$final_path/composer.json-dist" "$final_path/composer.json"
# Install composer
ynh_install_composer
#================================================= #=================================================
# INITIALIZE DATABASE # INITIALIZE DATABASE
#================================================= #=================================================
ynh_print_info "Initializing database..."
ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_name" \ ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_name" \
< "${final_path}/SQL/mysql.initial.sql" < "$final_path/SQL/mysql.initial.sql"
#================================================= #=================================================
# CONFIGURE ROUNDCUBE # CONFIGURE ROUNDCUBE
#================================================= #=================================================
ynh_print_info "Configuring roundcube..."
rc_conf="$final_path/config/config.inc.php"
rc_conf="${final_path}/config/config.inc.php"
cp ../conf/config.inc.php "$rc_conf" cp ../conf/config.inc.php "$rc_conf"
ynh_replace_string "#DESKEY#" "$(ynh_string_random 24)" "$rc_conf" ynh_replace_string "__DESKEY__" "$(ynh_string_random 24)" "$rc_conf"
ynh_replace_string "#DBUSER#" "$db_name" "$rc_conf" ynh_replace_string "__DBUSER__" $db_name "$rc_conf"
ynh_replace_string "#DBPASS#" "$db_pwd" "$rc_conf" ynh_replace_string "__DBPASS__" "$db_pwd" "$rc_conf"
ynh_replace_string "#DBNAME#" "$db_name" "$rc_conf" ynh_replace_string "__DBNAME__" $db_name "$rc_conf"
#================================================= #=================================================
# INSTALL ADDITIONAL PLUGINS # INSTALL ADDITIONAL PLUGINS
#================================================= #=================================================
ynh_print_info "Installing additional plugins..."
# Create logs and temp directories # Create logs and temp directories
mkdir -p "${final_path}/logs" "${final_path}/temp" mkdir -p "$final_path/"{logs,temp}
# Install contextmenu and automatic_addressbook plugins # Install contextmenu and automatic_addressbook plugins
# https://plugins.roundcube.net/packages/sblaisot/automatic_addressbook # https://plugins.roundcube.net/packages/sblaisot/automatic_addressbook
# https://plugins.roundcube.net/packages/johndoh/contextmenu # https://plugins.roundcube.net/packages/johndoh/contextmenu
exec_composer "$final_path" require \ ynh_composer_exec --commands="require \
"johndoh/contextmenu $contextmenu_version" \ johndoh/contextmenu $contextmenu_version \
"sblaisot/automatic_addressbook $automatic_addressbook_version" sblaisot/automatic_addressbook $automatic_addressbook_version"
installed_plugins+=" 'contextmenu', 'automatic_addressbook'," installed_plugins+=" 'contextmenu', 'automatic_addressbook',"
# Install CardDAV plugin # Install CardDAV plugin
if [[ $with_carddav -eq 1 ]]; then if [ $with_carddav -eq 1 ]
install_carddav "$final_path" \ then
&& installed_plugins+=" 'carddav'," \ ynh_composer_exec --commands="require roundcube/carddav $carddav_version"
|| echo "Unable to install CardDAV plugin" >&2
carddav_tmp_config="../conf/carddav.config.inc.php"
# Look for installed and supported CardDAV servers
for carddav_app in "owncloud" "nextcloud" "baikal"
do
carddav_app_id=$(yunohost app list --installed -f $carddav_app \
--output-as json | grep -Po '"id":[ ]?"\K.*?(?=")' | head -1)
if [ -n "$carddav_app_id" ]
then
# Retrieve app settings and enable relevant preset
carddav_domain=$(ynh_app_setting_get $carddav_app_id domain)
carddav_path=$(ynh_app_setting_get $carddav_app_id path)
carddav_url="https://${carddav_domain}${carddav_path%/}"
ynh_replace_string "{${carddav_app}_url}" "$carddav_url" "$carddav_tmp_config"
ynh_replace_string "/* PRESET FOR: $carddav_app" "" "$carddav_tmp_config"
ynh_replace_string "END: $carddav_app */" "" "$carddav_tmp_config"
fi
done
# Copy the plugin configuration file
cp "$carddav_tmp_config" ""$final_path/plugins/carddav/config.inc.php""
installed_plugins+=" 'carddav',"
fi fi
# Install Enigma plugin # Install Enigma plugin
if [[ $with_enigma -eq 1 ]]; then if [ $with_enigma -eq 1 ]
cp -a "$final_path/plugins/enigma/config.inc.php.dist" "$final_path/plugins/enigma/config.inc.php" \ then
&& installed_plugins+=" 'enigma'," \ cp -a "$final_path/plugins/enigma/config.inc.php.dist" "$final_path/plugins/enigma/config.inc.php" \
|| echo "Unable to install Enigma plugin" >&2 && installed_plugins+=" 'enigma'," \
|| ynh_print_warn "Unable to install Enigma plugin"
fi fi
#================================================= #=================================================
# UPDATE ROUNDCUBE CONFIGURATION # UPDATE ROUNDCUBE CONFIGURATION
#================================================= #=================================================
ynh_print_info "Updating roundcube configuration..."
sed -i "s#^\s*// installed plugins#&\n ${installed_plugins}#" \ ynh_replace_string "^\s*// installed plugins" "&\n $installed_plugins" "$rc_conf"
"${final_path}/config/config.inc.php"
# Update javascript dependencies # Update javascript dependencies
(cd "${final_path}" (cd "$final_path"
/usr/bin/php -q ./bin/install-jsdeps.sh) /usr/bin/php -q ./bin/install-jsdeps.sh)
# Store the config file checksum into the app settings # Store the config file checksum into the app settings
ynh_store_file_checksum "${final_path}/config/config.inc.php" ynh_store_file_checksum "$rc_conf"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -182,11 +217,17 @@ ynh_store_file_checksum "${final_path}/config/config.inc.php"
# Set permissions to app files # Set permissions to app files
chown -R root: "$final_path" chown -R root: "$final_path"
chown -R $app: "${final_path}/temp/" "${final_path}/logs/" chown -R $app: "$final_path/"{temp,logs,plugins/enigma/home}
chown -R $app: "$final_path/plugins/enigma/home"
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
ynh_print_info "Reloading nginx web server..."
systemctl reload nginx systemctl reload nginx
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Installation of $app completed"

View file

@ -6,29 +6,26 @@
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then
# Get file fonction if not been to the current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
# Source app helpers
source _common.sh source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
db_name=$(ynh_app_setting_get $app db_name) db_name=$(ynh_app_setting_get $app db_name)
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# STANDARD REMOVE # STANDARD REMOVE
#================================================= #=================================================
# REMOVE DEPENDENCIES # REMOVE DEPENDENCIES
#================================================= #=================================================
ynh_print_info "Removing dependencies"
# Remove metapackage and its dependencies # Remove metapackage and its dependencies
ynh_remove_app_dependencies ynh_remove_app_dependencies
@ -36,6 +33,7 @@ ynh_remove_app_dependencies
#================================================= #=================================================
# REMOVE THE MYSQL DATABASE # REMOVE THE MYSQL DATABASE
#================================================= #=================================================
ynh_print_info "Removing the MySQL database"
# Remove a database if it exists, along with the associated user # Remove a database if it exists, along with the associated user
ynh_mysql_remove_db $db_name $db_name ynh_mysql_remove_db $db_name $db_name
@ -43,13 +41,15 @@ ynh_mysql_remove_db $db_name $db_name
#================================================= #=================================================
# REMOVE APP MAIN DIR # REMOVE APP MAIN DIR
#================================================= #=================================================
ynh_print_info "Removing app main directory"
# Remove the app directory securely # Remove the app directory securely
ynh_secure_remove "/var/www/$app" ynh_secure_remove "$final_path"
#================================================= #=================================================
# REMOVE NGINX CONFIGURATION # REMOVE NGINX CONFIGURATION
#================================================= #=================================================
ynh_print_info "Removing nginx web server configuration"
# Remove the dedicated nginx config # Remove the dedicated nginx config
ynh_remove_nginx_config ynh_remove_nginx_config
@ -57,23 +57,23 @@ ynh_remove_nginx_config
#================================================= #=================================================
# REMOVE PHP-FPM CONFIGURATION # REMOVE PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_print_info "Removing php-fpm configuration"
# Remove the dedicated php-fpm config # Remove the dedicated php-fpm config
ynh_remove_fpm_config ynh_remove_fpm_config
#=================================================
# SPECIFIC REMOVE
#=================================================
# The following command is kept as a matter of transition with the previous way
# of managing dependencies
ynh_package_autoremove "roundcube-ynh-deps" || true
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================
# REMOVE DEDICATED USER # REMOVE DEDICATED USER
#================================================= #=================================================
ynh_print_info "Removing the dedicated system user"
# Delete a system user # Delete a system user
ynh_system_user_delete $app ynh_system_user_delete $app
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Removal of $app completed"

View file

@ -2,28 +2,24 @@
#================================================= #=================================================
# GENERIC START # GENERIC START
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
# Exit on command errors and treat access to unset variables as an error
set -eu
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then source ../settings/scripts/_common.sh
# Get the _common.sh file if it's not in the current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
@ -35,26 +31,13 @@ db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# CHECK IF THE APP CAN BE RESTORED # CHECK IF THE APP CAN BE RESTORED
#================================================= #=================================================
ynh_print_info "Validating restoration parameters..."
ynh_webpath_available $domain $path_url \ ynh_webpath_available $domain $path_url \
|| ynh_die "Path not available: ${domain}${path_url}" || ynh_die "Path not available: ${domain}${path_url}"
test ! -d $final_path \ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die "There is already a directory: $final_path "
#=================================================
# INSTALL DEPENDENCIES
#=================================================
# jessie-backports is needed for php-net-ldap3
if [ "$(lsb_release --codename --short)" = "jessie" ]; then
grep -q -R 'jessie-backports' /etc/apt/sources.list{,.d} || {
echo "deb http://httpredir.debian.org/debian jessie-backports main" \
| tee -a /etc/apt/sources.list.d/backports.list >/dev/null
}
fi
ynh_install_app_dependencies "$pkg_dependencies"
#================================================= #=================================================
# STANDARD RESTORATION STEPS # STANDARD RESTORATION STEPS
#================================================= #=================================================
@ -66,20 +49,14 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# RESTORE THE APP MAIN DIR # RESTORE THE APP MAIN DIR
#================================================= #=================================================
ynh_print_info "Restoring the app main directory..."
ynh_restore_file "$final_path" ynh_restore_file "$final_path"
#=================================================
# RESTORE THE MYSQL DATABASE
#=================================================
db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_mysql_setup_db $db_name $db_name $db_pwd
ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
#================================================= #=================================================
# RECREATE THE DEDICATED USER # RECREATE THE DEDICATED USER
#================================================= #=================================================
ynh_print_info "Recreating the dedicated system user..."
# Create the dedicated user (if not existing) # Create the dedicated user (if not existing)
ynh_system_user_create $app ynh_system_user_create $app
@ -90,19 +67,45 @@ ynh_system_user_create $app
# Restore permissions on app files # Restore permissions on app files
chown -R root: "$final_path" chown -R root: "$final_path"
chown -R $app: "${final_path}/temp/" "${final_path}/logs/" chown -R $app: "$final_path/"{temp,logs,plugins/enigma/home}
#================================================= #=================================================
# RESTORE THE PHP-FPM CONFIGURATION # RESTORE THE PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_restore_file "/etc/php5/fpm/pool.d/$app.conf" ynh_restore_file "/etc/php/7.0/fpm/pool.d/$app.conf"
#================================================= #=================================================
# GENERIC FINALISATION # SPECIFIC RESTORATION
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
ynh_print_info "Reinstalling dependencies..."
# Define and install dependencies
ynh_install_app_dependencies "$pkg_dependencies"
#=================================================
# RESTORE THE MYSQL DATABASE
#=================================================
ynh_print_info "Restoring the MySQL database..."
db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_mysql_setup_db $db_name $db_name $db_pwd
ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
#=================================================
# GENERIC FINALIZATION
#================================================= #=================================================
# RELOAD NGINX AND PHP-FPM # RELOAD NGINX AND PHP-FPM
#================================================= #=================================================
ynh_print_info "Reloading nginx web server and php-fpm..."
systemctl reload php5-fpm systemctl reload php7.0-fpm
systemctl reload nginx systemctl reload nginx
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Restoration completed for $app"

View file

@ -8,10 +8,14 @@
source _common.sh source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
# Overload the helper ynh_handle_getopts_args to have fixes from unstable.
# Needed for composer helpers
source _getopts_fix.sh
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
@ -25,6 +29,7 @@ with_enigma=$(ynh_app_setting_get $app with_enigma)
#================================================= #=================================================
# ENSURE DOWNWARD COMPATIBILITY # ENSURE DOWNWARD COMPATIBILITY
#================================================= #=================================================
ynh_print_info "Ensuring downward compatibility..."
# If db_name doesn't exist, create it # If db_name doesn't exist, create it
if [ -z "$db_name" ]; then if [ -z "$db_name" ]; then
@ -38,15 +43,41 @@ if [ -z "$final_path" ]; then
ynh_app_setting_set $app final_path $final_path ynh_app_setting_set $app final_path $final_path
fi fi
# If with_carddav doesn't exist, create it
if [ -z "$with_carddav" ]; then
if [ -f "$final_path/plugins/carddav/config.inc.php" ]
then
with_carddav=1
else
with_carddav=0
fi
ynh_app_setting_set $app with_carddav $with_carddav
fi
# If with_enigma doesn't exist, create it
if [ -z "$with_enigma" ]; then
if [ -f "${final_path}/plugins/enigma/config.inc.php" ]
then
with_enigma=1
else
with_enigma=0
fi
ynh_app_setting_set $app with_enigma $with_enigma
fi
#================================================= #=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#================================================= #=================================================
ynh_print_info "Backing up the app before upgrading (may take a while)..."
ynh_backup_before_upgrade # Backup the current version of the app # Backup the current version of the app
ynh_backup_before_upgrade
ynh_clean_setup () { ynh_clean_setup () {
ynh_restore_upgradebackup # restore it if the upgrade fails # restore it if the upgrade fails
ynh_restore_upgradebackup
} }
ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée. # Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#================================================= #=================================================
# CHECK THE PATH # CHECK THE PATH
@ -57,30 +88,10 @@ path_url=$(ynh_normalize_url_path $path_url)
#================================================= #=================================================
# STANDARD UPGRADE STEPS # STANDARD UPGRADE STEPS
#=================================================
# INSTALL DEPENDENCIES
#=================================================
# jessie-backports is needed for php-net-ldap3
if [ "$(lsb_release --codename --short)" = "jessie" ]; then
grep -q -R 'jessie-backports' /etc/apt/sources.list{,.d} || {
echo "deb http://httpredir.debian.org/debian jessie-backports main" \
| tee -a /etc/apt/sources.list.d/backports.list >/dev/null
}
fi
ynh_install_app_dependencies "$pkg_dependencies"
#=================================================
# CREATE DEDICATED USER
#=================================================
# Create a system user
ynh_system_user_create $app
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_print_info "Upgrading source files..."
# Get the current version of roundcube # Get the current version of roundcube
oldversion=$(grep RCMAIL_VERSION "$final_path/program/include/iniset.php" | cut -d\' -f4) oldversion=$(grep RCMAIL_VERSION "$final_path/program/include/iniset.php" | cut -d\' -f4)
@ -91,13 +102,30 @@ ynh_setup_source "$final_path"
#================================================= #=================================================
# NGINX CONFIGURATION # NGINX CONFIGURATION
#================================================= #=================================================
ynh_print_info "Upgrading nginx web server configuration..."
# Create a dedicated nginx config # Create a dedicated nginx config
ynh_add_nginx_config ynh_add_nginx_config
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
ynh_print_info "Upgrading dependencies..."
ynh_install_app_dependencies "$pkg_dependencies"
#=================================================
# CREATE DEDICATED USER
#=================================================
ynh_print_info "Making sure dedicated system user exists..."
# Create a dedicated user (if not existing)
ynh_system_user_create $app
#================================================= #=================================================
# PHP-FPM CONFIGURATION # PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_print_info "Upgrading php-fpm configuration..."
# Create a dedicated php-fpm config # Create a dedicated php-fpm config
ynh_add_fpm_config ynh_add_fpm_config
@ -107,94 +135,113 @@ ynh_add_fpm_config
#================================================= #=================================================
# CONFIGURE ROUNDCUBE # CONFIGURE ROUNDCUBE
#================================================= #=================================================
ynh_print_info "Reconfiguring roundcube..."
rc_conf="$final_path/config/config.inc.php"
# Verify the checksum and backup the file if it's different # Verify the checksum and backup the file if it's different
ynh_backup_if_checksum_is_different "${final_path}/config/config.inc.php" ynh_backup_if_checksum_is_different "$rc_conf"
rc_conf="${final_path}/config/config.inc.php"
cp ../conf/config.inc.php "$rc_conf" cp ../conf/config.inc.php "$rc_conf"
ynh_replace_string "#DESKEY#" "$(ynh_string_random 24)" "$rc_conf"
ynh_replace_string "#DBUSER#" "$db_name" "$rc_conf" ynh_replace_string "__DESKEY__" "$(ynh_string_random 24)" "$rc_conf"
ynh_replace_string "__DBUSER__" $db_name "$rc_conf"
db_pwd=$(ynh_app_setting_get $app mysqlpwd) db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_replace_string "#DBPASS#" "$db_pwd" "$rc_conf" ynh_replace_string "__DBPASS__" "$db_pwd" "$rc_conf"
ynh_replace_string "#DBNAME#" "$db_name" "$rc_conf" ynh_replace_string "__DBNAME__" $db_name "$rc_conf"
#================================================= #=================================================
# UPDATE DEPENDENCIES WITH COMPOSER # UPDATE DEPENDENCIES WITH COMPOSER
#================================================= #=================================================
ynh_print_info "Updating dependencies with composer..."
# Check if dependencies need to be updated with composer # Check if dependencies need to be updated with composer
if [ -f "${final_path}/composer.json" ]; then if [ -f "$final_path/composer.json" ]
exec_composer "${final_path}" update --no-dev --prefer-dist then
ynh_exec_warn_less ynh_composer_exec --commands=\"update --no-dev --prefer-dist\"
else else
init_composer "${final_path}" # Install composer.json
fi cp "$final_path/composer.json-dist" "$final_path/composer.json"
# Install composer
ynh_install_composer
fi
#================================================= #=================================================
# UPGRADE ADDITIONAL PLUGINS # UPGRADE ADDITIONAL PLUGINS
#================================================= #=================================================
ynh_print_info "Upgrading additional plugins..."
# Create logs and temp directories # Create logs and temp directories
mkdir -p "${final_path}/logs" "${final_path}/temp" mkdir -p "$final_path/"{logs,temp}
# Update or install contextmenu and automatic_addressbook plugins # Update or install contextmenu and automatic_addressbook plugins
# https://plugins.roundcube.net/packages/sblaisot/automatic_addressbook # https://plugins.roundcube.net/packages/sblaisot/automatic_addressbook
# https://plugins.roundcube.net/packages/johndoh/contextmenu # https://plugins.roundcube.net/packages/johndoh/contextmenu
exec_composer "${final_path}" update --no-dev --prefer-dist \ ynh_composer_exec --commands="update --no-dev --prefer-dist \
"johndoh/contextmenu $contextmenu_version" \ johndoh/contextmenu $contextmenu_version \
"sblaisot/automatic_addressbook $automatic_addressbook_version" sblaisot/automatic_addressbook $automatic_addressbook_version"
installed_plugins+=" 'contextmenu', 'automatic_addressbook'," installed_plugins+=" 'contextmenu', 'automatic_addressbook',"
# Guess with_carddav value if empty
if [[ -z "${with_carddav:-}" ]]; then
[[ -f "${final_path}/plugins/carddav/config.inc.php" ]] \
&& with_carddav=1 \
|| with_carddav=0
ynh_app_setting_set "$app" with_carddav "$with_carddav"
fi
# Update or install CardDAV plugin # Update or install CardDAV plugin
if [[ $with_carddav -eq 1 ]]; then if [ $with_carddav -eq 1 ]
install_carddav "${final_path}" \ then
&& installed_plugins+=" 'carddav'," \ ynh_composer_exec --commands="require roundcube/carddav $carddav_version"
|| echo "Unable to install CardDAV plugin" >&2
fi
# Guess with_enigma value if empty carddav_tmp_config="../conf/carddav.config.inc.php"
if [[ -z "${with_enigma:-}" ]]; then
[[ -f "${final_path}/plugins/enigma/config.inc.php" ]] \ # Look for installed and supported CardDAV servers
&& with_enigma=1 \ for carddav_app in "owncloud" "nextcloud" "baikal"
|| with_enigma=0 do
ynh_app_setting_set "$app" with_enigma "$with_enigma" carddav_app_id=$(yunohost app list --installed -f $carddav_app \
--output-as json | grep -Po '"id":[ ]?"\K.*?(?=")' | head -1)
if [ -n "$carddav_app_id" ]
then
# Retrieve app settings and enable relevant preset
carddav_domain=$(ynh_app_setting_get $carddav_app_id domain)
carddav_path=$(ynh_app_setting_get $carddav_app_id path)
carddav_url="https://${carddav_domain}${carddav_path%/}"
ynh_replace_string "{${carddav_app}_url}" "$carddav_url" "$carddav_tmp_config"
ynh_replace_string "\/\* PRESET FOR: $carddav_app" "" "$carddav_tmp_config"
ynh_replace_string "END: $carddav_app \*\/" "" "$carddav_tmp_config"
fi
done
# Copy the plugin configuration file
cp "$carddav_tmp_config" ""$final_path/plugins/carddav/config.inc.php""
installed_plugins+=" 'carddav',"
fi fi
# Install Enigma plugin # Install Enigma plugin
if [[ $with_enigma -eq 1 ]]; then if [ $with_enigma -eq 1 ]
cp -a "$final_path/plugins/enigma/config.inc.php.dist" "$final_path/plugins/enigma/config.inc.php" \ then
&& installed_plugins+=" 'enigma'," \ cp -a "$final_path/plugins/enigma/config.inc.php.dist" "$final_path/plugins/enigma/config.inc.php" \
|| echo "Unable to install Enigma plugin" >&2 && installed_plugins+=" 'enigma'," \
|| ynh_print_warn "Unable to install Enigma plugin"
fi fi
#================================================= #=================================================
# UPDATE ROUNDCUBE CONFIGURATION # UPDATE ROUNDCUBE CONFIGURATION
#================================================= #=================================================
ynh_print_info "Updating roundcube configuration..."
sed -i "s#^\s*// installed plugins#&\n ${installed_plugins}#" \ ynh_replace_string "^\s*// installed plugins" "&\n $installed_plugins" "$rc_conf"
"$rc_conf"
# Update javascript dependencies # Update javascript dependencies
( cd "${final_path}" (cd "$final_path"
/usr/bin/php -q ./bin/install-jsdeps.sh) /usr/bin/php -q ./bin/install-jsdeps.sh)
# Store the config file checksum into the app settings # Store the config file checksum into the app settings
ynh_store_file_checksum "${final_path}/config/config.inc.php" ynh_store_file_checksum "$rc_conf"
#================================================= #=================================================
# UPDATE ROUNDCUBE CORE # UPDATE ROUNDCUBE CORE
#================================================= #=================================================
ynh_print_info "Updating roundcube core..."
( cd "${final_path}" ( cd "$final_path"
./bin/update.sh --version=$oldversion -y) >&2 ynh_exec_warn ./bin/update.sh --version=$oldversion -y)
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -204,12 +251,17 @@ ynh_store_file_checksum "${final_path}/config/config.inc.php"
# Set permissions to app files # Set permissions to app files
chown -R root: "$final_path" chown -R root: "$final_path"
chown -R $app: "${final_path}/temp/" "${final_path}/logs/" chown -R $app: "$final_path/"{temp,logs,plugins/enigma/home}
chown -R $app: "$final_path/plugins/enigma/home"
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
ynh_print_info "Reloading nginx web server..."
systemctl reload nginx systemctl reload nginx
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Upgrade of $app completed"