diff options
Diffstat (limited to 'scripts/lib')
-rw-r--r-- | scripts/lib/wic/utils/partitionedfs.py | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/scripts/lib/wic/utils/partitionedfs.py b/scripts/lib/wic/utils/partitionedfs.py index dcb63e584a..902548fbf8 100644 --- a/scripts/lib/wic/utils/partitionedfs.py +++ b/scripts/lib/wic/utils/partitionedfs.py | |||
@@ -31,7 +31,7 @@ GPT_OVERHEAD = 34 | |||
31 | # Size of a sector in bytes | 31 | # Size of a sector in bytes |
32 | SECTOR_SIZE = 512 | 32 | SECTOR_SIZE = 512 |
33 | 33 | ||
34 | class Image: | 34 | class Image(object): |
35 | """ | 35 | """ |
36 | Generic base object for an image. | 36 | Generic base object for an image. |
37 | 37 | ||
@@ -58,14 +58,14 @@ class Image: | |||
58 | assert not self._partitions_layed_out | 58 | assert not self._partitions_layed_out |
59 | 59 | ||
60 | self.disks[disk_name] = \ | 60 | self.disks[disk_name] = \ |
61 | { 'disk': None, # Disk object | 61 | {'disk': None, # Disk object |
62 | 'numpart': 0, # Number of allocate partitions | 62 | 'numpart': 0, # Number of allocate partitions |
63 | 'realpart': 0, # Number of partitions in the partition table | 63 | 'realpart': 0, # Number of partitions in the partition table |
64 | 'partitions': [], # Indexes to self.partitions | 64 | 'partitions': [], # Indexes to self.partitions |
65 | 'offset': 0, # Offset of next partition (in sectors) | 65 | 'offset': 0, # Offset of next partition (in sectors) |
66 | # Minimum required disk size to fit all partitions (in bytes) | 66 | # Minimum required disk size to fit all partitions (in bytes) |
67 | 'min_size': 0, | 67 | 'min_size': 0, |
68 | 'ptable_format': "msdos" } # Partition table format | 68 | 'ptable_format': "msdos"} # Partition table format |
69 | 69 | ||
70 | def add_disk(self, disk_name, disk_obj): | 70 | def add_disk(self, disk_name, disk_obj): |
71 | """ Add a disk object which have to be partitioned. More than one disk | 71 | """ Add a disk object which have to be partitioned. More than one disk |
@@ -97,20 +97,20 @@ class Image: | |||
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: |
100 | part = { 'ks_pnum' : ks_pnum, # Partition number in the KS file | 100 | part = {'ks_pnum': ks_pnum, # Partition number in the KS file |
101 | 'size': size, # In sectors | 101 | 'size': size, # In sectors |
102 | 'mountpoint': mountpoint, # Mount relative to chroot | 102 | 'mountpoint': mountpoint, # Mount relative to chroot |
103 | 'source_file': source_file, # partition contents | 103 | 'source_file': source_file, # partition contents |
104 | 'fstype': fstype, # Filesystem type | 104 | 'fstype': fstype, # Filesystem type |
105 | 'fsopts': fsopts, # Filesystem mount options | 105 | 'fsopts': fsopts, # Filesystem mount options |
106 | 'label': label, # Partition label | 106 | 'label': label, # Partition label |
107 | 'disk_name': disk_name, # physical disk name holding partition | 107 | 'disk_name': disk_name, # physical disk name holding partition |
108 | 'device': None, # kpartx device node for partition | 108 | 'device': None, # kpartx device node for partition |
109 | 'num': None, # Partition number | 109 | 'num': None, # Partition number |
110 | 'boot': boot, # Bootable flag | 110 | 'boot': boot, # Bootable flag |
111 | 'align': align, # Partition alignment | 111 | 'align': align, # Partition alignment |
112 | 'no_table' : no_table, # Partition does not appear in partition table | 112 | 'no_table' : no_table, # Partition does not appear in partition table |
113 | 'part_type' : part_type } # Partition type | 113 | 'part_type' : part_type} # Partition type |
114 | 114 | ||
115 | self.__add_partition(part) | 115 | self.__add_partition(part) |
116 | 116 | ||
@@ -213,7 +213,7 @@ class Image: | |||
213 | 213 | ||
214 | # Once all the partitions have been layed out, we can calculate the | 214 | # Once all the partitions have been layed out, we can calculate the |
215 | # minumim disk sizes. | 215 | # minumim disk sizes. |
216 | for disk_name, d in self.disks.items(): | 216 | for d in self.disks.values(): |
217 | d['min_size'] = d['offset'] | 217 | d['min_size'] = d['offset'] |
218 | if d['ptable_format'] == "gpt": | 218 | if d['ptable_format'] == "gpt": |
219 | d['min_size'] += GPT_OVERHEAD | 219 | d['min_size'] += GPT_OVERHEAD |
@@ -314,14 +314,14 @@ class Image: | |||
314 | 314 | ||
315 | def cleanup(self): | 315 | def cleanup(self): |
316 | if self.disks: | 316 | if self.disks: |
317 | for dev in self.disks.keys(): | 317 | for dev in self.disks: |
318 | d = self.disks[dev] | 318 | d = self.disks[dev] |
319 | try: | 319 | try: |
320 | d['disk'].cleanup() | 320 | d['disk'].cleanup() |
321 | except: | 321 | except: |
322 | pass | 322 | pass |
323 | 323 | ||
324 | def __write_partition(self, num, source_file, start, size): | 324 | def __write_partition(self, num, source_file, start, size, image_file): |
325 | """ | 325 | """ |
326 | Install source_file contents into a partition. | 326 | Install source_file contents into a partition. |
327 | """ | 327 | """ |
@@ -330,23 +330,20 @@ class Image: | |||
330 | 330 | ||
331 | # Start is included in the size so need to substract one from the end. | 331 | # Start is included in the size so need to substract one from the end. |
332 | end = start + size - 1 | 332 | end = start + size - 1 |
333 | msger.debug("Installed %s in partition %d, sectors %d-%d, size %d sectors" % (source_file, num, start, end, size)) | 333 | msger.debug("Installed %s in partition %d, sectors %d-%d, " |
334 | "size %d sectors" % (source_file, num, start, end, size)) | ||
334 | 335 | ||
335 | dd_cmd = "dd if=%s of=%s bs=%d seek=%d count=%d conv=notrunc" % \ | 336 | dd_cmd = "dd if=%s of=%s bs=%d seek=%d count=%d conv=notrunc" % \ |
336 | (source_file, self.image_file, self.sector_size, start, size) | 337 | (source_file, image_file, self.sector_size, start, size) |
337 | exec_cmd(dd_cmd) | 338 | exec_cmd(dd_cmd) |
338 | 339 | ||
339 | 340 | ||
340 | def assemble(self, image_file): | 341 | def assemble(self, image_file): |
341 | msger.debug("Installing partitions") | 342 | msger.debug("Installing partitions") |
342 | 343 | ||
343 | self.image_file = image_file | ||
344 | |||
345 | for p in self.partitions: | 344 | for p in self.partitions: |
346 | d = self.disks[p['disk_name']] | ||
347 | |||
348 | self.__write_partition(p['num'], p['source_file'], | 345 | self.__write_partition(p['num'], p['source_file'], |
349 | p['start'], p['size']) | 346 | p['start'], p['size'], image_file) |
350 | 347 | ||
351 | def create(self): | 348 | def create(self): |
352 | for dev in self.disks.keys(): | 349 | for dev in self.disks.keys(): |