lunedì 28 settembre 2009

Configurare GRUB 2

Questa guida segue e completa quella per l'installazione di GRUB 2: Come aggiornare a GRUB 2 in Jaunty.


...'grugnare' o 'grugnire' si traducono invece con 'to grunt', mentre 'rugliare' è 'to growl'. But the pig more often grub!

In particolare verrà spiegato come configurare l'immagine di sfondo, i colori del testo dello splash e la sua dimensione, il kernel di avvio di default e il timeout, che poi sono le uniche cose che mi interessava cambiare.

Chi sapeva configurare il vecchio GRUB editando il file /boot/grub/menu.lst, avrà probabilmente tentato di fare lo stesso col corrispettivo in GRUB 2, cioè /boot/grub/grub.cfg. Questo file però non può essere editato direttamente, e infatti nelle prime righe dello stesso è riportato il seguente commento:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/update-grub using templates
# from /etc/grub.d and settings from /etc/default/grub
#
...


Chiarissimo: per configurare GRUB 2 bisogna prima editare i vari file contenuti nella directory /etc/grub.d e/o il file /etc/default/grub, e poi lanciare il comando /usr/sbin/update-grub, che genererà il nuovo file /boot/grub/grub.cfg contenente le modifiche apportate.
Per inciso, lo stesso comando viene lanciato dal sistema ogni volta che si aggiunge o che si rimuove una versione del kernel: infatti, così com'era in menu.lst per GRUB, anche il file grub.cfg in GRUB 2 contiene la lista di tutte le versioni del kernel installate e avviabili, disposte il modo che la più recente stia sopra. Detto questo, iniziate e pensare allo '0' e andiamo avanti.

Settare il kernel di avvio e il timeout:

bisogna editare il file /etc/default/grub. Per questo, come per tutti i (pochi) comandi a seguire, sono necessari i privilegi di amministratore (sudo ma godo!). L'editor qui usato è gedit, default di Gnome e quindi di Ubuntu. Aprire il file così

~$ sudo gedit /etc/default/grub

Questo ad esempio è estratto dal mio:

...
GRUB_DEFAULT=0
GRUB_TIMEOUT=3
...


Alla voce 'GRUB_TIMEOUT=...' si può settare il valore, in secondi, del tempo che GRUB 2 attende prima di lanciare il kernel di default. In questo caso, che è poi il default di Ubuntu, il kernel che verrà lanciato all'avvio è quello che corrisponde alla prima riga (riga 0). Sto parlando delle righe su cui GRUB dispone i vari kernel nella schermata di avvio: la prima riga corrisponde al numero '0' nell'impostazione 'GRUB_DEFAULT=...'.  Anche il vecchio GRUB contava le righe partendo da 0: la seconda corrisponde ad 1 e così via. Il default è 0 in modo che sia lanciato il più recente kernel installato. Credo che chiunque abbia avuto più di un kernel contemporaneamente, o magari un dual boot, abbia capito; per tutti gli altri, modificare questo valore non serve.

Ora che questo file è stato editato, bisogna rendere effettive queste modifiche, caricandole in grub.cfg col comando di cui sopra, così:

~$ sudo update-grub


! Qualsiasi modifica fatta a qualunque dei file editabili di cui parlavo prima e di cui parlerò in seguito (qui è /etc/default/grub, ricordate invece che /boot/grub/grub.cfg non è editabile!), non sarà resa effettiva finché non sarà dato questo comando !

Dimensioni, sfondo e colori del testo dello splash:

E veniamo ai file nella directory /etc/grub.d. Anche col vecchio GRUB era possibile usare immagini per lo sfondo, bastava solo che fossero a 14 colori, di dimensioni 640x480, salvate in formato .xpm e compresse in .gz (es: fiesta.xpm.gz). GRUB 2 da questo punto di vista ha fatto molti passi avanti. I file che ci serve editare sono solo due, iniziamo dal primo:

~$ sudo gedit '/etc/grub.d/00_header'


qui, alla riga 46, si può settare la risoluzione dello splash di GRUB, facendola ad esempio uguale a quella del monitor

...
set gfxmode=1280x1024
...


