Overgangen til GRUB2 bootmeny.

Momas blogg for 14.06.2009.

Jeg har akkurat installert Ubuntu 9.10 alpha2... operativsystemet og oppdaget at det benytter den nye GRUB2 bootloaderen. GRUB1 (eller GRUB Legacy som den egentlig heter) blir ikke lenger utviklet eller vedlikeholdt.

GRUB2 støtter flere typer boot-systemer som; vanlig PC BIOS, OpenFirmware (som i PowerPC), EFI(som i Apples Intel Mac) og coreboot. GRUB2 har også innebygget bash-aktig skriptspråk som gjør det lett å lage avanserte oppstartløsninger. Det skal også være mulig å lage veldig pene oppstartmenyer. Se på disse eksemplene....

Dette er min erfaring med GRUB2.

1) GRUB2 har ny konfigurasjonsfil.
Konfigurasjonsfilen heter nå /boot/grub/grub.cfg og syntaksen for å bygge menyer er noe annerledes enn i den gamle /boot/grub/menu.lst.

F.eks min gamle GRUB1 menu.lst ser slik ut.
default=0
timeout=5
title Ubuntu 8.10 Intrepid Ibex, (@ /dev/sda1)
root (hd0,0)
kernel /boot/vmlinuz-2.6.27-13-generic root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.27-13-generic
quiet

Og her er den nye /boot/grub/grub.cfg (GRUB2 konfigfilen og menyen).
set default=0
set timeout=5
menuentry "Ubuntu 8.10 Intrepid Ibex, (@ /dev/sda1)" {
set root=(hd0,1)
linux /boot/vmlinuz-2.6.27-13-generic root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.27-13-generic
}

-----------

2) Enumerering av partsijoner har endret seg.
Numerering av partisjoner starter nå fra tallet 1 (tidligere var dette 0). Men merk at numerering av harddisker starter fremdeles fra 0. Se disse eksemplene.
Device navnet | GRUB_Legacy | GRUB2
/dev/sda1 | (hd0,0) | (hd0,1)
/dev/sda3 | (hd0,2) | (hd0,3)
/dev/sdb2 | (hd1,1) | (hd1,2)

-----------

3) Automatisk generering av konfig -og menyfilen /boot/grub/grub.cfg.
Installasjonen av Ubuntu 9.10alpha laget /boot/grub/grub.cfg ved å undersøke alle tilgjengelige partisjoner. På samme måten kan du bruke update-grub og grub-mkconfig verktøy for å auto-generere /boot/grub/grub.cfg.

Du kan også editere /boot/grub/grub.cfg manuelt og legge til og fjerne menyvalg, men den filen blir overskrevet hvis du senere kjører update-grub eller grub-mkconfig. Så det er mye smartere å legge dine egne menyvalg i "/etc/grub.d/40_custom" fila og auto-produsere /boot/grub/grub.cfg etterpå.

Merk at "update-grub" er bare snarveikommando for "grub-mkconfig -o /boot/grub/grub.cfg"

Jeg skal her vise hvordan du forbereder og auto-produserer /boot/grub/grub.cfg filen (altså GRUB2-menyen).

4) Filene i /etc/grub.d/ katalogen.
Bli kjent med filene i /etc/grub.d/ katalogen.
Filene der er små bash-skript som hver for seg lager en del av /boot/grub/grub.cfg konfigurasjonen (altså en del av GRUB2-menyen).

List skriptene i /etc/grub.d/.

$ ls -l /etc/grub.d/
-rwxr-xr-x 1 root root 3213 2009-06-04 13:33 00_header
-rwxr-xr-x 1 root root 1301 2009-06-14 14:37 05_debian_theme
-rwxr-xr-x 1 root root 3746 2009-06-04 13:33 10_linux
-rwxr-xr-x 1 root root 407 2009-03-27 21:12 20_memtest86+
-rwxr-xr-x 1 root root 4326 2009-06-04 13:33 30_os-prober
-rwxr-xr-x 1 root root 1788 2009-06-14 14:43 40_custom
-rw-r--r-- 1 root root 483 2009-06-04 13:33 README

Og les /etc/grub.d/README fila.

Skriptene kjøres i sortert rekkefølge. Altså 00_header kjøres først, deretter 05_debian_theme og 10_linux osv. Skriptet 40_custom (som vi skal editere senere) kjøres sist. Du kan legge til dine egne skript mellom disse eller som sist, f.eks du kunne lage filene 25_xxx og 50_yyy. Disse bør være kjørbare. Men normalt behøver du kun endre "40_custom" og ikke mer.

Skriptene benyttes kun (og KUN) når du kjører "update-grub" eller "grub-mkconfig" kommandoen. Ellers er de helt døde.

