Détruit toutes les données sur la clé !
On repère le chemin de la clé USB et on le stocke dans une variable (à adapter) :
DEVICE=/dev/sdX
Avec table GPT :
Préparation des partitions
Créer table de partition GPT. Créer 3 partitions :
- 500M FAT32 - drapeau esp (sdX1)
- 1M non formaté - drapeau bios_grub (sdX2)
- le reste en fat32 (sdX3)
Puis on les monte :
pmount ${DEVICE}1 efi
pmount ${DEVICE}3 boot
Installation de GRUB pour le mode EFI
Pour l’EFI 64 bits :
sudo grub-install --removable --no-nvram --root-directory=/media/boot --boot-directory=/media/boot --efi-directory=/media/efi --target=x86_64-efi
Ceci installe les exécutables efi SHIM (BOOTX64.efi) et GRUB (grubx64.efi) dans la partition EFI, avec un fichier de configuration minimaliste (grub.cfg) qui va définir le chemin des ressources et configuration de GRUB sur la 3e partition.
Ceci installe aussi les ressources (modules, police etc) de GRUB dans le dossier /boot/grub de la partition principale.
Je n’ai pas réussi à faire fonctionner shim (écran bleu “Boot restoration)”, donc je le désactive pour l’instant, et tant pis pour le secureboot :
mv /media/efi/EFI/BOOT/BOOTX64.EFI /media/efi/EFI/BOOT/BOOTX64.EFI.SHIM && mv /media/efi/EFI/BOOT/grubx64.efi /media/efi/EFI/BOOT/BOOTX64.EFI
Installation de GRUB pour le mode BIOS
Ceci semble fonctionner sans créer une table hybrid-mbr. On installe donc simplement GRUB sur le disque :
sudo grub-install --removable --no-nvram --root-directory=/media/boot --boot-directory=/media/boot --target=i386-pc ${DEVICE}
S’il y’a une erreur liée aux listes de blocs, c’est que le drapeau bios_grub n’a pas été positionné sur la 2e partition.
Configuration
Grub devrait alors pouvoir démarrer, mais n’est pas configuré ! On va donc créer un fichier de configuration minimaliste, simplement pour vérifier que la clé est bien démarrable :
cat > /media/boot/grub/grub.cfg <<EOF
insmod efi_gop
insmod font
insmod gfxterm
insmod png
loadfont /grub/fonts/unicode.pf2
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
search.fs_uuid AAAA-AAAA efi
search.fs_uuid BBBB-BBBB root
menuentry "Tetrefis" {
insmod chain
chainloader (\$root)/grub/EFI-loaders/tetris.efi
}
EOF
On met les bonnes valeurs d’UUID :
sed "s/AAAA-AAAA/$(/usr/sbin/blkid -s UUID -o value ${DEVICE}1)/" /media/boot/grub/grub.cfg -i
sed "s/BBBB-BBBB/$(/usr/sbin/blkid -s UUID -o value ${DEVICE}3)/" /media/boot/grub/grub.cfg -i
On peut enfin démonter les 2 partitions :
pumount efi && pumount boot
et tester la clé.
GRUB devrait alors être bootable et afficher le menu (même si l’entrée est actuellement non-fonctionnelle). Pour plus de détails sur la configuration de GRUB et le démarrage de différents systèmes (exécutables EFI, noyaux linux, ISOs etc), voir un prochain article.