Skip to content

Commit a2fb111

Browse files
Node snapshot handling script (#446)
1 parent 8610b62 commit a2fb111

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

scripts/snapshots.sh

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/bin/bash
2+
3+
# Config
4+
AWS_USER=ubuntu
5+
AWS_HOST=aws-ec2-host
6+
CONTAINER_NAME="subspace-archival-node-1"
7+
LOCAL_DEST_DIR="~/Downloads" # or any path on your local machine
8+
9+
# Node configuration - MODIFY THESE AS NEEDED
10+
NODE_TYPE="evm" # Options: "evm" or "rpc"
11+
NETWORK="mainnet" # Options: "mainnet" or "taurus"
12+
13+
# Determine archive name based on node type and network
14+
if [ "$NODE_TYPE" = "evm" ]; then
15+
ARCHIVE_NAME="snapshot-archive-${NETWORK}-domain.tar.zst"
16+
elif [ "$NODE_TYPE" = "rpc" ]; then
17+
ARCHIVE_NAME="snapshot-archive-${NETWORK}-consensus.tar.zst"
18+
else
19+
echo "Error: NODE_TYPE must be either 'evm' or 'rpc'"
20+
exit 1
21+
fi
22+
23+
echo "📦 Starting backup for $NODE_TYPE node on $NETWORK network"
24+
echo "📁 Archive will be named: $ARCHIVE_NAME"
25+
26+
# SSH and run the backup steps asynchronously
27+
ssh "$AWS_USER@$AWS_HOST" "bash -s" <<EOF &
28+
nohup bash -c '
29+
set -e
30+
NODE_TYPE="$NODE_TYPE"
31+
NETWORK="$NETWORK"
32+
ARCHIVE_NAME="$ARCHIVE_NAME"
33+
34+
echo "[1/6] Copying from Docker container $CONTAINER_NAME..."
35+
mkdir -p \$HOME/snapshot
36+
sudo docker cp $CONTAINER_NAME:/var/subspace \$HOME/snapshot
37+
38+
# Check if zstd is installed, if not install it
39+
if ! command -v zstd &> /dev/null; then
40+
echo "zstd could not be found, installing..."
41+
sudo apt-get update && sudo apt-get install -y zstd
42+
fi
43+
echo "zstd installed successfully."
44+
45+
echo "[2/6] Removing node-specific directories..."
46+
if [ "$NODE_TYPE" = "evm" ]; then
47+
echo "EVM node detected - removing keystore and network folders..."
48+
rm -rf \$HOME/snapshot/subspace/keystore
49+
rm -rf \$HOME/snapshot/subspace/network
50+
elif [ "$NODE_TYPE" = "rpc" ]; then
51+
echo "RPC node detected - removing network folder..."
52+
rm -rf \$HOME/snapshot/subspace/network
53+
fi
54+
55+
echo "[3/6] Compressing snapshot with zstd..."
56+
tar --use-compress-program=zstd -cf \$HOME/\$ARCHIVE_NAME -C \$HOME snapshot
57+
58+
echo "[4/6] Archive created successfully at \$HOME/\$ARCHIVE_NAME"
59+
60+
echo "[5/6] Cleaning up..."
61+
# Note: Archive is kept on server for manual download
62+
rm -rf \$HOME/snapshot
63+
64+
echo "✅ Snapshot process completed for \$NODE_TYPE node on \$NETWORK network."
65+
echo "📁 Archive \$ARCHIVE_NAME is ready for download"
66+
' > \$HOME/snapshot_log.txt 2>&1 &
67+
EOF
68+
69+
echo "🚀 Backup process started remotely for $NODE_TYPE node on $NETWORK network."
70+
echo "📋 Logs will be in ~/snapshot_log.txt on the AWS server."
71+
echo "📁 Final archive: $ARCHIVE_NAME"
72+
echo ""
73+
echo "⏳ Waiting for backup to complete..."
74+
75+
# Wait for the background process to complete
76+
wait
77+
78+
echo ""
79+
echo "📥 Now downloading the archive..."
80+
scp "$AWS_USER@$AWS_HOST:$ARCHIVE_NAME" "$LOCAL_DEST_DIR"
81+
82+
if [ $? -eq 0 ]; then
83+
echo "✅ Download completed successfully!"
84+
echo "🧹 Cleaning up archive from server..."
85+
ssh "$AWS_USER@$AWS_HOST" "rm -f $ARCHIVE_NAME"
86+
echo "✅ Server cleanup completed!"
87+
else
88+
echo "❌ Download failed. Archive remains on server at: $ARCHIVE_NAME"
89+
fi

0 commit comments

Comments
 (0)