Story — Hero Cloud Bootstrapper #11

Open
opened 2026-03-09 11:08:01 +00:00 by mahmoud · 1 comment
Owner

Overview

Deploying a hero_cloud node today requires multiple manual
steps. This story introduces hero_cloud_bootstrapper — a
single binary driven by a remote TOML manifest that knows
what binaries are needed, downloads them, and keeps them
up to date automatically.

It detects whether it is running on a host node or inside
a VM and installs only what is needed for each environment.

The Manifest

bootstrapper.toml is hosted remotely and is the single
source of truth for all binary versions across the fleet.
Bump a version → the entire fleet picks it up on next check.

[node]
binaries = [
    { name = "zinit",    version = "1.2.0", url = "..." },
    { name = "mycelium", version = "0.5.1", url = "..." },
    { name = "chvm",     version = "0.3.0", url = "..." },
]

[vm]
binaries = [
    { name = "zinit",    version = "1.2.0", url = "..." },
    { name = "mycelium", version = "0.5.1", url = "..." },
]

How It Works

On a new node:
bootstrapper install
→ fetches bootstrapper.toml
→ detects environment (node or vm)
→ downloads and installs the right binaries
→ node is ready

On deploy_vm():
→ [vm] binaries injected into VM rootfs
→ zinit runs as PID 1 inside VM
→ mycelium gives VM a unique IPv6
→ zinit UI accessible on :9999 via mycelium IP

On update:
→ bootstrapper fetches latest manifest
→ downloads only what changed
→ removes old binaries
→ restarts affected zinit services

Updates run on every node_register and on a
configurable timer (default: hourly).

Issues Under This Story

  1. Create hero_cloud_bootstrapper repo — manifest,
    environment detection, downloader, installer

  2. Add updater — diff versions, download new,
    remove old, restart zinit services

  3. node_register triggers bootstrapper before
    hardware detection

  4. deploy_vm injects [vm] binaries into VM rootfs —
    zinit as PID 1, mycelium for networking

Definition of Done

  • Fresh node bootstraps with one command
  • bootstrapper.toml drives all binary versions
  • Version update propagates to fleet automatically
  • Every VM has zinit as PID 1 + mycelium IPv6
  • Zinit UI reachable on :9999 via mycelium IP
  • Old binaries cleaned up after update
### Overview Deploying a hero_cloud node today requires multiple manual steps. This story introduces hero_cloud_bootstrapper — a single binary driven by a remote TOML manifest that knows what binaries are needed, downloads them, and keeps them up to date automatically. It detects whether it is running on a host node or inside a VM and installs only what is needed for each environment. ### The Manifest bootstrapper.toml is hosted remotely and is the single source of truth for all binary versions across the fleet. Bump a version → the entire fleet picks it up on next check. [node] binaries = [ { name = "zinit", version = "1.2.0", url = "..." }, { name = "mycelium", version = "0.5.1", url = "..." }, { name = "chvm", version = "0.3.0", url = "..." }, ] [vm] binaries = [ { name = "zinit", version = "1.2.0", url = "..." }, { name = "mycelium", version = "0.5.1", url = "..." }, ] ### How It Works On a new node: bootstrapper install → fetches bootstrapper.toml → detects environment (node or vm) → downloads and installs the right binaries → node is ready On deploy_vm(): → [vm] binaries injected into VM rootfs → zinit runs as PID 1 inside VM → mycelium gives VM a unique IPv6 → zinit UI accessible on :9999 via mycelium IP On update: → bootstrapper fetches latest manifest → downloads only what changed → removes old binaries → restarts affected zinit services Updates run on every node_register and on a configurable timer (default: hourly). ### Issues Under This Story 1. Create hero_cloud_bootstrapper repo — manifest, environment detection, downloader, installer 2. Add updater — diff versions, download new, remove old, restart zinit services 3. node_register triggers bootstrapper before hardware detection 4. deploy_vm injects [vm] binaries into VM rootfs — zinit as PID 1, mycelium for networking ### Definition of Done - [ ] Fresh node bootstraps with one command - [ ] bootstrapper.toml drives all binary versions - [ ] Version update propagates to fleet automatically - [ ] Every VM has zinit as PID 1 + mycelium IPv6 - [ ] Zinit UI reachable on :9999 via mycelium IP - [ ] Old binaries cleaned up after update
mahmoud changed title from Story — Pooler: Single Binary Node Bootstrap with Managed VM Environment to story: hero_cloud_bootstrapper — TOML-driven binary bootstrap for nodes and VMs with dynamic version updates 2026-03-09 11:54:40 +00:00
mahmoud changed title from story: hero_cloud_bootstrapper — TOML-driven binary bootstrap for nodes and VMs with dynamic version updates to Story — Hero Cloud Bootstrapper 2026-03-09 11:55:47 +00:00
Owner

its not needed its part of the service manager in hero-os
no point doing this again

its not needed its part of the service manager in hero-os no point doing this again
mahmoud added this to the later milestone 2026-03-17 11:14:02 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_compute#11
No description provided.