skopeo 1.22 ignores CONTAINERS_REGISTRIES_CONF, so the mirror was copied
onto itself.
[skip ci]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
.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>
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>
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>
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>
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>