Da diversi anni ormai, tutte le maggiori distribuzioni linux si affidano, per la gestione del boot su computer con più di un sistema operativo, all'ormai celebre GRUB (acronimo che sta per “GRand Unified Bootloader”). Si tratta di un software che consente, all'avvio, di far decidere all'utente quale dei sistemi operativi installati vuole avviare, fornendo un menu e consentendo comunque l'avvio automatico di un sistema operativo di default allo scadere di un timeout personalizzabile.
Dopo anni di continui sviluppi, in cui la maggior parte degli utenti si è sempre dovuta confrontare con la configurazione della prima versione di GRUB, chiamata GRUB Legacy, da qualche tempo molte distribuzioni linux vengono rilasciate con GRUB 2, che sostituirà il suo antenato presto quasi ovunque. La necessità di ricominciare un “nuovo ciclo” nasce dal fatto che “GRUB Legacy è diventato ingestibile” (stando a quanto dichiarato dal team di sviluppo nel sito ufficiale), e le richieste di estensione sono diventate praticamente impossibili da soddisfare.
L'introduzione di questa nuova soluzione, tuttavia, ha causato in molti utenti un po' di disorientamento, dovuto alle novità introdotte riguardo alla personalizzazione ed alla configurazione. Mentre in precedenza alcune caratteristiche essenziali erano, ad esempio, incluse in un file chiamato menu.lst, tramite la modifica del quale era possibile, fra le altre caratteristiche, cambiare l'ordine degli elementi del bootloader, o il timeout, adesso GRUB 2 fornisce una nuova serie di strumenti per tali funzionalità. Questi strumenti, tuttavia, causano un leggero aumento della difficoltà nel modificare i parametri di configurazione. Nel seguito, vedremo com'è strutturato il nuovo bootloader, e in che modo è possibile personalizzarlo.

Impostare un'immagine di sfondo nel menu
Prima di spiegare nel dettaglio come gestire GRUB 2, parliamo di una novità introdotta con questa versione. Il nuovo bootloader offre infatti la possibilità di impostare un'immagine di sfondo sul menu. La procedura per eseguire tale operazione non è molto complessa. Inoltre, la possibilità di creare script “ad hoc” rende quasi illimitate le opportunità offerte da GRUB 2 in termini di personalizzazione.
(clic per ingrandire)

