ISO builder, firstboot wizard, installer
Find a file
Sam & Claude 09220186ff Expand operator USB rebuild and runtime checks
Document head verification before builds, add post-flash filesystem and XKB runtime probes, and include the read-write root/no tmpfs overlay expectations in the hardware acceptance checklist.

---

Build: pass — sh -n build.sh

Tests: pass — git diff --check
2026-05-17 07:33:52 +02:00
.archive/completed-work docs: consolidate and archive completed work 2026-04-06 12:56:10 +00:00
.opencode/plans Unify ISO and fix GPU installation gap (Sam & ZAI) 2026-04-06 13:31:51 +02:00
doc Update operator USB documentation (Sam & Claude) 2026-05-16 20:56:07 +02:00
docs Align ISO config docs with post-install setup 2026-05-12 19:58:33 +02:00
firstboot Update operator USB documentation (Sam & Claude) 2026-05-16 20:56:07 +02:00
live Balance live GPU detection across vendors (Sam & Claude) 2026-05-16 19:07:14 +02:00
packages Balance live GPU detection across vendors (Sam & Claude) 2026-05-16 19:07:14 +02:00
runner docs(runner): add edk2-bhyve to build automation prerequisites 2026-03-17 12:30:59 +00:00
scripts Isolate npm config during ISO builds (Sam & Claude) 2026-05-16 21:05:06 +02:00
skills Add Bastille to operator USB tools (Sam & Claude) 2026-05-16 12:19:13 +02:00
vps Align ISO config docs with post-install setup 2026-05-12 19:58:33 +02:00
.gitignore Ignore local Aider artifacts 2026-05-05 17:08:51 +02:00
ADMIN-PANEL.md Unify ISO and fix GPU installation gap (Sam & ZAI) 2026-04-06 13:31:51 +02:00
AGENTS.md Enable mac_do framework during bootstrap (Codex) 2026-05-10 21:55:47 +02:00
build-vps.sh feat(firstboot): unify setup import across USB and VPS 2026-04-27 11:58:07 +02:00
build.cfg Adopt quindecim image naming and optional live password (Sam & Codex) 2026-05-16 17:38:03 +02:00
BUILD.md Expand operator USB rebuild and runtime checks 2026-05-17 07:33:52 +02:00
build.sh Disable installer tmpfs overlays on live USB 2026-05-17 07:23:22 +02:00
CHANGELOG.md docs: update ISO docs for Aider+Pi harness completion and sync with main codebase 2026-04-12 09:24:37 +00:00
CLAWDIE-ISO.md Update operator USB documentation (Sam & Claude) 2026-05-16 20:56:07 +02:00
FLASHING.md Add FreeBSD resumable download docs 2026-05-16 22:23:18 +02:00
FUNDING.md refactor: Rename clawdie-shell-*.sh to shell-*.sh (remove redundant prefix) 2026-03-24 07:20:17 +00:00
INSTALLER-PLAN.md fix(installer): Phase A — stable ZFS, safe upgrades, module matrix 2026-04-16 11:09:51 +00:00
installerconfig Add ISO build manifest metadata 2026-05-12 17:10:54 +02:00
LUMINA-INTEGRATION.md Clawdie Shell specification v0.9.0-rc1 2026-03-23 23:44:48 +00:00
NETWORKING.md Clean up warden0 bridge documentation 2026-05-12 18:24:51 +02:00
PHASE4-SUMMARY.md Default ISO code hosting: git (no Forgejo) 2026-04-19 10:36:55 +00:00
PHASE4-TESTING-INSTRUCTIONS.md Default ISO code hosting: git (no Forgejo) 2026-04-19 10:36:55 +00:00
QT6-IMPLEMENTATION-PLAN.md Add Qt6 GUI implementation research and roadmap (Sam & ZAI) 2026-04-06 15:34:55 +02:00
README.md Add FreeBSD resumable download docs 2026-05-16 22:23:18 +02:00
RELEASE-NOTES-v0.9.0.md Add v0.9.0 release notes (Sam & ZAI) 2026-04-06 13:39:25 +02:00
REQUIREMENTS.md Update operator USB documentation (Sam & Claude) 2026-05-16 20:56:07 +02:00
ROADMAP-v1.0.0.md docs: v1.0.0 release roadmap (Sam & Claude) 2026-04-06 17:12:54 +00:00
SHELL-ARCHITECTURE.md Update operator USB documentation (Sam & Claude) 2026-05-16 20:56:07 +02:00
SHELL-MODULES.md feat(firstboot): unify setup import across USB and VPS 2026-04-27 11:58:07 +02:00
TESTING.md Expand operator USB rebuild and runtime checks 2026-05-17 07:33:52 +02:00

