39 lines
848 B
Bash
39 lines
848 B
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
backup_root=${1:-./backups}
|
|
timestamp=$(date -u +%Y%m%dT%H%M%SZ)
|
|
archive="$backup_root/qsfera-$timestamp.tar.gz"
|
|
temporary="$archive.incomplete"
|
|
archive_directory=$(dirname "$archive")
|
|
archive_name=$(basename "$archive")
|
|
|
|
umask 077
|
|
mkdir -p "$backup_root"
|
|
|
|
compose() {
|
|
docker compose "$@"
|
|
}
|
|
|
|
cleanup() {
|
|
rm -f "$temporary"
|
|
compose start qsfera >/dev/null
|
|
}
|
|
|
|
compose config --quiet
|
|
compose stop qsfera
|
|
trap cleanup EXIT
|
|
trap 'exit 1' HUP INT TERM
|
|
|
|
compose run --rm --no-deps -T --entrypoint /bin/sh qsfera -ec \
|
|
'tar -C / -czf - etc/qsfera var/lib/qsfera' >"$temporary"
|
|
mv "$temporary" "$archive"
|
|
(cd "$archive_directory" && sha256sum "$archive_name" >"$archive_name.sha256")
|
|
|
|
compose start qsfera >/dev/null
|
|
trap - EXIT HUP INT TERM
|
|
|
|
printf 'Backup: %s\nChecksum: %s\n' "$archive" "$archive.sha256"
|