#!/bin/bash -l set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR [[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@" conf_only=false dry_run=false # mostly for testing case $1 in -c) conf_only=true ;; -n) dry_run=true ;; ?*) echo "$0: error: unsupported arg"; exit 1 ;; esac # background on timezones. with short/long, timestamps use local time. # for long, if your local time moves backwards, by moving timezones or # for an hour when daylight savings changes it, you will temporarily get # a more aggressive retention policy for the overlapping period, and # vice versa for the opposite timezone move. The alternative is using # long-iso, which puts timezone info into the timestamp, which means # that instead of shifting time, you shift the start of day/week/month # which is used for retention to your new local time, which means for # example, if you moved forward by 8 hours, the daily/weekly/monthly # retention will be 8 hours more aggressive since midnight is at a new # time, unless you fake the timzeone using the TZ env variable. # However, in the short term, there will be no inconsistencies. # I don't see any problem with shifting when the day starts for # retention, so I'm using long-iso. target_host=frodo cat >/etc/btrbk.conf <<'EOF' ssh_identity /root/.ssh/id_rsa transaction_syslog daemon # so we only run one at a time lockfile /var/lock/btrbk.lock # default format of short does not accomidate hourly preservation setting timestamp_format long-iso # only make a snapshot if things have changed snapshot_create onchange # much less snapshots because I have less space on the # local filesystem. snapshot_preserve 2h 2d # so, total backups = ~89 target_preserve 48h 14d 8w 24m target_preserve_min 6h # if something fails and it's not obvious, try doing # btrbk -l debug -v dryrun EOF case $HOSTNAME in tp|x2) if ! timeout -s 9 10 ssh frodo :; then target_host=$HOME_DOMAIN cat >>/etc/btrbk.conf </dev/null || return cat >>/etc/btrbk.conf <