o comunque mai più grande. Attenzione: ho riscontrato che non tutte le risoluzioni sono accettate; ad esempio quella del mio portatile, 1280x800, non lo è. Si provi comunque ad settare la propria, ma assicurandosi, prima, che il kernel di default sia funzionante. Si potrà così tornare ad editare il file di cui sopra, ripristinare il valore al default che è 640x480, ed aggiornare grub. Ricordarsi di salvare e andiamo all'altro file:

~$ sudo gedit '/etc/grub.d/05_debian_theme'


Qui c'è bisogno di qualche spiegazione. Guardiamo il file, così come io l'ho modificato:



Ho modificato la riga con le sottolineature per far sì che grub cerchi il file fiesta con estensione png, tga o jpeg nelle cartelle /boot/grub/splashimages e /usr/share/images/grub. La prima delle due cartelle è la dir di default degli splashimages del vecchio grub; è un posto ragionevole e voglio continuare a tenerci gli sfondi. Lì dove invece ho sottolineato jpeg, beh: lì originariamente non c'è. E fintanto che non lo si aggiungerà, non si potranno usare immagini jpeg; che però, come si capisce leggendo poco sotto (!), sono supportate.
Come è facile notare, è altrettanto facile creare ambiguità (esempio di battuta ricorsiva), mettando due file con uguale nome e diversa estensione, anche in cartelle diverse. Io ho fatto in modo di non crearne, e non so cosa succeda. Se si è modificata la dimensione dello splash di grub (set gfxmode=..), si scelga un'immagine delle stesse dimensioni.
Poco più sotto alle righe dello screenshot qui sopra, si può settare il colore del testo delle stringhe in evidenza (set color_highlight) e di quelle non in evidenza. Io ho semplicemente cambiato magenta con white.

È tutto, non dimenticarsi
~$ sudo update-grub

22 commenti:

alabastronero ha detto...

grazie dell'ottimo post :)

solo una precisazione:
[QUOTE]
Come è facile notare, è altrettanto facile creare ambiguità (esempio di battuta ricorsiva), mettando due file con uguale nome e diversa estensione, anche in cartelle diverse. Io ho fatto in modo di non crearne, e non so cosa succeda.
[/QUOTE]

leggendo il codice è abbastanza evidente quel che succederebbe.
il blocco case fa si che quando un file possiede il nome cercato e ha estensione corrispondente a quella supportata da grub2 viene impostata una variabile "reader".
ogni nuova occorrenza di file corrispondente ai requisiti cercati corrisponderà ad una nuova riassegnazione della variabile; chiaramente se ci sono più immagini il valore della variabile "reader" sarà quello dell'ultimo file corrispondente trovato.
l'ordine dei file dipende dall'ordine in cui directory ed estensioni appaiono nel ciclo for:
sia le directory che i file vengono analizzati in ordine di scrittura, quindinell'esempio sopra viene analizzata prima la directory /boot/grub/splashimages e poi la directory /usr/share/images/grub.
per ogni directory, sempre nell'esempio sopra, vengono analizzati prima i file con estensione png, poi tga e infine jpeg.
quindi, supponendo di avere in entrambe le directory una immagine fiesta.png, la variabile "reader" sarà assegnata al file contenuto in /usr/share/images/grub, mentre nel caso dei file fiesta.png e fiesta.jpeg contenuti nella stessa dir, la variabile reader sarà impostata a "fiesta.jpeg"

ultima precisazione: nel codice sopra non sono comprese le estensioni jpg, per potere funzionare anche con file jpg il codice dovrebbe essere:
--cut-- /fiesta.{png,tga,jpg,jpeg} --cut--

spero di essere stato chiaro :)

grazie ancora :)

Proarci ha detto...

@alabastronero
sei stato chiaro e preziosissimo.

Tanto più che la guida è scritta su prove empiriche, io ho provato a capire come funzionava..; e quindi il tuo intervento la completa aggiungendo un po' di sana 'teoria'.

