quine-linux/installer/Containerfile

75 lines
3 KiB
Text
Raw Normal View History

# 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