From b1862d67f002817635a4673eafb913a96e34f4de Mon Sep 17 00:00:00 2001 From: Bernd Worsch Date: Sat, 13 Sep 2025 02:46:48 +0200 Subject: [PATCH] feat: added plan-host command --- bin/railiance | 4 +- tools/cmd/railiance-plan-host | 87 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 tools/cmd/railiance-plan-host diff --git a/bin/railiance b/bin/railiance index 1f139cf..1e0858a 100644 --- a/bin/railiance +++ b/bin/railiance @@ -28,9 +28,7 @@ cmd="${1:-help}"; shift || true case "$cmd" in help) usage ;; doctor) exec railiance-doctor "$@" ;; - plan-host) - sed -n '1,200p' "$ROOT/docs/first_host.md" | sed -n '/^## 2\) Choose/,/^## 3\)/p' - ;; + plan-host) exec railiance-plan-host "$@" ;; gen-ssh-key) if ! command -v ssh-keygen >/dev/null 2>&1; then echo "Missing: ssh-keygen" >&2; exit 1; fi key="${HOME}/.ssh/id_ed25519" diff --git a/tools/cmd/railiance-plan-host b/tools/cmd/railiance-plan-host new file mode 100644 index 0000000..d26ca78 --- /dev/null +++ b/tools/cmd/railiance-plan-host @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +# tools/cmd/railiance-plan-host +# Provider-neutral planning and checklist for a first Railiance host. + +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +CLOUDINIT="${ROOT}/cloudinit/user-data.yaml" + +usage() { + cat <<'EOF' +Usage: railiance-plan-host [--cloudinit] [--check] [--help] + + --cloudinit Print the recommended cloud-init user-data to stdout. + --check Print a pre-VM checklist only. + --help Show this help. + +Without flags, this command prints the recommended host plan and a checklist. +EOF +} + +print_hdr() { printf "\n%s\n" "$1"; printf "%0.s-" $(seq 1 "${#1}"); echo; } + +plan() { + print_hdr "Provider-neutral host plan" + cat <<'PLAN' +Distro: Ubuntu Server 24.04 LTS (or Debian 12) +CPU/RAM: 2 vCPU / 4–8 GB RAM (start) — scale as needed +Disk: 60–100 GB SSD (expand later for data) +Network: Public IPv4 (and/or IPv6), allow ports 22, 80, 443 +SSH: Use ed25519 key; disable password auth +User: 'ubuntu' or your provider's default user +Backups: Snapshot weekly; keep 2–4 rotations + +Security baseline: + - Regular updates (unattended-upgrades or Ansible role) + - UFW/iptables with allow 22,80,443; deny rest (adjust for cluster) + - Fail2ban (optional) + - Time sync (systemd-timesyncd or chrony) + +Cloud-init: + Use 'bin/railiance cloudinit' or this command with --cloudinit to get the template. +PLAN +} + +checklist() { + print_hdr "Rent-a-VM Checklist" + cat <<'CK' +[ ] Provider account ready (billing set) +[ ] Region chosen (low latency to you/users) +[ ] Image: Ubuntu 24.04 LTS (or Debian 12) +[ ] Size: 2 vCPU / 4–8 GB RAM / 60+ GB SSD +[ ] SSH key uploaded (use ed25519) +[ ] Firewall security group: allow 22,80,443 (tighten later) +[ ] Cloud-init pasted (from bin/railiance cloudinit) +[ ] Hostname set (e.g., railiance-seed-1) +[ ] Record public IP / DNS +CK +} + +cloudinit() { + if [[ -f "${CLOUDINIT}" ]]; then + cat "${CLOUDINIT}" + else + echo "cloud-init template not found at ${CLOUDINIT}" >&2 + exit 1 + fi +} + +# Parse flags +DO_PLAN=true +DO_CHECK=true +while [[ $# -gt 0 ]]; do + case "$1" in + --cloudinit) cloudinit; exit 0 ;; + --check) DO_PLAN=false; DO_CHECK=true; shift ;; + --help|-h) usage; exit 0 ;; + *) echo "Unknown option: $1" >&2; usage; exit 2 ;; + esac +done + +$DO_PLAN && plan +$DO_CHECK && checklist + +echo +echo "Tip: After renting the VM, seed it with: tools/seed_node.sh" +