[OE-core] [PATCH] wic: use kB for the partitions size

Tom Zanussi tom.zanussi at linux.intel.com
Wed Feb 4 18:32:58 UTC 2015


On Wed, 2015-02-04 at 00:40 +0100, Alexandre Belloni wrote:
> Use kB instead of MB for the partition size to get a better granularity.
> 
> This is needed on some SoC (i.mx, omap) where it is necessary to create
> partitions as small as 64kB.
> 
> Keep the backward compatibility by assuming MB when no unit is provided.
> 

Looks fine to me, and a quick test shows expected sizes, etc.

But please do update at least the in-tool help (/lib/image/help.py) with
the new --size options.

Thanks,

Tom

Acked-by: Tom Zanussi <tom.zanussi at linux.intel.com>
Tested-by: Tom Zanussi <tom.zanussi at linux.intel.com>




$ ls -al build
total 65028
drwxr-xr-x. 3 trz trz     4096 Feb  4 11:02 .
drwxrwxr-x. 4 trz trz     4096 Feb  4 11:02 ..
-rw-r--r--. 1 trz trz 24199168 Feb  4 11:02 boot.img
-rw-rw-r--. 1 trz trz 51561472 Feb  4 11:02 directdisk-201502041102-sda.direct
drwxr-xr-x. 3 trz trz     4096 Feb  4 11:02 hdd
-rw-rw-r--. 1 trz trz 25346048 Feb  4 11:02 rootfs_platform.ext3
$ ls -al build.prev/
total 65040
drwxr-xr-x. 3 trz trz     4096 Feb  4 10:48 .
drwxrwxr-x. 4 trz trz     4096 Feb  4 11:02 ..
-rw-r--r--. 1 trz trz 24199168 Feb  4 10:48 boot.img
-rw-rw-r--. 1 trz trz 52429824 Feb  4 10:48 directdisk-201502041048-sda.direct
drwxr-xr-x. 3 trz trz     4096 Feb  4 10:48 hdd
-rw-rw-r--. 1 trz trz 25346048 Feb  4 10:48 rootfs_platform.ext3


