1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/restic_ynh.git synced 2024-09-03 20:16:22 +02:00
restic_ynh/conf/backup_method.j2

80 lines
2 KiB
Text
Raw Normal View History

#!/bin/bash
set -e
###
# Fetch information from YNH settings
###
2021-02-28 16:38:35 +01:00
RESTIC_SERVER=$(yunohost app setting {{ app }} server)
RESTIC_SERVER_PORT=$(yunohost app setting {{ app }} port)
RESTIC_SERVER_USER=$(yunohost app setting {{ app }} ssh_user)
RESTIC_PATH=$(yunohost app setting {{ app }} backup_path)
2021-02-28 16:38:35 +01:00
RESTIC_PASSWORD="$(yunohost app setting {{ app }} passphrase)"
RESTIC_REPOSITORY_BASE=sftp://$RESTIC_SERVER_USER@$RESTIC_SERVER:$RESTIC_SERVER_PORT/$RESTIC_PATH/
2021-02-28 16:38:35 +01:00
RESTIC_COMMAND=/usr/local/bin/{{ app }}
LOGFILE=/var/log/restic_backup_{{ app }}.log
ERRFILE=/var/log/restic_backup_{{ app }}.err
do_need_mount() {
work_dir="$1"
name="$2"
repo="$3"
size="$4"
description="$5"
export RESTIC_PASSWORD
export RESTIC_REPOSITORY=${RESTIC_REPOSITORY_BASE}/$name
# On essaie de lister les snapshots, sinon on initialise le depot
2020-03-03 19:24:13 +01:00
$RESTIC_COMMAND list snapshots > >(tee -a $LOGFILE) 2> >(tee -a $ERRFILE >&2) || $RESTIC_COMMAND init > >(tee -a $LOGFILE) 2> >(tee -a $ERRFILE >&2)
}
do_backup() {
work_dir="$1"
name="$2"
repo="$3"
size="$4"
description="$5"
export RESTIC_PASSWORD
export RESTIC_REPOSITORY=${RESTIC_REPOSITORY_BASE}/$name
current_date=$(date +"%d_%m_%y_%H:%M")
pushd $work_dir
2020-03-03 19:24:13 +01:00
$RESTIC_COMMAND backup ./ > >(tee -a $LOGFILE) 2> >(tee -a $ERRFILE >&2)
2020-02-25 22:07:47 +01:00
backup_return_code="$?"
popd
# On ne nettoie que si la sauvegarde s'est bien passee
if [ "$backup_return_code" -eq "0" ];then
2020-03-03 19:24:13 +01:00
$RESTIC_COMMAND forget --keep-daily 7 --keep-weekly 8 --keep-monthly 12 > >(tee -a $LOGFILE) 2> >(tee -a $ERRFILE >&2)
2020-02-25 22:07:47 +01:00
else
2020-03-03 19:24:13 +01:00
echo "Something went wrong during backup" > >(tee -a $ERRFILE >&2)
2020-02-25 22:07:47 +01:00
exit 1
fi
}
work_dir=$2
name=$3
size=$5
description=$6
case "$1" in
need_mount)
do_need_mount $work_dir $name $repo $size $description
;;
backup)
do_backup $work_dir $name $repo $size $description
;;
mount)
do_need_mount $work_dir $name $repo $size $description
;;
*)
echo "hook called with unknown argument \`$1'" >&2
exit 1
;;
esac
exit 0