igneum/infra/cloud-devnet/node/install-node.sh
igneum-labs d6c69bcb0c infra: cloud devnet (20 nodes), rented GPU bench and seed node scripts; plans for both
infra/cloud-devnet: hcloud (doctl variant) create, builder-VM provision from a git-archive source tarball,
systemd units for igneumd --devnet-suffix with a sparse --addpeer mesh and a CPU trickle miner per node,
stdlib wRPC client, experiments (latency, partition, hop, collect, observer hookup), README with the command
sequence and the Hetzner API prices of 3 Oct 2026.
infra/gpu-bench: RunPod image recipes (CUDA 12.8, ROCm), bundle, run.sh (vectors gate, 10-min raw, sweep,
inline shortcut ratio, nvcc/NVRTC/OpenCL recompile timings, results row, intake upload), bench-log template.
infra/seed-nodes: create-seed (persistent IPv4, firewall), provision on the VM, health check, addPeer from the
Mac over grpcurl, seeds.txt; igneum-seed-1 created at 188.245.5.161 (Hetzner cx23, fsn1).
docs/plans/cloud-devnet.md and docs/plans/seed-nodes.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 22:01:50 +00:00

38 lines
1.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# Runs ON a node VM as root (Debian 12 or Ubuntu). Called by provision.sh with:
# install-node.sh <name> <index> <devnet-suffix> <genesis-bits-decimal> <peer-list> <external-ip> <miner-threads> <status-secs>
# Expects /opt/igneum/bin/{igneumd,igneum-miner,wrpc.py,run-igneumd.sh,blocklog.sh} and the three unit files in /root.
set -euo pipefail
name="$1"; idx="$2"; suffix="$3"; bits="$4"; peers="$5"; extip="$6"; threads="$7"; status_secs="${8:-60}"
export DEBIAN_FRONTEND=noninteractive
if ! command -v chronyd >/dev/null 2>&1 || ! command -v iptables >/dev/null 2>&1; then
apt-get update -qq
apt-get install -y -qq chrony iptables python3 jq >/dev/null
fi
systemctl enable --now chrony >/dev/null 2>&1 || true
id igneum >/dev/null 2>&1 || useradd --system --home /var/lib/igneum --shell /usr/sbin/nologin igneum
mkdir -p /var/lib/igneum /var/log/igneum /etc/igneum /opt/igneum/bin
chmod +x /opt/igneum/bin/*
chown -R igneum:igneum /var/lib/igneum /var/log/igneum
# A private devnet: own handshake magic (suffix) and own genesis (bits override recomputes the genesis hash).
# OverrideParams is deny_unknown_fields, so only known keys go in here (consensus/core/src/config/params.rs).
printf '{"genesis_bits": %s}\n' "$bits" > /etc/igneum/override-params.json
cat > /etc/igneum/node.env <<EOF
NODE_NAME=$name
NODE_INDEX=$idx
DEVNET_SUFFIX=$suffix
PEERS=$peers
EXTERNAL_IP=$extip
MINER_THREADS=$threads
MINER_STATUS_SECS=$status_secs
EXTRA_ARGS=
EOF
cp /root/igneumd.service /root/igneum-miner.service /root/igneum-blocklog.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable igneumd igneum-blocklog igneum-miner >/dev/null 2>&1
echo "installed $name (index $idx, suffix $suffix, bits $bits, peers $peers, $threads miner thread(s)); $(/opt/igneum/bin/igneumd --version | head -1)"