diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
index 11f2acf..f7947f3 100644
--- a/pyanaconda/storage/__init__.py
+++ b/pyanaconda/storage/__init__.py
@@ -35,6 +35,7 @@ from pyanaconda import iutil
from pyanaconda.constants import *
from pykickstart.constants import *
from pyanaconda.flags import flags
+from pyanaconda import platform
from errors import *
from devices import *
@@ -187,19 +188,16 @@ def storageComplete(anaconda):
# Warn the user if they are trying to boot a GPT disk on a non-EFI system
# This may or may not work -- we have no way to tell, so just warn them
- bootdisk = anaconda.bootloader.drivelist[0]
- bootdisk = anaconda.storage.devicetree.getDeviceByName(bootdi sk)
-
- if not iutil.isEfi() and bootdisk and bootdisk.format
- and bootdisk.format.type == 'disklabel'
- and bootdisk.format.labelType == 'gpt':
- warning = _("
<b>WARNING:</b>
"
- "You are using a GPT bootdisk on a non-EFI "
- "system. This may not work, depending on your BIOS's "
- "support for booting from GPT disks.")
- log.warning("Using a GPT bootdisk on non-EFI system")
- else:
- warning = ""
+ warning = ""
+ if not isinstance(anaconda.platform, platform.EFI):
+ disks = (anaconda.bootloader.stage1_device.disks
+ + anaconda.bootloader.stage2_device.disks)
+ if [d for d in disks if getattr(d.format, "labelType", None) == "gpt"]:
+ warning = _("
<b>WARNING:</b>
"
+ "You are using a GPT bootdisk on a non-EFI "
+ "system. This may not work, depending on your "
+ "BIOS's support for booting from GPT disks.")
+ log.warning("Using a GPT bootdisk on non-EFI system")
rc = anaconda.intf.messageWindow(_("Confirm"),
_("The partitioning options you have selected "
@@ -375,7 +373,7 @@ class Storage(object):
# now set the boot partition's flag
try:
- boot = self.platform.bootDevice()
+ boot = self.platform.bootDevice
if boot.type == "mdarray":
bootDevs = boot.parents
else:
@@ -460,6 +458,8 @@ class Storage(object):
hasattr(self.anaconda, "upgradeRoot"):
self.anaconda.rootParts = None
self.anaconda.upgradeRoot = None
+ if self.platform:
+ self.platform.bootloader.clear_drive_list()
self.dumpState("initial")
if w:
w.pop()
@@ -1055,7 +1055,7 @@ class Storage(object):
root = self.fsset.rootDevice
swaps = self.fsset.swapDevices
try:
- boot = self.platform.bootDevice()
+ boot = self.platform.bootDevice
except (DeviceError, AttributeError):
# AttributeError means we have no anaconda or platform. it's ok.
boot = None
@@ -1144,7 +1144,8 @@ class Storage(object):
"or may not produce a working system."))
if self.platform:
- errors.extend(self.platform.checkBootRequest(boot) )
+ errors.extend(self.platform.checkBootRequest())
+ errors.extend(self.platform.checkBootLoaderRequest ())
if not swaps:
from pyanaconda.storage.size import Size
diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
index a699125..d83ed1b 100644
--- a/pyanaconda/storage/partitioning.py
+++ b/pyanaconda/storage/partitioning.py
@@ -94,7 +94,7 @@ def _schedulePartitions(storage, disks):
if request.fstype is None:
request.fstype = storage.defaultFSType
elif request.fstype in ("prepboot", "efi") and
- storage.platform.bootDevice():
+ storage.platform.bootDevice:
# there should never be a need for more than one of these
# partitions, so skip them.
continue
@@ -186,11 +186,11 @@ def doAutoPartition(anaconda):
devs = []
if anaconda.storage.doAutoPart:
- clearPartitions(anaconda.storage)
+ clearPartitions(anaconda.storage, bootloader=anaconda.bootloader)
# update the bootloader's drive list to add disks which have their
# whole disk format replaced by a disklabel. Make sure to keep any
# previous boot order selection from clearpart_gui or kickstart
- anaconda.bootloader.updateDriveList(anaconda.bootl oader.drivelist)
+ anaconda.bootloader.clear_drive_list()
# run the autopart function to allocate and grow partitions
try:
- doPartitioning(anaconda.storage)
+ doPartitioning(anaconda.storage, bootloader=anaconda.bootloader)
if anaconda.storage.doAutoPart:
_scheduleLVs(anaconda.storage, devs)
@@ -332,8 +332,6 @@ def shouldClear(device, clearPartType, clearPartDisks=None):
if device.immutable:
return False
- # TODO: do platform-specific checks on ia64, pSeries, iSeries, mac
-
return True
- bootloader -- a bootloaderInfo instance
+ bootloader -- a BootLoader instance
NOTES:
@@ -412,10 +410,10 @@ def clearPartitions(storage, bootloader=None):
# 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 bootloader or not bootloader.drivelist:
+ if not bootloader or not bootloader.stage1_device:
break
- if disk.name != bootloader.drivelist[0]:
+ if disk in bootloader.stage1_device.disks:
continue
if storage.config.clearPartType != CLEARPART_TYPE_ALL or
@@ -821,7 +819,7 @@ def doPartitioning(storage, bootloader=None):
"""
if not hasattr(storage.platform, "diskLabelType"):
@@ -849,13 +847,11 @@ def doPartitioning(storage, bootloader=None):
# start over with flexible-size requests
part.req_size = part.req_base_size
- # FIXME: isn't there a better place for this to happen?
try:
- bootDev = storage.platform.bootDevice()
+ bootDev = storage.platform.bootDevice
except DeviceError:
- bootDev = None
-
- if bootDev:
+ pass
+ else:
bootDev.req_bootable = True
removeNewPartitions(disks, partitions)
@@ -966,9 +962,7 @@ def allocatePartitions(storage, disks, partitions, freespace, bootloader=None):
req_disks.sort(key=lambda d: d.name, cmp=storage.compareDisks)
boot_index = None
for disk in req_disks:
- if bootloader and
- disk.name in bootloader.drivelist and
- disk.name == bootloader.drivelist[0]:
+ if bootloader and disk == bootloader.stage1_device.disks[0]:
boot_index = req_disks.index(disk)
if boot_index is not None and len(req_disks) > 1:
--
1.7.3.4
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list