Skip to content
View kldload's full-sized avatar

Block or report kldload

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
kldload/README.md

 kldload

BYOL0 — bring your own layer zero

A build tool that assembles a Linux distribution onto ZFS root from the vendor's own package repositories — and the artifact OS that falls out of it.

Boot environments, air-gapped installs, and a snapshot before every package transaction.

License: BSD-3 Platform Substrates Root Boot

The family: kldload — the substrate · zxplore — the ZFS console · wgxplore — the WireGuard console · vmxplore — the VM console

kldload desktop — the installed system, with the console tools on the dock

There are two ways to use this.

1 — As a build tool, against your own Linux. It replaces the "download the .iso" step. dnf --installroot, debootstrap or pacstrap against the vendor's own CDN, then ZFS and NVIDIA compiled against the kernel that install just laid down, signed and MOK-enrolled so they load with Secure Boot left on. Nothing forked, nothing patched. The build stops wherever you decide — a plain install you finish by hand, or a fully baked image that gets deployed rather than installed.

2 — As the finished article. The ISO is what that build leaves behind: ZFS on root with boot environments, WireGuard, KVM, Kubernetes, an eBPF observability plane and a local AI stack, with the kernel and its out-of-tree modules pinned as one matched set so a routine update cannot separate them.

The thing it adds that a vendor image does not have: apt, dnf and pacman snapshot the root before every transaction, so reversing a failed upgrade is one command rather than a rescue USB and an evening.

Two substrates in the installer menu — Fedora and Debian — and two package managers underneath. Both install with the network unplugged, from complete mirrors baked into the ISO.

Website: kldload.com · Download: full ISO / net installer · Release notes: 1.4.2 · Discord: discord.gg/QX8wf38N3V

The install, in two screens. Boot the USB and this opens by itself — no terminal, no wiki. It is also reachable at https://<host>:8443 from another machine, for a box with no screen.

Pick what to build — the distribution, the profile, and what goes in:

Installer: pick what to build

Say where it goes, then start it:

Installer: target disk and identity

First boot. Nobody drives this part. The machine bootstraps Kubernetes, pulls the AI model and builds its golden images on its own, then tells you whether anything was flagged.

First boot: build phases complete, nothing flagged

What it looks like once it is up

zxplore — the ZFS console. Every dataset, every property, and the snapshot list that makes apt rollback possible.

zxplore datasets and snapshots

Docker's layers are ZFS datasets. The storage driver is zfs, so a pull is a clone and every layer inherits the pool's compression.

Docker on ZFS in zxplore

wgxplore — the WireGuard estate. Four planes across the fleet, joined into one view, with every peer no host declares called out.

wgxplore estate view

vmxplore — the VM estate. Grouped by what the machines are for rather than by name, with the guest's own screen rendered in the console — no separate viewer. Disks are ZFS zvols, so a clone is instant and a rollback is one command.

vmxplore: the VM estate with a live guest screen

ztxplore — the OpenZFS test lab. Six distributions on zvols, each running the distro's own ZFS packages against its own kernel. Goldens are built once and cloned per run, and it reports what did not build as plainly as what did.

ztxplore: the OpenZFS test lab

Kubernetes, HA by default. Three control planes behind a kube-vip VIP; adding a node reconciles the mesh, etcd and the firewall everywhere else.

Kubernetes in the web console

Metrics, grouped. 29 Grafana dashboards: the estate, eBPF, the pool, and the OpenZFS test lab kept separate from it.

The metrics section


Requirements

A 64-bit x86 machine UEFI required. Legacy BIOS boot is not supported.
A USB stick, 32 GB or larger The full image is ~15 GB. The 2.2 GB net installer fits a 4 GB stick.
A target disk It will be erased.
Network Optional — both substrates install fully offline.

Legacy BIOS is absent by design, not untested: the installer writes GPT with an EFI System Partition and a ZFS pool, and Secure Boot, ZFSBootMenu, boot repair and rollback all operate on the ESP. See docs/INSTALL.md for the full detail.

Quickstart

