In tutti i nostri articoli abbiamo sempre parlato, in vario modo, di software e distribuzioni GNU/Linux. Tuttavia non ci siamo mai realmente soffermati su argomenti un tantino più delicati e di più a basso livello. Quello di cui vorremmo parlarvi oggi è GRUB, il boot loader della GNU divenuto quasi lo standard di ogni distribuzione GNU/Linux. Quasi perché per molto tempo il boot loader più utilizzato dai sistemi operativi basati su Linux è stato sicuramente LiLo. Col passare del tempo però, GRUB, ha saputo esprimere al meglio le sue potenzialità diventando un ottimo boot loader multipiattaforma del tutto flessibile e potente. Ma cos'è esattamente un boot loader?
Quando accendiamo un normale computer il primo programma lanciato è il boot loader. Quest'ultimo è dunque, a tutti gli effetti, il principale responsabile dell'avvio dei vari sistemi operativi presenti sulla nostra macchina. Il compito di ogni boot loader dovrebbe essere quello di riuscire a caricare e trasferire il controllo del sistema al kernel del sistema operativo che sta per lanciare. A sua volta il kernel lancia, e gestisce, il sistema operativo.
Grub
Grub è l'acronimo di Grand Unified Bootloader e fu originariamente progettato e sviluppato da Erich Stefan Boleyn. Attualmente fa parte del progetto GNU che lo gestisce e ne cura lo sviluppo. Sono presenti due versioni di GRUB: GRUB legacy e GRUB 2. La versione legacy (ossia "ereditata") è quella che continua ad essere utilizzata dalla maggior parte delle distribuzioni anche se il team di sviluppo del boot loader ha già da molto tempo smesso di aggiungerci novità. La versione 2, invece, è quella che gode del maggior apporto degli sviluppatori anche se è ancora considerata una versione in fase di sviluppo e non completamente affidabile.
Alcune delle caratteristiche che hanno reso celebre GRUB sono quelle riguardanti la possibilità di configurazione dinamica, nel senso che gli utenti possono modificare parametri e impostazioni anche prima dell'avvio del sistema operativo, il supporto per svariati sistemi operativi e diversi filesystem ed infine la possibilità di utilizzare sia una interfaccia grafica che una testuale, e a riga di comando, per permettere agli utenti la scelta del sistema operativo da lanciare.
Vediamo brevemente come installare GRUB, per tutti coloro che lo vogliono utilizzare magari al posto di LiLo. La prima cosa da fare è ovviamente scaricare i sorgenti di GRUB dal sito web ufficiale. Una volta scaricata l'ultima versione, la 1.95 è l'ultima al momento della stesura di questo articolo, non ci resta che scompattare il pacchetto e compilare i sorgenti. Possiamo farlo con i classici comandi:
tar -xzvf grub-1.95.tar.gz cd grub-0.9x ./configure make su root (o sudo -s, per chi usa Ubuntu) make install
Se dopo il processo di installazione di GRUB non avete riscontrato particolari problemi siete finalmente pronti ad utilizzarlo. In caso contrario, per problemi legati alla compilazione e all'installazione, fate riferimento alla FAQ o al wiki ufficiale del progetto. Passiamo alla sua configurazione.
Il file di configurazione
Vediamo ora come è articolato il file di configurazione di GRUB, quello contenente tutte le direttive sui sistemi operativi da mostrare all'avvio del boot loader. Tipicamente in un sistema Debian-based potrete trovarlo nel file /boot/grub/menu.lst
. Apriamolo con un qualsiasi editor e diamo un'occhiata alle seguenti direttive:
default 0 timeout 3 hiddenmenu title Ubuntu, kernel 2.6.20-16-generic root (hd0,0) kernel /boot/vmlinuz-2.6.20-16-generic root=UUID=925772b6-9772-467f-b85b-d8fdf893c911 ro quiet splash initrd /boot/initrd.img-2.6.20-16-generic quiet savedefault
Cerchiamo ora di dare un significato a tutti questi campi:
- default: specifica quale sistema operativo lanciare in maniera predefinita al momento del boot;
- timeout: specifica per quanto tempo il menù della scelta del sistema operativo da lanciare debba essere mostrato all'utente prima che venga lanciato il sistema operativo di default;
- hiddenmenu: significa che non viene mostrato il menu di GRUB ma viene eseguita una scelta, predefinita, senza chiamare in causa l'utente;
- title: è il nome del sistema operativo. Il nome con cui viene visualizzato all'interno del menù del boot loader;
- root: informa GRUB su quale dispositivo e quale partizione può essere trovato il kernel di un determinato sistema operativo;
- kernel: specifica quale kernel deve essere lanciato nel caso in cui venisse scelta la voce di menù ad esso relativa. Le opzioni dopo la locazione sono poi passate al kernel. Nel nostro caso ro signfica read-only, e che il kernel non deve permettere una eventuale scrittura durante il processo di boot, con quiet evitiamo di mostrare a video eventuali informazioni di debug ed infine con splash mostriamo uno splash screen, come quello di Ubuntu, durante il processo di boot di un determinato sistema operativo.
- initrd: la seguente direttiva dice a GRUB cosa fare dopo che il kernel selezionato è stato lanciato.
In conclusione possiamo dire che esistono molti altri parametri che è possibile utilizzare con GRUB. Questi sono sicuramente i più importanti. Ad esempio è possibile specificare il colore del tema del menu del boot loader, modificare l'immagine di avvio, specificare una password al momento di boot per proteggere il computer e molto altro ancora.
Visto che lo spazio è tiranno, tutti gli interessati possono leggere la documentazione ufficiale di GRUB per avere a disposizione la lista di tutti i comandi disponibili. Inoltre, come già detto, è possibile utilizzare i comandi messi a disposizione da GRUB anche a riga di comando e prima della fase di boot. Ne esistono molti. Per conoscerli rimandiamo sempre al sito ufficiale.