downloads.fermihdi.io — SKILL.md

/ › 2.0.4 › skills › fermihdi-hd-install

Download SKILL.mdView raw

name: fermihdi-hd-install description: Install and provision a FermiHDI HD deployment in any supported topology (Kubernetes/Helm, bare-metal Ansible, bare-Docker multi-host with host networking, or the dev sandbox), by downloading the published installer from downloads.fermihdi.io and pulling images from cr.fermihdi.io — no source-code workspace required. Includes distro-portable host prep for hugepages, VFIO and CPU isolation across Debian, RHEL and Arch.

Install a FermiHDI HD deployment

A customer host has no source checkout. Everything you need is published:

Never assume a local repo path; download the installer and run from the unpacked bundle.

0. Get the installer (every host)

curl -fsSL https://downloads.fermihdi.io/install.sh | sh

This downloads fermihdi-hd-install-<version>.tar.gz, verifies it against its published SHA-256, unpacks it into the current directory, and runs the read-only host inventory (changes nothing, needs no root). The unpacked bundle is the working set for everything below: fermihdi-discover, fermihdi-prepare, fermihdi-configure, ansible/, helm/, fermihdi-k8s (and fermihdi-talos-*), and lib/lib_distro.sh. Pin a version with FERMIHDI_VERSION=2.0.4; mirror with FERMIHDI_BASE_URL. Any script that calls another fetches it from the same archive — nothing is pulled from a developer workspace.

1. Detect the host and its distro (every node)

. ./lib/lib_distro.sh; fhd_detect_distro sets FHD_PKG_INSTALL, FHD_GRUB_MKCONFIG, FHD_GRUB_CFG for Debian (apt), RHEL/Oracle/Rocky/Alma/Fedora (dnf/yum), and Arch (pacman). Never hardcode apt-get/update-grub — the three families differ in package names, the grub-mkconfig command, and the grub.cfg path (/boot/grub/grub.cfg vs /boot/grub2/grub.cfg). RHEL BLS uses grubby; a long isolcpus can overflow grubenv, so write kernel args into the BLS entries (grubby --update-kernel=ALL --args=...) or /etc/tuned/bootcmdline, not just grubenv.

2. Choose a topology

Topology When How
Kubernetes / Helm production clusters helm/, fermihdi-k8s (Talos: fermihdi-talos-*) — image refs point at cr.fermihdi.io
Bare-metal Ansible dedicated servers, no k8s ansible/ role fermihdi_node + fermihdi-prepare/-configure
Bare-Docker multi-host several hosts, no orchestrator fermihdi-docker cluster.yaml renders per-host docker run --network host scripts (+ deploy-all.sh) — ports coordinated by plane (§5)
Single-host sandbox evaluation, demos, benchmarking on one host published separately at downloads.fermihdi.io/hd/sandbox-latest.tar.gz — use the fermihdi-hd-sandbox skill, not this installer

3. Host prep — hugepages (every SN and SCC host)

Each SN or SCC instance needs 4 × 1 GB + 512 × 2 MB hugepages, both GRUB-reserved at boot AND mounted:

4. Host prep — VFIO (NVMe, and NIC only if using DPDK on the NIC), made persistent

Bind each data NVMe (and the NIC, only if NOT FERMIHDI_FORCE_POSIX) to vfio-pci. Runtime binding reverts on reboot — make it persistent: fhd_vfio_persist <pci-addr...> (driverctl if present, else a systemd oneshot that rebinds by PCI address at boot; portable across the three distros). fermihdi-prepare --apply can install this. Prefer per-address binding over vfio-pci.ids=vendor:device when the OS drive shares a model with the data drives; never bind the boot device.

5. Bare-Docker multi-host (host networking; the "chess.com" pattern)

Don't hand-write these commands: fermihdi-docker cluster.yaml -o docker-deploy renders one docker run script per host (nodes with --network host; the DMS on its own bridge networks) plus deploy-all.sh, which copies each to its host over SSH and runs it, DMS first. It reads secrets from the environment (never bakes them in) and refuses to emit a host whose instances collide on an exclusive port. The rest of this section is what those scripts encode.

One control host runs DMS-CA, DMS-Core, SCC and the ingester; each other host runs one SN. All node containers use --network host, so planes are coordinated by PORT, not network:

Launch order: DMS-CA → DMS-Core (seed nodes.jsonl, chown to the runtime uid, restart) → SCC → SN(s) with bootstrap tokens + CA bundle → ingester. Each SN: --privileged, --ulimit memlock=-1:-1, mount /dev/hugepages + /dev/hugepages1G, pass the VFIO group devices, FERMIHDI_FORCE_POSIX=1, MASTER_CPUSET=<isolated lCPUs>, and set FERMIHDI_JUMBO=1 on SCC and every SN if the instance uses jumbo. All images come from cr.fermihdi.io/hd. Rocks start via pebble (which passes the container env through, so FERMIHDI_JUMBO etc. reach the binary); the entrypoint can be overridden to the bare binary (/app/hd_storage_controller, /app/hd_storage_node) for launcher-driven runs.

6. Verify

fhd_verify_hugepages, VFIO bindings present and persistent, all SNs FullyReady, SCC data plane bound on 6987, and an ingest+query cycle returns rows with integrity OK. If not, use fermihdi-hd-troubleshoot.

Download SKILL.mdView raw