> Signed-off-by: Alexandre Belloni <alexandre.belloni at free-electrons.com>
> ---
>  .../wic/3rdparty/pykickstart/commands/partition.py |  4 +--
>  scripts/lib/wic/3rdparty/pykickstart/options.py    | 21 ++++++++++++-
>  scripts/lib/wic/kickstart/__init__.py              |  2 +-
>  .../lib/wic/kickstart/custom_commands/partition.py | 36 +++++++++++-----------
>  scripts/lib/wic/plugins/source/bootimg-efi.py      |  2 +-
>  scripts/lib/wic/plugins/source/bootimg-pcbios.py   |  2 +-
>  scripts/lib/wic/utils/partitionedfs.py             |  4 +--
>  7 files changed, 45 insertions(+), 26 deletions(-)
> 
> diff --git a/scripts/lib/wic/3rdparty/pykickstart/commands/partition.py b/scripts/lib/wic/3rdparty/pykickstart/commands/partition.py
> index 56b91aa9d9a4..b564b1a7abb9 100644
> --- a/scripts/lib/wic/3rdparty/pykickstart/commands/partition.py
> +++ b/scripts/lib/wic/3rdparty/pykickstart/commands/partition.py
> @@ -78,7 +78,7 @@ class FC3_PartData(BaseData):
>          if self.recommended:
>              retval += " --recommended"
>          if self.size and self.size != 0:
> -            retval += " --size=%s" % self.size
> +            retval += " --size=%sk" % self.size
>          if hasattr(self, "start") and self.start != 0:
>              retval += " --start=%s" % self.start
>  
> @@ -216,7 +216,7 @@ class FC3_Partition(KickstartCommand):
>                        callback=part_cb, nargs=1, type="string")
>          op.add_option("--recommended", dest="recommended", action="store_true",
>                        default=False)
> -        op.add_option("--size", dest="size", action="store", type="int",
> +        op.add_option("--size", dest="size", action="store", type="size",
>                        nargs=1)
>          op.add_option("--start", dest="start", action="store", type="int",
>                        nargs=1)
> diff --git a/scripts/lib/wic/3rdparty/pykickstart/options.py b/scripts/lib/wic/3rdparty/pykickstart/options.py
> index 341c5d7298b0..7bbe6a85a156 100644
> --- a/scripts/lib/wic/3rdparty/pykickstart/options.py
> +++ b/scripts/lib/wic/3rdparty/pykickstart/options.py
> @@ -143,6 +143,24 @@ def _check_string(option, opt, value):
>      else:
>          return value
>  
> +def _check_size(option, opt, value):
> +    # Former default was MB
> +    if (value.isdigit()):
> +        return int(value) * 1024L
> +
> +    mapping = {"opt": opt, "value": value}
> +    if (not value[0:len(value)-1].isdigit()):
> +        raise OptionValueError(_("Option %(opt)s: invalid size value: %(value)r") % mapping)
> +
> +    size = int(value[0:len(value)-1])
> +    if (value.endswith("k") or value.endswith("K")):
> +        return size
> +    if (value.endswith("M")):
> +        return size * 1024L
> +    if (value.endswith("G")):
> +        return size * 1024L * 1024L
> +    raise OptionValueError(_("Option %(opt)s: invalid size value: %(value)r") % mapping)
> +
>  # Creates a new Option class that supports several new attributes:
>  # - required:  any option with this attribute must be supplied or an exception
>  #              is thrown
> @@ -169,10 +187,11 @@ class KSOption (Option):
>      ACTIONS = Option.ACTIONS + ("map", "map_extend",)
>      STORE_ACTIONS = Option.STORE_ACTIONS + ("map", "map_extend",)
>  
> -    TYPES = Option.TYPES + ("ksboolean", "string")
> +    TYPES = Option.TYPES + ("ksboolean", "string", "size")
>      TYPE_CHECKER = copy(Option.TYPE_CHECKER)
>      TYPE_CHECKER["ksboolean"] = _check_ksboolean
>      TYPE_CHECKER["string"] = _check_string
> +    TYPE_CHECKER["size"] = _check_size
>  
>      def _check_required(self):
>          if self.required and not self.takes_value():
> diff --git a/scripts/lib/wic/kickstart/__init__.py b/scripts/lib/wic/kickstart/__init__.py
> index 600098293aef..1d094e9d5d8b 100644
> --- a/scripts/lib/wic/kickstart/__init__.py
> +++ b/scripts/lib/wic/kickstart/__init__.py
> @@ -77,7 +77,7 @@ def get_image_size(ks, default = None):
>          if p.mountpoint == "/" and p.size:
>              __size = p.size
>      if __size > 0:
> -        return int(__size) * 1024L * 1024L
> +        return int(__size) * 1024L
>      else:
>          return default
>  
> diff --git a/scripts/lib/wic/kickstart/custom_commands/partition.py b/scripts/lib/wic/kickstart/custom_commands/partition.py
> index 54a494e033b9..7a307065f289 100644
> --- a/scripts/lib/wic/kickstart/custom_commands/partition.py
> +++ b/scripts/lib/wic/kickstart/custom_commands/partition.py
> @@ -99,7 +99,7 @@ class Wic_PartData(Mic_PartData):
>  
>      def get_extra_block_count(self, current_blocks):
>          """
> -        The --size param is reflected in self.size (in MB), and we already
> +        The --size param is reflected in self.size (in kB), and we already
>          have current_blocks (1k) blocks, calculate and return the
>          number of (1k) blocks we need to add to get to --size, 0 if
>          we're already there or beyond.
> @@ -110,7 +110,7 @@ class Wic_PartData(Mic_PartData):
>          if not self.size:
>              return 0
>  
> -        requested_blocks = self.size * 1024
> +        requested_blocks = self.size
>  
>          msger.debug("Requested blocks %d, current_blocks %d" % \
>                      (requested_blocks, current_blocks))
> @@ -171,7 +171,7 @@ class Wic_PartData(Mic_PartData):
>          Handle an already-created partition e.g. xxx.ext3
>          """
>          rootfs = oe_builddir
> -        du_cmd = "du -Lbms %s" % rootfs
> +        du_cmd = "du -Lbks %s" % rootfs
>          out = exec_cmd(du_cmd)
>          rootfs_size = out.split()[0]
>  
> @@ -247,8 +247,8 @@ class Wic_PartData(Mic_PartData):
>              print "rootfs_dir: %s" % rootfs_dir
>              msger.error("ERROR: mkfs.%s returned '%s' instead of 0 (which you probably don't want to ignore, use --debug for details) when creating filesystem from rootfs directory: %s" % (self.fstype, rc, rootfs_dir))
>  
> -        # get the rootfs size in the right units for kickstart (Mb)
> -        du_cmd = "du -Lbms %s" % rootfs
> +        # get the rootfs size in the right units for kickstart (kB)
> +        du_cmd = "du -Lbks %s" % rootfs
>          out = exec_cmd(du_cmd)
>          rootfs_size = out.split()[0]
>  
> @@ -292,8 +292,8 @@ class Wic_PartData(Mic_PartData):
>          if rc:
>              msger.error("ERROR: mkfs.%s returned '%s' instead of 0 (which you probably don't want to ignore, use --debug for details) when creating filesystem from rootfs directory: %s" % (self.fstype, rc, rootfs_dir))
>  
> -        # get the rootfs size in the right units for kickstart (Mb)
> -        du_cmd = "du -Lbms %s" % rootfs
> +        # get the rootfs size in the right units for kickstart (kB)
> +        du_cmd = "du -Lbks %s" % rootfs
>          out = exec_cmd(du_cmd)
>          rootfs_size = out.split()[0]
>  
> @@ -341,8 +341,8 @@ class Wic_PartData(Mic_PartData):
>          chmod_cmd = "chmod 644 %s" % rootfs
>          exec_cmd(chmod_cmd)
>  
> -        # get the rootfs size in the right units for kickstart (Mb)
> -        du_cmd = "du -Lbms %s" % rootfs
> +        # get the rootfs size in the right units for kickstart (kB)
> +        du_cmd = "du -Lbks %s" % rootfs
>          out = exec_cmd(du_cmd)
>          rootfs_size = out.split()[0]
>  
> @@ -361,8 +361,8 @@ class Wic_PartData(Mic_PartData):
>                         (image_rootfs, rootfs)
>          exec_native_cmd(pseudo + squashfs_cmd, native_sysroot)
>  
> -        # get the rootfs size in the right units for kickstart (Mb)
> -        du_cmd = "du -Lbms %s" % rootfs
> +        # get the rootfs size in the right units for kickstart (kB)
> +        du_cmd = "du -Lbks %s" % rootfs
>          out = exec_cmd(du_cmd)
>          rootfs_size = out.split()[0]
>  
> @@ -395,7 +395,7 @@ class Wic_PartData(Mic_PartData):
>          """
>          fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
>  
> -        dd_cmd = "dd if=/dev/zero of=%s bs=1M seek=%d count=0" % \
> +        dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \
>              (fs, self.size)
>          exec_cmd(dd_cmd)
>  
> @@ -417,11 +417,11 @@ class Wic_PartData(Mic_PartData):
>          """
>          fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
>  
> -        dd_cmd = "dd if=/dev/zero of=%s bs=1M seek=%d count=0" % \
> +        dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \
>              (fs, self.size)
>          exec_cmd(dd_cmd)
>  
> -        mkfs_cmd = "mkfs.%s -b %d %s" % (self.fstype, self.size * 1024, rootfs)
> +        mkfs_cmd = "mkfs.%s -b %d %s" % (self.fstype, self.size, rootfs)
>          (rc, out) = exec_native_cmd(mkfs_cmd, native_sysroot)
>          if rc:
>              msger.error("ERROR: mkfs.%s returned '%s' instead of 0 (which you probably don't want to ignore, use --debug for details)" % (self.fstype, rc))
> @@ -442,7 +442,7 @@ class Wic_PartData(Mic_PartData):
>          """
>          fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
>  
> -        blocks = self.size * 1024
> +        blocks = self.size
>  
>          dosfs_cmd = "mkdosfs -n boot -S 512 -C %s %d" % (fs, blocks)
>          exec_native_cmd(dosfs_cmd, native_sysroot)
> @@ -474,8 +474,8 @@ class Wic_PartData(Mic_PartData):
>  
>          os.rmdir(tmpdir)
>  
> -        # get the rootfs size in the right units for kickstart (Mb)
> -        du_cmd = "du -Lbms %s" % fs
> +        # get the rootfs size in the right units for kickstart (kB)
> +        du_cmd = "du -Lbks %s" % fs
>          out = exec_cmd(du_cmd)
>          fs_size = out.split()[0]
>  
> @@ -490,7 +490,7 @@ class Wic_PartData(Mic_PartData):
>          """
>          fs = "%s/fs.%s" % (cr_workdir, self.fstype)
>  
> -        dd_cmd = "dd if=/dev/zero of=%s bs=1M seek=%d count=0" % \
> +        dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \
>              (fs, self.size)
>          exec_cmd(dd_cmd)
>  
> diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
> index e4067b6dbf6b..ee57881e90f8 100644
> --- a/scripts/lib/wic/plugins/source/bootimg-efi.py
> +++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
> @@ -228,7 +228,7 @@ class BootimgEFIPlugin(SourcePlugin):
>          chmod_cmd = "chmod 644 %s" % bootimg
>          exec_cmd(chmod_cmd)
>  
> -        du_cmd = "du -Lbms %s" % bootimg
> +        du_cmd = "du -Lbks %s" % bootimg
>          out = exec_cmd(du_cmd)
>          bootimg_size = out.split()[0]
>  
> diff --git a/scripts/lib/wic/plugins/source/bootimg-pcbios.py b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
> index 8a1aca1ad16a..c4786a6e0ea1 100644
> --- a/scripts/lib/wic/plugins/source/bootimg-pcbios.py
> +++ b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
> @@ -190,7 +190,7 @@ class BootimgPcbiosPlugin(SourcePlugin):
>          chmod_cmd = "chmod 644 %s" % bootimg
>          exec_cmd(chmod_cmd)
>  
> -        du_cmd = "du -Lbms %s" % bootimg
> +        du_cmd = "du -Lbks %s" % bootimg
>          out = exec_cmd(du_cmd)
>          bootimg_size = out.split()[0]
>  
> diff --git a/scripts/lib/wic/utils/partitionedfs.py b/scripts/lib/wic/utils/partitionedfs.py
> index fb95cc790e00..f109e2c227c5 100644
> --- a/scripts/lib/wic/utils/partitionedfs.py
> +++ b/scripts/lib/wic/utils/partitionedfs.py
> @@ -92,8 +92,8 @@ class Image:
>  
>          ks_pnum = len(self.partitions)
>  
> -        # Converting MB to sectors for parted
> -        size = size * 1024 * 1024 / self.sector_size
> +        # Converting kB to sectors for parted
> +        size = size * 1024 / self.sector_size
>  
>          # We still need partition for "/" or non-subvolume
>          if mountpoint == "/" or not fsopts:
> -- 
> 2.1.0
> 





More information about the Openembedded-core mailing list