diff --git a/CHANGELOG.md b/CHANGELOG.md
index c54bbd6..8710c7e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,18 @@ Changelog
## Unreleased
- Nothing for now...
+## [1.1~ynh1](https://github.com/YunoHost-Apps/archivist_ynh/pull/29) - 2021-01-12
+
+#### Added
+- [Allow to choose compression algorithms](https://github.com/YunoHost-Apps/archivist_ynh/pull/29)
+
+#### Fixed
+- [Fix YunoHost 4.1 support](https://github.com/YunoHost-Apps/archivist_ynh/pull/29)
+
+#### Changed
+- [Force compression for YunoHost backups](https://github.com/YunoHost-Apps/archivist_ynh/pull/29)
+
+
## [1.0.1~ynh2](https://github.com/YunoHost-Apps/archivist_ynh/pull/25) - 2020-01-04
#### Fixed
diff --git a/README.md b/README.md
index 7c16d56..ffff078 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ It can also makes backups of specified directories.
Your backups can be send to many other places, local or distant.
Archivist is automatically launched periodicaly to update your backups and send the modifications to the other places.
-**Shipped version:** 1.0.1
+**Shipped version:** 1.1
## Screenshots
@@ -54,3 +54,17 @@ Have a look to the [security audit](https://defuse.ca/audits/encfs.htm) to have
* Report a bug: https://github.com/YunoHost-Apps/archivist_ynh/issues
* archivist website: https://github.com/maniackcrudelis/archivist
* YunoHost website: https://yunohost.org/
+
+---
+
+Developers infos
+----------------
+
+Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/archivist_ynh/tree/testing).
+
+To try the testing branch, please proceed like that.
+```
+sudo yunohost app install https://github.com/YunoHost-Apps/archivist_ynh/tree/testing --force --debug
+or
+sudo yunohost app upgrade archivist -u https://github.com/YunoHost-Apps/archivist_ynh/tree/testing --debug
+```
diff --git a/README_fr.md b/README_fr.md
index 2689159..876b5ae 100644
--- a/README_fr.md
+++ b/README_fr.md
@@ -15,7 +15,7 @@ Il peut également faire des sauvegardes de répertoires spécifiques.
Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants.
Archivist est automatiquement lancé périodiquement pour mettre à jour vos sauvegardes et envoyer les modifications aux autres emplacements.
-**Version embarquée:** 1.0.1
+**Version embarquée:** 1.1
## Captures d'écran
@@ -56,3 +56,17 @@ Consultez l'[audit de sécurité](https://defuse.ca/audits/encfs.htm) pour avoir
* Reporter un bug: https://github.com/YunoHost-Apps/archivist_ynh/issues
* Site de archivist: https://github.com/maniackcrudelis/archivist
* Site de YunoHost: https://yunohost.org/
+
+---
+
+Informations à l'intention des développeurs
+----------------
+
+Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/archivist_ynh/tree/testing).
+
+Pour tester la branche testing, merci de procéder ainsi.
+```
+sudo yunohost app install https://github.com/YunoHost-Apps/archivist_ynh/tree/testing --force --debug
+ou
+sudo yunohost app upgrade archivist -u https://github.com/YunoHost-Apps/archivist_ynh/tree/testing --debug
+```
diff --git a/actions.toml b/actions.toml
index a7229a2..651d257 100644
--- a/actions.toml
+++ b/actions.toml
@@ -24,3 +24,12 @@ command = "/bin/bash scripts/actions/reset_default_config \"Backup_list.conf\""
# accepted_return_codes = [0, 1, 2, 3] # optional
accepted_return_codes = [0]
description = "Reset the config file Backup_list.conf."
+
+[reset_default_app]
+name = "Reset the app with a default configuration."
+command = "/bin/bash scripts/actions/reset_default_app"
+# user = "root" # optional
+# cwd = "/" # optional
+# accepted_return_codes = [0, 1, 2, 3] # optional
+accepted_return_codes = [0]
+description = "Reset the app to its default configuration to try to fix potential issues.
This action won't remove any data added to the app.
However, if you have modified any configuration, it will be overwritten."
diff --git a/check_process b/check_process
index 17b7a4b..ffd62a4 100644
--- a/check_process
+++ b/check_process
@@ -1,10 +1,10 @@
;; Test complet
- ; Manifest
- encrypt=1
- encryption_pwd="password"
- core_backup=1
- apps_backup=1
- frequency="Weekly"
+ ; Manifest
+ encrypt=1
+ encryption_pwd="password"
+ core_backup=1
+ apps_backup=1
+ frequency="Weekly"
; Config_panel
main.encryption.encrypt=1|0
main.encryption.encryption_pwd=password1|password2
@@ -14,36 +14,36 @@
main.backup_options.max_size=1000
main.overwrite_files.overwrite_cron=1|0
main.global_config.email_type=1|0
- ; Checks
- pkg_linter=1
- setup_sub_dir=0
- setup_root=0
- setup_nourl=1
- setup_private=0
- setup_public=0
- upgrade=1
- upgrade=1 from_commit=2b2793737d5e1374659cbb74838d10162a2147e6
- backup_restore=1
- multi_instance=1
- port_already_use=0
- change_url=0
+ ; Checks
+ pkg_linter=1
+ setup_sub_dir=0
+ setup_root=0
+ setup_nourl=1
+ setup_private=0
+ setup_public=0
+ upgrade=1
+ upgrade=1 from_commit=2b2793737d5e1374659cbb74838d10162a2147e6
+ backup_restore=1
+ multi_instance=1
+ port_already_use=0
+ change_url=0
config_panel=1
;; Test actions without encryption
# Actions can't be tested with the encryption on, because LXC does not support fuse.
- ; Manifest
- encrypt=0
- encryption_pwd=""
- core_backup=1
- apps_backup=1
- ; Checks
- setup_nourl=1
+ ; Manifest
+ encrypt=0
+ encryption_pwd=""
+ core_backup=1
+ apps_backup=1
+ ; Checks
+ setup_nourl=1
actions=1
;;; Levels
- Level 5=auto
+ Level 5=auto
;;; Options
Email=
Notification=change
;;; Upgrade options
- ; commit=2b2793737d5e1374659cbb74838d10162a2147e6
- name=03 Nov 2017 2b2793737d5e1374659cbb74838d10162a2147e6
- manifest_arg=encrypt=1&encryption_pwd="password"&core_backup=1&apps_backup=1&frequency="Weekly"&
+ ; commit=2b2793737d5e1374659cbb74838d10162a2147e6
+ name=03 Nov 2017 2b2793737d5e1374659cbb74838d10162a2147e6
+ manifest_arg=encrypt=1&encryption_pwd="password"&core_backup=1&apps_backup=1&frequency="Weekly"&
diff --git a/conf/app.src b/conf/app.src
index 280bf59..c744e11 100644
--- a/conf/app.src
+++ b/conf/app.src
@@ -1,5 +1,5 @@
-SOURCE_URL=https://github.com/maniackcrudelis/archivist/archive/v1.0.1.tar.gz
-SOURCE_SUM=56ec81447b7eb6d34c4af213b48530dc
+SOURCE_URL=https://github.com/maniackcrudelis/archivist/archive/v1.1.tar.gz
+SOURCE_SUM=f612de7b58366df437cbe228c4b934d1
SOURCE_SUM_PRG=md5sum
SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true
diff --git a/config_panel.toml b/config_panel.toml
index 132417d..23d641f 100644
--- a/config_panel.toml
+++ b/config_panel.toml
@@ -18,6 +18,19 @@ name = "Archivist configuration"
optional = true
help = "A password is needed if encryption is activated."
+ [main.compression]
+ name = "Compression algorithm"
+
+ [main.compression.ynh]
+ ask = "Choose the compression algorithm for YunoHost backups"
+ choices = ["gzip", "lzop", "zstd", "bzip2", "lzma", "lzip", "xz", "No compression"]
+ default = "gzip"
+
+ [main.compression.files]
+ ask = "Choose the compression algorithm for files and directories backups"
+ choices = ["gzip", "lzop", "zstd", "bzip2", "lzma", "lzip", "xz", "No compression"]
+ default = "gzip"
+
[main.backup_types]
name = "Backup"
diff --git a/manifest.json b/manifest.json
index 7259793..ec107a1 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,79 +1,79 @@
{
- "name": "Archivist",
- "id": "archivist",
- "packaging_format": 1,
- "description": {
- "en": "Automatic backups.",
- "fr": "Sauvegardes automatiques."
- },
- "version": "1.0.1~ynh3",
- "url": "https://github.com/maniackcrudelis/archivist",
- "license": "GPL-3.0",
- "maintainer": {
- "name": "None...",
- "email": ""
- },
- "previous_maintainers": [{
- "name": "Maniack Crudelis",
- "email": "maniackc_dev@crudelis.fr"
- }],
- "requirements": {
- "yunohost": ">= 3.6.0"
- },
- "multi_instance": true,
- "services": [],
- "arguments": {
- "install" : [
- {
- "name": "encrypt",
- "type": "boolean",
- "ask": {
- "en": "Do you want to encrypt your backups ?",
- "fr": "Voulez-vous chiffrer vos sauvegardes ?"
- },
- "default": true
- },
- {
- "name": "encryption_pwd",
- "type": "password",
- "ask": {
- "en": "Set the password for encryption.",
- "fr": "Définissez le mot de passe de chiffrement."
- },
- "help": {
- "en": "It's needed if you use backup encryption.",
- "fr": "C'est nécessaire si vous utilisez le chiffrement."
- },
- "optional": true
- },
- {
- "name": "core_backup",
- "type": "boolean",
- "ask": {
- "en": "Would you like to backup your YunoHost core ?",
- "fr": "Souhaitez-vous effectuer des sauvegardes du système YunoHost ?"
- },
- "default": true
- },
- {
- "name": "apps_backup",
- "type": "boolean",
- "ask": {
- "en": "Would you like to backup your apps ?",
- "fr": "Souhaitez-vous effectuer des sauvegardes de vos applications ?"
- },
- "default": true
- },
- {
- "name": "frequency",
- "type": "string",
- "ask": {
- "en": "Choose the frequency of your backups ?",
- "fr": "Choississez la fréquence de votre backup ?"
- },
- "choices" : ["Daily", "Each 3 days", "Weekly", "Biweekly", "Monthly"],
- "default" : "Weekly"
- }
- ]
- }
+ "name": "Archivist",
+ "id": "archivist",
+ "packaging_format": 1,
+ "description": {
+ "en": "Automatic backups.",
+ "fr": "Sauvegardes automatiques."
+ },
+ "version": "1.1~ynh1",
+ "url": "https://github.com/maniackcrudelis/archivist",
+ "license": "GPL-3.0",
+ "maintainer": {
+ "name": "None...",
+ "email": ""
+ },
+ "previous_maintainers": [{
+ "name": "Maniack Crudelis",
+ "email": "maniackc_dev@crudelis.fr"
+ }],
+ "requirements": {
+ "yunohost": ">= 4.1"
+ },
+ "multi_instance": true,
+ "services": [],
+ "arguments": {
+ "install" : [
+ {
+ "name": "encrypt",
+ "type": "boolean",
+ "ask": {
+ "en": "Do you want to encrypt your backups ?",
+ "fr": "Voulez-vous chiffrer vos sauvegardes ?"
+ },
+ "default": true
+ },
+ {
+ "name": "encryption_pwd",
+ "type": "password",
+ "ask": {
+ "en": "Set the password for encryption.",
+ "fr": "Définissez le mot de passe de chiffrement."
+ },
+ "help": {
+ "en": "It's needed if you use backup encryption.",
+ "fr": "C'est nécessaire si vous utilisez le chiffrement."
+ },
+ "optional": true
+ },
+ {
+ "name": "core_backup",
+ "type": "boolean",
+ "ask": {
+ "en": "Would you like to backup your YunoHost core ?",
+ "fr": "Souhaitez-vous effectuer des sauvegardes du système YunoHost ?"
+ },
+ "default": true
+ },
+ {
+ "name": "apps_backup",
+ "type": "boolean",
+ "ask": {
+ "en": "Would you like to backup your apps ?",
+ "fr": "Souhaitez-vous effectuer des sauvegardes de vos applications ?"
+ },
+ "default": true
+ },
+ {
+ "name": "frequency",
+ "type": "string",
+ "ask": {
+ "en": "Choose the frequency of your backups ?",
+ "fr": "Choississez la fréquence de votre backup ?"
+ },
+ "choices" : ["Daily", "Each 3 days", "Weekly", "Biweekly", "Monthly"],
+ "default" : "Weekly"
+ }
+ ]
+ }
}
diff --git a/scripts/_common.sh b/scripts/_common.sh
old mode 100644
new mode 100755
index 16239d7..11c053c
--- a/scripts/_common.sh
+++ b/scripts/_common.sh
@@ -1,44 +1,5 @@
#!/bin/bash
-#=================================================
-# PERSONAL HELPERS
-#=================================================
-
-#=================================================
-# BACKUP
-#=================================================
-
-HUMAN_SIZE () { # Transforme une taille en Ko en une taille lisible pour un humain
- human=$(numfmt --to=iec --from-unit=1K $1)
- echo $human
-}
-
-CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant
- file_to_analyse=$1
- backup_size=$(du --summarize "$file_to_analyse" | cut -f1)
- free_space=$(df --output=avail "/home/yunohost.backup" | sed 1d)
-
- if [ $free_space -le $backup_size ]
- then
- ynh_print_err "Espace insuffisant pour sauvegarder $file_to_analyse."
- ynh_print_err "Espace disponible: $(HUMAN_SIZE $free_space)"
- ynh_die "Espace nécessaire: $(HUMAN_SIZE $backup_size)"
- fi
-}
-
-#=================================================
-# PACKAGE CHECK BYPASSING...
-#=================================================
-
-IS_PACKAGE_CHECK () {
- if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]
- then
- return 0
- else
- return 1
- fi
-}
-
#=================================================
# FUTUR OFFICIAL HELPERS
#=================================================
@@ -120,6 +81,264 @@ ynh_multimedia_addaccess () {
usermod -a -G multimedia $user_name
}
+#=================================================
+
+# Get the total or free amount of RAM+swap on the system
+#
+# usage: ynh_get_ram [--free|--total] [--ignore_swap|--only_swap]
+# | arg: -f, --free - Count free RAM+swap
+# | arg: -t, --total - Count total RAM+swap
+# | arg: -s, --ignore_swap - Ignore swap, consider only real RAM
+# | arg: -o, --only_swap - Ignore real RAM, consider only swap
+ynh_get_ram () {
+ # Declare an array to define the options of this helper.
+ local legacy_args=ftso
+ declare -Ar args_array=( [f]=free [t]=total [s]=ignore_swap [o]=only_swap )
+ local free
+ local total
+ local ignore_swap
+ local only_swap
+ # Manage arguments with getopts
+ ynh_handle_getopts_args "$@"
+ ignore_swap=${ignore_swap:-0}
+ only_swap=${only_swap:-0}
+ free=${free:-0}
+ total=${total:-0}
+
+ local total_ram=$(vmstat --stats --unit M | grep "total memory" | awk '{print $1}')
+ local total_swap=$(vmstat --stats --unit M | grep "total swap" | awk '{print $1}')
+ local total_ram_swap=$(( total_ram + total_swap ))
+
+ local free_ram=$(vmstat --stats --unit M | grep "free memory" | awk '{print $1}')
+ local free_swap=$(vmstat --stats --unit M | grep "free swap" | awk '{print $1}')
+ local free_ram_swap=$(( free_ram + free_swap ))
+
+ # Use the total amount of ram
+ if [ $free -eq 1 ]
+ then
+ # Use the total amount of free ram
+ local ram=$free_ram_swap
+ if [ $ignore_swap -eq 1 ]
+ then
+ # Use only the amount of free ram
+ ram=$free_ram
+ elif [ $only_swap -eq 1 ]
+ then
+ # Use only the amount of free swap
+ ram=$free_swap
+ fi
+ elif [ $total -eq 1 ]
+ then
+ local ram=$total_ram_swap
+ if [ $ignore_swap -eq 1 ]
+ then
+ # Use only the amount of free ram
+ ram=$total_ram
+ elif [ $only_swap -eq 1 ]
+ then
+ # Use only the amount of free swap
+ ram=$total_swap
+ fi
+ else
+ ynh_print_warn --message="You have to choose --free or --total when using ynh_get_ram"
+ ram=0
+ fi
+
+ echo $ram
+}
+
+# Return 0 or 1 depending if the system has a given amount of RAM+swap free or total
+#
+# usage: ynh_require_ram --required=RAM required in Mb [--free|--total] [--ignore_swap|--only_swap]
+# | arg: -r, --required - The amount to require, in Mb
+# | arg: -f, --free - Count free RAM+swap
+# | arg: -t, --total - Count total RAM+swap
+# | arg: -s, --ignore_swap - Ignore swap, consider only real RAM
+# | arg: -o, --only_swap - Ignore real RAM, consider only swap
+ynh_require_ram () {
+ # Declare an array to define the options of this helper.
+ local legacy_args=rftso
+ declare -Ar args_array=( [r]=required= [f]=free [t]=total [s]=ignore_swap [o]=only_swap )
+ local required
+ local free
+ local total
+ local ignore_swap
+ local only_swap
+ # Manage arguments with getopts
+ ynh_handle_getopts_args "$@"
+ # Dunno if that's the right way to do, but that's some black magic to be able to
+ # forward the bool args to ynh_get_ram easily?
+ # If the variable $free is not empty, set it to '--free'
+ free=${free:+--free}
+ total=${total:+--total}
+ ignore_swap=${ignore_swap:+--ignore_swap}
+ only_swap=${only_swap:+--only_swap}
+
+ local ram=$(ynh_get_ram $free $total $ignore_swap $only_swap)
+
+ if [ $ram -lt $required ]
+ then
+ return 1
+ else
+ return 0
+ fi
+}
+
+#=================================================
+
+# Define the values to configure php-fpm
+#
+# usage: ynh_get_scalable_phpfpm --usage=usage --footprint=footprint [--print]
+# | arg: -f, --footprint - Memory footprint of the service (low/medium/high).
+# low - Less than 20Mb of ram by pool.
+# medium - Between 20Mb and 40Mb of ram by pool.
+# high - More than 40Mb of ram by pool.
+# Or specify exactly the footprint, the load of the service as Mb by pool instead of having a standard value.
+# To have this value, use the following command and stress the service.
+# watch -n0.5 ps -o user,cmd,%cpu,rss -u APP
+#
+# | arg: -u, --usage - Expected usage of the service (low/medium/high).
+# low - Personal usage, behind the sso.
+# medium - Low usage, few people or/and publicly accessible.
+# high - High usage, frequently visited website.
+#
+# | arg: -p, --print - Print the result
+#
+#
+#
+# The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM.
+# So it will be used to defined 'pm.max_children'
+# A lower value for the footprint will allow more children for 'pm.max_children'. And so for
+# 'pm.start_servers', 'pm.min_spare_servers' and 'pm.max_spare_servers' which are defined from the
+# value of 'pm.max_children'
+# NOTE: 'pm.max_children' can't exceed 4 times the number of processor's cores.
+#
+# The usage value will defined the way php will handle the children for the pool.
+# A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the
+# service is used, otherwise no child will stay alive. This config gives the lower footprint when the
+# service is idle. But will use more proc since it has to start a child as soon it's used.
+# Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children
+# equal to pm.min_spare_servers will stay alive. So the service can be quick to answer to any request.
+# The number of children can grow if needed. The footprint can stay low if the service is idle, but
+# not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few
+# children already available.
+# Set as 'high', the process manager will be set at 'static'. There will be always as many children as
+# 'pm.max_children', the footprint is important (but will be set as maximum a quarter of the maximum
+# RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many
+# children ready to answer.
+ynh_get_scalable_phpfpm () {
+ local legacy_args=ufp
+ # Declare an array to define the options of this helper.
+ declare -Ar args_array=( [u]=usage= [f]=footprint= [p]=print )
+ local usage
+ local footprint
+ local print
+ # Manage arguments with getopts
+ ynh_handle_getopts_args "$@"
+ # Set all characters as lowercase
+ footprint=${footprint,,}
+ usage=${usage,,}
+ print=${print:-0}
+
+ if [ "$footprint" = "low" ]
+ then
+ footprint=20
+ elif [ "$footprint" = "medium" ]
+ then
+ footprint=35
+ elif [ "$footprint" = "high" ]
+ then
+ footprint=50
+ fi
+
+ # Define the way the process manager handle child processes.
+ if [ "$usage" = "low" ]
+ then
+ php_pm=ondemand
+ elif [ "$usage" = "medium" ]
+ then
+ php_pm=dynamic
+ elif [ "$usage" = "high" ]
+ then
+ php_pm=static
+ else
+ ynh_die --message="Does not recognize '$usage' as an usage value."
+ fi
+
+ # Get the total of RAM available, except swap.
+ local max_ram=$(ynh_get_ram --total --ignore_swap)
+
+ at_least_one() {
+ # Do not allow value below 1
+ if [ $1 -le 0 ]
+ then
+ echo 1
+ else
+ echo $1
+ fi
+ }
+
+ # Define pm.max_children
+ # The value of pm.max_children is the total amount of ram divide by 2 and divide again by the footprint of a pool for this app.
+ # So if php-fpm start the maximum of children, it won't exceed half of the ram.
+ php_max_children=$(( $max_ram / 2 / $footprint ))
+ # If process manager is set as static, use half less children.
+ # Used as static, there's always as many children as the value of pm.max_children
+ if [ "$php_pm" = "static" ]
+ then
+ php_max_children=$(( $php_max_children / 2 ))
+ fi
+ php_max_children=$(at_least_one $php_max_children)
+
+ # To not overload the proc, limit the number of children to 4 times the number of cores.
+ local core_number=$(nproc)
+ local max_proc=$(( $core_number * 4 ))
+ if [ $php_max_children -gt $max_proc ]
+ then
+ php_max_children=$max_proc
+ fi
+
+ if [ "$php_pm" = "dynamic" ]
+ then
+ # Define pm.start_servers, pm.min_spare_servers and pm.max_spare_servers for a dynamic process manager
+ php_min_spare_servers=$(( $php_max_children / 8 ))
+ php_min_spare_servers=$(at_least_one $php_min_spare_servers)
+
+ php_max_spare_servers=$(( $php_max_children / 2 ))
+ php_max_spare_servers=$(at_least_one $php_max_spare_servers)
+
+ php_start_servers=$(( $php_min_spare_servers + ( $php_max_spare_servers - $php_min_spare_servers ) /2 ))
+ php_start_servers=$(at_least_one $php_start_servers)
+ else
+ php_min_spare_servers=0
+ php_max_spare_servers=0
+ php_start_servers=0
+ fi
+
+ if [ $print -eq 1 ]
+ then
+ ynh_debug --message="Footprint=${footprint}Mb by pool."
+ ynh_debug --message="Process manager=$php_pm"
+ ynh_debug --message="Max RAM=${max_ram}Mb"
+ if [ "$php_pm" != "static" ]; then
+ ynh_debug --message="\nMax estimated footprint=$(( $php_max_children * $footprint ))"
+ ynh_debug --message="Min estimated footprint=$(( $php_min_spare_servers * $footprint ))"
+ fi
+ if [ "$php_pm" = "dynamic" ]; then
+ ynh_debug --message="Estimated average footprint=$(( $php_max_spare_servers * $footprint ))"
+ elif [ "$php_pm" = "static" ]; then
+ ynh_debug --message="Estimated footprint=$(( $php_max_children * $footprint ))"
+ fi
+ ynh_debug --message="\nRaw php-fpm values:"
+ ynh_debug --message="pm.max_children = $php_max_children"
+ if [ "$php_pm" = "dynamic" ]; then
+ ynh_debug --message="pm.start_servers = $php_start_servers"
+ ynh_debug --message="pm.min_spare_servers = $php_min_spare_servers"
+ ynh_debug --message="pm.max_spare_servers = $php_max_spare_servers"
+ fi
+ fi
+}
+
#=================================================
# EXPERIMENTAL HELPERS
#=================================================
@@ -265,30 +484,6 @@ __PRE_TAG1__$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/service
#=================================================
-ynh_debian_release () {
- lsb_release --codename --short
-}
-
-is_stretch () {
- if [ "$(ynh_debian_release)" == "stretch" ]
- then
- return 0
- else
- return 1
- fi
-}
-
-is_jessie () {
- if [ "$(ynh_debian_release)" == "jessie" ]
- then
- return 0
- else
- return 1
- fi
-}
-
-#=================================================
-
ynh_maintenance_mode_ON () {
# Load value of $path_url and $domain from the config if their not set
if [ -z $path_url ]; then
@@ -370,290 +565,153 @@ ynh_maintenance_mode_OFF () {
#=================================================
-# Create a changelog for an app after an upgrade.
+# Create a changelog for an app after an upgrade from the file CHANGELOG.md.
#
-# The changelog is printed into the file ./changelog for the time of the upgrade.
+# usage: ynh_app_changelog [--format=markdown/html/plain] [--output=changelog_file] --changelog=changelog_source]
+# | arg: -f --format= - Format in which the changelog will be printed
+# markdown: Default format.
+# html: Turn urls into html format.
+# plain: Plain text changelog
+# | arg: -o --output= - Output file for the changelog file (Default ./changelog)
+# | arg: -c --changelog= - CHANGELOG.md source (Default ../CHANGELOG.md)
#
-# In order to create a changelog, ynh_app_changelog will get info from /etc/yunohost/apps/$app/status.json
-# In order to find the current commit use by the app.
-# The remote repository, and the branch.
-# The changelog will be only the commits since the current revision.
-#
-# Because of the need of those info, ynh_app_changelog works only
-# with apps that have been installed from a list.
-#
-# usage: ynh_app_changelog
+# The changelog is printed into the file ./changelog and ./changelog_lite
ynh_app_changelog () {
- get_value_from_settings ()
- {
- local value="$1"
- # Extract a value from the status.json file of an installed app.
-
- grep "$value\": \"" /etc/yunohost/apps/$app/status.json | sed "s/.*$value\": \"\([^\"]*\).*/\1/"
- }
-
- local current_revision="$(get_value_from_settings revision)"
- local repo="$(get_value_from_settings url)"
- local branch="$(get_value_from_settings branch)"
- # ynh_app_changelog works only with an app installed from a list.
- if [ -z "$current_revision" ] || [ -z "$repo" ] || [ -z "$branch" ]
- then
- ynh_print_warn "Unable to build the changelog..."
- touch changelog
- return 0
- fi
-
- # Fetch the history of the repository, without cloning it
- mkdir git_history
- (cd git_history
- ynh_exec_warn_less git init
- ynh_exec_warn_less git remote add -f origin $repo
- # Get the line of the current commit of the installed app in the history.
- local line_to_head=$(git log origin/$branch --pretty=oneline | grep --line-number "$current_revision" | cut -d':' -f1)
- # Cut the history before the current commit, to keep only newer commits.
- # Then use sed to reorganise each lines and have a nice list of commits since the last upgrade.
- # This list is redirected into the file changelog
- git log origin/$branch --pretty=oneline | head --lines=$(($line_to_head-1)) | sed 's/^\([[:alnum:]]*\)\(.*\)/*(\1) -> \2/g' > ../changelog)
- # Remove 'Merge pull request' commits
- sed -i '/Merge pull request #[[:digit:]]* from/d' changelog
- # As well as conflict resolving commits
- sed -i '/Merge branch .* into/d' changelog
-
- # Get the value of admin_mail_html
- admin_mail_html=$(ynh_app_setting_get $app admin_mail_html)
- admin_mail_html="${admin_mail_html:-0}"
-
- # If a html email is required. Apply html to the changelog.
- if [ "$admin_mail_html" -eq 1 ]
- then
- sed -in-place "s@\*(\([[:alnum:]]*\)) -> \(.*\)@* __URL_TAG1__\2__URL_TAG2__${repo}/commit/\1__URL_TAG3__@g" changelog
- fi
-}
-
-#=================================================
-
-# Check the amount of available RAM
-#
-# usage: ynh_check_ram [--required=RAM required in Mb] [--no_swap|--only_swap] [--free_ram]
-# | arg: -r, --required= - Amount of RAM required in Mb. The helper will return 0 is there's enough RAM, or 1 otherwise.
-# If --required isn't set, the helper will print the amount of RAM, in Mb.
-# | arg: -s, --no_swap - Ignore swap
-# | arg: -o, --only_swap - Ignore real RAM, consider only swap.
-# | arg: -f, --free_ram - Count only free RAM, not the total amount of RAM available.
-ynh_check_ram () {
- # Declare an array to define the options of this helper.
- declare -Ar args_array=( [r]=required= [s]=no_swap [o]=only_swap [f]=free_ram )
- local required
- local no_swap
- local only_swap
- # Manage arguments with getopts
- ynh_handle_getopts_args "$@"
- required=${required:-}
- no_swap=${no_swap:-0}
- only_swap=${only_swap:-0}
-
- local total_ram=$(vmstat --stats --unit M | grep "total memory" | awk '{print $1}')
- local total_swap=$(vmstat --stats --unit M | grep "total swap" | awk '{print $1}')
- local total_ram_swap=$(( total_ram + total_swap ))
-
- local free_ram=$(vmstat --stats --unit M | grep "free memory" | awk '{print $1}')
- local free_swap=$(vmstat --stats --unit M | grep "free swap" | awk '{print $1}')
- local free_ram_swap=$(( free_ram + free_swap ))
-
- # Use the total amount of ram
- local ram=$total_ram_swap
- if [ $free_ram -eq 1 ]
- then
- # Use the total amount of free ram
- ram=$free_ram_swap
- if [ $no_swap -eq 1 ]
- then
- # Use only the amount of free ram
- ram=$free_ram
- elif [ $only_swap -eq 1 ]
- then
- # Use only the amount of free swap
- ram=$free_swap
- fi
- else
- if [ $no_swap -eq 1 ]
- then
- # Use only the amount of free ram
- ram=$total_ram
- elif [ $only_swap -eq 1 ]
- then
- # Use only the amount of free swap
- ram=$total_swap
- fi
- fi
-
- if [ -n "$required" ]
- then
- # Return 1 if the amount of ram isn't enough.
- if [ $ram -lt $required ]
- then
- return 1
- else
- return 0
- fi
-
- # If no RAM is required, return the amount of available ram.
- else
- echo $ram
- fi
-}
-
-#=================================================
-
-# Define the values to configure php-fpm
-#
-# usage: ynh_get_scalable_phpfpm --usage=usage --footprint=footprint [--print]
-# | arg: -f, --footprint - Memory footprint of the service (low/medium/high).
-# low - Less than 20Mb of ram by pool.
-# medium - Between 20Mb and 40Mb of ram by pool.
-# high - More than 40Mb of ram by pool.
-# Or specify exactly the footprint, the load of the service as Mb by pool instead of having a standard value.
-# To have this value, use the following command and stress the service.
-# watch -n0.5 ps -o user,cmd,%cpu,rss -u APP
-#
-# | arg: -u, --usage - Expected usage of the service (low/medium/high).
-# low - Personal usage, behind the sso.
-# medium - Low usage, few people or/and publicly accessible.
-# high - High usage, frequently visited website.
-#
-# | arg: -p, --print - Print the result
-#
-#
-#
-# The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM.
-# So it will be used to defined 'pm.max_children'
-# A lower value for the footprint will allow more children for 'pm.max_children'. And so for
-# 'pm.start_servers', 'pm.min_spare_servers' and 'pm.max_spare_servers' which are defined from the
-# value of 'pm.max_children'
-# NOTE: 'pm.max_children' can't exceed 4 times the number of processor's cores.
-#
-# The usage value will defined the way php will handle the children for the pool.
-# A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the
-# service is used, otherwise no child will stay alive. This config gives the lower footprint when the
-# service is idle. But will use more proc since it has to start a child as soon it's used.
-# Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children
-# equal to pm.min_spare_servers will stay alive. So the service can be quick to answer to any request.
-# The number of children can grow if needed. The footprint can stay low if the service is idle, but
-# not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few
-# children already available.
-# Set as 'high', the process manager will be set at 'static'. There will be always as many children as
-# 'pm.max_children', the footprint is important (but will be set as maximum a quarter of the maximum
-# RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many
-# children ready to answer.
-ynh_get_scalable_phpfpm () {
- local legacy_args=ufp
# Declare an array to define the options of this helper.
- declare -Ar args_array=( [u]=usage= [f]=footprint= [p]=print )
- local usage
- local footprint
- local print
+ local legacy_args=foc
+ declare -Ar args_array=( [f]=format= [o]=output= [c]=changelog= )
+ local format
+ local output
+ local changelog
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
- # Set all characters as lowercase
- footprint=${footprint,,}
- usage=${usage,,}
- print=${print:-0}
+ format=${format:-markdown}
+ output=${output:-changelog}
+ changelog=${changelog:-../CHANGELOG.md}
- if [ "$footprint" = "low" ]
+ local original_changelog="$changelog"
+ local temp_changelog="changelog_temp"
+ local final_changelog="$output"
+
+ if [ ! -n "$original_changelog" ]
then
- footprint=20
- elif [ "$footprint" = "medium" ]
- then
- footprint=35
- elif [ "$footprint" = "high" ]
- then
- footprint=50
+ echo "No changelog available..." > "$final_changelog"
+ echo "No changelog available..." > "${final_changelog}_lite"
+ return 0
fi
- # Define the way the process manager handle child processes.
- if [ "$usage" = "low" ]
+ local current_version=$(ynh_read_manifest --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" --manifest_key="version")
+ local update_version=$(ynh_read_manifest --manifest="../manifest.json" --manifest_key="version")
+
+ # Get the line of the version to update to into the changelog
+ local update_version_line=$(grep --max-count=1 --line-number "^## \[$update_version" "$original_changelog" | cut -d':' -f1)
+ # If there's no entry for this version yet into the changelog
+ # Get the first available version
+ if [ -z "$update_version_line" ]
then
- php_pm=ondemand
- elif [ "$usage" = "medium" ]
- then
- php_pm=dynamic
- elif [ "$usage" = "high" ]
- then
- php_pm=static
- else
- ynh_die --message="Does not recognize '$usage' as an usage value."
+ update_version_line=$(grep --max-count=1 --line-number "^##" "$original_changelog" | cut -d':' -f1)
fi
- # Get the total of RAM available, except swap.
- local max_ram=$(ynh_check_ram --no_swap)
+ # Get the length of the complete changelog.
+ local changelog_length=$(wc --lines "$original_changelog" | awk '{print $1}')
+ # Cut the file before the version to update to.
+ tail --lines=$(( $changelog_length - $update_version_line + 1 )) "$original_changelog" > "$temp_changelog"
- less0() {
- # Do not allow value below 1
- if [ $1 -le 0 ]
+ # Get the length of the troncated changelog.
+ changelog_length=$(wc --lines "$temp_changelog" | awk '{print $1}')
+ # Get the line of the current version into the changelog
+ # Keep only the last line found
+ local current_version_line=$(grep --line-number "^## \[$current_version" "$temp_changelog" | cut -d':' -f1 | tail --lines=1)
+ # If there's no entry for this version into the changelog
+ # Get the last available version
+ if [ -z "$current_version_line" ]
+ then
+ current_version_line=$(grep --line-number "^##" "$original_changelog" | cut -d':' -f1 | tail --lines=1)
+ fi
+ # Cut the file before the current version.
+ # Then grep the previous version into the changelog to get the line number of the previous version
+ local previous_version_line=$(tail --lines=$(( $changelog_length - $current_version_line )) \
+ "$temp_changelog" | grep --max-count=1 --line-number "^## " | cut -d':' -f1)
+ # If there's no previous version into the changelog
+ # Go until the end of the changelog
+ if [ -z "$previous_version_line" ]
+ then
+ previous_version_line=$changelog_length
+ fi
+
+ # Cut the file after the previous version to keep only the changelog between the current version and the version to update to.
+ head --lines=$(( $current_version_line + $previous_version_line - 1 )) "$temp_changelog" | tee "$final_changelog"
+
+ if [ "$format" = "html" ]
+ then
+ # Replace markdown links by html links
+ ynh_replace_string --match_string="\[\(.*\)\](\(.*\)))" --replace_string="\1)" --target_file="$final_changelog"
+ ynh_replace_string --match_string="\[\(.*\)\](\(.*\))" --replace_string="\1" --target_file="$final_changelog"
+ elif [ "$format" = "plain" ]
+ then
+ # Change title format.
+ ynh_replace_string --match_string="^##.*\[\(.*\)\](\(.*\)) - \(.*\)$" --replace_string="## \1 (\3) - \2" --target_file="$final_changelog"
+ # Change modifications lines format.
+ ynh_replace_string --match_string="^\([-*]\).*\[\(.*\)\]\(.*\)" --replace_string="\1 \2 \3" --target_file="$final_changelog"
+ fi
+ # else markdown. As the file is already in markdown, nothing to do.
+
+ # Keep only important changes into the changelog
+ # Remove all minor changes
+ sed '/^-/d' "$final_changelog" > "${final_changelog}_lite"
+ # Remove all blank lines (to keep a clear workspace)
+ sed --in-place '/^$/d' "${final_changelog}_lite"
+ # Add a blank line at the end
+ echo "" >> "${final_changelog}_lite"
+
+ # Clean titles if there's no significative changes
+ local line
+ local previous_line=""
+ while read line <&3
+ do
+ if [ -n "$previous_line" ]
then
- echo 1
- else
- echo $1
+ # Remove the line if it's a title or a blank line, and the previous one was a title as well.
+ if ( [ "${line:0:1}" = "#" ] || [ ${#line} -eq 0 ] ) && [ "${previous_line:0:1}" = "#" ]
+ then
+ ynh_replace_special_string --match_string="${previous_line//[/.}" --replace_string="" --target_file="${final_changelog}_lite"
+ fi
fi
- }
+ previous_line="$line"
+ done 3< "${final_changelog}_lite"
- # Define pm.max_children
- # The value of pm.max_children is the total amount of ram divide by 2 and divide again by the footprint of a pool for this app.
- # So if php-fpm start the maximum of children, it won't exceed half of the ram.
- php_max_children=$(( $max_ram / 2 / $footprint ))
- # If process manager is set as static, use half less children.
- # Used as static, there's always as many children as the value of pm.max_children
- if [ "$php_pm" = "static" ]
+ # Remove all blank lines again
+ sed --in-place '/^$/d' "${final_changelog}_lite"
+
+ # Restore changelog format with blank lines
+ ynh_replace_string --match_string="^##.*" --replace_string="\n\n&\n" --target_file="${final_changelog}_lite"
+ # Remove the 2 first blank lines
+ sed --in-place '1,2d' "${final_changelog}_lite"
+ # Add a blank line at the end
+ echo "" >> "${final_changelog}_lite"
+
+ # If changelog are empty, add an info
+ if [ $(wc --words "$final_changelog" | awk '{print $1}') -eq 0 ]
then
- php_max_children=$(( $php_max_children / 2 ))
+ echo "No changes from the changelog..." > "$final_changelog"
fi
- php_max_children=$(less0 $php_max_children)
-
- # To not overload the proc, limit the number of children to 4 times the number of cores.
- local core_number=$(nproc)
- local max_proc=$(( $core_number * 4 ))
- if [ $php_max_children -gt $max_proc ]
+ if [ $(wc --words "${final_changelog}_lite" | awk '{print $1}') -eq 0 ]
then
- php_max_children=$max_proc
- fi
-
- if [ "$php_pm" = "dynamic" ]
- then
- # Define pm.start_servers, pm.min_spare_servers and pm.max_spare_servers for a dynamic process manager
- php_min_spare_servers=$(( $php_max_children / 8 ))
- php_min_spare_servers=$(less0 $php_min_spare_servers)
-
- php_max_spare_servers=$(( $php_max_children / 2 ))
- php_max_spare_servers=$(less0 $php_max_spare_servers)
-
- php_start_servers=$(( $php_min_spare_servers + ( $php_max_spare_servers - $php_min_spare_servers ) /2 ))
- php_start_servers=$(less0 $php_start_servers)
- else
- php_min_spare_servers=0
- php_max_spare_servers=0
- php_start_servers=0
- fi
-
- if [ $print -eq 1 ]
- then
- ynh_debug --message="Footprint=${footprint}Mb by pool."
- ynh_debug --message="Process manager=$php_pm"
- ynh_debug --message="Max RAM=${max_ram}Mb"
- if [ "$php_pm" != "static" ]; then
- ynh_debug --message="\nMax estimated footprint=$(( $php_max_children * $footprint ))"
- ynh_debug --message="Min estimated footprint=$(( $php_min_spare_servers * $footprint ))"
- fi
- if [ "$php_pm" = "dynamic" ]; then
- ynh_debug --message="Estimated average footprint=$(( $php_max_spare_servers * $footprint ))"
- elif [ "$php_pm" = "static" ]; then
- ynh_debug --message="Estimated footprint=$(( $php_max_children * $footprint ))"
- fi
- ynh_debug --message="\nRaw php-fpm values:"
- ynh_debug --message="pm.max_children = $php_max_children"
- if [ "$php_pm" = "dynamic" ]; then
- ynh_debug --message="pm.start_servers = $php_start_servers"
- ynh_debug --message="pm.min_spare_servers = $php_min_spare_servers"
- ynh_debug --message="pm.max_spare_servers = $php_max_spare_servers"
- fi
+ echo "No significative changes from the changelog..." > "${final_changelog}_lite"
fi
}
+
+#=================================================
+
+# Execute a command as another user
+# usage: exec_as USER COMMAND [ARG ...]
+ynh_exec_as() {
+ local USER=$1
+ shift 1
+
+ if [[ $USER = $(whoami) ]]; then
+ eval "$@"
+ else
+ sudo -u "$USER" "$@"
+ fi
+}
diff --git a/scripts/_variables b/scripts/_variables
index d675612..35efc56 100644
--- a/scripts/_variables
+++ b/scripts/_variables
@@ -1,4 +1,4 @@
#!/bin/bash
# Dependencies
-app_depencencies="rsync encfs sshpass ccrypt"
+app_depencencies="rsync encfs sshpass ccrypt lzop zstd lzip"
diff --git a/scripts/actions/clean_backups b/scripts/actions/clean_backups
index 38aef75..c13256d 100755
--- a/scripts/actions/clean_backups
+++ b/scripts/actions/clean_backups
@@ -20,7 +20,7 @@ ynh_abort_if_errors
# RETRIEVE ARGUMENTS
#=================================================
-app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
+app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
@@ -44,11 +44,11 @@ backup_dir="$(grep "^backup_dir=" "$final_path/Backup_list.conf" | cut -d= -f2)"
while read directory <&3
do
- if [ -n "$directory" ]
- then
- ynh_print_info --message="Clean backup directory $directory"
- ynh_secure_remove --file="$directory"
- fi
+ if [ -n "$directory" ]
+ then
+ ynh_print_info --message="Clean backup directory $directory"
+ ynh_secure_remove --file="$directory"
+ fi
done 3<<< $(find "$backup_dir" -maxdepth 1 -mindepth 1 -type d)
#=================================================
diff --git a/scripts/actions/force_backup b/scripts/actions/force_backup
index bde2993..fdbb7ed 100755
--- a/scripts/actions/force_backup
+++ b/scripts/actions/force_backup
@@ -20,7 +20,7 @@ ynh_abort_if_errors
# RETRIEVE ARGUMENTS
#=================================================
-app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
+app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
diff --git a/scripts/actions/reset_default_app b/scripts/actions/reset_default_app
new file mode 100755
index 0000000..fbf4c1f
--- /dev/null
+++ b/scripts/actions/reset_default_app
@@ -0,0 +1,109 @@
+#!/bin/bash
+
+#=================================================
+# GENERIC STARTING
+#=================================================
+# IMPORT GENERIC HELPERS
+#=================================================
+
+# Load common variables for all scripts.
+source scripts/_variables
+
+source scripts/_common.sh
+source /usr/share/yunohost/helpers
+
+#=================================================
+# MANAGE SCRIPT FAILURE
+#=================================================
+
+ynh_clean_setup () {
+# Clean installation remaining that are not handle by the remove script.
+ ynh_clean_check_starting
+}
+# Exit if an error occurs during the execution of the script
+ynh_abort_if_errors
+
+#=================================================
+# RETRIEVE ARGUMENTS
+#=================================================
+
+app=$YNH_APP_INSTANCE_NAME
+
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+frequency="$(ynh_app_setting_get --app=$app --key=frequency)"
+
+#=================================================
+# DOWNLOAD, CHECK AND UNPACK SOURCE
+#=================================================
+
+ynh_script_progression --message="Resetting source files..." --time --weight=1
+
+# Download, check integrity, uncompress and patch the source from app.src
+(cd scripts; YNH_CWD=$PWD ynh_setup_source --dest_dir="$final_path")
+
+#=================================================
+# RECREATE DIRECTORY
+#=================================================
+
+backup_dir="/home/yunohost.app/${app}/backup"
+mkdir -p "$backup_dir"
+
+#=================================================
+# UPDATE THE CRON FILE
+#=================================================
+ynh_script_progression --message="Updating the cron file..."
+
+# Verify the checksum and backup the file if it's different
+ynh_backup_if_checksum_is_different --file="/etc/cron.d/$app"
+
+(cd scripts; cp ../conf/cron /etc/cron.d/$app)
+ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/cron.d/$app
+ynh_replace_string --match_string="__APP__" --replace_string=$app --target_file=/etc/cron.d/$app
+if [ "$frequency" = "Daily" ]; then
+ cron_freq="0 2 * * *"
+ run_freq="every day"
+elif [ "$frequency" = "Each 3 days" ]; then
+ cron_freq="0 2 */3 * *"
+ run_freq="each 3 days"
+elif [ "$frequency" = "Weekly" ]; then
+ cron_freq="0 2 * * 0"
+ run_freq="once a week on sunday"
+elif [ "$frequency" = "Biweekly" ]; then
+ cron_freq="0 2 * * 0/2"
+ run_freq="one sunday out of two"
+else # Monthly
+ cron_freq="0 2 1 * *"
+ run_freq="once a month on the first sunday"
+fi
+ynh_replace_string --match_string="__FREQUENCY__" --replace_string="$cron_freq" --target_file=/etc/cron.d/$app
+
+# Recalculate and store the config file checksum into the app settings
+ynh_store_file_checksum --file="/etc/cron.d/$app"
+
+#=================================================
+# RECONFIGURE ARCHIVIST
+#=================================================
+ynh_script_progression --message="Reconfiguring archivist..." --time --weight=1
+
+yunohost app action run $app reset_default_config
+
+#=================================================
+# SETUP LOGROTATE
+#=================================================
+ynh_script_progression --message="Resetting logrotate configuration..." --time --weight=1
+
+# Use logrotate to manage app-specific logfile(s)
+ynh_use_logrotate --non-append
+
+#=================================================
+# SECURE FILES AND DIRECTORIES
+#=================================================
+
+# Set permissions on app files
+chown -R root: $final_path
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_script_progression --message="Execution completed" --time --last
diff --git a/scripts/actions/reset_default_config b/scripts/actions/reset_default_config
index 8a3543b..9647d3c 100755
--- a/scripts/actions/reset_default_config
+++ b/scripts/actions/reset_default_config
@@ -20,7 +20,7 @@ ynh_abort_if_errors
# RETRIEVE ARGUMENTS
#=================================================
-app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
+app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
encrypt=$(ynh_app_setting_get --app=$app --key=encrypt)
@@ -34,7 +34,7 @@ apps_backup=$(ynh_app_setting_get --app=$app --key=apps_backup)
file="$1"
if [ "$file" = "Backup_list.conf" ]; then
- config_file="$final_path/Backup_list.conf"
+ config_file="$final_path/Backup_list.conf"
fi
#=================================================
@@ -49,42 +49,42 @@ ynh_backup_if_checksum_is_different --file="$config_file"
if [ "$file" = "Backup_list.conf" ]
then
- # Get the default file and overwrite the current config
- cp "$final_path/Backup_list.conf.default" "$config_file"
+ # Get the default file and overwrite the current config
+ cp "$final_path/Backup_list.conf.default" "$config_file"
- # Recreate the default config
- backup_dir="/home/yunohost.app/${app}/backup"
- enc_backup_dir="/home/yunohost.app/${app}/encrypted_backup"
- ynh_replace_string --match_string="^backup_dir=.*" --replace_string="backup_dir=$backup_dir" --target_file="$config_file"
- ynh_replace_string --match_string="^enc_backup_dir=.*" --replace_string="enc_backup_dir=$enc_backup_dir" --target_file="$config_file"
+ # Recreate the default config
+ backup_dir="/home/yunohost.app/${app}/backup"
+ enc_backup_dir="/home/yunohost.app/${app}/encrypted_backup"
+ ynh_replace_string --match_string="^backup_dir=.*" --replace_string="backup_dir=$backup_dir" --target_file="$config_file"
+ ynh_replace_string --match_string="^enc_backup_dir=.*" --replace_string="enc_backup_dir=$enc_backup_dir" --target_file="$config_file"
- if [ $encrypt -eq 1 ]
- then
- encrypt=true
- passkey="$final_path/passkey"
- else
- encrypt=false
- passkey=na
- fi
- ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
- ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
+ if [ $encrypt -eq 1 ]
+ then
+ encrypt=true
+ passkey="$final_path/passkey"
+ else
+ encrypt=false
+ passkey=na
+ fi
+ ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
+ ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
- if [ $core_backup -eq 1 ]
- then
- core_backup=true
- else
- core_backup=false
- fi
- ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$core_backup" --target_file="$config_file"
+ if [ $core_backup -eq 1 ]
+ then
+ core_backup=true
+ else
+ core_backup=false
+ fi
+ ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$core_backup" --target_file="$config_file"
- if [ $apps_backup -eq 1 ]
- then
- # Add all current applications to the backup
- while read backup_app
- do
- ynh_replace_string --match_string="^ynh_app_backup=$" --replace_string="ynh_app_backup=$backup_app\n&" --target_file="$config_file"
- done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
- fi
+ if [ $apps_backup -eq 1 ]
+ then
+ # Add all current applications to the backup
+ while read backup_app
+ do
+ ynh_replace_string --match_string="^ynh_app_backup=$" --replace_string="ynh_app_backup=$backup_app\n&" --target_file="$config_file"
+ done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
+ fi
fi
# Calculate and store the config file checksum into the app settings
diff --git a/scripts/backup b/scripts/backup
index 3555225..180eabc 100755
--- a/scripts/backup
+++ b/scripts/backup
@@ -46,6 +46,7 @@ ynh_backup --src_path="/etc/logrotate.d/$app"
#=================================================
# BACKUP THE CRON FILE
#=================================================
+ynh_script_progression --message="Backing up cron file..."
ynh_backup --src_path="/etc/cron.d/$app"
diff --git a/scripts/config b/scripts/config
index 537858b..97f4dff 100644
--- a/scripts/config
+++ b/scripts/config
@@ -13,7 +13,7 @@ source /usr/share/yunohost/helpers
# RETRIEVE ARGUMENTS
#=================================================
-app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
+app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
@@ -27,9 +27,9 @@ config_file="$final_path/Backup_list.conf"
passkey="$final_path/passkey"
get_config_value() {
- option_name="$1"
- # Get the value of this option in the config file
- grep "^$option_name=" "$config_file" | cut -d= -f2
+ option_name="$1"
+ # Get the value of this option in the config file
+ grep "^$option_name=" "$config_file" | cut -d= -f2
}
#=================================================
@@ -51,6 +51,14 @@ old_encrypt_password="$(cat $passkey)"
encrypt_password="${YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPTION_PWD:-$old_encrypt_password}"
ynh_print_ON
+# Compression algorithms
+old_ynh_compression="$(get_config_value ynh_compression_mode)"
+old_ynh_compression=${old_ynh_compression:-gzip}
+ynh_compression="${YNH_CONFIG_MAIN_COMPRESSION_YNH:-$old_ynh_compression}"
+old_files_compression="$(get_config_value files_compression_mode)"
+old_files_compression=${old_files_compression:-gzip}
+files_compression="${YNH_CONFIG_MAIN_COMPRESSION_FILES:-$old_files_compression}"
+
# ynh_core_backup
old_ynh_core_backup="$(get_config_value ynh_core_backup)"
ynh_core_backup="${YNH_CONFIG_MAIN_BACKUP_TYPES_CORE_BACKUP:-$old_ynh_core_backup}"
@@ -58,9 +66,9 @@ ynh_core_backup="${YNH_CONFIG_MAIN_BACKUP_TYPES_CORE_BACKUP:-$old_ynh_core_backu
# ynh_app_backup
if [ -n "$(get_config_value ynh_app_backup)" ]
then
- old_ynh_app_backup="1"
+ old_ynh_app_backup="1"
else
- old_ynh_app_backup="0"
+ old_ynh_app_backup="0"
fi
ynh_app_backup="${YNH_CONFIG_MAIN_BACKUP_TYPES_APPS_BACKUP:-$old_ynh_app_backup}"
@@ -85,21 +93,24 @@ admin_mail_html="${YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE:-$old_admin_mail_htm
#=================================================
show_config() {
- # here you are supposed to read some config file/database/other then print the values
- # ynh_return "YNH_CONFIG_${PANEL_ID}_${SECTION_ID}_${OPTION_ID}=value"
+ # here you are supposed to read some config file/database/other then print the values
+ # ynh_return "YNH_CONFIG_${PANEL_ID}_${SECTION_ID}_${OPTION_ID}=value"
- ynh_return "YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPT=$encrypt"
- ynh_return "YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPTION_PWD="
+ ynh_return "YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPT=$encrypt"
+ ynh_return "YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPTION_PWD="
- ynh_return "YNH_CONFIG_MAIN_BACKUP_TYPES_CORE_BACKUP=$ynh_core_backup"
- ynh_return "YNH_CONFIG_MAIN_BACKUP_TYPES_APPS_BACKUP=$ynh_app_backup"
+ ynh_return "YNH_CONFIG_MAIN_COMPRESSION_YNH=$ynh_compression"
+ ynh_return "YNH_CONFIG_MAIN_COMPRESSION_FILES=$files_compression"
- ynh_return "YNH_CONFIG_MAIN_BACKUP_OPTIONS_FREQUENCY=$frequency"
- ynh_return "YNH_CONFIG_MAIN_BACKUP_OPTIONS_MAX_SIZE=$max_size"
+ ynh_return "YNH_CONFIG_MAIN_BACKUP_TYPES_CORE_BACKUP=$ynh_core_backup"
+ ynh_return "YNH_CONFIG_MAIN_BACKUP_TYPES_APPS_BACKUP=$ynh_app_backup"
- ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_CRON=$overwrite_cron"
+ ynh_return "YNH_CONFIG_MAIN_BACKUP_OPTIONS_FREQUENCY=$frequency"
+ ynh_return "YNH_CONFIG_MAIN_BACKUP_OPTIONS_MAX_SIZE=$max_size"
- ynh_return "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html"
+ ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_CRON=$overwrite_cron"
+
+ ynh_return "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html"
}
#=================================================
@@ -112,86 +123,117 @@ apply_config() {
# MODIFY THE PASSWORD
#=================================================
- # Change the password if needed
- if [ "$encrypt" = "1" ]
- then
- ynh_print_OFF
- test -n "$encrypt_password" || ynh_die --message="The password for encryption can't be empty if you choose to enable encryption."
- ynh_print_ON
- # Replace the password by the previous one
- passkey="$final_path/passkey"
- ynh_print_OFF; echo "$encrypt_password" > "$passkey"; ynh_print_ON
- chmod 400 "$passkey"
- ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
- fi
+ # Change the password if needed
+ if [ "$encrypt" = "1" ]
+ then
+ ynh_print_OFF
+ test -n "$encrypt_password" || ynh_die --message="The password for encryption can't be empty if you choose to enable encryption."
+ ynh_print_ON
+ # Replace the password by the previous one
+ passkey="$final_path/passkey"
+ ynh_print_OFF; echo "$encrypt_password" > "$passkey"; ynh_print_ON
+ chmod 400 "$passkey"
+ ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
+ fi
#=================================================
# MODIFY ENCRYPT SETTING
#=================================================
- # Change encrypt in the config file
- ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
+ # Change encrypt in the config file
+ ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
#=================================================
# MODIFY SETTINGS
#=================================================
- # Change ynh_core_backup in the config file
- ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$ynh_core_backup" --target_file="$config_file"
+ # Change the compression algorithms
+ # Replace "No compression" by "none" for the config file
+ if [ "$ynh_compression" == "No compression" ]; then
+ ynh_compression=none
+ fi
+ if [ "$ynh_compression" != "$old_ynh_compression" ]
+ then
+ # Update the config, or add the config if not yet existing
+ if grep "^ynh_compression_mode=" "$config_file"
+ then
+ ynh_replace_string --match_string="^ynh_compression_mode=.*" --replace_string="ynh_compression_mode=$ynh_compression" --target_file="$config_file"
+ else
+ echo "ynh_compression_mode=$ynh_compression" >> "$config_file"
+ fi
+ fi
+ # Replace "No compression" by "none" for the config file
+ if [ "$files_compression" == "No compression" ]; then
+ files_compression=none
+ fi
+ if [ "$files_compression" != "$old_files_compression" ]
+ then
+ # Update the config, or add the config if not yet existing
+ if grep "^files_compression_mode=" "$config_file"
+ then
+ ynh_replace_string --match_string="^files_compression_mode=.*" --replace_string="files_compression_mode=$files_compression" --target_file="$config_file"
+ else
+ echo "files_compression_mode=$files_compression" >> "$config_file"
+ fi
+
+ fi
- # Change ynh_app_backup in the config file
- if [ "$ynh_app_backup" = "1" ] && [ "$old_ynh_app_backup" = "0" ]
- then
- # If ynh_app_backup changed from false to true.
- # Add all current applications to the backup
- while read backup_app
- do
- ynh_print_info --message="Add a backup for the app $backup_app."
- ynh_replace_string --match_string="^ynh_app_backup=$" --replace_string="ynh_app_backup=$backup_app\n&" --target_file="$config_file"
- done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
- elif [ "$ynh_app_backup" = "0" ] && [ "$old_ynh_app_backup" = "1" ]
- then
- # Remove all app currently backup
- # By deleting all line starting by 'ynh_app_backup=' and having something after '='
- sed -i "/^ynh_app_backup=.\+$/d" "$config_file"
- fi
+ # Change ynh_core_backup in the config file
+ ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$ynh_core_backup" --target_file="$config_file"
- # Change frequency in the cron file and store the value into the settings
- ynh_app_setting_set --app=$app --key=frequency --value="$frequency"
- if [ "$frequency" = "Daily" ]; then
- cron_freq="0 2 * * *"
- run_freq="every day"
- elif [ "$frequency" = "Each 3 days" ]; then
- cron_freq="0 2 */3 * *"
- run_freq="each 3 days"
- elif [ "$frequency" = "Weekly" ]; then
- cron_freq="0 2 * * 0"
- run_freq="once a week on sunday"
- elif [ "$frequency" = "Biweekly" ]; then
- cron_freq="0 2 * * 0/2"
- run_freq="one sunday out of two"
- else # Monthly
- cron_freq="0 2 1 * *"
- run_freq="once a month on the first sunday"
- fi
- ynh_replace_string --match_string=".* root" --replace_string="$cron_freq root" --target_file=/etc/cron.d/$app
+ # Change ynh_app_backup in the config file
+ if [ "$ynh_app_backup" = "1" ] && [ "$old_ynh_app_backup" = "0" ]
+ then
+ # If ynh_app_backup changed from false to true.
+ # Add all current applications to the backup
+ while read backup_app
+ do
+ ynh_print_info --message="Add a backup for the app $backup_app."
+ ynh_replace_string --match_string="^ynh_app_backup=$" --replace_string="ynh_app_backup=$backup_app\n&" --target_file="$config_file"
+ done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
+ elif [ "$ynh_app_backup" = "0" ] && [ "$old_ynh_app_backup" = "1" ]
+ then
+ # Remove all app currently backup
+ # By deleting all line starting by 'ynh_app_backup=' and having something after '='
+ sed -i "/^ynh_app_backup=.\+$/d" "$config_file"
+ fi
- # Change max_size in the config file
- ynh_replace_string --match_string="^max_size=.*" --replace_string="max_size=$max_size" --target_file="$config_file"
+ # Change frequency in the cron file and store the value into the settings
+ ynh_app_setting_set --app=$app --key=frequency --value="$frequency"
+ if [ "$frequency" = "Daily" ]; then
+ cron_freq="0 2 * * *"
+ run_freq="every day"
+ elif [ "$frequency" = "Each 3 days" ]; then
+ cron_freq="0 2 */3 * *"
+ run_freq="each 3 days"
+ elif [ "$frequency" = "Weekly" ]; then
+ cron_freq="0 2 * * 0"
+ run_freq="once a week on sunday"
+ elif [ "$frequency" = "Biweekly" ]; then
+ cron_freq="0 2 * * 0/2"
+ run_freq="one sunday out of two"
+ else # Monthly
+ cron_freq="0 2 1 * *"
+ run_freq="once a month on the first sunday"
+ fi
+ ynh_replace_string --match_string=".* root" --replace_string="$cron_freq root" --target_file=/etc/cron.d/$app
+
+ # Change max_size in the config file
+ ynh_replace_string --match_string="^max_size=.*" --replace_string="max_size=$max_size" --target_file="$config_file"
#=================================================
# MODIFY OVERWRITTING SETTINGS
#=================================================
- # Set overwrite_cron
- ynh_app_setting_set --app=$app --key=overwrite_cron --value="$overwrite_cron"
+ # Set overwrite_cron
+ ynh_app_setting_set --app=$app --key=overwrite_cron --value="$overwrite_cron"
#=================================================
# MODIFY EMAIL SETTING
#=================================================
- # Set admin_mail_html
- ynh_app_setting_set --app=$app --key=admin_mail_html --value="$admin_mail_html"
+ # Set admin_mail_html
+ ynh_app_setting_set --app=$app --key=admin_mail_html --value="$admin_mail_html"
}
#=================================================
@@ -201,6 +243,6 @@ apply_config() {
#=================================================
case $1 in
- show) show_config;;
- apply) apply_config;;
+show) show_config;;
+apply) apply_config;;
esac
diff --git a/scripts/install b/scripts/install
index 654423b..670fbc1 100755
--- a/scripts/install
+++ b/scripts/install
@@ -40,9 +40,9 @@ final_path=/opt/yunohost/$app
test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
if [ $encrypt -eq 1 ]; then
- ynh_print_OFF
- test -n "$encryption_pwd" || ynh_die --message="encryption_pwd can't be empty if you choose to enable encryption."
- ynh_print_ON
+ ynh_print_OFF
+ test -n "$encryption_pwd" || ynh_die --message="encryption_pwd can't be empty if you choose to enable encryption."
+ ynh_print_ON
fi
#=================================================
@@ -103,48 +103,38 @@ ynh_replace_string --match_string="^enc_backup_dir=.*" --replace_string="enc_bac
if [ $encrypt -eq 1 ]
then
- encrypt=true
+ encrypt=true
- passkey="$final_path/passkey"
- ynh_print_OFF; echo "$encryption_pwd" > "$passkey"; ynh_print_ON
- chmod 400 "$passkey"
+ passkey="$final_path/passkey"
+ ynh_print_OFF; echo "$encryption_pwd" > "$passkey"; ynh_print_ON
+ chmod 400 "$passkey"
else
- encrypt=false
- passkey=na
+ encrypt=false
+ passkey=na
fi
ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
if [ $core_backup -eq 1 ]
then
- core_backup=true
+ core_backup=true
else
- core_backup=false
+ core_backup=false
fi
ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$core_backup" --target_file="$config_file"
if [ $apps_backup -eq 1 ]
then
- # Add all current applications to the backup
- while read backup_app
- do
- ynh_replace_string --match_string="^ynh_app_backup=$" --replace_string="ynh_app_backup=$backup_app\n&" --target_file="$config_file"
- done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
+ # Add all current applications to the backup
+ while read backup_app
+ do
+ ynh_replace_string --match_string="^ynh_app_backup=$" --replace_string="ynh_app_backup=$backup_app\n&" --target_file="$config_file"
+ done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
fi
# Calculate and store the config file checksum into the app settings
ynh_store_file_checksum --file="$config_file"
-#=================================================
-# STRETCH COMPATIBILITY
-#=================================================
-
-if is_stretch
-then
- ynh_replace_string --match_string="yunohost backup create --ignore-apps" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
- ynh_replace_string --match_string="yunohost backup create --ignore-system" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
-fi
-
#=================================================
# SET THE CRON FILE
#=================================================
@@ -154,20 +144,20 @@ cp ../conf/cron /etc/cron.d/$app
ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/cron.d/$app
ynh_replace_string --match_string="__APP__" --replace_string=$app --target_file=/etc/cron.d/$app
if [ "$frequency" = "Daily" ]; then
- cron_freq="0 2 * * *"
- run_freq="every day"
+ cron_freq="0 2 * * *"
+ run_freq="every day"
elif [ "$frequency" = "Each 3 days" ]; then
- cron_freq="0 2 */3 * *"
- run_freq="each 3 days"
+ cron_freq="0 2 */3 * *"
+ run_freq="each 3 days"
elif [ "$frequency" = "Weekly" ]; then
- cron_freq="0 2 * * 0"
- run_freq="once a week on sunday"
+ cron_freq="0 2 * * 0"
+ run_freq="once a week on sunday"
elif [ "$frequency" = "Biweekly" ]; then
- cron_freq="0 2 * * 0/2"
- run_freq="one sunday out of two"
+ cron_freq="0 2 * * 0/2"
+ run_freq="one sunday out of two"
else # Monthly
- cron_freq="0 2 1 * *"
- run_freq="once a month on the first sunday"
+ cron_freq="0 2 1 * *"
+ run_freq="once a month on the first sunday"
fi
ynh_replace_string --match_string="__FREQUENCY__" --replace_string="$cron_freq" --target_file=/etc/cron.d/$app
@@ -207,13 +197,13 @@ ynh_print_info --message="$Informations"
if [ "$encrypt" = "true" ]
then
- ynh_print_OFF
- encrypt_message="Your password for encryption is '$encryption_pwd'
+ ynh_print_OFF
+ encrypt_message="Your password for encryption is '$encryption_pwd'
"
- ynh_print_ON
+ ynh_print_ON
else
- encrypt_message=""
+ encrypt_message=""
fi
# Get main domain and buid the url of the admin panel of the app.
diff --git a/scripts/restore b/scripts/restore
index 0c2011a..b17f8d5 100755
--- a/scripts/restore
+++ b/scripts/restore
@@ -34,7 +34,7 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path)
ynh_script_progression --message="Validating restoration parameters..."
test ! -d $final_path \
- || ynh_die --message="There is already a directory: $final_path "
+ || ynh_die --message="There is already a directory: $final_path "
#=================================================
# STANDARD RESTORATION STEPS
@@ -45,16 +45,6 @@ ynh_script_progression --message="Restoring the app main directory..."
ynh_restore_file --origin_path="$final_path"
-#=================================================
-# STRETCH COMPATIBILITY
-#=================================================
-
-if is_stretch
-then
- ynh_replace_string --match_string="yunohost backup create --ignore-apps" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
- ynh_replace_string --match_string="yunohost backup create --ignore-system" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
-fi
-
#=================================================
# SPECIFIC RESTORATION
#=================================================
diff --git a/scripts/upgrade b/scripts/upgrade
index f0fb2b0..bc23dfb 100755
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -39,38 +39,38 @@ ynh_script_progression --message="Ensuring downward compatibility..."
# If encrypt doesn't exist, create it
if [ -z "$encrypt" ]; then
- encrypt="$(grep "^encrypt=" "$final_path/Backup_list.conf" | cut -d= -f2)"
- if [ "$encrypt" = true ]; then
- encrypt=1
- else
- encrypt=0
- fi
- ynh_app_setting_set --app=$app --key=encrypt --value=$encrypt
+ encrypt="$(grep "^encrypt=" "$final_path/Backup_list.conf" | cut -d= -f2)"
+ if [ "$encrypt" = true ]; then
+ encrypt=1
+ else
+ encrypt=0
+ fi
+ ynh_app_setting_set --app=$app --key=encrypt --value=$encrypt
fi
# If core_backup doesn't exist, create it
if [ -z "$core_backup" ]; then
- core_backup="$(grep "^ynh_core_backup=" "$final_path/Backup_list.conf" | cut -d= -f2)"
- ynh_app_setting_set --app=$app --key=core_backup --value=$core_backup
+ core_backup="$(grep "^ynh_core_backup=" "$final_path/Backup_list.conf" | cut -d= -f2)"
+ ynh_app_setting_set --app=$app --key=core_backup --value=$core_backup
fi
# If apps_backup doesn't exist, create it
if [ -z "$apps_backup" ]; then
- apps_backup="$(grep --count --max-count=1 "^ynh_app_backup=" "$final_path/Backup_list.conf")"
- ynh_app_setting_set --app=$app --key=apps_backup --value=$apps_backup
+ apps_backup="$(grep --count --max-count=1 "^ynh_app_backup=" "$final_path/Backup_list.conf")"
+ ynh_app_setting_set --app=$app --key=apps_backup --value=$apps_backup
fi
# If overwrite_cron doesn't exist, create it
if [ -z "$overwrite_cron" ]; then
- overwrite_cron=1
- ynh_app_setting_set --app=$app --key=overwrite_cron --value=$overwrite_cron
+ overwrite_cron=1
+ ynh_app_setting_set --app=$app --key=overwrite_cron --value=$overwrite_cron
fi
admin_mail_html=$(ynh_app_setting_get --app=$app --key=admin_mail_html)
# If admin_mail_html doesn't exist, create it
if [ -z "$admin_mail_html" ]; then
- admin_mail_html=1
- ynh_app_setting_set --app=$app --key=admin_mail_html --value=$admin_mail_html
+ admin_mail_html=1
+ ynh_app_setting_set --app=$app --key=admin_mail_html --value=$admin_mail_html
fi
#=================================================
@@ -81,8 +81,8 @@ ynh_script_progression --message="Backing up the app before upgrading (may take
# Backup the current version of the app
ynh_backup_before_upgrade
ynh_clean_setup () {
- # restore it if the upgrade fails
- ynh_restore_upgradebackup
+ # restore it if the upgrade fails
+ ynh_restore_upgradebackup
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
@@ -95,9 +95,9 @@ ynh_abort_if_errors
if [ "$upgrade_type" == "UPGRADE_APP" ]
then
- ynh_script_progression --message="Upgrading source files..." --weight=2
- # Download, check integrity, uncompress and patch the source from app.src
- ynh_setup_source --dest_dir="$final_path"
+ ynh_script_progression --message="Upgrading source files..." --weight=2
+ # Download, check integrity, uncompress and patch the source from app.src
+ ynh_setup_source --dest_dir="$final_path"
fi
#=================================================
@@ -109,16 +109,6 @@ ynh_install_app_dependencies $app_depencencies
#=================================================
# SPECIFIC UPGRADE
-#=================================================
-# STRETCH COMPATIBILITY
-#=================================================
-
-if is_stretch
-then
- ynh_replace_string --match_string="yunohost backup create --ignore-apps" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
- ynh_replace_string --match_string="yunohost backup create --ignore-system" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
-fi
-
#=================================================
# UPDATE THE CRON FILE
#=================================================
@@ -127,32 +117,32 @@ ynh_script_progression --message="Updating the cron file..."
# Overwrite the cron file only if it's allowed
if [ $overwrite_cron -eq 1 ]
then
- # Verify the checksum and backup the file if it's different
- ynh_backup_if_checksum_is_different --file="/etc/cron.d/$app"
+ # Verify the checksum and backup the file if it's different
+ ynh_backup_if_checksum_is_different --file="/etc/cron.d/$app"
- cp ../conf/cron /etc/cron.d/$app
- ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/cron.d/$app
- ynh_replace_string --match_string="__APP__" --replace_string=$app --target_file=/etc/cron.d/$app
- if [ "$frequency" = "Daily" ]; then
- cron_freq="0 2 * * *"
- run_freq="every day"
- elif [ "$frequency" = "Each 3 days" ]; then
- cron_freq="0 2 */3 * *"
- run_freq="each 3 days"
- elif [ "$frequency" = "Weekly" ]; then
- cron_freq="0 2 * * 0"
- run_freq="once a week on sunday"
- elif [ "$frequency" = "Biweekly" ]; then
- cron_freq="0 2 * * 0/2"
- run_freq="one sunday out of two"
- else # Monthly
- cron_freq="0 2 1 * *"
- run_freq="once a month on the first sunday"
- fi
- ynh_replace_string --match_string="__FREQUENCY__" --replace_string="$cron_freq" --target_file=/etc/cron.d/$app
+ cp ../conf/cron /etc/cron.d/$app
+ ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/cron.d/$app
+ ynh_replace_string --match_string="__APP__" --replace_string=$app --target_file=/etc/cron.d/$app
+ if [ "$frequency" = "Daily" ]; then
+ cron_freq="0 2 * * *"
+ run_freq="every day"
+ elif [ "$frequency" = "Each 3 days" ]; then
+ cron_freq="0 2 */3 * *"
+ run_freq="each 3 days"
+ elif [ "$frequency" = "Weekly" ]; then
+ cron_freq="0 2 * * 0"
+ run_freq="once a week on sunday"
+ elif [ "$frequency" = "Biweekly" ]; then
+ cron_freq="0 2 * * 0/2"
+ run_freq="one sunday out of two"
+ else # Monthly
+ cron_freq="0 2 1 * *"
+ run_freq="once a month on the first sunday"
+ fi
+ ynh_replace_string --match_string="__FREQUENCY__" --replace_string="$cron_freq" --target_file=/etc/cron.d/$app
- # Recalculate and store the config file checksum into the app settings
- ynh_store_file_checksum --file="/etc/cron.d/$app"
+ # Recalculate and store the config file checksum into the app settings
+ ynh_store_file_checksum --file="/etc/cron.d/$app"
fi
#=================================================