Commit graph

49 commits

Author SHA1 Message Date
Philip Peterson
8da036e5a0 Kickoff from our plasma-desktop fork, not a patch file
Some checks failed
Image, disk image and live ISO / iso (push) Failing after 2m12s
The update bar is now a commit on quine-global-labs/plasma-desktop,
branch quine-v<Plasma version> (KDE's release plus our commits), and
kickoff-builder builds from that branch. patches/kickoff/ goes; its
standalone CMakeLists.txt moves to kickoff/. A missing branch for the
image's Plasma version fails the build with a pointer to the fork's
rebase workflow. Same plugin as before (built and compared on the
runner).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 04:29:11 -09:00
Philip Peterson
8bdc165476 Disk image: installs follow registry.quineglobal.com, not localhost/
Some checks failed
Image, disk image and live ISO / iso (push) Has been cancelled
An install follows the image name its disk was built from, and the disk
image was built from localhost/quine-linux, so disk-image installs could
never update ("pinging container registry localhost ... connection
refused"). Tag the image as UPDATE_IMAGE and build from that name, as
the live ISO's installs already follow. Checked with
bootc-image-builder's manifest: target-imgref is
registry.quineglobal.com/quine-linux:latest, no localhost/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 04:22:23 -09:00
Philip Peterson
c22aae0591 Installs follow registry.quineglobal.com/quine-linux
Some checks failed
Image, disk image and live ISO / iso (push) Has been cancelled
The live ISO's installs now pull and update from
registry.quineglobal.com/quine-linux:latest (Taskfile's UPDATE_IMAGE),
our own pull-only name for the forge's image, instead of the forge's
hostname, so the update source outlives where the images are stored. CI
still pushes to the forge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 04:19:24 -09:00
Philip Peterson
a6b5a836b7 Kickoff fork: an update bar in the start menu
All checks were successful
Image, disk image and live ISO / iso (push) Successful in 32m17s
When a newer image is on the forge, Kickoff shows "A system update is
available" with Update Now (Aurora's System Update); once one is
downloaded, "Restart to finish updating" with Restart. Hidden otherwise.

- patches/kickoff/: Kickoff's QML plus UpdateBar.qml as its footer. The
  kickoff-builder stage rebuilds just that plugin from the image's own
  plasma-desktop version (KDE's source, via the forge's
  mirror-kde-plasma-desktop) and the final stage swaps it in.
- quine-update-check (root; bootc needs it): bootc upgrade --check, then
  writes /run/quine-linux/update-status.json for the bar. At boot, every
  4 hours, and after uupd's nightly update.

Tested in a VM from a disk image of this tree: up to date (hidden),
available and staged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 22:34:41 -09:00
Philip Peterson
de365c4227 Revert "Disk image: update from the forge, not localhost/"
This reverts commit d8146748c9.
2026-11-01 21:29:40 -09:00
Philip Peterson
d8146748c9 Disk image: update from the forge, not localhost/
bootc follows the image name a disk is built from, and the disk image
was built from localhost/quine-linux, so installs of it could never
update. Build it from forge.../quine-linux:latest (UPDATE_IMAGE), the
same image the live ISO's installs follow; Aurora's uupd.timer then
stages updates daily. bootc-image-builder's --target-imgref would do
this, but image-builder's version dropped it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 21:29:18 -09:00
Philip Peterson
1831c21089 Drop the homegrown installer ISO; the live ISO is the installer, as Aurora's
All checks were successful
Image, disk image and live ISO / iso (push) Successful in 26m30s
The installer ISO (installer/, task build-installer-iso) was our own: a
fedora-bootc:rawhide Anaconda environment with a vendored anaconda-webui,
assembled by bootc-image-builder's bootc-installer type. Tested on zeus it
installed unattended, wiping the first disk without asking, and then failed
(systemd-tmpfiles refused /mnt/sysroot because /mnt is a symlink in bootc
images). Aurora ships one installer, its live ISO, which live/ follows.
Also drops task build-iso and the two rawhide images only the installer used.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 04:11:12 -08:00
Philip Peterson
57e038ae15 Install layer-wizard, dnf-package-store and swap-watchdog
Some checks failed
Image, installer ISO, disk image and live ISO / iso (push) Has been cancelled
From the forge's quine RPM group, where each repo's rpm.yml publishes
them. dnf checks the forge's signed repository metadata; Forgejo doesn't
sign the packages themselves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:59:29 -08:00
Philip Peterson
f4c57a09a6 iso.yml: keep only the latest build's files in MinIO
All checks were successful
Image, installer ISO, disk image and live ISO / iso (push) Successful in 21m33s
Every commit's installer ISO (~7 GB each) was kept, and they filled the
forge VM's data disk. Tagged releases keep their own copies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 02:59:33 -08:00
Philip Peterson
180fecc73f Disk image: /boot on ext4
All checks were successful
Image, installer ISO, disk image and live ISO / iso (push) Successful in 30m58s
Fedora 44's mkfs.xfs turns on features runner-x86-linux's 6.6 kernel
can't mount, so the build failed mounting /boot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 02:08:49 -08:00
Philip Peterson
58c1bbf05f Disk image: btrfs root from the config, not --rootfs
Some checks failed
Image, installer ISO, disk image and live ISO / iso (push) Failing after 6m57s
bootc-image-builder panics on --rootfs btrfs with a disk size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:51:42 -08:00
Philip Peterson
79457c2a4b Build a live ISO too, and put it in releases
live/: quine-linux plus the live session and Anaconda WebUI, adapted from
Aurora's live ISO (get-aurora-dev/iso); Titanoboa's script packs it into
the ISO. The installer installs quine-linux:latest from inside the ISO, and
plasma-setup creates the first user at first boot, as on the disk image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:48:11 -08:00
Philip Peterson
d55103a6c1 Disk image: size the disk, not the root filesystem
Some checks failed
Image, installer ISO and disk image / iso (push) Failing after 3m59s
bootc-image-builder rejects customizations.filesystem for qcow2 and
falls back to its default size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:46:02 -08:00
Philip Peterson
a17dfb8f2f Build a disk image (qcow2) too, and put it in releases
All checks were successful
Image, installer ISO and disk image / iso (push) Successful in 14m30s
bootc-image-builder's qcow2, with no user: Aurora's plasma-setup creates
the first one at first boot. Daily builds upload it to MinIO's
disk/latest/; tagged releases include it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:30:21 -08:00
Philip Peterson
5daf1b5101 iso.yml: a v* tag publishes a release
Some checks failed
Image and installer ISO / iso (push) Has been cancelled
The files go to MinIO's public releases/<tag>/ and a Forgejo release
links to them; the container image is tagged with the version too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:24:26 -08:00
Philip Peterson
ce1930fa70 Register iso.yml's daily schedule
All checks were successful
Image and installer ISO / iso (push) Successful in 8m38s
The last push named the skip marker in its message, so Forgejo skipped it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 23:45:41 -08:00
Philip Peterson
e7b5bfc4d6 iso.yml: register the daily schedule (it came in with [skip ci], which Forgejo ignores)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 23:44:09 -08:00
Philip Peterson
c830a9f889 iso.yml: actions/checkout from our pull mirror [skip ci]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 22:23:33 -08:00
Philip Peterson
3e5093c16f vendor-images.sh: copy digest-pinned images by digest, store them by tag [skip ci]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 21:40:07 -08:00
Philip Peterson
5a1c89b705 Vendor upstream images into the forge's mirror/ before pulling [skip ci]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 19:57:21 -08:00
Philip Peterson
a18d70910e iso.yml: also build daily, after Aurora's daily build [skip ci]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 13:47:58 -08:00
Philip Peterson
6ffed16e19 Build on the published Aurora by default; drop the stage-0 submodule [skip ci]
Our Aurora fork is its own repo now (quine-global-labs/aurora), built
and published by its workflow as
forge.quinefoundation.com/quine-global-labs/aurora:stable. Make that the
Containerfile's and Taskfile's default BASE_IMAGE, remove the build-base
task and the submodule, and say in the README how to build the fork
locally instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 05:40:01 -08:00
Philip Peterson
4f7ee58922 Build on the published Aurora image, and publish ours
All checks were successful
Image and installer ISO / iso (push) Successful in 6m55s
Stage 0 now comes from quine-global-labs/aurora's workflow, at
forge.quinefoundation.com/quine-global-labs/aurora:stable, instead of
being rebuilt here from the submodule. The workflow logs in to the
registry, pulls it with the other bases, builds quine-linux on it, pushes
forge.quinefoundation.com/quine-global-labs/quine-linux (latest, date,
commit), then builds and uploads the ISO as before. On the generic
runner-x86-linux label.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 05:28:34 -08:00
Philip Peterson
799fb72647 The installer ISO lands in output/bootiso/, not output/bootc-installer/ [skip ci]
Run 8 found it there: bootc-image-builder names the folder after its
export. Fix the Taskfile's generates and the docs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 05:07:57 -08:00
Philip Peterson
dedd12c319 iso.yml: find the ISO bootc-image-builder wrote
All checks were successful
Installer ISO / iso (push) Successful in 10m5s
The build succeeded, but the upload looked for
output/bootc-installer/install.iso, which doesn't exist; the builder
names the folder after its export. Find install.iso under output/ and
print where it was.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:56:45 -08:00
Philip Peterson
309423d5a6 Installer ISO: tell bootc-image-builder the root filesystem
Some checks failed
Installer ISO / iso (push) Failing after 8m16s
It takes the default from the installer image, and fedora-bootc:rawhide
declares none, so the ISO step failed with 'missing required info:
DefaultRootFs'. Pass btrfs, what the payload (Aurora) declares.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:46:25 -08:00
Philip Peterson
fe4d36135c iso.yml: pull the base images first, with retries
Some checks failed
Installer ISO / iso (push) Failing after 8m49s
quay.io's CDN cut off a multi-GB fedora-bootc layer mid-download, and
buildah's pull inside the build gives up after one reconnect. Pull the
images the installer image and the ISO need beforehand, retrying.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:35:57 -08:00
Philip Peterson
3f11213173 Stage 0: build as ublue-os, and keep Forgejo's token from GitHub
Some checks failed
Installer ISO / iso (push) Failing after 11m9s
Aurora's Justfile lists its past tags at ghcr.io/$GITHUB_REPOSITORY_OWNER
and passes $GITHUB_TOKEN to GitHub's API. Forgejo Actions sets those to
quine-global-labs and a Forgejo token: the tag lookup failed with 403
(ghcr.io/quine-global-labs/aurora doesn't exist), and GitHub would refuse
the token. Pin the owner to ublue-os; pass the token only on GitHub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:14:12 -08:00
Philip Peterson
2326d0b106 iso.yml: install only the tools the runner lacks
Some checks failed
Installer ISO / iso (push) Failing after 15s
runner-x86-linux has task, just, yq, cosign and mc from nixpkgs. The
earlier failures were dl.min.io answering 410 Gone for mc (MinIO no
longer publishes community binaries), not GitHub refusing just; drop the
GITHUB_TOKEN workaround that was based on that misreading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:03:55 -08:00
Philip Peterson
a4452530e0 iso.yml: don't hand Forgejo's token to just's installer
Some checks failed
Installer ISO / iso (push) Failing after 33s
The installer sends $GITHUB_TOKEN to GitHub; in a Forgejo job that's
Forgejo's own token, so GitHub refused the download (410).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:56:17 -08:00
Philip Peterson
b744a378e4 iso.yml: let just's installer overwrite an earlier run's binary
Some checks failed
Installer ISO / iso (push) Failing after 33s
On a host-mode runner $HOME persists between jobs, so the second run
failed with 'just already exists'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:53:32 -08:00
Philip Peterson
2d969753d6 iso.yml: take MINIO_ACCESS_KEY from a variable too
Some checks failed
Installer ISO / iso (push) Failing after 22s
It's the MinIO user's name, not a secret, and it's set as a
quine-global-labs org variable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:49:58 -08:00
Philip Peterson
1a1b86b584 Use "Quine Linux" in the file-header example, not "Quine OS"
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 05:17:48 -08:00
Philip Peterson
458a7c40d5 Add build & CI guidelines
Moved from the now-abandoned quine-os repo. Documents the Taskfile/
Dagger/Nix conventions already in use across swap-watchdog, quine-linux,
quintodrome, and hyper, plus a simple identifying header for Taskfiles
and Dagger files, and a researched note on how much of the cross-platform
desktop exception can actually be collapsed into Dagger via cross-
compilation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 05:15:25 -08:00
Philip Peterson
30d15773a6 Document iMac19,2 speaker silence and Chromium D-Bus activation gap
Adds docs/imac19-2-speaker-fix.md: internal speakers produce no sound
despite correct HDA-level plumbing (unmuted volume, enabled pin, clean
device open). Traces the likely cause to uninitialized external TAS5764L
amp chips and a CS42L83 companion codec behind the CS8409, via sibling-
model prior art (rojoxstar/imac19-2-cs8409-linux, egorenar/snd-hda-codec-
cs8409#31, network-garden-lab's Fedora-specific iMac18,3 patch). No fix
is packaged yet given the amp-register damage risk and the bigger lift
of patching in-tree kernel source rather than an out-of-tree module.

Also adds docs/chromium-dbus-singleton-activation.md and a new "Software
fork directions" README section indexing forward-looking fork/patch
write-ups separately from the hardware-specific patches already shipped.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 23:20:12 -08:00
Philip Peterson
a3316eb2a4 Build Aurora from source as stage 0
stage-0/ is a submodule holding our fork of Aurora (upstream for now),
built with Aurora's own `just build` by the new `task build-base` into
localhost/aurora:stable. The Containerfile (stage 1) now builds FROM
${BASE_IMAGE}, which defaults to that image, instead of a pinned upstream
digest; the pin is now the submodule commit. build-image builds stage 0
first when needed, and BASE_IMAGE=ghcr.io/ublue-os/aurora:stable skips it
(the only option on macOS).

CI checks out submodules, fetches just, yq and cosign, and gets a longer
timeout for the Aurora build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 00:47:44 -08:00
Philip Peterson
8ad5e45dc2 Build the installer ISO on Forgejo and upload it to MinIO
.forgejo/workflows/iso.yml runs `task build-installer-iso` on a runner
labelled iso-builder (x86_64, root podman) and uploads the ISO to MinIO
under installer/<commit>/ and installer/latest/.

For unattended runs, the Taskfile now only uses sudo when not already root
(CI runners often lack it), and OUTPUT_DIR is absolute so the bind mount
into bootc-image-builder doesn't depend on relative-path support.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 20:34:46 -08:00
Philip Peterson
b6974c6797 Fail ISO builds fast on a non-x86_64 host
bootc-image-builder's --target-arch cross build fails late on Apple Silicon
(its lsinitrd step runs the amd64 image, which needs qemu-user inside its
container). Check the host arch up front, before the long image builds, and
drop --target-arch since only native builds are supported now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 06:27:25 -08:00
Philip Peterson
255042fe8d Vendor anaconda-webui and build it into the installer image
Replaces installing a patched anaconda-webui RPM from the forge's package
registry: installer/anaconda-webui/vendor/ is upstream release 86 verbatim
(see its PROVENANCE.md), and installer/Containerfile builds it with
upstream's own `make install` in a native-platform stage, then copies the
result over stock Fedora anaconda-webui. The produced file set matches
Fedora's anaconda-webui-86-1.fc46 exactly. Edits to the installer UI now
happen in vendor/ and ship on the next `task build-installer-iso`, with no
RPM, registry or CI in between.

Also follows bootc-image-builder's rename of --bootc-installer-payload-ref
to --installer-payload-ref.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 05:56:26 -08:00
Philip Peterson
39de966517 Install patched anaconda-webui from the forge's RPM registry, not COPR
The fork (quine/quine-anaconda-webui on forge.quinefoundation.com) now
builds its RPM with Forgejo Actions and publishes it to the quine org's
package registry. The installer image adds that repo with priority=10 so
it wins over Fedora's anaconda-webui, verifies Forgejo's signed repo
metadata (the RPMs themselves are unsigned), and the Taskfile passes the
repo metadata checksum as a build arg so a newly published RPM busts the
cached dnf layer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 04:55:42 -08:00
Philip Peterson
205cec65c4 fix arch 2026-09-27 02:45:36 -08:00
Philip Peterson
441202ef09 Cross-container runtime 2026-09-27 02:41:52 -08:00
Philip Peterson
0c3cf79157 Add patched-Anaconda installer path via bootc-installer
Adds installer/Containerfile (a separate Anaconda-webui environment
container, distinct from the quine-linux OS image) plus
build-installer-image/build-installer-iso tasks that drive
bootc-image-builder's bootc-installer type against it. Lets a forked/
patched anaconda-webui (built via COPR) get baked into the install ISO
instead of stock Fedora's.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 03:11:10 -08:00
Philip Peterson
6e5e22bffa add docs 2026-09-26 02:41:25 -08:00
Philip Peterson
c51070b7a8 Driver 2026-09-26 01:25:14 -08:00
Philip Peterson
477793d581 Initial format 2026-09-26 01:04:59 -08:00
Philip Peterson
f35959099f overlay fs 2026-09-25 23:36:22 -08:00
Philip Peterson
837747115a add text 2026-09-25 23:31:23 -08:00
Philip Peterson
297b25f4af Quine linux 2026-09-25 23:30:29 -08:00