#!/bin/bash # Create a backup, prune old backups, compact the repository, and list the contents backup() { #check PRE_COMMAND exists if [[ -n $PRE_COMMAND ]]; then echo "Running pre-command" eval $PRE_COMMAND fi create prune compact list #check POST_COMMAND exists if [[ -n $POST_COMMAND ]]; then echo "Running post-command" eval $POST_COMMAND fi } # Initialize the repository init() { echo "Initializing repository" /usr/local/bin/borg init --encryption=repokey $BORG_REPO } # Create a backup create() { echo "Creating backup" /usr/local/bin/borg create --compression zstd,1 $BORG_REPO::'{hostname}-{now}' /src } # List the contents of the repository list() { echo "Listing repository" /usr/local/bin/borg list $BORG_REPO } PRUNE="" # Clean up old backups prune() { echo "Pruning repository" if [[ -n $MINUTELY ]]; then PRUNE="--keep-minutely ${MINUTELY}" fi if [[ -n $HOURLY ]]; then PRUNE="${PRUNE} --keep-hourly ${HOURLY}" fi if [[ -n $DAILY ]]; then PRUNE="${PRUNE} --keep-daily ${DAILY}" fi if [[ -n $WEEKLY ]]; then PRUNE="${PRUNE} --keep-weekly ${WEEKLY}" fi if [[ -n $MONTHLY ]]; then PRUNE="${PRUNE} --keep-monthly ${MONTHLY}" fi /usr/local/bin/borg prune $PRUNE $BORG_REPO } # Compact the repository compact() { echo "Compacting repository" /usr/local/bin/borg compact $BORG_REPO } delete() { echo "Deleting repository" /usr/local/bin/borg delete $BORG_REPO $2 } restore() { echo "Restoring backup" echo $2 #Restore dir cd $RESTORE_PATH /usr/local/bin/borg -v extract ${BORG_REPO}::$BACKUP } if [[ $1 == "backup" ]]; then backup elif [[ $1 == "init" ]]; then init elif [[ $1 == "create" ]]; then create elif [[ $1 == "list" ]]; then list elif [[ $1 == "prune" ]]; then prune elif [[ $1 == "compact" ]]; then compact elif [[ $1 == "delete" ]]; then delete elif [[ $1 == "restore" ]]; then BACKUP=$2 RESTORE_PATH=$3 restore elif [[ $1 == "bash" ]]; then bash elif [[ $1 == "server" ]]; then /usr/local/bin/borg serve --restrict-to-path /data else echo "Invalid command" fi