diff options
Diffstat (limited to 'scripts/lib/wic/utils/partitionedfs.py')
| -rw-r--r-- | scripts/lib/wic/utils/partitionedfs.py | 154 |
1 files changed, 77 insertions, 77 deletions
diff --git a/scripts/lib/wic/utils/partitionedfs.py b/scripts/lib/wic/utils/partitionedfs.py index 2f884a3cb8..5a103bbc7e 100644 --- a/scripts/lib/wic/utils/partitionedfs.py +++ b/scripts/lib/wic/utils/partitionedfs.py | |||
| @@ -129,14 +129,14 @@ class Image(object): | |||
| 129 | self._partitions_layed_out = True | 129 | self._partitions_layed_out = True |
| 130 | 130 | ||
| 131 | # Go through partitions in the order they are added in .ks file | 131 | # Go through partitions in the order they are added in .ks file |
| 132 | for n in range(len(self.partitions)): | 132 | for num in range(len(self.partitions)): |
| 133 | p = self.partitions[n] | 133 | part = self.partitions[num] |
| 134 | 134 | ||
| 135 | if not self.disks.has_key(p['disk_name']): | 135 | if not self.disks.has_key(part['disk_name']): |
| 136 | raise ImageError("No disk %s for partition %s" \ | 136 | raise ImageError("No disk %s for partition %s" \ |
| 137 | % (p['disk_name'], p['mountpoint'])) | 137 | % (part['disk_name'], part['mountpoint'])) |
| 138 | 138 | ||
| 139 | if ptable_format == 'msdos' and p['part_type']: | 139 | if ptable_format == 'msdos' and part['part_type']: |
| 140 | # The --part-type can also be implemented for MBR partitions, | 140 | # The --part-type can also be implemented for MBR partitions, |
| 141 | # in which case it would map to the 1-byte "partition type" | 141 | # in which case it would map to the 1-byte "partition type" |
| 142 | # filed at offset 3 of the partition entry. | 142 | # filed at offset 3 of the partition entry. |
| @@ -144,79 +144,79 @@ class Image(object): | |||
| 144 | "implemented for msdos partitions") | 144 | "implemented for msdos partitions") |
| 145 | 145 | ||
| 146 | # Get the disk where the partition is located | 146 | # Get the disk where the partition is located |
| 147 | d = self.disks[p['disk_name']] | 147 | disk = self.disks[part['disk_name']] |
| 148 | d['numpart'] += 1 | 148 | disk['numpart'] += 1 |
| 149 | if not p['no_table']: | 149 | if not part['no_table']: |
| 150 | d['realpart'] += 1 | 150 | disk['realpart'] += 1 |
| 151 | d['ptable_format'] = ptable_format | 151 | disk['ptable_format'] = ptable_format |
| 152 | 152 | ||
| 153 | if d['numpart'] == 1: | 153 | if disk['numpart'] == 1: |
| 154 | if ptable_format == "msdos": | 154 | if ptable_format == "msdos": |
| 155 | overhead = MBR_OVERHEAD | 155 | overhead = MBR_OVERHEAD |
| 156 | elif ptable_format == "gpt": | 156 | elif ptable_format == "gpt": |
| 157 | overhead = GPT_OVERHEAD | 157 | overhead = GPT_OVERHEAD |
| 158 | 158 | ||
| 159 | # Skip one sector required for the partitioning scheme overhead | 159 | # Skip one sector required for the partitioning scheme overhead |
| 160 | d['offset'] += overhead | 160 | disk['offset'] += overhead |
| 161 | 161 | ||
| 162 | if d['realpart'] > 3: | 162 | if disk['realpart'] > 3: |
| 163 | # Reserve a sector for EBR for every logical partition | 163 | # Reserve a sector for EBR for every logical partition |
| 164 | # before alignment is performed. | 164 | # before alignment is performed. |
| 165 | if ptable_format == "msdos": | 165 | if ptable_format == "msdos": |
| 166 | d['offset'] += 1 | 166 | disk['offset'] += 1 |
| 167 | 167 | ||
| 168 | 168 | ||
| 169 | if p['align']: | 169 | if part['align']: |
| 170 | # If not first partition and we do have alignment set we need | 170 | # If not first partition and we do have alignment set we need |
| 171 | # to align the partition. | 171 | # to align the partition. |
| 172 | # FIXME: This leaves a empty spaces to the disk. To fill the | 172 | # FIXME: This leaves a empty spaces to the disk. To fill the |
| 173 | # gaps we could enlargea the previous partition? | 173 | # gaps we could enlargea the previous partition? |
| 174 | 174 | ||
| 175 | # Calc how much the alignment is off. | 175 | # Calc how much the alignment is off. |
| 176 | align_sectors = d['offset'] % (p['align'] * 1024 / self.sector_size) | 176 | align_sectors = disk['offset'] % (part['align'] * 1024 / self.sector_size) |
| 177 | 177 | ||
| 178 | if align_sectors: | 178 | if align_sectors: |
| 179 | # If partition is not aligned as required, we need | 179 | # If partition is not aligned as required, we need |
| 180 | # to move forward to the next alignment point | 180 | # to move forward to the next alignment point |
| 181 | align_sectors = (p['align'] * 1024 / self.sector_size) - align_sectors | 181 | align_sectors = (part['align'] * 1024 / self.sector_size) - align_sectors |
| 182 | 182 | ||
| 183 | msger.debug("Realignment for %s%s with %s sectors, original" | 183 | msger.debug("Realignment for %s%s with %s sectors, original" |
| 184 | " offset %s, target alignment is %sK." % | 184 | " offset %s, target alignment is %sK." % |
| 185 | (p['disk_name'], d['numpart'], align_sectors, | 185 | (part['disk_name'], disk['numpart'], align_sectors, |
| 186 | d['offset'], p['align'])) | 186 | disk['offset'], part['align'])) |
| 187 | 187 | ||
| 188 | # increase the offset so we actually start the partition on right alignment | 188 | # increase the offset so we actually start the partition on right alignment |
| 189 | d['offset'] += align_sectors | 189 | disk['offset'] += align_sectors |
| 190 | 190 | ||
| 191 | p['start'] = d['offset'] | 191 | part['start'] = disk['offset'] |
| 192 | d['offset'] += p['size'] | 192 | disk['offset'] += part['size'] |
| 193 | 193 | ||
| 194 | p['type'] = 'primary' | 194 | part['type'] = 'primary' |
| 195 | if not p['no_table']: | 195 | if not part['no_table']: |
| 196 | p['num'] = d['realpart'] | 196 | part['num'] = disk['realpart'] |
| 197 | else: | 197 | else: |
| 198 | p['num'] = 0 | 198 | part['num'] = 0 |
| 199 | 199 | ||
| 200 | if d['ptable_format'] == "msdos": | 200 | if disk['ptable_format'] == "msdos": |
| 201 | if d['realpart'] > 3: | 201 | if disk['realpart'] > 3: |
| 202 | p['type'] = 'logical' | 202 | part['type'] = 'logical' |
| 203 | p['num'] = d['realpart'] + 1 | 203 | part['num'] = disk['realpart'] + 1 |
| 204 | 204 | ||
| 205 | d['partitions'].append(n) | 205 | disk['partitions'].append(num) |
| 206 | msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " | 206 | msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " |
| 207 | "sectors (%d bytes)." \ | 207 | "sectors (%d bytes)." \ |
| 208 | % (p['mountpoint'], p['disk_name'], p['num'], | 208 | % (part['mountpoint'], part['disk_name'], part['num'], |
| 209 | p['start'], p['start'] + p['size'] - 1, | 209 | part['start'], part['start'] + part['size'] - 1, |
| 210 | p['size'], p['size'] * self.sector_size)) | 210 | part['size'], part['size'] * self.sector_size)) |
| 211 | 211 | ||
| 212 | # Once all the partitions have been layed out, we can calculate the | 212 | # Once all the partitions have been layed out, we can calculate the |
| 213 | # minumim disk sizes. | 213 | # minumim disk sizes. |
| 214 | for d in self.disks.values(): | 214 | for disk in self.disks.values(): |
| 215 | d['min_size'] = d['offset'] | 215 | disk['min_size'] = disk['offset'] |
| 216 | if d['ptable_format'] == "gpt": | 216 | if disk['ptable_format'] == "gpt": |
| 217 | d['min_size'] += GPT_OVERHEAD | 217 | disk['min_size'] += GPT_OVERHEAD |
| 218 | 218 | ||
| 219 | d['min_size'] *= self.sector_size | 219 | disk['min_size'] *= self.sector_size |
| 220 | 220 | ||
| 221 | def __create_partition(self, device, parttype, fstype, start, size): | 221 | def __create_partition(self, device, parttype, fstype, start, size): |
| 222 | """ Create a partition on an image described by the 'device' object. """ | 222 | """ Create a partition on an image described by the 'device' object. """ |
| @@ -237,21 +237,21 @@ class Image(object): | |||
| 237 | self.layout_partitions() | 237 | self.layout_partitions() |
| 238 | 238 | ||
| 239 | for dev in self.disks.keys(): | 239 | for dev in self.disks.keys(): |
| 240 | d = self.disks[dev] | 240 | disk = self.disks[dev] |
| 241 | msger.debug("Initializing partition table for %s" % \ | 241 | msger.debug("Initializing partition table for %s" % \ |
| 242 | (d['disk'].device)) | 242 | (disk['disk'].device)) |
| 243 | exec_native_cmd("parted -s %s mklabel %s" % \ | 243 | exec_native_cmd("parted -s %s mklabel %s" % \ |
| 244 | (d['disk'].device, d['ptable_format']), | 244 | (disk['disk'].device, disk['ptable_format']), |
| 245 | self.native_sysroot) | 245 | self.native_sysroot) |
| 246 | 246 | ||
| 247 | msger.debug("Creating partitions") | 247 | msger.debug("Creating partitions") |
| 248 | 248 | ||
| 249 | for p in self.partitions: | 249 | for part in self.partitions: |
| 250 | if p['num'] == 0: | 250 | if part['num'] == 0: |
| 251 | continue | 251 | continue |
| 252 | 252 | ||
| 253 | d = self.disks[p['disk_name']] | 253 | disk = self.disks[part['disk_name']] |
| 254 | if d['ptable_format'] == "msdos" and p['num'] == 5: | 254 | if disk['ptable_format'] == "msdos" and part['num'] == 5: |
| 255 | # Create an extended partition (note: extended | 255 | # Create an extended partition (note: extended |
| 256 | # partition is described in MBR and contains all | 256 | # partition is described in MBR and contains all |
| 257 | # logical partitions). The logical partitions save a | 257 | # logical partitions). The logical partitions save a |
| @@ -263,17 +263,17 @@ class Image(object): | |||
| 263 | # starts a sector before the first logical partition, | 263 | # starts a sector before the first logical partition, |
| 264 | # add a sector at the back, so that there is enough | 264 | # add a sector at the back, so that there is enough |
| 265 | # room for all logical partitions. | 265 | # room for all logical partitions. |
| 266 | self.__create_partition(d['disk'].device, "extended", | 266 | self.__create_partition(disk['disk'].device, "extended", |
| 267 | None, p['start'] - 1, | 267 | None, part['start'] - 1, |
| 268 | d['offset'] - p['start'] + 1) | 268 | disk['offset'] - part['start'] + 1) |
| 269 | 269 | ||
| 270 | if p['fstype'] == "swap": | 270 | if part['fstype'] == "swap": |
| 271 | parted_fs_type = "linux-swap" | 271 | parted_fs_type = "linux-swap" |
| 272 | elif p['fstype'] == "vfat": | 272 | elif part['fstype'] == "vfat": |
| 273 | parted_fs_type = "fat32" | 273 | parted_fs_type = "fat32" |
| 274 | elif p['fstype'] == "msdos": | 274 | elif part['fstype'] == "msdos": |
| 275 | parted_fs_type = "fat16" | 275 | parted_fs_type = "fat16" |
| 276 | elif p['fstype'] == "ontrackdm6aux3": | 276 | elif part['fstype'] == "ontrackdm6aux3": |
| 277 | parted_fs_type = "ontrackdm6aux3" | 277 | parted_fs_type = "ontrackdm6aux3" |
| 278 | else: | 278 | else: |
| 279 | # Type for ext2/ext3/ext4/btrfs | 279 | # Type for ext2/ext3/ext4/btrfs |
| @@ -281,55 +281,55 @@ class Image(object): | |||
| 281 | 281 | ||
| 282 | # Boot ROM of OMAP boards require vfat boot partition to have an | 282 | # Boot ROM of OMAP boards require vfat boot partition to have an |
| 283 | # even number of sectors. | 283 | # even number of sectors. |
| 284 | if p['mountpoint'] == "/boot" and p['fstype'] in ["vfat", "msdos"] \ | 284 | if part['mountpoint'] == "/boot" and part['fstype'] in ["vfat", "msdos"] \ |
| 285 | and p['size'] % 2: | 285 | and part['size'] % 2: |
| 286 | msger.debug("Substracting one sector from '%s' partition to " \ | 286 | msger.debug("Substracting one sector from '%s' partition to " \ |
| 287 | "get even number of sectors for the partition" % \ | 287 | "get even number of sectors for the partition" % \ |
| 288 | p['mountpoint']) | 288 | part['mountpoint']) |
| 289 | p['size'] -= 1 | 289 | part['size'] -= 1 |
| 290 | 290 | ||
| 291 | self.__create_partition(d['disk'].device, p['type'], | 291 | self.__create_partition(disk['disk'].device, part['type'], |
| 292 | parted_fs_type, p['start'], p['size']) | 292 | parted_fs_type, part['start'], part['size']) |
| 293 | 293 | ||
| 294 | if p['part_type']: | 294 | if part['part_type']: |
| 295 | msger.debug("partition %d: set type UID to %s" % \ | 295 | msger.debug("partition %d: set type UID to %s" % \ |
| 296 | (p['num'], p['part_type'])) | 296 | (part['num'], part['part_type'])) |
| 297 | exec_native_cmd("sgdisk --typecode=%d:%s %s" % \ | 297 | exec_native_cmd("sgdisk --typecode=%d:%s %s" % \ |
| 298 | (p['num'], p['part_type'], | 298 | (part['num'], part['part_type'], |
| 299 | d['disk'].device), self.native_sysroot) | 299 | disk['disk'].device), self.native_sysroot) |
| 300 | 300 | ||
| 301 | if p['uuid']: | 301 | if part['uuid']: |
| 302 | msger.debug("partition %d: set UUID to %s" % \ | 302 | msger.debug("partition %d: set UUID to %s" % \ |
| 303 | (p['num'], p['uuid'])) | 303 | (part['num'], part['uuid'])) |
| 304 | exec_native_cmd("sgdisk --partition-guid=%d:%s %s" % \ | 304 | exec_native_cmd("sgdisk --partition-guid=%d:%s %s" % \ |
| 305 | (p['num'], p['uuid'], d['disk'].device), | 305 | (part['num'], part['uuid'], disk['disk'].device), |
| 306 | self.native_sysroot) | 306 | self.native_sysroot) |
| 307 | 307 | ||
| 308 | if p['boot']: | 308 | if part['boot']: |
| 309 | flag_name = "legacy_boot" if d['ptable_format'] == 'gpt' else "boot" | 309 | flag_name = "legacy_boot" if disk['ptable_format'] == 'gpt' else "boot" |
| 310 | msger.debug("Set '%s' flag for partition '%s' on disk '%s'" % \ | 310 | msger.debug("Set '%s' flag for partition '%s' on disk '%s'" % \ |
| 311 | (flag_name, p['num'], d['disk'].device)) | 311 | (flag_name, part['num'], disk['disk'].device)) |
| 312 | exec_native_cmd("parted -s %s set %d %s on" % \ | 312 | exec_native_cmd("parted -s %s set %d %s on" % \ |
| 313 | (d['disk'].device, p['num'], flag_name), | 313 | (disk['disk'].device, part['num'], flag_name), |
| 314 | self.native_sysroot) | 314 | self.native_sysroot) |
| 315 | 315 | ||
| 316 | # Parted defaults to enabling the lba flag for fat16 partitions, | 316 | # Parted defaults to enabling the lba flag for fat16 partitions, |
| 317 | # which causes compatibility issues with some firmware (and really | 317 | # which causes compatibility issues with some firmware (and really |
| 318 | # isn't necessary). | 318 | # isn't necessary). |
| 319 | if parted_fs_type == "fat16": | 319 | if parted_fs_type == "fat16": |
| 320 | if d['ptable_format'] == 'msdos': | 320 | if disk['ptable_format'] == 'msdos': |
| 321 | msger.debug("Disable 'lba' flag for partition '%s' on disk '%s'" % \ | 321 | msger.debug("Disable 'lba' flag for partition '%s' on disk '%s'" % \ |
| 322 | (p['num'], d['disk'].device)) | 322 | (part['num'], disk['disk'].device)) |
| 323 | exec_native_cmd("parted -s %s set %d lba off" % \ | 323 | exec_native_cmd("parted -s %s set %d lba off" % \ |
| 324 | (d['disk'].device, p['num']), | 324 | (disk['disk'].device, part['num']), |
| 325 | self.native_sysroot) | 325 | self.native_sysroot) |
| 326 | 326 | ||
| 327 | def cleanup(self): | 327 | def cleanup(self): |
| 328 | if self.disks: | 328 | if self.disks: |
| 329 | for dev in self.disks: | 329 | for dev in self.disks: |
| 330 | d = self.disks[dev] | 330 | disk = self.disks[dev] |
| 331 | try: | 331 | try: |
| 332 | d['disk'].cleanup() | 332 | disk['disk'].cleanup() |
| 333 | except: | 333 | except: |
| 334 | pass | 334 | pass |
| 335 | 335 | ||
| @@ -354,8 +354,8 @@ class Image(object): | |||
| 354 | 354 | ||
| 355 | def create(self): | 355 | def create(self): |
| 356 | for dev in self.disks.keys(): | 356 | for dev in self.disks.keys(): |
| 357 | d = self.disks[dev] | 357 | disk = self.disks[dev] |
| 358 | d['disk'].create() | 358 | disk['disk'].create() |
| 359 | 359 | ||
| 360 | self.__format_disks() | 360 | self.__format_disks() |
| 361 | 361 | ||
