Guide GRUB 2 configuration

Status
Not open for further replies.
Hi all,
First of all I would like to thank the GRUB people for their continued efforts at making our (the common users lives easier), the debian upstream packagers who do the hard job of building something like this & then finally the MOTU (Members of The Universe) in Ubuntu. If the three of them had not come together we would not have a working GRUB 2 (actually 1.95+20070604-)

I am sure some of you guys followed my earlier installation tutorial http://www.techenclave.com/forums/grub-2-installation-92883.html . This is a follow-up on that.

So now in the old GRUB legacy menu you should have atleast 4 items :-

Code:
Chainload to GRUB 2
Debian GNU/Linux, kernel 2.6.22-6-generic
Debian GNU/Linux, kernel 2.6.22-6-generic (recovery only)
Debian GNU/Linux, kernel memtest86+

Clicking on chainload to GRUB 2 will give you nothing. Its an empty place.

To have stuff in this we need to edit grub.cfg file.

Code:
sudo update-grub
Updating /boot/grub/grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.22-6-generic
Found initrd image: /boot/initrd.img-2.6.22-6-generic
Found memtest86+ image: /boot/memtest86+.bin
done

Now do the following to make sure the grub.cfg file is editable

Code:
ls -la /boot/grub/grub.cfg
-r--r--r-- 1 root root 1299 2007-06-28 02:30 /boot/grub/grub.cfg
sudo chmod 644 /boot/grub/grub.cfg
ls -la /boot/grub/grub.cfg
-rw-r--r-- 1 root root 1299 2007-06-28 02:30 /boot/grub/grub.cfg

We are making the file editable by the root only. This is done so we can make changes to the file. Later on, after the changes are done if required or needed, we can chmod it back to 444 for added security. (Kinda like the write-protect but that's putting it pretty simply ).

Now before we proceed, its always a good idea to make a backup of the file in case we make some mistake or do something wrong & then can come back & see.

Hence do :-

Code:
sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfgbackup

The copying is done in the same directory so one does not need to look around for the file.

Now these are the contents of the grub.cfg file :-

Code:
#
# DO NOT EDIT THIS FILE
#
# It is automaticaly generated by /usr/sbin/update-grub using templates from /etc/grub.d
# and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=100
set root=(hd1,1)

font (hd1,1)/usr/share/grub/unifont.pff
set gfxmode=640x480
insmod gfxterm
insmod vbe
terminal gfxterm

### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_hurd ###
### END /etc/grub.d/10_hurd ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "Debian GNU/Linux, linux 2.6.22-7-generic" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-7-generic root=/dev/sdb1 ro 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-7-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-7-generic (single-user mode)" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-7-generic root=/dev/sdb1 ro single 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-7-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-6-generic" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-6-generic root=/dev/sdb1 ro 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-6-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-6-generic (single-user mode)" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-6-generic root=/dev/sdb1 ro single 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-6-generic
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
	linux	(hd1,1)/boot/memtest86+.bin
}
### END /etc/grub.d/20_memtest86+ ###

Now the first thing is to delete the unifont part simply because there is an issue with the unifont & unifont-bin in gutsy . For others distros, this step is unchanged unless their unifont & unifont-bin has the same bug :bleh:

https://bugs.launchpad.net/ubuntu/+source/unifont/+bug/122565

So now it appears like this :-

Code:
#
# DO NOT EDIT THIS FILE
#
# It is automaticaly generated by /usr/sbin/update-grub using templates from /etc/grub.d
# and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=100
set root=(hd1,1)

### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_hurd ###
### END /etc/grub.d/10_hurd ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "Debian GNU/Linux, linux 2.6.22-7-generic" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-7-generic root=/dev/sdb1 ro 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-7-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-7-generic (single-user mode)" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-7-generic root=/dev/sdb1 ro single 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-7-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-6-generic" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-6-generic root=/dev/sdb1 ro 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-6-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-6-generic (single-user mode)" {
	linux	(hd1,1)/boot/vmlinuz-2.6.22-6-generic root=/dev/sdb1 ro single 
	initrd	(hd1,1)/boot/initrd.img-2.6.22-6-generic
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
	linux	(hd0,1)/boot/memtest86+.bin
}
### END /etc/grub.d/20_memtest86+ ###

What this does is simply remove the graphical progres bar (throbber) of ubuntu booting. At this point we can live with that.

Another thing is to compare the linux stuff from menu.lst to grub.cfg & see if the kernel path is the same or not. look for the title linux in menu.lst

Code:
# title		Linux
# root		(hd0,1)
# kernel	/vmlinuz root=/dev/hda2 ro

ok now there are some changes, the root as shown by menu.lst shows as hd0, 1 while the one in grub.cfg shows as hd1,1 . Simply change all of them to the existing entry shown in menu.lst. The simplest reason is because if legacy grub works then grub.cfg should work too.

So now grub.cfg looks like :-

Code:
#
# DO NOT EDIT THIS FILE
#
# It is automaticaly generated by /usr/sbin/update-grub using templates from /etc/grub.d
# and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=100
set root=(hd1,1)

### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_hurd ###
### END /etc/grub.d/10_hurd ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "Debian GNU/Linux, linux 2.6.22-7-generic" {
	linux	(hd0,1)/boot/vmlinuz-2.6.22-7-generic root=/dev/sdb1 ro 
	initrd	(hd0,1)/boot/initrd.img-2.6.22-7-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-7-generic (single-user mode)" {
	linux	(hd0,1)/boot/vmlinuz-2.6.22-7-generic root=/dev/sdb1 ro single 
	initrd	(hd0,1)/boot/initrd.img-2.6.22-7-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-6-generic" {
	linux	(hd0,1)/boot/vmlinuz-2.6.22-6-generic root=/dev/sdb1 ro 
	initrd	(hd0,1)/boot/initrd.img-2.6.22-6-generic
}
menuentry "Debian GNU/Linux, linux 2.6.22-6-generic (single-user mode)" {
	linux	(hd0,1)/boot/vmlinuz-2.6.22-6-generic root=/dev/sdb1 ro single 
	initrd	(hd0,1)/boot/initrd.img-2.6.22-6-generic
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
	linux	(hd0,1)/boot/memtest86+.bin
}
### END /etc/grub.d/20_memtest86+ ###

Now make sure that the file is saved. Reboot to Grub legacy, Chainload to Grub 2 & boot your kernel.

Obviously the instructions are of this point in time where GRUB 2 is unstable. When it hits stable things would be much more easier. Of course there wouldn't be any menu.lst but lot of great things are expected from it for sure. (Otherwise lot of people wasted lot of valuable time and energy)

Few interesting points to ponder/chew on:-
  • Please note that these guys also have mentioned about GNU hurd. If you look at grub legacy you never see the mention of GNU Hurd. Is it a sign of times, only time will tell :)
  • Also I have not taken into account is XP or any previous windows variant. When you run sudo update-grub it would be automatically found & entered in grub.cfg , the only change one has to make is the location as outlined above.
  • Vista however has some issues (they don't want/like GRUB so they have made it difficult).
  • There is also work going on so the BIOS is by-passed & one can use GRUB to switch between hard disks as well as OSes. They have met with limited success. What is lacking atm is documentation, have some stability & test-cases (in userland world) where people can play with & give reports on what works & what doesn't so the programmers can identify where things are not working . But all of this is gonna take some time & effort.

As always, may you live in intersting times :bleh:

References :-

 
  • Like
Reactions: 2 people
Ok few things to munch on :-

As stated before GRUB 2 is very much a WIP. So things might be unstable before they get any better.

  • There are problems with unifont.pff in ubuntu gutsy, Which means it might not be a problem with any of the other distros. or it might be a problem upstream which needs resolving. I have filed the unifont issue however at https://bugs.launchpad.net/ubuntu/+source/unifont/+bug/122565
  • one way or the other it will get triaged :)
  • So it might not be needed at all but if it does, you do know what needs to be tweaked or where to look for pointers.
  • From the looks of it it seems the graphical menu has not been turned on, which is the right thing to do at this point in time.

It's been a long day so adios :)
 
A little bit more but this time on grub legacy

Code:
# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default		0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout		1000

## hiddenmenu
# Hides the menu by default (press ESC to see the menu)
#hiddenmenu

# Pretty colours
color cyan/blue white/blue

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title		Windows 95/98/NT/2000
# root		(hd0,0)
# makeactive
# chainloader	+1
#
# title		Linux
# root		(hd0,1)
# kernel	/vmlinuz root=/dev/hda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=UUID=7eedd8c9-0471-4a63-af65-939402ec5b4e ro

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)

## should update-grub create alternative automagic boot options
## e.g. alternative=true
##      alternative=false
# alternative=true

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
##      lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash

## should update-grub lock old automagic boot options
## e.g. lockold=false
##      lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(single-user) single
# altoptions=(recovery mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
##      howmany=7
howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
##      memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## ## End Default Options ##

title		Chainload into GRUB 2
root		(hd0,0)
kernel		/boot/grub/core.img
savedefault

title           Debian GNU/Linux, kernel 2.6.22-7-generic
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-7-generic root=UUID=7eedd8c9-0471-4a63-af65-939402ec5b4e ro quiet splash 
initrd          /boot/initrd.img-2.6.22-7-generic
savedefault

title           Debian GNU/Linux, kernel 2.6.22-7-generic (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-7-generic root=UUID=7eedd8c9-0471-4a63-af65-939402ec5b4e ro quiet single
initrd          /boot/initrd.img-2.6.22-7-generic
savedefault

title		Debian GNU/Linux, kernel 2.6.22-6-generic
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.22-6-generic root=UUID=7eedd8c9-0471-4a63-af65-939402ec5b4e ro quiet splash
initrd		/boot/initrd.img-2.6.22-6-generic
savedefault

title		Debian GNU/Linux, kernel 2.6.22-6-generic (recovery mode)
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.22-6-generic root=UUID=7eedd8c9-0471-4a63-af65-939402ec5b4e ro single
initrd		/boot/initrd.img-2.6.22-6-generic
savedefault

title		Debian GNU/Linux, kernel memtest86+
root		(hd0,0)
kernel		/boot/memtest86+.bin

### END DEBIAN AUTOMAGIC KERNELS LIST

and things are cool ;)
 
Status
Not open for further replies.