restore-orbitdb.sh
1 #!/usr/bin/env bash 2 # Restore OrbitDB data to a mesh node from backup. 3 # 4 # Usage: 5 # bash scripts/restore-orbitdb.sh <ARCHIVE> <NODE_IP> 6 set -euo pipefail 7 8 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" 9 source "${SCRIPT_DIR}/lib/log.sh" 10 export LOG_SERVICE="frame17711-restore" 11 12 ARCHIVE="${1:?Usage: restore-orbitdb.sh <ARCHIVE> <NODE_IP>}" 13 NODE_IP="${2:?Usage: restore-orbitdb.sh <ARCHIVE> <NODE_IP>}" 14 SSH_KEY="${SSH_KEY:-org-17711-mesh-cloud-usa__aws__keys.pem}" 15 16 if [ ! -f "${ARCHIVE}" ]; then 17 jfatal "archive not found" archive="${ARCHIVE}" 18 fi 19 20 # Verify integrity 21 if [ -f "${ARCHIVE}.sha256" ]; then 22 sha256sum -c "${ARCHIVE}.sha256" || jfatal "integrity check failed" archive="${ARCHIVE}" 23 jlog "integrity verified" archive="${ARCHIVE}" 24 fi 25 26 jlog "restore started" archive="${ARCHIVE}" node="${NODE_IP}" 27 28 # Stop mesh-node before restore 29 ssh -i "${SSH_KEY}" "admin@${NODE_IP}" " 30 sudo -u ops bash -c ' 31 export XDG_RUNTIME_DIR=/run/user/1100 32 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1100/bus 33 systemctl --user stop mesh-node 2>/dev/null || true 34 ' 35 " 36 jlog "node stopped" node="${NODE_IP}" 37 38 # Upload and extract 39 cat "${ARCHIVE}" | ssh -i "${SSH_KEY}" "admin@${NODE_IP}" " 40 sudo -u ops tar xzf - -C / 2>/dev/null 41 " 42 jlog "data restored" node="${NODE_IP}" 43 44 # Restart mesh-node 45 ssh -i "${SSH_KEY}" "admin@${NODE_IP}" " 46 sudo -u ops bash -c ' 47 export XDG_RUNTIME_DIR=/run/user/1100 48 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1100/bus 49 systemctl --user start mesh-node 50 ' 51 " 52 jlog "node restarted" node="${NODE_IP}" 53 54 jlog "restore completed" archive="${ARCHIVE}" node="${NODE_IP}"