1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-02 13:29:49 +00:00

wic: generate PARTUUID for MDOS partitions

Added generation of partition UUIDs for MSDOS partitions.
UUID for MSDOS partitions is <disk identifier>-<partition number>,
where disk identifier is a random 4 bytes long number. It's usually
generated when MBR/partition table is initialized.

As UUID is used to point to the root partition in bootloader config
we need to generate it before the MBR is initialized.
After MBR is created we need to rewrite system identifier to match
it with what is used in bootloader config. This will be implemented
in the next commit.

(From OE-Core rev: 6ecc6addf4080eda75a15af077816c81c6bf70a5)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh
2016-10-06 13:33:36 +03:00
committed by Richard Purdie
parent e8ce5083c5
commit 5763d8f9cd
2 changed files with 13 additions and 4 deletions
+13 -1
View File
@@ -26,6 +26,7 @@
import os import os
import shutil import shutil
import uuid
from wic import msger from wic import msger
from wic.utils.oe.misc import get_bitbake_var from wic.utils.oe.misc import get_bitbake_var
@@ -242,12 +243,23 @@ class DirectImageCreator(BaseImageCreator):
self.__image = Image(self.native_sysroot) self.__image = Image(self.native_sysroot)
for part in parts: disk_ids = {}
for num, part in enumerate(parts, 1):
# as a convenience, set source to the boot partition source # as a convenience, set source to the boot partition source
# instead of forcing it to be set via bootloader --source # instead of forcing it to be set via bootloader --source
if not self.ks.bootloader.source and part.mountpoint == "/boot": if not self.ks.bootloader.source and part.mountpoint == "/boot":
self.ks.bootloader.source = part.source self.ks.bootloader.source = part.source
# generate parition UUIDs
if not part.uuid and part.use_uuid:
if self.ptable_format == 'gpt':
part.uuid = str(uuid.uuid4())
else: # msdos partition table
if part.disk not in disk_ids:
disk_ids[part.disk] = int.from_bytes(os.urandom(4), 'little')
disk_id = disk_ids[part.disk]
part.uuid = '%0x-%02d' % (disk_id, self.__get_part_num(num, parts))
fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR"))
shutil.rmtree(self.workdir) shutil.rmtree(self.workdir)
-3
View File
@@ -26,7 +26,6 @@
import os import os
import tempfile import tempfile
import uuid
from wic.utils.oe.misc import msger, parse_sourceparams from wic.utils.oe.misc import msger, parse_sourceparams
from wic.utils.oe.misc import exec_cmd, exec_native_cmd from wic.utils.oe.misc import exec_cmd, exec_native_cmd
@@ -60,8 +59,6 @@ class Partition():
self.system_id = args.system_id self.system_id = args.system_id
self.use_uuid = args.use_uuid self.use_uuid = args.use_uuid
self.uuid = args.uuid self.uuid = args.uuid
if args.use_uuid and not self.uuid:
self.uuid = str(uuid.uuid4())
self.lineno = lineno self.lineno = lineno
self.source_file = "" self.source_file = ""