From 5d5dd591022c99a2881c1df4cdbe36bac728eb32 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..02c0571d09 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}" } + +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[@]}" +} +