#!/bin/sh # --------------------------------------------------------------------------- # Sicherung: Datenbank und Anhänge in ein Archiv schreiben. # # Läuft sowohl im Container als auch auf dem Entwicklungsrechner (Git Bash). # # sicherung.sh [zielverzeichnis] # # Ergebnis: /lernbar-JJJJMMTT-HHMMSS.tar.gz # --------------------------------------------------------------------------- set -eu DATEN="${LERNBAR_DATEN:-/daten}" DB="${LERNBAR_DB:-$DATEN/lernbar.sqlite}" ZIEL="${1:-${LERNBAR_SICHERUNGEN:-$DATEN/sicherungen}}" if [ ! -f "$DB" ]; then echo "Keine Datenbank unter $DB gefunden." >&2 exit 1 fi mkdir -p "$ZIEL" STEMPEL="$(date +%Y%m%d-%H%M%S)" ARBEIT="$(mktemp -d)" trap 'rm -rf "$ARBEIT"' EXIT # Konsistente Kopie über die Sicherungsschnittstelle von SQLite. Ein blosses # `cp` wäre bei aktivem WAL-Modus nicht verlässlich. node -e " const Database = require('better-sqlite3'); const db = new Database(process.argv[1], { readonly: true }); db.backup(process.argv[2]).then(() => { db.close(); }).catch((f) => { console.error(f); process.exit(1); }); " "$DB" "$ARBEIT/lernbar.sqlite" mkdir -p "$ARBEIT/anhaenge" if [ -d "$DATEN/anhaenge" ]; then cp -R "$DATEN/anhaenge/." "$ARBEIT/anhaenge/" 2>/dev/null || true fi cat > "$ARBEIT/sicherung.txt" < ENDE ARCHIV="$ZIEL/lernbar-$STEMPEL.tar.gz" tar -czf "$ARCHIV" -C "$ARBEIT" lernbar.sqlite anhaenge sicherung.txt echo "$ARCHIV"