From fb83a191f4d9c875008d4e7ad3bdfb502f3b18d1 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Wed, 6 Mar 2024 13:05:17 +0000 Subject: [PATCH] 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 --- build_image | 5 ++++ build_library/prod_image_util.sh | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/build_image b/build_image index 697c109cee..16f5d70622 100755 --- a/build_image +++ b/build_image @@ -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} ]] diff --git a/build_library/prod_image_util.sh b/build_library/prod_image_util.sh index 1f8029dc8c..b69d7b0c1e 100755 --- a/build_library/prod_image_util.sh +++ b/build_library/prod_image_util.sh @@ -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[@]}" +} +