Grub - variable $GRUB_ACTUAL_DEFAULT

Bonjour à tous,

Je travaille sur ma configuration grub qui doit être adaptée à ma machine et à la présence de divers OS sur celle-ci.

Dans le fichier /etc/grub.d/10_linux, une variable est utilisée : $GRUB_ACTUAL_DEFAULT

D’après ce que je comprends cette variable est définie ailleurs que dans ce fichier et elle sert à fournir le titre de l’entrée affichée par grub pour le linux. Un court extrait du fichier 10_linux sera sans doute plus parlant : if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ]

Je n’arrive pas à trouver la source de cette variable $GRUB_ACTUAL_DEFAULT que je souhaiterais modifier pour une meilleur lisibilité de mes entrées grub.

Savez-vous ou je pourrais trouver le fichier où cette variable est définie ?

Je vous remercie,

Bonne semaine à tous,

Briceco

Dans /usr/sbin/grub-mkconfig.
Mais je ne pense pas que cette variable dérivée de GRUB_DEFAULT définie dans /etc/default/grub sert à définir le titre de l’entrée de menu. Elle contient plutôt le numéro, le titre ou l’identifiant de l’entrée sélectionnée par défaut.

voilà bien une question curieuse; la commande root “update-grub” liste tous les os présents sur votre système et les écrit très clairement et lisiblement dans le menu grub.

Merci PascalHambourg. Je souhaite modifier le titre de l’entrée linux afin que “Jessie” y apparaisse, notamment pour bien différencier Jessie et Stretch. Remonter la piste risque de m’amener trop profond. Effectivemment, dans /usr/sbin/grub-mkconfig on trouve : GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT"

Du coup :

/boot/grub/grub.cfg -----> /etc/grub.d/10_linux ------> /usr/sbin/grub-mkconfig -------> ?

De plus, je pars sur une conjecture comme tu me le rappelles :

J’aurai bien aimé faire ça proprement, en évitant d’éditer directement grub.cfg. Une idée ?

Et bien, je ne l’ai évoqué que très rapidemment avec cette phrase… [quote=“Briceco, post:1, topic:74771”]
Je travaille sur ma configuration grub qui doit être adaptée à ma machine et à la présence de divers OS sur celle-ci.
[/quote]
… mais il se trouve que j’ai une configuration particulière. Je ne suis pas sur un pc mais sur un mac, ce qui change beaucoup de chose, et j’ai plusieurs os mac installés qui coexistent avec Jessie et Stretch. Alors non, et définitivement non, grub est incapable de me lister correctement, lisiblement et fonctionnellement certains OS, particulièrement les mac, et je suis constamment obligé de passer derrière pour avoir du propre et surtout du fonctionnel. A noter que je ne me plains absolument pas. C’est un simple constat.

Exemple concret : Dans ma situation os-prober est désactivé car il doit l’être.

En fait, 6 de mes 11 sujets postés sur ce forum sont directement liés à ma configuration…

Salut
la première ligne affichée est le résultat de la configuration dans /etc/default/grub

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

root@debian:/# GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
root@debian:/# echo $GRUB_DISTRIBUTOR
Debian
root@debian:/# lsb_release -i -s
Debian

Si tu selectionnes la deuxième ligne (options avancées) , l’affichage de l’identité du noyau est le résultat du script /etc/grub.d/10_linux
Mais faire une équivalence nom de distribution et version du noyau c’est pas juste. Exemple j’ai toujours le noyau 3.16 sous Buster

Autres configuration possible
Masquer les lignes memtest

sudo chmod -x /etc/grub.d/20_memtest86+

Les autres OS sont le résultat de /etc/grub.d/30_os-prober

Pour prendre en compte les modifications toujours faire
sudo update-grub

Cf la doc:

https://help.ubuntu.com/community/Grub2/Setup

Et aller fouiller dans grub-mkconfig

locate grub-mkconfig
/usr/lib/grub/grub-mkconfig_lib
/usr/sbin/grub-mkconfig
/usr/share/grub/grub-mkconfig_lib

qui doit etre appelé par update-grub

Ok merci @grandtoubab. Les infos concernant GRUB_DISTRIBUTOR m’ont été très utile.

J’ai modifié 10_linux en conséquence et tout est parfait.

Merci à tous.

Dans mon cas ou je conserve l’accès en même temps aux depôts Jessie, Stretch et Buster l’info la plus pertinente est le PRETTY_NAME

 cat /usr/lib/os-release
PRETTY_NAME="Debian GNU/Linux buster/sid"
NAME="Debian GNU/Linux"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Car lsb_release choisit d’afficher uniquement Jessie

