summaryrefslogtreecommitdiffstats
path: root/scripts/lib
diff options
context:
space:
mode:
authorLee Chee Yang <chee.yang.lee@intel.com>2021-01-01 14:18:28 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-01-09 09:17:17 +0000
commitf00be81c5b85900745a3bd67ad2e212e24613aff (patch)
tree92455737a1e8296221bfbdbf5771cf477d569a7c /scripts/lib
parentb1007a891f0457d6c9917efabf1c62afec93c23f (diff)
downloadpoky-f00be81c5b85900745a3bd67ad2e212e24613aff.tar.gz
wic/direct/kparser: ensure fsuuid for vfat and msdos align with format
vfat/msdos filesystem should have fsuuid in format 0xYYYYYYYY where "0x" in front follow with 8 hexadecimal number in uppercase. In wic, when using custom fsuuid for vfat/msdos partition in wks, it is able to set the value in any length, with or without leading "0x". This can cause fsuuid missaligned when fstab updates, fstab expect exactly 10 character fsuuid for vfat/msdos partition and all in uppercase. if custom fsuuid for vfat/msdos is set, check the length and format, error if it exceed the format size. Amend it so it is align with format 0xYYYYYYYY. This is done before image create and fstab update to ensure the fsuuid are same in all followup process. if custom fsuuid length less than expected, fill in "0". [YOCTO #14161] (From OE-Core rev: 974e09f3460a27c85a599d8269e3dea66df5ddd2) Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit d9686ae511ef10a504becfd81bfe296b788e1456) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib')
-rw-r--r--scripts/lib/wic/ksparser.py17
-rw-r--r--scripts/lib/wic/plugins/imager/direct.py7
2 files changed, 24 insertions, 0 deletions
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py
index 76cc55b848..127ca79ade 100644
--- a/scripts/lib/wic/ksparser.py
+++ b/scripts/lib/wic/ksparser.py
@@ -228,6 +228,23 @@ class KickStart():
228 err = "%s:%d: SquashFS does not support LABEL" \ 228 err = "%s:%d: SquashFS does not support LABEL" \
229 % (confpath, lineno) 229 % (confpath, lineno)
230 raise KickStartError(err) 230 raise KickStartError(err)
231 if parsed.fstype == 'msdos' or parsed.fstype == 'vfat':
232 if parsed.fsuuid:
233 if parsed.fsuuid.upper().startswith('0X'):
234 if len(parsed.fsuuid) > 10:
235 err = "%s:%d: fsuuid %s given in wks kickstart file " \
236 "exceeds the length limit for %s filesystem. " \
237 "It should be in the form of a 32 bit hexadecimal" \
238 "number (for example, 0xABCD1234)." \
239 % (confpath, lineno, parsed.fsuuid, parsed.fstype)
240 raise KickStartError(err)
241 elif len(parsed.fsuuid) > 8:
242 err = "%s:%d: fsuuid %s given in wks kickstart file " \
243 "exceeds the length limit for %s filesystem. " \
244 "It should be in the form of a 32 bit hexadecimal" \
245 "number (for example, 0xABCD1234)." \
246 % (confpath, lineno, parsed.fsuuid, parsed.fstype)
247 raise KickStartError(err)
231 if parsed.use_label and not parsed.label: 248 if parsed.use_label and not parsed.label:
232 err = "%s:%d: Must set the label with --label" \ 249 err = "%s:%d: Must set the label with --label" \
233 % (confpath, lineno) 250 % (confpath, lineno)
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
index 55db826e93..0ca67b77d5 100644
--- a/scripts/lib/wic/plugins/imager/direct.py
+++ b/scripts/lib/wic/plugins/imager/direct.py
@@ -343,6 +343,13 @@ class PartitionedImage():
343 part.fsuuid = '0x' + str(uuid.uuid4())[:8].upper() 343 part.fsuuid = '0x' + str(uuid.uuid4())[:8].upper()
344 else: 344 else:
345 part.fsuuid = str(uuid.uuid4()) 345 part.fsuuid = str(uuid.uuid4())
346 else:
347 #make sure the fsuuid for vfat/msdos align with format 0xYYYYYYYY
348 if part.fstype == 'vfat' or part.fstype == 'msdos':
349 if part.fsuuid.upper().startswith("0X"):
350 part.fsuuid = '0x' + part.fsuuid.upper()[2:].rjust(8,"0")
351 else:
352 part.fsuuid = '0x' + part.fsuuid.upper().rjust(8,"0")
346 353
347 def prepare(self, imager): 354 def prepare(self, imager):
348 """Prepare an image. Call prepare method of all image partitions.""" 355 """Prepare an image. Call prepare method of all image partitions."""