Debian & UEFI

De Le Wiki de debian-fr.xyz
Aller à : navigation, rechercher

Cette page a pour but de vous aider à démarrer Debian sur un EFI.
Elle n’a pas pour but d’expliquer ce que sont (U)EFI et les tables de partitions GPT. Pour cela se référer à la page officiel du projet Debian, ici.

kézako ?

UEFI est prévu pour remplacer le BIOS de nos carte-mères, il inclut quand même une compatibilité avec l’ancien BIOS. L’UEFI Boot Manager est capable de charger les amorceurs de démarrage depuis une partition FAT.

Nous avons donc besoin de faire deux choses :

  • Installer le chargeur de démarrage sur la partition FAT ;
  • Optionnellement dire à UEFI de créer une entrée pour ce chargeur.

Installation neuve de Debian

À partir de la version Jessie 8 les images d'installation peuvent automatiquement installer un système exploitant un amorceur UEFI, pour les image «live» cela est possible uniquement à partir de la version 9. Donc il vous suffit de vous assurer que votre ordinateur priorise bien l'UEFI puis continuer l’installation normale de Debian en utilisant.

Debian déjà installée

Il faut obligatoirement utiliser une table de partitions GPT, si elle est déjà en MBR vous pouvez essayer de la convertir avec gdisk (à vos risques et périls car je n’ai pas testé cette solution)

  • Utilisez un liveCD pour faire une peu de place sur le disque.
  • Créez une nouvelle partition (1Mio devrait suffire mais attention en cas de multi-boot). Il est indispensable que celle-ci soit détecté comme la première partition de votre disque. Les implémentation de l'UEFI étant aléatoire, si la condition précédente n'est pas remplie, il se peux que l'amorceur ne trouve pas cette partition. Donc vérifiez bien que cette nouvelle partition soit détecté en tant que «/dev/sdX1».
  • Formatez la partition en FAT16/32
  • Montez sur /boot/efi (/boot/efi n’existe pas, créez-le auparavant) de façon permanente via le fstab avec la ligne suivante :
UUID="identifiant-unique-de-la-partition"	/boot/efi	vfat	defaults	0	2

ou (provenant de RH)

UUID="identifiant-unique-de-la-partition"	/boot/efi	vfat	umask=0077,shortname=winnt	0	2

Passer en UEFI

Installer le paquet grub-efi-amd64
Attention les versions du paquet dans les dépôts de Wheezy et Jessie ne semblent pas fonctionner correctement. J’ai dû, dans mon cas, utiliser le version fournie en unstable (2 septembre 2014).
Normalement il va vous demander de supprimer les paquets "grub-pc" et "grub-pc-bin", s’il ne vous propose qu’un des deux, désinstallez le deuxième manuellement

Si vous voulez installer GRUB sur un disque que vous préparez en chroot il faut monter quelques répertoires systèmes avant :

# mount /dev/sdXX /mnt
# mount --bind /dev  /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys  /mnt/sys
# mount --bind /usr  /mnt/usr <= inutile si vous avez déjà copié le système sur le nouveau disque
# chroot /mnt

Préparer GRUB via la commande habituelle :

# update-grub

Puis l’installer effectivement sur le disque :

# grub-install /dev/sda

Cette commande fait trois choses :

  • Elle génère une image GRUB
  • Elle installe l’image dans la partition EFI sur EFI/debian/grubx64.efi (C’est-à-dire /boot/efi/EFI/debian…)
  • Elle essaye de configurer le gestionnaire de démarrage UEFI pour le charger au démarrage de la machine

La dernière étape doit normalement finir par une erreur car le gestionnaire de démarrage UEFI n’est configurable que depuis un système déjà démarré en UEFI.

Même si GRUB vous dit que tout s’est bien passé, vérifiez que le répertoire EFI est bien présent et rempli. Si ce n’est pas le cas vous avez du louper quelque chose. N’hésitez pas a prendre la version "unstable" comme conseillé avant.

Si GRUB vous sort quelque chose comme :

# grub-install /dev/sda                     
grub-install : erreur : /usr/lib/grub/i386-pc/modinfo.sh n'existe pas. Veuillez utiliser --target ou --directory.

Alors il faut lui préciser pour quel genre de système vous voulez installer GRUB.

# grub-install --target=x86_64-efi /dev/sdX

Vous pouvez préciser un peu plus de chose pour contrôler plus finement l’installation et que l’exécution soit pus bavarde :

# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --debug /dev/sdX

si vous épluchez un peu le log vous verrez peut être des lignes comme celle-ci :

grub-install : information : impossible d'ouvrir « /usr/lib/grub/x86_64-efi/efiemu32.o » : Aucun fichier ou dossier de ce type.

Si vous êtes sur un système 64 bits c’est normal, juste en dessous vous devez trouver :

grub-install : information : copying `/usr/lib/grub/x86_64-efi/efiemu64.o' -> `/boot/grub/x86_64-efi/efiemu64.o'.

Ou :

grub-install : information : copying `/usr/share/locale/ru/LC_MESSAGES/grub.mo' -> `/boot/grub/locale/ru.mo'.
grub-install : information : impossible d'ouvrir « /usr/share/locale/ru/LC_MESSAGES/grub.mo » : Aucun fichier ou dossier de ce type.

Ce qui est normal car ce sont différentes langues qui ne sont pas installées.

Attention, arrêtez ici et votre système ne pourra plus démarrer !
Copier (pas de lien symbolique !, système FAT oblige) l’image GRUB dans le répertoire de la partition EFI :

# cp /boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

C’est dans ce répertoire que le système UEFI va regarder.

Vous pouvez maintenant redémarrer votre machine pour vérifier que tout est en ordre (il faut penser à changer la méthode de démarrage dans UEFI).

Si tout a fonctionné, vous devez maintenant avoir une entrée "debian" dans la liste.

Vérification

Une fois de retour dans une console il vous suffit de faire

$ ls /sys/firmware |grep efi

Si ça vous retourne une ligne c’est tout bon, sinon il y a quelque chose qui cloche.i

Vous pouvez aussi installer le paquet "efivar" et faire un simple :

# efivar -l

Pour voir la liste des variables disponible.

La commande suivante vous permet de voir l'ordre de démarrage

# efibootmgr

Cette outil en ligne de commande vous permet aussi de manipuler (création/suppression/modification) cet ordonnancement.

Nettoyage

  • Une fois le système démarré via UEFI vous pouvez supprimer efi/boot/bootx64.efi qui n’est plus nécessaire.
  • S’il s’agissait d’une migration de BIOS vers UEFI vous pouvez aussi supprimer le répertoire /boot/grub/i386-pc.

Au secours, ça ne démarre plus !!!

Pas de panique, il existe un outil qui vous permettra de démarrer en UEFI sur votre OS favori, il s’agit de rEFInd. Je vous conseille de prendre l’image sur clé USB qui fonctionne à merveille. Une fois téléchargé et décompressé il vous suffit de faire :

dd if=/chemin/vers/l/image.img of=/dev/sdX

Redémarrez votre machine et vous devriez avoir un bel écran pour choisir quoi lancer, le tout avec de jolies icônes et tout.

Bugs et Informations Importantes

Ma machine (Dell Latitude E5530) ne démarre pas lorsque le PC est sur sa base (Dock Dell…). Il bloque après la selection du noyau dans GRUB.
J’ai dû installer le paquet depuis les dépots unstable. Un premier essai avec les dépots en testing (Jessie au moment de l’écriture) n’a pas fonctionné dans mon cas.

Ce tuto est basé sur un sujet de Tanguy Ortolo et ma propre expérience. Merci à ORNis pour sa relecture :)