Grub acronimo di “GRand Unified Bootloader”, e' un boot loader per architettura x86. Il suo compito e' installare e poi leggere delle istruzioni ben precise all'interno del MBR (Master Boot Record), cioe' il primo settore di un qualsiasi dispositivo di memorizzazione di massa ad accesso diretto (i primi 512 byte) avviandone il kernel del sistema operativo indicato. Questo processo prende il nome di bootstrap.
In questo howto parleremo sull'installazione e configurazione base di GRUB in un sistema GNU/linux Debian.
La versione corrente e' la 0.9x (io ho la 0.97). Attualmente e' in sviluppo un boot loader di nuova generazione GRUB2 (fusione tra GRUB e PUPA).
Utilizzando una shell di root, digitiamo il comando:
# apt-get install grub
Innanzitutto parliamo di come GRUB gestisca i vari dischi.
Non fa distinzioni tra dispositivi IDE e SCSI e gli gestisce nel seguente modo:
Procediamo con un piccolo esempio:
# fdisk -l
NOTA: l'asterisco nel risultato di fdisk indica l'opzione “bootable” per la partizione /dev/hda1.
Device Boot Start End Blocks Id System /dev/hda1 * 1 5 40131 83 Linux /dev/hda2 6 130 1004062+ 82 Linux swap / Solaris /dev/hda3 131 7649 60396367+ 83 Linux /dev/hda4 7650 19456 94839696 7 HPFS/NTFS
# more /etc/fstab
NOTA: leggiamo unicamente le partizioni che ci interessano
<fs> <mountpoint> <type> <opts> <dump/pass> /dev/hda1 /boot ext3 noauto,noatime 1 2 /dev/hda2 none swap sw 0 0 /dev/hda3 / reiserfs noatime 0 1 /dev/hda4 /win ntfs-3g noatime,force 0 0
NOTA: solitamente i kernel vengono chiamati: vmlinuz, zImage, bzImage
# ls -l /boot | grep -i “vmlinuz”
/boot/vmlinuz
Quindi su GRUB equivalgono a:
Da root:
NOTA: Montiamo la partizione di boot, se notiamo bene in /etc/fstab per /dev/hda1 c'e' l'opzione “noauto”, cioe' non montare automaticamente (se non abbiamo questa opzione o /boot non e' in una partizione separata dalla root, saltare questo comando):
# mount /boot
Apriamo con un qualsiasi editor di testi il file di configurazione:
# vim /boot/grub/grub.conf
NOTA: il file di configurazione /boot/grub/grub.conf equivale a /boot/grub/menu.lst
# Opzioni Generali: # ================= # Avvia di default la prima label di boot (Debian linux) default 0 # secondi di scadenza se non si digita nulla su grub timeout 10 # ======================================================================== # Titolo della prima label title=Debian linux 2.6.22 # La partizione dove si trova l'immagine del kernel: /dev/hda1 root (hd0,0) # Path dell'immagine del kernel. Qui possono essere definite eventuali # opzioni da passare al kernel (es: vga=0x31B) # NOTA: Se usate un file system JFS per root, aggiungete "ro" kernel /boot/vmlinuz root=/dev/hda3 # Fa partire il sistema eseguendo # in ordine tutte le scelte precedenti boot # ======================================================================== # Se si ha un dualboot con Windows # In questo esempio Windows e' in /dev/hda4 # Titolo della seconda label titile=Windows XP # Boot per un sistema sconosciuto, lascia il lavoro # di bootstrap al primo settore del disco indicato rootnoverify (hd0,3) # Rende la partizione /dev/hda4 attiva makeactive # Passa il compito del bootstrap ad un'altro # boot loader chainloader +1 # Fa partire il sistema eseguendo # in ordine tutte le scelte precedenti boot
Salvare grub.conf/menu.lst e uscire
Se utilizzate un kernel che usa l'initrd vi basta aggiungere nella label scelta (tra la voce kernel e boot):
NOTA: Solitamente initrd si trova nella stessa partizione di /boot, quindi (hd0,0)
initrd (hd0,0)/boot/initrd.img
GRUB permette di aggiungere una password (algoritmo MD5) di sicurezza prima di accedere al kernel di avvio.
Eccovi un esempio:
# grub-md5-crypt
Password:
Retype password:
passwordMD5
passwordMD5 e' la vostra password criptata.
Per utilizzarla dovete aggiungere:
* opzioni generali:
password --md5 passwordMD5
lock
Salviamo, usciamo dal file di configurazione e riavviamo.
Se vogliamo cambiare o impostare la nostra immagine su GRUB abbiamo bisogno del splashimage.
Esempio:
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
(hd0,0) indica /dev/hda1 e cioe' quindi /boot.
Abbiamo bisogno di questi requisiti per l'immagine:
Esempio classico, abbiamo myimage.xpm:
# gzip myimage.xpm
# mv ./myimage.xpm.gz /boot/grub
Fatto questo, aggiungiamo nelle Opzioni Generali di /boot/grub/grub.conf:
splashimage=(hd0,0)/boot/grub/myimage.xpm.gz
Esiste un tool fornito dal pacchetto Imagemagick: convert
Con il suo utilizzo possiamo convertire un'immagine .PNG in .XPM:
$ convert myimage.png -resize 640×480 -colors 14 -depth 8 myimage.xpm
Salviamo, usciamo dal file di configurazione e riavviamo.
Se desideriamo modificare i colori del menu di GRUB, aggiungiamo e modifichiamo le seguenti righe in Opzioni Generali di /boot/grub/grub.conf:
# imposta il colore del testo: RRGGBB foreground=ffffff
# imposta il colore di sfondo: RRGGBB background=000000
Salviamo, usciamo dal file di configurazione e riavviamo.
NOTA 1: Se si utilizza il driver “fesafb-tng” non e' necessario seguire questa parte.
NOTA 2: Se non si utilizza il driver vesa/vesafb saltare questa parte.
Per cambiare risoluzione/numero colori nelle Virtual Terminal (VTs) si utilizza il driver VESA .
NOTA: controllare se il driver VESA e' abilitato nel kernel.
Prendiamo in esame due tipi di driver VESA per il kernel:
Per utilizzare il driver VESA bisogna passare al kernel di avvio il parametro vga.
Esempio:
vga=0x31B
Tabella impostazioni VESA:
| 640x480 | 800x600 | 1024x768 | 1280x1024 ================================================ 256 | 0x301 0x303 0x305 0x307 32k | 0x310 0x313 0x316 0x319 64k | 0x311 0x314 0x317 0x31A 16M | 0x312 0x315 0x318 0x31B
Seguendo l'esempio precedente abbiamo scelto di seguire 0x31B cioe':
Fatto questo, cambiamo la riga nel file di configurazione.
Da:
kernel /boot/vmlinuz root=/dev/hda3
A:
kernel /boot/vmlinuz vga=0x31B root=/dev/hda3
Salviamo, usciamo dal file di configurazione e riavviamo.
Adesso dobbiamo installare GRUB nel MBR del disco prescelto /dev/hda. Abbiamo due metodi:
# grub-install –no-floppy /dev/hda
# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
Ogni qual volta si voglia aggiornare la configurazione di GRUB, non c'e' bisogno di riaggionare il boot loader con un comando specifico (cio' che invece accade su LILO).
In questo Howto abbiamo imparato a configurare il boot loader GRUB. Se l'argomento vi interessa, ci sono altri argomenti piu' specifici da andarsi a vedere, per questo vi rimando alle info pages di GRUB.
$ info grub
Buon divertimento!
— Andrea Di Pasquale ‘spikey’ – 13/10/2008 21:21 :)