Skip to contentSkip to conversation

new wks option --system-id

PATCH New Ed Bartosh 1 participant 7 messages Apr 22, 2016

lore
Share & tools
lore

Ed Bartosh

author
#0 lore raw

cover new wks option --system-id

Hi,

This patchset contains implementation of --system-id option. The option sets system id for the partition if specified.

For example with this wks file:

part /boot --ondisk sda --align 1024 --fstype vfat --source bootimg-pcbios --size 64M --system-id 1

part /     --ondisk sda --align 1024 --fstype ext4 --source rootfs         --size 1000M --system-id 2
part /opt  --ondisk sda --align 1024 --fstype ext4                         --size 1000M --system-id 3

The image layout is the following: (pay attention to the system ids 1,2,3)

Device Boot Start End #cyls #blocks Id System

img/build/system-id-201604221223-sda.direct1         16    1040-   1025-     65552    1  FAT12
img/build/system-id-201604221223-sda.direct2       1056   21855   20800    1331200    2  XENIX root
img/build/system-id-201604221223-sda.direct3      21856   37855   16000    1024000    3  XENIX usr

The following changes since commit 6c1c01392d91f512e2949ad1d57a75a8077478ba:

build-appliance-image: Update to krogoth head revision (2016-04-19 21:26:33 +0100)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib ed/wic/part-system-id-9096
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/wic/part-system-id-9096

Ed Bartosh (6):
wic: add --system-id wks option
wic: add sfdisk to the list of utilities
wic: add system_id attribute to Partition
wic: add system_id argument to Image.add_partition
wic: set partition system id
wic: add help for --system-id option

 scripts/lib/wic/help.py                |  4 ++++
 scripts/lib/wic/imager/direct.py       |  3 ++-
 scripts/lib/wic/ksparser.py            | 19 +++++++++++++++++++
 scripts/lib/wic/partition.py           |  1 +
 scripts/lib/wic/utils/oe/misc.py       |  1 +
 scripts/lib/wic/utils/partitionedfs.py |  9 +++++++--
 6 files changed, 34 insertions(+), 3 deletions(-)

--
Regards,
Ed

author
#1 lore raw

PATCH 1/6 wic: add --system-id wks option

Added new option --system-id to wks parser. The option will be used to set partition system id.

