mirror of
https://git.yoctoproject.org/poky
synced 2026-09-13 09:49:32 +02:00
wic: Introduce --fsuuid and have --use-uuid make use of UUID too
First, allow for wic to be given a filesystem UUID to be used when creating a filesystem. When not provided, wic will generate the UUID to be used. Next, when --use-uuid is passed, we update the fstab to mount things via UUID (and if not found, then use PARTUUID) as UUID is more portable. (From OE-Core rev: 9256b8799495634ee8aee5d16ff71bd6e6e25ed4) Signed-off-by: Tom Rini <trini@konsulko.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -863,7 +863,10 @@ DESCRIPTION
|
|||||||
This is achieved by wic adding entries to the fstab during image
|
This is achieved by wic adding entries to the fstab during image
|
||||||
generation. In order for a valid fstab to be generated one of the
|
generation. In order for a valid fstab to be generated one of the
|
||||||
--ondrive, --ondisk or --use-uuid partition options must be used for
|
--ondrive, --ondisk or --use-uuid partition options must be used for
|
||||||
each partition that specifies a mountpoint.
|
each partition that specifies a mountpoint. Note that with --use-uuid
|
||||||
|
and non-root <mountpoint>, including swap, the mount program must
|
||||||
|
understand the PARTUUID syntax. This currently excludes the busybox
|
||||||
|
versions of these applications.
|
||||||
|
|
||||||
|
|
||||||
The following are supported 'part' options:
|
The following are supported 'part' options:
|
||||||
@@ -986,6 +989,11 @@ DESCRIPTION
|
|||||||
in bootloader configuration before running wic. In this case .wks file can
|
in bootloader configuration before running wic. In this case .wks file can
|
||||||
be generated or modified to set preconfigured parition UUID using this option.
|
be generated or modified to set preconfigured parition UUID using this option.
|
||||||
|
|
||||||
|
--fsuuid: This option is specific to wic. It specifies filesystem UUID.
|
||||||
|
It's useful if preconfigured filesystem UUID is added to kernel command line
|
||||||
|
in bootloader configuration before running wic. In this case .wks file can
|
||||||
|
be generated or modified to set preconfigured filesystem UUID using this option.
|
||||||
|
|
||||||
--system-id: This option is specific to wic. It specifies partition system id. It's useful
|
--system-id: This option is specific to wic. It specifies partition system id. It's useful
|
||||||
for the harware that requires non-default partition system ids. The parameter
|
for the harware that requires non-default partition system ids. The parameter
|
||||||
in one byte long hex number either with 0x prefix or without it.
|
in one byte long hex number either with 0x prefix or without it.
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ class KickStart():
|
|||||||
part.add_argument('--system-id', type=systemidtype)
|
part.add_argument('--system-id', type=systemidtype)
|
||||||
part.add_argument('--use-uuid', action='store_true')
|
part.add_argument('--use-uuid', action='store_true')
|
||||||
part.add_argument('--uuid')
|
part.add_argument('--uuid')
|
||||||
|
part.add_argument('--fsuuid')
|
||||||
|
|
||||||
bootloader = subparsers.add_parser('bootloader')
|
bootloader = subparsers.add_parser('bootloader')
|
||||||
bootloader.add_argument('--append')
|
bootloader.add_argument('--append')
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import uuid
|
||||||
|
|
||||||
from wic import WicError
|
from wic import WicError
|
||||||
from wic.misc import exec_cmd, exec_native_cmd, get_bitbake_var
|
from wic.misc import exec_cmd, exec_native_cmd, get_bitbake_var
|
||||||
@@ -61,6 +62,7 @@ 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
|
||||||
|
self.fsuuid = args.fsuuid
|
||||||
|
|
||||||
self.lineno = lineno
|
self.lineno = lineno
|
||||||
self.source_file = ""
|
self.source_file = ""
|
||||||
@@ -264,8 +266,8 @@ class Partition():
|
|||||||
if self.label:
|
if self.label:
|
||||||
label_str = "-L %s" % self.label
|
label_str = "-L %s" % self.label
|
||||||
|
|
||||||
mkfs_cmd = "mkfs.%s %s %s %s -d %s" % \
|
mkfs_cmd = "mkfs.%s %s %s %s -U %s -d %s" % \
|
||||||
(self.fstype, extraopts, rootfs, label_str, rootfs_dir)
|
(self.fstype, extraopts, rootfs, label_str, self.fsuuid, rootfs_dir)
|
||||||
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
|
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
|
||||||
|
|
||||||
mkfs_cmd = "fsck.%s -pvfD %s" % (self.fstype, rootfs)
|
mkfs_cmd = "fsck.%s -pvfD %s" % (self.fstype, rootfs)
|
||||||
@@ -289,9 +291,9 @@ class Partition():
|
|||||||
if self.label:
|
if self.label:
|
||||||
label_str = "-L %s" % self.label
|
label_str = "-L %s" % self.label
|
||||||
|
|
||||||
mkfs_cmd = "mkfs.%s -b %d -r %s %s %s %s" % \
|
mkfs_cmd = "mkfs.%s -b %d -r %s %s %s -U %s %s" % \
|
||||||
(self.fstype, rootfs_size * 1024, rootfs_dir, label_str,
|
(self.fstype, rootfs_size * 1024, rootfs_dir, label_str,
|
||||||
self.mkfs_extraopts, rootfs)
|
self.mkfs_extraopts, self.fsuuid, rootfs)
|
||||||
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
|
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
|
||||||
|
|
||||||
def prepare_rootfs_msdos(self, rootfs, oe_builddir, rootfs_dir,
|
def prepare_rootfs_msdos(self, rootfs, oe_builddir, rootfs_dir,
|
||||||
@@ -315,8 +317,9 @@ class Partition():
|
|||||||
|
|
||||||
extraopts = self.mkfs_extraopts or '-S 512'
|
extraopts = self.mkfs_extraopts or '-S 512'
|
||||||
|
|
||||||
dosfs_cmd = "mkdosfs %s %s %s -C %s %d" % \
|
dosfs_cmd = "mkdosfs %s -i %s %s %s -C %s %d" % \
|
||||||
(label_str, size_str, extraopts, rootfs, rootfs_size)
|
(label_str, self.fsuuid, size_str, extraopts, rootfs,
|
||||||
|
rootfs_size)
|
||||||
exec_native_cmd(dosfs_cmd, native_sysroot)
|
exec_native_cmd(dosfs_cmd, native_sysroot)
|
||||||
|
|
||||||
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (rootfs, rootfs_dir)
|
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (rootfs, rootfs_dir)
|
||||||
@@ -352,8 +355,8 @@ class Partition():
|
|||||||
if self.label:
|
if self.label:
|
||||||
label_str = "-L %s" % self.label
|
label_str = "-L %s" % self.label
|
||||||
|
|
||||||
mkfs_cmd = "mkfs.%s -F %s %s %s" % \
|
mkfs_cmd = "mkfs.%s -F %s %s -U %s %s" % \
|
||||||
(self.fstype, extraopts, label_str, rootfs)
|
(self.fstype, extraopts, label_str, self.fsuuid, rootfs)
|
||||||
exec_native_cmd(mkfs_cmd, native_sysroot)
|
exec_native_cmd(mkfs_cmd, native_sysroot)
|
||||||
|
|
||||||
def prepare_empty_partition_btrfs(self, rootfs, oe_builddir,
|
def prepare_empty_partition_btrfs(self, rootfs, oe_builddir,
|
||||||
@@ -369,8 +372,8 @@ class Partition():
|
|||||||
if self.label:
|
if self.label:
|
||||||
label_str = "-L %s" % self.label
|
label_str = "-L %s" % self.label
|
||||||
|
|
||||||
mkfs_cmd = "mkfs.%s -b %d %s %s %s" % \
|
mkfs_cmd = "mkfs.%s -b %d %s -U %s %s %s" % \
|
||||||
(self.fstype, self.size * 1024, label_str,
|
(self.fstype, self.size * 1024, label_str, self.fsuuid,
|
||||||
self.mkfs_extraopts, rootfs)
|
self.mkfs_extraopts, rootfs)
|
||||||
exec_native_cmd(mkfs_cmd, native_sysroot)
|
exec_native_cmd(mkfs_cmd, native_sysroot)
|
||||||
|
|
||||||
@@ -391,8 +394,9 @@ class Partition():
|
|||||||
|
|
||||||
extraopts = self.mkfs_extraopts or '-S 512'
|
extraopts = self.mkfs_extraopts or '-S 512'
|
||||||
|
|
||||||
dosfs_cmd = "mkdosfs %s %s %s -C %s %d" % \
|
dosfs_cmd = "mkdosfs %s -i %s %s %s -C %s %d" % \
|
||||||
(label_str, extraopts, size_str, rootfs, blocks)
|
(label_str, self.fsuuid, extraopts, size_str, rootfs,
|
||||||
|
blocks)
|
||||||
|
|
||||||
exec_native_cmd(dosfs_cmd, native_sysroot)
|
exec_native_cmd(dosfs_cmd, native_sysroot)
|
||||||
|
|
||||||
@@ -410,9 +414,9 @@ class Partition():
|
|||||||
with open(path, 'w') as sparse:
|
with open(path, 'w') as sparse:
|
||||||
os.ftruncate(sparse.fileno(), self.size * 1024)
|
os.ftruncate(sparse.fileno(), self.size * 1024)
|
||||||
|
|
||||||
import uuid
|
|
||||||
label_str = ""
|
label_str = ""
|
||||||
if self.label:
|
if self.label:
|
||||||
label_str = "-L %s" % self.label
|
label_str = "-L %s" % self.label
|
||||||
mkswap_cmd = "mkswap %s -U %s %s" % (label_str, str(uuid.uuid1()), path)
|
|
||||||
|
mkswap_cmd = "mkswap %s -U %s %s" % (label_str, self.fsuuid, path)
|
||||||
exec_native_cmd(mkswap_cmd, native_sysroot)
|
exec_native_cmd(mkswap_cmd, native_sysroot)
|
||||||
|
|||||||
@@ -141,7 +141,15 @@ class DirectPlugin(ImagerPlugin):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if part.use_uuid:
|
if part.use_uuid:
|
||||||
device_name = "PARTUUID=%s" % part.uuid
|
if part.fsuuid:
|
||||||
|
# FAT UUID is different from others
|
||||||
|
if len(part.fsuuid) == 10:
|
||||||
|
device_name = "UUID=%s-%s" % \
|
||||||
|
(part.fsuuid[2:6], part.fsuuid[6:])
|
||||||
|
else:
|
||||||
|
device_name = "UUID=%s" % part.fsuuid
|
||||||
|
else:
|
||||||
|
device_name = "PARTUUID=%s" % part.uuid
|
||||||
else:
|
else:
|
||||||
# mmc device partitions are named mmcblk0p1, mmcblk0p2..
|
# mmc device partitions are named mmcblk0p1, mmcblk0p2..
|
||||||
prefix = 'p' if part.disk.startswith('mmcblk') else ''
|
prefix = 'p' if part.disk.startswith('mmcblk') else ''
|
||||||
@@ -334,13 +342,18 @@ class PartitionedImage():
|
|||||||
continue
|
continue
|
||||||
part.realnum = realnum
|
part.realnum = realnum
|
||||||
|
|
||||||
# generate parition UUIDs
|
# generate parition and filesystem UUIDs
|
||||||
for part in self.partitions:
|
for part in self.partitions:
|
||||||
if not part.uuid and part.use_uuid:
|
if not part.uuid and part.use_uuid:
|
||||||
if self.ptable_format == 'gpt':
|
if self.ptable_format == 'gpt':
|
||||||
part.uuid = str(uuid.uuid4())
|
part.uuid = str(uuid.uuid4())
|
||||||
else: # msdos partition table
|
else: # msdos partition table
|
||||||
part.uuid = '%08x-%02d' % (self.identifier, part.realnum)
|
part.uuid = '%08x-%02d' % (self.identifier, part.realnum)
|
||||||
|
if not part.fsuuid:
|
||||||
|
if part.fstype == 'vfat' or part.fstype == 'msdos':
|
||||||
|
part.fsuuid = '0x' + str(uuid.uuid4())[:8].upper()
|
||||||
|
else:
|
||||||
|
part.fsuuid = str(uuid.uuid4())
|
||||||
|
|
||||||
def prepare(self, imager):
|
def prepare(self, imager):
|
||||||
"""Prepare an image. Call prepare method of all image partitions."""
|
"""Prepare an image. Call prepare method of all image partitions."""
|
||||||
|
|||||||
@@ -240,7 +240,8 @@ class BootimgEFIPlugin(SourcePlugin):
|
|||||||
# dosfs image, created by mkdosfs
|
# dosfs image, created by mkdosfs
|
||||||
bootimg = "%s/boot.img" % cr_workdir
|
bootimg = "%s/boot.img" % cr_workdir
|
||||||
|
|
||||||
dosfs_cmd = "mkdosfs -n efi -C %s %d" % (bootimg, blocks)
|
dosfs_cmd = "mkdosfs -n efi -i %s -C %s %d" % \
|
||||||
|
(part.fsuuid, bootimg, blocks)
|
||||||
exec_native_cmd(dosfs_cmd, native_sysroot)
|
exec_native_cmd(dosfs_cmd, native_sysroot)
|
||||||
|
|
||||||
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
|
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
|
||||||
|
|||||||
@@ -186,7 +186,8 @@ class BootimgPcbiosPlugin(SourcePlugin):
|
|||||||
# dosfs image, created by mkdosfs
|
# dosfs image, created by mkdosfs
|
||||||
bootimg = "%s/boot%s.img" % (cr_workdir, part.lineno)
|
bootimg = "%s/boot%s.img" % (cr_workdir, part.lineno)
|
||||||
|
|
||||||
dosfs_cmd = "mkdosfs -n boot -S 512 -C %s %d" % (bootimg, blocks)
|
dosfs_cmd = "mkdosfs -n boot -i %s -S 512 -C %s %d" % \
|
||||||
|
(part.fsuuid, bootimg, blocks)
|
||||||
exec_native_cmd(dosfs_cmd, native_sysroot)
|
exec_native_cmd(dosfs_cmd, native_sysroot)
|
||||||
|
|
||||||
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
|
mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
|
||||||
|
|||||||
Reference in New Issue
Block a user