Files
aad-local-file-share/backupd/backup.sh
Ludwig Lehnert 70fe6076a4 initial commit
2026-02-03 16:39:37 +01:00

54 lines
1.4 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
timestamp=$(date -u +"%Y%m%dT%H%M%SZ")
workdir="/tmp/backup-${timestamp}"
stagedir="${workdir}/backup-${timestamp}"
data_tar="${stagedir}/data.tar.zst"
db_path="${SQLITE_DB_PATH:-/var/lib/webui/app.db}"
remote_path="${BACKUP_REMOTE_PATH:-/remote}"
compression="${BACKUP_COMPRESSION:-zstd}"
mkdir -p "${stagedir}"
tar --xattrs --acls --numeric-owner -cpf - /data | zstd -19 -o "${data_tar}"
sqlite3 "${db_path}" ".backup '${stagedir}/app.db'"
data_size=$(stat -c %s "${stagedir}/data.tar.zst")
data_sha=$(sha256sum "${stagedir}/data.tar.zst" | awk '{print $1}')
db_size=$(stat -c %s "${stagedir}/app.db")
db_sha=$(sha256sum "${stagedir}/app.db" | awk '{print $1}')
cat > "${stagedir}/manifest.json" <<EOF
{
"timestamp": "${timestamp}",
"data_tar": "data.tar.zst",
"database": "app.db",
"sizes": {
"data_tar": ${data_size},
"database": ${db_size}
},
"sha256": {
"data_tar": "${data_sha}",
"database": "${db_sha}"
}
}
EOF
cd "${workdir}"
xorriso -as mkisofs -o "${workdir}/backup-${timestamp}.iso" "backup-${timestamp}"
if [ "${compression}" = "gzip" ]; then
gzip -9 "${workdir}/backup-${timestamp}.iso"
archive="${workdir}/backup-${timestamp}.iso.gz"
else
zstd -19 "${workdir}/backup-${timestamp}.iso"
archive="${workdir}/backup-${timestamp}.iso.zst"
fi
mkdir -p "${remote_path}"
mv "${archive}" "${remote_path}/"
rm -rf "${workdir}"