Annuler une mise à niveau

Bonjour,

Suite à une mise à jour et surtout mise à niveau :

# apt update && apt full-upgrade

Je ne peux plus démarrer Buster qu’en mode de dépannage. Les erreurs sont des FAILED TO LOAD KERNEL… donc assez graves.

J’ai l’historique des paquets dans /var/log/apt/term.log mais il me manque la commande magique pour revenir à l’état directement antérieure.

A priori, j’aurai pu faire ça, si j’avais su avant… mais je ne l’ai pas fait.

# dpkg --get-selections > avant.txt

Puis, après mise à jour et à niveau :

# dpkg --clear-selections && dpkg --set-selections < avant.txt
# apt-get dselect-upgrade

Je n’ai pas trouvé cette commande ailleurs. Je parle bien d’un retour arrière le plus complet possible juste avant la dernière mise à niveau.

J’aurai sans doute dû faire un safe-upgrade.

Je vous remercie.

Mise à niveau depuis quelle version vers quelle version ?

Que se passe-t-il en mode normal ? Merci de détailler.

Quel est le message exact et complet ?

Bonsoir @PascalHambourg,

Par cette expression, je n’entendais rien d’autre que cette la commande citée dans le premier message :

# apt update && apt full-upgrade

Mise à jour pour update, mise à niveau pour upgrade. C’est une sémantique sans doute contestable. L’état actuel :

# uname -a 
Linux bustmac15 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5+deb10u2 (2019-08-08) x86_64 GNU/Linux
# lsb_release
No LSB module are available.

En l’occurence, je suis sous buster.

Voici de la précision.

Démarrage en mode « normal » :

Après Grub, la verbose du chargement m’affiche entre autre [ OK ] ces erreurs :

[   FAILED   ]    Failed to start Load Kernel Modules.
See 'systemctl status systemd-modules-load.service' for details.

Cette erreur apparaît à plusieurs reprises, quatre pour le dire clairement, entre le chargement du reste.

[   FAILED   ]    Failed to start NVIDIA Persistence Daemon
See 'systemctl status nvidia-persistenced.service' for details.

Cette nouvelle version nvidia a été installé avec la dernière mise à jour, j’ai changé (involontairement) de « gestionnaire d’affichage », de « gestionnaire de startX »… je ne sais pas trop comment le dire. Ce paquet m’a étonné, il me semblait que j’étais sous nouveau et non sous nvidia. Quoi qu’il en soit le système m’ait prévenu d’un changement de gestionnaire à ce niveau. J’aurais pu passer par systemctl pour faire le switch, mais j’ai choisi de redémarrer : c’est deux options sont proposées par le système à la fin du paramétrage me semble-t-il. Avec cette phrase bien habituel pour résoudre le conflit entre les deux modules d’affichage : « Le moyen le plus simple de résoudre ceci est de redémarrer.

Le système ne démarre pas plus loin que cette liste de chargement et s’arrête. Je peux éteindre proprement en appuyant d’une manière simple et courte sur le bouton mécanique de démarrage de l’ordinateur. J’entends par proprement le fait que le système m’affiche bien qu’il a compris la demande de « Power-off » et qu’il désactive un à un l’ensemble des éléments qu’il a chargé au démarrage : il m’en fait la liste d’une manière identique.

Le démarrage en mode de dépannage :

Le démarrage en mode de dépannage est très similaire : mêmes erreurs. Néanmoins, je peux prendre la main en root et voici ce que me retourne la navigation (-H) dans le dmesg :

ACPI Error : Needed type [Reference], found [Integrer]...
ACPI Error : AE_AML_OPERAND_TYPE, While resolving operand for [OPcodeName unvailable]...
ACPI Error : Method parse/execution failed \_PR.CPU0._PDC, AE_AML_OPERAND_TYPE...

C’est erreur intervient assez tôt, je pense qu’elle n’a rien à voir mais je n’en sais concrètement rien. Plus tard :

nvidia: module verification failed: signature and/or required key missing - tainting kernel 
module: x86/modules: Skiping onvalid relocation target, existing value is nonzero for type 1, loc 00000000000..., val fffffff...

Cette dernière ligne apparaît à dix reprises pour être exacte.

