Exos — Mantle OS Builder
Declarative, containerized, reproducible builds for embedded Linux.




Overview
Exos is the orchestration layer that powers Mantle OS. It brings together Yocto, Kconfig, and kas-container under a single declarative workflow — allowing developers to configure, build, and deploy Mantle OS with full reproducibility.
Each branch of Mantle OS corresponds to an upstream Yocto LTS release and is paired with its own Docker build container, hosted on the Mantle GitLab Registry. These containers are used both by local builds and CI/CD runners for nightly releases.
Philosophy
In Mantle OS’s geological model, Exos is the Exosphere — where Earth fades into space. It’s the layer that connects local development to continuous integration, transforming static layers into a self-sustaining ecosystem.
The goal is simple: make embedded Linux builds deterministic, portable, and accessible — without hidden tooling or vendor lock-in.
Structure
- arch/ — Supported CPU architectures and boards (x86, ARM, ARM64, MIPS, PowerPC).
- distro/ — Distro-level configuration for init systems, OTA, base utilities, and DEs.
- docker/ — Source for the official Mantle OS Docker containers. Each is tagged and shipped to the
git.mantle-os.com
registry for use with CI/CD and kas-container. - gitlab/ — CI/CD configuration and menu logic for deploying builds, SDKs, and runners using hosted containers.
- layers/ — Layer manifests for SoC BSPs and software stacks (Qt, KDE, GNOME, IoT, security, virtualization).
- Kconfig — The ncurses-based configuration interface (like Linux
menuconfig
). - exos.yml — The master manifest compiled from all selected YAML fragments.
Menu System
Exos uses a menuconfig-style interface built from Kconfig. It allows you to interactively select system options:
- Architecture (x86_64, ARMv7, ARM64, etc.)
- Board or SoC vendor
- Init system (systemd / sysvinit)
- Base utilities (coreutils / busybox / toybox)
- OTA method (SWUpdate / OSTree / none)
- Desktop environment (KDE6, GNOME, LXQt, XFCE, or none)
- Build options (cache, sstate, SDK targets, etc.)
When saved, the configuration is compiled into exos.yml
and executed through kas-container
.
Docker & CI/CD
Every Mantle OS branch ships its own container image to the GitLab Container Registry. These images are used by CI/CD runners and can also be exported for local builds.
- Build containers are versioned per upstream Yocto LTS (e.g.
scarthgap:latest
). - Nightly CI builds run automatically from these containers.
- Local builds use the same containers via
kas-container
for perfect reproducibility.
Local Setup
# Prepare shared build cache
sudo mkdir -p /srv/mantle
sudo chown -R $USER:$USER /srv/mantle
# Install Docker and set permissions
sudo apt install docker.io
sudo setfacl --modify user:$USER:rw /var/run/docker.sock
# Authenticate with Mantle OS registry (requires 2FA + PAT)
docker login git.mantle-os.com:5050
# Select your container image (example for Scarthgap)
export KAS_CONTAINER_IMAGE="git.mantle-os.com:5050/exos/scarthgap:latest"
# Launch the menu interface
kas-container --ssh-dir ~/.ssh --runtime-args "-v /srv/mantle:/srv/mantle" menu
Build Examples
# Build the default (x86_64) image
kas-container --ssh-dir ~/.ssh --runtime-args "-v /srv/mantle:/srv/mantle" build
# Enter a build shell
kas-container --ssh-dir ~/.ssh --runtime-args "-v /srv/mantle:/srv/mantle" shell
CI/CD runners perform the same operations automatically for nightly builds, guaranteeing that every Mantle OS artifact is built from a verified container environment.
Key Principles
- Reproducible — same input, same output.
- Deterministic — each branch builds from its paired container.
- Portable — build anywhere via Docker or CI runner.
- Transparent — no hidden tooling or vendor scripts.
Summary
Exos is the outermost layer of Mantle OS — where reproducibility meets orchestration. It lets you configure, build, and deploy embedded Linux systems with the same precision, whether you’re on a laptop, a data center runner, or a factory floor.