/ scripts / restore-orbitdb.sh
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}"