initial commit
This commit is contained in:
53
backupd/backup.sh
Normal file
53
backupd/backup.sh
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/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}"
|
||||
Reference in New Issue
Block a user