#!/bin/bash # Setup script to run on each DO droplet after cloud-init # Usage: ./setup-node.sh # Example: ./setup-node.sh mainnet set -e NETWORK_TYPE=${1:-mainnet} DATA_DIR=/data/lux UNIVERSE_DIR=/home/lux/universe echo "Setting up Lux $NETWORK_TYPE node..." # Ensure directories exist mkdir -p $DATA_DIR/{chains,plugins,runs,snapshots,keys} mkdir -p $DATA_DIR/keys/{node1,node2,node3,node4,node5} # Generate node keys if they don't exist cd $UNIVERSE_DIR for i in 1 2 3 4 5; do KEY_DIR=$DATA_DIR/keys/node$i if [ ! -f "$KEY_DIR/staking/staker.crt" ]; then echo "Generating keys for node$i..." mkdir -p $KEY_DIR/staking $KEY_DIR/bls # Generate staking certificate openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 \ -keyout $KEY_DIR/staking/staker.key \ -out $KEY_DIR/staking/staker.crt \ -subj "/CN=lux-node$i" \ -nodes 2>/dev/null # Generate BLS signer key (placeholder - actual BLS key generation needs CLI) echo "placeholder-bls-key-node$i" > $KEY_DIR/bls/signer.key fi done # Create environment file cat > $UNIVERSE_DIR/.env </dev/null || true # Build node image echo "Building node image..." docker compose -f compose.$NETWORK_TYPE.yml build --no-cache 2>/dev/null || echo "Build will happen on start" echo "" echo "=== Setup Complete ===" echo "Network: $NETWORK_TYPE" echo "Data directory: $DATA_DIR" echo "" echo "Start the network with:" echo " cd $UNIVERSE_DIR" echo " docker compose -f compose.$NETWORK_TYPE.yml up -d" echo "" echo "Monitor with:" echo " docker compose -f compose.$NETWORK_TYPE.yml logs -f" echo "" echo "Stop with:" echo " docker compose -f compose.$NETWORK_TYPE.yml down"