Grub2 : personnaliser une distribution exotique
Par pojem le lundi, 15 octobre 2012, 09:54 - Opensuse - Lien permanent
Grub2, c'est fort, mais ça ne reconnait que les plus forts.
En installant slitaz pour mes essais de laboratoire, j'ai eu le désappointement de le retrouver, après mise à jour du grub (opensuse) en tant que unknown Linux Distribution, et bien sûr sans le logo qui va avec.
Au boulot ...
Mais pourquoi ?
Tout simplement parce que Slitaz ne fait pas partie de la liste des distributions répertoriées, qui se trouve dans :
$ cat /usr/lib/os-probes/mounted/90linux-distro
qu'il fallait quand même trouver !
Réparer l'oubli
À partir de là il est simple de s'inspirer des distribs présentes et d'insérer quelque part :
~ ~ elif [ -e "$dir/etc/slitaz-release" ]; then ~ short="Slitaz" ~ long="$(printf "Slitaz GNU/Linux (%s)\n" "$(cat "$dir/etc/slitaz-release")")"
après quoi
# grub2-mkconfig -o /boot/grub2/grub.cfg
remettra le nom de la distribution avec le n° de version en prime.
C'est bien beau, mais qu'adviendra-t'il après la prochaine mise à jour de Grub2 ?
Le détecteur d'OS de grub2 (os-prober) a l'avantage de fournir une syntaxe soignée. Le plus simple est d'envisager une entrée personnamlisée (/etc/grub.d/40_custom) et de signaler à os-prober de ne pas tenir compte de la partition où se trouve Slitaz.
Ajouter l'icône.
Il faut d'abord la créer, en s'inspirant par exemple du format de l'icône d'opensuse (/boot/grub2/themes/openSUSE/icons/opensuse.png).
Comme je m'y suis collé, la voici .
La placer dans le même répertoire : /boot/grub2/themes/openSUSE/icons. Ce n'est encore pas suffisant, il faut ajouter l'option --class slitaz à la commande menuentry dans /boot/grub2/grub.cfg, comme ceci :
~ menuentry 'Slitaz GNU/Linux (4.0)' --class gnu-linux --class gnu --class slitaz --.......
Provisoirement, jusqu'à la prochaine mise à jour de grub2. Mais ça marche.
Consolidation
J'aurais aimé stabiliser cette entrée slitaz à la main et laisser le programme os-prober s'occuper du reste, mais malheureusement, ce dernier ne peut qu'être activé/désactivé.
Cette discussion n'est pas très encourageante.
L'idée, dans l'attente d'une évolution de grub2 vers davantage de paramétrage, est donc de ne l'activer qu'à chaque changement (ajout/suppression d'un OS, évolution d'un noyau, etc...) et de recopier ses résultats (grub.cfg) dans le fichier /etc/grub.d/40_custom, comme expliqué sur ce billet.
Désactivation de os-prober
Ajouter cette ligne dans le fichier /etc/default/grub, en root :
GRUB_DISABLE_OS_PROBER="true"
Et recopier le contenu de la section 30_os-prober à la fin du fichier /etc/grub.d/40_custom
C'est pas folichon mais ça fonctionne.
Petit script pour rétablissement de l'icône :
J'ai copié l'icône slitaz.png dans le répertoire .local/share/grub2/themes/openSUSE/icons.
$ mkdir -p .local/share/grub2/themes/openSUSE/icons $ cp slitaz.png .local/share/grub2/themes/openSUSE/icons
Script permettant la mise à jour grub2 + recopie de l'image au cas où elle ait disparue (ça m'est déjà arrivé entre le début et la fin de la rédaction de cet article !).
#!/bin/sh cp /home/<moi>/.local/share/grub2/themes/openSUSE/icons/slitaz.png /boot/grub2/themes/openSUSE/icons && grub2-mkconfig -o /boot/grub2/grub.cfg
Enregistrer par exemple d'abord dans ./local/bin/grub2-update-with-slitaz puis copier en root vers /usr/local/bin. Par exemple :
$ mkdir .local/bin $ echo "#/bin/sh" > .local/bin/grub2-update-with-slitaz $ echo "cp /home/<moi>/.local/share/grub2/themes/openSUSE/icons/slitaz.png /boot/grub2/themes/openSUSE/icons && grub2-mkconfig -o /boot/grub2/grub.cfg" >> .local/bin/grub2-update-with-slitaz $ chmod +x .local/bin/grub2-update-with-slitaz $ su # cp .local/bin/grub2-update-with-slitaz /usr/local/bin
Il n'y a plus qu'à taper en console, en root, si besoin :
# grub2-update-with-slitaz
Et voilà.
Ce tuto intéressant : http://www.dedoimedo.com/computers/grub-2.html#mozTocId624480. Ils ne sont pas si nombreux.