[master/rhel7-branch][PATCH] Don't allow bootloader and /boot on iSCSI on s390 (#1034222)

Vratislav Podzimek vpodzime at redhat.com
Tue Nov 26 13:41:15 UTC 2013


s390(x) cannot boot from an iSCSI disk.

Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
 pyanaconda/bootloader.py | 11 +++++++++++
 pyanaconda/kickstart.py  | 10 ++++++----
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index f9a1cc5..414c5cf 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -26,6 +26,7 @@ import sys
 import os
 import re
 import struct
+import blivet
 from parted import PARTITION_BIOS_GRUB
 
 from pyanaconda import iutil
@@ -573,6 +574,11 @@ class BootLoader(object):
             log.debug("stage1 device cannot be of type %s" % device.type)
             return False
 
+        if blivet.arch.isS390() and all(isinstance(disk, blivet.devices.iScsiDiskDevice)
+                                        for disk in device.disks):
+            log.debug("stage1 device cannot be on an iSCSI disk on s390(x)")
+            return False
+
         description = self.device_description(device)
 
         if self.stage2_is_valid_stage1 and device == self.stage2_device:
@@ -684,6 +690,11 @@ class BootLoader(object):
         if device.protected:
             valid = False
 
+        if blivet.arch.isS390() and all(isinstance(disk, blivet.devices.iScsiDiskDevice)
+                                        for disk in device.disks):
+            self.errors.append(_("%s cannot be on an iSCSI disk on s390(x)") % self.stage2_description)
+            valid = False
+
         if not self._device_type_match(device, self.stage2_device_types):
             self.errors.append(_("%s cannot be of type %s")
                                % (self.stage2_description, device.type))
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
index d615208..ade0761 100644
--- a/pyanaconda/kickstart.py
+++ b/pyanaconda/kickstart.py
@@ -295,12 +295,14 @@ class Bootloader(commands.bootloader.F19_Bootloader):
         if self.timeout is not None:
             storage.bootloader.timeout = self.timeout
 
-        # Throw out drives specified that don't exist.
+        # Throw out drives specified that don't exist or cannot be used (iSCSI
+        # device on an s390 machine)
         disk_names = [d.name for d in storage.disks
-                                if not d.format.hidden and not d.protected]
+                      if not d.format.hidden and not d.protected and
+                      (not blivet.arch.isS390() or not isinstance(d, blivet.devices.iScsiDiskDevice))]
         for drive in self.driveorder[:]:
             if drive not in disk_names:
-                log.warning("requested drive %s in boot drive order doesn't exist" % drive)
+                log.warning("requested drive %s in boot drive order doesn't exist or cannot be used" % drive)
                 self.driveorder.remove(drive)
 
         storage.bootloader.disk_order = self.driveorder
@@ -308,7 +310,7 @@ class Bootloader(commands.bootloader.F19_Bootloader):
         if self.bootDrive:
             if not self.bootDrive in disk_names:
                 raise KickstartValueError, formatErrorMsg(self.lineno,
-                        msg="Requested boot drive %s doesn't exist" % self.bootDrive)
+                        msg="Requested boot drive %s doesn't exist or cannot be used" % self.bootDrive)
         else:
             self.bootDrive = disk_names[0]
 
-- 
1.8.4.2



More information about the anaconda-patches mailing list