Message ID | 20240415104610.3073497-3-Adithya.Balakumar@toshiba-tsip.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Integrate Delta Update with rdiff_image and delta handler | expand |
On Mon, 2024-04-15 at 16:16 +0530, Adithya Balakumar wrote: > This allows the creation of a swu file for delta update. > > Signed-off-by: Adithya Balakumar <Adithya.Balakumar@toshiba-tsip.com> > --- > classes/swupdate.bbclass | 32 ++++++++++++++- > .../images/swu/sw-description-delta.tmpl | 39 > +++++++++++++++++++ > 2 files changed, 70 insertions(+), 1 deletion(-) > create mode 100644 recipes-core/images/swu/sw-description-delta.tmpl > > diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass > index 1a7cd4d..76c7aa5 100644 > --- a/classes/swupdate.bbclass > +++ b/classes/swupdate.bbclass > @@ -26,6 +26,9 @@ SWU_EBG_UPDATE ?= "" > SWU_EFI_BOOT_DEVICE ?= "/dev/disk/by-uuid/4321-DCBA" > SWU_BOOTLOADER ??= "ebg" > SWU_DESCRIPITION_FILE_BOOTLOADER ??= "${SWU_DESCRIPTION_FILE}- > ${SWU_BOOTLOADER}" > +SWU_DESCRIPITION_FILE_DELTA_UPDATE ??= "${SWU_DESCRIPTION_FILE}- > delta" Hi, I'm still wondering if we really need a dedicated sw-description file for that. Can't we just mix in the SWU_DELTA_UPDATE_PROPERTIES into the normal sw-description? Maybe Quirin can help with the integration using the new infrastructure. Felix > +SWU_DELTA_UPDATE_ARTIFACT = > "${SWU_ROOTFS_NAME}.delta_update${@get_swu_compression_type(d)}" > +SWU_DELTA_UPDATE_ARTIFACT_TYPE = > "delta_update${@get_swu_compression_type(d)}" > > SWU_IMAGE_FILE ?= "${IMAGE_FULLNAME}" > SWU_DESCRIPTION_FILE ?= "sw-description" > @@ -37,6 +40,7 @@ SWU_SIGNATURE_TYPE ?= "cms" > SWU_BUILDCHROOT_IMAGE_FILE ?= > "${@os.path.basename(d.getVar('SWU_IMAGE_FILE'))}" > > IMAGE_TYPEDEP:swu = > "${SWU_ROOTFS_TYPE}${@get_swu_compression_type(d)}" > +IMAGE_TYPEDEP:swu += "${@ '${SWU_DELTA_UPDATE_ARTIFACT_TYPE}' if > d.getVar('DELTA_UPDATE_TYPE') else ''}" > IMAGER_BUILD_DEPS:swu += "${@'swupdate-certificates-key' if > bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > IMAGER_INSTALL:swu += "cpio ${@'openssl swupdate-certificates-key' > if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > IMAGE_INSTALL += "${@'swupdate-certificates' if > bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > @@ -44,8 +48,10 @@ IMAGE_INSTALL += "${@'swupdate-certificates' if > bb.utils.to_boolean(d.getVar('SW > > IMAGE_SRC_URI:swu = "file://${SWU_DESCRIPTION_FILE}.tmpl" > IMAGE_SRC_URI:swu += > "file://${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" > +IMAGE_SRC_URI:delta_update += > "file://${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" > IMAGE_TEMPLATE_FILES:swu = "${SWU_DESCRIPTION_FILE}.tmpl" > IMAGE_TEMPLATE_FILES:swu += > "${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" > +IMAGE_TEMPLATE_FILES:delta_update += > "${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" > IMAGE_TEMPLATE_VARS:swu = " \ > SWU_ROOTFS_PARTITION_NAME \ > TARGET_IMAGE_UUID \ > @@ -58,6 +64,8 @@ IMAGE_TEMPLATE_VARS:swu = " \ > SWU_FILE_NODES \ > SWU_BOOTLOADER_FILE_NODE \ > SWU_SCRIPTS_NODE \ > + SWU_DELTA_UPDATE_ARTIFACT \ > + SWU_DELTA_UPDATE_PROPERTIES \ > " > > # TARGET_IMAGE_UUID needs to be generated before completing the > template > @@ -148,6 +156,22 @@ python add_scripts_node() { > d.appendVar('SWU_SCRIPTS_NODE', swu_scripts_node) > } > > +SWU_EXTEND_SW_DESCRIPTION += "add_swu_delta_update_properties" > +python add_swu_delta_update_properties() { > + delta_type = d.getVar('DELTA_UPDATE_TYPE') > + swu_delta_update_properties = "" > + if delta_type == "rdiff": > + swu_delta_update_properties = 'chainhandler = > "rdiff_image";' > + elif delta_type == "zchunk": > + zck_url = d.getVar('DELTA_ZCK_URL') > + swu_delta_update_properties = f""" > + chainhandler = "delta"; > + url = "{zck_url}"; > + zckloglevel = "error"; > + """ > + d.setVar('SWU_DELTA_UPDATE_PROPERTIES', > swu_delta_update_properties) > +} > + > # convert between swupdate compressor name and imagetype extension > def get_swu_compression_type(d): > swu_ct = d.getVar('SWU_COMPRESSION_TYPE') > @@ -166,14 +190,20 @@ FILESEXTRAPATHS:append = ":${LAYERDIR_cip- > core}/recipes-core/images/swu" > > do_image_swu[depends] += "${PN}:do_transform_template" > do_image_swu[stamp-extra-info] = "${DISTRO}-${MACHINE}" > -do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- > ${SWU_BOOTLOADER}" > +do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- > ${SWU_BOOTLOADER} ${WORKDIR}/swu-delta" > do_image_swu[prefuncs] = "do_extend_sw_description" > IMAGE_CMD:swu() { > rm -f '${DEPLOY_DIR_IMAGE}/${SWU_IMAGE_FILE}'*.swu > + if [ -z "${DELTA_UPDATE_TYPE}" ]; then > + rm -rf ${WORKDIR}/swu-delta > + fi > cp '${WORKDIR}/${SWU_DESCRIPTION_FILE}' > '${WORKDIR}/swu/${SWU_DESCRIPTION_FILE}' > if [ -f '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' ]; then > cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' > '${WORKDIR}/swu-${SWU_BOOTLOADER}/${SWU_DESCRIPTION_FILE}' > fi > + if [ -n "${DELTA_UPDATE_TYPE}" ]; then > + cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_DELTA_UPDATE}' > '${WORKDIR}/swu-delta/${SWU_DESCRIPTION_FILE}' > + fi > > for swu_file in "${WORKDIR}"/swu*; do > swu_file_base=$(basename $swu_file) > diff --git a/recipes-core/images/swu/sw-description-delta.tmpl > b/recipes-core/images/swu/sw-description-delta.tmpl > new file mode 100644 > index 0000000..7f7d623 > --- /dev/null > +++ b/recipes-core/images/swu/sw-description-delta.tmpl > @@ -0,0 +1,39 @@ > +# > +# CIP Core, generic profile > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# Authors: > +# Quirin Gylstorff <quirin.gylstorff@siemens.com> > +# > +# SPDX-License-Identifier: MIT > +# > +software = > +{ > + version = "${SWU_VERSION}"; > + name = "${SWU_NAME}"; > + ${SWU_HW_COMPAT_NODE} > + images: ({ > + filename = "${SWU_DELTA_UPDATE_ARTIFACT}"; > + device = "C:BOOT0:linux.efi- > >${ABROOTFS_PART_UUID_A},C:BOOT1:linux.efi->${ABROOTFS_PART_UUID_B}"; > + type = "roundrobin"; > + ${SWU_COMPRESSION_NODE} > + properties: { > + subtype = "image"; > + configfilecheck = > "/etc/os-release@not_match@IMAGE_UUID=${TARGET_IMAGE_UUID}"; > + ${SWU_DELTA_UPDATE_PROPERTIES} > + }; > + sha256 = "${SWU_DELTA_UPDATE_ARTIFACT}-sha256"; > + }); > + files: ({ > + filename = "linux.efi"; > + path = "linux.efi"; > + type = "roundrobin"; > + device = "C:BOOT0:linux.efi->BOOT0,C:BOOT1:linux.efi- > >BOOT1"; > + filesystem = "vfat"; > + properties: { > + subtype = "kernel"; > + }; > + sha256 = "linux.efi-sha256"; > + }${SWU_FILE_NODES}); > +}
-----Original Message----- From: MOESSBAUER, Felix <felix.moessbauer@siemens.com> Sent: Tuesday, April 16, 2024 9:46 AM To: cip-dev@lists.cip-project.org; balakumar adithya(TSIP TEUR) <Adithya.Balakumar@toshiba-tsip.com>; Kiszka, Jan <jan.kiszka@siemens.com> Cc: kunijadar shivanand(TSIP TMIEC ODG Porting) <Shivanand.Kunijadar@toshiba-tsip.com>; quirin.gylstorff@siemens.com; dinesh kumar(TSIP TMIEC ODG Porting) <dinesh.kumar@toshiba-tsip.com>; ashrith sai(TSIP) <Sai.Sathujoda@toshiba-tsip.com>; hayashi kazuhiro(林 和宏 DME ○DIG□MPS○MP4) <kazuhiro3.hayashi@toshiba.co.jp> Subject: Re: [isar-cip-core][PATCH v3 2/3] swupdate.bbclass: Generate swu for delta updates On Mon, 2024-04-15 at 16:16 +0530, Adithya Balakumar wrote: > This allows the creation of a swu file for delta update. > > Signed-off-by: Adithya Balakumar <Adithya.Balakumar@toshiba-tsip.com> > --- > classes/swupdate.bbclass | 32 ++++++++++++++- > .../images/swu/sw-description-delta.tmpl | 39 > +++++++++++++++++++ > 2 files changed, 70 insertions(+), 1 deletion(-) > create mode 100644 recipes-core/images/swu/sw-description-delta.tmpl > > diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass index > 1a7cd4d..76c7aa5 100644 > --- a/classes/swupdate.bbclass > +++ b/classes/swupdate.bbclass > @@ -26,6 +26,9 @@ SWU_EBG_UPDATE ?= "" > SWU_EFI_BOOT_DEVICE ?= "/dev/disk/by-uuid/4321-DCBA" > SWU_BOOTLOADER ??= "ebg" > SWU_DESCRIPITION_FILE_BOOTLOADER ??= "${SWU_DESCRIPTION_FILE}- > ${SWU_BOOTLOADER}" > +SWU_DESCRIPITION_FILE_DELTA_UPDATE ??= "${SWU_DESCRIPTION_FILE}- > delta" Hi, I'm still wondering if we really need a dedicated sw-description file for that. Can't we just mix in the SWU_DELTA_UPDATE_PROPERTIES into the normal sw-description? Maybe Quirin can help with the integration using the new infrastructure. Felix [Adithya Balakumar] Hi Felix, In a case where I have to generate a delta swu and a complete swu, I would need a sw-description file for each. Hence the approach that I have taken here. Please correct me if my understanding is wrong. Adithya > +SWU_DELTA_UPDATE_ARTIFACT = > "${SWU_ROOTFS_NAME}.delta_update${@get_swu_compression_type(d)}" > +SWU_DELTA_UPDATE_ARTIFACT_TYPE = > "delta_update${@get_swu_compression_type(d)}" > > SWU_IMAGE_FILE ?= "${IMAGE_FULLNAME}" > SWU_DESCRIPTION_FILE ?= "sw-description" > @@ -37,6 +40,7 @@ SWU_SIGNATURE_TYPE ?= "cms" > SWU_BUILDCHROOT_IMAGE_FILE ?= > "${@os.path.basename(d.getVar('SWU_IMAGE_FILE'))}" > > IMAGE_TYPEDEP:swu = > "${SWU_ROOTFS_TYPE}${@get_swu_compression_type(d)}" > +IMAGE_TYPEDEP:swu += "${@ '${SWU_DELTA_UPDATE_ARTIFACT_TYPE}' if > d.getVar('DELTA_UPDATE_TYPE') else ''}" > IMAGER_BUILD_DEPS:swu += "${@'swupdate-certificates-key' if > bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > IMAGER_INSTALL:swu += "cpio ${@'openssl swupdate-certificates-key' > if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > IMAGE_INSTALL += "${@'swupdate-certificates' if > bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > @@ -44,8 +48,10 @@ IMAGE_INSTALL += "${@'swupdate-certificates' if > bb.utils.to_boolean(d.getVar('SW > > IMAGE_SRC_URI:swu = "file://${SWU_DESCRIPTION_FILE}.tmpl" > IMAGE_SRC_URI:swu += > "file://${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" > +IMAGE_SRC_URI:delta_update += > "file://${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" > IMAGE_TEMPLATE_FILES:swu = "${SWU_DESCRIPTION_FILE}.tmpl" > IMAGE_TEMPLATE_FILES:swu += > "${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" > +IMAGE_TEMPLATE_FILES:delta_update += > "${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" > IMAGE_TEMPLATE_VARS:swu = " \ > SWU_ROOTFS_PARTITION_NAME \ > TARGET_IMAGE_UUID \ > @@ -58,6 +64,8 @@ IMAGE_TEMPLATE_VARS:swu = " \ > SWU_FILE_NODES \ > SWU_BOOTLOADER_FILE_NODE \ > SWU_SCRIPTS_NODE \ > + SWU_DELTA_UPDATE_ARTIFACT \ > + SWU_DELTA_UPDATE_PROPERTIES \ > " > > # TARGET_IMAGE_UUID needs to be generated before completing the > template @@ -148,6 +156,22 @@ python add_scripts_node() { > d.appendVar('SWU_SCRIPTS_NODE', swu_scripts_node) > } > > +SWU_EXTEND_SW_DESCRIPTION += "add_swu_delta_update_properties" > +python add_swu_delta_update_properties() { > + delta_type = d.getVar('DELTA_UPDATE_TYPE') > + swu_delta_update_properties = "" > + if delta_type == "rdiff": > + swu_delta_update_properties = 'chainhandler = > "rdiff_image";' > + elif delta_type == "zchunk": > + zck_url = d.getVar('DELTA_ZCK_URL') > + swu_delta_update_properties = f""" > + chainhandler = "delta"; > + url = "{zck_url}"; > + zckloglevel = "error"; > + """ > + d.setVar('SWU_DELTA_UPDATE_PROPERTIES', > swu_delta_update_properties) > +} > + > # convert between swupdate compressor name and imagetype extension > def get_swu_compression_type(d): > swu_ct = d.getVar('SWU_COMPRESSION_TYPE') @@ -166,14 +190,20 @@ > FILESEXTRAPATHS:append = ":${LAYERDIR_cip- > core}/recipes-core/images/swu" > > do_image_swu[depends] += "${PN}:do_transform_template" > do_image_swu[stamp-extra-info] = "${DISTRO}-${MACHINE}" > -do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- > ${SWU_BOOTLOADER}" > +do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- > ${SWU_BOOTLOADER} ${WORKDIR}/swu-delta" > do_image_swu[prefuncs] = "do_extend_sw_description" > IMAGE_CMD:swu() { > rm -f '${DEPLOY_DIR_IMAGE}/${SWU_IMAGE_FILE}'*.swu > + if [ -z "${DELTA_UPDATE_TYPE}" ]; then > + rm -rf ${WORKDIR}/swu-delta > + fi > cp '${WORKDIR}/${SWU_DESCRIPTION_FILE}' > '${WORKDIR}/swu/${SWU_DESCRIPTION_FILE}' > if [ -f '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' ]; then > cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' > '${WORKDIR}/swu-${SWU_BOOTLOADER}/${SWU_DESCRIPTION_FILE}' > fi > + if [ -n "${DELTA_UPDATE_TYPE}" ]; then > + cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_DELTA_UPDATE}' > '${WORKDIR}/swu-delta/${SWU_DESCRIPTION_FILE}' > + fi > > for swu_file in "${WORKDIR}"/swu*; do > swu_file_base=$(basename $swu_file) diff --git > a/recipes-core/images/swu/sw-description-delta.tmpl > b/recipes-core/images/swu/sw-description-delta.tmpl > new file mode 100644 > index 0000000..7f7d623 > --- /dev/null > +++ b/recipes-core/images/swu/sw-description-delta.tmpl > @@ -0,0 +1,39 @@ > +# > +# CIP Core, generic profile > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# Authors: > +# Quirin Gylstorff <quirin.gylstorff@siemens.com> # # > +SPDX-License-Identifier: MIT # software = { > + version = "${SWU_VERSION}"; > + name = "${SWU_NAME}"; > + ${SWU_HW_COMPAT_NODE} > + images: ({ > + filename = "${SWU_DELTA_UPDATE_ARTIFACT}"; > + device = "C:BOOT0:linux.efi- > >${ABROOTFS_PART_UUID_A},C:BOOT1:linux.efi->${ABROOTFS_PART_UUID_B}"; > + type = "roundrobin"; > + ${SWU_COMPRESSION_NODE} > + properties: { > + subtype = "image"; > + configfilecheck = > "/etc/os-release@not_match@IMAGE_UUID=${TARGET_IMAGE_UUID}"; > + ${SWU_DELTA_UPDATE_PROPERTIES} > + }; > + sha256 = "${SWU_DELTA_UPDATE_ARTIFACT}-sha256"; > + }); > + files: ({ > + filename = "linux.efi"; > + path = "linux.efi"; > + type = "roundrobin"; > + device = "C:BOOT0:linux.efi->BOOT0,C:BOOT1:linux.efi- > >BOOT1"; > + filesystem = "vfat"; > + properties: { > + subtype = "kernel"; > + }; > + sha256 = "linux.efi-sha256"; > + }${SWU_FILE_NODES}); > +} -- Siemens AG, Technology Linux Expert Center
-----Original Message----- From: cip-dev@lists.cip-project.org <cip-dev@lists.cip-project.org> On Behalf Of Adithya Balakumar Sent: Tuesday, April 16, 2024 10:00 AM To: felix.moessbauer@siemens.com; cip-dev@lists.cip-project.org; jan.kiszka@siemens.com Cc: kunijadar shivanand(TSIP TMIEC ODG Porting) <Shivanand.Kunijadar@toshiba-tsip.com>; quirin.gylstorff@siemens.com; dinesh kumar(TSIP TMIEC ODG Porting) <dinesh.kumar@toshiba-tsip.com>; ashrith sai(TSIP) <Sai.Sathujoda@toshiba-tsip.com>; hayashi kazuhiro(林 和宏 DME ○DIG□MPS○MP4) <kazuhiro3.hayashi@toshiba.co.jp> Subject: Re: [cip-dev] [isar-cip-core][PATCH v3 2/3] swupdate.bbclass: Generate swu for delta updates -----Original Message----- From: MOESSBAUER, Felix <felix.moessbauer@siemens.com> Sent: Tuesday, April 16, 2024 9:46 AM To: cip-dev@lists.cip-project.org; balakumar adithya(TSIP TEUR) <Adithya.Balakumar@toshiba-tsip.com>; Kiszka, Jan <jan.kiszka@siemens.com> Cc: kunijadar shivanand(TSIP TMIEC ODG Porting) <Shivanand.Kunijadar@toshiba-tsip.com>; quirin.gylstorff@siemens.com; dinesh kumar(TSIP TMIEC ODG Porting) <dinesh.kumar@toshiba-tsip.com>; ashrith sai(TSIP) <Sai.Sathujoda@toshiba-tsip.com>; hayashi kazuhiro(林 和宏 DME ○DIG□MPS○MP4) <kazuhiro3.hayashi@toshiba.co.jp> Subject: Re: [isar-cip-core][PATCH v3 2/3] swupdate.bbclass: Generate swu for delta updates On Mon, 2024-04-15 at 16:16 +0530, Adithya Balakumar wrote: > This allows the creation of a swu file for delta update. > > Signed-off-by: Adithya Balakumar <Adithya.Balakumar@toshiba-tsip.com> > --- > classes/swupdate.bbclass | 32 ++++++++++++++- > .../images/swu/sw-description-delta.tmpl | 39 > +++++++++++++++++++ > 2 files changed, 70 insertions(+), 1 deletion(-) > create mode 100644 recipes-core/images/swu/sw-description-delta.tmpl > > diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass index > 1a7cd4d..76c7aa5 100644 > --- a/classes/swupdate.bbclass > +++ b/classes/swupdate.bbclass > @@ -26,6 +26,9 @@ SWU_EBG_UPDATE ?= "" > SWU_EFI_BOOT_DEVICE ?= "/dev/disk/by-uuid/4321-DCBA" > SWU_BOOTLOADER ??= "ebg" > SWU_DESCRIPITION_FILE_BOOTLOADER ??= "${SWU_DESCRIPTION_FILE}- > ${SWU_BOOTLOADER}" > +SWU_DESCRIPITION_FILE_DELTA_UPDATE ??= "${SWU_DESCRIPTION_FILE}- > delta" Hi, I'm still wondering if we really need a dedicated sw-description file for that. Can't we just mix in the SWU_DELTA_UPDATE_PROPERTIES into the normal sw-description? Maybe Quirin can help with the integration using the new infrastructure. Felix [Adithya Balakumar] Hi Felix, In a case where I have to generate a delta swu and a complete swu, I would need a sw-description file for each. Hence the approach that I have taken here. Please correct me if my understanding is wrong. My thought was to have delta update swu as an optional / additional artifact apart from the complete update swu. In a case where a reference artifact is not provided (atleast in the case of rdiff), a delta artifact will not be created. But we could still create a complete update swu anyway. Would like to understand if you are thinking of a different approach ? Adithya > +SWU_DELTA_UPDATE_ARTIFACT = > "${SWU_ROOTFS_NAME}.delta_update${@get_swu_compression_type(d)}" > +SWU_DELTA_UPDATE_ARTIFACT_TYPE = > "delta_update${@get_swu_compression_type(d)}" > > SWU_IMAGE_FILE ?= "${IMAGE_FULLNAME}" > SWU_DESCRIPTION_FILE ?= "sw-description" > @@ -37,6 +40,7 @@ SWU_SIGNATURE_TYPE ?= "cms" > SWU_BUILDCHROOT_IMAGE_FILE ?= > "${@os.path.basename(d.getVar('SWU_IMAGE_FILE'))}" > > IMAGE_TYPEDEP:swu = > "${SWU_ROOTFS_TYPE}${@get_swu_compression_type(d)}" > +IMAGE_TYPEDEP:swu += "${@ '${SWU_DELTA_UPDATE_ARTIFACT_TYPE}' if > d.getVar('DELTA_UPDATE_TYPE') else ''}" > IMAGER_BUILD_DEPS:swu += "${@'swupdate-certificates-key' if > bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > IMAGER_INSTALL:swu += "cpio ${@'openssl swupdate-certificates-key' > if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > IMAGE_INSTALL += "${@'swupdate-certificates' if > bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" > @@ -44,8 +48,10 @@ IMAGE_INSTALL += "${@'swupdate-certificates' if > bb.utils.to_boolean(d.getVar('SW > > IMAGE_SRC_URI:swu = "file://${SWU_DESCRIPTION_FILE}.tmpl" > IMAGE_SRC_URI:swu += > "file://${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" > +IMAGE_SRC_URI:delta_update += > "file://${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" > IMAGE_TEMPLATE_FILES:swu = "${SWU_DESCRIPTION_FILE}.tmpl" > IMAGE_TEMPLATE_FILES:swu += > "${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" > +IMAGE_TEMPLATE_FILES:delta_update += > "${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" > IMAGE_TEMPLATE_VARS:swu = " \ > SWU_ROOTFS_PARTITION_NAME \ > TARGET_IMAGE_UUID \ > @@ -58,6 +64,8 @@ IMAGE_TEMPLATE_VARS:swu = " \ > SWU_FILE_NODES \ > SWU_BOOTLOADER_FILE_NODE \ > SWU_SCRIPTS_NODE \ > + SWU_DELTA_UPDATE_ARTIFACT \ > + SWU_DELTA_UPDATE_PROPERTIES \ > " > > # TARGET_IMAGE_UUID needs to be generated before completing the > template @@ -148,6 +156,22 @@ python add_scripts_node() { > d.appendVar('SWU_SCRIPTS_NODE', swu_scripts_node) > } > > +SWU_EXTEND_SW_DESCRIPTION += "add_swu_delta_update_properties" > +python add_swu_delta_update_properties() { > + delta_type = d.getVar('DELTA_UPDATE_TYPE') > + swu_delta_update_properties = "" > + if delta_type == "rdiff": > + swu_delta_update_properties = 'chainhandler = > "rdiff_image";' > + elif delta_type == "zchunk": > + zck_url = d.getVar('DELTA_ZCK_URL') > + swu_delta_update_properties = f""" > + chainhandler = "delta"; > + url = "{zck_url}"; > + zckloglevel = "error"; > + """ > + d.setVar('SWU_DELTA_UPDATE_PROPERTIES', > swu_delta_update_properties) > +} > + > # convert between swupdate compressor name and imagetype extension > def get_swu_compression_type(d): > swu_ct = d.getVar('SWU_COMPRESSION_TYPE') @@ -166,14 +190,20 @@ > FILESEXTRAPATHS:append = ":${LAYERDIR_cip- > core}/recipes-core/images/swu" > > do_image_swu[depends] += "${PN}:do_transform_template" > do_image_swu[stamp-extra-info] = "${DISTRO}-${MACHINE}" > -do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- > ${SWU_BOOTLOADER}" > +do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- > ${SWU_BOOTLOADER} ${WORKDIR}/swu-delta" > do_image_swu[prefuncs] = "do_extend_sw_description" > IMAGE_CMD:swu() { > rm -f '${DEPLOY_DIR_IMAGE}/${SWU_IMAGE_FILE}'*.swu > + if [ -z "${DELTA_UPDATE_TYPE}" ]; then > + rm -rf ${WORKDIR}/swu-delta > + fi > cp '${WORKDIR}/${SWU_DESCRIPTION_FILE}' > '${WORKDIR}/swu/${SWU_DESCRIPTION_FILE}' > if [ -f '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' ]; then > cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' > '${WORKDIR}/swu-${SWU_BOOTLOADER}/${SWU_DESCRIPTION_FILE}' > fi > + if [ -n "${DELTA_UPDATE_TYPE}" ]; then > + cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_DELTA_UPDATE}' > '${WORKDIR}/swu-delta/${SWU_DESCRIPTION_FILE}' > + fi > > for swu_file in "${WORKDIR}"/swu*; do > swu_file_base=$(basename $swu_file) diff --git > a/recipes-core/images/swu/sw-description-delta.tmpl > b/recipes-core/images/swu/sw-description-delta.tmpl > new file mode 100644 > index 0000000..7f7d623 > --- /dev/null > +++ b/recipes-core/images/swu/sw-description-delta.tmpl > @@ -0,0 +1,39 @@ > +# > +# CIP Core, generic profile > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# Authors: > +# Quirin Gylstorff <quirin.gylstorff@siemens.com> # # > +SPDX-License-Identifier: MIT # software = { > + version = "${SWU_VERSION}"; > + name = "${SWU_NAME}"; > + ${SWU_HW_COMPAT_NODE} > + images: ({ > + filename = "${SWU_DELTA_UPDATE_ARTIFACT}"; > + device = "C:BOOT0:linux.efi- > >${ABROOTFS_PART_UUID_A},C:BOOT1:linux.efi->${ABROOTFS_PART_UUID_B}"; > + type = "roundrobin"; > + ${SWU_COMPRESSION_NODE} > + properties: { > + subtype = "image"; > + configfilecheck = > "/etc/os-release@not_match@IMAGE_UUID=${TARGET_IMAGE_UUID}"; > + ${SWU_DELTA_UPDATE_PROPERTIES} > + }; > + sha256 = "${SWU_DELTA_UPDATE_ARTIFACT}-sha256"; > + }); > + files: ({ > + filename = "linux.efi"; > + path = "linux.efi"; > + type = "roundrobin"; > + device = "C:BOOT0:linux.efi->BOOT0,C:BOOT1:linux.efi- > >BOOT1"; > + filesystem = "vfat"; > + properties: { > + subtype = "kernel"; > + }; > + sha256 = "linux.efi-sha256"; > + }${SWU_FILE_NODES}); > +} -- Siemens AG, Technology Linux Expert Center
On 4/17/24 1:42 PM, Adithya.Balakumar@toshiba-tsip.com wrote: > > > -----Original Message----- > From: cip-dev@lists.cip-project.org <cip-dev@lists.cip-project.org> On Behalf Of Adithya Balakumar > Sent: Tuesday, April 16, 2024 10:00 AM > To: felix.moessbauer@siemens.com; cip-dev@lists.cip-project.org; jan.kiszka@siemens.com > Cc: kunijadar shivanand(TSIP TMIEC ODG Porting) <Shivanand.Kunijadar@toshiba-tsip.com>; quirin.gylstorff@siemens.com; dinesh kumar(TSIP TMIEC ODG Porting) <dinesh.kumar@toshiba-tsip.com>; ashrith sai(TSIP) <Sai.Sathujoda@toshiba-tsip.com>; hayashi kazuhiro(林 和宏 DME ○DIG□MPS○MP4) <kazuhiro3.hayashi@toshiba.co.jp> > Subject: Re: [cip-dev] [isar-cip-core][PATCH v3 2/3] swupdate.bbclass: Generate swu for delta updates > > > > -----Original Message----- > From: MOESSBAUER, Felix <felix.moessbauer@siemens.com> > Sent: Tuesday, April 16, 2024 9:46 AM > To: cip-dev@lists.cip-project.org; balakumar adithya(TSIP TEUR) <Adithya.Balakumar@toshiba-tsip.com>; Kiszka, Jan <jan.kiszka@siemens.com> > Cc: kunijadar shivanand(TSIP TMIEC ODG Porting) <Shivanand.Kunijadar@toshiba-tsip.com>; quirin.gylstorff@siemens.com; dinesh kumar(TSIP TMIEC ODG Porting) <dinesh.kumar@toshiba-tsip.com>; ashrith sai(TSIP) <Sai.Sathujoda@toshiba-tsip.com>; hayashi kazuhiro(林 和宏 DME ○DIG□MPS○MP4) <kazuhiro3.hayashi@toshiba.co.jp> > Subject: Re: [isar-cip-core][PATCH v3 2/3] swupdate.bbclass: Generate swu for delta updates > > On Mon, 2024-04-15 at 16:16 +0530, Adithya Balakumar wrote: >> This allows the creation of a swu file for delta update. >> >> Signed-off-by: Adithya Balakumar <Adithya.Balakumar@toshiba-tsip.com> >> --- >> classes/swupdate.bbclass | 32 ++++++++++++++- >> .../images/swu/sw-description-delta.tmpl | 39 >> +++++++++++++++++++ >> 2 files changed, 70 insertions(+), 1 deletion(-) >> create mode 100644 recipes-core/images/swu/sw-description-delta.tmpl >> >> diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass index >> 1a7cd4d..76c7aa5 100644 >> --- a/classes/swupdate.bbclass >> +++ b/classes/swupdate.bbclass >> @@ -26,6 +26,9 @@ SWU_EBG_UPDATE ?= "" >> SWU_EFI_BOOT_DEVICE ?= "/dev/disk/by-uuid/4321-DCBA" >> SWU_BOOTLOADER ??= "ebg" >> SWU_DESCRIPITION_FILE_BOOTLOADER ??= "${SWU_DESCRIPTION_FILE}- >> ${SWU_BOOTLOADER}" >> +SWU_DESCRIPITION_FILE_DELTA_UPDATE ??= "${SWU_DESCRIPTION_FILE}- >> delta" > > Hi, I'm still wondering if we really need a dedicated sw-description file for that. Can't we just mix in the SWU_DELTA_UPDATE_PROPERTIES into the normal sw-description? Maybe Quirin can help with the integration using the new infrastructure. > > Felix > > [Adithya Balakumar] > Hi Felix, > In a case where I have to generate a delta swu and a complete swu, I would need a sw-description file for each. Hence the approach that I have taken here. Please correct me if my understanding is wrong. > > My thought was to have delta update swu as an optional / additional artifact apart from the complete update swu. > In a case where a reference artifact is not provided (atleast in the case of rdiff), a delta artifact will not be created. But we could still create a complete update swu anyway. > First the question no one answered: Do we need/want to provide both the full update and the delta update and why? - My thoughts for **not** providing a seperate delta.swu: Downstream can select during build if the want delta update or not. One swu is less confusing as we need to a suffix/prefix to the full or delta update. - My thoughts for providing a seperate delta.swu: We can easily support the usecase for version jump updates. e.g. 1.0 -> 2.5 If we don't need both update files: We replace the properties section with a template variable and generate similar to the ebg use case. If we require both delta and full update we additionally need to copy the original sw-description and do some regex magic on the delta update variant before replacing the template variables - this was done in a previous iteration of the patch series. Quirin > Would like to understand if you are thinking of a different approach ? > > Adithya > >> +SWU_DELTA_UPDATE_ARTIFACT = >> "${SWU_ROOTFS_NAME}.delta_update${@get_swu_compression_type(d)}" >> +SWU_DELTA_UPDATE_ARTIFACT_TYPE = >> "delta_update${@get_swu_compression_type(d)}" >> >> SWU_IMAGE_FILE ?= "${IMAGE_FULLNAME}" >> SWU_DESCRIPTION_FILE ?= "sw-description" >> @@ -37,6 +40,7 @@ SWU_SIGNATURE_TYPE ?= "cms" >> SWU_BUILDCHROOT_IMAGE_FILE ?= >> "${@os.path.basename(d.getVar('SWU_IMAGE_FILE'))}" >> >> IMAGE_TYPEDEP:swu = >> "${SWU_ROOTFS_TYPE}${@get_swu_compression_type(d)}" >> +IMAGE_TYPEDEP:swu += "${@ '${SWU_DELTA_UPDATE_ARTIFACT_TYPE}' if >> d.getVar('DELTA_UPDATE_TYPE') else ''}" >> IMAGER_BUILD_DEPS:swu += "${@'swupdate-certificates-key' if >> bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" >> IMAGER_INSTALL:swu += "cpio ${@'openssl swupdate-certificates-key' >> if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" >> IMAGE_INSTALL += "${@'swupdate-certificates' if >> bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" >> @@ -44,8 +48,10 @@ IMAGE_INSTALL += "${@'swupdate-certificates' if >> bb.utils.to_boolean(d.getVar('SW >> >> IMAGE_SRC_URI:swu = "file://${SWU_DESCRIPTION_FILE}.tmpl" >> IMAGE_SRC_URI:swu += >> "file://${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" >> +IMAGE_SRC_URI:delta_update += >> "file://${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" >> IMAGE_TEMPLATE_FILES:swu = "${SWU_DESCRIPTION_FILE}.tmpl" >> IMAGE_TEMPLATE_FILES:swu += >> "${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" >> +IMAGE_TEMPLATE_FILES:delta_update += >> "${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" >> IMAGE_TEMPLATE_VARS:swu = " \ >> SWU_ROOTFS_PARTITION_NAME \ >> TARGET_IMAGE_UUID \ >> @@ -58,6 +64,8 @@ IMAGE_TEMPLATE_VARS:swu = " \ >> SWU_FILE_NODES \ >> SWU_BOOTLOADER_FILE_NODE \ >> SWU_SCRIPTS_NODE \ >> + SWU_DELTA_UPDATE_ARTIFACT \ >> + SWU_DELTA_UPDATE_PROPERTIES \ >> " >> >> # TARGET_IMAGE_UUID needs to be generated before completing the >> template @@ -148,6 +156,22 @@ python add_scripts_node() { >> d.appendVar('SWU_SCRIPTS_NODE', swu_scripts_node) >> } >> >> +SWU_EXTEND_SW_DESCRIPTION += "add_swu_delta_update_properties" >> +python add_swu_delta_update_properties() { >> + delta_type = d.getVar('DELTA_UPDATE_TYPE') >> + swu_delta_update_properties = "" >> + if delta_type == "rdiff": >> + swu_delta_update_properties = 'chainhandler = >> "rdiff_image";' >> + elif delta_type == "zchunk": >> + zck_url = d.getVar('DELTA_ZCK_URL') >> + swu_delta_update_properties = f""" >> + chainhandler = "delta"; >> + url = "{zck_url}"; >> + zckloglevel = "error"; >> + """ >> + d.setVar('SWU_DELTA_UPDATE_PROPERTIES', >> swu_delta_update_properties) >> +} >> + >> # convert between swupdate compressor name and imagetype extension >> def get_swu_compression_type(d): >> swu_ct = d.getVar('SWU_COMPRESSION_TYPE') @@ -166,14 +190,20 @@ >> FILESEXTRAPATHS:append = ":${LAYERDIR_cip- >> core}/recipes-core/images/swu" >> >> do_image_swu[depends] += "${PN}:do_transform_template" >> do_image_swu[stamp-extra-info] = "${DISTRO}-${MACHINE}" >> -do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- >> ${SWU_BOOTLOADER}" >> +do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu- >> ${SWU_BOOTLOADER} ${WORKDIR}/swu-delta" >> do_image_swu[prefuncs] = "do_extend_sw_description" >> IMAGE_CMD:swu() { >> rm -f '${DEPLOY_DIR_IMAGE}/${SWU_IMAGE_FILE}'*.swu >> + if [ -z "${DELTA_UPDATE_TYPE}" ]; then >> + rm -rf ${WORKDIR}/swu-delta >> + fi >> cp '${WORKDIR}/${SWU_DESCRIPTION_FILE}' >> '${WORKDIR}/swu/${SWU_DESCRIPTION_FILE}' >> if [ -f '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' ]; then >> cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' >> '${WORKDIR}/swu-${SWU_BOOTLOADER}/${SWU_DESCRIPTION_FILE}' >> fi >> + if [ -n "${DELTA_UPDATE_TYPE}" ]; then >> + cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_DELTA_UPDATE}' >> '${WORKDIR}/swu-delta/${SWU_DESCRIPTION_FILE}' >> + fi >> >> for swu_file in "${WORKDIR}"/swu*; do >> swu_file_base=$(basename $swu_file) diff --git >> a/recipes-core/images/swu/sw-description-delta.tmpl >> b/recipes-core/images/swu/sw-description-delta.tmpl >> new file mode 100644 >> index 0000000..7f7d623 >> --- /dev/null >> +++ b/recipes-core/images/swu/sw-description-delta.tmpl >> @@ -0,0 +1,39 @@ >> +# >> +# CIP Core, generic profile >> +# >> +# Copyright (c) Siemens AG, 2020 >> +# >> +# Authors: >> +# Quirin Gylstorff <quirin.gylstorff@siemens.com> # # >> +SPDX-License-Identifier: MIT # software = { >> + version = "${SWU_VERSION}"; >> + name = "${SWU_NAME}"; >> + ${SWU_HW_COMPAT_NODE} >> + images: ({ >> + filename = "${SWU_DELTA_UPDATE_ARTIFACT}"; >> + device = "C:BOOT0:linux.efi- >>> ${ABROOTFS_PART_UUID_A},C:BOOT1:linux.efi->${ABROOTFS_PART_UUID_B}"; >> + type = "roundrobin"; >> + ${SWU_COMPRESSION_NODE} >> + properties: { >> + subtype = "image"; >> + configfilecheck = >> "/etc/os-release@not_match@IMAGE_UUID=${TARGET_IMAGE_UUID}"; >> + ${SWU_DELTA_UPDATE_PROPERTIES} >> + }; >> + sha256 = "${SWU_DELTA_UPDATE_ARTIFACT}-sha256"; >> + }); >> + files: ({ >> + filename = "linux.efi"; >> + path = "linux.efi"; >> + type = "roundrobin"; >> + device = "C:BOOT0:linux.efi->BOOT0,C:BOOT1:linux.efi- >>> BOOT1"; >> + filesystem = "vfat"; >> + properties: { >> + subtype = "kernel"; >> + }; >> + sha256 = "linux.efi-sha256"; >> + }${SWU_FILE_NODES}); >> +} > > -- > Siemens AG, Technology > Linux Expert Center > >
> > > > Hi, I'm still wondering if we really need a dedicated sw- > > description file for that. Can't we just mix in the > > SWU_DELTA_UPDATE_PROPERTIES into the normal sw-description? Maybe > > Quirin can help with the integration using the new infrastructure. > > > > Felix > > > > [Adithya Balakumar] > > Hi Felix, > > In a case where I have to generate a delta swu and a complete swu, > > I would need a sw-description file for each. Hence the approach > > that I have taken here. Please correct me if my understanding is > > wrong. > > > > My thought was to have delta update swu as an optional / additional > > artifact apart from the complete update swu. > > In a case where a reference artifact is not provided (atleast in > > the case of rdiff), a delta artifact will not be created. But we > > could still create a complete update swu anyway. > > > > First the question no one answered: > Do we need/want to provide both the full update and the delta update > and > why? I don't think we need to generate both .swu at the same time. However, the user still shall be able to generate a full swu if requested. This logic is already available via the overrides. > > - My thoughts for **not** providing a seperate delta.swu: > Downstream can select during build if the want delta update or > not. Yes! > One swu is less confusing as we need to a suffix/prefix to the > full or > delta update. Yes! > > > - My thoughts for providing a seperate delta.swu: > We can easily support the usecase for version jump updates. > e.g. 1.0 -> 2.5 IMHO, this is an independent topic, as the delta .swu is generated from the image (rootfs) provided in build/previous-image. > > If we don't need both update files: > We replace the properties section with a template variable and > generate > similar to the ebg use case. That was my idea as well. Felix > > If we require both delta and full update we additionally need to copy > the original sw-description and do some regex magic on the delta > update > variant before replacing the template variables - this was done in a > previous iteration of the patch series. > > Quirin > > > Would like to understand if you are thinking of a different > > approach ? > > > > Adithya > > > >
diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass index 1a7cd4d..76c7aa5 100644 --- a/classes/swupdate.bbclass +++ b/classes/swupdate.bbclass @@ -26,6 +26,9 @@ SWU_EBG_UPDATE ?= "" SWU_EFI_BOOT_DEVICE ?= "/dev/disk/by-uuid/4321-DCBA" SWU_BOOTLOADER ??= "ebg" SWU_DESCRIPITION_FILE_BOOTLOADER ??= "${SWU_DESCRIPTION_FILE}-${SWU_BOOTLOADER}" +SWU_DESCRIPITION_FILE_DELTA_UPDATE ??= "${SWU_DESCRIPTION_FILE}-delta" +SWU_DELTA_UPDATE_ARTIFACT = "${SWU_ROOTFS_NAME}.delta_update${@get_swu_compression_type(d)}" +SWU_DELTA_UPDATE_ARTIFACT_TYPE = "delta_update${@get_swu_compression_type(d)}" SWU_IMAGE_FILE ?= "${IMAGE_FULLNAME}" SWU_DESCRIPTION_FILE ?= "sw-description" @@ -37,6 +40,7 @@ SWU_SIGNATURE_TYPE ?= "cms" SWU_BUILDCHROOT_IMAGE_FILE ?= "${@os.path.basename(d.getVar('SWU_IMAGE_FILE'))}" IMAGE_TYPEDEP:swu = "${SWU_ROOTFS_TYPE}${@get_swu_compression_type(d)}" +IMAGE_TYPEDEP:swu += "${@ '${SWU_DELTA_UPDATE_ARTIFACT_TYPE}' if d.getVar('DELTA_UPDATE_TYPE') else ''}" IMAGER_BUILD_DEPS:swu += "${@'swupdate-certificates-key' if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" IMAGER_INSTALL:swu += "cpio ${@'openssl swupdate-certificates-key' if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" IMAGE_INSTALL += "${@'swupdate-certificates' if bb.utils.to_boolean(d.getVar('SWU_SIGNED')) else ''}" @@ -44,8 +48,10 @@ IMAGE_INSTALL += "${@'swupdate-certificates' if bb.utils.to_boolean(d.getVar('SW IMAGE_SRC_URI:swu = "file://${SWU_DESCRIPTION_FILE}.tmpl" IMAGE_SRC_URI:swu += "file://${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" +IMAGE_SRC_URI:delta_update += "file://${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" IMAGE_TEMPLATE_FILES:swu = "${SWU_DESCRIPTION_FILE}.tmpl" IMAGE_TEMPLATE_FILES:swu += "${SWU_DESCRIPITION_FILE_BOOTLOADER}.tmpl" +IMAGE_TEMPLATE_FILES:delta_update += "${SWU_DESCRIPITION_FILE_DELTA_UPDATE}.tmpl" IMAGE_TEMPLATE_VARS:swu = " \ SWU_ROOTFS_PARTITION_NAME \ TARGET_IMAGE_UUID \ @@ -58,6 +64,8 @@ IMAGE_TEMPLATE_VARS:swu = " \ SWU_FILE_NODES \ SWU_BOOTLOADER_FILE_NODE \ SWU_SCRIPTS_NODE \ + SWU_DELTA_UPDATE_ARTIFACT \ + SWU_DELTA_UPDATE_PROPERTIES \ " # TARGET_IMAGE_UUID needs to be generated before completing the template @@ -148,6 +156,22 @@ python add_scripts_node() { d.appendVar('SWU_SCRIPTS_NODE', swu_scripts_node) } +SWU_EXTEND_SW_DESCRIPTION += "add_swu_delta_update_properties" +python add_swu_delta_update_properties() { + delta_type = d.getVar('DELTA_UPDATE_TYPE') + swu_delta_update_properties = "" + if delta_type == "rdiff": + swu_delta_update_properties = 'chainhandler = "rdiff_image";' + elif delta_type == "zchunk": + zck_url = d.getVar('DELTA_ZCK_URL') + swu_delta_update_properties = f""" + chainhandler = "delta"; + url = "{zck_url}"; + zckloglevel = "error"; + """ + d.setVar('SWU_DELTA_UPDATE_PROPERTIES', swu_delta_update_properties) +} + # convert between swupdate compressor name and imagetype extension def get_swu_compression_type(d): swu_ct = d.getVar('SWU_COMPRESSION_TYPE') @@ -166,14 +190,20 @@ FILESEXTRAPATHS:append = ":${LAYERDIR_cip-core}/recipes-core/images/swu" do_image_swu[depends] += "${PN}:do_transform_template" do_image_swu[stamp-extra-info] = "${DISTRO}-${MACHINE}" -do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu-${SWU_BOOTLOADER}" +do_image_swu[cleandirs] += "${WORKDIR}/swu ${WORKDIR}/swu-${SWU_BOOTLOADER} ${WORKDIR}/swu-delta" do_image_swu[prefuncs] = "do_extend_sw_description" IMAGE_CMD:swu() { rm -f '${DEPLOY_DIR_IMAGE}/${SWU_IMAGE_FILE}'*.swu + if [ -z "${DELTA_UPDATE_TYPE}" ]; then + rm -rf ${WORKDIR}/swu-delta + fi cp '${WORKDIR}/${SWU_DESCRIPTION_FILE}' '${WORKDIR}/swu/${SWU_DESCRIPTION_FILE}' if [ -f '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' ]; then cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_BOOTLOADER}' '${WORKDIR}/swu-${SWU_BOOTLOADER}/${SWU_DESCRIPTION_FILE}' fi + if [ -n "${DELTA_UPDATE_TYPE}" ]; then + cp '${WORKDIR}/${SWU_DESCRIPITION_FILE_DELTA_UPDATE}' '${WORKDIR}/swu-delta/${SWU_DESCRIPTION_FILE}' + fi for swu_file in "${WORKDIR}"/swu*; do swu_file_base=$(basename $swu_file) diff --git a/recipes-core/images/swu/sw-description-delta.tmpl b/recipes-core/images/swu/sw-description-delta.tmpl new file mode 100644 index 0000000..7f7d623 --- /dev/null +++ b/recipes-core/images/swu/sw-description-delta.tmpl @@ -0,0 +1,39 @@ +# +# CIP Core, generic profile +# +# Copyright (c) Siemens AG, 2020 +# +# Authors: +# Quirin Gylstorff <quirin.gylstorff@siemens.com> +# +# SPDX-License-Identifier: MIT +# +software = +{ + version = "${SWU_VERSION}"; + name = "${SWU_NAME}"; + ${SWU_HW_COMPAT_NODE} + images: ({ + filename = "${SWU_DELTA_UPDATE_ARTIFACT}"; + device = "C:BOOT0:linux.efi->${ABROOTFS_PART_UUID_A},C:BOOT1:linux.efi->${ABROOTFS_PART_UUID_B}"; + type = "roundrobin"; + ${SWU_COMPRESSION_NODE} + properties: { + subtype = "image"; + configfilecheck = "/etc/os-release@not_match@IMAGE_UUID=${TARGET_IMAGE_UUID}"; + ${SWU_DELTA_UPDATE_PROPERTIES} + }; + sha256 = "${SWU_DELTA_UPDATE_ARTIFACT}-sha256"; + }); + files: ({ + filename = "linux.efi"; + path = "linux.efi"; + type = "roundrobin"; + device = "C:BOOT0:linux.efi->BOOT0,C:BOOT1:linux.efi->BOOT1"; + filesystem = "vfat"; + properties: { + subtype = "kernel"; + }; + sha256 = "linux.efi-sha256"; + }${SWU_FILE_NODES}); +}
This allows the creation of a swu file for delta update. Signed-off-by: Adithya Balakumar <Adithya.Balakumar@toshiba-tsip.com> --- classes/swupdate.bbclass | 32 ++++++++++++++- .../images/swu/sw-description-delta.tmpl | 39 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 recipes-core/images/swu/sw-description-delta.tmpl