mardi 30 mars 2010

Grub !

Alors oui juste un petit message au sujet de grub.
Je fais partie des heureux utilisateurs qui ont un dual-boot entre Windows et Linux ou plus précisément entre Windows XP Home et Debian (da best distro ever !). Le fait est que mon utilisation de ces deux OS se fait par "phases" ou plus communément, j'ai mes périodes Windows et mes périodes Linux et jusqu'à aujourd'hui je passais mon temps à mettre à jour mon menu.lst entre la plupart de ces phases pour ne pas tout le temps avoir à choisir manuellement l'OS sur lequel je veux booter.
Donc est venu le moment où je me suis demandé si il existait un moyen de garder le dernier OS utilisé de telle sorte que je ne sois plus obligé d'éditer à chaque fois (bêtement) mon menu.lst et qu'entre chaque "phases", aussi courtes soit-elle, de simplement changer d'option de menu aux moments idoines.
Je ne doutais pas que ce soit possible vu que c'est un projet de la sphere Linux (et deux têtes valent mieux qu'une dit-on, d'autant plus quand ces têtes ont une approche très fusionnelle avec celle des "utilisateurs moyens"), j'ai donc commencé ma petite recherche sur internet. En parcourant mon menu.lst je remarques quelques lignes comme
# savedefault=true
ou
# howmany = all

Dans le premier cas on peut penser se rapprocher de la réponse, dans le second on en profite pour faire d'une pierre deux coups.
Parmis les pages que j'ai vu certains préconisent l'utilisation de startupmanager : un outil graphique dont la photo d'écran présentait bien une option "Last Used" pour le choix de l'OS par défaut donc exactement ce que je cherchais.
Je ne suis pas spécialement fan de l'outil graphique mais d'un autre côté je n'avais pas envie de me prendre la tête une heure à chercher la solution ; les pistes que j'ai parcouru jusqu'alors montraient qu'en fait je faisais un peu fausse route avec savedefault.

Bref, pour savoir quoi modifié je n'y suis pas allé par 4 chemins : j'ai installé startupmanager en une commande (ce qui, au passage, va bien plus vite que de chercher, télécharger puis installer un logiciel àla mode de Windows. Je vous le garantie. Et puis ça permet de faire des scripts comme le script d'installation du japonais que j'avais écrit il y a quelques temps) et j'ai laissé cet utilitaire faire les changements pour moi.
Ensuite, parce que c'est bien beau de choisir la solution de facilité mais encore faut-il nourrir sa culture générale, j'ai fait un petit diff entre ma sauvegarde avant les changements apportés par startupmanager et le fichier en production. Donc voilà le résultat de la commande :

eminomeneko@devstation:/boot/grub$ sudo diff menu.lst menu.lst.ima
[sudo] password for eminomeneko:
14c14
< default        saved
---
> default        0
34c34
< ## password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
---
> #      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
136a137,146
> title        Debian GNU/Linux, kernel 2.6.26-1-686
> root        (hd0,5)
> kernel        /boot/vmlinuz-2.6.26-1-686 root=/dev/hda6 ro quiet
> initrd        /boot/initrd.img-2.6.26-1-686
>
> title        Debian GNU/Linux, kernel 2.6.26-1-686 (single-user mode)
> root        (hd0,5)
> kernel        /boot/vmlinuz-2.6.26-1-686 root=/dev/hda6 ro single
> initrd        /boot/initrd.img-2.6.26-1-686


On observe donc bien qu'en fait le changement apporté par startupmanager c'est la valeur de l'option default qui de ce que je croyais jusqu'alors ne pouvaient êtres seulement numérique. Ça donne une petite idée de la manière dont est gérée cette option au niveau du code source. Genre je récup en tant que chaîne de caractères, on compare avec une des chaînes prévues (en l'occurence saved ici) et sinon on regarde si c'est transtypable en entier, sinon probablement on lève une exception/erreur.
Comme je l'ai dis plus tôt j'en ai profité pour faire d'une pierre deux coups. Cette fois ça concerne l'option howmany qui me permet de limiter le nombre des entrées de noyaux qui sont affichés dans Grub.
Jusque là j'ai fais system-D en commentant les lignes (pas sur ce poste mais d'autres) que je ne voulais plus voir apparaître. On note donc que par la même occasion, startupmanager en a profité pour faire ce petit ménage de printemps (qui donc est de saison) d'où les lignes qui sont simplement supprimées et non pas seulement remplacées.
Autre chose. J'ai du ajouter l'option savedefault dans la section concernant Linux parce qu'il n'était pas présent. En fait là où on aura ajouté savedefault on gardera une trace de ce choix et sinon ben on reste sur le dernier. C'est pratique si vous avez par exemple d'autres entrées que vous utiliseriez ponctuellement comme memtest86+. Une fois utilisé et le PC rebooté on retombe sur le choix précédent l'utilisation de Memtest c'est-à-dire Linux ou Windows.

Bref pour faire court : si on veut que grub se souvienne du dernier OS choisi il faut affecter la valeur saved à l'option default, et si on veut limiter automatiquement le nombre de kernels qui vont êtres proposés au démarrage, il existe une option howmany qui appèpte pour valeurs soit "all" si on veut qu'il complète simplement le menu.lst à chaque installation d'un nouveau noyau, soit un nombre entier qui délimite le nombre de noyaux présents dans le menu de démarrage.
Voilà pour mon premier post sur Linux. D'autres suivront certainement.