initial commit
This commit is contained in:
commit
47b526920d
1 changed files with 165 additions and 0 deletions
165
backup.sh
Executable file
165
backup.sh
Executable file
|
@ -0,0 +1,165 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
print_ascii () {
|
||||
cat <<'EOF'
|
||||
_ _ _
|
||||
| |__ __ _ ___| | ___ _ _ __ ___| |__
|
||||
| '_ \ / _` |/ __| |/ / | | | '_ \ / __| '_ \
|
||||
| |_) | (_| | (__| <| |_| | |_) |\__ \ | | |
|
||||
|_.__/ \__,_|\___|_|\_\\__,_| .__(_)___/_| |_|
|
||||
|_|
|
||||
EOF
|
||||
# Copyright (c) 2020 Andrew Davidson
|
||||
}
|
||||
|
||||
print_help () {
|
||||
echo -e """
|
||||
Usage:
|
||||
backup.sh 'command' 'destination'
|
||||
|
||||
Supported Commands:
|
||||
backup - initiate a backup of the home folder to the destination
|
||||
list - list backups on the destination
|
||||
prune - prune old backups on the destination
|
||||
|
||||
Supported destinations:
|
||||
royal - local borg/SFTP backup to Royal
|
||||
wasabi - remote restic backup to Wasabi
|
||||
"""
|
||||
}
|
||||
|
||||
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
|
||||
ACTION=$1
|
||||
DESTINATION=$2
|
||||
|
||||
|
||||
###
|
||||
# ~/.env should contain these variables:
|
||||
#
|
||||
# ## Borg Royal Environment
|
||||
# export BORG_PASSPHRASE=
|
||||
#
|
||||
# ## Restic Wasabi Environment
|
||||
# export AWS_ACCESS_KEY_ID=
|
||||
# export AWS_SECRET_ACCESS_KEY=
|
||||
# export RESTIC_REPOSITORY=s3:s3.wasabisys.com/backup
|
||||
# export RESTIC_PASSWORD=
|
||||
###
|
||||
source ~/.env
|
||||
|
||||
case $DESTINATION in
|
||||
"royal")
|
||||
case $ACTION in
|
||||
"backup")
|
||||
echo "$(date) starting backup to $DESTINATION"
|
||||
|
||||
if on_ac_power; then
|
||||
borg create --progress -s -v \
|
||||
--exclude $HOME/tmp \
|
||||
--exclude $HOME/Downloads \
|
||||
--exclude $HOME/Desktop \
|
||||
--exclude $HOME/.cache \
|
||||
--exclude $HOME/.local/gnome-boxes \
|
||||
backup:/bkup/$(hostname)::$(date '+%s') \
|
||||
$HOME
|
||||
else
|
||||
echo "Not plugged in, canceling backup."
|
||||
fi
|
||||
|
||||
echo "$(date) finished backup to $DESTINATION"
|
||||
;;
|
||||
"list")
|
||||
borg list backup:/bkup/$(hostname)
|
||||
;;
|
||||
"prune")
|
||||
echo """
|
||||
Pruning $DESTINATION backups...
|
||||
Keeping:
|
||||
- 24 hourly backups
|
||||
- 90 daily backups
|
||||
- 12 monthly backups
|
||||
- 5 yearly backups
|
||||
"""
|
||||
borg prune \
|
||||
--stats --list \
|
||||
--keep-hourly 24 \
|
||||
--keep-daily 90 \
|
||||
--keep-monthly 12 \
|
||||
--keep-yearly 5 \
|
||||
backup:/bkup/$(hostname)
|
||||
;;
|
||||
"help")
|
||||
print_ascii
|
||||
print_help
|
||||
;;
|
||||
*)
|
||||
echo "Action: $ACTION not recognized."
|
||||
print_help
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"wasabi")
|
||||
case $ACTION in
|
||||
"backup")
|
||||
echo "$(date) starting backup to $DESTINATION"
|
||||
|
||||
if on_ac_power; then
|
||||
restic backup \
|
||||
--verbose \
|
||||
--exclude $HOME/tmp \
|
||||
--exclude $HOME/Desktop \
|
||||
--exclude $HOME/Downloads \
|
||||
--exclude $HOME/.cache \
|
||||
--exclude $HOME/.cargo \
|
||||
--exclude $HOME/.local/share/gnome-boxes \
|
||||
$HOME
|
||||
else
|
||||
echo "Not plugged in, canceling backup."
|
||||
fi
|
||||
|
||||
echo "$(date) finished backup to $DESTINATION"
|
||||
;;
|
||||
"list")
|
||||
restic snapshots
|
||||
;;
|
||||
"prune")
|
||||
echo """
|
||||
Pruning $DESTINATION backups...
|
||||
Keeping:
|
||||
- 4 hourly backups
|
||||
- 90 daily backups
|
||||
- 12 monthly backups
|
||||
- 5 yearly backups
|
||||
"""
|
||||
|
||||
restic forget --prune \
|
||||
--keep-hourly 4 \
|
||||
--keep-daily 90 \
|
||||
--keep-monthly 12 \
|
||||
--keep-yearly 5
|
||||
|
||||
;;
|
||||
"help")
|
||||
print_ascii
|
||||
print_help
|
||||
;;
|
||||
*)
|
||||
echo "Action: $ACTION not recognized."
|
||||
print_help
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
if [[ -z $DESTINATION && $ACTION == "help" ]]; then
|
||||
print_ascii
|
||||
print_help
|
||||
else
|
||||
echo "Destination: $DESTINATION not recognized."
|
||||
print_help
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
Loading…
Reference in a new issue