#!/bin/bash set -e ### # Fetch information from YNH settings ### RESTIC_SERVER=$(yunohost app setting restic server) RESTIC_SERVER_PORT=$(yunohost app setting restic port) RESTIC_SERVER_USER=$(yunohost app setting restic ssh_user) RESTIC_PATH=$(yunohost app setting restic backup_path) RESTIC_PASSWORD="$(yunohost app setting restic passphrase)" RESTIC_REPOSITORY_BASE=sftp://$RESTIC_SERVER_USER@$RESTIC_SERVER:$RESTIC_SERVER_PORT/$RESTIC_PATH/ RESTIC_COMMAND=/usr/local/bin/restic LOGFILE=/var/log/restic_backup.log ERRFILE=/var/log/restic_backup.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 $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 $RESTIC_COMMAND backup ./ > >(tee -a $LOGFILE) 2> >(tee -a $ERRFILE >&2) backup_return_code="$?" popd # On ne nettoie que si la sauvegarde s'est bien passee if [ "$backup_return_code" -eq "0" ];then $RESTIC_COMMAND forget --keep-daily 7 --keep-weekly 8 --keep-monthly 12 > >(tee -a $LOGFILE) 2> >(tee -a $ERRFILE >&2) else echo "Something went wrong during backup" > >(tee -a $ERRFILE >&2) 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