Containerized ARM64 Linux image builder for Xiaomi Pad 5 / Mi Pad 5 (nabu, SM8150).
This project is designed for reproducible image artifact generation in Podman/Docker, with strict validation and explicit safety boundaries.
Related projects:
- This project creates image artifacts only.
- It does not auto-flash block devices.
- Hardware bring-up topics (sensor/audio) are treated as investigation workflows unless there is concrete evidence.
nabu-builder list-distros currently reports:
armbianarmbian-ubuntudebian-armubuntu-armubuntu-server-armubuntu-core-armfedora-rawhidefedora-44fedora-43kubuntu-armnobara-linuxalpine-linux
Implemented runner dispatch exists for:
fedora-*ubuntu-armubuntu-server-armubuntu-core-armarmbian-ubuntudebian-armkubuntu-armarmbian
Planned/guarded distros:
nobara-linuxalpine-linux
These planned targets are intentionally guarded and return clear status instead of pretending to build full rootfs output.
nabu-builder list-desktops includes:
kde-plasma,plasma-mobile,gnome,gnome-mobilecosmic-desktop,elementary,hyprland,poshmauikit,lxqt,lomiri,xfce,swaycinnamon,deepin,sxmo,no-desktop
Availability depends on distro/repo constraints; unsupported combinations fail fast with clear messages.
Primary host target: Arch Linux.
sudo pacman -S --needed podman qemu-user-static qemu-user-static-binfmtDocker is also supported.
cd nabu-linux-builder
make image
./run-builder.sh doctor
./run-builder.sh menu# Interactive menu
./run-builder.sh menu
# Health checks in container
./run-builder.sh doctor
# Open container shell
./run-builder.sh shell
# Build from config (dry-run)
./run-builder.sh build configs/test-fedora43-gnome-tr-refind.yaml --dry-run
# Real build
./run-builder.sh build configs/test-fedora43-gnome-tr-refind.yaml
# Raw CLI passthrough
./run-builder.sh nabu-builder list-distros
./run-builder.sh nabu-builder list-desktopsOutput root:
artifacts/Nabu-Build-OUTs/<build-id>/
Typical outputs:
*-system.img*-system.img.zst*-esp.img*-esp.img.zst*-efi-files.zipBUILD-REPORT.mdbuild-manifest.jsonSHA256SUMSlogs/
The builder supports a welcome-driven user onboarding mode:
user.mode: create-user-after-installation
In this mode, regular user creation is deferred to the welcome app workflow, and temporary first-boot session handling is provisioned accordingly.
For Fedora + kde-plasma, the builder prefers KDE's native plasma-setup first-boot flow in this mode, with nabulinuxwelcome as fallback if unavailable.
For Ubuntu/Kubuntu + kde-plasma, the builder uses KDE's native plasma-setup flow in this mode. If the package is not available in the distro repository, it builds the matching upstream plasma-setup release inside the target rootfs and does not fall back to nabulinuxwelcome.
The repository includes a GitHub Actions pipeline for Xiaomi Pad 5 / nabu Kubuntu-family images:
- gate builds:
no-desktopforen_US.UTF-8andtr_TR.UTF-8 - release builds:
gnome,kde-plasma, andplasma-mobilefor both locales - release payload: six compressed system images plus one shared compressed ESP image and one shared EFI bundle
The workflow runs on push to main and through manual dispatch. KDE Plasma and Plasma Mobile profiles use KDE plasma-setup for first-boot provisioning. Build-time passwords are never stored in the repository; image builds require the NABU_USER_PASSWORD repository secret. Local builds can provide the same value as an environment variable.
run-builder.sh: host entrypoint (runtime detection, mounts, command dispatch)builder_cli/: Python CLI, menu, validation, runner dispatchscripts/: backend build logic and ops utilitiesconfigs/: example YAML build configsartifacts/,work/,cache/: generated runtime/build data
- Planned distros remain intentionally guarded.
- Some filesystem/bootloader combinations are metadata/planned paths and may require explicit flags or return warnings.
- Device-specific hardware fixes are evidence-gated and should be validated before integration.
MIT. See LICENSE.