# Download and burn (USB target)
curl -L -o kldload.iso https://dl.kldload.com/kldload-free-latest.iso        # full: offline mirrors, ~15 GB
curl -L -o kldload.iso https://dl.kldload.com/kldload-free-net-latest.iso    # or the net installer, ~2.2 GB
sudo wipefs -af /dev/sdX
sudo dd if=kldload.iso of=/dev/sdX bs=4M oflag=direct conv=fsync status=progress && sync

# Or build from source
git clone https://github.com/kldload/kldload.git && cd kldload
PROFILE=desktop ./deploy.sh build
sudo ./deploy.sh burn /dev/sdX      # names the device, shows it, asks before writing

The full image carries the offline mirrors, the Kubernetes images and the AI stack, about 15 GB. Two smaller ways to build it:

EDITION=net ./deploy.sh build            # tools only, ~2.2 GB — installs from the distros' mirrors
DARKSITES=fedora OLLAMA=no ./deploy.sh build   # one mirror, no AI stack — a Fedora-only offline desktop
./deploy.sh menu                         # a checklist that writes kldload.env and shows the size

PAYLOAD, DARKSITES (debian, fedora, el), K8S_IMAGES and OLLAMA are the knobs; ./deploy.sh help lists them with sizes. The ISO name says what it carries: -net, or -fedora for a single mirror.

Boot the USB → the web UI opens over TLS at https://<host>:8443 → pick distro + profile + disk → install.

Building saturates every core by default. To keep the machine usable while it runs, cap the compress step — it is the long one:

KLDLOAD_BUILD_PROCESSORS=$(( $(nproc) - 4 )) PROFILE=desktop ./deploy.sh build

Installing with encryption

Full-disk ZFS encryption is on by default and the flow is short:

  1. Download & burn the ISO to a USB stick (see Quickstart above).
  2. Boot the USB. The installer opens automatically in the browser at https://<host>:8443 — no login prompt.
  3. Choose your distribution, profile, and target disk. Encryption is pre-selected (recommended) — set your disk encryption passphrase — and start the install.
  4. When it finishes the machine reboots. Remove the USB stick.
  5. At the ZFSBootMenu prompt, enter your encryption passphrase. It is asked once: first boot re-asks a second time while the system installs the key that makes the later boots single-prompt, and every boot after that takes one passphrase.
  6. The desktop loads and the console opens at https://<host>:8443no certificate warning, no login prompt. Done.

The passphrase is always required. There is no configuration in which encryption is silently skipped, and turning Secure Boot on or off does not change that. TPM2 auto-unlock is on the roadmap.

Secure Boot — opt in

Secure Boot is off by default. With it off the firmware boots ZFSBootMenu directly: no shim, no GRUB stage, no MOK enrollment, and nothing to miss at a ten-second prompt. That is the right default for a lab machine, and it is the path above.

Turn it on when the machine's threat model wants a verified boot chain, by setting KLDLOAD_ENABLE_SECURE_BOOT=1 at install time. The install then generates a per-install MOK, signs ZFSBootMenu and the out-of-tree modules with it, and boots firmware → shim → GRUB → kernel. That path needs three extra steps:

  1. When the install finishes it powers the machine off rather than rebooting — so you control the enrollment boot instead of racing an auto-reboot. Remove the USB stick.
  2. Power on and enter firmware setup (usually Del, F2, or F10). Enable Secure Boot, then save and exit.
  3. On the next boot the blue MokManager screen appears — it waits only ~10 seconds, so press any key immediately, then: Enroll MOK → Continue → Yes → password kldload → Reboot. The password is literally kldloadnot your admin or encryption password.

Missed the MokManager screen? Just reboot — kldload re-offers enrollment on every boot until the key is actually enrolled. No reinstall. If you end up at a "Secure Boot validation failed" screen instead, the app grid's Secure Boot Repair tool (or sudo kldload-mok-repair from any terminal — including the live USB) diagnoses and queues the fix in one step.


Troubleshooting

