#!/usr/bin/env bash # Take Raft snapshots of BOTH OpenBAO instances (main + unsealer) and prune old # ones. Run as root (reads the root-only backup tokens, writes /var/backups). # # DR note: a restored MAIN snapshot can only be unsealed with the unsealer's # transit key — so the unsealer snapshot (+ its unseal key in unsealer-init.json # + the recovery keys in init-output.json) are part of the same recovery set. # # Installed as a systemd timer (openbao-backup.timer). Manual run: # sudo /home/lutz/Projects/OpenBAO/scripts/backup-raft-snapshots.sh set -euo pipefail PROJECT_DIR="/home/lutz/Projects/OpenBAO" BACKUP_ROOT="${BACKUP_ROOT:-/var/backups/openbao}" KEEP="${KEEP:-14}" # how many snapshots to retain per instance STAMP="$(date '+%Y%m%d-%H%M%S')" log() { printf '%s [backup] %s\n' "$(date '+%F %T')" "$*"; } die() { log "ERROR: $*"; exit 1; } cd "$PROJECT_DIR" || die "cannot cd to $PROJECT_DIR" # snapshot