1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/archivist_ynh.git synced 2024-09-03 18:15:55 +02:00

Merge pull request #18 from YunoHost-Apps/testing

Testing
This commit is contained in:
Maniack Crudelis 2019-06-30 13:50:20 +02:00 committed by GitHub
commit be3d557b9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 493 additions and 613 deletions

View file

@ -15,7 +15,7 @@ It can also makes backups of specified directories.
Your backups can be send to many other places, local or distant. 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. Archivist is automatically launched periodicaly to update your backups and send the modifications to the other places.
**Shipped version:** 0.7 **Shipped version:** 0.8
## Screenshots ## Screenshots
@ -40,12 +40,9 @@ Not relevant.
#### Supported architectures #### Supported architectures
* x86-64b - ![](https://ci-apps.yunohost.org/ci/logs/archivist%20%28Community%29.svg) * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/archivist%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/archivist/)
* ARMv8-A - ![](https://ci-apps-arm.yunohost.org/ci/logs/archivist%20%28Community%29.svg) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/archivist%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/archivist/)
* Jessie x86-64b - ![](https://ci-stretch.nohost.me/ci/logs/archivist%20%28Community%29.svg) * Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/archivist%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/archivist/)
* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/archivist%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/archivist/)
* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/archivist%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/archivist/)
* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/archivist%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/archivist/)
## Limitations ## Limitations

View file

@ -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. 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. Archivist est automatiquement lancé périodiquement pour mettre à jour vos sauvegardes et envoyer les modifications aux autres emplacements.
**Version embarquée:** 0.7 **Version embarquée:** 0.8
## Captures d'écran ## Captures d'écran
@ -40,9 +40,9 @@ Non applicable
#### Architectures supportées. #### Architectures supportées.
* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/archivist%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/archivist/) * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/archivist%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/archivist/)
* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/archivist%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/archivist/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/archivist%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/archivist/)
* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/archivist%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/archivist/) * Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/archivist%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/archivist/)
## Limitations ## Limitations

View file

@ -20,16 +20,7 @@
port_already_use=0 port_already_use=0
change_url=0 change_url=0
;;; Levels ;;; Levels
Level 1=auto
Level 2=auto
Level 3=auto
Level 4=na
Level 5=auto Level 5=auto
Level 6=auto
Level 7=auto
Level 8=0
Level 9=0
Level 10=0
;;; Options ;;; Options
Email= Email=
Notification=down Notification=down

View file

@ -1,5 +1,5 @@
SOURCE_URL=https://github.com/maniackcrudelis/archivist/archive/v0.7.tar.gz SOURCE_URL=https://github.com/maniackcrudelis/archivist/archive/v0.8.tar.gz
SOURCE_SUM=fb9cad6706400126d54b2b7f794d8e3d SOURCE_SUM=9301979e1418438791a4342efd19327e
SOURCE_SUM_PRG=md5sum SOURCE_SUM_PRG=md5sum
SOURCE_FORMAT=tar.gz SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true SOURCE_IN_SUBDIR=true

View file

