[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [PATCH 3/3] Ensure proper disklabel type on boot disk if CLEARPART_TYPE_ALL. (#570483, #530225)



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

In the commit msg for rhel6-branch, can you do the rhbz references in the long
message as two Resolves: lines?

Resolves: rhbz#NUMBERx
RESOLVES: rhbz#NUMBERy

Thanks,

On Wed, 14 Apr 2010, David Lehman wrote:

If the user specified "clearpart --all" or chose "Use All Space",
make sure that the boot disk gets initialized with a disklabel
whose type is appropriate for the platform's bootloader.
---
storage/partitioning.py |   39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/storage/partitioning.py b/storage/partitioning.py
index 719e21f..20d7694 100644
--- a/storage/partitioning.py
+++ b/storage/partitioning.py
@@ -373,6 +373,45 @@ def clearPartitions(storage):
    # now remove any empty extended partitions
    removeEmptyExtendedPartitions(storage)

+    _platform = storage.anaconda.platform
+
+    # make sure that the the boot device has the correct disklabel type if
+    # we're going to completely clear it.
+    for disk in storage.partitioned:
+        if not storage.anaconda.bootloader.drivelist:
+            break
+
+        if disk.name != storage.anaconda.bootloader.drivelist[0]:
+            continue
+
+        if storage.clearPartType != CLEARPART_TYPE_ALL or \
+           (storage.clearPartDisks and disk.name not in storage.clearPartDisks):
+            continue
+
+        # don't reinitialize the disklabel if the disk contains install media
+        if filter(lambda p: p.dependsOn(disk), storage.protectedDevices):
+            continue
+
+        nativeLabelType = _platform.diskLabelType(disk.partedDevice.type)
+        if disk.format.labelType == nativeLabelType:
+            continue
+
+        if part.disk.format.labelType == "mac":
+            # remove the magic apple partition
+            for part in storage.partitions:
+                if part.disk == disk:
+                    log.debug("clearing %s" % part.name)
+                    # We can't schedule the apple map partition for removal
+                    # because parted will not allow us to remove it from the
+                    # disk. Still, we need it out of the devicetree.
+                    storage.devicetree._removeDevice(part, moddisk=False)
+
+        destroy_action = ActionDestroyFormat(disk)
+        newLabel = getFormat("disklabel", device=disk.path)
+        create_action = ActionCreateFormat(disk, format=newLabel)
+        storage.devicetree.registerAction(destroy_action)
+        storage.devicetree.registerAction(create_action)
+
def removeEmptyExtendedPartitions(storage):
    for disk in storage.partitioned:
        log.debug("checking whether disk %s has an empty extended" % disk.name)


- -- David Cantrell <dcantrell redhat com>
Red Hat / Honolulu, HI

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkvHIVcACgkQ5hsjjIy1VklQSwCePYHO8+r/udoCikuvsGDl7wkr
iCYAn343ZnInDZs+2wvLs61Pv2h3X1Ly
=CiCW
-----END PGP SIGNATURE-----


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]