summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>2015-02-04 23:45:02 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-02-08 08:00:27 +0000
commit602d90d57a55f240b81ad286224c5cc39460e3c1 (patch)
treec921f7a66fce1692281ff2ca6f8d2d68e735250a
parent7c3b9a9a9fe0bcad7d7d3f0af84d6eb8546904f7 (diff)
downloadpoky-602d90d57a55f240b81ad286224c5cc39460e3c1.tar.gz
wic: use kB for the partitions size
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. (From OE-Core rev: 3d4da9186016d54b76ad2fa710646de253f0f063) Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> Tested-by: Maciej Borzecki <maciej.borzecki@open-rnd.pl> Acked-by: Tom Zanussi <tom.zanussi@linux.intel.com> Tested-by: Tom Zanussi <tom.zanussi@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--scripts/lib/image/help.py8
-rw-r--r--scripts/lib/wic/3rdparty/pykickstart/commands/partition.py4
-rw-r--r--scripts/lib/wic/3rdparty/pykickstart/options.py21
-rw-r--r--scripts/lib/wic/kickstart/__init__.py2
-rw-r--r--scripts/lib/wic/kickstart/custom_commands/partition.py36
-rw-r--r--scripts/lib/wic/plugins/source/bootimg-efi.py2
-rw-r--r--scripts/lib/wic/plugins/source/bootimg-pcbios.py2
-rw-r--r--scripts/lib/wic/utils/partitionedfs.py4
8 files changed, 49 insertions, 30 deletions
diff --git a/scripts/lib/image/help.py b/scripts/lib/image/help.py
index 6b74f57662..0d8a6adfaa 100644
--- a/scripts/lib/image/help.py
+++ b/scripts/lib/image/help.py
@@ -673,10 +673,10 @@ DESCRIPTION
673 673
674 The following are supported 'part' options: 674 The following are supported 'part' options:
675 675
676 --size: The minimum partition size in MBytes. Specify an 676 --size: The minimum partition size. Specify an integer value
677 integer value such as 500. Do not append the number 677 such as 500. Multipliers k, M ang G can be used. If
678 with "MB". You do not need this option if you use 678 not specified, the size is in MB.
679 --source. 679 You do not need this option if you use --source.
680 680
681 --source: This option is a wic-specific option that names the 681 --source: This option is a wic-specific option that names the
682 source of the data that will populate the 682 source of the data that will populate the
diff --git a/scripts/lib/wic/3rdparty/pykickstart/commands/partition.py b/scripts/lib/wic/3rdparty/pykickstart/commands/partition.py
index 56b91aa9d9..b564b1a7ab 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):
78 if self.recommended: 78 if self.recommended:
79 retval += " --recommended" 79 retval += " --recommended"
80 if self.size and self.size != 0: 80 if self.size and self.size != 0:
81 retval += " --size=%s" % self.size 81 retval += " --size=%sk" % self.size
82 if hasattr(self, "start") and self.start != 0: 82 if hasattr(self, "start") and self.start != 0:
83 retval += " --start=%s" % self.start 83 retval += " --start=%s" % self.start
84 84
@@ -216,7 +216,7 @@ class FC3_Partition(KickstartCommand):
216 callback=part_cb, nargs=1, type="string") 216 callback=part_cb, nargs=1, type="string")
217 op.add_option("--recommended", dest="recommended", action="store_true", 217 op.add_option("--recommended", dest="recommended", action="store_true",
218 default=False) 218 default=False)
219 op.add_option("--size", dest="size", action="store", type="int", 219 op.add_option("--size", dest="size", action="store", type="size",
220 nargs=1) 220 nargs=1)
221 op.add_option("--start", dest="start", action="store", type="int", 221 op.add_option("--start", dest="start", action="store", type="int",
222 nargs=1) 222 nargs=1)
diff --git a/scripts/lib/wic/3rdparty/pykickstart/options.py b/scripts/lib/wic/3rdparty/pykickstart/options.py
index 341c5d7298..b2d8e3e516 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):
143 else: 143 else:
144 return value 144 return value
145 145
146def _check_size(option, opt, value):
147 # Former default was MB
148 if (value.isdigit()):
149 return int(value) * 1024L
150
151 mapping = {"opt": opt, "value": value}
152 if (not value[:-1].isdigit()):
153 raise OptionValueError(_("Option %(opt)s: invalid size value: %(value)r") % mapping)
154
155 size = int(value[:-1])
156 if (value.endswith("k") or value.endswith("K")):
157 return size
158 if (value.endswith("M")):
159 return size * 1024L
160 if (value.endswith("G")):
161 return size * 1024L * 1024L
162 raise OptionValueError(_("Option %(opt)s: invalid size value: %(value)r") % mapping)
163
146# Creates a new Option class that supports several new attributes: 164# Creates a new Option class that supports several new attributes:
147# - required: any option with this attribute must be supplied or an exception 165# - required: any option with this attribute must be supplied or an exception
148# is thrown 166# is thrown
@@ -169,10 +187,11 @@ class KSOption (Option):
169 ACTIONS = Option.ACTIONS + ("map", "map_extend",) 187 ACTIONS = Option.ACTIONS + ("map", "map_extend",)
170 STORE_ACTIONS = Option.STORE_ACTIONS + ("map", "map_extend",) 188 STORE_ACTIONS = Option.STORE_ACTIONS + ("map", "map_extend",)
171 189
172 TYPES = Option.TYPES + ("ksboolean", "string") 190 TYPES = Option.TYPES + ("ksboolean", "string", "size")
173 TYPE_CHECKER = copy(Option.TYPE_CHECKER) 191 TYPE_CHECKER = copy(Option.TYPE_CHECKER)
174 TYPE_CHECKER["ksboolean"] = _check_ksboolean 192 TYPE_CHECKER["ksboolean"] = _check_ksboolean
175 TYPE_CHECKER["string"] = _check_string 193 TYPE_CHECKER["string"] = _check_string
194 TYPE_CHECKER["size"] = _check_size
176 195
177 def _check_required(self): 196 def _check_required(self):
178 if self.required and not self.takes_value(): 197 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 b1406a0457..10959213d1 100644
--- a/scripts/lib/wic/kickstart/__init__.py
+++ b/scripts/lib/wic/kickstart/__init__.py
@@ -74,7 +74,7 @@ def get_image_size(ks, default = None):
74 if p.mountpoint == "/" and p.size: 74 if p.mountpoint == "/" and p.size:
75 __size = p.size 75 __size = p.size
76 if __size > 0: 76 if __size > 0:
77 return int(__size) * 1024L * 1024L 77 return int(__size) * 1024L
78 else: 78 else:
79 return default 79 return default
80 80
diff --git a/scripts/lib/wic/kickstart/custom_commands/partition.py b/scripts/lib/wic/kickstart/custom_commands/partition.py
index 54a494e033..7a307065f2 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):
99 99
100 def get_extra_block_count(self, current_blocks): 100 def get_extra_block_count(self, current_blocks):
101 """ 101 """
102 The --size param is reflected in self.size (in MB), and we already 102 The --size param is reflected in self.size (in kB), and we already
103 have current_blocks (1k) blocks, calculate and return the 103 have current_blocks (1k) blocks, calculate and return the
104 number of (1k) blocks we need to add to get to --size, 0 if 104 number of (1k) blocks we need to add to get to --size, 0 if
105 we're already there or beyond. 105 we're already there or beyond.
@@ -110,7 +110,7 @@ class Wic_PartData(Mic_PartData):
110 if not self.size: 110 if not self.size:
111 return 0 111 return 0
112 112
113 requested_blocks = self.size * 1024 113 requested_blocks = self.size
114 114
115 msger.debug("Requested blocks %d, current_blocks %d" % \ 115 msger.debug("Requested blocks %d, current_blocks %d" % \
116 (requested_blocks, current_blocks)) 116 (requested_blocks, current_blocks))
@@ -171,7 +171,7 @@ class Wic_PartData(Mic_PartData):
171 Handle an already-created partition e.g. xxx.ext3 171 Handle an already-created partition e.g. xxx.ext3
172 """ 172 """
173 rootfs = oe_builddir 173 rootfs = oe_builddir
174 du_cmd = "du -Lbms %s" % rootfs 174 du_cmd = "du -Lbks %s" % rootfs
175 out = exec_cmd(du_cmd) 175 out = exec_cmd(du_cmd)
176 rootfs_size = out.split()[0] 176 rootfs_size = out.split()[0]
177 177
@@ -247,8 +247,8 @@ class Wic_PartData(Mic_PartData):
247 print "rootfs_dir: %s" % rootfs_dir 247 print "rootfs_dir: %s" % rootfs_dir
248 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)) 248 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))
249 249
250 # get the rootfs size in the right units for kickstart (Mb) 250 # get the rootfs size in the right units for kickstart (kB)
251 du_cmd = "du -Lbms %s" % rootfs 251 du_cmd = "du -Lbks %s" % rootfs
252 out = exec_cmd(du_cmd) 252 out = exec_cmd(du_cmd)
253 rootfs_size = out.split()[0] 253 rootfs_size = out.split()[0]
254 254
@@ -292,8 +292,8 @@ class Wic_PartData(Mic_PartData):
292 if rc: 292 if rc:
293 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)) 293 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))
294 294
295 # get the rootfs size in the right units for kickstart (Mb) 295 # get the rootfs size in the right units for kickstart (kB)
296 du_cmd = "du -Lbms %s" % rootfs 296 du_cmd = "du -Lbks %s" % rootfs
297 out = exec_cmd(du_cmd) 297 out = exec_cmd(du_cmd)
298 rootfs_size = out.split()[0] 298 rootfs_size = out.split()[0]
299 299
@@ -341,8 +341,8 @@ class Wic_PartData(Mic_PartData):
341 chmod_cmd = "chmod 644 %s" % rootfs 341 chmod_cmd = "chmod 644 %s" % rootfs
342 exec_cmd(chmod_cmd) 342 exec_cmd(chmod_cmd)
343 343
344 # get the rootfs size in the right units for kickstart (Mb) 344 # get the rootfs size in the right units for kickstart (kB)
345 du_cmd = "du -Lbms %s" % rootfs 345 du_cmd = "du -Lbks %s" % rootfs
346 out = exec_cmd(du_cmd) 346 out = exec_cmd(du_cmd)
347 rootfs_size = out.split()[0] 347 rootfs_size = out.split()[0]
348 348
@@ -361,8 +361,8 @@ class Wic_PartData(Mic_PartData):
361 (image_rootfs, rootfs) 361 (image_rootfs, rootfs)
362 exec_native_cmd(pseudo + squashfs_cmd, native_sysroot) 362 exec_native_cmd(pseudo + squashfs_cmd, native_sysroot)
363 363
364 # get the rootfs size in the right units for kickstart (Mb) 364 # get the rootfs size in the right units for kickstart (kB)
365 du_cmd = "du -Lbms %s" % rootfs 365 du_cmd = "du -Lbks %s" % rootfs
366 out = exec_cmd(du_cmd) 366 out = exec_cmd(du_cmd)
367 rootfs_size = out.split()[0] 367 rootfs_size = out.split()[0]
368 368
@@ -395,7 +395,7 @@ class Wic_PartData(Mic_PartData):
395 """ 395 """
396 fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype) 396 fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
397 397
398 dd_cmd = "dd if=/dev/zero of=%s bs=1M seek=%d count=0" % \ 398 dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \
399 (fs, self.size) 399 (fs, self.size)
400 exec_cmd(dd_cmd) 400 exec_cmd(dd_cmd)
401 401
@@ -417,11 +417,11 @@ class Wic_PartData(Mic_PartData):
417 """ 417 """
418 fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype) 418 fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
419 419
420 dd_cmd = "dd if=/dev/zero of=%s bs=1M seek=%d count=0" % \ 420 dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \
421 (fs, self.size) 421 (fs, self.size)
422 exec_cmd(dd_cmd) 422 exec_cmd(dd_cmd)
423 423
424 mkfs_cmd = "mkfs.%s -b %d %s" % (self.fstype, self.size * 1024, rootfs) 424 mkfs_cmd = "mkfs.%s -b %d %s" % (self.fstype, self.size, rootfs)
425 (rc, out) = exec_native_cmd(mkfs_cmd, native_sysroot) 425 (rc, out) = exec_native_cmd(mkfs_cmd, native_sysroot)
426 if rc: 426 if rc:
427 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)) 427 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):
442 """ 442 """
443 fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype) 443 fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
444 444
445 blocks = self.size * 1024 445 blocks = self.size
446 446
447 dosfs_cmd = "mkdosfs -n boot -S 512 -C %s %d" % (fs, blocks) 447 dosfs_cmd = "mkdosfs -n boot -S 512 -C %s %d" % (fs, blocks)
448 exec_native_cmd(dosfs_cmd, native_sysroot) 448 exec_native_cmd(dosfs_cmd, native_sysroot)
@@ -474,8 +474,8 @@ class Wic_PartData(Mic_PartData):
474 474
475 os.rmdir(tmpdir) 475 os.rmdir(tmpdir)
476 476
477 # get the rootfs size in the right units for kickstart (Mb) 477 # get the rootfs size in the right units for kickstart (kB)
478 du_cmd = "du -Lbms %s" % fs 478 du_cmd = "du -Lbks %s" % fs
479 out = exec_cmd(du_cmd) 479 out = exec_cmd(du_cmd)
480 fs_size = out.split()[0] 480 fs_size = out.split()[0]
481 481
@@ -490,7 +490,7 @@ class Wic_PartData(Mic_PartData):
490 """ 490 """
491 fs = "%s/fs.%s" % (cr_workdir, self.fstype) 491 fs = "%s/fs.%s" % (cr_workdir, self.fstype)
492 492
493 dd_cmd = "dd if=/dev/zero of=%s bs=1M seek=%d count=0" % \ 493 dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \
494 (fs, self.size) 494 (fs, self.size)
495 exec_cmd(dd_cmd) 495 exec_cmd(dd_cmd)
496 496
diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
index e4067b6dbf..ee57881e90 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):
228 chmod_cmd = "chmod 644 %s" % bootimg 228 chmod_cmd = "chmod 644 %s" % bootimg
229 exec_cmd(chmod_cmd) 229 exec_cmd(chmod_cmd)
230 230
231 du_cmd = "du -Lbms %s" % bootimg 231 du_cmd = "du -Lbks %s" % bootimg
232 out = exec_cmd(du_cmd) 232 out = exec_cmd(du_cmd)
233 bootimg_size = out.split()[0] 233 bootimg_size = out.split()[0]
234 234
diff --git a/scripts/lib/wic/plugins/source/bootimg-pcbios.py b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
index 8a1aca1ad1..c4786a6e0e 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):
190 chmod_cmd = "chmod 644 %s" % bootimg 190 chmod_cmd = "chmod 644 %s" % bootimg
191 exec_cmd(chmod_cmd) 191 exec_cmd(chmod_cmd)
192 192
193 du_cmd = "du -Lbms %s" % bootimg 193 du_cmd = "du -Lbks %s" % bootimg
194 out = exec_cmd(du_cmd) 194 out = exec_cmd(du_cmd)
195 bootimg_size = out.split()[0] 195 bootimg_size = out.split()[0]
196 196
diff --git a/scripts/lib/wic/utils/partitionedfs.py b/scripts/lib/wic/utils/partitionedfs.py
index 9df93dca2f..c72bb29b02 100644
--- a/scripts/lib/wic/utils/partitionedfs.py
+++ b/scripts/lib/wic/utils/partitionedfs.py
@@ -92,8 +92,8 @@ class Image:
92 92
93 ks_pnum = len(self.partitions) 93 ks_pnum = len(self.partitions)
94 94
95 # Converting MB to sectors for parted 95 # Converting kB to sectors for parted
96 size = size * 1024 * 1024 / self.sector_size 96 size = size * 1024 / self.sector_size
97 97
98 # We still need partition for "/" or non-subvolume 98 # We still need partition for "/" or non-subvolume
99 if mountpoint == "/" or not fsopts: 99 if mountpoint == "/" or not fsopts: