[anaconda:master] Patches to allow /boot to be RAID1 with EFI (#791136)

mulhern amulhern at redhat.com
Tue Jun 24 19:49:53 UTC 2014


Resolves: rhbz#791136

Signed-off-by: mulhern <amulhern at redhat.com>
---
 pyanaconda/bootloader.py           | 20 ++++++++++----------
 pyanaconda/storage_utils.py        |  2 +-
 pyanaconda/ui/gui/spokes/custom.py |  9 +++++----
 3 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index c0e34da..41a906f 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -1713,16 +1713,9 @@ class EFIGRUB(GRUB2):
         ret = self._config_dir.replace('efi/', '')
         return "\\" + ret.replace('/', '\\')
 
-    def add_efi_boot_target(self):
-        if self.stage1_device.type == "partition":
-            boot_disk = self.stage1_device.disk
-            boot_part_num = self.stage1_device.partedPartition.number
-        elif self.stage1_device.type == "mdarray":
-            # FIXME: I'm just guessing here. This probably needs the full
-            #        treatment, ie: multiple targets for each member.
-            boot_disk = self.stage1_device.parents[0].disk
-            boot_part_num = self.stage1_device.parents[0].partedPartition.number
-        boot_part_num = str(boot_part_num)
+    def _add_single_efi_boot_target(self, disk):
+        boot_disk = disk.disk
+        boot_part_num = disk.partedPartition.number
 
         rc = self.efibootmgr("-c", "-w", "-L", productName,
                              "-d", boot_disk.path, "-p", boot_part_num,
@@ -1732,6 +1725,13 @@ class EFIGRUB(GRUB2):
         if rc:
             raise BootLoaderError("failed to set new efi boot target. This is most likely a kernel bug.")
 
+    def add_efi_boot_target(self):
+        if self.stage1_device.type == "partition":
+            self._add_single_efi_boot_target(self.stage1_device)
+        elif self.stage1_device.type == "mdarray":
+            for parent in self.stage1_device.parents:
+                self._add_single_efi_boot_target(parent)
+
     def install(self, args=None):
         if not flags.leavebootorder:
             self.remove_efi_boot_target()
diff --git a/pyanaconda/storage_utils.py b/pyanaconda/storage_utils.py
index fb66e8f..e6e3f70 100644
--- a/pyanaconda/storage_utils.py
+++ b/pyanaconda/storage_utils.py
@@ -55,7 +55,7 @@ DEVICE_TEXT_MAP = {DEVICE_TYPE_LVM: DEVICE_TEXT_LVM,
                    DEVICE_TYPE_LVM_THINP: DEVICE_TEXT_LVM_THINP,
                    DEVICE_TYPE_DISK: DEVICE_TEXT_DISK}
 
-PARTITION_ONLY_FORMAT_TYPES = ("efi", "macefi", "prepboot", "biosboot", "appleboot")
+PARTITION_ONLY_FORMAT_TYPES = ("macefi", "prepboot", "biosboot", "appleboot")
 
 MOUNTPOINT_DESCRIPTIONS = {"Swap": N_("The 'swap' area on your computer is used by the operating\n"
                                       "system when running low on memory."),
diff --git a/pyanaconda/ui/gui/spokes/custom.py b/pyanaconda/ui/gui/spokes/custom.py
index 18c1759..83c7f1a 100644
--- a/pyanaconda/ui/gui/spokes/custom.py
+++ b/pyanaconda/ui/gui/spokes/custom.py
@@ -63,7 +63,7 @@ from blivet.devicelibs import raid
 from blivet.devices import LUKSDevice
 
 from pyanaconda.storage_utils import ui_storage_logger, device_type_from_autopart
-from pyanaconda.storage_utils import DEVICE_TEXT_PARTITION, DEVICE_TEXT_MAP
+from pyanaconda.storage_utils import DEVICE_TEXT_PARTITION, DEVICE_TEXT_MAP, DEVICE_TEXT_MD
 from pyanaconda.storage_utils import PARTITION_ONLY_FORMAT_TYPES, MOUNTPOINT_DESCRIPTIONS
 from pyanaconda.storage_utils import NAMED_DEVICE_TYPES, CONTAINER_DEVICE_TYPES
 
@@ -617,9 +617,10 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
             :param raid_level: instance of blivet.devicelibs.raid.RAIDLevel or None
         """
         error = None
-        if device_type != DEVICE_TYPE_PARTITION and mountpoint == "/boot/efi":
-            error = (_("/boot/efi must be on a device of type %s")
-                     % _(DEVICE_TEXT_PARTITION))
+        if device_type not in (DEVICE_TYPE_PARTITION, DEVICE_TYPE_MD) and \
+           mountpoint == "/boot/efi":
+            error = (_("/boot/efi must be on a device of type %s or %s")
+                     % (_(DEVICE_TEXT_PARTITION), _(DEVICE_TEXT_MD)))
         elif device_type != DEVICE_TYPE_PARTITION and \
              new_fs_type in PARTITION_ONLY_FORMAT_TYPES:
             error = (_("%(fs)s must be on a device of type %(type)s")
-- 
1.9.3



More information about the anaconda-patches mailing list