Clawdie ISO

XFCE FreeBSD operator USB image for Clawdie-AI.

On the xfce-operator-usb branch, the active direction is a persistent XFCE operator USB:

  • bootable USB image
  • XFCE desktop
  • browser available immediately
  • minimal pi harness available immediately
  • Tailscale available immediately
  • no required Clawdie-AI services running on the USB by default

Current validation target: bootable dev image with BUILD_CHANNEL=dev and bundled Clawdie-AI from main. Public release images should use BUILD_CHANNEL=release and a pinned Clawdie-AI tag.


What You Get

Boot a USB and land in an operator environment:

  • FreeBSD 15.0 base system
  • XFCE desktop via LightDM autologin
  • pre-LightDM live GPU detection for Intel, AMD/ATI, VMware, and conservative NVIDIA fallback
  • Chromium browser on the live image
  • Tailscale on the live image
  • Bundled npm globals on the live image, including pi
  • Offline package repository bundled on the USB image
  • Clawdie-AI tarball with offline node_modules
  • Static bootstrap page launched from the desktop
  • desktop power actions allowed for wheel users, including clawdie

Provider keys, Telegram, browser sign-in, and disk deployment are intentionally deferred on this branch.


Pre-Install Requirements

Build host:

  • FreeBSD 15.0+
  • pkg, curl, Node/npm, sudo
  • root or sudo for image assembly (mdconfig, mount, bootcode)
  • 150 GB free build space recommended
  • 32 GB USB key minimum for the default 28 GB image

Optional but recommended:

  • Tailscale account and auth key (tskey-auth-...)

Tailscale is recommended, not mandatory. If no auth key is supplied, the ISO build continues with a warning and the live USB still boots normally.


Quick Start: Build Image

git clone https://codeberg.org/Clawdie/Clawdie-ISO.git
cd Clawdie-ISO

# Full build: fetch FreeBSD, packages, Clawdie-AI, then assemble image.
sudo ./build.sh

Useful alternatives:

# Fetch/cache only. Does not assemble an image.
./build.sh --fetch-only

# Reuse cached packages and image inputs.
# Safe for pinned tags/commits. For moving refs, build.sh caches by resolved commit.
sudo ./build.sh --skip-fetch

# Fetch packages but reuse the cached FreeBSD memstick image.
sudo ./build.sh --skip-memstick-fetch

# Dev/test image: set live user clawdie password to quindecim.
sudo ./build.sh --live-default-password

# Validation build from current Clawdie-AI main.
sudo ./build.sh --clawdie-ref main

# Release build from a pinned Clawdie-AI tag.
BUILD_CHANNEL=release sudo ./build.sh --clawdie-version 0.10.0

The build prints provenance similar to:

ISO     : 0.1.0-dev
FreeBSD : 15.0-RELEASE amd64
Clawdie : main
Clawdie commit: <sha>

It also writes build-manifest.json into the image and onto the installed system under /usr/local/share/clawdie-iso/.

Why quindecim

Artifact names use a short Latin codename for the FreeBSD major line they were built on. For FreeBSD 15, that codename is quindecim, so:

clawdie-xfce-quindecim-usb-DD.MM.YY.img

