GRUB Howto

Introduzione

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.

Sviluppo

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).

Installazione

Utilizzando una shell di root, digitiamo il comando:

# apt-get install grub

Configurazione

Innanzitutto parliamo di come GRUB gestisca i vari dischi.

Non fa distinzioni tra dispositivi IDE e SCSI e gli gestisce nel seguente modo:

  • I dischi non vengono contati dalla lettera ‘a’ ma ben si dal numero 0.
  • Le partizioni non vengono contate da 1 ma ben si dal numero 0.

Procediamo con un piccolo esempio:

  • Lista delle partizioni:

# 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
  • Immagine del kernel linux:

NOTA: solitamente i kernel vengono chiamati: vmlinuz, zImage, bzImage

# ls -l /boot | grep -i “vmlinuz”

/boot/vmlinuz  

Quindi su GRUB equivalgono a:

  1. /dev/hda (disco): (hd0)
  2. /dev/hda1 (boot): (hd0,0)
  3. /dev/hda2 (swap): (hd0,1)
  4. /dev/hda3 (root): (hd0,2)
  5. /dev/hda4 (windows): (hd0,3)

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

Configurazione Initrd

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

Configurazione Password

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
  • Label (subito dopo Title):
lock

Salviamo, usciamo dal file di configurazione e riavviamo.

Configurazione di Splashimage

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:

  1. — Tipo di file: .xpm.gz
  2. — Risoluzione: 640×480
  3. — Colori supportati: 14

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

Creazione splashimage

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.

Colori Menu

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.

VESA framebuffer

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:

  • vesa (kernel 2.4)
  • vesafb (kernel 2.6)

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’:

  • Risoluzione: 1280×1024
  • Colori: 16M

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.

Post installazione

Adesso dobbiamo installare GRUB nel MBR del disco prescelto /dev/hda. Abbiamo due metodi:

  • Metodo automatico:

# grub-install –no-floppy /dev/hda

  • Metodo manuale:

# grub

grub> root (hd0,0)

grub> setup (hd0)

grub> quit

  1. Il primo passo specifica dov’e’ la partizione di boot (hd0,0),
  2. Il secondo passo installa GRUB nel mbr del disco (hd0),
  3. Il terzo passo esce dalla shell di GRUB.

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).

Conclusione

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! 8-)

Links

— Andrea ‘venom’ Di Pasquale – 30/09/2007 18:58 :)

 
howto/grub.txt · Ultima modifica: 30/09/2007 21:09 da venom
 
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki