#!/usr/bin/env bash set -euo pipefail REPO= ACTION= if [[ $# -lt 2 ]]; then echo "Command not specified" echo echo "clerie-backup REPO ACTION" echo echo "ACTION: restic,backup" echo echo "Available REPOs (/etc/clerie-backup/):" echo if [[ -d "/etc/clerie-backup" ]]; then find "/etc/clerie-backup/" -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | sort -d fi exit 1 fi REPO="$1" shift ACTION="$1" shift CONFIG_DIR="/etc/clerie-backup/${REPO}" if [[ ! -d "${CONFIG_DIR}" ]]; then echo "Config dir ${CONFIG_DIR} for ${REPO} does not exist" exit 1 fi ISSUE_EXIST= if [[ ! -f "${CONFIG_DIR}/repo_password" ]]; then echo "File ${CONFIG_DIR}/repo_password not found" ISSUE_EXIST=1 fi if [[ ! -f "${CONFIG_DIR}/repo_url" ]]; then echo "File ${CONFIG_DIR}/repo_url not found" ISSUE_EXIST=1 fi if [[ ! -f "${CONFIG_DIR}/auth_username" ]]; then echo "File ${CONFIG_DIR}/auth_username not found" ISSUE_EXIST=1 fi if [[ -n "${ISSUE_EXIST}" ]]; then exit 1 fi RESTIC_PASSWORD_FILE="${CONFIG_DIR}/repo_password" export RESTIC_PASSWORD_FILE REPO_URL="$(cat "${CONFIG_DIR}/repo_url")" if [[ "${REPO_URL}" == http* ]]; then RESTIC_REPOSITORY="rest:${REPO_URL}" else RESTIC_REPOSITORY="${REPO_URL}" fi export RESTIC_REPOSITORY RESTIC_REST_USERNAME="$(cat "${CONFIG_DIR}/auth_username")" export RESTIC_REST_USERNAME if [[ -e "${CONFIG_DIR}/auth_password" ]]; then RESTIC_REST_PASSWORD="$(cat "${CONFIG_DIR}/auth_password")" export RESTIC_REST_PASSWORD fi RESTIC_PROGRESS_FPS="0.1" export RESTIC_PROGRESS_FPS RESTIC_CACHE_DIR="/var/cache/restic" export RESTIC_CACHE_DIR EXTRA_OPTIONS=() if [[ -e "${CONFIG_DIR}/ssh_key" ]]; then EXTRA_OPTIONS+=("-o" "sftp.args='-o IdentityFile=${CONFIG_DIR}/ssh_key'") fi case "${ACTION}" in restic) restic "${EXTRA_OPTIONS[@]}" "$@" ;; backup) ISSUE_EXIST= if [[ ! -f "${CONFIG_DIR}/excludes" ]]; then echo "File ${CONFIG_DIR}/excludes not found" ISSUE_EXIST=1 fi if [[ ! -f "${CONFIG_DIR}/files" ]]; then echo "File ${CONFIG_DIR}/files not found" ISSUE_EXIST=1 fi if [[ -n "${ISSUE_EXIST}" ]]; then exit 1 fi restic "${EXTRA_OPTIONS[@]}" snapshots --latest 1 || restic "${EXTRA_OPTIONS[@]}" init restic "${EXTRA_OPTIONS[@]}" backup --exclude-file "${CONFIG_DIR}/excludes" --files-from "${CONFIG_DIR}/files" ;; *) echo "Unsupported ACTION: ${ACTION}" exit 1 ;; esac