diff options
Diffstat (limited to 'scripts/lib/wic')
-rw-r--r-- | scripts/lib/wic/ksparser.py | 2 | ||||
-rw-r--r-- | scripts/lib/wic/partition.py | 1 | ||||
-rw-r--r-- | scripts/lib/wic/plugins/imager/direct.py | 37 |
3 files changed, 29 insertions, 11 deletions
diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py index 3e670033ba..6a643ba3af 100644 --- a/scripts/lib/wic/ksparser.py +++ b/scripts/lib/wic/ksparser.py | |||
@@ -151,6 +151,8 @@ class KickStart(): | |||
151 | part.add_argument('--part-name') | 151 | part.add_argument('--part-name') |
152 | part.add_argument('--part-type') | 152 | part.add_argument('--part-type') |
153 | part.add_argument('--rootfs-dir') | 153 | part.add_argument('--rootfs-dir') |
154 | part.add_argument('--type', default='primary', | ||
155 | choices = ('primary', 'logical')) | ||
154 | 156 | ||
155 | # --size and --fixed-size cannot be specified together; options | 157 | # --size and --fixed-size cannot be specified together; options |
156 | # ----extra-space and --overhead-factor should also raise a parser | 158 | # ----extra-space and --overhead-factor should also raise a parser |
diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py index 01466b258d..f427c8101b 100644 --- a/scripts/lib/wic/partition.py +++ b/scripts/lib/wic/partition.py | |||
@@ -50,6 +50,7 @@ class Partition(): | |||
50 | self.use_uuid = args.use_uuid | 50 | self.use_uuid = args.use_uuid |
51 | self.uuid = args.uuid | 51 | self.uuid = args.uuid |
52 | self.fsuuid = args.fsuuid | 52 | self.fsuuid = args.fsuuid |
53 | self.type = args.type | ||
53 | 54 | ||
54 | self.lineno = lineno | 55 | self.lineno = lineno |
55 | self.source_file = "" | 56 | self.source_file = "" |
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py index 91fc5e70f6..3ce6ad55b8 100644 --- a/scripts/lib/wic/plugins/imager/direct.py +++ b/scripts/lib/wic/plugins/imager/direct.py | |||
@@ -300,6 +300,10 @@ class PartitionedImage(): | |||
300 | self.path = path # Path to the image file | 300 | self.path = path # Path to the image file |
301 | self.numpart = 0 # Number of allocated partitions | 301 | self.numpart = 0 # Number of allocated partitions |
302 | self.realpart = 0 # Number of partitions in the partition table | 302 | self.realpart = 0 # Number of partitions in the partition table |
303 | self.primary_part_num = 0 # Number of primary partitions (msdos) | ||
304 | self.extendedpart = 0 # Create extended partition before this logical partition (msdos) | ||
305 | self.extended_size_sec = 0 # Size of exteded partition (msdos) | ||
306 | self.logical_part_cnt = 0 # Number of total logical paritions (msdos) | ||
303 | self.offset = 0 # Offset of next partition (in sectors) | 307 | self.offset = 0 # Offset of next partition (in sectors) |
304 | self.min_size = 0 # Minimum required disk size to fit | 308 | self.min_size = 0 # Minimum required disk size to fit |
305 | # all partitions (in bytes) | 309 | # all partitions (in bytes) |
@@ -391,12 +395,16 @@ class PartitionedImage(): | |||
391 | # Skip one sector required for the partitioning scheme overhead | 395 | # Skip one sector required for the partitioning scheme overhead |
392 | self.offset += overhead | 396 | self.offset += overhead |
393 | 397 | ||
394 | if self.realpart > 3 and num_real_partitions > 4: | 398 | if self.ptable_format == "msdos": |
399 | if self.primary_part_num > 3 or \ | ||
400 | (self.extendedpart == 0 and self.primary_part_num >= 3 and num_real_partitions > 4): | ||
401 | part.type = 'logical' | ||
395 | # Reserve a sector for EBR for every logical partition | 402 | # Reserve a sector for EBR for every logical partition |
396 | # before alignment is performed. | 403 | # before alignment is performed. |
397 | if self.ptable_format == "msdos": | 404 | if part.type == 'logical': |
398 | self.offset += 1 | 405 | self.offset += 1 |
399 | 406 | ||
407 | align_sectors = 0 | ||
400 | if part.align: | 408 | if part.align: |
401 | # If not first partition and we do have alignment set we need | 409 | # If not first partition and we do have alignment set we need |
402 | # to align the partition. | 410 | # to align the partition. |
@@ -422,18 +430,25 @@ class PartitionedImage(): | |||
422 | part.start = self.offset | 430 | part.start = self.offset |
423 | self.offset += part.size_sec | 431 | self.offset += part.size_sec |
424 | 432 | ||
425 | part.type = 'primary' | ||
426 | if not part.no_table: | 433 | if not part.no_table: |
427 | part.num = self.realpart | 434 | part.num = self.realpart |
428 | else: | 435 | else: |
429 | part.num = 0 | 436 | part.num = 0 |
430 | 437 | ||
431 | if self.ptable_format == "msdos": | 438 | if self.ptable_format == "msdos" and not part.no_table: |
432 | # only count the partitions that are in partition table | 439 | if part.type == 'logical': |
433 | if num_real_partitions > 4: | 440 | self.logical_part_cnt += 1 |
434 | if self.realpart > 3: | 441 | part.num = self.logical_part_cnt + 4 |
435 | part.type = 'logical' | 442 | if self.extendedpart == 0: |
436 | part.num = self.realpart + 1 | 443 | # Create extended partition as a primary partition |
444 | self.primary_part_num += 1 | ||
445 | self.extendedpart = part.num | ||
446 | else: | ||
447 | self.extended_size_sec += align_sectors | ||
448 | self.extended_size_sec += part.size_sec + 1 | ||
449 | else: | ||
450 | self.primary_part_num += 1 | ||
451 | part.num = self.primary_part_num | ||
437 | 452 | ||
438 | logger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " | 453 | logger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " |
439 | "sectors (%d bytes).", part.mountpoint, part.disk, | 454 | "sectors (%d bytes).", part.mountpoint, part.disk, |
@@ -483,7 +498,7 @@ class PartitionedImage(): | |||
483 | if part.num == 0: | 498 | if part.num == 0: |
484 | continue | 499 | continue |
485 | 500 | ||
486 | if self.ptable_format == "msdos" and part.num == 5: | 501 | if self.ptable_format == "msdos" and part.num == self.extendedpart: |
487 | # Create an extended partition (note: extended | 502 | # Create an extended partition (note: extended |
488 | # partition is described in MBR and contains all | 503 | # partition is described in MBR and contains all |
489 | # logical partitions). The logical partitions save a | 504 | # logical partitions). The logical partitions save a |
@@ -497,7 +512,7 @@ class PartitionedImage(): | |||
497 | # room for all logical partitions. | 512 | # room for all logical partitions. |
498 | self._create_partition(self.path, "extended", | 513 | self._create_partition(self.path, "extended", |
499 | None, part.start - 1, | 514 | None, part.start - 1, |
500 | self.offset - part.start + 1) | 515 | self.extended_size_sec) |
501 | 516 | ||
502 | if part.fstype == "swap": | 517 | if part.fstype == "swap": |
503 | parted_fs_type = "linux-swap" | 518 | parted_fs_type = "linux-swap" |