Files
felhom.eu/documentation/audits/night-restore-2026-10-17/tools/xver.sh
T

23 lines
1.5 KiB
Bash

#!/bin/bash
# R-1107 — restic 0.19.1 vs 0.18.1 vs 0.14.0 on demo-hp's REAL store, read-only (rx.sh: --no-lock, read verbs only).
# Runs in the guest. Each snapshot is restored by every version; the tree hashes must agree.
set -u
I=gitea.dooplex.hu/admin/felhom-controller
declare -A IMG=([0.14.0]=$I:0.322.0 [0.18.1]=$I:0.323.0 [0.19.1]=$I:0.324.0-rc.1)
for v in 0.14.0 0.18.1 0.19.1; do docker image inspect ${IMG[$v]} >/dev/null 2>&1 || docker pull -q ${IMG[$v]} >/dev/null; done
NEW19=$(/root/rx.sh ${IMG[0.19.1]} snapshots --tag bookstack --json 2>/dev/null | python3 -c 'import json,sys; s=[x for x in json.load(sys.stdin) if x.get("program_version","").startswith("restic 0.19")]; print(s[-1]["short_id"] if s else "")')
echo "snapshots: 0.14.0-made f3f16e0e (bookstack), 0.18.1-made 6d9dd607 (rallly), 0.19.1-made $NEW19 (bookstack, newest)"
for snap in f3f16e0e 6d9dd607 $NEW19; do
line="$snap:"
for v in 0.14.0 0.18.1 0.19.1; do
d=/tmp/r1105/x-$snap-$v; rm -rf $d
if /root/rx.sh ${IMG[$v]} restore $snap --target $d >/dev/null 2>&1; then
h=$(cd $d && find . -type f -exec sha256sum {} + | sort -k2 | sha256sum | cut -c1-16); n=$(find $d -type f | wc -l)
line="$line restic $v → $h ($n files)"
else line="$line restic $v → FAILED"; fi
rm -rf $d
done
echo "$line"
done
echo "store listed by each: $(for v in 0.14.0 0.18.1 0.19.1; do printf '%s=%s ' $v $(/root/rx.sh ${IMG[$v]} snapshots --json 2>/dev/null | python3 -c 'import json,sys;print(len(json.load(sys.stdin)))'); done)"