Full install walkthrough, including what each Secure Boot failure looks like and how to decide whether to run with it on at all: docs/INSTALL.md.

Secure Boot / MOK — only if you enabled it

Secure Boot is off by default, and none of the below applies to a default install. These are the failure modes of the opt-in path (KLDLOAD_ENABLE_SECURE_BOOT=1).

Symptom Fix
Missed the blue MokManager screen Reboot — enrollment is re-offered automatically. Or sudo kldload-mok-repair repair, then reboot.
"Secure Boot validation failed" / "Verification failed" at boot The install's MOK isn't enrolled. Run sudo kldload-mok-repair (installed system or live USB) — it shows whether the boot chain's key is enrolled and repair queues the fix; then reboot, press a key at the 10-second blue screen, Reset → Enroll, password kldload. Or temporarily disable Secure Boot in firmware to boot and repair from the OS.
Reinstalled several times / MOK operations start failing Stale keys accumulate in NVRAM (one per install). sudo kldload-mok-repair repair queues a Reset MOK list + enrollment of the current key in one pass.
Check enrollment / signing state sudo kldload-mok-repair (or kldload-mok-repair status, mokutil --list-enrolled).
NVIDIA or ZFS module won't load under SB Same cause — enroll the MOK. sudo kldload-mok-repair status shows the module signer.
Forgot the MOK password It's kldload (set a different one at install with KLDLOAD_MOK_PASSWORD).
Boots to emergency mode after skipping enrollment The MOK is not enrolled, so the kernel refuses the DKMS-signed ZFS module and non-root datasets never mount. Confirm with modprobe zfsKey was rejected by service is conclusive. Fix: sudo kldload-mok-repair repair then reboot and enroll, or disable Secure Boot in firmware if this is a lab box. Note this can appear weeks later, at the first kernel update after the missed prompt.
Boots fine with SB off, fails with SB on (installed before 1.4.0-rc3) Older builds re-signed the staged kernel with the per-install MOK key, discarding the distro's own signature. Restore it: sudo cp /boot/vmlinuz-$(uname -r) /boot/efi/EFI/BOOT/vmlinuz then enable Secure Boot. Fixed at install time from 1.4.0-rc3 on.

Console certificate warning

Shouldn't happen on a fresh install — the console cert is issued by the kldload CA, which is trusted in the browser automatically. If a warning appears, re-import the CA root (clearing any stale entry first):

kldload-trust-cert                                              # re-import the CA root
# stubborn? drop stale entries first, then re-import:
certutil -d sql:"$HOME/.pki/nssdb" -D -n kldload-webui 2>/dev/null
certutil -d sql:"$HOME/.pki/nssdb" -D -n kldload-ca     2>/dev/null
kldload-trust-cert

Console asks for a password

Only remote browsers do — sign in with your admin account (a wheel/ sudo user). On the machine itself the console never prompts.


Two in the menu, two package managers underneath

Distribution Install method Offline
Fedora 44 dnf --installroot Yes (RPM darksite)
Debian 13 (Trixie) debootstrap Yes (APT darksite)

Those two are what the installer offers, because they are the two that get tested — and the two that deliver the offline promise. Everything else in the RPM and APT families is a network install, which is a different product from the one this README describes.

The method underneath is not distro-specific: kldload installs by calling dnf --installroot or debootstrap against a distribution's own repositories. Nothing is forked, nothing is patched, and no image is pre-baked for a given distro.

Which means the reachable set is wider than the tested one. RHEL, CentOS Stream, Rocky, Ubuntu and Arch all still work with KLDLOAD_DISTRO=<name> — the code paths are there and maintained — but they are not on the menu, not mirrored offline, and not tested, and the menu is the honest statement of what is. Adding one back is repository configuration, not new machinery.

Fedora and Debian are deliberately the widest useful pair rather than a narrow one: two package managers, two firmware-splitting conventions, two initramfs generators, and one leading-edge substrate against one stable one. Most bugs worth finding show up as a difference between them.

The honest bound: a new distribution needs its repos and keys declared, and its kernel paired with a version of OpenZFS that builds against it. That is a morning's work, not a port.

