diff options
Diffstat (limited to 'bup-vw.sh')
-rwxr-xr-x | bup-vw.sh | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/bup-vw.sh b/bup-vw.sh new file mode 100755 index 0000000..a5cdcb3 --- /dev/null +++ b/bup-vw.sh @@ -0,0 +1,79 @@ +#!/bin/sh +# File: vm4:/home/vaultwarden/bup-vw.sh +# Location: vm4 +# Author: bgstack15 +# Startdate: 2023-01-02-2 16:54 +# Title: Bup Vaultwarden +# Project: bup-vw +# Purpose: Backup Vaultwarden contents +# History: +# Usage: called by cron: 70_vaultwarden_cron +# Reference: +# https://github.com/dani-garcia/vaultwarden/wiki/General-%28not-docker%29 +# photorprism/bup-pp-db.sh +# Improve: +# Dependencies: +# sudo access for user vaultwardern to run bup-vw-db.sh, /etc/sudoers.d/70_vaultwarden_bup_sudo +# Documentation: +# README-vw-bup.md + +workdir="$( dirname "$( readlink -f "${0}" 2>/dev/null )" 2>/dev/null || echo "${PWD}" )" +#echo "workdir=${workdir}" +test -z "${CONFFILE}" && CONFFILE="${workdir}/bup-vw.conf" +test -e "${CONFFILE}" && . "${CONFFILE}" +test -z "${LOGFILE}" && LOGFILE="/mnt/public/Support/Systems/vm4/var/log/vaultwarden/bup-vw.$( date "+%F" ).log" + +_return() { + return ${1} +} + +main() { + export OUTDIR=/mnt/public/Support/Systems/vm4/vw/vaultwarden + export LOCALOUTDIR=/home/vaultwarden/bup + export OUTFILE="${LOCALOUTDIR}/vw.$( date "+%F" ).sq3" + export OUTTARBALL="${OUTDIR}/vw.$( date "+%F" ).tgz" + # fail early if network mount is not there + if ! test -w "$( dirname "${OUTFILE}" )" ; + then + echo "Fatal! Unable to write to directory for ${OUTTARBALL}: Aborted." + exit 1 + fi + # run the bup-vw-db.sh script, collect other things, make a tarball + generated_file="$( sudo /home/vaultwarden/bup-vw-db.sh )" + if ! test -f "${generated_file}" ; + then + echo "Fatal! Unable to find exported database file ${OUTFILE}: Aborted." + exit 1 + fi + relative_generated_file="bup/$( basename "${generated_file}" )" + tar -zcf "${OUTTARBALL}" -C /home/vaultwarden vw/docker-compose.yml vw/.env vw/bitwarden "${relative_generated_file}" + find "${OUTTARBALL}" +} + +# Determine if this script was dot-sourced +sourced=0 +if [ -n "$ZSH_EVAL_CONTEXT" ]; then + case $ZSH_EVAL_CONTEXT in *:file) sourced=1;; esac +elif [ -n "$KSH_VERSION" ]; then + [ "$(cd $(dirname -- $0) && pwd -P)/$(basename -- $0)" != "$(cd $(dirname -- ${.sh.file}) && pwd -P)/$(basename -- ${.sh.file})" ] && sourced=1 +elif [ -n "$BASH_VERSION" ]; then + (return 0 2>/dev/null) && sourced=1 +else # All other shells: examine $0 for known shell binary filenames + # Detects `sh` and `dash`; add additional shell filenames as needed. + case ${0##*/} in sh|dash) sourced=1;; esac +fi + +# So, if not dot-sourced, and this is run by cron, add logging +if test $sourced -eq 0; +then + if echo " ${@} " | grep -q cron ; + then + main 2>&1 | plecho | tee -a "${LOGFILE}" + response=$? + printf '\n' | tee -a "${LOGFILE}" + else + main + response=$? + fi +fi +_return ${response} |