87 lines
3.5 KiB
Bash
87 lines
3.5 KiB
Bash
#!/bin/sh
|
|
|
|
lockfile="/tmp/duplicacy.lock"
|
|
LOGFILE="/var/log/duplicacy/duplicacy_$(date +%Y%m%d-%H%M%S).log"
|
|
LATEST_DUPLICACY_VERSION="ls -lha $(dirname "$0")/binaries/ | awk '/-rw/{print substr($9,length($9)-4);exit}'"
|
|
LATEST_DUPLICACY_VERSION="2.7.2"
|
|
|
|
# make log directory
|
|
if [ ! -d $(dirname ${LOGFILE}) ]; then
|
|
mkdir $(dirname ${LOGFILE}) > /dev/null
|
|
fi
|
|
|
|
if [ -e ${lockfile} ] && kill -0 `cat ${lockfile}`; then
|
|
echo "duplicacy backup already running" >> ${LOGFILE}
|
|
exit
|
|
fi
|
|
|
|
# make sure the lockfile is removed when we exit and then claim it
|
|
trap "rm -f ${lockfile}; exit" INT TERM EXIT
|
|
echo $$ > ${lockfile}
|
|
|
|
# self update
|
|
cd $(dirname "$0")
|
|
git pull > /dev/null
|
|
|
|
# Duplicacy version update
|
|
INSTALLED_DUPLICACY_VERSION=$(duplicacy -h | awk '/VERSION:/{getline; print $1}')
|
|
if [ ${LATEST_DUPLICACY_VERSION} != ${INSTALLED_DUPLICACY_VERSION} ] || [ ! -e '/usr/bin/duplicacy' ]; then
|
|
# Determine the Kernel and Architecture
|
|
KERNEL=$(uname)
|
|
ARCH=$(uname -m)
|
|
if [ ${KERNEL} == 'Linux' ]; then
|
|
if [ ${ARCH} == 'x86_64' ]; then
|
|
curl -sSL -o /usr/bin/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v${LATEST_DUPLICACY_VERSION}/duplicacy_linux_x64_${LATEST_DUPLICACY_VERSION}
|
|
chmod +x /usr/bin/duplicacy >> ${LOGFILE}
|
|
elif [ ${ARCH} == 'aarch64' ]; then
|
|
curl -sSL -o /usr/bin/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v${LATEST_DUPLICACY_VERSION}/duplicacy_linux_arm64_${LATEST_DUPLICACY_VERSION}
|
|
chmod +x /usr/bin/duplicacy >> ${LOGFILE}
|
|
else
|
|
echo "Kernel Type: ${KERNEL}"
|
|
echo "Arch: ${ARCH}"
|
|
echo "Arch not supported."
|
|
exit
|
|
fi
|
|
elif [ ${KERNEL} == 'FreeBSD' ]; then
|
|
if [ ${ARCH} == 'amd64' ]; then
|
|
curl -sSL -o /usr/bin/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v${LATEST_DUPLICACY_VERSION}/duplicacy_freebsd_x64_${LATEST_DUPLICACY_VERSION}
|
|
chmod +x /usr/bin/duplicacy >> ${LOGFILE}
|
|
else
|
|
echo "Kernel Type: ${KERNEL}"
|
|
echo "Arch: ${ARCH}"
|
|
echo "Arch not supported."
|
|
exit
|
|
fi
|
|
else
|
|
echo "Kernel Type: ${KERNEL}"
|
|
echo "Arch: ${ARCH}"
|
|
echo "Kernel not supported."
|
|
exit
|
|
fi
|
|
fi
|
|
|
|
# check if the /.duplicacy/preferences file exists before continuing
|
|
if [ ! -e "/.duplicacy/preferences" ] || [ ! -e "/.duplicacy/filters" ]; then
|
|
echo "ERROR: Duplicacy not yet configured. Please refer to readme file"
|
|
exit
|
|
fi
|
|
|
|
# run the backup
|
|
cd /
|
|
duplicacy -verbose -log backup -stats >> ${LOGFILE} 2>&1
|
|
|
|
# prune the backup
|
|
duplicacy -verbose -log prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7 >> ${LOGFILE} 2>&1
|
|
|
|
# copy the backup to offsite but only if the backup id as passed in
|
|
if [ "${1}" == "--copyOffsite" ] || [ "${1}" == "-c" ]; then
|
|
BACKUP_ID=$(awk '/"id"/{print substr($2,2,length($2)-3);exit}' /.duplicacy/preferences)
|
|
duplicacy -verbose -log copy -to GauntBackupCRO -id ${BACKUP_ID} >> ${LOGFILE} 2>&1
|
|
duplicacy -verbose -log copy -to GauntBackupGail -id ${BACKUP_ID} >> ${LOGFILE} 2>&1
|
|
fi
|
|
|
|
# compress the logs
|
|
gzip $(dirname ${LOGFILE})/*.log
|
|
|
|
# clean up lockfile
|
|
rm -f ${lockfile} |