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>
60 lines
2.8 KiB
Docker
60 lines
2.8 KiB
Docker
# Stage 1 of the build. BASE_IMAGE is stage 0: our Aurora fork, built from the
|
|
# stage-0/ submodule by `task build-base` into root's containers-storage. Its
|
|
# pin is the submodule commit. Pass e.g.
|
|
# --build-arg BASE_IMAGE=ghcr.io/ublue-os/aurora:stable to build on stock
|
|
# upstream Aurora instead.
|
|
ARG BASE_IMAGE=localhost/aurora:stable
|
|
|
|
# --- Builds the out-of-tree snd-hda-codec-cs8409 module (iMac19,2 mic fix). ---
|
|
# See docs/imac19-2-mic-fix.md and patches/snd-hda-codec-cs8409/ for the full
|
|
# story. Kept as its own stage so the build toolchain never lands in the
|
|
# final image, and built FROM the same BASE_IMAGE as the final stage so the
|
|
# kernel-devel headers installed here can never drift out of sync with the
|
|
# kernel that actually ships below.
|
|
FROM ${BASE_IMAGE} AS kmod-builder
|
|
|
|
RUN set -eux; \
|
|
NVR="$(rpm -q kernel-core --qf '%{VERSION}-%{RELEASE}.%{ARCH}')"; \
|
|
VERSION="$(rpm -q kernel-core --qf '%{VERSION}')"; \
|
|
RELEASE="$(rpm -q kernel-core --qf '%{RELEASE}')"; \
|
|
echo "Building snd-hda-codec-cs8409 against kernel ${NVR}"; \
|
|
dnf install -y gcc make elfutils-libelf-devel bc perl patch; \
|
|
dnf install -y "kernel-devel-${NVR}" \
|
|
|| dnf install -y "https://kojipkgs.fedoraproject.org/packages/kernel/${VERSION}/${RELEASE}/x86_64/kernel-devel-${NVR}.rpm"; \
|
|
echo "${NVR}" > /kernel-nvr.txt
|
|
|
|
COPY patches/snd-hda-codec-cs8409/vendor/ /usr/src/snd-hda-codec-cs8409/
|
|
COPY patches/snd-hda-codec-cs8409/0001-imac19-2-force-intmike-adc-nid-fallback.patch /tmp/
|
|
|
|
# --fuzz=0: fail loudly on a context mismatch (e.g. a future kernel bump that
|
|
# shifts this file) instead of silently mis-patching.
|
|
RUN set -eux; \
|
|
cd /usr/src/snd-hda-codec-cs8409; \
|
|
patch -p1 --fuzz=0 < /tmp/0001-imac19-2-force-intmike-adc-nid-fallback.patch; \
|
|
make KVER="$(cat /kernel-nvr.txt)"; \
|
|
mkdir -p /output; \
|
|
cp snd-hda-codec-cs8409.ko /output/
|
|
|
|
# --- Final image. ---
|
|
FROM ${BASE_IMAGE} AS final
|
|
|
|
COPY overlay/ /
|
|
|
|
# alsa-tools provides hda-verb, used by cs8409-intmike-power-fixup.service.
|
|
RUN dnf install -y alsa-tools
|
|
|
|
COPY --from=kmod-builder /output/snd-hda-codec-cs8409.ko /tmp/snd-hda-codec-cs8409.ko
|
|
|
|
# Installs into .../extra/, which kmod's default search order gives
|
|
# precedence over the in-tree copy under .../kernel/... — this is the same
|
|
# mechanism Fedora's own kmod-* subpackages use to override an in-tree
|
|
# module of the same name/modalias. No blacklisting or renaming needed.
|
|
RUN set -eux; \
|
|
NVR="$(rpm -q kernel-core --qf '%{VERSION}-%{RELEASE}.%{ARCH}')"; \
|
|
mkdir -p "/usr/lib/modules/${NVR}/extra"; \
|
|
mv /tmp/snd-hda-codec-cs8409.ko "/usr/lib/modules/${NVR}/extra/snd-hda-codec-cs8409.ko"; \
|
|
depmod -a "${NVR}"
|
|
|
|
# System-level units are enabled explicitly. User units are picked up
|
|
# automatically via overlay/usr/lib/systemd/user-preset/.
|
|
RUN systemctl enable rpm-ostree-cleanup.timer cs8409-intmike-power-fixup.service
|