build_sysext: Populate SYSEXT_ID/NAME/VERSION_ID/HOME_URL/BUG_REPORT_URL

These extension-release.d fields are equivalent to their non-SYSEXT
os-release counterparts. SYSEXT_ID is taken from the sysext's name as
given to build_sysext. SYSEXT_NAME, SYSEXT_VERSION_ID, and
SYSEXT_HOME_URL are taken from the package if only one is given.
SYSEXT_NAME is the new name for the OEM_NAME variable.

Signed-off-by: James Le Cuirot <jlecuirot@microsoft.com>
This commit is contained in:
James Le Cuirot 2026-02-19 11:57:38 +00:00
parent 8546bd4b24
commit e5f29b7a19
No known key found for this signature in database
GPG Key ID: 1226415D00DD3137
18 changed files with 43 additions and 31 deletions

View File

@ -93,8 +93,8 @@ switch_to_strict_mode -uo pipefail
# Validate command line parameters
SYSEXTNAME="${1:-}"
if [[ -z "${SYSEXTNAME}" ]]; then
SYSEXT_ID="${1:-}"
if [[ -z "${SYSEXT_ID}" ]]; then
die "No sysext name provided."
fi
shift
@ -216,7 +216,7 @@ if [[ ${#} -lt 1 ]]; then
show_help_if_requested -h
fi
info "Building '${SYSEXTNAME}' sysext with (meta-)packages '${@}' in '${BUILD_DIR}' using '${FLAGS_compression}' compression".
info "Building '${SYSEXT_ID}' sysext with (meta-)packages '${@}' in '${BUILD_DIR}' using '${FLAGS_compression}' compression".
for package; do
echo "Installing package into sysext image: $package"
@ -232,6 +232,13 @@ for package; do
"${package}"
done
# If there's only one package, grab its metadata for the sysext.
unset PVR HOMEPAGE SYSEXT_NAME
if [[ ${#} -eq 1 ]]; then
CPV=$(portageq best_version "${BUILD_DIR}/${FLAGS_install_root_basename}" "$1")
IFS=$'\n' read -r -d '' PVR HOMEPAGE SYSEXT_NAME < <(portageq metadata "${BUILD_DIR}/${FLAGS_install_root_basename}" installed "${CPV}" PVR HOMEPAGE SYSEXT_NAME; printf '\0')
fi
# Make squashfs generation more reproducible.
export SOURCE_DATE_EPOCH=$(stat -c '%Y' "${BUILD_DIR}/fs-root/usr/lib/os-release")
@ -240,16 +247,16 @@ umount "${BUILD_DIR}/${FLAGS_install_root_basename}"
umount "${BUILD_DIR}/fs-root"
if [[ "$FLAGS_generate_pkginfo" = "${FLAGS_TRUE}" ]] ; then
info " Creating pkginfo squashfs '${BUILD_DIR}/${SYSEXTNAME}_pkginfo.raw'"
info " Creating pkginfo squashfs '${BUILD_DIR}/${SYSEXT_ID}_pkginfo.raw'"
mkdir -p "${BUILD_DIR}/img-pkginfo/var/db"
cp -R "${BUILD_DIR}/${FLAGS_install_root_basename}/var/db/pkg" "${BUILD_DIR}/img-pkginfo/var/db/"
mksquashfs "${BUILD_DIR}/img-pkginfo" "${BUILD_DIR}/${SYSEXTNAME}_pkginfo.raw" \
mksquashfs "${BUILD_DIR}/img-pkginfo" "${BUILD_DIR}/${SYSEXT_ID}_pkginfo.raw" \
-noappend -xattrs-exclude '^btrfs.' -comp zstd -Xcompression-level 22 -b 512k
fi
info "Writing ${SYSEXTNAME}_packages.txt"
info "Writing ${SYSEXT_ID}_packages.txt"
ROOT="${BUILD_DIR}/${FLAGS_install_root_basename}" PORTAGE_CONFIGROOT="/build/${FLAGS_board}" \
equery --no-color list --format '$cpv::$repo' '*' > "${BUILD_DIR}/${SYSEXTNAME}_packages.txt"
equery --no-color list --format '$cpv::$repo' '*' > "${BUILD_DIR}/${SYSEXT_ID}_packages.txt"
if [[ "${FLAGS_strip_binaries}" = "${FLAGS_TRUE}" ]]; then
@ -283,11 +290,16 @@ for entry in "${BUILD_DIR}/${FLAGS_install_root_basename}"/*; do
rm -rf "${entry}"
done
grep . <<EOF | install -m0644 -D /dev/stdin "${BUILD_DIR}/${FLAGS_install_root_basename}/usr/lib/extension-release.d/extension-release.${SYSEXTNAME}"
grep . <<EOF | install -m0644 -D /dev/stdin "${BUILD_DIR}/${FLAGS_install_root_basename}/usr/lib/extension-release.d/extension-release.${SYSEXT_ID}"
ID='flatcar'
${VERSION_FIELD_OVERRIDE:-VERSION_ID}=${FLATCAR_VERSION_ID@Q}
ARCHITECTURE=${ARCH@Q}
EXTENSION_RELOAD_MANAGER=1
SYSEXT_ID=${SYSEXT_ID@Q}
${SYSEXT_NAME:+SYSEXT_NAME=${SYSEXT_NAME@Q}}
${PVR:+SYSEXT_VERSION_ID=${PVR@Q}}
${HOMEPAGE:+SYSEXT_HOME_URL=${HOMEPAGE@Q}}
SYSEXT_BUG_REPORT_URL='https://issues.flatcar.org'
EOF
info "Removing opaque directory markers to always merge all contents"
@ -323,7 +335,7 @@ systemd-repart \
--certificate="${SYSEXT_SIGNING_KEY_DIR}/sysexts.crt" \
--make-ddi=sysext \
--copy-source="${BUILD_DIR}/${FLAGS_install_root_basename}" \
"${BUILD_DIR}/${SYSEXTNAME}.raw"
"${BUILD_DIR}/${SYSEXT_ID}.raw"
rm -rf "${BUILD_DIR}"/{fs-root,"${FLAGS_install_root_basename}",workdir}
@ -333,10 +345,10 @@ systemd-dissect --read-only \
--mount \
--mkdir \
--image-policy='root=encrypted+unprotected+absent:usr=encrypted+unprotected+absent' \
"${BUILD_DIR}/${SYSEXTNAME}.raw" \
"${BUILD_DIR}/${SYSEXT_ID}.raw" \
"${BUILD_DIR}/img-rootfs"
write_contents "${BUILD_DIR}/img-rootfs" "${BUILD_DIR}/${SYSEXTNAME}_contents.txt"
write_contents_with_technical_details "${BUILD_DIR}/img-rootfs" "${BUILD_DIR}/${SYSEXTNAME}_contents_wtd.txt"
write_disk_space_usage_in_paths "${BUILD_DIR}/img-rootfs" "${BUILD_DIR}/${SYSEXTNAME}_disk_usage.txt"
write_contents "${BUILD_DIR}/img-rootfs" "${BUILD_DIR}/${SYSEXT_ID}_contents.txt"
write_contents_with_technical_details "${BUILD_DIR}/img-rootfs" "${BUILD_DIR}/${SYSEXT_ID}_contents_wtd.txt"
write_disk_space_usage_in_paths "${BUILD_DIR}/img-rootfs" "${BUILD_DIR}/${SYSEXT_ID}_disk_usage.txt"
systemd-dissect --umount --rmdir "${BUILD_DIR}/img-rootfs"

View File

@ -97,9 +97,9 @@ src_compile() {
if [[ -z "${version}" ]]; then
die "Could not deduce a version from ebuild ${ebuild##*/} (${ebuild})"
fi
name=$(source <(grep -F 'OEM_NAME=' "${ebuild}"); echo "${OEM_NAME}")
name=$(source <(grep -F 'SYSEXT_NAME=' "${ebuild}"); echo "${SYSEXT_NAME}")
if [[ -z "${name}" ]]; then
die "Missing OEM_NAME variable in ${ebuild##*/}"
die "Missing SYSEXT_NAME variable in ${ebuild##*/}"
fi
# We need to prefix the HOMEPAGE variable with SYSEXT_, because
# portage marks HOMEPAGE as readonly and this gets propagated to

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="Akamai"
SYSEXT_NAME="Akamai"

View File

@ -20,7 +20,7 @@ RDEPEND="
"
# for coreos-base/common-oem-files
OEM_NAME="Amazon EC2"
SYSEXT_NAME="Amazon EC2"
S="${WORKDIR}"

View File

@ -23,7 +23,7 @@ RDEPEND="
"
# for coreos-base/common-oem-files
OEM_NAME="Microsoft Azure"
SYSEXT_NAME="Microsoft Azure"
S="${WORKDIR}"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="DigitalOcean"
SYSEXT_NAME="DigitalOcean"

View File

@ -23,7 +23,7 @@ RDEPEND="
app-emulation/google-compute-engine
"
OEM_NAME="Google Compute Engine"
SYSEXT_NAME="Google Compute Engine"
src_install() {
systemd_dounit "${FILESDIR}/units/oem-gce.service"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="Hetzner"
SYSEXT_NAME="Hetzner"

View File

@ -16,7 +16,7 @@ RDEPEND="
app-emulation/hv-daemons
"
OEM_NAME="Microsoft Hyper-V"
SYSEXT_NAME="Microsoft Hyper-V"
# no source directory
S="${WORKDIR}"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="KubeVirt"
SYSEXT_NAME="KubeVirt"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64"
IUSE=""
OEM_NAME="Nutanix"
SYSEXT_NAME="Nutanix"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="Openstack"
SYSEXT_NAME="Openstack"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="Equinix Metal"
SYSEXT_NAME="Equinix Metal"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="Proxmox VE"
SYSEXT_NAME="Proxmox VE"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="QEMU"
SYSEXT_NAME="QEMU"

View File

@ -12,4 +12,4 @@ SLOT="0"
KEYWORDS="amd64 arm64"
IUSE=""
OEM_NAME="Scaleway"
SYSEXT_NAME="Scaleway"

View File

@ -20,7 +20,7 @@ RDEPEND="
S="${WORKDIR}"
OEM_NAME="STACKIT"
SYSEXT_NAME="STACKIT"
src_install() {
systemd_install_dropin chronyd.service "${FILESDIR}"/chronyd-overwrite.conf

View File

@ -22,7 +22,7 @@ RDEPEND="
S="${WORKDIR}"
# for coreos-base/common-oem-files
OEM_NAME="VMware"
SYSEXT_NAME="VMware"
src_install() {
local unit_dir