Hvert skript vil outputte (altså skrive til stdout) sine egne menyvalg eller konfiglinjer. Altså de produserer sin del av /boot/grub/grub.cfg konfigurasjonen.

Du kan lett verifisere dette ved å kjøre noen av skriptene. Test

$ /etc/grub.d/00_header
set default=0
set timeout=5

Altså default menyvalg og timeout ligger der.

$ /etc/grub.d/05_debian_theme
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue

Eller sjekk
$ bash /etc/grub.d/20_memtest86+
menuentry "Memory test (memtest86+)" {
linux /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
linux /boot/memtest86+.bin console=ttyS0,115200n8
}

-----------

5) Editer /etc/grub.d/40_custom fila.
Du kan legge dine egne menyvalg i /etc/grub.d/40_custom filen.

Jeg editerer /etc/grub.d/40_custom og legger til følgende kode.
menuentry "Ubuntu 8.10 Intrepid Ibex, (@ /dev/sda1)" {
set root=(hd0,1)
linux /boot/vmlinuz-2.6.27-13-generic root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.27-13-generic
}

menuentry "Ubuntu 9.10 ALPHA (@ /dev/sda2) (*)" {
set root=(hd0,2)
search --fs-uuid --set c29caa7c-2334-4292-8b46-929097b23153
linux /boot/vmlinuz-2.6.30-9-generic root=UUID=c29caa7c-2334-4292-8b46-929097b23153 ro quiet splash
initrd /boot/initrd.img-2.6.30-9-generic
}

menuentry "Ubuntu 8.10 64 BITS (@ /dev/sda3)" {
set root=(hd0,3)
linux /boot/vmlinuz-2.6.27-11-generic root=UUID=001f97e7-7f05-471c-a94b-3d47ce63fe26 ro quiet splash
initrd /boot/initrd.img-2.6.27-11-generic
}

Merk at 40_custom skriptet har "exec tail -n +3 $0" helt på toppen som gjør at ved kjøring, den skriver hele innholdet utenom de 3 første linjene til stdout.

Og sjekk output fra det med
$ bash /etc/grub.d/40_custom

Sjekk at linjene er ok.
----------

6) Til slutt generer /boot/grub/grub.cfg.
Nå kan du auto-produsere ferdig /boot/grub/grub.cfg (GRUB2 meny). Ta gjerne backup av eksisterende grub.cfg først.

Kjør
$ sudo update-grub
Generating grub.cfg ...
...

Den vil kjøre alle skriptene i /etc/grub.d/ (i sortert rekkefølge) og syr sammen output fra dem til grub.cfg.

Sjekk
$ cat /boot/grub/grub.cfg

Som sagt, ingenting hindrer deg fra å editere grub.cfg manuelt så lenge du ikke kjører update-grub og overskriver filen. Jeg foretrekker å editere 00_header, 40_custom og muligens de andre skripta fordi jeg nå kjenner til mekanismen. Men også i mitt tilfelle vill direkte editering av grub.cfg ss. være den enkleste veien.
----------

7) Omstart din komputer og sjekk GRUB-menyen.
----------

8) Litt mer om menyen.
Jeg ønsker å lage GRUB2-menyen manuelt via "40_custom" skriptet fordi denne maskinen har ca. 6 - 7 partisjoner med ulike Linux-distribusjoner, både 32 og 64bits systemer. Jeg trenger alle disse for å teste endel programvare.

"/etc/grub.d/10_linux" skriptet prøver å innhente informasjon om disse Linux-partisjonene og lager menyen automatisk. Men den automatiske menyen blir ikke bra nok. Jeg trenger å ha mine egne menynavn (titler) og menyordning, derfor laget jeg "40_custom" skriptet i punkt 5).

Jeg disabler (passiviserer) "/etc/grub.d/10_linux" skriptet ved å sette det "ikke kjørbar".

$ sudo chmod -x /etc/grub.d/10_linux

Jeg passiviserer også "/etc/grub.d/20_memtest86+" fordi memtest har jeg ikke behov for.

Og oppdaterer grub.cfg igjen med
$ sudo update-grub
Generating grub.cfg ...

Og menyen er nå mer oversiktlig ;-)
----------

Studer:
$ man update-grub
$ man grub-mkconfig

Les mer om GRUB2 på: http://www.gnu.org/software/grub/grub-2.en.html

Wkikien til GRUB2: http://grub.enbug.org/grub.cfg

Hvordan endre bakgrunnsbildet... (tror jeg det er)

GRUB2 kan også boote direkte fra en iso-fil. Les
http://www.workswithu.com/2009/07/29/ubuntu-910-preview-grub-2/

Tags:
  • Skriv ut artikkel
  • Abonner med RSS

Siste kommentarer