diff mbox series

[isar-cip-core] classes/image_uuid: Generate new uuid if a new package is added

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

Commit Message

Gylstorff Quirin Sept. 18, 2020, 8:04 a.m. UTC
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(-)

Comments

Jan Kiszka Sept. 18, 2020, 12:21 p.m. UTC | #1
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
Gylstorff Quirin Nov. 25, 2020, 9:02 a.m. UTC | #2
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 mbox series

Patch

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