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>
38 lines
1.8 KiB
Bash
Executable file
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)"
|