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.
- 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.
- Je viens d’installer grub tel que proposé à la fin de l’installation de buster.
- Je redemarre ma machine, le grub est donc celui de buster tout neuf (soit ok pour les linux et mauvais pour les os macs).
- Je prend le chemin de buster.
- 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).
- Je fais un
update-grub
- 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.
- Je les colle dans /etc/grub.d/40_custom dans l’ordre d’apparition que je choisis.
- 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.
- 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).
- 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.
- Je fais un
update-grub
et parfois un update-grub2
pour me donner un genre parce qu’en faite ça ne change rien et n’apporte rien de plus, j’ai vérifié.
- 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 :
- 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
- 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
- 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.
-
Commande os-prober peut-être utile.
-
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
- 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.
- 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
}
-
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.
-
Faire de nouveau un # update-grub
-
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.