From c42b55f8accfea46263890323f2aedd2142fd515 Mon Sep 17 00:00:00 2001 From: tranch Date: Tue, 25 Aug 2026 11:41:20 +0800 Subject: fix(installer): validate payload on build host Move payload inspection out of the nested Podman build so local ISO builds do not require /dev/fuse. Normalize local registry references. --- installer/Containerfile | 2 +- installer/build.sh | 27 --------------------------- just_scripts/build-installer-iso.sh | 29 ++++++++++++++++++++++++++++- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/installer/Containerfile b/installer/Containerfile index 32b327e..a7f1d3b 100644 --- a/installer/Containerfile +++ b/installer/Containerfile @@ -2,7 +2,7 @@ # The image installed to disk is supplied separately as INSTALL_IMAGE_PAYLOAD. ARG BASE_IMAGE=ghcr.io/ublue-os/bazzite:stable -ARG IMAGE_VENDOR=AeroCore-IO +ARG IMAGE_VENDOR=aerocore-io ARG IMAGE_NAME=aerocore-os ARG INSTALL_IMAGE_PAYLOAD=ghcr.io/${IMAGE_VENDOR}/${IMAGE_NAME}:stable ARG INSTALL_IMAGE_PAYLOAD_ARCHIVE=/install-payload.oci diff --git a/installer/build.sh b/installer/build.sh index dd7b7f5..dda0706 100755 --- a/installer/build.sh +++ b/installer/build.sh @@ -115,33 +115,6 @@ else podman pull "${INSTALL_IMAGE_PAYLOAD}" fi -# Refuse to build an ISO with a payload that still carries Bazzite release -# bytes. bootupd derives its EFI label from system-release during installation; -# a trailing NUL there makes efibootmgr fail before Anaconda can run %post. -podman run --rm --entrypoint /usr/bin/bash "${INSTALL_IMAGE_PAYLOAD}" -ceu ' - system_release=/etc/system-release - system_release_target=$(readlink -f "$system_release") - - if od -An -v -tx1 "$system_release_target" | awk '\''{ for (i = 1; i <= NF; i++) if ($i == "00") found = 1 } END { exit(found ? 0 : 1) }'\''; then - echo "Install payload has a NUL byte in ${system_release_target}" >&2 - od -An -v -tx1 "$system_release_target" >&2 - exit 1 - fi - - expected_prefix="AeroCore OS release $(rpm -E %fedora) (" - system_release_value=$(<"$system_release_target") - case "$system_release_value" in - "$expected_prefix"*) ;; - *) - echo "Install payload has an unexpected system-release: ${system_release_value@Q}" >&2 - exit 1 - ;; - esac - - jq -e '\''.["image-name"] == "aerocore-os" and .["image-vendor"] == "aerocore-io"'\'' \ - /usr/share/ublue-os/image-info.json >/dev/null -' - # Tell Anaconda to install the bootc container that was loaded above. mkdir -p /var/lib/rpm-state cat >> /usr/share/anaconda/interactive-defaults.ks <&2 + exit 1 + fi + case "$(<"$system_release_target")" in + "AeroCore OS release $(rpm -E %fedora) ("*) ;; + *) + echo "Unexpected system-release: $(<"$system_release_target")" >&2 + exit 1 + ;; + esac + jq -e '\''.["image-name"] == "aerocore-os" and .["image-vendor"] == "aerocore-io"'\'' \ + /usr/share/ublue-os/image-info.json >/dev/null + ' +} + mkdir -p "${output_dir}" ensure_rootful_image +validate_install_payload "${podman_cmd[@]}" tag "${source_image}" "${payload}" "${podman_cmd[@]}" save --format oci-archive --output "${payload_archive}" "${payload}" -- cgit v1.2.3