quine-linux/installer/Containerfile
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

74 lines
3 KiB
Docker

# Installer-environment container for bootc-image-builder's `bootc-installer`
# image type. This is NOT the quine-linux OS -- it's the throwaway Anaconda
# environment the ISO boots into, which then installs the real quine-linux
# bootc image (passed separately via --installer-payload-ref). See
# docs/patched-anaconda-installer.md for the full workflow this fits into.
# Builds the patched anaconda-webui from the vendored source in
# anaconda-webui/vendor/ (see anaconda-webui/PROVENANCE.md) with upstream's
# own `make install`, i.e. exactly the files its RPM would ship. Runs on the
# build host's native platform: the output is platform-independent (web
# assets and scripts), and emulated builds of this stage are both slow and
# unreliable (tar fails under emulation on Apple Silicon).
FROM --platform=$BUILDPLATFORM registry.fedoraproject.org/fedora:rawhide AS anaconda-webui
# Upstream version the vendored source corresponds to, and the gitlink its
# node_modules submodule pinned (the npm package cache, fetched at build).
# Update both when re-vendoring.
ARG ANACONDA_WEBUI_VERSION=86
ARG NODE_MODULES_REF=99a26de1065b0c39bad3d11197a37e1a8b0edb99
RUN dnf install -y git make npm diffutils gettext rpm-build && dnf clean all
COPY anaconda-webui/vendor/ /src/
WORKDIR /src
# The upstream build assumes a git checkout: tools/node-modules reads the
# node_modules gitlink from the index, and the Makefile fetches cockpit's
# shared lib into the repo's object store. Recreate just enough of one.
RUN set -eux; \
git init -q; \
git add -A; \
git update-index --add --cacheinfo "160000,${NODE_MODULES_REF},node_modules"; \
git -c user.name=build -c user.email=build@localhost commit -q -m vendored
RUN set -eux; \
make package-lock.json; \
# node_modules ships only x86_64's esbuild binary; add the host's if needed.
v="$(node -p 'require("./node_modules/esbuild/package.json").version')"; \
case "$(uname -m)" in \
aarch64) npm install --no-save --ignore-scripts "@esbuild/linux-arm64@${v}" ;; \
esac; \
make install DESTDIR=/out VERSION="${ANACONDA_WEBUI_VERSION}"
FROM quay.io/fedora/fedora-bootc:rawhide
# Stock Fedora anaconda-webui pulls in the right dependencies; the patched
# build is laid over it below.
RUN set -eux; \
dnf install -y \
anaconda-webui \
anaconda \
anaconda-install-env-deps \
anaconda-dracut \
dracut-config-generic \
dracut-network \
net-tools \
squashfs-tools \
grub2-efi-x64-cdboot \
python3-mako \
lorax-templates-generic \
biosdevname \
prefixdevname; \
dnf clean all
# Replace the packaged web UI wholesale so no stale upstream assets linger.
RUN rm -rf /usr/share/cockpit/anaconda-webui
COPY --from=anaconda-webui /out/ /
# Fedora 43+ path fixup -- image-builder expects the EFI directory under
# /boot/efi, not wherever the fedora-bootc base puts it.
RUN mkdir -p /boot/efi && cp -ra /usr/lib/efi/*/*/EFI /boot/efi
# lorax wants to symlink /mnt -> /var/mnt, which doesn't exist on this base.
RUN mkdir -p /var/mnt