Live environment is Fedora 44 (kernel 7.0.x — currently 7.0.12 — with OpenZFS 2.4.3 on root).

Fedora 44 + ZFS: OpenZFS ships a native fc44 build (2.4.3), so there is no fc43 bridge. The kernel is not taken as whatever Fedora ships today: builder/kernel-pin.sh reads the ceiling OpenZFS itself declares (zfs-dkms Conflicts — 2.4.3 caps at kernel ≤ 7.0.999) and resolves the newest matching build, pulling kernel, -core, -modules, -devel and -headers as one set so they cannot be split. On the installed system that set plus NVIDIA is versionlocked at first boot, so a routine dnf update cannot pull a kernel ZFS has no build for.


The desktop profile

A GUI-first workstation that looks like stock RHEL 10: expert operations — ZFS replication, KVM, Kubernetes, eBPF observability — exposed as point-and-shoot desktop apps, not CLI rituals.

  • Install-time Platform Options. Checkboxes for NVIDIA drivers, KVM, Kubernetes, eBPF tooling, and golden-image building. Desktop-only, default-clean — you opt into the heavy stuff.
  • Native app windows. Each tool (VMs, Kubernetes, ZFS, Metrics, the model, …) opens as its own chromeless GTK/WebKit window — no browser chrome, no left menu — backed by the same web console the server edition serves.
  • Console as its own app. The tmux F-key operator cockpit (k9s, ZFS internals, eBPF panels, VM/log streams) is a single Console application — not embedded inside every tool window.
  • Local model. Ollama with Open WebUI (plus RAG and voice) as a desktop app. No cloud, no telemetry.

Profiles — examples, not the menu

Profile What gets assembled on first boot
Desktop GNOME + ZFS root + Firefox + GPU drivers + Ollama + full k* tool suite + native app windows + the Console cockpit + offline darksites
Server Headless SSH + ZFS root + full k* tools + sanoid + WireGuard + eBPF + offline darksites
KVM Host libvirt + qemu-kvm + virtio, every VM on a ZFS zvol, ~100 ms COW clones, atomic snapshots, zfs send replication
AI KVM Host + Ollama + Open WebUI + RAG on the local GPU
klab KVM Host + golden VMs per supported distro, blue/green via ZFS instant clone, fault injection, Distro Matrix Runner, live Hubble traffic map
OpenZFS Suite KVM Host + dedicated test goldens wired into ztest/zloop for upstream OpenZFS regression hunting
Core ZFS on root only. Stock distro. No k* tools, no web UI, no darksites. ~200 MB beyond the vendor's base install
kube-cluster up           # single- or three-node K8s in < 20 minutes
kube-demo                 # PetClinic + ArgoCD smoke test
klab golden centos        # build the CentOS golden VM
klab matrix run script.sh # run a change against every supported distro in parallel

What's wired into the image

  • OpenZFS on root — checksummed, compressed, snapshotted, self-healing on mirrors. lz4 default. Native AES-256-GCM encryption recommended and pre-selected in the installer (TPM2 auto-unlock when the hardware has it, passphrase at boot otherwise); dedup optional.
  • ZFSBootMenu — UEFI bootloader that understands ZFS. Boot environments. Seconds-fast rollback. No GRUB.
  • WireGuard — kernel-level encrypted networking. One UDP port at the firewall.
  • eBPF observability — BCC tools + bpftrace + an F-key tmux cockpit on the host; Cilium + Hubble + Tetragon inside the K8s profile (no kube-proxy, no iptables, no sidecars).
  • KVM hypervisor — libvirt + qemu-kvm with every VM on a ZFS zvol. ~100 ms clones via COW. Atomic snapshots. fs-freeze app-consistency. Incremental zfs send replication.
  • Docker & podman on ZFS — every image layer is a real dataset, not a directory inside an overlay. A pull is a clone, layers inherit compression, and the whole container estate — layers, the engine's database and the volumes — snapshots and replicates as one recursive zfs send. Measured: a running container cloned and started in 328 ms with its state intact, and 24.7 GB of estate in a single stream. Docker on the apt distros, podman on the RPM ones. The full list of what this replaces →
  • NVIDIA + CUDA — drivers and CUDA optional at install. Time-sliced GPU sharing across the model and guest VMs. No PCIe passthrough required.
  • Ollama + Open WebUI — local model: RAG over the codebase + voice + tmux awareness + ReAct agent loop + eBPF-aware tool registry. No cloud, no telemetry.
  • Observability — Prometheus + Grafana + Loki + Alertmanager, Go + bash exporters, pre-wired dashboards, zed ZFS events bridged to Loki.
  • Secure Boot + MOK — per-machine key generation, automatic module signing, DKMS auto-sign on kernel upgrades. Off by default.
  • Image exportkexport produces qcow2 / VMDK / VHD / OVA / raw, auto-sealed with cloud-init multi-datasource config. Ready for Packer or direct hypervisor import.
  • Offline + Air-gap — RPM and APT mirrors baked in. The USB is the deployment, the recovery, and the air gap.