Per l'ultima tua precisazione: ok, sottolineiamo allora che si deve aver cura di usare, per l'estensione di questo tipo di file, la dicitura '.jpeg' e NON quella più comune '.jpg'. Questo evita di modificare ancora il codice. Io l'ho dato per scontato scrivendo sempre nel primo modo. Ma è meglio chiarirlo, se a qualcuno sfuggisse e non capisse perché poi non funziona.

(mi dispiace che il tag QUOTE non funzioni nei commenti, non dipende da me)

Grazie! ciao

Checco ha detto...

Cristo santo...Mettila completa la parte dell'impostazione dello sfondo...non si vede una cippa! ._.

Proarci ha detto...

@Checco

in larghezza è completa (a parte le sfumature, lì finisce proprio con 'do'), in altezza è inutile!

Con 'visualizza immagine' la puoi ingrandire, ma non c'è altro che serva

Anonimo ha detto...

è possibile editare il file .cfg

sudo chmod +w /boot/grub/grub.cfg # Remove 'read-only', necessary even for "root"
sudo nano /boot/grub/grub.cfg # Edit as "root"


:-)

attenzione a cosa modificate

Proarci ha detto...

@Anonimo

NO! è sbagliato: se sconsigliano di toccare quel file un motivo c'è! I settaggi fatti così vanno persi non appena il sistema rigenera grub.

Tipico esempio di 'dritte' che fanno danni!

Anonimo ha detto...

si è vero si rigenera infatti è meglio salvarlo in una copia. ma almeno è possibile modificare i nomi e altre cose.
ma una domanda, sapete se è possibile rimuovere il riquadro di scelta degli OS

quel riquadro rettangolare intendo.

Proarci ha detto...

@Anonimo II

ho capito, il riquadro che delimita le voci avviabili. Penso che non sia possibile, ma appena posso darò un'occhiata.

ciao

Anonimo ha detto...

imparato molto

Anonimo ha detto...

molto intiresno, grazie

Anonimo ha detto...

Splendidly done is richer reconsider than well said.

Anonimo ha detto...

Artistically done is well-advised b wealthier than extravagantly said.

Anonimo ha detto...

Lovingly done is well-advised b wealthier than comfortably said.

Anonimo ha detto...

Splendidly done is sick than well said.

Anonimo ha detto...

Splendidly done is well-advised b wealthier than spectacularly said.

Anonimo ha detto...

A gink begins cutting his wisdom teeth the initially without surcease he bites out more than he can chew.

Anonimo ha detto...

To be a upright benign being is to be enduring a make of openness to the world, an skill to trust undeterminable things beyond your own control, that can govern you to be shattered in hugely exceptionally circumstances pro which you were not to blame. That says something uncommonly weighty with the prerequisite of the righteous life: that it is based on a conviction in the uncertain and on a willingness to be exposed; it's based on being more like a shop than like a jewel, something fairly fragile, but whose extremely particular beauty is inseparable from that fragility.

Anonimo ha detto...

We're a group of volunteers and starting a new scheme in our community. Your site provided us with valuable info to work on. You've done a formidable
job and our entire community will be thankful to you.



my homepage: repetitive exercises and tasks

Anonimo ha detto...

Hi to every body, it's my first pay a visit of this weblog; this web site contains awesome and really excellent material designed for readers.

Also visit my web-site garbage disposal troubleshooting

Anonimo ha detto...

Howdy! I could have sworn I've been to this website before but after going through some of the posts I realized it's new to me.
Nonetheless, I'm definitely happy I stumbled upon it and I'll be book-marking it and checking back often!


my page ... hand pole saw pruner

Anonimo ha detto...

I'm not sure exactly why but this weblog is loading extremely slow for me. Is anyone else having this issue or is it a problem on my end? I'll check back later
on and see if the problem still exists.

my web-site: pitching velocity program

Anonimo ha detto...

New simulators are on average produced every second month
and some are highly expensive. You must know the different points that you want from a
gaming just before you acquire 1. This game by Hexacto is simple, straightforward, and fun.
The main purpose of a simulator is
to understand the behavior of the system. The instruments that lag in real life, lag correctly, gyro drift is modeled correctly, the magnetic compass is subject to aircraft body forces - all those things that make real world flying a challenge are present.