Page: 1, 2, 3, 4, 5  Next

Grub 2
iotaka
Status: Contributor
Joined: 13 Apr 2009
Posts: 85
Reply Quote
Hi,

to day I had some problems with the new grub 2.

At boot I received an error 15.

To solve I boot the system with a live, in my case a sidux.

Open a root konsole, then

:: Code ::
apt-get update
apt-get remove grub-gfxboot
apt-get install grub2

mount /dev/sda1 /media/disk1
grub-install --root-directory=/media/disk1 /dev/sda


sda1 is the partition where I have /, and sda is the HD where I'll install grub2

Seem the configuration file is changed
/boot/grub/menu.lst -> /boot/grub/grub.cfg (different syntax!)
Back to top
aus9
Status: Assistant
Joined: 21 Sep 2008
Posts: 358
Location: Australia
Reply Quote
hi

I know a little about grub2 having written a intro wiki here
sidux.com/index.php?module=Wikula&tag=Grub2Intro

AFAIK it appears that you once had grub legacy ....which always uses the /boot/grub/menu.lst

and somehow you installed grub2...maybe not realising it was different?

but the wiki advises that when you install it...it gives you an option of chainloading from legacy to grub2.

and the grub2 menuname is /boot/grub/grub.cfg

2) only when you are happy with grub2 would you run
:: Code ::
upgrade-from-grub-legacy


to put grub2 into mbr to replace grub legacy
Back to top
techAdmin
Status: Site Admin
Joined: 26 Sep 2003
Posts: 4127
Location: East Coast, West Coast? I know it's one of them.
Reply Quote
Some links as well, Ubuntu has good examples, which are sorely lacking from my current searches on most how tos: ubuntuforums.org/showthread.php?t=1195275

And here is a grub2 documentation site: members.iinet.net/~herman546/p20.html

And of course, Arch grub2 wiki: wiki.archlinux.org/index.php/GRUB2

and the grub2 wiki itself: grub.enbug.org/
which is of course largely useless but there it is anyway.
Back to top
aus9
Status: Assistant
Joined: 21 Sep 2008
Posts: 358
Location: Australia
Reply Quote
hi

well if the OP does not mind me going off topic slightly

I have added a new wiki page on how to use grub2 to boot hard drive iso images

sidux.com/index.php?module=Wikula&tag=Grub2isofrom

regards
Back to top
techAdmin
Status: Site Admin
Joined: 26 Sep 2003
Posts: 4127
Location: East Coast, West Coast? I know it's one of them.
Reply Quote
perfectly on topic, thanks, grub 2 is suffering from very incomplete and broken up documentation, not easy to find answers.

Especially missing is an item by item how to comparing familiar grub 1 methods with their rough grub 2 equivalents.
Back to top
aus9
Status: Assistant
Joined: 21 Sep 2008
Posts: 358
Location: Australia
Reply Quote
hi

I shall take that as a hint for new wiki page if you like....smiles
yes I know you were not hinting but if I can repay you for your script?

roughly its this

pretend /boot is a subfolder on /
Pretend its /dev/sda1

to install grub legacy into mbr using a live cd
:: Code ::
su
grub
root (hd0,0)
setup (hd0)


grub legacy counts menutitles, hard drives and partitions from zero

grub2 only diff is counts partitions from 1

hmm well I only know a few grub2 isos
RIPLinux has both types....edit oops its got grub2 but its grub-install is a grub legacy..just tested...oops

(hmm will investigate this later, I have spent too much time on the isofrom wiki)

anyhow grub2 to mbr would be
:: Code ::
su
grub-install /dev/sda


But this assumes you have already installed grub2 via chroot or by normal packagemanagement.

2) One of my big issues with troubleshooting is the move to UUID.

Now I and most other experienced ppl know some commands or text files to read to see their UUID

but its bloody torture to try out UUID at grub2 command mode.

I have reverted to using eg /dev/sda1 as most ppl instantly recognise it.
But a person posting their grub.cfg naming an UUID can not expect instant support.

Ok there are e2labels for ext2 -4 but not sure about XFS and reiserfs


3) quick and dirty names comparison

