#!/bin/bash env_dir=$1 base_dir="$(dirname "$(realpath -s "$0")")" root_dir="$base_dir/../../.." [[ -z $env_dir ]] && env_dir="/var/zio-backup" function restic_exec() { command="$1" args="${@:2}" if [[ -z $command ]]; then say_warn "No command specified. Not running." else restic \ --cleanup-cache \ --password-file "$passwd_file" \ --repo "$repo" \ $command `[[ -s $args ]] && echo "$args"` fi } function backup() { path="$1" tag="$2" args="${@:3}" if [[ ! -d $path ]]; then warn "'$path' does not exist. Not backing up." else tag="$host_$tag" restic_exec \ backup \ --iexclude "__MACOSX" \ --iexclude ".cache" \ --iexclude ".DS_Store" \ --iexclude "cache" \ --iexclude "CachedData" \ --iexclude "CachedExtensionVSIXs" \ --iexclude "Code Cache" \ --iexclude "GPUCache" \ --iexclude "GrSharedCache" \ --iexclude "ShaderCache" \ --iexclude "system-cache" \ --iexclude "thumbs.db" \ --iexclude "tmp" \ --exclude-if-present ".nobackup" \ --host "$host" \ --tag "$tag" \ `[[ -s $args ]] && echo "$args"` "$path" fi } function forget() { tag="$1" tag="$host_$tag" restic_exec \ forget \ --host "$host" \ --keep-last 5 \ --tag "$tag" } function get_prop() { file=$1 item=$2 echo $(grep -oP '(?<=^'"$item"'=).+' $file | tr -d '"') } function say() { message=$@ echo -e "$@" } function say_die() { message=$@ say "\033[1;31mError: $message\033[0m" exit 255 } function say_do() { message=$@ say "\033[1;34m$message\033[0m" } function say_warn() { message=$@ say "\033[1;33mWarning: $message\033[0m" } function test_path() { prog=$@ if [[ ! -x "$(command -v $prog)" ]]; then say_die "'$prog' is not installed (or not in \$PATH). Aborting..." fi } host="de01" repo="b2:zio-euc-servers" passwd_file="" pre_script="" post_script="" services=() if [[ ! -d $env_dir ]]; then say_warn "Environment directory ($env_dir) not found." else [[ -f "$env_dir/$host.pre" ]] && pre_script="$env_dir/$host.pre" [[ -f "$env_dir/$host.post" ]] && post_script="$env_dir/$host.post" if [[ -f "$env_dir/$host.var" ]]; then [[ ! -z $(get_prop "$env_dir/$host.var" SERVICES) ]] && \ IFS=';' read -ra services <<< "$(get_prop "$env_dir/$host.var" SERVICES)" fi if [[ -f "$env_dir/passwd" ]]; then passwd_file="$env_dir/passwd" else say_warn "Password file ($passwd_file) not found." fi fi if [[ ! -z $pre_script ]]; then say_do "Executing pre-backup script..." . $pre_script fi say_do "Stopping services..." for service in "${services[@]}" do echo "systemctl stop $service" done say_do "Backing up files..." backup /etc config backup /srv/store store backup /var variable if [[ ! -z $post_script ]]; then say_do "Executing post-backup script..." . $post_script fi say_do "Removing old backups..." forget config forget store forget variable