|
| 1 | +#!/bin/bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +NETWORK="{{ snapshot_fetcher_network }}" |
| 5 | +CLIENT="{{ snapshot_fetcher_client }}" |
| 6 | +DATA_DIR="{{ snapshot_fetcher_out_dir }}" |
| 7 | +BLOCK="{{ snapshot_fetcher_block }}" |
| 8 | +BASE_URL="{{ snapshot_fetcher_base_url }}" |
| 9 | + |
| 10 | +# Set tmux window title |
| 11 | +printf '\033]2;%s\033\\' "Snapshot: $NETWORK-$CLIENT" |
| 12 | + |
| 13 | +echo "=== Snapshot Download Started ===" |
| 14 | +echo "Network: $NETWORK" |
| 15 | +echo "Client: $CLIENT" |
| 16 | +echo "Target Block: $BLOCK" |
| 17 | +echo "================================" |
| 18 | + |
| 19 | +# Get block info |
| 20 | +echo "Fetching snapshot info for $NETWORK $CLIENT at block $BLOCK..." |
| 21 | +BLOCK_INFO=$(curl -s "$BASE_URL/$NETWORK/$CLIENT/$BLOCK/_snapshot_eth_getBlockByNumber.json") |
| 22 | +snapshot_fetcher_block=$(echo "$BLOCK_INFO" | jq -r '.result.number') |
| 23 | +CLIENT_VERSION=$(curl -s "$BASE_URL/$NETWORK/$CLIENT/$BLOCK/_snapshot_web3_clientVersion.json" | jq -r '.result') |
| 24 | + |
| 25 | +echo "Snapshot info:" |
| 26 | +echo "Block: $snapshot_fetcher_block" |
| 27 | +echo "Client: $CLIENT_VERSION" |
| 28 | + |
| 29 | +# Download and extract |
| 30 | +echo "Starting snapshot download container..." |
| 31 | + |
| 32 | +# Only run the snapshot download once. You have to manually remove the file if you want to run it again. |
| 33 | +if [ ! -f "$DATA_DIR/.snapshot_fetcher_started" ]; then |
| 34 | + docker run -d --name snapshot_fetcher \ |
| 35 | + -v $DATA_DIR:/data \ |
| 36 | + --entrypoint "/bin/sh" \ |
| 37 | + -e RCLONE_CONFIG_MYS3_TYPE=s3 \ |
| 38 | + -e RCLONE_CONFIG_MYS3_PROVIDER=Cloudflare \ |
| 39 | + -e RCLONE_CONFIG_MYS3_ACL=public-read \ |
| 40 | + -e RCLONE_CONFIG_MYS3_REGION=auto \ |
| 41 | + -e RCLONE_CONFIG_MYS3_NO_CHECK_BUCKET=true \ |
| 42 | + -e RCLONE_CONFIG_MYS3_NO_LIST=true \ |
| 43 | + -e "RCLONE_CONFIG_MYS3_ENDPOINT={{ snapshot_fetcher_s3_endpoint }}" \ |
| 44 | + -e "RCLONE_CONFIG_MYS3_ACCESS_KEY_ID={{ snapshot_fetcher_s3_access_key_id }}" \ |
| 45 | + -e "RCLONE_CONFIG_MYS3_SECRET_ACCESS_KEY={{ snapshot_fetcher_s3_secret_access_key }}" \ |
| 46 | + docker.ethquokkaops.io/dh/library/alpine -c "cd /data && \ |
| 47 | + apk add --no-cache curl tar zstd rclone && \ |
| 48 | + rclone cat mys3:/ethpandaops-ethereum-node-snapshots/$NETWORK/$CLIENT/$BLOCK/snapshot.tar.zst | tar -I zstd -xvf - -C /data" |
| 49 | + |
| 50 | + touch $DATA_DIR/.snapshot_fetcher_started |
| 51 | + echo "================================================" |
| 52 | + echo "Snapshot downloading to $DATA_DIR" |
| 53 | + echo "================================================" |
| 54 | + echo "Use 'docker logs -f snapshot_fetcher' to follow the progress" |
| 55 | + |
| 56 | +else |
| 57 | + echo "Snapshot download container did already run. Skipping..." |
| 58 | +fi |
0 commit comments