What's inside — the open source it's made of

kldload invents almost nothing. It is an opinionated assembly of software you already know, installed from the vendors' own repos and wired together so the pieces actually meet. If you recognise a name below, that is the point — you already know how to operate it, and nothing here is a bespoke reimplementation you would have to learn.

Nothing is forked and nothing is patched. The tree carries zero .patch files and zero vendored third-party source; every component arrives from its upstream package repo, its official release artifact, or its own git remote.

Two shipped components are not open source, and it would be dishonest to bury them in a list like this: Google Chrome (the default desktop browser and the renderer for the kldload GUI apps — its open-source upstream Chromium is what Debian targets get) and the NVIDIA driver + CUDA, which is opt-in at install. Everything else below is open source under its own licence.

Storage & boot

Project What it does here
OpenZFS root filesystem, snapshots, clones, send/recv, native encryption
ZFSBootMenu (2.3.0) UEFI boot environments, rollback from the boot screen
sanoid / syncoid snapshot retention policy and replication
dracut, GRUB2, shim, mokutil, sbsigntools, pesign initramfs, UEFI boot chain, Secure Boot module signing
cryptsetup, LVM2, mdadm, e2fsprogs, xfsprogs, btrfs-progs non-ZFS storage the installer must still read

Virtualization

Project What it does here
libvirt + QEMU/KVM every VM, each backed by its own ZFS zvol
virt-install, qemu-img, qemu-guest-agent provisioning, image conversion, in-guest control
swtpm + edk2/OVMF emulated TPM 2.0 and UEFI firmware for guests
cloud-init first-boot configuration of golden-image clones

Kubernetes & networking

Project What it does here
Kubernetes 1.32 (kubeadm/kubelet/kubectl) the cluster itself
containerd container runtime
Cilium 1.16.5 + Hubble eBPF CNI, kube-proxy replacement, flow visibility
MetalLB 0.14.9 bare-metal LoadBalancer services
kube-vip 0.8.9 control-plane VIP for HA
OpenEBS ZFS LocalPV CSI storage on ZFS
local-path-provisioner (Rancher) fallback StorageClass where a node has no ZFS
Gateway API 1.2.1, metrics-server ingress API, resource metrics
Helm, k9s, Headlamp chart installs, terminal cluster UI, web cluster UI
WireGuard, nftables, NetworkManager, chrony encrypted backplane, firewall, networking, time
nginx one TLS reverse proxy on :8443 for every browser-facing service

Observability

Project What it does here
Prometheus + Alertmanager metrics and alerting
Grafana pre-wired dashboards
Loki + Promtail log aggregation, with ZFS zed events bridged in
node_exporter, ebpf_exporter, process-exporter, smartctl_exporter, zfs_exporter, libvirt-exporter the metric sources

eBPF & security

Project What it does here
BCC tools + bpftrace the F-key tracing cockpit (execsnoop, biosnoop, tcplife, …)
Tetragon runtime security observability
Secure Boot + MOK toolchain per-machine keys, DKMS auto-signing on kernel upgrade