means:

  • clawdie — project name
  • xfce — desktop/session target
  • quindecim — Latin for 15, matching the FreeBSD 15 build line
  • usb — operator USB image
  • DD.MM.YY — build date

Small reference for the current naming convention:

0  = nulla / nihil / zero
1  = unus
2  = duo
3  = tres
4  = quattuor
5  = quinque
6  = sex
7  = septem
8  = octo
9  = novem
10 = decem
11 = undecim
12 = duodecim
13 = tredecim
14 = quattuordecim
15 = quindecim
16 = sedecim
17 = septendecim
18 = duodeviginti
19 = undeviginti
20 = viginti
21 = viginti unus
22 = viginti duo
23 = viginti tres
24 = viginti quattuor
25 = viginti quinque
26 = viginti sex

Notes:

  • For 0, Classical Latin did not have one universal everyday numeral word equivalent to modern zero; nulla and nihil are both common “none/nothing” stand-ins, while zero is later Latin.
  • For 21+, Latin number phrasing has multiple acceptable styles. The forms above are intentionally simple and readable for image naming.

Write to USB

Published artifacts are compressed as .img.gz. Stream them directly into dd; do not gunzip first unless you specifically need the raw image file.

Download on Linux or FreeBSD with resume and retries:

curl -fL --continue-at - --retry 5 --retry-delay 5 --progress-bar -O \
  https://osa.smilepowered.org/downloads/iso/clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz
curl -fL --retry 5 --retry-delay 5 -O \
  https://osa.smilepowered.org/downloads/iso/clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz.sha256

Linux:

sha256sum -c clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz.sha256
set -o pipefail 2>/dev/null || true
gzip -dc clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync
sync

FreeBSD:

HASH=$(awk '{print $1}' clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz.sha256)
sha256 -c "$HASH" clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz
gzip -dc clawdie-xfce-quindecim-usb-DD.MM.YY.img.gz | sudo dd of=/dev/daX bs=1M status=progress conv=fsync
sync

Replace /dev/sdX or /dev/daX with the whole USB device, not a partition. For the full safety checklist and raw .img variant, see FLASHING.md.

If you built with --live-default-password, the live tty password for clawdie is quindecim. The normal graphical path still uses LightDM autologin.

The image is sparse on the build host. build.sh prints both logical image size and allocated size; write the logical image to a USB key large enough for it.


Boot the USB

  1. Boot from the USB image.

  2. /usr/local/etc/rc.d/clawdie_live_gpu runs before LightDM and selects a conservative live graphics path.

  3. The live session starts XFCE and autologins as local user clawdie.

  4. A desktop launcher opens the static Clawdie bootstrap page.

  5. Confirm the NetworkMgr tray icon appears in the bottom panel, shows interfaces, and can open/join Wi-Fi if needed.

  6. Confirm the bottom panel launchers work: Whisker menu, Chromium, pcmanfm, terminal, and volume mixer.

  7. Verify the core operator tools:

    pi --help
    tailscale version
    chromium
    tmux -V
    python3 -c "import PIL; print(PIL.__version__)"
    bastille --help
    mdo -u root bastille --help
    test -f /usr/local/share/fonts/dejavu/DejaVuSansMono.ttf
    
  8. If you have a Tailscale auth key, join later with FreeBSD mac_do:

    mdo -u root tailscale up
    

Disk deployment, upgrade, rescue, and full Clawdie bootstrap are later phases on this branch.


Documentation


Current Limitations

  • USB persistence work is not implemented yet on this branch.
  • Disk deployment is intentionally deferred.
  • Historical Lumina/QML files remain in-tree but are not the active live-session path.
  • NVIDIA on the live USB is intentionally conservative: the image prefers integrated/open graphics first and only uses proprietary NVIDIA modules if a concrete nvidia.ko is installed in the rootfs.
  • Provider/model, Telegram, and full Clawdie-AI service bootstrap are intentionally deferred.

Last updated: 16.maj.2026