diff --git a/README.md b/README.md
index f57251b..7623870 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
#  μlogger
-[](https://install-app.yunohost.org/?app=ulogger)
+
+[](https://dash.yunohost.org/appci/app/ulogger)
+[](https://install-app.yunohost.org/?app=ulogger)
- [Yunohost project](https://yunohost.org)
- [μlogger](https://github.com/bfabiszewski/ulogger-server)
@@ -7,7 +9,7 @@
## Description of the app.
This is a web application for real-time collection of geolocation data, tracks viewing and management. Together with a dedicated [μlogger mobile client](https://github.com/bfabiszewski/ulogger-android) it may be used as a complete self hosted server–client solution for logging and monitoring users' geolocation.
-Version: 0.4
+Version: 0.5
## Live demo:
- http://ulogger.fabiszewski.net/ (test track upload and editing, login: demo, password: demo)
@@ -31,3 +33,10 @@ This is a web application for real-time collection of geolocation data, tracks v
- [ ] Use config file from the sources rather then conf/config.php for the configuration.
**Multi-user:** Yes
+
+#### Supported architectures
+
+* x86-64b - [](https://ci-apps.yunohost.org/ci/apps/ulogger/)
+* ARMv8-A - [](https://ci-apps-arm.yunohost.org/ci/apps/ulogger/)
+* Jessie x86-64b - [](https://ci-stretch.nohost.me/ci/apps/ulogger/)
+
diff --git a/check_process b/check_process
index c4133a8..b7e5af1 100644
--- a/check_process
+++ b/check_process
@@ -7,10 +7,9 @@
; Manifest
domain="domain.tld" (DOMAIN)
path="/path" (PATH)
- admin="john" (USER)
+ admin="john"
is_public=1 (PUBLIC|public=1|private=0)
language="fr"
- password="password012346789"
; Checks
pkg_linter=1
setup_sub_dir=1
@@ -19,11 +18,12 @@
setup_private=1
setup_public=1
upgrade=1
+ upgrade=1 from_commit=59a7d2e8ecf6ac657481e1906684808467b896cf
backup_restore=1
multi_instance=1
incorrect_path=1
port_already_use=0
- change_url=0
+ change_url=1
;;; Levels
Level 1=auto
Level 2=auto
@@ -39,4 +39,4 @@
Level 10=0
;;; Options
Email=anmol@datamol.org
-Notification=yes
+Notification=change
diff --git a/conf/app.src b/conf/app.src
index 07dfdf8..d27a5a0 100644
--- a/conf/app.src
+++ b/conf/app.src
@@ -1,5 +1,5 @@
-SOURCE_URL=https://github.com/bfabiszewski/ulogger-server/archive/v0.4.zip
-SOURCE_SUM=d5821e1334cb3ce306e484b6398965b29b98d809dcda0998fb82bad14c74d008
+SOURCE_URL=https://github.com/bfabiszewski/ulogger-server/archive/v0.5.zip
+SOURCE_SUM=77205e03323ab7aab46f2115e578357dd65b1ba8476d9d348ae3dc216f58a4d3
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=zip
SOURCE_IN_SUBDIR=true
diff --git a/conf/config.php b/conf/config.php
index 9147d31..149387b 100755
--- a/conf/config.php
+++ b/conf/config.php
@@ -75,4 +75,9 @@ $lang = "__lang__";
// (metric, imperial)
$units = "metric";
//$units = "imperial";
+//$units = "nautical";
+// These need to be copied to config.php
+$strokeWeight = 2;
+$strokeColor = '#FF0000';
+$strokeOpacity = 1.0;
?>
diff --git a/conf/nginx.conf b/conf/nginx.conf
index 76f5bcc..9aaa771 100644
--- a/conf/nginx.conf
+++ b/conf/nginx.conf
@@ -16,7 +16,7 @@ location __PATH__ {
try_files $uri $uri/ index.php;
location ~ [^/]\.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;
# If you don't use a dedicated fpm config for your app,
# use a general fpm pool.
diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf
index 28742a1..ab5dca9 100644
--- a/conf/php-fpm.conf
+++ b/conf/php-fpm.conf
@@ -1,10 +1,11 @@
; Start a new pool named 'www'.
-; the variable $pool can we used in any directive and will be replaced by the
+; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[__NAMETOCHANGE__]
; Per pool prefix
; It only applies on the following directives:
+; - 'access.log'
; - 'slowlog'
; - 'listen' (unixsocket)
; - 'chroot'
@@ -24,28 +25,35 @@ 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 address on
+; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
-; 'port' - to listen on a TCP socket to all addresses on a
-; specific port;
+; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
+; a specific port;
+; 'port' - to listen on a TCP socket to all addresses
+; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
-listen = /var/run/php5-fpm-__NAMETOCHANGE__.sock
+listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock
-; Set listen(2) backlog. A value of '-1' means unlimited.
-; Default Value: 128 (-1 on FreeBSD and OpenBSD)
-;listen.backlog = 128
+; 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.
+; 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
-
-; List of ipv4 addresses of FastCGI clients which are allowed to connect.
+; 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
@@ -59,7 +67,13 @@ listen.group = www-data
; - The pool processes will inherit the master process priority
; unless it specified otherwise
; 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.
; Possible Values:
@@ -96,7 +110,7 @@ pm = dynamic
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
-pm.max_children = 10
+pm.max_children = 5
; The number of child processes created on startup.
; 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'
; 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
+;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:
@@ -170,7 +184,7 @@ pm.max_requests = 500
;
; By default the status page only outputs short status. Passing 'full' in the
; query string will also return status for each pool process.
-; Example:
+; Example:
; http://www.foo.bar/status?full
; http://www.foo.bar/status?json&full
; http://www.foo.bar/status?html&full
@@ -215,7 +229,7 @@ pm.max_requests = 500
; last request memory: 0
;
; 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
; anything, but it may not be a good idea to use the .php extension or it
@@ -275,7 +289,7 @@ pm.max_requests = 500
; - %{megabytes}M
; - %{mega}M
; %n: pool name
-; %o: ouput header
+; %o: output header
; it must be associated with embraces to specify the name of the header:
; - %{Content-Type}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 parent of the child that serviced the request
-; %q: the query string
+; %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
@@ -291,47 +305,51 @@ pm.max_requests = 500
; %t: server time the request was received
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
+; The strftime(3) format must be encapsuled in a %{}t tag
+; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %T: time the log has been written (the request has finished)
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
+; The strftime(3) format must be encapsuled in a %{}t tag
+; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %u: remote user
;
; Default: "%R - %u %t \"%m %r\" %s"
;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
-
+
; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
-slowlog = /var/log/nginx/__NAMETOCHANGE__.slow.log
-
+;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 = 5s
-
+;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
+; 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
@@ -347,16 +365,25 @@ chdir = __FINALPATH__
; Note: on highloaded environement, this can cause some delay in the page
; process time (several ms).
; 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
; 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
-; exectute php code.
+; execute php code.
; Note: set an empty value to allow all extensions.
; 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
; the current environment.
; 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
; same as the PHP SAPI:
; 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 call 'ini_set'
; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
@@ -392,12 +419,12 @@ catch_workers_output = yes
;php_admin_value[memory_limit] = 32M
; Common values to change to increase file upload limit
-; upload_max_filesize = 50M
-; post_max_size = 50M
-; mail.add_x_header = Off
+; 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
-; max_execution_time = 600
-; max_input_time = 300
-; memory_limit = 256M
-; short_open_tag = On
+; 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/manifest.json b/manifest.json
index e334d9c..23d609e 100644
--- a/manifest.json
+++ b/manifest.json
@@ -6,7 +6,7 @@
"en": "A real-time collection of geolocation data, tracks viewing and management.",
"fr": "Géolocalisation en temps réel, gestion et affichage de traces."
},
- "version": "0.3",
+ "version": "0.5~ynh1",
"url": "https://github.com/bfabiszewski/ulogger-server",
"license": "GPL",
"maintainer": {
@@ -14,12 +14,12 @@
"email": "anmol@datamol.org"
},
"requirements": {
- "yunohost": ">= 2.7.2"
+ "yunohost": ">= 3.0.0"
},
"multi_instance": true,
"services": [
"nginx",
- "php5-fpm",
+ "php7.0-fpm",
"mysql"
],
"arguments": {
@@ -63,14 +63,6 @@
},
"choices": ["fr", "en", "pl", "de", "hu", "it" ],
"default": "en"
- },
- {
- "name": "password",
- "type": "password",
- "ask": {
- "en": "Password for the admin account (At least 6 characters long)"
- },
- "example": "mystrogpassword"
}
]
}
diff --git a/scripts/_common.sh b/scripts/_common.sh
index 05a7907..90061b9 100644
--- a/scripts/_common.sh
+++ b/scripts/_common.sh
@@ -1,2 +1,84 @@
#!/bin/bash
+# Send an email to inform the administrator
+#
+# usage: ynh_send_readme_to_admin app_message [recipients]
+# | arg: app_message - The message to send to the administrator.
+# | arg: recipients - The recipients of this email. Use spaces to separate multiples recipients. - default: root
+# example: "root admin@domain"
+# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you
+# example: "root admin@domain user1 user2"
+ynh_send_readme_to_admin() {
+ local app_message="${1:-...No specific information...}"
+ local recipients="${2:-root}"
+
+ # Retrieve the email of users
+ find_mails () {
+ local list_mails="$1"
+ local mail
+ local recipients=" "
+ # Read each mail in argument
+ for mail in $list_mails
+ do
+ # Keep root or a real email address as it is
+ if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@"
+ then
+ recipients="$recipients $mail"
+ else
+ # But replace an user name without a domain after by its email
+ if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null)
+ then
+ recipients="$recipients $mail"
+ fi
+ fi
+ done
+ echo "$recipients"
+ }
+ recipients=$(find_mails "$recipients")
+
+ local mail_subject="☁️🆈🅽🅷☁️: \`$app\` has important message for you"
+
+ local mail_message="This is an automated message from your beloved YunoHost server.
+Specific information for the application $app.
+$app_message
+---
+Automatic diagnosis data from YunoHost
+$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')"
+
+ # Define binary to use for mail command
+ if [ -e /usr/bin/bsd-mailx ]
+ then
+ local mail_bin=/usr/bin/bsd-mailx
+ else
+ local mail_bin=/usr/bin/mail.mailutils
+ fi
+
+ # Send the email to the recipients
+ echo "$mail_message" | $mail_bin -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients"
+}
+
+ynh_smart_mktemp () {
+ local min_size="${1:-300}"
+ # Transform the minimum size from megabytes to kilobytes
+ min_size=$(( $min_size * 1024 ))
+
+ # Check if there's enough free space in a directory
+ is_there_enough_space () {
+ local free_space=$(df --output=avail "$1" | sed 1d)
+ test $free_space -ge $min_size
+ }
+
+ if is_there_enough_space /tmp; then
+ local tmpdir=/tmp
+ elif is_there_enough_space /var; then
+ local tmpdir=/var
+ elif is_there_enough_space /; then
+ local tmpdir=/
+ elif is_there_enough_space /home; then
+ local tmpdir=/home
+ else
+ ynh_die "Insufficient free space to continue..."
+ fi
+
+ echo "$(sudo mktemp --directory --tmpdir="$tmpdir")"
+}
diff --git a/scripts/backup b/scripts/backup
index d4ec492..1a4c268 100644
--- a/scripts/backup
+++ b/scripts/backup
@@ -6,24 +6,25 @@
# IMPORT GENERIC HELPERS
#=================================================
-if [ ! -e _common.sh ]; then
- # 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
+#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
+source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
+ynh_clean_setup () {
+ ### Remove this function if there's nothing to clean before calling the remove script.
+ true
+}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
+ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
@@ -36,23 +37,33 @@ db_name=$(ynh_app_setting_get $app db_name)
#=================================================
# BACKUP THE APP MAIN DIR
#=================================================
+ynh_print_info "Backing up the main app directory..."
ynh_backup "$final_path"
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
+ynh_print_info "Backing up nginx web server configuration..."
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# 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
#=================================================
+ynh_print_info "Backing up the MySQL database..."
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)."
diff --git a/scripts/install b/scripts/install
index 4db63c4..f432bf1 100644
--- a/scripts/install
+++ b/scripts/install
@@ -13,6 +13,10 @@ source /usr/share/yunohost/helpers
# MANAGE SCRIPT FAILURE
#=================================================
+ynh_clean_setup () {
+ ### Remove this function if there's nothing to clean before calling the remove script.
+ true
+}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
@@ -25,43 +29,40 @@ path_url=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN
is_public=$YNH_APP_ARG_IS_PUBLIC
language=$YNH_APP_ARG_LANGUAGE
-password=$YNH_APP_ARG_PASSWORD
+password=$(ynh_string_random 12)
-# This is a multi-instance app, meaning it can be installed several times independently
-# The id of the app as stated in the manifest is available as $YNH_APP_ID
-# The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...)
-# The app instance name is available as $YNH_APP_INSTANCE_NAME
-# - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample
-# - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2
-# - ynhexample__{N} for the subsequent installations, with N=3,4, ...
-# The app instance name is probably what you are interested the most, since this is
-# guaranteed to be unique. This is a good unique identifier to define installation path,
-# db names, ...
+### If it's a multi-instance app, meaning it can be installed several times independently
+### The id of the app as stated in the manifest is available as $YNH_APP_ID
+### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...)
+### The app instance name is available as $YNH_APP_INSTANCE_NAME
+### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample
+### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2
+### - ynhexample__{N} for the subsequent installations, with N=3,4, ...
+### The app instance name is probably what interests you most, since this is
+### guaranteed to be unique. This is a good unique identifier to define installation path,
+### db names, ...
app=$YNH_APP_INSTANCE_NAME
#=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#=================================================
+ynh_print_info "Validating installation parameters..."
+### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app".
+### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app"
final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder"
-# Normalize the url path syntax
-#path_url=$(ynh_normalize_url_path $path_url)
-
-# Check web path availability
-ynh_webpath_available $domain $path_url
# Register (book) web path
ynh_webpath_register $app $domain $path_url
-# Check password strength
-[[ ${#password} -gt 6 ]] || ynh_die \
"The password is too weak, it must be longer than 6 characters"
admin_password=$(openssl passwd -1 -salt xyz $password)
#=================================================
# STORE SETTINGS FROM MANIFEST
#=================================================
+ynh_print_info "Storing installation settings..."
ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path $path_url
@@ -77,8 +78,16 @@ ynh_app_setting_set $app language $language
#=================================================
# CREATE A MYSQL DATABASE
#=================================================
-# If your app uses a MySQL database, you can use these lines to bootstrap
-# a database, an associated user and save the password in app settings
+ynh_print_info "Creating a MySQL database..."
+
+### Use these lines if you need a database for the application.
+### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password.
+### The password will be stored as 'mysqlpwd' into the app settings,
+### and will be available as $db_pwd
+### If you're not using these lines:
+### - Remove the section "BACKUP THE MYSQL DATABASE" in the backup script
+### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script
+### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script
db_name=$(ynh_sanitize_dbid $app)
ynh_app_setting_set $app db_name $db_name
@@ -87,6 +96,11 @@ ynh_mysql_setup_db $db_name $db_name
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
+ynh_print_info "Setting up source files..."
+
+### `ynh_setup_source` is used to install an app from a zip or tar.gz file,
+### downloaded from an upstream source, like a git repository.
+### `ynh_setup_source` use the file conf/app.src
ynh_app_setting_set $app final_path $final_path
# Download, check integrity, uncompress and patch the source from app.src
@@ -98,6 +112,9 @@ sudo cp -r ../conf/config.php $final_path
#=================================================
# NGINX CONFIGURATION
#=================================================
+ynh_print_info "Configuring nginx web server..."
+
+### `ynh_add_nginx_config` will use the file conf/nginx.conf
# Create a dedicated nginx config
ynh_add_nginx_config
@@ -105,6 +122,7 @@ ynh_add_nginx_config
#=================================================
# CREATE DEDICATED USER
#=================================================
+ynh_print_info "Configuring system user..."
# Create a system user
ynh_system_user_create $app
@@ -112,6 +130,18 @@ ynh_system_user_create $app
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
+ynh_print_info "Configuring php-fpm..."
+
+### `ynh_add_fpm_config` is used to set up a PHP config.
+### You can remove it if your app doesn't use PHP.
+### `ynh_add_fpm_config` will use the files conf/php-fpm.conf and conf/php-fpm.ini
+### If you're not using these lines:
+### - You can remove these files in conf/.
+### - Remove the section "BACKUP THE PHP-FPM CONFIGURATION" in the backup script
+### - Remove also the section "REMOVE PHP-FPM CONFIGURATION" in the remove script
+### - As well as the section "RESTORE THE PHP-FPM CONFIGURATION" in the restore script
+### With the reload at the end of the script.
+### - And the section "PHP-FPM CONFIGURATION" in the upgrade script
# Create a dedicated php-fpm config
ynh_add_fpm_config
@@ -138,6 +168,8 @@ ynh_replace_string "__admin__" "$admin" ../conf/admin.sql
ynh_replace_string "__admin_pwd__" "$admin_password" ../conf/admin.sql
# Set the app as temporarily public for curl call
+ynh_print_info "Configuring SSOwat..."
+
ynh_app_setting_set $app skipped_uris "/"
# Reload SSOwat config
yunohost app ssowatconf
@@ -146,6 +178,8 @@ yunohost app ssowatconf
systemctl reload nginx
# Installation with curl
+ynh_print_info "Finalizing installation..."
+
ynh_local_curl "/scripts/setup.php" "command=setup"
#Add the admin account to the database
ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_name" < "../conf/admin.sql"
@@ -153,9 +187,13 @@ ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_name" < "../conf/admin.sql"
ynh_replace_string "^\$enabled = true;" "\$enabled = false;" "$final_path/scripts/setup.php"
#=================================================
-# STORE THE CHECKSUM OF THE CONFIG FILE
+# STORE THE CONFIG FILE CHECKSUM
#=================================================
+### `ynh_store_file_checksum` is used to store the checksum of a file.
+### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`,
+### you can make a backup of this file before modifying it again if the admin had modified it.
+
# Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "$final_path/config.php"
@@ -172,11 +210,8 @@ chown -R $app: $final_path
#=================================================
# SETUP SSOWAT
#=================================================
+ynh_print_info "Configuring SSOwat..."
-if [ $is_public -eq 0 ]
-then # Remove the public access
- ynh_app_setting_delete $app skipped_uris
-fi
# Make app public if necessary
if [ $is_public -eq 1 ]
then
@@ -187,5 +222,27 @@ fi
#=================================================
# RELOAD NGINX
#=================================================
+ynh_print_info "Reloading nginx web server..."
systemctl reload nginx
+
+#=================================================
+# SEND A README FOR THE ADMIN
+#=================================================
+
+message=" $app was successfully installed :)
+
+Please open your $app domain: https://$domain$path_url
+
+The admin username is: $admin
+The admin password is: $admin_password
+
+If you are facing any problem or want to improve this app, please open a new issue here: https://github.com/YunoHost-Apps/ulogger_ynh/issues"
+
+ynh_send_readme_to_admin "$message"
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_print_info "Installation of $app completed"
diff --git a/scripts/remove b/scripts/remove
index 13b98f6..27d23ae 100644
--- a/scripts/remove
+++ b/scripts/remove
@@ -12,6 +12,7 @@ source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
+ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
@@ -27,13 +28,15 @@ final_path=$(ynh_app_setting_get $app final_path)
#=================================================
# REMOVE THE MYSQL DATABASE
#=================================================
+ynh_print_info "Removing the MySQL database"
# Remove a database if it exists, along with the associated user
-ynh_mysql_remove_db $db_name $db_name
+ynh_mysql_remove_db $db_user $db_name
#=================================================
# REMOVE APP MAIN DIR
#=================================================
+ynh_print_info "Removing app main directory"
# Remove the app directory securely
ynh_secure_remove "$final_path"
@@ -41,6 +44,7 @@ ynh_secure_remove "$final_path"
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
+ynh_print_info "Removing nginx web server configuration"
# Remove the dedicated nginx config
ynh_remove_nginx_config
@@ -48,6 +52,7 @@ ynh_remove_nginx_config
#=================================================
# REMOVE PHP-FPM CONFIGURATION
#=================================================
+ynh_print_info "Removing php-fpm configuration"
# Remove the dedicated php-fpm config
ynh_remove_fpm_config
@@ -57,6 +62,13 @@ ynh_remove_fpm_config
#=================================================
# REMOVE DEDICATED USER
#=================================================
+ynh_print_info "Removing the dedicated system user"
# Delete a system user
ynh_system_user_delete $app
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_print_info "Removal of $app completed"
diff --git a/scripts/restore b/scripts/restore
index e1702ce..fe9eb1f 100644
--- a/scripts/restore
+++ b/scripts/restore
@@ -6,24 +6,25 @@
# IMPORT GENERIC HELPERS
#=================================================
-if [ ! -e _common.sh ]; then
- # 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
+#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
+source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
+ynh_clean_setup () {
+ #### Remove this function if there's nothing to clean before calling the remove script.
+ true
+}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
+ynh_print_info "Loading settings..."
app=$YNH_APP_INSTANCE_NAME
@@ -35,6 +36,7 @@ db_name=$(ynh_app_setting_get $app db_name)
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
+ynh_print_info "Validating restoration parameters..."
ynh_webpath_available $domain $path_url \
|| ynh_die "Path not available: ${domain}${path_url}"
@@ -52,36 +54,46 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
+ynh_print_info "Restoring the app main directory..."
ynh_restore_file "$final_path"
+#=================================================
+# RECREATE THE DEDICATED USER
+#=================================================
+ynh_print_info "Recreating the dedicated system user..."
+
+# Create the dedicated user (if not existing)
+ynh_system_user_create $app
+
#=================================================
# 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
-#=================================================
-# RECREATE THE DEDICATED USER
-#=================================================
-
-# Create the dedicated user (if not existing)
-ynh_system_user_create $app
-
#=================================================
# 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 FINALIZATION
#=================================================
# 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
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_print_info "Restoration completed for $app"
+
diff --git a/scripts/upgrade b/scripts/upgrade
index cf6445e..c4c74fb 100644
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -12,6 +12,7 @@ source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
+ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
@@ -25,6 +26,7 @@ db_name=$(ynh_app_setting_get $app db_name)
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
+ynh_print_info "Ensuring downward compatibility..."
# Fix is_public as a boolean value
if [ "$is_public" = "Yes" ]; then
@@ -50,6 +52,7 @@ fi
#=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#=================================================
+ynh_print_info "Backing up the app before upgrading (may take a while)..."
# Backup the current version of the app
ynh_backup_before_upgrade
@@ -60,13 +63,6 @@ ynh_clean_setup () {
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
-#=================================================
-# CHECK THE PATH
-#=================================================
-
-# Normalize the URL path syntax
-path_url=$(ynh_normalize_url_path $path_url)
-
#=================================================
# STANDARD UPGRADE STEPS
#=================================================
@@ -75,7 +71,7 @@ path_url=$(ynh_normalize_url_path $path_url)
# Download, check integrity, uncompress and patch the source from app.src
# Create a temporary directory
-tmpdir="$(mktemp -d)"
+tmpdir="$(ynh_smart_mktemp 300)"
# Backup the config file in the temp dir
cp -a "$final_path/config.php" "$tmpdir/config.php"
@@ -89,7 +85,12 @@ if [ -z $final_path ]; then
ynh_app_setting_set $app final_path $final_path
fi
-#ynh_setup_source "$final_path"
+#=================================================
+# DOWNLOAD, CHECK AND UNPACK SOURCE
+#=================================================
+ynh_print_info "Upgrading source files..."
+
+# Download, check integrity, uncompress and patch the source from app.src
ynh_setup_source "$final_path"
@@ -103,34 +104,33 @@ sudo rm -Rf "$tmpdir"
#=================================================
# NGINX CONFIGURATION
#=================================================
+ynh_print_info "Upgrading nginx web server configuration..."
# Create a dedicated nginx config
ynh_add_nginx_config
-
#=================================================
# CREATE DEDICATED USER
#=================================================
+ynh_print_info "Making sure dedicated system user exists..."
-# Create a system user
+# Create a dedicated user (if not existing)
ynh_system_user_create $app
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
+ynh_print_info "Upgrading php-fpm configuration..."
# Create a dedicated php-fpm config
ynh_add_fpm_config
-
-
#=================================================
# SPECIFIC UPGRADE
#=================================================
-# ...
-#=================================================
-# Verify the checksum and backup the file if it's different
+### Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script.
+### And create a backup of this file if the checksum is different. So the file will be backed up if the admin had modified it.
ynh_backup_if_checksum_is_different "$final_path/conf.php"
# Recalculate and store the config file checksum into the app settings
ynh_store_file_checksum "$final_path/config.php"
@@ -148,11 +148,8 @@ chown -R $app: $final_path
#=================================================
# SETUP SSOWAT
#=================================================
+ynh_print_info "Upgrading SSOwat configuration..."
-if [ $is_public -eq 0 ]
-then # Remove the public access
- ynh_app_setting_delete $app skipped_uris
-fi
# Make app public if necessary
if [ $is_public -eq 1 ]
then
@@ -163,5 +160,12 @@ fi
#=================================================
# RELOAD NGINX
#=================================================
+ynh_print_info "Reloading nginx web server..."
systemctl reload nginx
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_print_info "Upgrade of $app completed"