grub legacy ....VERSUS.......grub2

root (hd0,0) ...sets the /boot partition......versus
set root=(hd0,1)


grub legacy line beginning with kernel = define kernel path...NOT the next bits for root=/dev/sda1 and cheatcodes
eg kernel /boot/vmlinuz

if you had a separate /boot parttion it becomes
kernel /vmlinuz

versus ...grub2 for same items are

linux /boot/vmlinuz
linux /vmlinuz

initrd ....no change to my eyesight


grub-legacy...kernel line..for this bit root=UUID=string
or root=LABEL=string or root=/dev/sda1
defines the / partition

grub2 really no change but will often use a line preceding to search and set the UUID.

/etc/default/grub can unset UUID for those who hate it

well thats it for now
Back to top
aus9
Status: Assistant
Joined: 21 Sep 2008
Posts: 358
Location: Australia
Reply Quote
hi

ok looked at a couple of distros that claim can boot up in grub2 mode and no luck ....

/usb/sbin/grub-install

if your file shows 0.97 its grub legacy or patched

what you need to see is 1.9*

as per paste

:: Code ::
#! /bin/sh

# Install GRUB on your drive.
# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009  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/>.

# Initialize some variables.
transform="s,x,x,"

prefix=/usr
exec_prefix=${prefix}
sbindir=${exec_prefix}/sbin
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
PACKAGE_NAME=GRUB
PACKAGE_TARNAME=grub
PACKAGE_VERSION=1.97~beta4
target_cpu=i386
platform=pc
pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}`

grub_setup=${sbindir}/`echo grub-setup | sed ${transform}`
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
    grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}`
else
    grub_mkimage=${bindir}/`echo grub-mkelfimage | sed ${transform}`
fi
grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
rootdir=
grub_prefix=`echo /boot/grub | sed ${transform}`
modules=

install_device=
no_floppy=
force_lba=
recheck=no
debug=no

if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
    disk_module=biosdisk
else
    disk_module=ata
fi

# Usage: usage
# Print the usage.
usage () {
    cat <<EOF
Usage: grub-install [OPTION] install_device
Install GRUB on your drive.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --modules=MODULES       pre-load specified modules MODULES
  --root-directory=DIR    install GRUB images under the directory DIR
                          instead of the root directory
  --grub-setup=FILE       use FILE as grub-setup
  --grub-mkimage=FILE     use FILE as grub-mkimage
  --grub-mkdevicemap=FILE use FILE as grub-mkdevicemap
  --grub-probe=FILE       use FILE as grub-probe
  --no-floppy             do not probe any floppy drive
  --recheck               probe a device map even if it already exists
  --force                 install even if problems are detected
EOF
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
    cat <<EOF
  --disk-module=MODULE    disk module to use
EOF
fi
    cat <<EOF

INSTALL_DEVICE can be a GRUB device name or a system device filename.

grub-install copies GRUB images into the DIR/boot directory specified by
--root-directory, and uses grub-setup to install grub into the boot
sector.

Report bugs to <bug-grub@gnu.org>.
EOF
}

# Check the arguments.
for option in "$@"; do
    case "$option" in
    -h | --help)
   usage
   exit 0 ;;
    -v | --version)
   echo "grub-install (GNU GRUB ${PACKAGE_VERSION})"
   exit 0 ;;
    --modules=*)
   modules=`echo "$option" | sed 's/--modules=//'` ;;
    --root-directory=*)
   rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
    --grub-setup=*)
   grub_setup=`echo "$option" | sed 's/--grub-setup=//'` ;;
    --grub-mkimage=*)
   grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;;
    --grub-mkdevicemap=*)
   grub_mkdevicemap=`echo "$option" | sed 's/--grub-mkdevicemap=//'` ;;
    --grub-probe=*)
   grub_probe=`echo "$option" | sed 's/--grub-probe=//'` ;;
    --no-floppy)
   no_floppy="--no-floppy" ;;
    --recheck)
   recheck=yes ;;
    --disk-module=*)
   if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
           disk_module=`echo "$option" | sed 's/--disk-module=//'`
        fi ;;
    # This is an undocumented feature...
    --debug)
   debug=yes ;;
    -f | --force)
        setup_force="--force" ;;
    -*)
   echo "Unrecognized option \`$option'" 1>&2
   usage
   exit 1
   ;;
    *)
   if test "x$install_device" != x; then
       echo "More than one install_devices?" 1>&2
       usage
       exit 1
   fi
   install_device="${option}" ;;
    esac
