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 <sgreber@lilafast.org>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Steffen Greber
2025-10-27 22:42:56 +01:00
committed by Richard Purdie
parent 050942f1cf
commit e8f38f022e
3 changed files with 64 additions and 7 deletions

View File

@@ -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)

View File

@@ -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)