I'm working on a patch to switch from yahoot to grub. I've encountered one problem. Grub doesn't like '(hd0)' syntax but works with '/dev/sda1' [anaconda root@(none) /]# cat /mnt/sysimage/boot/grub2/device.map # this device map was generated by anaconda (hd0) /dev/sda [anaconda root@(none) /]# cat /tmp/program.log ... 18:21:28,809 INFO program: Running... grub2-install --no-floppy (hd0,1) 18:21:29,929 ERR program: /sbin/grub2-probe: error: cannot stat `(hd0,1)'. 18:21:29,930 INFO program: The chosen partition is not a PReP partition. ... [anaconda root@(none) /]# chroot /mnt/sysimage/ [anaconda root@9-5-90-148 /]# grub2-install --no-floppy '(hd0,1)' /sbin/grub2-probe: error: cannot stat `(hd0,1)'. The chosen partition is not a PReP partition. [anaconda root@9-5-90-148 /]# grub2-install --no-floppy '(hd0)' /sbin/grub2-probe: error: cannot stat `(hd0)'. The chosen partition is not a PReP partition. [anaconda root@9-5-90-148 /]# grub2-install --no-floppy /dev/sda1 183+1 records in 183+1 records out This also needs patch to grub to accept GRUB_TERMINFO. The grub patch is appended to anaconda's. --- pyanaconda/bootloader.py | 46 +++++++++++++++++++++++++++++++++++----------- pyanaconda/platform.py | 4 ++-- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py index 45905d1..1ea86d5 100644 --- a/pyanaconda/bootloader.py +++ b/pyanaconda/bootloader.py @@ -1920,16 +1920,7 @@ class Yaboot(YabootSILOBase): raise BootLoaderError("bootloader installation failed") -class IPSeriesYaboot(Yaboot): - prog = "mkofboot" - - # - # configuration - # - - def write_config_variant_header(self, config): - config.write("nonvram\n") # only on pSeries? - config.write("fstype=raw\n") +class IPSeriesGRUB2(GRUB2): # # installation @@ -1938,7 +1929,7 @@ class IPSeriesYaboot(Yaboot): def install(self): self.updatePowerPCBootList() - super(IPSeriesYaboot, self).install() + super(IPSeriesGRUB2, self).install() def updatePowerPCBootList(self): @@ -1981,6 +1972,39 @@ class IPSeriesYaboot(Yaboot): else: log.info("Updated PPC boot list with the command: nvram --update-config %s" % update_value) + def write_defaults(self) + super(IPSeriesGRUB2, self).write_defaults() + + defaults_file = "%s%s" % (ROOT_PATH, self.defaults_file) + defaults = open(defaults_file, "a+") + defaults.write("GRUB_TERMINFO=\"%s -g %dx%d %s\"\n" % ("terminfo", 80, 24, "console")) + defaults.close() + + # + # @BUG + # + def grub_device_name(self, device): + """ Return a grub-friendly representation of device. + + Disks and partitions use the (hdX,Y) notation, while lvm and + md devices just use their names. + """ + drive = None + name = "(%s)" % device.name + + if device.isDisk: + drive = device + elif hasattr(device, "disk"): + # @FIX + name = "/dev/%s" % device.name + + if drive is not None: + name = "(hd%d" % self.drives.index(drive) + if hasattr(device, "disk"): + name += ",%d" % device.partedPartition.number + name += ")" + return name + class MacYaboot(Yaboot): prog = "mkofboot" diff --git a/pyanaconda/platform.py b/pyanaconda/platform.py index c57c76e..5712221 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 === modified file 'Makefile.util.def' --- Makefile.util.def 2012-02-22 04:37:32 +0000 +++ Makefile.util.def 2012-02-22 20:15:37 +0000 @@ -411,6 +411,13 @@ }; script = { + name = '20_ppc_terminfo'; + common = util/grub.d/20_ppc_terminfo.in; + installdir = grubconf; + condition = COND_HOST_LINUX; +}; + +script = { name = '30_os-prober'; common = util/grub.d/30_os-prober.in; installdir = grubconf; === added file 'util/grub.d/20_ppc_terminfo.in' --- util/grub.d/20_ppc_terminfo.in 1970-01-01 00:00:00 +0000 +++ util/grub.d/20_ppc_terminfo.in 2012-02-24 22:16:36 +0000 @@ -0,0 +1,107 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see <http://www.gnu.org/licenses/>. + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +libdir=@libdir@ +. ${libdir}/grub/grub-mkconfig_lib + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR=@localedir@ + +X=80 +Y=24 +TERMINAL=console + +argument () { + opt=$1 + shift + + if test $# -eq 0; then + echo "$0: option requires an argument -- '$opt'" 1>&2 + exit 1 + fi + echo $1 +} + +check_terminfo () { + + while test $# -gt 0 + do + option=$1 + shift + + case "$option" in + terminfo | TERMINFO) + ;; + + -g) + NEWXY=`argument $option "$@"` + NEWX=`echo $NEWXY | cut -d x -f 1` + NEWY=`echo $NEWXY | cut -d x -f 2` + + if [ ${NEWX} -ge 80 ] ; then + X=${NEWX} + else + echo "Warning: ${NEWX} is less than the minimum size of 80" + fi + + if [ ${NEWY} -ge 24 ] ; then + Y=${NEWY} + else + echo "Warning: ${NEWY} is less than the minimum size of 24" + fi + + shift + ;; + + *) + # accept console or ofconsole + if [ "$option" != "console" -a "$option" != "ofconsole" ] ; then + echo "Error: GRUB_TERMINFO unknown console: $option" + exit 1 + fi + # perfer console + TERMINAL=console + ;; + esac + + done + +} + +if ! uname -m | grep -q ppc ; then + exit 0 +fi + +if [ "x${GRUB_TERMINFO}" != "x" ] ; then + F1=`echo ${GRUB_TERMINFO} | cut -d " " -f 1` + + if [ "${F1}" != "terminfo" ] ; then + echo "Error: GRUB_TERMINFO is set to \"${GRUB_TERMINFO}\" The first word should be terminfo." + exit 1 + fi + + check_terminfo ${GRUB_TERMINFO} +fi + +cat << EOF + echo terminfo -g ${X}x${Y} ${TERMINAL} +EOF _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list