Desktop

Project What it does here
GNOME — Shell, GDM, Nautilus, Terminal/Ptyxis, Control Center the workstation session (LightDM on Debian Trixie)
PipeWire + WirePlumber audio
Google Chrome the default browser on RPM desktops, from Google's own repo, and what the kldload GUI apps render in
Firefox also installed on RPM desktops, and the browser on the GhostBSD posture
Chromium the browser on Debian targets
NVIDIA driver + CUDA optional at install, via RPM Fusion akmod-nvidia
Steam optional, via Flathub (Fedora)
eza, bat, fd, ripgrep, zoxide, fzf, fastfetch, htop the modern CLI set, pre-wired into the shell
ttyd + tmux browser terminal, and the session everything attaches to

AI — Ollama and Open WebUI, entirely local

Project What it does here
Ollama the LLM runtime
Llama 3.1 / 3.2 & Qwen2.5 the models, chosen automatically by detected VRAM (incl. Llama 3.2-Vision, Qwen2.5-Coder)
ChromaDB + nomic-embed-text the RAG vector store and embeddings over your own docs
whisper.cpp speech to text (voice input)
Piper text to speech (voice output)

No cloud, no telemetry, no API key — the models and the index live on the machine.

Automation

Project What it does here
Ansible (ansible-core) golden-VM provisioning and the web UI's Ansible tab
Argo CD GitOps engine behind the demo app stack
osbuild-composer Red Hat's own toolchain, used to build the RHEL golden image

Rescue toolkit (on the live USB)

GParted, TestDisk/PhotoRec, ddrescue, fsarchiver, smartmontools, nvme-cli, p7zip, ntfs-3g/exfatprogs, fio, stress-ng, memtest86+ — the install USB doubles as the recovery USB.

How a distro gets built

The installer bootstraps each target with that distro's own tooldebootstrap for Debian and dnf --installroot for Fedora. The same two paths reach the rest of their families when driven directly, but only these two are on the menu and tested. Packages come from the vendors' own CDNs; the ISO itself is built with Red Hat's lorax, dracut, squashfs-tools and xorriso inside a Fedora 44 container.

The sister consoles

Three of the consoles are their own BSD-3 projects by the same author, with their own repos and release cadence. kldload builds each from its own upstream at ISO-build time and records the exact commit it shipped, so an installed system can say precisely what it is running:

Console Upstream Commit recorded in
zxplore — ZFS its own repo /etc/kldload/zxplore-commit
vmxplore — KVM its own repo /etc/kldload/vmxplore-commit
wgxplore — WireGuard this repo's wg/ /etc/kldload/wgxplore-commit

wgxplore now has its own repo, but the copy kldload builds and ships is the in-tree wg/ — folded in on 2026-08-10 as a read-only estate lens, which is why its recorded commit is kldload's HEAD rather than a separate upstream. The two have since diverged, with the in-tree copy carrying work the standalone repo does not, so treat wg/ as the source of what is on the ISO.

They run on any Linux or BSD box — kldload is their first-party distribution, not their owner.

Licences are each project's own; kldload ships them unmodified and adds no licence terms of its own to them. See License for kldload's.


CLI tools

Packages and rollback

apt, dnf and pacman are symlinked to kldload-pkg-wrapper at install, so these are the normal commands — a script, unattended-upgrades or the GUI updater get the same protection.

Command What it does
apt upgrade / dnf update Snapshots the root, then runs the real transaction
apt rollback Stages a return to the pre-transaction snapshot; reboot to apply
apt rollback list Shows which transactions you could go back to
apt rollback cancel Un-stages it — nothing has changed until you reboot
kldload-rollback The same machinery directly, with boot-environment control
kpkg Package operations with pre-install snapshots
kupgrade Guided upgrade with automatic rollback on failure

Rollback clones the snapshot into a new boot environment rather than running zfs rollback, which cannot touch a mounted root and would destroy every newer snapshot. Nothing is overwritten.

Host

