Files
proxmox-snapshot-service/uninstall.sh
T
duffyduckandClaude Opus 5 f37a942fea Snapshot-Explorer: Dateien zurueckholen, im Terminal und im Browser
Snapshots anzulegen half bisher nur halb - an die Daten darin kam man nur
ueber einen Rollback. Dafuer jetzt zwei Werkzeuge auf gemeinsamer Basis.

snapfs.py bindet einen Snapshot schreibgeschuetzt ein und liefert einen
gewoehnlichen Pfad; die Oberflaechen wissen dadurch nichts ueber Storages:

  rbd (Ceph)   rbd map pool/image@snap, bei nicht unterstuetzten
               Image-Features faellt es auf rbd-nbd zurueck
  zfspool      Container ueber .zfs/snapshot, VMs ueber einen Klon
  lvmthin/lvm  die Snapshot-LV snap_<volume>_<snapname> aktivieren
  dir/nfs/cifs qemu-nbd --load-snapshot (nur qcow2)

Gemountet wird mit ro,noload bzw. ro,norecovery,nouuid - Snapshots
laufender Gaeste haben fast immer ein unsauberes Journal. Alles Angelegte
steht in /run/pvesnap/explorer.json und laesst sich nach einem Absturz mit
"--cleanup" wieder abraeumen.

pvesnap-explorer: zwei Fenster wie im Midnight Commander, links der
Snapshot, rechts der lokale Rechner. Markieren, F5, Fortschrittsbalken,
ESC bricht ab, vorhandene Dateien werden abgefragt. In den Snapshot hinein
kann nicht kopiert werden. Geraetedateien und Sockets werden
uebersprungen, symbolische Verweise bleiben Verweise.

pvesnap-web: derselbe Inhalt im Browser, auch vom anderen Rechner.
Einzelne Dateien direkt, Verzeichnisse und Mehrfachauswahl als ZIP, das im
Strom erzeugt wird - ohne Zwischendatei auf der Platte. Zugang nur mit dem
beim Start ausgegebenen Schluessel; Pfade ausserhalb des Snapshots werden
abgewiesen; es wird ausschliesslich gelesen.

Nebenbei: die curses-Bausteine sind aus tui.py nach curses_util.py
gewandert, damit Editor und Explorer sie teilen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 09:14:16 +02:00

94 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# ---------------------------------------------------------------------
# pvesnap - Deinstallation
#
# ./uninstall.sh Programm und Dienst entfernen,
# Konfiguration und Zustand bleiben erhalten
# ./uninstall.sh --purge zusaetzlich /etc/pvesnap und /var/lib/pvesnap
# entfernen
#
# Bereits angelegte Snapshots werden NIE angeruehrt.
# ---------------------------------------------------------------------
set -euo pipefail
LIB_DIR="/usr/lib/pvesnap"
BIN="/usr/local/bin/pvesnap"
CONF_DIR="/etc/pvesnap"
STATE_DIR="/var/lib/pvesnap"
DOC_DIR="/usr/share/doc/pvesnap"
UNIT="/etc/systemd/system/pvesnap.service"
PURGE=0
YES=0
for arg in "$@"; do
case "$arg" in
--purge) PURGE=1 ;;
-y|--yes) YES=1 ;;
-h|--help) sed -n '2,11p' "$0" | sed 's/^#[[:space:]]\{0,1\}//'; exit 0 ;;
*) echo "Unbekannte Option: $arg" >&2; exit 1 ;;
esac
done
info() { printf '\033[1;32m==>\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m==>\033[0m %s\n' "$*" >&2; }
fail() { printf '\033[1;31m==>\033[0m %s\n' "$*" >&2; exit 1; }
[ "$(id -u)" -eq 0 ] || fail "Bitte als root ausfuehren (sudo ./uninstall.sh)."
if [ "$YES" -eq 0 ]; then
if [ "$PURGE" -eq 1 ]; then
printf 'pvesnap inklusive Konfiguration und Zustand entfernen? [j/N] '
else
printf 'pvesnap entfernen (Konfiguration bleibt erhalten)? [j/N] '
fi
read -r answer
case "$answer" in
j|J|y|Y) ;;
*) echo "Abgebrochen."; exit 0 ;;
esac
fi
if systemctl list-unit-files 2>/dev/null | grep -q '^pvesnap\.service'; then
info "Stoppe und deaktiviere Dienst"
systemctl stop pvesnap.service 2>/dev/null || true
systemctl disable pvesnap.service 2>/dev/null || true
fi
if [ -f "$UNIT" ]; then
info "Entferne $UNIT"
rm -f "$UNIT"
fi
systemctl daemon-reload 2>/dev/null || true
systemctl reset-failed pvesnap.service 2>/dev/null || true
for command in "$BIN" "${BIN}-explorer" "${BIN}-web"; do
if [ -e "$command" ]; then
info "Entferne $command"
rm -f "$command"
fi
done
if [ -d "$LIB_DIR" ]; then
info "Entferne $LIB_DIR"
rm -rf "$LIB_DIR"
fi
rm -rf "$DOC_DIR"
rm -f /run/pvesnap.lock /run/pvesnap.lock.daemon
if [ "$PURGE" -eq 1 ]; then
info "Entferne Konfiguration und Zustand"
rm -rf "$CONF_DIR" "$STATE_DIR"
else
warn "Behalten: $CONF_DIR und $STATE_DIR (mit --purge ebenfalls entfernen)"
fi
cat <<EOF
pvesnap wurde entfernt.
Bereits vorhandene Snapshots bleiben bestehen. Auflisten und loeschen lassen
sie sich weiterhin in der Proxmox-Oberflaeche oder mit:
qm listsnapshot <VMID> / qm delsnapshot <VMID> <NAME>
pct listsnapshot <VMID> / pct delsnapshot <VMID> <NAME>
EOF