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 2e491fb22e
commit fb83a191f4
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}"
}
DEFAULT_SYSEXTS=(
flatcar-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 "${DEFAULT_SYSEXTS[@]}"; do
local name="${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[@]}"
}