[OE-core] [PATCH RFC 01/18] fs-uuid.bbclass: rewrite get_fs_uuid function

California Sullivan california.l.sullivan at intel.com
Tue Dec 19 22:58:14 UTC 2017


I couldn't find anywhere it was being used, and in trying to use it it
just spit out an error.

It now generates a random UUID and puts it in the deploy dir for
consumption.

Also use DISK_SIGNATURE_UUID for the replacement function, since that
is user-overridable.

Signed-off-by: California Sullivan <california.l.sullivan at intel.com>
---
 meta/classes/fs-uuid.bbclass | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/meta/classes/fs-uuid.bbclass b/meta/classes/fs-uuid.bbclass
index 9b53dfba7ab..5a96054294e 100644
--- a/meta/classes/fs-uuid.bbclass
+++ b/meta/classes/fs-uuid.bbclass
@@ -1,16 +1,26 @@
+inherit deploy
+
 # Extract UUID from ${ROOTFS}, which must have been built
 # by the time that this function gets called. Only works
 # on ext file systems and depends on tune2fs.
 def get_rootfs_uuid(d):
-    import subprocess
-    rootfs = d.getVar('ROOTFS')
-    output = subprocess.check_output(['tune2fs', '-l', rootfs])
-    for line in output.split('\n'):
-        if line.startswith('Filesystem UUID:'):
-            uuid = line.split()[-1]
-            bb.note('UUID of %s: %s' % (rootfs, uuid))
-            return uuid
-    bb.fatal('Could not determine filesystem UUID of %s' % rootfs)
+    import os
+    import uuid
+    deploydir = d.getVar('DEPLOY_DIR_IMAGE')
+    bootfs_uuid_file = deploydir + "/bootfs-uuid"
+    uuid_str = "deadbeef-dead-beef-dead-beefdeadbeef"
+    if d.getVar('BUILD_REPRODUCIBLE_BINARIES', True) != "1":
+        if os.path.exists(bootfs_uuid_file):
+            with open(bootfs_uuid_file, "r+") as file:
+                uuid_str = file.read()
+        else:
+            # deploydir might not exist yet...creating it here could be bad?
+            if not os.path.exists(deploydir):
+                os.makedirs(deploydir)
+            uuid_str = str(uuid.uuid4())
+            with open(bootfs_uuid_file, "w") as file:
+                file.write(uuid_str)
+    return uuid_str
 
 # Replace the special <<uuid-of-rootfs>> inside a string (like the
 # root= APPEND string in a syslinux.cfg or systemd-boot entry) with the
@@ -19,6 +29,8 @@ def get_rootfs_uuid(d):
 def replace_rootfs_uuid(d, string):
     UUID_PLACEHOLDER = '<<uuid-of-rootfs>>'
     if UUID_PLACEHOLDER in string:
-        uuid = get_rootfs_uuid(d)
+        uuid = d.getVar('DISK_SIGNATURE_UUID', True)
         string = string.replace(UUID_PLACEHOLDER, uuid)
     return string
+
+DISK_SIGNATURE_UUID ?= "${@get_rootfs_uuid(d)}"
-- 
2.14.3




More information about the Openembedded-core mailing list