done

# added by debian patch
setup_force="--force"

# for make_system_path_relative_to_its_root()
. ${libdir}/grub/grub-mkconfig_lib

if test "x$install_device" = x; then
    echo "install_device not specified." 1>&2
    usage
    exit 1
fi

# If the debugging feature is enabled, print commands.
setup_verbose=
if test $debug = yes; then
    set -x
    setup_verbose="--verbose"
fi

# Initialize these directories here, since ROOTDIR was initialized.
case "$host_os" in
netbsd* | openbsd*)
    # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub
    # instead of /boot/grub.
    grub_prefix=`echo /grub | sed ${transform}`
    bootdir=${rootdir}
    ;;
*)
    # Use /boot/grub by default.
    bootdir=${rootdir}/boot
    ;;
esac

grubdir=${bootdir}/`echo grub | sed ${transform}`
device_map=${grubdir}/device.map

grub_probe="${grub_probe} --device-map=${device_map}"

# Check if GRUB is installed.
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
    set $grub_setup dummy
    if test -f "$1"; then
        :
    else
        echo "$1: Not found." 1>&2
        exit 1
    fi
fi

set $grub_mkimage dummy
if test -f "$1"; then
    :
else
    echo "$1: Not found." 1>&2
    exit 1
fi

set $grub_mkdevicemap dummy
if test -f "$1"; then
    :
else
    echo "$1: Not found." 1>&2
    exit 1
fi

# Create the GRUB directory if it is not present.
test -d "$bootdir" || mkdir "$bootdir" || exit 1
test -d "$grubdir" || mkdir "$grubdir" || exit 1

# If --recheck is specified, remove the device map, if present.
if test $recheck = yes; then
    rm -f $device_map
fi

# Create the device map file if it is not present.
if test -f "$device_map"; then
    :
else
    # Create a safe temporary file.
    test -n "$mklog" && log_file=`$mklog`

    $grub_mkdevicemap --device-map=$device_map $no_floppy || exit 1
fi

# Make sure that there is no duplicated entry.
tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \
    | sort | uniq -d | sed -n 1p`
if test -n "$tmp"; then
    echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2
    exit 1
fi

# Copy the GRUB images to the GRUB directory.
for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img ${grubdir}/efiemu??.o; do
    if test -f $file && [ "`basename $file`" != menu.lst ]; then
   rm -f $file || exit 1
    fi
done
for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst; do
    cp -f $file ${grubdir} || exit 1
done
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
    for file in ${pkglibdir}/*.img ${pkglibdir}/efiemu??.o; do
   if test -f $file; then
       cp -f $file ${grubdir} || exit 1
   fi
    done
fi

# Write device to a variable so we don't have to traverse /dev every time.
grub_device=`$grub_probe --target=device ${grubdir}`

# Create the core image. First, auto-detect the filesystem module.
fs_module=`$grub_probe --target=fs --device ${grub_device}`
if test "x$fs_module" = x -a "x$modules" = x; then
    echo "Auto-detection of a filesystem module failed." 1>&2
    echo "Please specify the module with the option \`--modules' explicitly." 1>&2
    exit 1
fi

# Then the partition map module.  In order to support partition-less media,
# this command is allowed to fail (--target=fs already grants us that the
# filesystem will be accessible).
partmap_module=`$grub_probe --target=partmap --device ${grub_device} 2> /dev/null`

# Device abstraction module, if any (lvm, raid).
devabstraction_module=`$grub_probe --target=abstraction --device ${grub_device}`

# The order in this list is critical.  Be careful when modifying it.
modules="$modules $disk_module"
modules="$modules $fs_module $partmap_module $devabstraction_module"

prefix_drive=
if [ "x${devabstraction_module}" = "x" ] ; then
    if echo "${install_device}" | grep -qx "(.*)" ; then
      install_drive="${install_device}"
    else
      install_drive="`$grub_probe --target=drive --device ${install_device}`"
    fi
    grub_drive="`$grub_probe --target=drive --device ${grub_device}`"

    # Strip partition number
    install_drive="`echo ${install_drive} | sed -e s/,[0-9]*[a-z]*//g`"
    grub_drive="`echo ${grub_drive} | sed -e s/,[0-9]*[a-z]*//g`"
    if [ "$disk_module" = ata ] ; then
        # generic method (used on coreboot and ata mod)
        uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
        if [ "x${uuid}" = "x" ] ; then
          echo "UUID needed with ata mod, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
          exit 1
        fi
        prefix_drive="(UUID=${uuid})"
        modules="$modules fs_uuid"
    elif [ "x${grub_drive}" != "x${install_drive}" ] ; then
        uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
        if [ "x${uuid}" = "x" ] ; then
          echo "You attempted a cross-disk install, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
          exit 1
        fi
        prefix_drive="(UUID=${uuid})"
        modules="$modules fs_uuid"
    fi
