Re: [PATCH] Update ppc SMS bios after installation

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

 



I second wwoods' comments and add my own.

On 10/25/11 16:48, Mark Hamzy wrote:
Here is a proposed patch that updates a PowerPC's BIOS to boot from the
newly installed hard disk rather than back to the installer.

---
pyanaconda/bootloader.py | 11 +++++++
pyanaconda/platform.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 87 insertions(+)

diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index ca43868..e156be9 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -1832,6 +1832,17 @@ class IPSeriesYaboot(Yaboot):
config.write("nonvram\n") # only on pSeries?
config.write("fstype=raw\n")

+ #
+ # installation
+ #
+
+ def install(self, install_root=""):
+ import platform
+
+ platform.updatePowerPCBootList(self.storage)
+
+ super(IPSeriesYaboot, self).install(install_root=install_root)
+

class MacYaboot(Yaboot):
prog = "mkofboot"
diff --git a/pyanaconda/platform.py b/pyanaconda/platform.py
index 82b4b55..779cb01 100644
--- a/pyanaconda/platform.py
+++ b/pyanaconda/platform.py
@@ -32,6 +32,9 @@ import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
N_ = lambda x: x

+import logging
+log = logging.getLogger("storage")
+
class Platform(object):
"""Platform

@@ -322,3 +325,76 @@ def getPlatform(anaconda):
return X86(anaconda)
else:
raise SystemError, "Could not determine system architecture."
+
+def updatePowerPCBootList(storage):
+ if not iutil.isPPC():
+ # This function is only for PowerPC machines!
+ return
+
+ # ofpathname relies on bc being installed!
+ rc = iutil.execWithRedirect("which", ["bc"],
+ stdout="/dev/null", stderr="/dev/hvc1",
+ root="/")
+
+ if rc:
+ log.error ("FAIL: bc is not installed!")

And this depends on 'which' in the installer environment, which is entirely unnecessary. If bc is required for a successful ofpathname run, we just need to ensure it's in the installer environment. ofpathname can report bc not existing (it should if it doesn't).

+
+ return
+
+ buf = iutil.execWithCapture("nvram",
+ ["--print-config=boot-device"],
+ stderr="/dev/hvc1",
+ root="/")
+
+ if len(buf) == 0:
+ log.error ("FAIL: nvram --print-config=boot-device")
+
+ return
+
+ boot_list = buf.strip ().split ()
+
+ log.debug ("updatePowerPCBootList: boot_list = %s" % boot_list)
+
+ import parted
+
+ prep_locations = []
+
+ for partition in storage.partitions:
+ if partition.getFlag(parted.PARTITION_PREP):
+ log.debug ("updatePowerPCBootList: %s partition is a prep partition" %
partition.path)
+
+ buf = iutil.execWithCapture("ofpathname",
+ [partition.path],
+ stderr="/dev/hvc1",
+ root="/")
+
+ if len(buf) > 0:
+ of_location = buf.strip ()
+ prep_locations += [of_location]
+
+ else:
+ log.error ("FAIL: ofpathname %s" % partition.path)
+
+ log.debug ("updatePowerPCBootList: prep_locations = %s" % prep_locations)
+
+ # Right now, booting to a machine with only one PReP partition is easy.
+ # If there are two or more, then we would need a new dialog
+ if len(prep_locations) == 1:
+ boot_disk = prep_locations[0]
+
+ # Place the disk containing the PReP partition first.
+ # Remove all other occurances of it.
+ boot_list = [boot_disk] + filter (lambda x: x != boot_disk, boot_list)
+
+ log.debug ("updatePowerPCBootList: boot_list = %s" % boot_list)
+
+ update_value = "boot-device=%s" % (" ".join (boot_list),)
+
+ rc = iutil.execWithRedirect("nvram", ["--update-config", update_value],
+ stdout="/dev/hvc1", stderr="/dev/hvc1",
+ root="/")
+ if rc:
+ log.error ("FAIL: nvram --update-config %s" % update_value)
+
+ else:
+ log.info ("Updated PPC boot list with the command: nvram
--update-config %s" % update_value)

--
David Cantrell <dcantrell@xxxxxxxxxx>
Supervisor, Installer Engineering Team
Red Hat, Inc. | Westford, MA | EST5EDT

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


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux