# 📦 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: 1. **Deklarative Day-Zero-Provisionierung:** Butane liefert eine Blaupause für unsere eigene Konfigurationssprache und das Provisioning-System von NexusOS. 2. **Komplexe Build-Validierung:** Die Ignition Robotics Suite dient als realweltlicher "Torture Test" für den `nexus` Builder 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 ignition` erzeugt 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 `nexus` transpiliert `NimPak` nach Ignition JSON oder ein eigenes natives Format - Ziel: Volle Kontrolle, Reproduzierbarkeit und Integration in CI/CD (`nexus system-image --target=gcp`) #### 🛠️ Beispiel-Ziel-CLI: ```bash 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 `nimplates` fü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 | --- ```mermaid 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** ```mermaid 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 `butane` CLI to define `.bu` YAML * Transpile to `.ign` JSON 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 `.ign` JSON from `system.nim`.”* * Translate `system.nim` → `.ign` JSON 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.json` or `system.nim` AST 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 flatcar` or `--target ignition` produces compatible `.ign` JSON * Provide `nexus-init` binary: 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."* 🐧