@ -6,7 +6,7 @@
"en": "Automatic backups.", "en": "Automatic backups.",
"fr": "Sauvegardes automatiques." "fr": "Sauvegardes automatiques."
}, },
"version": "0.7~ynh3", "version": "0.8~ynh1",
"url": "https://github.com/maniackcrudelis/archivist", "url": "https://github.com/maniackcrudelis/archivist",
"license": "GPL-3.0", "license": "GPL-3.0",
"maintainer": { "maintainer": {
@ -14,7 +14,7 @@
"email": "maniackc_dev@crudelis.fr" "email": "maniackc_dev@crudelis.fr"
}, },
"requirements": { "requirements": {
"yunohost": ">= 3.4" "yunohost": ">= 3.5.0"
}, },
"multi_instance": true, "multi_instance": true,
"services": [], "services": [],
@ -62,6 +62,7 @@
}, },
{ {
"name": "frequency", "name": "frequency",
"type": "string",
"ask": { "ask": {
"en": "Choose the frequency of your backups ?", "en": "Choose the frequency of your backups ?",
"fr": "Choississez la fréquence de votre backup ?" "fr": "Choississez la fréquence de votre backup ?"

View file

@ -1,5 +1,9 @@
#!/bin/bash #!/bin/bash
#=================================================
# PERSONAL HELPERS
#=================================================
#================================================= #=================================================
# BACKUP # BACKUP
#================================================= #=================================================
@ -27,7 +31,12 @@ CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant
#================================================= #=================================================
IS_PACKAGE_CHECK () { IS_PACKAGE_CHECK () {
return $(env | grep -c container=lxc) if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]
then
return 0
else
return 1
fi
} }
#================================================= #=================================================
@ -129,359 +138,6 @@ ynh_multimedia_addaccess () {
usermod -a -G multimedia $user_name usermod -a -G multimedia $user_name
} }
#=================================================
# Create a dedicated fail2ban config (jail and filter conf files)
#
# usage: ynh_add_fail2ban_config log_file filter [max_retry [ports]]
# | arg: -l, --logpath= - Log file to be checked by fail2ban
# | arg: -r, --failregex= - Failregex to be looked for by fail2ban
# | arg: -m, --max_retry= - Maximum number of retries allowed before banning IP address - default: 3
# | arg: -p, --ports= - Ports blocked for a banned IP address - default: http,https
ynh_add_fail2ban_config () {
# Declare an array to define the options of this helper.
declare -Ar args_array=( [l]=logpath= [r]=failregex= [m]=max_retry= [p]=ports= )
local logpath
local failregex
local max_retry
local ports
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
max_retry=${max_retry:-3}
ports=${ports:-http,https}
test -n "$logpath" || ynh_die "ynh_add_fail2ban_config expects a logfile path as first argument and received nothing."
test -n "$failregex" || ynh_die "ynh_add_fail2ban_config expects a failure regex as second argument and received nothing."
finalfail2banjailconf="/etc/fail2ban/jail.d/$app.conf"
finalfail2banfilterconf="/etc/fail2ban/filter.d/$app.conf"
ynh_backup_if_checksum_is_different "$finalfail2banjailconf" 1
ynh_backup_if_checksum_is_different "$finalfail2banfilterconf" 1
tee $finalfail2banjailconf <<EOF
[$app]
enabled = true
port = $ports
filter = $app
logpath = $logpath
maxretry = $max_retry
EOF
tee $finalfail2banfilterconf <<EOF
[INCLUDES]
before = common.conf
[Definition]
failregex = $failregex
ignoreregex =
EOF
ynh_store_file_checksum "$finalfail2banjailconf"
ynh_store_file_checksum "$finalfail2banfilterconf"
if [ "$(lsb_release --codename --short)" != "jessie" ]; then
systemctl reload fail2ban
else
systemctl restart fail2ban
fi
local fail2ban_error="$(journalctl -u fail2ban | tail -n50 | grep "WARNING.*$app.*")"
if [ -n "$fail2ban_error" ]
then
echo "[ERR] Fail2ban failed to load the jail for $app" >&2
echo "WARNING${fail2ban_error#*WARNING}" >&2
fi
}
# Remove the dedicated fail2ban config (jail and filter conf files)
#
# usage: ynh_remove_fail2ban_config
ynh_remove_fail2ban_config () {
ynh_secure_remove "/etc/fail2ban/jail.d/$app.conf"
ynh_secure_remove "/etc/fail2ban/filter.d/$app.conf"
if [ "$(lsb_release --codename --short)" != "jessie" ]; then
systemctl reload fail2ban
else
systemctl restart fail2ban
fi
}
#=================================================
# Read the value of a key in a ynh manifest file
#
# usage: ynh_read_manifest manifest key
# | arg: -m, --manifest= - Path of the manifest to read
# | arg: -k, --key= - Name of the key to find
ynh_read_manifest () {
# Declare an array to define the options of this helper.
declare -Ar args_array=( [m]=manifest= [k]=manifest_key= )
local manifest
local manifest_key
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
python3 -c "import sys, json;print(json.load(open('$manifest', encoding='utf-8'))['$manifest_key'])"
}
# Read the upstream version from the manifest
# The version number in the manifest is defined by <upstreamversion>~ynh<packageversion>
# For example : 4.3-2~ynh3
# This include the number before ~ynh
# In the last example it return 4.3-2
#
# usage: ynh_app_upstream_version [-m manifest]
# | arg: -m, --manifest= - Path of the manifest to read
ynh_app_upstream_version () {
declare -Ar args_array=( [m]=manifest= )
local manifest
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
manifest="${manifest:-../manifest.json}"
if [ ! -e "$manifest" ]; then
manifest="../settings/manifest.json" # Into the restore script, the manifest is not at the same place
fi
version_key=$(ynh_read_manifest --manifest="$manifest" --manifest_key="version")
echo "${version_key/~ynh*/}"
}
# Read package version from the manifest
# The version number in the manifest is defined by <upstreamversion>~ynh<packageversion>
# For example : 4.3-2~ynh3
# This include the number after ~ynh
# In the last example it return 3
#
# usage: ynh_app_package_version [-m manifest]
# | arg: -m, --manifest= - Path of the manifest to read
ynh_app_package_version () {
declare -Ar args_array=( [m]=manifest= )
local manifest
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
manifest="${manifest:-../manifest.json}"
if [ ! -e "$manifest" ]; then
manifest="../settings/manifest.json" # Into the restore script, the manifest is not at the same place
fi
version_key=$(ynh_read_manifest --manifest="$manifest" --manifest_key="version")
echo "${version_key/*~ynh/}"
}
# Checks the app version to upgrade with the existing app version and returns:
# - UPGRADE_APP if the upstream app version has changed
# - UPGRADE_PACKAGE if only the YunoHost package has changed
#
## It stops the current script without error if the package is up-to-date
#
# This helper should be used to avoid an upgrade of an app, or the upstream part
# of it, when it's not needed
#
# To force an upgrade, even if the package is up to date,
# you have to set the variable YNH_FORCE_UPGRADE before.
# example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp
#
# usage: ynh_check_app_version_changed
ynh_check_app_version_changed () {
local force_upgrade=${YNH_FORCE_UPGRADE:-0}
local package_check=${PACKAGE_CHECK_EXEC:-0}
# By default, upstream app version has changed
local return_value="UPGRADE_APP"
local current_version=$(ynh_read_manifest --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" --manifest_key="version" || echo 1.0)
local current_upstream_version="$(ynh_app_upstream_version --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json")"
local update_version=$(ynh_read_manifest --manifest="../manifest.json" --manifest_key="version" || echo 1.0)
local update_upstream_version="$(ynh_app_upstream_version)"
if [ "$current_version" == "$update_version" ] ; then
# Complete versions are the same
if [ "$force_upgrade" != "0" ]
then
echo "Upgrade forced by YNH_FORCE_UPGRADE." >&2
unset YNH_FORCE_UPGRADE
elif [ "$package_check" != "0" ]
then
echo "Upgrade forced for package check." >&2
else
ynh_die "Up-to-date, nothing to do" 0
fi
elif [ "$current_upstream_version" == "$update_upstream_version" ] ; then
# Upstream versions are the same, only YunoHost package versions differ
return_value="UPGRADE_PACKAGE"
fi
echo $return_value
}
#=================================================
# Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started
#
# usage: ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ]
# | arg: -n, --service_name= - Name of the service to reload. Default : $app
# | arg: -a, --action= - Action to perform with systemctl. Default: start
# | arg: -l, --line_match= - Line to match - The line to find in the log to attest the service have finished to boot.
# If not defined it don't wait until the service is completely started.
# | arg: -p, --log_path= - Log file - Path to the log file. Default : /var/log/$app/$app.log
# | arg: -t, --timeout= - Timeout - The maximum time to wait before ending the watching. Default : 300 seconds.
# | arg: -e, --length= - Length of the error log : Default : 20
ynh_systemd_action() {
# Declare an array to define the options of this helper.
declare -Ar args_array=( [n]=service_name= [a]=action= [l]=line_match= [p]=log_path= [t]=timeout= [e]=length= )
local service_name
local action
local line_match
local length
local log_path
local timeout
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
local service_name="${service_name:-$app}"
local action=${action:-start}
local log_path="${log_path:-/var/log/$service_name/$service_name.log}"
local length=${length:-20}
local timeout=${timeout:-300}
# Start to read the log
if [[ -n "${line_match:-}" ]]
then
local templog="$(mktemp)"
# Following the starting of the app in its log
if [ "$log_path" == "systemd" ] ; then
# Read the systemd journal
journalctl -u $service_name -f --since=-45 > "$templog" &
else
# Read the specified log file
tail -F -n0 "$log_path" > "$templog" &
fi
# Get the PID of the tail command
local pid_tail=$!
fi
echo "${action^} the service $service_name" >&2
systemctl $action $service_name \
|| ( journalctl --lines=$length -u $service_name >&2 \
; test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2 \
; false )
# Start the timeout and try to find line_match
if [[ -n "${line_match:-}" ]]
then
local i=0
for i in $(seq 1 $timeout)
do
# Read the log until the sentence is found, that means the app finished to start. Or run until the timeout
if grep --quiet "$line_match" "$templog"
then
echo "The service $service_name has correctly started." >&2
break
fi
echo -n "." >&2
sleep 1
done
if [ $i -eq $timeout ]
then
echo "The service $service_name didn't fully started before the timeout." >&2
echo "Please find here an extract of the end of the log of the service $service_name:"
journalctl --lines=$length -u $service_name >&2
test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2
fi
echo ""
ynh_clean_check_starting
fi
}
# Clean temporary process and file used by ynh_check_starting
# (usually used in ynh_clean_setup scripts)
#
# usage: ynh_clean_check_starting
ynh_clean_check_starting () {
# Stop the execution of tail.
kill -s 15 $pid_tail 2>&1
ynh_secure_remove "$templog" 2>&1
}
#=================================================
# Print a message as INFO and show progression during an app script
#
# usage: ynh_script_progression --message=message [--weight=weight] [--time]
# | arg: -m, --message= - The text to print
# | arg: -w, --weight= - The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script.
# | arg: -t, --time= - Print the execution time since the last call to this helper. Especially usefull to define weights.
# | arg: -l, --last= - Use for the last call of the helper, to fill te progression bar.
increment_progression=0
previous_weight=0
# Define base_time when the file is sourced
base_time=$(date +%s)
ynh_script_progression () {
# Declare an array to define the options of this helper.
declare -Ar args_array=( [m]=message= [w]=weight= [t]=time [l]=last )
local message
local weight
local time
local last
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
weight=${weight:-1}
time=${time:-0}
last=${last:-0}
# Get execution time since the last $base_time
local exec_time=$(( $(date +%s) - $base_time ))
base_time=$(date +%s)
# Get the number of occurrences of 'ynh_script_progression' in the script. Except those are commented.
local helper_calls="$(grep --count "^[^#]*ynh_script_progression" $0)"
# Get the number of call with a weight value
local weight_calls=$(grep --perl-regexp --count "^[^#]*ynh_script_progression.*(--weight|-w )" $0)
# Get the weight of each occurrences of 'ynh_script_progression' in the script using --weight
local weight_valuesA="$(grep --perl-regexp "^[^#]*ynh_script_progression.*--weight" $0 | sed 's/.*--weight[= ]\([[:digit:]].*\)/\1/g')"
# Get the weight of each occurrences of 'ynh_script_progression' in the script using -w
local weight_valuesB="$(grep --perl-regexp "^[^#]*ynh_script_progression.*-w " $0 | sed 's/.*-w[= ]\([[:digit:]].*\)/\1/g')"
# Each value will be on a different line.
# Remove each 'end of line' and replace it by a '+' to sum the values.
local weight_values=$(( $(echo "$weight_valuesA" | tr '\n' '+') + $(echo "$weight_valuesB" | tr '\n' '+') 0 ))
# max_progression is a total number of calls to this helper.
# Less the number of calls with a weight value.
# Plus the total of weight values
local max_progression=$(( $helper_calls - $weight_calls + $weight_values ))
# Increment each execution of ynh_script_progression in this script by the weight of the previous call.
increment_progression=$(( $increment_progression + $previous_weight ))
# Store the weight of the current call in $previous_weight for next call
previous_weight=$weight
# Set the scale of the progression bar
local scale=20
# progress_string(1,2) should have the size of the scale.
local progress_string1="####################"
local progress_string0="...................."
# Reduce $increment_progression to the size of the scale
if [ $last -eq 0 ]
then
local effective_progression=$(( $increment_progression * $scale / $max_progression ))
# If last is specified, fill immediately the progression_bar
else
local effective_progression=$scale
fi
# Build $progression_bar from progress_string(1,2) according to $effective_progression
local progression_bar="${progress_string1:0:$effective_progression}${progress_string0:0:$(( $scale - $effective_progression ))}"
local print_exec_time=""
if [ $time -eq 1 ]
then
print_exec_time=" [$(date +%Hh%Mm,%Ss --date="0 + $exec_time sec")]"
fi
ynh_print_info "[$progression_bar] > ${message}${print_exec_time}"
}
#================================================= #=================================================
# EXPERIMENTAL HELPERS # EXPERIMENTAL HELPERS
#================================================= #=================================================
@ -660,6 +316,8 @@ ynh_maintenance_mode_ON () {
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
fi fi
mkdir -p /var/www/html/
# Create an html to serve as maintenance notice # Create an html to serve as maintenance notice
echo "<!DOCTYPE html> echo "<!DOCTYPE html>
<html> <html>
@ -730,128 +388,366 @@ ynh_maintenance_mode_OFF () {
#================================================= #=================================================
# Download and check integrity of a file from app.src_file # Create a changelog for an app after an upgrade from the file CHANGELOG.md.
# #
# The file conf/app.src_file need to contains: # usage: ynh_send_readme_to_admin [--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)
# #
# FILE_URL=Address to download the file # The changelog is printed into the file ./changelog and ./changelog_lite
# FILE_SUM=Control sum ynh_app_changelog () {
# # (Optional) Program to check the integrity (sha256sum, md5sum...)
# # default: sha256
# FILE_SUM_PRG=sha256
# # (Optionnal) Name of the local archive (offline setup support)
# # default: Name of the downloaded file.
# FILENAME=example.deb
#
# usage: ynh_download_file --dest_dir="/destination/directory" [--source_id=myfile]
# | arg: -d, --dest_dir= - Directory where to download the file
# | arg: -s, --source_id= - Name of the source file 'app.src_file' if it isn't '$app'
ynh_download_file () {
# Declare an array to define the options of this helper. # Declare an array to define the options of this helper.
declare -Ar args_array=( [d]=dest_dir= [s]=source_id= ) local legacy_args=foc
local dest_dir declare -Ar args_array=( [f]=format= [o]=output= [c]=changelog= )
local source_id local format
local output
local changelog
# Manage arguments with getopts # Manage arguments with getopts
ynh_handle_getopts_args "$@" ynh_handle_getopts_args "$@"
format=${format:-markdown}
output=${output:-changelog}
changelog=${changelog:-../CHANGELOG.md}
source_id=${source_id:-app} # If the argument is not given, source_id equals "$app" local original_changelog="$changelog"
local temp_changelog="changelog_temp"
local final_changelog="$output"
# Load value from configuration file (see above for a small doc about this file if [ ! -n "$original_changelog" ]
# format)
local src_file="$YNH_CWD/../conf/${source_id}.src_file"
# If the src_file doesn't exist, use the backup path instead, with a "settings" directory
if [ ! -e "$src_file" ]
then then
src_file="$YNH_CWD/../settings/conf/${source_id}.src_file" echo "No changelog available..." > "$final_changelog"
fi echo "No changelog available..." > "${final_changelog}_lite"
local file_url=$(grep 'FILE_URL=' "$src_file" | cut -d= -f2-) return 0
local file_sum=$(grep 'FILE_SUM=' "$src_file" | cut -d= -f2-)
local file_sumprg=$(grep 'FILE_SUM_PRG=' "$src_file" | cut -d= -f2-)
local filename=$(grep 'FILENAME=' "$src_file" | cut -d= -f2-)
# Default value
file_sumprg=${file_sumprg:-sha256sum}
if [ "$filename" = "" ] ; then
filename="$(basename "$file_url")"
fi
local local_src="/opt/yunohost-apps-src/${YNH_APP_ID}/${filename}"
if test -e "$local_src"
then # Use the local source file if it is present
cp $local_src $filename
else # If not, download the source
local out=`wget -nv -O $filename $file_url 2>&1` || ynh_print_err $out
fi fi
# Check the control sum local current_version=$(ynh_read_manifest --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" --manifest_key="version")
echo "${file_sum} ${filename}" | ${file_sumprg} -c --status \ local update_version=$(ynh_read_manifest --manifest="../manifest.json" --manifest_key="version")
|| ynh_die "Corrupt file"
# Create the destination directory, if it's not already. # Get the line of the version to update to into the changelog
mkdir -p "$dest_dir" 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
update_version_line=$(grep --max-count=1 --line-number "^##" "$original_changelog" | cut -d':' -f1)
fi
# Move the file to its destination # Get the length of the complete changelog.
mv $filename $dest_dir 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"
# 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- \2 \3" --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
# 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"
# 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
echo "No changes from the changelog..." > "$final_changelog"
fi
if [ $(wc --words "${final_changelog}_lite" | awk '{print $1}') -eq 0 ]
then
echo "No significative changes from the changelog..." > "${final_changelog}_lite"
fi
} }
#================================================= #=================================================
# Create a changelog for an app after an upgrade. # Check the amount of available RAM
# #
# The changelog is printed into the file ./changelog for the time of the upgrade. # 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.
# In order to create a changelog, ynh_app_changelog will get info from /etc/yunohost/apps/$app/status.json # If --required isn't set, the helper will print the amount of RAM, in Mb.
# In order to find the current commit use by the app. # | arg: -s, --no_swap - Ignore swap
# The remote repository, and the branch. # | arg: -o, --only_swap - Ignore real RAM, consider only swap.
# The changelog will be only the commits since the current revision. # | arg: -f, --free_ram - Count only free RAM, not the total amount of RAM available.
# ynh_check_ram () {
# Because of the need of those info, ynh_app_changelog works only # Declare an array to define the options of this helper.
# with apps that have been installed from a list. declare -Ar args_array=( [r]=required= [s]=no_swap [o]=only_swap [f]=free_ram )
# local required
# usage: ynh_app_changelog local no_swap
ynh_app_changelog () { local only_swap
get_value_from_settings () # Manage arguments with getopts
{ ynh_handle_getopts_args "$@"
local value="$1" required=${required:-}
# Extract a value from the status.json file of an installed app. no_swap=${no_swap:-0}
only_swap=${only_swap:-0}
grep "$value\": \"" /etc/yunohost/apps/$app/status.json | sed "s/.*$value\": \"\([^\"]*\).*/\1/" 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 current_revision="$(get_value_from_settings revision)" local free_ram=$(vmstat --stats --unit M | grep "free memory" | awk '{print $1}')
local repo="$(get_value_from_settings url)" local free_swap=$(vmstat --stats --unit M | grep "free swap" | awk '{print $1}')
local branch="$(get_value_from_settings branch)" local free_ram_swap=$(( free_ram + free_swap ))
# ynh_app_changelog works only with an app installed from a list.
if [ -z "$current_revision" ] || [ -z "$repo" ] || [ -z "$branch" ] # Use the total amount of ram
local ram=$total_ram_swap
if [ $free_ram -eq 1 ]
then then
ynh_print_warn "Unable to build the changelog..." # Use the total amount of free ram
touch changelog 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 return 0
fi fi
# Fetch the history of the repository, without cloning it # If no RAM is required, return the amount of available ram.
mkdir git_history else
(cd git_history echo $ram
ynh_exec_warn_less git init fi
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. # Define the values to configure php-fpm
# 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) # usage: ynh_get_scalable_phpfpm --usage=usage --footprint=footprint [--print]
# Remove 'Merge pull request' commits # | arg: -f, --footprint - Memory footprint of the service (low/medium/high).
sed -i '/Merge pull request #[[:digit:]]* from/d' changelog # low - Less than 20Mb of ram by pool.
# As well as conflict resolving commits # medium - Between 20Mb and 40Mb of ram by pool.
sed -i '/Merge branch .* into/d' changelog # 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.
# Get the value of admin_mail_html # To have this value, use the following command and stress the service.
admin_mail_html=$(ynh_app_setting_get $app admin_mail_html) # watch -n0.5 ps -o user,cmd,%cpu,rss -u APP
admin_mail_html="${admin_mail_html:-0}" #
# | arg: -u, --usage - Expected usage of the service (low/medium/high).
# If a html email is required. Apply html to the changelog. # low - Personal usage, behind the sso.
if [ "$admin_mail_html" -eq 1 ] # medium - Low usage, few people or/and publicly accessible.
then # high - High usage, frequently visited website.
sed -in-place "s@\*(\([[:alnum:]]*\)) -> \(.*\)@* __URL_TAG1__\2__URL_TAG2__${repo}/commit/\1__URL_TAG3__@g" changelog #
# | 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_check_ram --no_swap)
less0() {
# 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=$(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 ]
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
fi fi
} }

View file

@ -12,11 +12,10 @@ source /usr/share/yunohost/helpers
#================================================= #=================================================
# RETRIEVE ARGUMENTS # RETRIEVE ARGUMENTS
#================================================= #=================================================
ynh_script_progression --message="Retrieve arguments from the manifest"
app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#================================================= #=================================================
# CHECK IF ARGUMENTS ARE CORRECT # CHECK IF ARGUMENTS ARE CORRECT
@ -31,7 +30,7 @@ final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# CLEAN ALL BACKUP FILES # CLEAN ALL BACKUP FILES
#================================================= #=================================================
ynh_script_progression --message="Clean all backup files" --weight=9 ynh_script_progression --message="Cleaning all backup files..." --weight=9
# Get the backup directory from the config file # Get the backup directory from the config file
backup_dir="$(grep "^backup_dir=" "$final_path/Backup_list.conf" | cut -d= -f2)" backup_dir="$(grep "^backup_dir=" "$final_path/Backup_list.conf" | cut -d= -f2)"
@ -40,8 +39,8 @@ while read directory <&3
do do
if [ -n "$directory" ] if [ -n "$directory" ]
then then
ynh_print_info "Clean backup directory $directory" >&2 ynh_print_info --message="Clean backup directory $directory"
ynh_secure_remove "$directory" ynh_secure_remove --file="$directory"
fi fi
done 3<<< $(find "$backup_dir" -maxdepth 1 -mindepth 1 -type d) done 3<<< $(find "$backup_dir" -maxdepth 1 -mindepth 1 -type d)

View file

@ -12,11 +12,10 @@ source /usr/share/yunohost/helpers
#================================================= #=================================================
# RETRIEVE ARGUMENTS # RETRIEVE ARGUMENTS
#================================================= #=================================================
ynh_script_progression --message="Retrieve arguments from the manifest"
app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#================================================= #=================================================
# CHECK IF ARGUMENTS ARE CORRECT # CHECK IF ARGUMENTS ARE CORRECT
@ -31,7 +30,7 @@ final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# FORCE A NEW BACKUP # FORCE A NEW BACKUP
#================================================= #=================================================
ynh_script_progression --message="Force a new backup" --weight=9 ynh_script_progression --message="Forcing a new backup..." --weight=9
ynh_exec_warn nice -n10 $final_path/archivist.sh ynh_exec_warn nice -n10 $final_path/archivist.sh

View file

@ -12,13 +12,12 @@ source /usr/share/yunohost/helpers
#================================================= #=================================================
# RETRIEVE ARGUMENTS # RETRIEVE ARGUMENTS
#================================================= #=================================================
ynh_script_progression --message="Retrieve arguments from the manifest"
app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
encrypt=$(ynh_app_setting_get $app encrypt) encrypt=$(ynh_app_setting_get --app=$app --key=encrypt)
core_backup=$(ynh_app_setting_get $app core_backup) core_backup=$(ynh_app_setting_get --app=$app --key=core_backup)
apps_backup=$(ynh_app_setting_get $app apps_backup) apps_backup=$(ynh_app_setting_get --app=$app --key=apps_backup)
#================================================= #=================================================
# SORT OUT THE CONFIG FILE TO HANDLE # SORT OUT THE CONFIG FILE TO HANDLE
@ -35,10 +34,10 @@ fi
#================================================= #=================================================
# RESET THE CONFIG FILE # RESET THE CONFIG FILE
#================================================= #=================================================
ynh_script_progression --message="Reset the config file $file" ynh_script_progression --message="Reseting the config file $file"
# Verify the checksum and backup the file if it's different # Verify the checksum and backup the file if it's different
ynh_backup_if_checksum_is_different "$config_file" ynh_backup_if_checksum_is_different --file="$config_file"
if [ "$file" = "Backup_list.conf" ] if [ "$file" = "Backup_list.conf" ]
then then
@ -48,8 +47,8 @@ then
# Recreate the default config # Recreate the default config
backup_dir="/home/yunohost.app/${app}/backup" backup_dir="/home/yunohost.app/${app}/backup"
enc_backup_dir="/home/yunohost.app/${app}/encrypted_backup" enc_backup_dir="/home/yunohost.app/${app}/encrypted_backup"
ynh_replace_string "^backup_dir=.*" "backup_dir=$backup_dir" "$config_file" ynh_replace_string --match_string="^backup_dir=.*" --replace_string="backup_dir=$backup_dir" --target_file="$config_file"
ynh_replace_string "^enc_backup_dir=.*" "enc_backup_dir=$enc_backup_dir" "$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 ] if [ $encrypt -eq 1 ]
then then
@ -59,8 +58,8 @@ then
encrypt=false encrypt=false
passkey=na passkey=na
fi fi
ynh_replace_string "^encrypt=.*" "encrypt=$encrypt" "$config_file" ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
ynh_replace_string "^cryptpass=.*" "cryptpass=$passkey" "$config_file" ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
if [ $core_backup -eq 1 ] if [ $core_backup -eq 1 ]
then then
@ -68,20 +67,20 @@ then
else else
core_backup=false core_backup=false
fi fi
ynh_replace_string "^ynh_core_backup=.*" "ynh_core_backup=$core_backup" "$config_file" ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$core_backup" --target_file="$config_file"
if [ $apps_backup -eq 1 ] if [ $apps_backup -eq 1 ]
then then
# Add all current applications to the backup # Add all current applications to the backup
while read backup_app while read backup_app
do do
ynh_replace_string "^ynh_app_backup=$" "ynh_app_backup=$backup_app\n&" "$config_file" 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: //')" done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
fi fi
fi fi
# Calculate and store the config file checksum into the app settings # Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "$config_file" ynh_store_file_checksum --file="$config_file"
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT

View file

@ -19,39 +19,38 @@ ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_script_progression --message="Load settings" ynh_script_progression --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#================================================= #=================================================
# STANDARD BACKUP STEPS # STANDARD BACKUP STEPS
#================================================= #=================================================
# BACKUP THE APP MAIN DIR # BACKUP THE APP MAIN DIR
#================================================= #=================================================
ynh_script_progression --message="Backup the app main dir" ynh_script_progression --message="Backing up the main app directory..."
ynh_backup "$final_path" ynh_backup --src_path="$final_path"
#================================================= #=================================================
# SPECIFIC BACKUP # SPECIFIC BACKUP
#================================================= #=================================================
# BACKUP LOGROTATE # BACKUP LOGROTATE
#================================================= #=================================================
ynh_script_progression --message="Backup logrotate configuration" ynh_script_progression --message="Backing up logrotate configuration..."
ynh_backup "/etc/logrotate.d/$app" ynh_backup --src_path="/etc/logrotate.d/$app"
#================================================= #=================================================
# BACKUP THE CRON FILE # BACKUP THE CRON FILE
#================================================= #=================================================
ynh_script_progression --message="Backup cron file"
ynh_backup "/etc/cron.d/$app" ynh_backup --src_path="/etc/cron.d/$app"
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================
ynh_script_progression --message="Backup completed" --last ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last

View file

@ -15,7 +15,7 @@ source /usr/share/yunohost/helpers
app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#================================================= #=================================================
# SPECIFIC CODE # SPECIFIC CODE
@ -106,20 +106,20 @@ apply_config() {
# Change the password if needed # Change the password if needed
if [ "$encrypt" = "true" ]; then if [ "$encrypt" = "true" ]; then
ynh_print_OFF ynh_print_OFF
test -n "$encrypt_password" || ynh_die "The password for encryption can't be empty if you choose to enable encryption." test -n "$encrypt_password" || ynh_die --message="The password for encryption can't be empty if you choose to enable encryption."
ynh_print_ON ynh_print_ON
# Replace the password by the previous one # Replace the password by the previous one
passkey="$final_path/passkey" passkey="$final_path/passkey"
ynh_print_OFF; echo "$encrypt_password" > "$passkey"; ynh_print_ON ynh_print_OFF; echo "$encrypt_password" > "$passkey"; ynh_print_ON
chmod 400 "$passkey" chmod 400 "$passkey"
ynh_replace_string "^cryptpass=.*" "cryptpass=$passkey" "$config_file" ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
fi fi
# Change encrypt in the config file # Change encrypt in the config file
ynh_replace_string "^encrypt=.*" "encrypt=$encrypt" "$config_file" ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
# Change ynh_core_backup in the config file # Change ynh_core_backup in the config file
ynh_replace_string "^ynh_core_backup=.*" "ynh_core_backup=$ynh_core_backup" "$config_file" ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$ynh_core_backup" --target_file="$config_file"
# Change ynh_app_backup in the config file # Change ynh_app_backup in the config file
if [ "$ynh_app_backup" = "true" ] && [ "$old_ynh_app_backup" = "false" ] if [ "$ynh_app_backup" = "true" ] && [ "$old_ynh_app_backup" = "false" ]
@ -128,8 +128,8 @@ apply_config() {
# Add all current applications to the backup # Add all current applications to the backup
while read backup_app while read backup_app
do do
ynh_print_info "Add a backup for the app $backup_app." >&2 ynh_print_info --message="Add a backup for the app $backup_app."
ynh_replace_string "^ynh_app_backup=$" "ynh_app_backup=$backup_app\n&" "$config_file" 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: //')" done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
elif [ "$ynh_app_backup" = "false" ] && [ "$old_ynh_app_backup" = "true" ] elif [ "$ynh_app_backup" = "false" ] && [ "$old_ynh_app_backup" = "true" ]
then then
@ -139,7 +139,7 @@ apply_config() {
fi fi
# Change frequency in the cron file and store the value into the settings # Change frequency in the cron file and store the value into the settings
ynh_app_setting_set $app frequency "$frequency" ynh_app_setting_set --app=$app --key=frequency --value="$frequency"
if [ "$frequency" = "Daily" ]; then if [ "$frequency" = "Daily" ]; then
cron_freq="0 2 * * *" cron_freq="0 2 * * *"
run_freq="every day" run_freq="every day"
@ -156,18 +156,18 @@ apply_config() {
cron_freq="0 2 1 * *" cron_freq="0 2 1 * *"
run_freq="once a month on the first sunday" run_freq="once a month on the first sunday"
fi fi
ynh_replace_string ".* root" "$cron_freq root" /etc/cron.d/$app ynh_replace_string --match_string=".* root" --replace_string="$cron_freq root" --target_file=/etc/cron.d/$app
# Change max_size in the config file # Change max_size in the config file
ynh_replace_string "^max_size=.*" "max_size=$max_size" "$config_file" ynh_replace_string --match_string="^max_size=.*" --replace_string="max_size=$max_size" --target_file="$config_file"
# Set overwrite_cron # Set overwrite_cron
overwrite_cron=$(bool_to_01 $overwrite_cron) overwrite_cron=$(bool_to_01 $overwrite_cron)
ynh_app_setting_set $app overwrite_cron "$overwrite_cron" ynh_app_setting_set --app=$app --key=overwrite_cron --value="$overwrite_cron"
# Set admin_mail_html # Set admin_mail_html
admin_mail_html=$(bool_to_01 $admin_mail_html) admin_mail_html=$(bool_to_01 $admin_mail_html)
ynh_app_setting_set $app admin_mail_html "$admin_mail_html" ynh_app_setting_set --app=$app --key=admin_mail_html --value="$admin_mail_html"
} }
#================================================= #=================================================

View file

@ -21,7 +21,6 @@ ynh_abort_if_errors
#================================================= #=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST # RETRIEVE ARGUMENTS FROM THE MANIFEST
#================================================= #=================================================
ynh_script_progression --message="Retrieve arguments from the manifest"
encrypt=$YNH_APP_ARG_ENCRYPT encrypt=$YNH_APP_ARG_ENCRYPT
ynh_print_OFF; encryption_pwd=$YNH_APP_ARG_ENCRYPTION_PWD; ynh_print_ON ynh_print_OFF; encryption_pwd=$YNH_APP_ARG_ENCRYPTION_PWD; ynh_print_ON
@ -34,36 +33,36 @@ app=$YNH_APP_INSTANCE_NAME
#================================================= #=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#================================================= #=================================================
ynh_script_progression --message="Check if the app can be installed" ynh_script_progression --message="Validating installation parameters..."
final_path=/opt/yunohost/$app final_path=/opt/yunohost/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder" test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
if [ $encrypt -eq 1 ]; then if [ $encrypt -eq 1 ]; then
ynh_print_OFF ynh_print_OFF
test -n "$encryption_pwd" || ynh_die "encryption_pwd can't be empty if you choose to enable encryption." test -n "$encryption_pwd" || ynh_die --message="encryption_pwd can't be empty if you choose to enable encryption."
ynh_print_ON ynh_print_ON
fi fi
#================================================= #=================================================
# STORE SETTINGS FROM MANIFEST # STORE SETTINGS FROM MANIFEST
#================================================= #=================================================
ynh_script_progression --message="Store settings from manifest" --weight=3 ynh_script_progression --message="Storing installation settings..." --weight=3
ynh_app_setting_set $app frequency "$frequency" ynh_app_setting_set --app=$app --key=frequency --value="$frequency"
ynh_app_setting_set $app encrypt "$encrypt" ynh_app_setting_set --app=$app --key=encrypt --value="$encrypt"
ynh_app_setting_set $app core_backup "$core_backup" ynh_app_setting_set --app=$app --key=core_backup --value="$core_backup"
ynh_app_setting_set $app apps_backup "$apps_backup" ynh_app_setting_set --app=$app --key=apps_backup --value="$apps_backup"
ynh_app_setting_set $app overwrite_cron "1" ynh_app_setting_set --app=$app --key=overwrite_cron --value=1
ynh_app_setting_set $app admin_mail_html "1" ynh_app_setting_set --app=$app --key=admin_mail_html --value=1
#================================================= #=================================================
# STANDARD MODIFICATIONS # STANDARD MODIFICATIONS
#================================================= #=================================================
# INSTALL DEPENDENCIES # INSTALL DEPENDENCIES
#================================================= #=================================================
ynh_script_progression --message="Install dependencies" --weight=15 ynh_script_progression --message="Installing dependencies..." --weight=15
# Valid the fucking debconf message # Valid the fucking debconf message
# To find this, install the package, install also debconf-utils # To find this, install the package, install also debconf-utils
@ -74,11 +73,11 @@ ynh_install_app_dependencies $app_depencencies
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_script_progression --message="Download, check and unpack source" --weight=3 ynh_script_progression --message="Setting up source files..." --weight=3
ynh_app_setting_set $app final_path $final_path ynh_app_setting_set --app=$app --key=final_path --value=$final_path
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
ynh_setup_source "$final_path" ynh_setup_source --dest_dir="$final_path"
#================================================= #=================================================
# SPECIFIC SETUP # SPECIFIC SETUP
@ -93,13 +92,13 @@ mkdir -p "$backup_dir"
#================================================= #=================================================
# CONFIGURE ARCHIVIST # CONFIGURE ARCHIVIST
#================================================= #=================================================
ynh_script_progression --message="Configure Archivist" --weight=2 ynh_script_progression --message="Configuring Archivist..." --weight=2
config_file="$final_path/Backup_list.conf" config_file="$final_path/Backup_list.conf"
cp "$final_path/Backup_list.conf.default" "$config_file" cp "$final_path/Backup_list.conf.default" "$config_file"
ynh_replace_string "^backup_dir=.*" "backup_dir=$backup_dir" "$config_file" ynh_replace_string --match_string="^backup_dir=.*" --replace_string="backup_dir=$backup_dir" --target_file="$config_file"
ynh_replace_string "^enc_backup_dir=.*" "enc_backup_dir=$enc_backup_dir" "$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 ] if [ $encrypt -eq 1 ]
then then
@ -112,8 +111,8 @@ else
encrypt=false encrypt=false
passkey=na passkey=na
fi fi
ynh_replace_string "^encrypt=.*" "encrypt=$encrypt" "$config_file" ynh_replace_string --match_string="^encrypt=.*" --replace_string="encrypt=$encrypt" --target_file="$config_file"
ynh_replace_string "^cryptpass=.*" "cryptpass=$passkey" "$config_file" ynh_replace_string --match_string="^cryptpass=.*" --replace_string="cryptpass=$passkey" --target_file="$config_file"
if [ $core_backup -eq 1 ] if [ $core_backup -eq 1 ]
then then
@ -121,19 +120,19 @@ then
else else
core_backup=false core_backup=false
fi fi
ynh_replace_string "^ynh_core_backup=.*" "ynh_core_backup=$core_backup" "$config_file" ynh_replace_string --match_string="^ynh_core_backup=.*" --replace_string="ynh_core_backup=$core_backup" --target_file="$config_file"
if [ $apps_backup -eq 1 ] if [ $apps_backup -eq 1 ]
then then
# Add all current applications to the backup # Add all current applications to the backup
while read backup_app while read backup_app
do do
ynh_replace_string "^ynh_app_backup=$" "ynh_app_backup=$backup_app\n&" "$config_file" 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: //')" done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')"
fi fi
# Calculate and store the config file checksum into the app settings # Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "$config_file" ynh_store_file_checksum --file="$config_file"
#================================================= #=================================================
# STRETCH COMPATIBILITY # STRETCH COMPATIBILITY
@ -141,18 +140,18 @@ ynh_store_file_checksum "$config_file"
if is_stretch if is_stretch
then then
ynh_replace_string "yunohost backup create --ignore-apps" "yunohost backup create" "$final_path/archivist.sh" ynh_replace_string --match_string="yunohost backup create --ignore-apps" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
ynh_replace_string "yunohost backup create --ignore-system" "yunohost backup create" "$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 fi
#================================================= #=================================================
# SET THE CRON FILE # SET THE CRON FILE
#================================================= #=================================================
ynh_script_progression --message="Set the cron file" ynh_script_progression --message="Configuring the cron file..."
cp ../conf/cron /etc/cron.d/$app cp ../conf/cron /etc/cron.d/$app
ynh_replace_string "__FINALPATH__" "$final_path" /etc/cron.d/$app ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/cron.d/$app
ynh_replace_string "__APP__" "$app" /etc/cron.d/$app ynh_replace_string --match_string="__APP__" --replace_string=$app --target_file=/etc/cron.d/$app
if [ "$frequency" = "Daily" ]; then if [ "$frequency" = "Daily" ]; then
cron_freq="0 2 * * *" cron_freq="0 2 * * *"
run_freq="every day" run_freq="every day"
@ -169,10 +168,10 @@ else # Monthly
cron_freq="0 2 1 * *" cron_freq="0 2 1 * *"
run_freq="once a month on the first sunday" run_freq="once a month on the first sunday"
fi fi
ynh_replace_string "__FREQUENCY__" "$cron_freq" /etc/cron.d/$app ynh_replace_string --match_string="__FREQUENCY__" --replace_string="$cron_freq" --target_file=/etc/cron.d/$app
# Calculate and store the config file checksum into the app settings # Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "/etc/cron.d/$app" ynh_store_file_checksum --file="/etc/cron.d/$app"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -186,7 +185,7 @@ chown -R root: $final_path
#================================================= #=================================================
# SETUP LOGROTATE # SETUP LOGROTATE
#================================================= #=================================================
ynh_script_progression --message="Configure logrotate" ynh_script_progression --message="Configuring log rotation..."
mkdir -p /var/log/$app mkdir -p /var/log/$app
# Use logrotate to manage application logfile(s) # Use logrotate to manage application logfile(s)
@ -196,10 +195,10 @@ ynh_use_logrotate
# PRINT INFORMATION # PRINT INFORMATION
#================================================= #=================================================
Informations="To add recipients or to modify the files or apps to backup, Informations="
To add recipients or to modify the files or apps to backup,
please have a look to the config file $config_file" please have a look to the config file $config_file"
ynh_print_info " ynh_print_info --message="$Informations"
$Informations" >&2
#================================================= #=================================================
# SEND A README FOR THE ADMIN # SEND A README FOR THE ADMIN
@ -222,7 +221,6 @@ admin_panel="https://$(grep portal_domain /etc/ssowat/conf.json | cut -d'"' -f4)
ynh_print_OFF ynh_print_OFF
echo "${encrypt_message}Archivist is going to run $run_freq. echo "${encrypt_message}Archivist is going to run $run_freq.
If you want to change the frequency, have a look to the file /etc/cron.d/$app. If you want to change the frequency, have a look to the file /etc/cron.d/$app.
$Informations $Informations
Please read the __URL_TAG1__documentation__URL_TAG2__https://github.com/maniackcrudelis/archivist/blob/master/Configuration.md__URL_TAG3__ about the configuration of archivist for more information. Please read the __URL_TAG1__documentation__URL_TAG2__https://github.com/maniackcrudelis/archivist/blob/master/Configuration.md__URL_TAG3__ about the configuration of archivist for more information.
@ -232,10 +230,10 @@ You can also find some specific actions for this app by using the experimental _
If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/archivist_ynh__URL_TAG3__." > mail_to_send If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/archivist_ynh__URL_TAG3__." > mail_to_send
ynh_print_ON ynh_print_ON
ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type="install" ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type=install
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================
ynh_script_progression --message="Installation completed" --last ynh_script_progression --message="Installation of $app completed" --last

View file

@ -12,18 +12,18 @@ source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_script_progression --message="Load settings" --weight=2 ynh_script_progression --message="Loading installation settings..." --weight=2
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#================================================= #=================================================
# STANDARD REMOVE # STANDARD REMOVE
#================================================= #=================================================
# REMOVE DEPENDENCIES # REMOVE DEPENDENCIES
#================================================= #=================================================
ynh_script_progression --message="Remove dependencies" --weight=7 ynh_script_progression --message="Removing dependencies..." --weight=7
# Remove metapackage and its dependencies # Remove metapackage and its dependencies
ynh_remove_app_dependencies ynh_remove_app_dependencies
@ -31,15 +31,15 @@ ynh_remove_app_dependencies
#================================================= #=================================================
# REMOVE APP MAIN DIR # REMOVE APP MAIN DIR
#================================================= #=================================================
ynh_script_progression --message="Remove app main directory" ynh_script_progression --message="Removing app main directory..."
# Remove the app directory securely # Remove the app directory securely
ynh_secure_remove "$final_path" ynh_secure_remove --file="$final_path"
#================================================= #=================================================
# REMOVE LOGROTATE CONFIGURATION # REMOVE LOGROTATE CONFIGURATION
#================================================= #=================================================
ynh_script_progression --message="Remove logrotate configuration" ynh_script_progression --message="Removing logrotate configuration..."
# Remove the app-specific logrotate config # Remove the app-specific logrotate config
ynh_remove_logrotate ynh_remove_logrotate
@ -51,15 +51,15 @@ ynh_remove_logrotate
#================================================= #=================================================
# Remove a cron file # Remove a cron file
ynh_secure_remove "/etc/cron.d/$app" ynh_secure_remove --file="/etc/cron.d/$app"
ynh_script_progression --message="Remove backup directory" --weight=5 ynh_script_progression --message="Removing backup directory..." --weight=5
# Remove the backup directory # Remove the backup directory
ynh_secure_remove "/home/yunohost.app/${app}/backup" ynh_secure_remove --file="/home/yunohost.app/$app/backup"
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================
ynh_script_progression --message="Deletion completed" --last ynh_script_progression --message="Removal of $app completed" --last

View file

@ -21,27 +21,28 @@ ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_script_progression --message="Load settings" ynh_script_progression --message="Loading settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#================================================= #=================================================
# CHECK IF THE APP CAN BE RESTORED # CHECK IF THE APP CAN BE RESTORED
#================================================= #=================================================
ynh_script_progression --message="Validating restoration parameters..."
test ! -d $final_path \ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die --message="There is already a directory: $final_path "
#================================================= #=================================================
# STANDARD RESTORATION STEPS # STANDARD RESTORATION STEPS
#================================================= #=================================================
# RESTORE THE APP MAIN DIR # RESTORE THE APP MAIN DIR
#================================================= #=================================================
ynh_script_progression --message="Restore the app main directory" ynh_script_progression --message="Restoring the app main directory..."
ynh_restore_file "$final_path" ynh_restore_file --origin_path="$final_path"
#================================================= #=================================================
# STRETCH COMPATIBILITY # STRETCH COMPATIBILITY
@ -49,8 +50,8 @@ ynh_restore_file "$final_path"
if is_stretch if is_stretch
then then
ynh_replace_string "yunohost backup create --ignore-apps" "yunohost backup create" "$final_path/archivist.sh" ynh_replace_string --match_string="yunohost backup create --ignore-apps" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
ynh_replace_string "yunohost backup create --ignore-system" "yunohost backup create" "$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 fi
#================================================= #=================================================
@ -58,7 +59,7 @@ fi
#================================================= #=================================================
# REINSTALL DEPENDENCIES # REINSTALL DEPENDENCIES
#================================================= #=================================================
ynh_script_progression --message="Reinstall dependencies" --weight=17 ynh_script_progression --message="Reinstalling dependencies..." --weight=17
# Valid the fucking debconf message # Valid the fucking debconf message
# To find this, install the package, install also debconf-utils # To find this, install the package, install also debconf-utils
@ -71,13 +72,13 @@ ynh_install_app_dependencies $app_depencencies
#================================================= #=================================================
mkdir -p /var/log/$app mkdir -p /var/log/$app
ynh_restore_file "/etc/logrotate.d/$app" ynh_restore_file --origin_path="/etc/logrotate.d/$app"
#================================================= #=================================================
# RESTORE THE CRON FILE # RESTORE THE CRON FILE
#================================================= #=================================================
ynh_restore_file "/etc/cron.d/$app" ynh_restore_file --origin_path="/etc/cron.d/$app"
#================================================= #=================================================
# RECREATE DIRECTORIES # RECREATE DIRECTORIES
@ -102,10 +103,10 @@ You can also find some specific actions for this app by using the experimental _
If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/archivist_ynh__URL_TAG3__." > mail_to_send If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/archivist_ynh__URL_TAG3__." > mail_to_send
ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type="restore" ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type=restore
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================
ynh_script_progression --message="Restoration completed" --last ynh_script_progression --message="Restoration completed for $app" --last

View file

@ -14,16 +14,16 @@ source _variables
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_script_progression --message="Load settings" --weight=3 ynh_script_progression --message="Loading installation settings..." --weight=3
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
frequency="$(ynh_app_setting_get $app frequency)" frequency="$(ynh_app_setting_get --app=$app --key=frequency)"
encrypt=$(ynh_app_setting_get $app encrypt) encrypt=$(ynh_app_setting_get --app=$app --key=encrypt)
core_backup=$(ynh_app_setting_get $app core_backup) core_backup=$(ynh_app_setting_get --app=$app --key=core_backup)
apps_backup=$(ynh_app_setting_get $app apps_backup) apps_backup=$(ynh_app_setting_get --app=$app --key=apps_backup)
overwrite_cron=$(ynh_app_setting_get $app overwrite_cron) overwrite_cron=$(ynh_app_setting_get --app=$app --key=overwrite_cron)
#================================================= #=================================================
# CHECK VERSION # CHECK VERSION
@ -34,7 +34,7 @@ upgrade_type=$(ynh_check_app_version_changed)
#================================================= #=================================================
# ENSURE DOWNWARD COMPATIBILITY # ENSURE DOWNWARD COMPATIBILITY
#================================================= #=================================================
ynh_script_progression --message="Ensure downward compatibility" ynh_script_progression --message="Ensuring downward compatibility..."
# If encrypt doesn't exist, create it # If encrypt doesn't exist, create it
if [ -z "$encrypt" ]; then if [ -z "$encrypt" ]; then
@ -44,38 +44,38 @@ if [ -z "$encrypt" ]; then
else else
encrypt=0 encrypt=0
fi fi
ynh_app_setting_set $app encrypt $encrypt ynh_app_setting_set --app=$app --key=encrypt --value=$encrypt
fi fi
# If core_backup doesn't exist, create it # If core_backup doesn't exist, create it
if [ -z "$core_backup" ]; then if [ -z "$core_backup" ]; then
core_backup="$(grep "^ynh_core_backup=" "$final_path/Backup_list.conf" | cut -d= -f2)" core_backup="$(grep "^ynh_core_backup=" "$final_path/Backup_list.conf" | cut -d= -f2)"
ynh_app_setting_set $app core_backup $core_backup ynh_app_setting_set --app=$app --key=core_backup --value=$core_backup
fi fi
# If apps_backup doesn't exist, create it # If apps_backup doesn't exist, create it
if [ -z "$apps_backup" ]; then if [ -z "$apps_backup" ]; then
apps_backup="$(grep --count --max-count=1 "^ynh_app_backup=" "$final_path/Backup_list.conf")" apps_backup="$(grep --count --max-count=1 "^ynh_app_backup=" "$final_path/Backup_list.conf")"
ynh_app_setting_set $app apps_backup $apps_backup ynh_app_setting_set --app=$app --key=apps_backup --value=$apps_backup
fi fi
# If overwrite_cron doesn't exist, create it # If overwrite_cron doesn't exist, create it
if [ -z "$overwrite_cron" ]; then if [ -z "$overwrite_cron" ]; then
overwrite_cron=1 overwrite_cron=1
ynh_app_setting_set $app overwrite_cron $overwrite_cron ynh_app_setting_set --app=$app --key=overwrite_cron --value=$overwrite_cron
fi fi
admin_mail_html=$(ynh_app_setting_get $app admin_mail_html) admin_mail_html=$(ynh_app_setting_get --app=$app --key=admin_mail_html)
# If admin_mail_html doesn't exist, create it # If admin_mail_html doesn't exist, create it
if [ -z "$admin_mail_html" ]; then if [ -z "$admin_mail_html" ]; then
admin_mail_html=1 admin_mail_html=1
ynh_app_setting_set $app admin_mail_html $admin_mail_html ynh_app_setting_set --app=$app --key=admin_mail_html --value=$admin_mail_html
fi fi
#================================================= #=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#================================================= #=================================================
ynh_script_progression --message="Backup the app before upgrading" --weight=2 ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=2
# Backup the current version of the app # Backup the current version of the app
ynh_backup_before_upgrade ynh_backup_before_upgrade
@ -94,15 +94,15 @@ ynh_abort_if_errors
if [ "$upgrade_type" == "UPGRADE_APP" ] if [ "$upgrade_type" == "UPGRADE_APP" ]
then then
ynh_script_progression --message="Download, check and unpack source" --weight=2 ynh_script_progression --message="Upgrading source files..." --weight=2
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
ynh_setup_source "$final_path" ynh_setup_source --dest_dir="$final_path"
fi fi
#================================================= #=================================================
# UPGRADE DEPENDENCIES # UPGRADE DEPENDENCIES
#================================================= #=================================================
ynh_script_progression --message="Upgrade dependencies" --weight=8 ynh_script_progression --message="Upgrading dependencies..." --weight=8
ynh_install_app_dependencies $app_depencencies ynh_install_app_dependencies $app_depencencies
@ -114,24 +114,24 @@ ynh_install_app_dependencies $app_depencencies
if is_stretch if is_stretch
then then
ynh_replace_string "yunohost backup create --ignore-apps" "yunohost backup create" "$final_path/archivist.sh" ynh_replace_string --match_string="yunohost backup create --ignore-apps" --replace_string="yunohost backup create" --target_file="$final_path/archivist.sh"
ynh_replace_string "yunohost backup create --ignore-system" "yunohost backup create" "$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 fi
#================================================= #=================================================
# UPDATE THE CRON FILE # UPDATE THE CRON FILE
#================================================= #=================================================
ynh_script_progression --message="Update the cron file" ynh_script_progression --message="Updating the cron file..."
# Overwrite the cron file only if it's allowed # Overwrite the cron file only if it's allowed
if [ $overwrite_cron -eq 1 ] if [ $overwrite_cron -eq 1 ]
then then
# Verify the checksum and backup the file if it's different # Verify the checksum and backup the file if it's different
ynh_backup_if_checksum_is_different "/etc/cron.d/$app" ynh_backup_if_checksum_is_different --file="/etc/cron.d/$app"
cp ../conf/cron /etc/cron.d/$app cp ../conf/cron /etc/cron.d/$app
ynh_replace_string "__FINALPATH__" "$final_path" /etc/cron.d/$app ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/cron.d/$app
ynh_replace_string "__APP__" "$app" /etc/cron.d/$app ynh_replace_string --match_string="__APP__" --replace_string=$app --target_file=/etc/cron.d/$app
if [ "$frequency" = "Daily" ]; then if [ "$frequency" = "Daily" ]; then
cron_freq="0 2 * * *" cron_freq="0 2 * * *"
run_freq="every day" run_freq="every day"
@ -148,16 +148,16 @@ then
cron_freq="0 2 1 * *" cron_freq="0 2 1 * *"
run_freq="once a month on the first sunday" run_freq="once a month on the first sunday"
fi fi
ynh_replace_string "__FREQUENCY__" "$cron_freq" /etc/cron.d/$app 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 # Recalculate and store the config file checksum into the app settings
ynh_store_file_checksum "/etc/cron.d/$app" ynh_store_file_checksum --file="/etc/cron.d/$app"
fi fi
#================================================= #=================================================
# SETUP LOGROTATE # SETUP LOGROTATE
#================================================= #=================================================
ynh_script_progression --message="Reconfigure logrotate" ynh_script_progression --message="Upgrading logrotate configuration..."
# Use logrotate to manage app-specific logfile(s) # Use logrotate to manage app-specific logfile(s)
ynh_use_logrotate --non-append ynh_use_logrotate --non-append
@ -196,10 +196,10 @@ If you're facing an issue or want to improve this app, please open a new issue i
Changelog since your last upgrade: Changelog since your last upgrade:
$(cat changelog)" > mail_to_send $(cat changelog)" > mail_to_send
ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type="upgrade" ynh_send_readme_to_admin --app_message="mail_to_send" --recipients="root" --type=upgrade
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================
ynh_script_progression --message="Upgrade completed" --last ynh_script_progression --message="Upgrade of $app completed" --last