root@debian:/# lsb_release --all
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 8.9 (jessie)
Release:	8.9
Codename:	jessie
root@debian:/# 

Donc j’ai mis ça

GRUB_DISTRIBUTOR=$(grep PRETTY_NAME /usr/lib/os-release)

ce qui affiche ca PRETTY_NAME=“Debian GNU/Linux buster/sid”, comme je ne suis pas balaise en awk et compagnie, je ne sais pas faire disparatire PRETTY_NAME= :grinning:

Salut,

ce qui affiche ca PRETTY_NAME=“Debian GNU/Linux buster/sid”, comme je ne suis pas balaise en awk et compagnie, je ne sais pas faire disparatire PRETTY_NAME= :grinning:

tu peux utiliser ça:
GRUB_DISTRIBUTOR=$(sed -n ‘s/PRETTY_NAME=//1p’ /usr/lib/os-release)

EDIT: bon et bien on a tous répondu en même temps, les gens de ce forum aiment bien sed :slight_smile:

Tu peux utiliser sed pour supprimer PRETTY_NAME=, ou bien tu peux sourcer le fichier (puisqu’il définit des variables) au lieu de le grepper, et utiliser la valeur de la variable.

quand je mets

source /usr/lib/os-release
GRUB_DISTRIBUTOR=$PRETTY_NAME

ça passe pas

root@debian:/# update-grub
/usr/sbin/grub-mkconfig: 11: /etc/default/grub: source: not found
root@debian:/# 

je vais prendre le sed
Merci Sputnik93 et PascalHambourg

Regarde le dernier post de MicP dans ce sujet: Bash : Variables, comment les utiliser en dehors du fichier ?

Il faut set -a avant le source (et set +a juste après, pour plus de propreté).

je crois que c’est parce que

cat /usr/sbin/grub-mkconfig
#! /bin/sh
set -e

ce script grub-mkconfig n’est pas en bash

Bonsoir

Si le sheban est :

!# /bin/sh

l’interpréteur de commande sera dash :

michel@debg53sw:~$ file /bin/sh
/bin/sh: symbolic link to dash
michel@debg53sw:~$ 

et avec dash
set -a permet aussi d’exporter des variables depuis un script ou en “sourçant” un fichier

Extrait de man dash :

   -a allexport     Export all variables assigned to.

Finalement je ne comprends rien
ou doit s’ecrire la directive source?
dans le fichier qui détient la donnée , dans ce cas /usr/lib/os-release ou dans le fichier qui veut utiliser la donnée qui ne lui appartient pas dans ce cas /etc/default/grub

Meme avec set + a dans /etc/default/grub dans ça ne fonctionne pas , il y a toujours la meme erreur
/usr/sbin/grub-mkconfig: /etc/default/grub: source: not found

Extrait de la page man de l’interpréteur de commandes dash :

…
   Builtins
…
     . file
            The commands in the specified file are read and executed by the shell.

…

michel@debg53sw:~/tstSource$ cat testeVars.sh 
#! /bin/sh
set -a
. /usr/lib/os-release
set +a
echo $PRETTY_NAME
michel@debg53sw:~/tstSource$ 

Le point (.) est la commande qui me permet de “sourcer” le fichier

michel@debg53sw:~/tstSource$ dash testeVars.sh 
Debian GNU/Linux 8 (jessie)
michel@debg53sw:~/tstSource$

Bravo MicP , un point qui change tout :grinning:

set -a
. /usr/lib/os-release
set +a
GRUB_DISTRIBUTOR=$PRETTY_NAME
root@debian:/# update-grub
Création du fichier de configuration GRUB…
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Image Linux trouvée : /boot/vmlinuz-4.9.0-3-amd64
Image mémoire initiale trouvée : /boot/initrd.img-4.9.0-3-amd64
Image Linux trouvée : /boot/vmlinuz-3.16.0-4-amd64
Image mémoire initiale trouvée : /boot/initrd.img-3.16.0-4-amd64
fait
root@debian:/# 

génère bien

menuentry 'Debian GNU/Linux buster/sid GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_

et

menuentry 'Debian GNU/Linux buster/sid GNU/Linux, avec Linux 4.9.0-3-amd64'

dans /boot/grub/grub.cfg

Pour être vraiment satisfait et éviter le double affichage GNU/Linux, il faut modifier la ligne 45 de /etc/grub.d/10_linux

#     OS="${GRUB_DISTRIBUTOR} GNU/Linux"
      OS="${GRUB_DISTRIBUTOR}"