build_image: Build sysext store after image when requested

This function is meant to prebuild certain sysexts to be released along
with each release. These will not be built into the image, but instead
can be fetched by the user on demand.

The command to build sysexts would be:

  ./build_image prod sysext

Signed-off-by: Jeremi Piotrowski <jpiotrowski@microsoft.com>
This commit is contained in:
Jeremi Piotrowski 2024-03-06 13:05:17 +00:00
parent 54c8545eec
commit 5d5dd59102
2 changed files with 44 additions and 0 deletions

View File

@ -108,11 +108,13 @@ fi
PROD_IMAGE=0
PROD_TAR=0
CONTAINER=0
SYSEXT=0
for arg in "$@"; do
case "${arg}" in
prod) PROD_IMAGE=1 ;;
prodtar) PROD_IMAGE=1 PROD_TAR=1 ;;
container) CONTAINER=1 ;;
sysext) SYSEXT=1 ;;
*) die_notrace "Unknown image type ${arg}" ;;
esac
done
@ -177,6 +179,9 @@ if [[ "${PROD_IMAGE}" -eq 1 ]]; then
create_prod_tar ${FLATCAR_PRODUCTION_IMAGE_NAME}
fi
fi
if [[ "${SYSEXT}" -eq 1 ]]; then
create_prod_sysexts "${FLATCAR_PRODUCTION_IMAGE_NAME}"
fi
if [[ ${FLAGS_generate_update} -eq ${FLAGS_TRUE} ]] || \
[[ ${FLAGS_extract_update} -eq ${FLAGS_TRUE} ]]

View File

@ -247,3 +247,42 @@ create_prod_tar() {
sudo losetup --detach "${lodev}"
upload_image "${container}"
}
EXTRA_SYSEXTS=(
zfs:sys-fs/zfs
)
create_prod_sysexts() {
local image_name="$1"
local image_sysext_base="${image_name%.bin}_sysext.squashfs"
sudo rm -rf "${BUILD_DIR}/sysexts/*"
mkdir -p "${BUILD_DIR}/sysexts"
local to_upload=()
for sysext in "${EXTRA_SYSEXTS[@]}"; do
local name="flatcar-${sysext%:*}"
local pkg="${sysext#*:}"
local mangle_script="${BUILD_LIBRARY_DIR}/sysext_mangle_${name}"
if [[ ! -x "${mangle_script}" ]]; then
mangle_script=
fi
sudo "${SCRIPT_ROOT}/build_sysext" --board="${BOARD}" \
--squashfs_base="${BUILD_DIR}/${image_sysext_base}" \
--image_builddir="${BUILD_DIR}/sysexts" \
${mangle_script:+--manglefs_script=${mangle_script}} \
"${name}" "${pkg}"
delta_generator \
-private_key "/usr/share/update_engine/update-payload-key.key.pem" \
-new_image "${BUILD_DIR}/sysexts/${name}.raw" \
-out_file "${BUILD_DIR}/sysexts/flatcar_test_update-${name}.gz"
to_upload+=(
"${BUILD_DIR}/sysexts/${name}.raw"
"${BUILD_DIR}/sysexts/${name}_contents.txt"
"${BUILD_DIR}/sysexts/${name}_contents_wtd.txt"
"${BUILD_DIR}/sysexts/${name}_disk_usage.txt"
"${BUILD_DIR}/sysexts/${name}_packages.txt"
"${BUILD_DIR}/sysexts/flatcar_test_update-${name}.gz"
)
done
upload_image -d ${BUILD_DIR}/sysexts/sysext.DIGESTS "${to_upload[@]}"
}