diff options
author | Ed Bartosh <ed.bartosh@linux.intel.com> | 2016-10-06 13:33:36 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-10-07 16:43:58 +0100 |
commit | 5763d8f9cddc593cbcfba78a06071cfd01b3b244 (patch) | |
tree | 1f3ca5651b4ed26f7c7e48cf730aa88db699455d /scripts | |
parent | e8ce5083c54e3cece55702c4433601bdcbf9ccc3 (diff) | |
download | poky-5763d8f9cddc593cbcfba78a06071cfd01b3b244.tar.gz |
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>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/wic/imager/direct.py | 14 | ||||
-rw-r--r-- | scripts/lib/wic/partition.py | 3 |
2 files changed, 13 insertions, 4 deletions
diff --git a/scripts/lib/wic/imager/direct.py b/scripts/lib/wic/imager/direct.py index ffde232c2b..123a07817b 100644 --- a/scripts/lib/wic/imager/direct.py +++ b/scripts/lib/wic/imager/direct.py | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | import os | 27 | import os |
28 | import shutil | 28 | import shutil |
29 | import uuid | ||
29 | 30 | ||
30 | from wic import msger | 31 | from wic import msger |
31 | from wic.utils.oe.misc import get_bitbake_var | 32 | from wic.utils.oe.misc import get_bitbake_var |
@@ -242,12 +243,23 @@ class DirectImageCreator(BaseImageCreator): | |||
242 | 243 | ||
243 | self.__image = Image(self.native_sysroot) | 244 | self.__image = Image(self.native_sysroot) |
244 | 245 | ||
245 | for part in parts: | 246 | disk_ids = {} |
247 | for num, part in enumerate(parts, 1): | ||
246 | # as a convenience, set source to the boot partition source | 248 | # as a convenience, set source to the boot partition source |
247 | # instead of forcing it to be set via bootloader --source | 249 | # instead of forcing it to be set via bootloader --source |
248 | if not self.ks.bootloader.source and part.mountpoint == "/boot": | 250 | if not self.ks.bootloader.source and part.mountpoint == "/boot": |
249 | self.ks.bootloader.source = part.source | 251 | self.ks.bootloader.source = part.source |
250 | 252 | ||
253 | # generate parition UUIDs | ||
254 | if not part.uuid and part.use_uuid: | ||
255 | if self.ptable_format == 'gpt': | ||
256 | part.uuid = str(uuid.uuid4()) | ||
257 | else: # msdos partition table | ||
258 | if part.disk not in disk_ids: | ||
259 | disk_ids[part.disk] = int.from_bytes(os.urandom(4), 'little') | ||
260 | disk_id = disk_ids[part.disk] | ||
261 | part.uuid = '%0x-%02d' % (disk_id, self.__get_part_num(num, parts)) | ||
262 | |||
251 | fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) | 263 | fstab_path = self._write_fstab(self.rootfs_dir.get("ROOTFS_DIR")) |
252 | 264 | ||
253 | shutil.rmtree(self.workdir) | 265 | shutil.rmtree(self.workdir) |
diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py index 30cd320a30..90f65a1e39 100644 --- a/scripts/lib/wic/partition.py +++ b/scripts/lib/wic/partition.py | |||
@@ -26,7 +26,6 @@ | |||
26 | 26 | ||
27 | import os | 27 | import os |
28 | import tempfile | 28 | import tempfile |
29 | import uuid | ||
30 | 29 | ||
31 | from wic.utils.oe.misc import msger, parse_sourceparams | 30 | from wic.utils.oe.misc import msger, parse_sourceparams |
32 | from wic.utils.oe.misc import exec_cmd, exec_native_cmd | 31 | from wic.utils.oe.misc import exec_cmd, exec_native_cmd |
@@ -60,8 +59,6 @@ class Partition(): | |||
60 | self.system_id = args.system_id | 59 | self.system_id = args.system_id |
61 | self.use_uuid = args.use_uuid | 60 | self.use_uuid = args.use_uuid |
62 | self.uuid = args.uuid | 61 | self.uuid = args.uuid |
63 | if args.use_uuid and not self.uuid: | ||
64 | self.uuid = str(uuid.uuid4()) | ||
65 | 62 | ||
66 | self.lineno = lineno | 63 | self.lineno = lineno |
67 | self.source_file = "" | 64 | self.source_file = "" |