else
    prefix_drive=`$grub_probe --target=drive --device ${grub_device}`
fi

relative_grubdir=`make_system_path_relative_to_its_root ${grubdir}` || exit 1
if [ "x${relative_grubdir}" = "x" ] ; then
    relative_grubdir=/
fi

if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
    $grub_mkimage --output=${grubdir}/core.img --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1

    # Now perform the installation.
    $grub_setup ${setup_verbose} ${setup_force} --directory=${grubdir} --device-map=${device_map} \
        ${install_device} || exit 1
else
    $grub_mkimage -d ${pkglibdir} --output=/boot/multiboot.img --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
fi

# Prompt the user to check if the device map is correct.
echo "Installation finished. No error reported."
echo "This is the contents of the device map $device_map."
echo "Check if this is correct or not. If any of the lines is incorrect,"
echo "fix it and re-run the script \`grub-install'."
echo

cat $device_map

# Bye.
exit 0

Back to top
aus9
Status: Assistant
Joined: 21 Sep 2008
Posts: 358
Location: Australia
Reply Quote
hi

I have attempted to clean up 2nd last post into a wiki
sidux.com/index.php?module=Wikula&tag=Grub2versus
Back to top
techAdmin
Status: Site Admin
Joined: 26 Sep 2003
Posts: 4127
Location: East Coast, West Coast? I know it's one of them.
Reply Quote
My suggestion is a bit simpler than your more indepth treatment.

Because everyone who has ever worked in linux with grub knows the syntax for grub 1, and how to handle it, what would be ideal would be a table structure, with each row first the grub 1 syntax, then the second cell the grub 2 equivalents, with file locations, syntax, etc, and especially, a note where no equivalent exists.

eg:
:: Code ::
GRUB 1       GRUB 2
default=0             in file /etc/defaults/grub locate: default=0
# kopt ......           then which files to alter to achieve the same result in grub 2

and so on, so you could take the knowledge you already have built up over the last 10 years or so, and simply and easily convert it to the new and inexcusably complex grub 2 syntax and methods.

I took a quick look at Wikipedia's page on Usability and I really have to say, what I see of the new grub fails totally and utterly to be more usable in any standard sense of the word as applied to computing. That page is quite well done, by the way, and some of the usability check lists should be studied by such projects as grub 2 BEFORE they implement such absurdly complex methods. Hint: requiring actually programming structure and syntax in simple config files is ridiculous.
Back to top
aus9
Status: Assistant
Joined: 21 Sep 2008
Posts: 358
Location: Australia
Reply Quote
grub
default 0 (counts from zero same as grub2)
grub2
set default=0

grub
timeout=5
grub2
set timeout=5

grub
menu_color_normal=cyan/blue
grub2
set menu_color_normal=cyan/blue

those bits are fairly simple
its messier to define a snazzy image or photo as grub2 has to check if things like fonts are there and image there by using scripting type language.

but I hope above helps
Back to top
Display posts from previous:   
Page: 1, 2, 3, 4, 5  Next
All times are GMT - 8 Hours