mirror of
https://github.com/YunoHost-Apps/archivist_ynh.git
synced 2024-09-03 18:15:55 +02:00
commit
10a5c6d383
19 changed files with 903 additions and 661 deletions
12
CHANGELOG.md
12
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
|
||||
|
|
16
README.md
16
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
|
||||
```
|
||||
|
|
16
README_fr.md
16
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
|
||||
```
|
||||
|
|
|
@ -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.<br>This action won't remove any data added to the app.<br>However, if you have modified any configuration, it will be overwritten."
|
||||
|
|
|
@ -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"&
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
154
manifest.json
154
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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
714
scripts/_common.sh
Normal file → Executable file
714
scripts/_common.sh
Normal file → Executable file
|
@ -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="<a href=\"\2\">\1</a>)" --target_file="$final_changelog"
|
||||
ynh_replace_string --match_string="\[\(.*\)\](\(.*\))" --replace_string="<a href=\"\2\">\1</a>" --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
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Dependencies
|
||||
app_depencencies="rsync encfs sshpass ccrypt"
|
||||
app_depencencies="rsync encfs sshpass ccrypt lzop zstd lzip"
|
||||
|
|
|
@ -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)
|
||||
|
||||
#=================================================
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
109
scripts/actions/reset_default_app
Executable file
109
scripts/actions/reset_default_app
Executable file
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
192
scripts/config
192
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
|
||||
|
||||
# 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
|
||||
fi
|
||||
|
||||
# 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_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 max_size in the config file
|
||||
ynh_replace_string --match_string="^max_size=.*" --replace_string="max_size=$max_size" --target_file="$config_file"
|
||||
# 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 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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
#=================================================
|
||||
|
|
|
@ -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
|
||||
|
||||
#=================================================
|
||||
|
|
Loading…
Add table
Reference in a new issue