#!/bin/bash # Besu Node Setup Script for Backend VMs # Run this script on each backend VM after SSH access is established set -euo pipefail NODE_TYPE="${1:-besu-node}" NODE_INDEX="${2:-0}" REGION="${3:-}" if [ -z "$REGION" ]; then echo "Usage: $0 " echo "Example: $0 besu-node 0 eastus" exit 1 fi echo "==========================================" echo "Besu Node Setup" echo "==========================================" echo "Node Type: $NODE_TYPE" echo "Node Index: $NODE_INDEX" echo "Region: $REGION" echo "" # Check if Docker is installed if ! command -v docker &> /dev/null; then echo "Docker is not installed. Installing Docker..." curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker sudo systemctl start docker sudo usermod -aG docker $USER echo "Docker installed. Please log out and log back in for group changes to take effect." fi # Check if Node.js is installed if ! command -v node &> /dev/null; then echo "Node.js is not installed. Installing Node.js 22 LTS..." if [ ! -d "$HOME/.nvm" ]; then curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" else export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" fi nvm install 22 nvm use 22 nvm alias default 22 echo "Node.js 22 LTS installed" fi # Check if JDK 17 is installed if ! command -v java &> /dev/null || ! java -version 2>&1 | grep -q "17"; then echo "JDK 17 is not installed. Installing OpenJDK 17..." sudo apt-get update sudo apt-get install -y openjdk-17-jdk echo "JDK 17 installed" fi # Create Besu directories echo "Creating Besu directories..." sudo mkdir -p /opt/besu/{data,config,keys,logs} sudo chown -R $USER:$USER /opt/besu # Create Besu configuration echo "Creating Besu configuration..." cat > /opt/besu/config/besu-config.toml < /opt/besu/docker-compose.yml < /dev/null < /opt/besu/config/genesis.json <