Il file grub.cfg
/boot/grub menu.lst grub.cfg /boot/grubvitogentile@html-it:~$ cat /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
[...]
Sebbene sia sempre possibile modificare manualmente (con i permessi di amministratore) questo file, la politica dettata dalle scelte del team di sviluppo è quella di non farlo direttamente, bensì di utilizzare un apposito comando che, basandosi sul contenuto di altri file descritti nel seguito, genera automaticamente grub.cfg
update-grub
update-grub2
grub.cfg
grub-mkconfig
grub-mkconfig -o /boot/grub/grub.cfg
Quest'ultimo crea un file di configurazione e lo salva nel percorso specificato dall'opzione -o
Il file grub.cfg
### BEGIN /etc/grub.d/00_header ###
[...]
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
[...]
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
[...]
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_memtest86+ ###
[...]
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
[...]
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
[...]
### END /etc/grub.d/40_custom ###
Ogni sezione corrisponde ad un altro file, contenuto nella directory /etc/grub.d
update-grub
grub.cfg
In aggiunta a quanto detto, si noti che il nome di ogni file contenuto in /etc/grub.d
grub.cfg
update-grub
grub.cfg
00_header
05_debian_theme
10_linux
20_memtest86+
30_os-prober
40_custom
Il file /etc/default/grub
Tutti gli script contenuti in /etc/grub.d utilizzano alcune importanti variabili, utili per modificare alcune delle voci più frequentemente ricercate. Queste variabili sono definite all'interno di un importantissimo file, reperibile al percorso /etc/default/grub. Analizziamo, dunque, i parametri più interessanti di questo file:
- GRUB_DEFAULT
GRUB_DEFAULT="Ubuntu, Linux 2.6.32-32-generic"
- GRUB_TIMEOUT
- GRUB_DISABLE_LINUX_RECOVERY
true
false
true
- GRUB_DISABLE_OS_PROBER
true
false
grub.cfg - GRUB_GFXMODE
Come si vede, molte funzionalità utili possono essere modificate da quest'ultimo file. Tuttavia ci sono ancora alcuni dettagli utili che è bene specificare. Per farlo, presentiamo alcuni esempi delle operazioni più comuni per la personalizzazione del menu di GRUB 2.
Cambiare l'ordine delle voci del menu
Abbiamo visto che, tramite l'opzione GRUB_DEFAULT
del file di default è possibile stabilire quale delle voci desideriamo pre-selezionare all'avvio. Spesso, però, questa scelta può non bastare.
Supponiamo di avere installato sul nostro computer, oltre Linux, anche Windows, e di volere avviare di default quest'ultimo sistema operativo. Se questo è alla quarta riga del menu, imposteremo il valore di GRUB_DEFAULT
a 3
. Quando viene installata una nuova versione del kernel linux, però, la voce relativa a Windows verrà spostata più in basso di due righe: una per il nuovo kernel, l'altra per la relativa recovery mode. La nuova installazione, perciò, sposterà Windows dalla posizione 4 alla 6, e saremmo costretti a dover modificare nuovamente la variabile GRUB_DEFAULT
. Infine, dovremmo aggiornare grub.cfg con il comando update-grub
.
Per risolvere questo problema, tuttavia, è sufficiente rinominare il file /etc/grub.d/XX_os-prober (dove XX è un numero superiore a 10, e solitamente pari a 30). Questo file genera, con l'opportuna sintassi necessaria, le definizioni di ogni voce aggiuntiva del menu. Le voci relative ai kernel Linux, invece, sono generate da /etc/grub.d/10_linux. Cambiando il numero XX in un numero compreso tra 01 e 09, otterremo che, generando nuovamente grub.cfg con update-grub
, verrà utilizzato prima quest'ultimo file, e poi quello relativo alle voci dei kernel di linux (poiché il suo numero identificativo è 10). Di conseguenza, la lista dei sistemi operativi nel menu conterrà prima quelli inseriti dall'utente, e poi quelli relativi a linux; ogni volta che verrà installato un nuovo kernel, questo sarà aggiunto dopo i sistemi operativi personalizzati, e la modifica di GRUB_DEFAULT
non sarà più necessaria.
Modificare i nomi delle voci del menu
I file 30_os-prober e 10_linux generano le definizioni di ogni riga del menu di GRUB 2, che verranno salvate all'interno di grub.cfg. Vediamo la sintassi di una di queste righe:
menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod ntfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set d8b6b9c1b6b9a084
chainloader +1
}
Modificando, quindi, il file grub.cfg, possiamo cambiare il nome delle voci, cambiando unicamente la stringa tra virgolette dopo la parola chiave menuentry
. Ad esempio, possiamo modificare la linea sopra citata, e cambiarla in:
menuentry "Windows 7" {
insmod ntfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set d8b6b9c1b6b9a084
chainloader +1
}
Per farlo, è necessario dotare il file grub.cfg dei permessi di scrittura, tramite l'uso di chmod
.
Questo metodo risulta, tuttavia, in contrasto con la filosofia del non modificare direttamente grub.cfg. Per questo motivo, questa tecnica è consigliata ad i soli utenti esperti; eventualmente, è possibile seguire altri metodi, come la creazione di script “ad hoc” per la generazione dei menuentry.
Per concludere, è bene ricordare GRUB Legacy per la sua semplicità di utilizzo, ma è impossibile non apprezzare le potenzialità del suo successore; e intanto si spera che presto il team di sviluppo fornisca anche qualche valido strumento per consentire a chiunque di personalizzare in modo semplice quanto potente questo utile strumento.
Chi lo desidera può personalizzare l'avvio con Grub Customizer, un front-end gratuito per Grub2.