--- pyanaconda/bootloader.py | 69 +++++++++++++++++++++++++++++++++++++++++++++- pyanaconda/platform.py | 4 +- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py index 0e759f5..c339e58 100644 --- a/pyanaconda/bootloader.py +++ b/pyanaconda/bootloader.py @@ -1794,7 +1794,7 @@ class GRUB2(GRUB): def install(self): # XXX will installing to multiple drives work as expected with GRUBv2? for (stage1dev, stage2dev) in self.install_targets: - args = ["--no-floppy", self.grub_device_name(stage1dev)] + args = ["--no-floppy", stage1dev.path] if stage1dev == stage2dev: # This is hopefully a temporary hack. GRUB2 currently refuses # to install to a partition's boot block without --force. @@ -2002,6 +2002,73 @@ class IPSeriesYaboot(Yaboot): log.info("Updated PPC boot list with the command: nvram --update-config %s" % update_value) +class IPSeriesGRUB2(GRUB2): + + # GRUB2 sets /boot bootable and not the PReP partition. This causes the Open Firmware BIOS not + # to present the disk as a bootable target. If stage2_bootable is False, then the PReP partition + # will be marked bootable. Confusing. + stage2_bootable = False + + # + # installation + # + + def install(self): + self.updateNVRAMBootList() + + super(IPSeriesGRUB2, self).install() + + # This will update the PowerPC's (ppc) bios boot devive order list + def updateNVRAMBootList(self): + + log.debug("updateNVRAMBootList: self.stage1_device.path = %s" % self.stage1_device.path) + + buf = iutil.execWithCapture("nvram", + ["--print-config=boot-device"], + stderr="/dev/tty5") + + if len(buf) == 0: + log.error ("Failed to determine nvram boot device") + return + + boot_list = buf.strip().split() + log.debug("updateNVRAMBootList: boot_list = %s" % boot_list) + + buf = iutil.execWithCapture("ofpathname", + [self.stage1_device.path], + stderr="/dev/tty5") + + if len(buf) > 0: + boot_disk = buf.strip() + else: + log.error("Failed to translate boot path into device name") + return + + # 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) + + update_value = "boot-device=\"%s\"" % " ".join(boot_list) + + rc = iutil.execWithRedirect("nvram", ["--update-config", update_value], + stdout="/dev/tty5", stderr="/dev/tty5") + if rc: + log.error("Failed to update new boot device order") + + # + # In addition to the normal grub configuration variable, add one more to set the size of the + # console's window to a standard 80x24 + # + def write_defaults(self): + super(IPSeriesGRUB2, self).write_defaults() + + defaults_file = "%s%s" % (ROOT_PATH, self.defaults_file) + defaults = open(defaults_file, "a+") + # The terminfo's X and Y size, and output location could change in the future + defaults.write("GRUB_TERMINFO=\"terminfo -g 80x24 console\"\n") + defaults.close() + + class MacYaboot(Yaboot): prog = "mkofboot" can_dual_boot = True diff --git a/pyanaconda/platform.py b/pyanaconda/platform.py index 536a849..cfadbb3 100644 --- a/pyanaconda/platform.py +++ b/pyanaconda/platform.py @@ -231,7 +231,7 @@ class MacEFI(EFI): class PPC(Platform): _ppcMachine = iutil.getPPCMachine() - _bootloaderClass = bootloader.Yaboot + _bootloaderClass = bootloader.GRUB2 _boot_stage1_device_types = ["partition"] @property @@ -239,7 +239,7 @@ class PPC(Platform): return self._ppcMachine class IPSeriesPPC(PPC): - _bootloaderClass = bootloader.IPSeriesYaboot + _bootloaderClass = bootloader.IPSeriesGRUB2 _boot_stage1_format_types = ["prepboot"] _boot_stage1_max_end_mb = 10 _boot_prep_description = N_("PReP Boot Partition") -- 1.7.7.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list