FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > CentOS > CentOS

 
 
LinkBack Thread Tools
 
Old 04-19-2011, 04:34 PM
David Lehman
 
Default Add a "boot drive" concept to the bootloader since stage1 types vary.

---
pyanaconda/bootloader.py | 21 ++++++++++++++++++++-
pyanaconda/iw/cleardisks_gui.py | 3 ++-
pyanaconda/storage/partitioning.py | 6 +++---
3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index dcb022b..791b1fc 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -263,6 +263,9 @@ class BootLoader(object):
# the device the bootloader will be installed on
self._stage1_device = None

+ # the "boot drive", meaning the drive we prefer stage1 be on
+ self.stage1_drive = None
+
self._update_only = False

#
@@ -283,6 +286,7 @@ class BootLoader(object):

log.debug("new bootloader stage1 device: %s" % device.name)
self._stage1_device = device
+ self.stage1_drive = device.disks[0]

@property
def stage2_device(self):
@@ -332,6 +336,10 @@ class BootLoader(object):
# XXX requiring partitioned may break clearpart
drives = [d for d in self.storage.disks if d.partitioned]
self._drives = self._sort_drives(drives)
+
+ # set "boot drive"
+ self.stage1_drive = self._drives[0]
+
return self._drives

#
@@ -503,7 +511,18 @@ class BootLoader(object):
for slot in slots:
devices.extend(slot)

- return self._sort_drives(devices)
+ devices = self._sort_drives(devices)
+
+ # if a boot drive has been chosen put it, and devices on it, first
+ # XXX should this be done in _sort_drives instead?
+ if self.stage1_drive:
+ boot_devs = [d for d in devices if self.stage1_drive in d.disks]
+ if len(boot_devs) != len(devices):
+ for dev in reversed(boot_devs):
+ idx = devices.index(dev)
+ devices.insert(0, devices.pop(idx))
+
+ return devices

#
# boot/stage2 device access
diff --git a/pyanaconda/iw/cleardisks_gui.py b/pyanaconda/iw/cleardisks_gui.py
index cd685e8..36453a4 100644
--- a/pyanaconda/iw/cleardisks_gui.py
+++ b/pyanaconda/iw/cleardisks_gui.py
@@ -62,7 +62,7 @@ class ClearDisksWindow (InstallWindow):
cleardisks.sort(self.anaconda.storage.compareDisks )

self.anaconda.storage.config.clearPartDisks = cleardisks
- self.anaconda.bootloader.stage1_device = bootDisk
+ self.anaconda.bootloader.stage1_drive = bootDisk

def getScreen (self, anaconda):
# We can't just use exclusiveDisks here because of kickstart. First,
@@ -76,6 +76,7 @@ class ClearDisksWindow (InstallWindow):
# Skip this screen as well if there's only one disk to use.
if len(disks) == 1:
anaconda.storage.config.clearPartDisks = [disks[0].name]
+ anaconda.bootloader.stage1_drive = disks[0]
return None

(xml, self.vbox) = gui.getGladeWidget("cleardisks.glade", "vbox")
diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
index 30aee90..9aa3c0b 100644
--- a/pyanaconda/storage/partitioning.py
+++ b/pyanaconda/storage/partitioning.py
@@ -410,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.stage1_device:
+ if not bootloader or not bootloader.stage1_drive:
break

- if disk in bootloader.stage1_device.disks:
+ if disk != bootloader.stage1_drive:
continue

if storage.config.clearPartType != CLEARPART_TYPE_ALL or
@@ -961,7 +961,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 == bootloader.stage1_device.disks[0]:
+ if bootloader and disk == bootloader.stage1_drive:
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
 
Old 04-19-2011, 09:45 PM
David Cantrell
 
Default Add a "boot drive" concept to the bootloader since stage1 types vary.

Ack, though the device, disk, drive names are getting confusing. Not sure
what else they can be called.

David Lehman <dlehman@redhat.com> wrote:

> ---
> pyanaconda/bootloader.py | 21 ++++++++++++++++++++-
> pyanaconda/iw/cleardisks_gui.py | 3 ++-
> pyanaconda/storage/partitioning.py | 6 +++---
> 3 files changed, 25 insertions(+), 5 deletions(-)
>
> diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
> index dcb022b..791b1fc 100644
> --- a/pyanaconda/bootloader.py
> +++ b/pyanaconda/bootloader.py
> @@ -263,6 +263,9 @@ class BootLoader(object):
> # the device the bootloader will be installed on
> self._stage1_device = None
>
> + # the "boot drive", meaning the drive we prefer stage1 be on
> + self.stage1_drive = None
> +
> self._update_only = False
>
> #
> @@ -283,6 +286,7 @@ class BootLoader(object):
>
> log.debug("new bootloader stage1 device: %s" % device.name)
> self._stage1_device = device
> + self.stage1_drive = device.disks[0]
>
> @property
> def stage2_device(self):
> @@ -332,6 +336,10 @@ class BootLoader(object):
> # XXX requiring partitioned may break clearpart
> drives = [d for d in self.storage.disks if d.partitioned]
> self._drives = self._sort_drives(drives)
> +
> + # set "boot drive"
> + self.stage1_drive = self._drives[0]
> +
> return self._drives
>
> #
> @@ -503,7 +511,18 @@ class BootLoader(object):
> for slot in slots:
> devices.extend(slot)
>
> - return self._sort_drives(devices)
> + devices = self._sort_drives(devices)
> +
> + # if a boot drive has been chosen put it, and devices on it, first
> + # XXX should this be done in _sort_drives instead?
> + if self.stage1_drive:
> + boot_devs = [d for d in devices if self.stage1_drive in d.disks]
> + if len(boot_devs) != len(devices):
> + for dev in reversed(boot_devs):
> + idx = devices.index(dev)
> + devices.insert(0, devices.pop(idx))
> +
> + return devices
>
> #
> # boot/stage2 device access
> diff --git a/pyanaconda/iw/cleardisks_gui.py b/pyanaconda/iw/cleardisks_gui.py
> index cd685e8..36453a4 100644
> --- a/pyanaconda/iw/cleardisks_gui.py
> +++ b/pyanaconda/iw/cleardisks_gui.py
> @@ -62,7 +62,7 @@ class ClearDisksWindow (InstallWindow):
> cleardisks.sort(self.anaconda.storage.compareDisks )
>
> self.anaconda.storage.config.clearPartDisks = cleardisks
> - self.anaconda.bootloader.stage1_device = bootDisk
> + self.anaconda.bootloader.stage1_drive = bootDisk
>
> def getScreen (self, anaconda):
> # We can't just use exclusiveDisks here because of kickstart. First,
> @@ -76,6 +76,7 @@ class ClearDisksWindow (InstallWindow):
> # Skip this screen as well if there's only one disk to use.
> if len(disks) == 1:
> anaconda.storage.config.clearPartDisks = [disks[0].name]
> + anaconda.bootloader.stage1_drive = disks[0]
> return None
>
> (xml, self.vbox) = gui.getGladeWidget("cleardisks.glade", "vbox")
> diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
> index 30aee90..9aa3c0b 100644
> --- a/pyanaconda/storage/partitioning.py
> +++ b/pyanaconda/storage/partitioning.py
> @@ -410,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.stage1_device:
> + if not bootloader or not bootloader.stage1_drive:
> break
>
> - if disk in bootloader.stage1_device.disks:
> + if disk != bootloader.stage1_drive:
> continue
>
> if storage.config.clearPartType != CLEARPART_TYPE_ALL or
> @@ -961,7 +961,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 == bootloader.stage1_device.disks[0]:
> + if bootloader and disk == bootloader.stage1_drive:
> 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

--
David Cantrell <dcantrell@redhat.com>
Supervisor, Installer Engineering Team
Red Hat, Inc. | Seattle, WA | UTC-7

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 01:54 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org