Message ID | 20200918080435.24136-1-Quirin.Gylstorff@siemens.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [isar-cip-core] classes/image_uuid: Generate new uuid if a new package is added | expand |
On 18.09.20 10:04, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > BB_BASEHASH only includes the task itself and its metadata. > Dependencies are not taken into account when this hash is > generated which means updating a package will not generate a new > UUID. > > BB_TASKHASH takes the changes into account. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > classes/image_uuid.bbclass | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/classes/image_uuid.bbclass b/classes/image_uuid.bbclass > index d5337b8..873abc5 100644 > --- a/classes/image_uuid.bbclass > +++ b/classes/image_uuid.bbclass > @@ -9,23 +9,23 @@ > # SPDX-License-Identifier: MIT > # > > -def generate_image_uuid(d): > - import uuid > +IMAGE_UUID ?= "random" Why not using an undefined or empty IMAGE_UUID as "generate me one" indication? > > - base_hash = d.getVar("BB_BASEHASH_task-do_rootfs_install", True) > - if base_hash is None: > - return None > - return str(uuid.UUID(base_hash[:32], version=4)) > - > -IMAGE_UUID ?= "${@generate_image_uuid(d)}" > +IMAGE_UUID_NAMESPACE = "6090f47e-b068-475c-b125-7be7c24cdd4e" Is that namespace random, or does that have specific meaning? > > do_generate_image_uuid[vardeps] += "IMAGE_UUID" > do_generate_image_uuid[depends] = "buildchroot-target:do_build" > +IMAGER_INSTALL += "uuid-runtime" Please separate variable for job definitions be a blank line. Also the job specifications above should be visually separated from the code below that way. IOW: IMAGER_INSTALL += "uuid-runtime" do_generate_image_uuid[vardeps] += "IMAGE_UUID" do_generate_image_uuid[depends] = "buildchroot-target:do_build" do_generate_image_uuid() { > do_generate_image_uuid() { > + image_do_mounts > + if [ "${IMAGE_UUID}" != "random" ]; then > + IMAGE_UUID_FINAL="${IMAGE_UUID}" > + else > + IMAGE_UUID_FINAL="$(sudo -E chroot ${BUILDCHROOT_DIR} uuidgen -s -n "${IMAGE_UUID_NAMESPACE}" -N "${BB_TASKHASH}")" Why do we need to switch to uuidgen from the buildchroot, rather than using python's uuid? And what ensures that uuidgen is available there? > + fi > sudo sed -i '/^IMAGE_UUID=.*/d' '${IMAGE_ROOTFS}/etc/os-release' > - echo "IMAGE_UUID=\"${IMAGE_UUID}\"" | \ > + echo "IMAGE_UUID=\"${IMAGE_UUID_FINAL}\"" | \ > sudo tee -a '${IMAGE_ROOTFS}/etc/os-release' > - image_do_mounts > > # update initramfs to add uuid > sudo chroot '${IMAGE_ROOTFS}' update-initramfs -u > Jan
On 9/18/20 2:21 PM, Jan Kiszka wrote: > On 18.09.20 10:04, Q. Gylstorff wrote: >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> BB_BASEHASH only includes the task itself and its metadata. >> Dependencies are not taken into account when this hash is >> generated which means updating a package will not generate a new >> UUID. >> >> BB_TASKHASH takes the changes into account. >> >> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> --- >> classes/image_uuid.bbclass | 20 ++++++++++---------- >> 1 file changed, 10 insertions(+), 10 deletions(-) >> >> diff --git a/classes/image_uuid.bbclass b/classes/image_uuid.bbclass >> index d5337b8..873abc5 100644 >> --- a/classes/image_uuid.bbclass >> +++ b/classes/image_uuid.bbclass >> @@ -9,23 +9,23 @@ >> # SPDX-License-Identifier: MIT >> # >> -def generate_image_uuid(d): >> - import uuid >> +IMAGE_UUID ?= "random" > > Why not using an undefined or empty IMAGE_UUID as "generate me one" > indication? I will try to use the previous version after testing it has the same effect as this patch. > >> - base_hash = d.getVar("BB_BASEHASH_task-do_rootfs_install", True) >> - if base_hash is None: >> - return None >> - return str(uuid.UUID(base_hash[:32], version=4)) >> - >> -IMAGE_UUID ?= "${@generate_image_uuid(d)}" >> +IMAGE_UUID_NAMESPACE = "6090f47e-b068-475c-b125-7be7c24cdd4e" > > Is that namespace random, or does that have specific meaning? The namespace is random. > >> do_generate_image_uuid[vardeps] += "IMAGE_UUID" >> do_generate_image_uuid[depends] = "buildchroot-target:do_build" >> +IMAGER_INSTALL += "uuid-runtime" > > Please separate variable for job definitions be a blank line. Also the > job specifications above should be visually separated from the code > below that way. IOW: > > IMAGER_INSTALL += "uuid-runtime" > > do_generate_image_uuid[vardeps] += "IMAGE_UUID" > do_generate_image_uuid[depends] = "buildchroot-target:do_build" > > do_generate_image_uuid() { > Replace with a sipmler version in v2. >> do_generate_image_uuid() { >> + image_do_mounts >> + if [ "${IMAGE_UUID}" != "random" ]; then >> + IMAGE_UUID_FINAL="${IMAGE_UUID}" >> + else >> + IMAGE_UUID_FINAL="$(sudo -E chroot ${BUILDCHROOT_DIR} uuidgen >> -s -n "${IMAGE_UUID_NAMESPACE}" -N "${BB_TASKHASH}")" > > Why do we need to switch to uuidgen from the buildchroot, rather than > using python's uuid? > > And what ensures that uuidgen is available there? I switch back to python to avoid unnecassary package installations. See v2. > >> + fi >> sudo sed -i '/^IMAGE_UUID=.*/d' '${IMAGE_ROOTFS}/etc/os-release' >> - echo "IMAGE_UUID=\"${IMAGE_UUID}\"" | \ >> + echo "IMAGE_UUID=\"${IMAGE_UUID_FINAL}\"" | \ >> sudo tee -a '${IMAGE_ROOTFS}/etc/os-release' >> - image_do_mounts >> # update initramfs to add uuid >> sudo chroot '${IMAGE_ROOTFS}' update-initramfs -u >> > > Jan > Quirin -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#5877): https://lists.cip-project.org/g/cip-dev/message/5877 Mute This Topic: https://lists.cip-project.org/mt/76926695/4520388 Group Owner: cip-dev+owner@lists.cip-project.org Unsubscribe: https://lists.cip-project.org/g/cip-dev/leave/8129055/727948398/xyzzy [cip-dev@archiver.kernel.org] -=-=-=-=-=-=-=-=-=-=-=-
diff --git a/classes/image_uuid.bbclass b/classes/image_uuid.bbclass index d5337b8..873abc5 100644 --- a/classes/image_uuid.bbclass +++ b/classes/image_uuid.bbclass @@ -9,23 +9,23 @@ # SPDX-License-Identifier: MIT # -def generate_image_uuid(d): - import uuid +IMAGE_UUID ?= "random" - base_hash = d.getVar("BB_BASEHASH_task-do_rootfs_install", True) - if base_hash is None: - return None - return str(uuid.UUID(base_hash[:32], version=4)) - -IMAGE_UUID ?= "${@generate_image_uuid(d)}" +IMAGE_UUID_NAMESPACE = "6090f47e-b068-475c-b125-7be7c24cdd4e" do_generate_image_uuid[vardeps] += "IMAGE_UUID" do_generate_image_uuid[depends] = "buildchroot-target:do_build" +IMAGER_INSTALL += "uuid-runtime" do_generate_image_uuid() { + image_do_mounts + if [ "${IMAGE_UUID}" != "random" ]; then + IMAGE_UUID_FINAL="${IMAGE_UUID}" + else + IMAGE_UUID_FINAL="$(sudo -E chroot ${BUILDCHROOT_DIR} uuidgen -s -n "${IMAGE_UUID_NAMESPACE}" -N "${BB_TASKHASH}")" + fi sudo sed -i '/^IMAGE_UUID=.*/d' '${IMAGE_ROOTFS}/etc/os-release' - echo "IMAGE_UUID=\"${IMAGE_UUID}\"" | \ + echo "IMAGE_UUID=\"${IMAGE_UUID_FINAL}\"" | \ sudo tee -a '${IMAGE_ROOTFS}/etc/os-release' - image_do_mounts # update initramfs to add uuid sudo chroot '${IMAGE_ROOTFS}' update-initramfs -u