Repository navigation
feat: x86-64 live/installer ISO (MAD-846) - #10
Merged
Merged
Conversation
Any x86-64 PC can now be a box: syncphony-box-<version>-amd64.iso is a hybrid ISO (USB stick or DVD, UEFI and legacy BIOS) with two entries: the live box, which keeps its pairing on a syncphony-data partition on the stick when there is one, and "Install to disk", a whiptail installer on tty1 that lays the disk out as BIOS boot + EFI (SB-BOOT, at /boot/firmware) + root + syncphony-data and boots it read-only behind the Pi's overlay. - Shared stage layer: rootfs/customise.sh runs inside either builder's chroot (package lists, the .deb, the steps). stage-syncphony/ is now a thin pi-gen wrapper plus the Pi's boot partition; x86/live is the live-build wrapper (Debian Trixie), x86/root the ISO-only files. - boxd: kernel command line from GRUB's /boot/firmware/cmdline.cfg when present, no write or reboot when there is no command line file (live session); thermals from /sys/class/thermal without vcgencmd, with no throttle flags claimed. - audio-setup: hdmi/hdmi2/analog on a PC's sinks, never on a Pi. - Package: initramfs hook carrying e2fsck and overlay; nightly update off in a live session. - build-iso.sh / make iso, an iso CI job with the smoke test extended to the ISO, and releases publishing the ISO and the amd64 .deb. - ADR 0013, README, testing (VM procedure), docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…race in the initramfs check pi-gen's on_chroot mounts a tmpfs over /tmp on its first call in a stage, hiding rootfs/ copied there just before. The smoke test's printf | grep -q could fail under pipefail when grep quit early. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes MAD-846. Any x86-64 PC or mini-PC can now be a box.
What it adds
syncphony-box-<version>-amd64.isois a hybrid ISO: it boots from a DVD or from a USB stick it was written straight onto, on UEFI or legacy BIOS (Secure Boot must be off). It has two boot entries:syncphony-datapartition, it becomes/dataand/boot/firmware(via/data/boot-firmware), so pairing and setup survive reboots.syncphony-install, a whiptail script on tty1. You pick a disk (never the boot medium) and confirm, and can add an optional admin user with sudo. It lays the disk out as GPT: BIOS boot + ESP (SB-BOOT, mounted at/boot/firmware) + root +syncphony-data. It copies the pristine squashfs, runsgrub-installfor both UEFI (removable path, no NVRAM) and BIOS, then boots into the Pi's layout:boot=overlay, read-only root,/data.How
rootfs/).customise.sh pi|x86 DEBruns inside the target root and installspackages/common.listplus the platform list, the .deb, thensteps/*.sh. It has noon_chroot, noROOTFS_DIR, no/boot/firmware.stage-syncphony/is now a thin pi-gen wrapper (00-customise) plus the Pi's boot partition (01-pi-boot).x86/liveis the live-build wrapper: a chroot hook runs the same script, and a binary hook writes the menu.x86/rootholds the ISO-only files.debian:trixiecontainer (./build-iso.sh,make iso).cmdline.txtbecomes/boot/firmware/cmdline.cfg, a one-line GRUB script thatgrub.cfgsources. boxd edits thatsetline when the file exists.resolution=/rotate=instead of writing a file and rebooting./sys/class/thermalwhenvcgencmdis missing./v1/infothen reportstemperatureConly, with no throttle flags claimed.hdmi/hdmi2are the first and second HDMI/DisplayPort sinks andanalogis the built-in output. A Pi with HDMI0 absent still never falls back to HDMI1 (tested).e2fsckand the overlay module. initramfs-tools' fsck hook only addse2fsckwhen fstab has an ext4 root line, and the live-built root has none.ConditionKernelCommandLine=!boot=live./dev/cec*). The watchdog isRuntimeWatchdogSecon iTCO and similar.isojob onubuntu-latestrunsmake isoand then the smoke test, which now takes an.iso: the same rootfs checks against the squashfs, plus the ISO menu, the EFI/BIOS loaders, the initramfs contents, the installer and the live units..sha256.SHA256SUMSnow covers all four files. The amd64 .deb goes into the apt repo so installed PCs update. The Imager listing stays Pi-only.docs/testing.md, persistent paths, releasing, hardware, CHANGELOG.Verified
make lint,make test: 63 bats tests (4 new PC audio cases) andgo test, including new tests for the cmdline.cfg format, the skip with no command line file, and sysfs thermals.e2fsck.grub-installtargets,grub.cfgandcmdline.cfg, UUID fstab, kernel links, admin user.cmdline.cfg(boot=overlay …on the kernel command line)./datawas mounted:config.envwritten, machine-id saved, and the kiosk's Chromium profile created./etc/machine-idwas still empty, so the root stayed read-only.Not verified (needs a person and a VM or PC)
imagejob on this PR is the check for that.The steps for all of these are in
docs/testing.md→ "The x86 ISO in a VM".Known limits (in the ADR)
video=HDMI-A-1:may not be the PC's connector name.syncphony-datapartitions attached, which one mounts is ambiguous, so the installer says to remove the stick.🤖 Generated with Claude Code