Files
proxmox/smom-dbis-138-proxmox/scripts/deployment/setup-docker-besu.sh

183 lines
5.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Setup Docker and Besu containers in temporary VM
# This script should be run inside the temporary VM
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BESU_DATA="/opt/besu"
SOURCE_PROJECT="${1:-/opt/smom-dbis-138}"
log_info() { echo "[INFO] $1"; }
log_success() { echo "[✓] $1"; }
log_warn() { echo "[WARNING] $1"; }
log_error() { echo "[ERROR] $1"; exit 1; }
log_info "Setting up Docker and Besu environment..."
# Update system
log_info "Updating system packages..."
export DEBIAN_FRONTEND=noninteractive
export LC_ALL=C
export LANG=C
apt-get update -qq
apt-get upgrade -y -qq
# Install prerequisites
log_info "Installing prerequisites..."
apt-get install -y -qq \
ca-certificates \
curl \
gnupg \
lsb-release \
wget \
jq \
git \
vim \
net-tools \
iproute2
log_success "Prerequisites installed"
# Install Docker
log_info "Installing Docker..."
if command -v docker >/dev/null 2>&1; then
log_info "Docker already installed, skipping..."
else
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update -qq
apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable docker
systemctl start docker
log_success "Docker installed"
fi
# Verify Docker is running
if ! systemctl is-active --quiet docker; then
log_error "Docker service is not running"
exit 1
fi
# Create directories
log_info "Creating Besu directories..."
mkdir -p "$BESU_DATA"/{validators,sentries,rpc}/{data,config,keys,logs}
mkdir -p "$BESU_DATA"/shared/{genesis,permissions}
# Create subdirectories for each node
for i in {1..5}; do
mkdir -p "$BESU_DATA/validators/validator-$i"/{data,config,keys,logs}
done
for i in {1..4}; do
mkdir -p "$BESU_DATA/sentries/sentry-$i"/{data,config,keys,logs}
done
for i in {1..3}; do
mkdir -p "$BESU_DATA/rpc/rpc-$i"/{data,config,keys,logs}
done
log_success "Directories created"
# Copy configuration files from source project
if [[ -d "$SOURCE_PROJECT" ]]; then
log_info "Copying configuration files from $SOURCE_PROJECT..."
# Copy genesis.json
if [[ -f "$SOURCE_PROJECT/config/genesis.json" ]]; then
cp "$SOURCE_PROJECT/config/genesis.json" "$BESU_DATA/shared/genesis/"
log_success "Copied genesis.json"
else
log_warn "genesis.json not found at $SOURCE_PROJECT/config/genesis.json"
fi
# Copy static-nodes.json
if [[ -f "$SOURCE_PROJECT/config/static-nodes.json" ]]; then
cp "$SOURCE_PROJECT/config/static-nodes.json" "$BESU_DATA/shared/genesis/"
log_success "Copied static-nodes.json"
else
log_warn "static-nodes.json not found"
fi
# Copy permissions files
if [[ -f "$SOURCE_PROJECT/config/permissions-nodes.toml" ]]; then
cp "$SOURCE_PROJECT/config/permissions-nodes.toml" "$BESU_DATA/shared/permissions/"
log_success "Copied permissions-nodes.toml"
else
log_warn "permissions-nodes.toml not found"
fi
if [[ -f "$SOURCE_PROJECT/config/permissions-accounts.toml" ]]; then
cp "$SOURCE_PROJECT/config/permissions-accounts.toml" "$BESU_DATA/shared/permissions/" 2>/dev/null || true
fi
# Copy validator keys
if [[ -d "$SOURCE_PROJECT/keys/validators" ]]; then
for i in {1..5}; do
if [[ -d "$SOURCE_PROJECT/keys/validators/validator-$i" ]]; then
cp -r "$SOURCE_PROJECT/keys/validators/validator-$i"/* "$BESU_DATA/validators/validator-$i/keys/" 2>/dev/null || true
log_info "Copied keys for validator-$i"
fi
done
log_success "Copied validator keys"
else
log_warn "Validator keys directory not found at $SOURCE_PROJECT/keys/validators"
fi
# Copy sentry keys if they exist
if [[ -d "$SOURCE_PROJECT/keys/sentries" ]]; then
for i in {1..4}; do
if [[ -d "$SOURCE_PROJECT/keys/sentries/sentry-$i" ]]; then
cp -r "$SOURCE_PROJECT/keys/sentries/sentry-$i"/* "$BESU_DATA/sentries/sentry-$i/keys/" 2>/dev/null || true
fi
done
log_success "Copied sentry keys"
fi
# Copy RPC keys if they exist
if [[ -d "$SOURCE_PROJECT/keys/rpc" ]]; then
for i in {1..3}; do
if [[ -d "$SOURCE_PROJECT/keys/rpc/rpc-$i" ]]; then
cp -r "$SOURCE_PROJECT/keys/rpc/rpc-$i"/* "$BESU_DATA/rpc/rpc-$i/keys/" 2>/dev/null || true
fi
done
log_success "Copied RPC keys"
fi
else
log_warn "Source project not found at $SOURCE_PROJECT"
log_warn "You'll need to copy configuration files manually"
fi
# Copy docker-compose file if it exists
if [[ -f "$PROJECT_ROOT/templates/docker-compose-besu-temp.yml" ]]; then
cp "$PROJECT_ROOT/templates/docker-compose-besu-temp.yml" "$BESU_DATA/docker-compose.yml"
log_success "Copied docker-compose.yml"
fi
# Copy config templates
if [[ -d "$PROJECT_ROOT/templates/besu-configs" ]]; then
log_info "Copying Besu configuration templates..."
cp -r "$PROJECT_ROOT/templates/besu-configs"/* "$BESU_DATA/" 2>/dev/null || true
log_success "Configuration templates available"
fi
log_success "Docker setup complete!"
log_info ""
log_info "Next steps:"
log_info "1. Review and customize config files in $BESU_DATA"
log_info "2. Ensure all keys are in place"
log_info "3. Start containers: cd $BESU_DATA && docker compose up -d"
log_info "4. Check logs: docker compose logs -f"