Liste non exhaustive des paquets dernièrement installés ou mis à jour, niveau… :

  • base-files_10.3+deb10u4_amd64
  • linux-image-4.19.0-8-amd64_4.19.98-1+deb10u1_amd64
  • linux-image-4.19.0-9-amd64_4.19.118-2_amd64
  • linux-headers-amd64_4.19+105+deb10u4_amd64
  • linux-headers-4.19.0-9-amd64_4.19.118-2_amd64
  • libsystemd0_241-7~deb10u4_amd64
  • libnss-myhostname_241-7~deb10u4_amd64
  • libpam-systemd_241-7~deb10u4_amd64
  • libnss-systemd_241-7~deb10u4_amd64
  • systemd_241-7~deb10u4_amd64
  • udev_241-7~deb10u4_amd64
  • libudev1_241-7~deb10u4_amd64
  • libapt-inst2.0_1.8.2.1_amd64
  • systemd-sysv_241-7~deb10u4_amd64
  • libapt-pkg5.0_1.8.2.1_amd64
  • apt_1.8.2.1_amd64
  • apt-utils_1.8.2.1_amd64
  • libnvidia-ml1_418.113-1_amd64
  • nvidia-driver-libs_418.113-1_amd64
  • nvidia-egl-icd_418.113-1_amd64
  • libegl-nvidia0_418.113-1_amd64
  • xserver-xorg-video-nvidia_418.113-1_amd64
  • nvidia-vdpau-driver_418.113-1_amd64
  • nvidia-kernel-support_418.113-1_amd64
  • libnvidia-cfg1_418.113-1_amd64
  • libgl1-nvidia-glvnd-glx_418.113-1_amd64
  • nvidia-vulkan-icd_418.113-1_amd64
  • libglx-nvidia0_418.113-1_amd64
  • libgles-nvidia2_418.113-1_amd64
  • libgles-nvidia1_418.113-1_amd64
  • nvidia-alternative_418.113-1_amd64
  • nvidia-driver_418.113-1_amd64
  • nvidia-driver-bin_418.113-1_amd64
  • nvidia-vulkan-common_418.113-1_amd64
  • libnvidia-glvkspirv_418.113-1_amd64
  • libnvidia-glcore_418.113-1_amd64
  • nvidia-kernel-dkms_418.113-1_amd64
  • nvidia-egl-common_418.113-1_amd64
  • libnvidia-eglcore_418.113-1_amd64
  • nvidia-legacy-check_418.113-1_amd64
  • tzdata_2020a-0+deb10u1_all
  • iputils-ping_3%3a20180629-2+deb10u1_amd64
  • chromium-l10n_80.0.3987.162-1~deb10u1_all
  • libcupsimage2_2.2.10-6+deb10u3_amd64
  • cups-ipp-utils_2.2.10-6+deb10u3_amd64
  • cups-daemon_2.2.10-6+deb10u3_amd64
  • cups-core-drivers_2.2.10-6+deb10u3_amd64

Je m’arrête là pour cette liste : environ 37 paquets nommés sur 159. Cet exercice est assez fastidieux, surtout mis en face de son utilité potentielle. Les 159 paquets compte les habituels libreoffice, vlc, libssh, libnvidia, etc.

A voir les deux nouvelles images de linux installées, il semble que j’étais bien en retard sur la mise à niveau. Ca m’étonne, mes autres machines n’ont pas eu à recevoir autant d’un coup, je mets régulièrement à jour normalement, j’ai dû temporairement délaisser cette machine.

Merci.

Donc le passage à la révision 10.4 toute fraîche.