[YOCTO #9096]

---
 scripts/lib/wic/ksparser.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
scripts/lib/wic/ksparser.py +19 -0
index 8c3f808..10d0d7c 100644
@@ -92,6 +92,24 @@ def cannedpathtype(arg):
         raise ArgumentTypeError("file not found: %s" % arg)
     return result
 
+def systemidtype(arg):
+    """
+    Custom type for ArgumentParser
+    Checks if the argument sutisfies system id requirements,
+    i.e. if it's one byte long integer > 0
+    """
+    error = "Invalid system type: %s. must be hex "\
+            "between 0x1 and 0xFF" % arg
+    try:
+        result = int(arg, 16)
+    except ValueError:
+        raise ArgumentTypeError(error)
+
+    if result <= 0 or result > 0xff:
+        raise ArgumentTypeError(error)
+
+    return arg
+
 class KickStart(object):
     """"Kickstart parser implementation."""
 
@@ -121,6 +139,7 @@ class KickStart(object):
         part.add_argument('--size', type=sizetype, default=0)
         part.add_argument('--source')
         part.add_argument('--sourceparams')
+        part.add_argument('--system-id', type=systemidtype)
         part.add_argument('--use-uuid', action='store_true')
         part.add_argument('--uuid')
 
Signature · 1 line
2.1.4
author
#2 lore raw

PATCH 2/6 wic: add sfdisk to the list of utilities

In reply to Ed Bartosh

Added sfdisk -> util-linux pair to the dictionary executable -> recipe as sfdisk is going to be used by wic to set partition system id.

[YOCTO #9096]

---
 scripts/lib/wic/utils/oe/misc.py | 1 +
 1 file changed, 1 insertion(+)
scripts/lib/wic/utils/oe/misc.py +1 -0
index 81239ac..a3cbe5f 100644
@@ -43,6 +43,7 @@ NATIVE_RECIPES = {"mcopy": "mtools",
                   "mksquashfs": "squashfs-tools",
                   "mkswap": "util-linux",
                   "parted": "parted",
+                  "sfdisk": "util-linux",
                   "sgdisk": "gptfdisk",
                   "syslinux": "syslinux"
                  }
Signature · 1 line
2.1.4
author
#3 lore raw

PATCH 3/6 wic: add system_id attribute to Partition

In reply to Ed Bartosh

Added Partition.system_id attribute and initialized it from parse result of wks option --system-id. It will be used by the wic code below the call stack to set partition system id.

[YOCTO #9096]

---
 scripts/lib/wic/partition.py | 1 +
 1 file changed, 1 insertion(+)
scripts/lib/wic/partition.py +1 -0
index f40d1bc..227b685 100644
@@ -57,6 +57,7 @@ class Partition(object):
         self.size = args.size
         self.source = args.source
         self.sourceparams = args.sourceparams
+        self.system_id = args.system_id
         self.use_uuid = args.use_uuid
         self.uuid = args.uuid
         if args.use_uuid and not self.uuid:
Signature · 1 line
2.1.4
author
#4 lore raw

PATCH 4/6 wic: add system_id argument to Image.add_partition

In reply to Ed Bartosh

Added new argument to add_partition call to pass partition system id down the stack.

[YOCTO #9096]

---
 scripts/lib/wic/imager/direct.py       | 3 ++-
 scripts/lib/wic/utils/partitionedfs.py | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
scripts/lib/wic/imager/direct.py +2 -1
index a1b4249..1937042 100644
@@ -267,7 +267,8 @@ class DirectImageCreator(BaseImageCreator):
                                        align=part.align,
                                        no_table=part.no_table,
                                        part_type=part.part_type,
-                                       uuid=part.uuid)
+                                       uuid=part.uuid,
+                                       system_id=part.system_id)
 
         if fstab_path:
             shutil.move(fstab_path + ".orig", fstab_path)
scripts/lib/wic/utils/partitionedfs.py +1 -1
index ad596d2..9da4a7f 100644
@@ -87,7 +87,7 @@ class Image(object):
 
     def add_partition(self, size, disk_name, mountpoint, source_file=None, fstype=None,
                       label=None, fsopts=None, boot=False, align=None, no_table=False,
-                      part_type=None, uuid=None):
+                      part_type=None, uuid=None, system_id=None):
         """ Add the next partition. Prtitions have to be added in the
         first-to-last order. """
 
Signature · 1 line
2.1.4
author
#5 lore raw

PATCH 5/6 wic: set partition system id

In reply to Ed Bartosh

Used sfdisk to set partition system id if --system-id parameter is used for a partition in wks file.

[YOCTO #9096]

---
 scripts/lib/wic/utils/partitionedfs.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
scripts/lib/wic/utils/partitionedfs.py +6 -1
index 9da4a7f..4170ec1 100644
@@ -110,7 +110,8 @@ class Image(object):
                 'align': align, # Partition alignment
                 'no_table' : no_table, # Partition does not appear in partition table
                 'part_type' : part_type, # Partition type
-                'uuid': uuid} # Partition UUID
+                'uuid': uuid, # Partition UUID
+                'system_id': system_id} # Partition system id
 
         self.__add_partition(part)
 
@@ -310,6 +311,10 @@ class Image(object):
                 exec_native_cmd("parted -s %s set %d %s on" % \
                                 (disk['disk'].device, part['num'], flag_name),
                                 self.native_sysroot)
+            if part['system_id']:
+                exec_native_cmd("sfdisk --part-type %s %s %s" % \
+                                (disk['disk'].device, part['num'], part['system_id']),
+                                self.native_sysroot)
 
             # Parted defaults to enabling the lba flag for fat16 partitions,
             # which causes compatibility issues with some firmware (and really
Signature · 1 line
2.1.4
author
#6 lore raw

PATCH 6/6 wic: add help for --system-id option

In reply to Ed Bartosh

Added explanation of --system-id option to the output of wic help kickstart.

[YOCTO #9096]

---
 scripts/lib/wic/help.py | 4 ++++
 1 file changed, 4 insertions(+)
scripts/lib/wic/help.py +4 -0
index 405d25a..394e3fd 100644
@@ -738,6 +738,10 @@ DESCRIPTION
                  in bootloader configuration before running wic. In this case .wks file can
                  be generated or modified to set preconfigured parition UUID using this option.
 
+         --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
+                      in one byte long hex number either with 0x prefix or without it.
+
     * bootloader
 
       This command allows the user to specify various bootloader
Signature · 1 line
2.1.4