dimanche 26 août 2012

Erreur grubby

Description du problème: lors d'une mise à jour nécessitant une adaptation du menu de grub, on reçoit (travaillant en ligne de commande) le message:
grubby fatal error: unable to find a suitable template
Cela se produit lorsque suite à une ou plusieurs mises à niveau, on passe d'un système utilisant grub (legacy) à un système utilisant grub2.
En effet, grubby découvrant la présence d'un fichier menu de grub legacy (/boot/grub/grub.conf ou /boot/grub/menu.lst) essaie de le mettre à jour. Or les éléments nécessaires pour ce faire ne sont plus présents dans le système, ce qui engendre le message d'erreur en question.
Dans le cas de Fedora 17 par exemple, ce qui concerne grub legacy se trouve dans /boot/grub alors que les fichiers relatifs à grub2 ont été placés dans /boot/grub2. Recherchons quels sont les paquetages dont dépendent ces deux dossiers:
[toto@rigel ~]$ rpm -qf /boot/grub
le fichier /boot/grub n'appartient à aucun paquetage
[toto@rigel ~]$ rpm -qf /boot/grub2
grub2-tools-2.0-0.37.beta6.fc17.x86_64
/boot/grub n'appartient plus à aucun paquetage et pour résoudre le problème nous pourrions donc envisager de le supprimer purement et simplement.
Auparavant, vérifions ce qu'il en est en ce qui concerne les fichiers contenus dans /boot/grub:
[toto@rigel ~]$ cd /boot/grub
[toto@rigel grub]$ rpm -qf * |grep -v 'le fichier' | sort | uniq | xargs -t -n 1 rpm -ql 2>&1 | grep "$PWD/\|rpm -ql"
rpm -ql fedora-logos-17.0.2-1.fc17.noarch
/boot/grub/splash.xpm.gz
Pas de chance; le fichier splash.xpm.gz appartient au paquetage fedora-logos.
Il est donc préférable de ne pas supprimer /boot/grub.
En fait il suffit de renommer (ou supprimer) le fichier menu de grub et d'adapter en conséquence (ou supprimer) les liens pointant vers ce fichier:
[root@rigel ~]# cd /boot/grub
[root@rigel grub]# mv grub.conf grub.conf.unused
[root@rigel grub]# ln -sf ./grub.conf.unused menu.lst
Il existe encore dans /etc un lien vers /boot/grub/grub.conf. Supprimons le et si nous avons renommé /boot/grub/grub.conf, créons le lien adéquat:
[root@rigel grub]# cd /etc
[root@rigel etc]# rm grub.conf
rm : supprimer lien symbolique « grub.conf » ?
[root@rigel etc]# ln -s ../boot/grub/grub.conf.unused .
Et voila: grubby n'affichera plus de message d'erreur lors des mises à jour.