Le mot important que tu avais omis est « modules ». Ça veut dire que le chargement d’un module mentionné dans /etc/modules ou /etc/modules.d/* a échoué (manquant ou erreur au chargement). Vérifier la liste de ces modules et leur présence effective. Exécuter aussi la commande systemctl mentionnée dans le message pour afficher plus de détails.

Il pourrait donc s’agir d’un problème avec le pilote graphique propriétaire Nvidia dont les modules du noyau doivent être recompilés à chaque mise à jour ou installation de noyau. Or il y a eu les deux : mise à jour de sécurité du noyau 4.19.0-8 et installation du noyau 4.19.0-9 (introduit par la révision 10.4)

Tu as essayé de démarrer avec les deux noyaux ?

Les erreurs ACPI sont assez courantes et généralement bénignes, on n’y fait attention que lorsqu’il y a un problème (souvent sans rapport).

Bonjour,

Vérifier avec la commande dkms status si le module du pilote nvidia s’est installé dans le nouveau noyau?
Sinon, il faut probablement le faire à la main avec une commande du genre de:
dkms install <pilote>/<version> -k <nom du noyau>

Par exemple, j’ai ceci sur ma Buster:

     root@yvan-maison:/# dkms status
    nvidia-legacy-340xx, 340.108, 4.19.0-8-amd64, x86_64: installed
    nvidia-legacy-340xx, 340.108, 4.19.0-9-amd64, x86_64: installed
    root@yvan-maison:/#

Pour moi, si nécessaire, la commande pour installer sur le noyau 4.19.0-9-amd64 serait:
dkms install nvidia-legacy-340xx/340.108 -k 4.19.0-9-amd64

A+

Rebonjour,

Alors, tout d’abord :

$ systemctl status nvidia-persistenced.service
● nvidia-persistenced.service - NVIDIA Persistence Daemon
   Loaded: loaded (/lib/systemd/system/nvidia-persistenced.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
$ systemctl status systemd-modules-load.service
● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/lib/systemd/system/systemd-modules-load.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2020-05-21 16:17:16 CEST; 6min ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 640 ExecStart=/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
 Main PID: 640 (code=exited, status=1/FAILURE)

mai 21 16:17:15 bustmac15 systemd-modules-load[640]: modprobe: ERROR: could not insert 'nvidia': Operation not permitted
mai 21 16:17:16 bustmac15 systemd-modules-load[640]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Exec format error
mai 21 16:17:16 bustmac15 systemd-modules-load[640]: modprobe: ERROR: ../libkmod/libkmod-module.c:979 command_do() Error running install command for nvidia_modeset
mai 21 16:17:16 bustmac15 systemd-modules-load[640]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted
mai 21 16:17:16 bustmac15 systemd-modules-load[640]: modprobe: ERROR: could not insert 'nvidia_current_drm': Exec format error
mai 21 16:17:16 bustmac15 systemd-modules-load[640]: Error running install command for nvidia_drm
mai 21 16:17:16 bustmac15 systemd-modules-load[640]: Failed to insert module 'nvidia_drm': Operation not permitted
mai 21 16:17:16 bustmac15 systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
mai 21 16:17:16 bustmac15 systemd[1]: systemd-modules-load.service: Failed with result 'exit-code'.
mai 21 16:17:16 bustmac15 systemd[1]: Failed to start Load Kernel Modules.

Non, je n’ai démarré qu’avec la configuration finale.

$ ls /etc/modules-load.d/
cups-filters.conf
modules.conf
nvidia.conf
$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

firewire-sbp2

Quant au nvidia.conf, on ne peut pas faire plus court :

$ cat /etc/modules-load.d/nvidia.conf
nvidia-drm

Il semble assez facilement perceptible que le problème viendrait des nouvelles compilations nvidia.

Mes commandes ne me retournent absolument rien. Il me semble pourtant respecter le synopsis de la commande et de l’option status tel que l’indique le manuel.

Trois possibilités si je comprends bien :

  1. Revenir à l’état antérieur pour ce qui concerne nvidia
  2. Peut-être essayer de réinstaller
  3. Résoudre le problème autrement ?
$ /etc/init.d/nvidia-persistenced start
Starting NVIDIA Persistenced  Daemon
[ 2534.631460 ] module: x86/modules: Skipping invalid relocation target... #etc, c'est du déjà vu.
nvidia-persitenced daemon failed to initialize. Check syslog for more details.

Que veux-tu dire par « configuration finale » ? Dans GRUB tu as le choix entre tous les noyaux installés.
Comment se fait-il que uname renvoie 4.19.0-5 (qui est une version sérieusement obsolète) alors que les noyaux 4.19.0-8 et 4.19.0-9 viennent d’être installés ou mis à jour ?

Ma configuration grub est adaptée à la présence de 5 OS dessus. S’il n’y avait que les trois dernières Debian (Jessie, Strech et buster), je n’aurais rien eu à faire de particulier, mais je dois bidouiller grub pour pouvoir obtenir des entrées de mac OSX Lion et Mountain Lion fonctionnelles. OS-PROBER est désactivé pour qu’il ne me génère pas inutilement des entrées inutilisables vers les os mac.
En tous cas, j’ai l’impression de n’avoir que deux possibilités : le noyau 4.19.0-5 normal et sa version recovery. Cela dit, je peux remettre un grub de base sans changement personnel en quelques secondes.

Je ne sais pas ce que tu entends par « adaptée », mais si elle ne prend pas en compte les nouveaux noyaux installés elle est mal fichue.

J’ai compris mon erreur.

J’ai deux machines mac, avec une configuaration très similaire.
Sur la première, à chaque changement de version de debian (jessis -----> Stretch -------> Buster), je réinstalle le nouveau grub sur sda1. L’entrée de Buster est donc générée par grub lui-même et évolue donc à chaque changement de noyau.
Pour la deuxième, celle qui ne pose désormais plus de problème, je me contentais d’adapter les entrées du grub que j’avais installé avec Jessie. L’entrée de grub qui pointait vers Buster était donc une manuelle qui conséquemment n’évoluait pas avec les changement de noyau de buster… d’où l’incohérence entre noyau et module et finalement, si j’ai bien compris, le problème.

Quand on est sous buster et que grub rajoute lui-même une entrée pour Stretch, il sélectionne, me semble-t-il, uniquement le dernier noyau… ou peut-être que je me trompe. Alors que pour Buster, il va proposer tout les noyaux possible comme tu viens de me le dire. Je ne crois pas que je puisse automatiser ma procédure. Pour conserver le grub installé sous Jessie, ce qui n’a aucun intéret en soi, il faudrait que je refasse manuellement l’entrée grub vers buster à chaque changement de noyau.

Demeure une bizarrerie : Cette configuration a tenu bon sans problème tout le temps de la Stretch, en tout cas je crois. Pourquoi ? Mais ce n’est peut-être pas très important.

Ma configuration grub consiste à (en partant du grub installé avec le dernière debian) :

  1. désactiver os-prober
  2. Ajouter manuellement les entrées vers les linux précédent en allant les chercher dans leur racines respectives au niveau /etc/grub.d/10_linux pour les coller dans le même fichier mais de la racine de la dernière Debian.
  3. Ajouter manuellement les entrées vers les os macx dans /etc/grub.d/40_custom
  4. modifier une variable et les noms afficher dans le fichier 10_linux pour avoir des entrées dont la nomenclature va être respectée par toutes les entrées.

Ceci étant dit, c’est drôle que tu ne t’en souviennes pas, ou que tu sembles ne pas t’en souvenir, parce que c’est très essentiellement grâce à toi (@PascalHambourg) que j’ai pu faire tous ça. Par exemple comprendre que les UUID des systèmes mac sont en deux versions (Gérer les entrées de grub /Grub et mac).

Bon, merci à tous en tout cas.

La non mise à jour de grub.cfg pourrait avoir pour conséquences la présence d’entrées de menu obsolètes pour des noyaux supprimés et l’absence d’entrées de menu pour les nouveaux noyaux installés, pouvant aller jusqu’à l’impossibilité de démarrer si toutes les entrées sont obsolètes (autoremove ne conserve que les deux derniers noyaux). Mais je ne vois pas comment cela pourrait causer une incohérence entre un noyau et ses modules car ils sont installés ensemble, et chaque noyau ne va pas chercher dans les modules des autres noyaux.

Le problème semble lié aux modules du pilote propriétaire nvidia, qui doivent être compilés pour chaque version de noyau installée. Je ne connais pas du tout le fonctionnement de ces modules.

Qu’as-tu fait exactement pour résoudre le problème ? Simplement démarrer avec un autre noyau après l’avoir ajouté dans le menu de GRUB ?

Non, update-grub crée des entrées de menu pour tous les noyaux. Par défaut, seul le noyau de version la plus élevée est présent dans le menu principal, mais les autres sont présents dans le sous-menu « options avancées ». Si GRUB_DISABLE_SUBMENU=y est défini dans /etc/default/grub, tous les noyaux sont présents dans le menu principal.

Si je devais faire un multiboot entre 5 OS dont plusieurs distributions Linux, au lieu d’inclure en dur les autres distributions dans grub.cfg (ce qui oblige à le mettre à jour après changement de noyau sur n’importe quelle distribution), je ferais des entrées de menu qui chargent le grub.cfg de l’autre distribution si compatible (commande configfile) ou chaînent son chargeur d’amorçage (commande chainloader).

Maintenant que tu en parles je me rappelle vaguement ce sujet mais je n’aurais pas fait le lien entre les deux.

Je me suis connecté en mode dépannage sous buster et après avoir rétabli internet, j’ai fait un update-grub ce qui a écrasé le fichier /boot/grub/grub.cfg sur /dev/sda1 qui avait été généré à partir du système Stretch et qui a donc redonné un grub avec la configuration neuve de buster. J’avais déjà préparé le fichier /etc/grub.d/40_custom en y ajoutant les entrées vers les os mac (voir plus bas pour le « protocole mac »).

Voici la manipulation globale que j’effectue, je fais essayé d’être à la fois précis et très succint. En l’écrivant, je me suis plus d’une fois demandé si ma mémoire ne me jouait pas des tours… Il me semble que c’est bien ça :

Pour plus de commodité, je pars de l’installation de Buster.

  1. Etant sur mac, j’ai veillé à booter sur l’image iso (le cd) d’installation de buster en mode UEFI et non BIOS (les deux sont possibles sous mac). Rater cette étape rajoute déjà plusieurs manipulations car il faudra rattraper ça.
  2. Je viens d’installer grub tel que proposé à la fin de l’installation de buster.
  3. Je redemarre ma machine, le grub est donc celui de buster tout neuf (soit ok pour les linux et mauvais pour les os macs).
  4. Je prend le chemin de buster.
  5. J’édite le fichier /etc/grub.d/40_custom pour y rajouter les entrées mac (pour plus de détail voir mon « pense-bête vi » plus bas) et celle de windows 7 (même si ca sert à rien puisqu’en 32 bit pas de démarrage uefi).
  6. Je fais un update-grub
  7. Je vais copier dans /boot/grub/grub.cfg (ou peut-être quelque part dans /etc/grub.d) les très nombreuses lignes qui permettent de démarrer Jessie et Stretch.
  8. Je les colle dans /etc/grub.d/40_custom dans l’ordre d’apparition que je choisis.
  9. Je désactive os-prober, j’en profite pour passer à 10 secondes le compteur de grub avant qu’il ne choisisse la première entrée.
  10. Je modifie une des premières lignes du fichier /etc/grub.d/10_linux en la changeant ainsi :
    OS="GNU/Linux - ${GRUB_DISTRIBUTOR} - 9.9 « Stretch »" parce que j’aime bien les choses lisses et que je veux que la ligne proposées par grub soit celle-ci (pour Stretch).
  11. Je modifie le fichier /etc/grub.d/40_custom en ce sens à la main pour que les entrées affichées soient les mêmes. Il faut modifier le même passage à chaque fois dans les lignes menuentry ou submenuentry.
  12. Je fais un update-grub et parfois un update-grub2pour me donner un genre parce qu’en faite ça ne change rien et n’apporte rien de plus, j’ai vérifié.
  13. Je redemarre et tout est nickel.

Bien sur tout cette manipulation n’a rien de théorique puisque tout fonctionne sur ma machine actuelle. Mais je me suis vautré sur un ou deux étapes pour ma machine principale sur laquelle il y a eu le probleme. Sur celle actuelle, il y a bien la proposition de tout les noyaux possible de Stretch. Il ne manque rien. Je vais essayer de mettre une phot plus bas.

Pour l’ajout des OS mac, voici le contenu de mon pense bête personelle que je me suis fait avec vi sur la thématique d’un grub adapté à ma situation :

  1. Installer grub sur sda ou sda1 (l’un ou/et l’autre) avec la commande :
# grub-install /dev/sdX

Pour plus de précision et notamment sur mac avec linux :

# grub-install --target=x86_64-efi /dev/sdX
  1. Verifier que les paquets liés soit installés :
  • os-prober
  • grub-efi-amd64 : pour être sur d’avoir installé le bon grub
  • grub-common
  • grub2-common
  • grub-efi-amd64-bin
  1. Commande efibootmgr -v (verbose) : cette commmande permet de clarifier la situation et l’ordre des boots. Une réponse idéale pourrait être parmi les deux suivantes :
        BootCurrent: 0000
        BootOrder: 0000,0080
        Boot0000* debian HD(1,28,64000,e5db7ba7-4363-49be-9cdd-a3ddc8f1e29b)File(\EFI\debian\grubx64.efi)
        Boot0080* Mac OS X ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(4,5dc5de8,5c2be98,ae1fc7b1-29d0-4553-9c8d-949bbca44fe3)
        Boot0081* Mac OS X ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(2,64028,e8c6e940,17cf479b-665e-4a27-8304-8fd353067b75)
        Boot0082* ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(4,5dc5de8,5c2be98,ae1fc7b1-29d0-4553-9c8d-949bbca44fe3)
        BootFFFF*ACPI(a0341d0,0)PCI(b,0)SATA(0,0,0)HD(4,5dc5de8,5c2be98,ae1fc7b1-29d0-4553-9c8d-949bbca44fe3)File(\System\Library\CoreServices\boot.efi)

ou bien celle-ci, mais moins « classe »,

       BootCurrent: 0000
       Timeout: 5 seconds
       BootOrder: 0000,0080
       Boot0000* debian        HD(1,28,64000,9c38a66f-ebf0-47f0-99eb-77401e334be4)File(\EFI\debian\grubx64.efi)
       Boot0080* Mac OS X      ACPI(a0341d0,0)PCI(1f,2)SATA(0,0,0)HD(2,64028,5c2be98,4f1b8f39-9ed6-4224-8332-659d980e680e)
       Boot0082*       ACPI(a0341d0,0)PCI(1f,2)SATA(0,0,0)HD(2,64028,5c2be98,4f1b8f39-9ed6-4224-8332-659d980e680e)

Dans les deux cas, un système linux debian Jessie et deux Mac OS X (10.7.5 et 10.8.5) sont installées.

  1. Commande os-prober peut-être utile.

  2. Faire un

# update-grub

Relever les uuid générés par os-prober via la commande update-grub dans le fichier /boot/grub/grub.cfg section 30_os-prober qui diffèrent de ceux relevés par la commande blkid

  1. Modifier le fichier /etc/default/grub en rajoutant la ligne (commande) :
GRUB_DISABLE_OS_PROBER=true

Cette dernière commande sert à inhiber le fichier /etc/grub.d/30_os-prober du paquet os-prober qui sert à trouvé les systèmes (OS) sur la machine. Le problème est que dans le cas de macOSX les liens qui sont créer par la commande update-grub avec la complicité d’os-prober ne fonctionnent pas. Pour une question esthétique il est intéressant de les supprimer. Cette commande sert à cela.

  1. Modifier le fichier 40_custom pour y rajouter les entrées voulues. Voici l’exemple pour les deux systèmes mac :
      menuentry "Mac OS X - Mountain Lion - 10.8.5 - /dev/sda2" {
      insmod part_gpt
      insmod hfsplus
      set root='hd1,gpt2'
      if [ x$feature_platform_search_hint = xy ]; then
            search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 3096c74ad0781680 
          else
            search --no-floppy --fs-uuid --set=root 3096c74ad0781680
      fi
      chainloader /System/Library/CoreServices/boot.efi
      }
      menuentry "Mac OS X - Lion - 10.7.5 - /dev/sda4" {
      insmod part_gpt
      insmod hfsplus
      set root='hd1,gpt4'
      if [ x$feature_platform_search_hint = xy ]; then
            search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt4 --hint-efi=hd1,gpt4 --hint-baremetal=ahci1,gpt4 c060374d4cd8b5d8 
          else
            search --no-floppy --fs-uuid --set=root c060374d4cd8b5d8 
      fi
      chainloader /System/Library/CoreServices/boot.efi
      }

Les lignes supplémentaires ne servent qu'à lancer le boot non en recherchant l'adresse du fichier par son nom hd1, au cas ou cela viendrait à changer, ce qui est très possible, en hd0 par exemple, mais directement via l'uuid, qui est lui plus stable, meme s'il peut changer. L'uuid ici n'est pas celui réel mais celui généré par os-prober et que l'on peut voir dans le fichier grub.cfg. Ces uuid sont plus court et n'ont pas de point communs avec les réels. Voici ci-dessous le backup du fichier avant cette modification (rajout de ces lignes) et dont je sais qu'il fonctionne :
      menuentry "Mac OS X - Mountain Lion - 10.8.5 - /dev/sda2" {
      insmod part_gpt
      insmod hfsplus
      set root='hd1,gpt2'
      chainloader /System/Library/CoreServices/boot.efi
      }
      menuentry "Mac OS X - Lion - 10.7.5 - /dev/sda4" {
      insmod part_gpt
      insmod hfsplus
      set root='hd1,gpt4'
      chainloader /System/Library/CoreServices/boot.efi
      }
  1. Adapter le script précédent avec la bonne adresse de DD, hd0 ou hd1, etc, et faire de même pour les partitions, gpt2, gpt3, gpt4, etc, et pour ahci, directement en lien avec hd. Puis y mettre les uuid soit réel, obtenu avec blkid, risque de ne pas fonctionner, ou, en tout cas dans le cas d’un mac, les uuid « partiels » contenu dans le fichier /boot/grub/grub.cfg et générés dans la section 30_os-prober.

  2. Faire de nouveau un # update-grub

  3. Les nouvelles entrées pointent vers les sytèmes, les anciennes sont supprimées car os-prober n’est plus consulté, et le tout doit fonctionner.20200525_212445

Et bien, si tu te sens de m’expliciter un tant soit peu la manipulation, je suis toujours satisfait d’apprendre.

Tu écris que tu fais cela sous buster mais dans l’étape 10 que tu modifies la variable OS dans 10_linux pour y ajouter « Stretch ». Ça ne colle pas.

Pour info, il est possible de personnaliser l’entrée de menu en modifiant la valeur de la variable GRUB_DISTRIBUTOR définie dans /etc/default/grub. Cependant le contenu de cette variable influe aussi sur le résultat de grub-install en mode EFI : le premier mot est pris comme valeur par défaut de l’option --bootloader-id qui définit à la fois nom du répertoire d’installation et l’étiquette de la variable de boot EFI. Or l’installation de GRUB signé pour le secure boot depuis buster utilise un chemin codé en dur EFI/debian/grub.cfg pour charger le fichier de configuration initial (qui contient les commandes pour charger le vrai fichier /boot/grub/grub.cfg).

Tu fais tout ça pour éviter l’inclusion des entrées de MacOS générées par os-prober qui ne fonctionnent pas. Il y a peut-être un moyen plus simple : les exclure avec la variable GRUB_OS_PROBER_SKIP_LIST dans /etc/default/grub. Voir la doc de GRUB pour les détails.

(Quitte à modifier des fichiers du système, une autre possibilité serait de supprimer ou corriger les fichiers d’os-prober qui détectent MacOS)

[quote=« Briceco, post:12, topic:82120 »]

/dev/sdX est sans objet en mode EFI et ignoré. GRUB est installé dans la partition EFI montée sur /boot/efi ou le répertoire spécifié par --efi-directory.

Le principe de base consiste à installer un GRUB indépendant de tout système d’exploitation. En mode BIOS/legacy, ça nécessite une petite partition dédiée pointée par --boot-directory. En mode EFI, on peut utiliser un répertoire de la partition EFI existante. Ensuite on lui écrit un fichier grub.cfg qui contient des entrées de menu pour chaîner les autres chargeurs (chainloader) ou charger les fichiers grub.cfg des autres GRUB (configfile).

Cependant, comme souvent le mode EFI complique les choses, et le secure boot encore plus.

  • Pour toutes les versions de Debian, la valeur par défaut de l’option --bootloader-id est « debian ». Donc chaque installation d’une version de Debian (et réinstallation/mise à jour de GRUB pour cette installation) va remplacer le GRUB existant et la variable de boot associée. Pour que le GRUB maître ne risque pas d’être écrasé, il faut l’installer avec une valeur --bootloader-id différente de « debian » ou autre identifiant d’OS.

  • Comme écrit plus haut, la variante de GRUB signée par Debian pour le secure boot utilise le fichier EFI/debian/grub.cfg de la partition EFI quelle que soit la valeur de --bootloader-id. Ce fichier sera écrasé lors de l’installation par défaut de GRUB par n’importe quel système Debian.

Deux solutions :

  • installer le GRUB maître sans le support du secure boot (si le secure boot n’est pas activé dans le firmware UEFI), depuis Debian 9 (qui ne supporte pas le secure boot) ou avec l’option --no-uefi-secure-boot depuis Debian 10.

  • ou installer le GRUB maître dans une partition EFI dédiée et s’assurer que toute nouvelle installation de Debian n’utilise pas cette partition EFI en la marquant « ne pas utiliser » lors du partitionnement.