From e8f38f022e8e30275f76c3692453f1a0b1b90f9b Mon Sep 17 00:00:00 2001 From: Steffen Greber Date: Mon, 27 Oct 2025 22:42:56 +0100 Subject: wic: add wic tests and support setting GPT diskid Also extend implementation to allow defining the diskid for GPT partitions. Add unit tests for wic.py to cover new setting. (From OE-Core rev: 0d5da9477703212d3cfb63828c5c38afdb162e43) Signed-off-by: Steffen Greber Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- scripts/lib/wic/ksparser.py | 21 ++++++++++++++++++++- scripts/lib/wic/plugins/imager/direct.py | 14 ++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) (limited to 'scripts/lib') diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py index 48b5b09ddd..4ccd70dc55 100644 --- a/scripts/lib/wic/ksparser.py +++ b/scripts/lib/wic/ksparser.py @@ -16,6 +16,7 @@ import os import shlex import logging import re +import uuid from argparse import ArgumentParser, ArgumentError, ArgumentTypeError @@ -196,7 +197,7 @@ class KickStart(): bootloader.add_argument('--configfile') bootloader.add_argument('--ptable', choices=('msdos', 'gpt', 'gpt-hybrid'), default='msdos') - bootloader.add_argument('--diskid', type=lambda x: int(x, 0)) + bootloader.add_argument('--diskid') bootloader.add_argument('--timeout', type=int) bootloader.add_argument('--source') @@ -297,6 +298,24 @@ class KickStart(): if append_var: self.bootloader.append = ' '.join(filter(None, \ (self.bootloader.append, append_var))) + if parsed.diskid: + if parsed.ptable == "msdos": + try: + self.bootloader.diskid = int(parsed.diskid, 0) + except ValueError: + err = "with --ptbale msdos only 32bit integers " \ + "are allowed for --diskid. %s could not " \ + "be parsed" % self.ptable + raise KickStartError(err) + else: + try: + self.bootloader.diskid = uuid.UUID(parsed.diskid) + except ValueError: + err = "with --ptable %s only valid uuids are " \ + "allowed for --diskid. %s could not be " \ + "parsed" % (parsed.ptable, parsed.diskid) + raise KickStartError(err) + else: err = "%s:%d: more than one bootloader specified" \ % (confpath, lineno) diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py index f40f033a3d..ad922cfbf1 100644 --- a/scripts/lib/wic/plugins/imager/direct.py +++ b/scripts/lib/wic/plugins/imager/direct.py @@ -315,7 +315,14 @@ class PartitionedImage(): # all partitions (in bytes) self.ptable_format = ptable_format # Partition table format # Disk system identifier - if disk_id: + if disk_id and ptable_format in ('gpt', 'gpt-hybrid'): + self.disk_guid = disk_id + elif os.getenv('SOURCE_DATE_EPOCH'): + self.disk_guid = uuid.UUID(int=int(os.getenv('SOURCE_DATE_EPOCH'))) + else: + self.disk_guid = uuid.uuid4() + + if disk_id and ptable_format == 'msdos': self.identifier = disk_id elif os.getenv('SOURCE_DATE_EPOCH'): self.identifier = random.Random(int(os.getenv('SOURCE_DATE_EPOCH'))).randint(1, 0xffffffff) @@ -545,11 +552,6 @@ class PartitionedImage(): def _write_disk_guid(self): if self.ptable_format in ('gpt', 'gpt-hybrid'): - if os.getenv('SOURCE_DATE_EPOCH'): - self.disk_guid = uuid.UUID(int=int(os.getenv('SOURCE_DATE_EPOCH'))) - else: - self.disk_guid = uuid.uuid4() - logger.debug("Set disk guid %s", self.disk_guid) sfdisk_cmd = "sfdisk --sector-size %s --disk-id %s %s" % \ (self.sector_size, self.path, self.disk_guid) -- cgit v1.2.3-54-g00ecf