Command What it does
kldload-overview Unified host status — ZFS, VMs, K8s, GPU, eBPF, services
kst System health dashboard
kldload-console tmux F-key cockpit with live eBPF panels

ZFS

Command What it does
ksnap Snapshot manager
kclone Clone datasets / zvols
kbe Boot environment manager
kdf ZFS-aware disk usage
kpkg Package manager with pre-install snapshots
kupgrade Safe upgrade with automatic rollback
krecovery Disaster recovery
kexport Export golden images (qcow2 / VMDK / VHD / OVA / raw)

KVM

Command What it does
kvm-create Create VM on a ZFS zvol
kvm-clone ZFS instant clone (~100 ms)
kvm-snap Snapshot a VM
kvm-list List all VMs
kvm-delete Destroy VM + zvol

Kubernetes

Command What it does
kube-cluster up Bring up a single- or three-node K8s cluster
kube-cluster destroy Tear it down (golden preserved)
kube-demo Deploy PetClinic + ArgoCD smoke test
kube-smoke-test Automated cluster verification

klab

Command What it does
klab golden <distro> Build / refresh a golden VM image
klab matrix run Run a script against every supported distro in parallel
klab-vm-debug-bundle Auto-fires on test failure — OpenZFS-ready debug tarball

deploy.sh

Subcommand What it does
build Build the ISO (uses cached darksites)
full Rebuild the builder image + all darksites, then build the ISO
clean Remove build artifacts
burn [/dev/sdX] [--yes] Write the ISO to a USB device. Names the target; falls back to USB_DEVICE, then auto-detects a single removable drive. Confirms interactively (prints the device's model and size, and asks you to type the name back); --yes skips the prompt for scripts.
builder-image Rebuild the Fedora 44 builder container
smoke-build Static checks on the built ISO (size, freshness, content)
zfs-pin Derive the kernel pin from the newest OpenZFS release's declared Linux-Maximum and report drift against build-iso.sh (--check for CI, --json for scripts)
smoke-test <distro> <profile> Full install lifecycle in KVM, then smoke-test the installed target
build-debian-darksite Build / refresh the Debian APT offline mirror
build-ubuntu-darksite Ubuntu mirror — retired 2026-08, opt in with KLDLOAD_INCLUDE_UBUNTU_DARKSITE=1
build-fedora-darksite Build / refresh the RPM offline mirror
build-ollama-darksite Cache the Bob/Ollama model bundle
kvm-deploy / kvm-deploy-bob Deploy the ISO to local KVM via virt-install
proxmox-deploy Deploy to a remote Proxmox host via the qm API
deploy-all Build + deploy across the configured targets

Architecture

Live environment:  Fedora 44 (kernel 7.0.x, OpenZFS 2.4.3)
Builder:           Fedora 44 container (lorax + squashfs-tools + xorriso + dracut)
Bootstrap paths:   dnf --installroot  (Fedora)
                   debootstrap        (Debian)

Installer:         Python web UI + ~10 bash libraries (lib/) + backend/bin tools
Web UI:            single HTML file per edition + WebSocket install-log stream
Single-port TLS:   kldload-proxy fronts the web UI, Grafana, Prometheus, Headlamp,
                   Bob, k9s/ttyd, and the libvirt console on one URL (:8443) with one cert

The user picks the target distro at install time. After install the system runs upstream packages from the vendor's public repos. There is no kldload package repository and no kldload-specific runtime updates — dnf update / apt upgrade / pacman -Syu just work.


Releases

Current release: 1.4.2 — Hardware (August 2026). 195 commits since 1.4.1: 30 features, 127 fixes, 120 files changed.

Every release is tagged, so git show v1.4.2 is the exact tree an ISO was built from. Cutting one: docs/RELEASING.md.

License

BSD-3-Clause. See LICENSE.

Popular repositories Loading

  1. kldload kldload Public

    4 distros, one USB, ZFS on root. Debian, Fedora, RHEL and Arch. Offline install, boot environments, WireGuard, eBPF. Free.

    Shell 39 6