9.5 KiB
📦 Strategische Integration von Butane & Ignition in NexusOS
Autor: Markus Maiwald
Mitwirkung: Voxis / GPT DevMode
Status: Strategisch festgelegt
Ziel: Klare Einbindung von Butane und der Ignition Robotics Suite in das Entwicklungs- und Architekturmodell von NexusOS
🧭 Einleitung
Butane (YAML → Ignition JSON) und die Ignition Robotics Suite sind keine bloßen Nebenpfade. Sie sind strategische Komponenten, die zwei essenzielle Funktionen für NexusOS erfüllen:
- Deklarative Day-Zero-Provisionierung: Butane liefert eine Blaupause für unsere eigene Konfigurationssprache und das Provisioning-System von NexusOS.
- Komplexe Build-Validierung: Die Ignition Robotics Suite dient als realweltlicher "Torture Test" für den
nexusBuilder und die.npk-Architektur.
🔧 1. Butane & Ignition: Die Blaupause für deklarative Erstkonfiguration
💡 Problemstellung
Wie bringt man ein unverändertes ISO-Image bei seinem allerersten Boot in einen exakten, reproduzierbaren Zustand – ohne interaktive Eingaben oder nachgelagerte Skripte?
✅ Lösung & Integration in NexusOS
📍 Phase 0–1: Sofortiger Einsatz von Butane
- Verwendung von
.bu-Dateien (Butane YAML) zur Erstellung deterministischer Bootkonfigurationen - Nutzung für Prototyping, Developer-VMs, QEMU-Bootszenarien
nexus build-image --provision-with ignitionerzeugt ISO/VM mit Provisioning-Config
📍 Phase 2–4: Transpiler-Architektur – Butane als konzeptionelles Vorbild
- Entwicklung einer typ-sicheren, deklarativen EDSL
NimPak(system.nexus.nim) - Das native Tool
nexustranspiliertNimPaknach Ignition JSON oder ein eigenes natives Format - Ziel: Volle Kontrolle, Reproduzierbarkeit und Integration in CI/CD (
nexus system-image --target=gcp)
🛠️ Beispiel-Ziel-CLI:
nexus init --from-butane config.bu # Migration vorhandener Konfigurationen
nexus system-image --target=gcp # Generiert vollständiges System-Image inkl. Ignition-Config
🌐 Cloud- & Bare-Metal-Usecase
-
Kompatibilität zu CoreOS/Flatcar beibehalten
-
Strategie zur Skalierung in Plattformen wie "IT Qube" oder beliebige Cloud-Flotten
🧪 2. Ignition Robotics Suite: Der kanonische Testfall für .npk & nexus
🎯 Ziel
Validierung der NexusOS Build-Toolchain an einem realweltlichen, hochkomplexen Open-Source-Stack (Ignition Gazebo).
🔬 Integration & Nutzen
| Paket | Nutzen für NexusOS |
|---|---|
ignition-gazebo |
Tiefes Abhängigkeitsnetzwerk, ideal als Build-Stresstest |
ignition-tools |
Leichtgewichtig, für erste Tests & CI geeignet |
ignition-validate |
Validator-Logik für unsere .npk-specs/schema.yaml |
📍 Testziele:
-
Prüfung von
nimplatesfür komplexe CMake-Projekte -
Reproduzierbare Builds via
nip build&nip verify -
Showcase: „Wenn NexusOS diesen Stack besser paketiert als AUR oder Debian, haben wir gewonnen.“
🔗 Strategische Roadmap-Zuordnung
| Phase | Komponente | Aktion |
|---|---|---|
| 0–1 | Butane | Nutzung als Day-Zero-Provisionierung für ISO/VM-Tests |
| 2 | ignition-tools | Erste .npk-Pakete, Tests mit nip |
| 3 | ignition-validate | Einbindung in Schema- und Validierungslogik |
| 3–4 | nexus Provisioner |
Entwicklung von NimPak + Transpiler nach Ignition JSON |
| 4 | ignition-gazebo | Showcase für kompletten, komplexen Stack in NexusOS |
graph LR
A[Endbenutzer/Admin] --> B(Admin Dashboard Frontend - Vue3)
B --> C(Core Backend API - Go)
C --> D(Workflow Engine - Temporal.io)
C --> E(PostgreSQL Datenbank - State, Config, Audit)
C --> F(Secrets Management - HashiCorp Vault)
D -- Triggers Tasks --> G(Go Backend Worker)
G -- Uses Client --> H(M365 Graph API Client - Go SDK)
G -- Uses Client --> I(Google Workspace API Client - Go SDK)
G -- Uses Client --> J(Zitadel API Client - Go)
G -- Executes --> K(OpenTofu Wrapper - Go)
G -- Executes --> L(Helm Wrapper - Go SDK/CLI)
G -- Interacts --> M(Kubernetes Client - client-go)
H --> N(Microsoft 365 Tenant API)
I --> O(Google Workspace Tenant API)
J --> P(Zitadel Identity Platform)
K -- Manages --> Q(Cloud Resources - DBs, Storage etc.)
L -- Deploys/Manages --> R(Deployed Apps on K8s - Nextcloud etc.)
M -- Interacts --> S(Kubernetes Cluster API - Talos)
P -- IdP/Broker for --> R
P -- External IdP --> N
P -- External IdP --> O
style F fill:#f9d,stroke:#333,stroke-width:2px
style D fill:#ccf,stroke:#333,stroke-width:2px
style P fill:#ccf,stroke:#333,stroke-width:2px
style S fill:#d9ead3,stroke:#333,stroke-width:2px
style Q fill:#d9ead3,stroke:#333,stroke-width:2px
style R fill:#d9ead3,stroke:#333,stroke-width:2px
Here’s a structured Phased Replacement Plan for how NexusOS evolves from using Butane + Ignition to developing and owning a fully native declarative provisioning system, while maintaining compatibility.
📈 Phased Replacement Plan: Butane & Ignition → NexusOS Native Provisioning
graph TD
A[Phase 0–1: Bootstrap with Butane + Ignition] --> B[Phase 2: NexusOS Provisioning DSL]
B --> C[Phase 3: Native Transpiler (nexus → ignition.json)]
C --> D[Phase 4: Native Executor Replacing Ignition]
D --> E[Phase 5: Portable Nexus Provisioner + Compatibility Layer]
🧩 Phase Overview
🔹 Phase 0–1: Bootstrap using Butane + Ignition
“Don’t reinvent yet — just boot.”
- Use official
butaneCLI to define.buYAML - Transpile to
.ignJSON files - Embed Ignition JSON in LiveCD initramfs or pass via GCP/EC2 metadata
- NexusOS boots and provisions using upstream Ignition binary
✅ Fast path to bootable ISO & reproducible setup
🔹 Phase 2: Develop the NimPak Provisioning DSL
“Replace the input language, not the backend.”
- Define system in a type-safe EDSL (
system.nim) - Add standard building blocks (users, files, services, systemd units, filesystems)
- DSL compiles to internal AST (not yet targeting JSON)
✅ Begin shaping our own syntax & abstraction model
🔹 Phase 3: Write Native Transpiler (nexus provision --ignition)
“Generate compatible
.ignJSON fromsystem.nim.”
- Translate
system.nim→.ignJSON via native Nim transpiler - Ensure full compatibility with existing Ignition-based systems
- Enables complete replacement of Butane
✅ Drop Butane, NexusOS now controls all authoring & config generation
🔹 Phase 4: Native Executor replaces Ignition
“Replace the runtime engine with our own init hook.”
- Implement minimal executor in early userland (e.g. Toybox init or custom Nim binary)
- Reads
provision.npk.jsonorsystem.nimAST directly - Applies provisioning actions: file writes, user setup, fstab, etc.
✅ No dependency on upstream Ignition; fully Nexus-native
🔹 Phase 5: Nexus Provisioner (Universal Init + Translator)
“Support both NexusOS and compatible systems.”
nexus provision --target flatcaror--target ignitionproduces compatible.ignJSON- Provide
nexus-initbinary: tiny FOSS init-time runner usable on other distros (optional) - Portable across cloud platforms, edge, or bare-metal
✅ Becomes provisioning standard for deterministic OS deployment across systems
🔄 Feature Matrix by Phase
| Feature | Phase 0–1 | Phase 2 | Phase 3 | Phase 4 | Phase 5 |
|---|---|---|---|---|---|
| Use of Butane | ✅ | ✅ | ❌ | ❌ | ❌ |
| Use of Ignition runtime | ✅ | ✅ | ✅ | ❌ | ❌ |
| Own DSL for system config | ❌ | ✅ | ✅ | ✅ | ✅ |
| Native provisioner logic | ❌ | ❌ | ❌ | ✅ | ✅ |
Backward compatibility (.ign) |
✅ | ✅ | ✅ | ✅ | ✅ |
| Cross-platform provisioning | ❌ | ❌ | ❌ | ⚠️ | ✅ |
💡 Summary
NexusOS initially leans on Butane and Ignition, but with every phase:
- More ownership is gained
- More abstraction power is unlocked
- More control over security, reproducibility, and provisioning logic is achieved
By Phase 5, NexusOS becomes a provisioning standard itself — usable even outside NexusOS, similar to what Nix did with flakes and NixOps.
🧠 Fazit
Butane & Ignition sind strategische Testfelder und Blaupausen. Sie liefern einerseits sofortige Werkzeuge zur Provisionierung, andererseits die konzeptionellen Grundlagen für unsere eigene, überlegene Lösung.
Wenn NexusOS in der Lage ist:
-
komplexe Systeme wie Ignition Robotics eleganter zu bauen, und
-
Provisionierung genauso deterministisch wie eine Software-Build-Pipeline zu behandeln,
dann haben wir den Schritt vom klassischen Linux-Distro-Baukasten zu einer modernen, deklarativen OS-Plattform vollzogen.
"Wir bauen keine Distro. Wir bauen ein Betriebssystem, das sich selbst versteht." 🐧