BLFS ne propose pas les paquets essentiels pour prendre en charge Secure Boot. Pour paramétrer le processus de démarrage avec GRUB et UEFI dans BLFS, Secure Boot doit être désactivé dans l'interface de configuration du micrologiciel. Lisez la documentation fournie par le fabriquant de votre système pour trouver comment faire.
Activez les options suivantes dans la configuration du noyau et recompilez le noyau si nécessaire :
Processor type and features ---> [*] EFI runtime service support [EFI] -*- Enable the block layer ---> [BLOCK] Partition Types ---> [ /*] Advanced partition selection [PARTITION_ADVANCED] [*] EFI GUID Partition support [EFI_PARTITION] Device Drivers ---> Firmware Drivers ---> [*] Mark VGA/VBE/EFI FB as generic system framebuffer [SYSFB_SIMPLEFB] Graphics support ---> <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> ... [DRM] [*] Enable legacy fbdev support for your modesetting driver ... [DRM_FBDEV_EMULATION] <*> Simple framebuffer driver [DRM_SIMPLEDRM] Frame buffer Devices ---> <*> Support for frame buffer devices ---> [FB] Console display driver support ---> -*- Framebuffer Console support [FRAMEBUFFER_CONSOLE] File systems ---> DOS/FAT/EXFAT/NT Filesystems ---> <*/M> VFAT (Windows-95) fs support [VFAT_FS] Pseudo filesystems ---> <*/M> EFI Variable filesystem [EFIVAR_FS] -*- Native language support ---> [NLS] <*/M> Codepage 437 (United States, Canada) [NLS_CODEPAGE_437] <*/M> NLS ISO 8859-1 (Latin 1; Western European Languages) [NLS_ISO8859_1]
Voici la signification des options de configuration :
CONFIG_PARTITION_ADVANCED
Si cette option n'est pas activée, CONFIG_EFI_PARTITION
sera
automatiquement activée. Mais si elle est activée, vous devez
activer CONFIG_EFI_PARTITION
quand
même.
CONFIG_SYSFB_SIMPLEFB
, CONFIG_DRM
, CONFIG_DRM_FBDEV_EMULATION
,
CONFIG_DRM_SIMPLEDRM
,
CONFIG_FB
et CONFIG_FRAMEBUFFER_CONSOLE
La combinaison de ces options fournit la prise en charge de la console linux sur le framebuffer UEFI. Pour permettre au noyau d'afficher des messagesqde débogage tôt dans le processus de démarrage, elles ne devraient pas être construites en tant que modules à moins que vous n'utilisiez un initramfs.
Assurez-vous qu'un disque de démarrage d'urgence est prêt pour
« secourir » le système au cas où le
système ne puisse démarrer. Pour créer un disque de démarrage
d'urgence avec GRUB pour un système EFI, trouvez un clé USB libre
et créez un système de fichiers vfat
dessus. Installez d'abord dosfstools-4.2,
puis en tant qu'utilisateur root
:
La commande suivante supprimera tous les répertoires et fichiers
de la partition. Assurez-vous que votre clé USB ne contient
aucune donnée requise, et remplacez sdx1
par le nœud de
périphérique correspondant à la première partition de la clé USB.
Faites attention à ne pas écraser votre disque dur à cause d'une
coquille !
mkfs.vfat /dev/sdx1
Toujours en tant qu'utilisateur root
, utilisez l'utilitaire fdisk pour faire de la première
partition de la clé USB une partition « EFI system »
(remplacez sdx
par
le nœud de périphérique correspondant à votre clé USB) :
fdisk /dev/sdxWelcome to fdisk (util-linux 2.39.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help):
tPartition number (1-9, default 9):
1Partition type or alias (type L to list all):
uefiChanged type of partition 'Linux filesystem' to 'EFI System'. Command (m for help):
w
Toujours en tant qu'utilisateur root
, créez un point de montage pour la
partition EFI sur la clé USB et montez-la :
mount --mkdir -v -t vfat /dev/sdx1 -o codepage=437,iocharset=iso8859-1 \ /mnt/rescue
Installez GRUB pour EFI sur la partition :
grub-install --target=x86_64-efi --removable \ --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue
Démontez la partition :
umount /mnt/rescue
Maintenant vous pouvez utiliser la clé USB comme un disque de démarrage d'urgence sur la plateforme UEFI x86-64. Elle démarrera le système et affichera le shell de GRUB. Ensuite vous pourrez taper des commandes pour démarrer votre système d'exploitation sur votre disque dur. Pour apprendre à choisir le périphérique de démarrage, lisez le manuel de votre carte mère ou de votre ordinateur portable.
Sur les systèmes EFI, les chargeurs d'amorçage sont installés dans
une partition FAT32 spéciale appelée partition EFI système (ESP). Si votre
système prend EFI en charge, et qu'une version récente de Linux ou
Windows est pré-installée, il est probable que l'ESP soit déjà
créée. En tant qu'utilisateur root
,
listez toutes les partitions de votre disque dur (remplacez
sda
par le
périphérique correspondant au disque dur approprié) :
fdisk -l /dev/sda
La colonne « Type » de l'ESP devrait être
EFI System
.
Si le système ou le disque dur est neuf, ou si c'est la première
installation d'un système UEFI sur le système, l'ESP n'existe
peut-être pas. Dans ce cas, installez d'abord dosfstools-4.2. Créez
ensuite une nouvelle partition, mettez un système de fichier
vfat
dessus et indiquez
« EFI
system » comme type de partition. Voir les
instructions sur le périphérique de démarrage d'urgence plus haut
pour référence.
Certaines (vieilles) implémentations UEFI peuvent demander que l'ESP soit la première partition du disque.
Maintenant, en tant qu'utilisateur root
, créez le point de montage pour l'ESP et
montez-la (remplacez sda1
par le nœud de périphérique
correspondant à l'ESP) :
mount --mkdir -v -t vfat /dev/sda1 -o codepage=437,iocharset=iso8859-1 \ /boot/efi
Si vous voulez monter l'ESP automatiquement pendant le démarrage du
système, en tant qu'utilisateur root
, ajoutez une entrée pour l'ESP dans
/etc/fstab
:
cat >> /etc/fstab << EOF
/dev/sda1 /boot/efi vfat codepage=437,iocharset=iso8859-1 0 1
EOF
Sur les systèmes basés sur UEFI, GRUB fonctionne en installant une
application EFI (un type d'exécutable spécial) dans l'ESP. Le
micrologiciel EFI recherchera les chargeurs d'amorçage dans les
applications EFI à partir des entrées de démarrage enregistrées
dans les variables EFI, en plus d'un chemin codé en dur,
EFI/BOOT/BOOTX64.EFI
. Normalement, un
chargeur d'amorçage devrait être installé dans un chemin
personnalisé et le chemin devrait être enregistré dans les
variables EFI. L'utilisation du chemin codé en dur est à éviter le
plus possible. Cependant, dans certains cas nous devons utiliser le
chemin codé en dur :
Le système n'est pas encore démarré avec EFI, ce qui rend les variables EFI inaccessibles.
Le micrologiciel EFI est en 64 bits mais le système LFS en 32 bits, ce qui rend les variables EFI inaccessibles car le noyau ne peut pas invoquer les services EFI à l'exécution avec une longueur d'adressage virtuel différente.
LFS est construit pour une Live USB, donc nous ne pouvons pas nous reposer sur les variables EFI qui sont stockées en NVRAM ou EEPROM sur la machine locale.
Vous ne pouvez pas ou ne voulez pas installer efibootmgr pour manipuler les entrées de démarrage dans les variables EFI.
Dans tous ces cas, suivez ces instructions pour installer l'application EFI GRUB dans le chemin codé en dur et créer une configuration de démarrage minimale. Sinon, il vaut mieux passer cette section et lire les sections restantes pour paramétrer la configuration de démarrage normalement.
Pour installer GRUB avec une application EFI installée dans le
chemin codé en dur EFI/BOOT/BOOTX64.EFI
, assurez-vous d'abord que la
partition de démarrage est montée dans /boot
et l'ESP est monté dans /boot/efi
. Puis en tant qu'utilisateur
root
, lancez la commande :
La commande remplacera /boot/efi/EFI/BOOT/BOOTX64.EFI
. Elle peut
casser un chargeur d'amorçage déjà installé. Sauvegardez-le si
vous n'êtes pas sur·e.
grub-install --target=x86_64-efi --removable
Cette commande installera l'application EFI GRUB dans le chemin
codé en dur /boot/efi/EFI/BOOT/BOOTX64.EFI
, pour que le
micrologiciel EFI puisse le trouver et le charger. Les fichiers
GRUB restants sont installés dans le répertoire /boot/grub
et sera chargé par BOOTX64.EFI
au démarrage du système.
Le micrologiciel EFI préfère les applications EFI avec le chemin enregistré dans les entrées de démarrage stockées dans les variables EFI à l'application EFI dans le chemin codé en dur. Vous devrez alors peut-être invoquer le menu de sélection de démarrage ou l'interface de configuration du micrologiciel pour choisir le GRUB nouvellement installé au prochain démarrage. Consultez le manuel de votre carte mère ou de votre ordinateur portable pour trouver comment.
Si vous avez suivi les instructions de cette section et paramétrez une configuration de démarrage minimale, sautez maintenant à « Créer le fichier de configuration GRUB ».
L'installation de GRUB sur une plateforme UEFI demande que le
système de fichiers des variables EFI, efivarfs
soit monté. En tant qu'utilisateur
root
, montez-le s'il n'est pas
encore monté :
mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
Si le système est démarré avec UEFI et systemd, efivarfs
sera monté automatiquement.
Cependant dans l'environnement chroot de LFS il faudra toujours
le monter manuellement.
Si le système n'est pas démarré avec UEFI, le répertoire
/sys/firmware/efi
n'existera pas.
Dans ce cas vous devriez démarrer le système en mode UEFI avec le
disque de démarrage d'urgence ou en utilisant la configuration de
démarrage minimale créée plus haut, puis monter efivarfs
et continuer.
Sur les systèmes UEFI, GRUB fonctionne en installant une
application EFI (un type d'exécutable spécial) dans /boot/efi/EFI/[id]/grubx64.efi
, où /boot/efi
est le point de montage de l'ESP et
[id]
est remplacé par un identifiant
spécifié à la ligne de commande grub-install. GRUB créera une
entrée dans les variables EFI contenant le chemin EFI/[id]/grubx64.efi
pour que le micrologiciel
puisse trouver grubx64.efi
et le
charger.
grubx64.efi
est très léger
(136 Ko pour GRUB-2.06) donc il n'utilisera pas beaucoup de
place dans l'ESP. Une taille typique d'ESP est 100 Mo (pour le
chargeur d'amorçage de Windows, qui prend environ 50 Mo dans
l'ESP). Une fois grubx64.efi
chargé
par le micrologiciel, il chargera les modules GRUB dans la
partition de démarrage. L'emplacement par défaut est /boot/grub
.
En tant qu'utilisateur root
,
installez les fichiers de GRUB dans /boot/efi/EFI/LFS/grubx64.efi
et /boot/grub
. Ensuite paramétrez l'entrée de
démarrage dans les variables EFI :
grub-install --bootloader-id=LFS --recheck
Si l'installation se passe correctement, la sortie devrait être :
Installing for x86_64-efi platform.
Installation finished. No error reported.
Tapez efibootmgr | cut -f 1 pour revérifier la configuration de démarrage EFI. Voici un exemple de sortie :
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0005,0000,0002,0001,0003,0004
Boot0000* ARCH
Boot0001* UEFI:CD/DVD Drive
Boot0002* Windows Boot Manager
Boot0003* UEFI:Removable Device
Boot0004* UEFI:Network Device
Boot0005* LFS
Remarquez que 0005
est en premier dans
BootOrder
et que Boot0005
est LFS
.
Cela signifie qu'au prochain démarrage, la version de GRUB
installée par LFS sera utilisée pour démarrer le système.
Générez /boot/grub/grub.cfg
pour
configurer le menu de démarrage de GRUB :
cat > /boot/grub/grub.cfg << EOF
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod part_gpt
insmod ext2
set root=(hd0,2)
insmod all_video
if loadfont /boot/grub/fonts/unicode.pf2; then
terminal_output gfxterm
fi
menuentry "GNU/Linux, Linux 6.4.10-lfs-12.0" {
linux /boot/vmlinuz-6.4.10-lfs-12.0 root=/dev/sda2 ro
}
menuentry "Firmware Setup" {
fwsetup
}
EOF
Consultez le livre
LFS pour apprendre la base du fichier grub.cfg
. Vous devez remplacer (hd0,2)
, sda2
et
6.4.10-lfs-12.0
pour correspondre à
votre configuration.
La directive insmod all_video charge plusieurs modules pour la prise en charge vidéo. C'est requis pour initialiser le framebuffer EFI pour que le noyau puisse afficher des messages correctement avant l'initialisation du pilote GPU du noyau.
La directive terminal_output
gfxterm change la résolution de l'affichage du menu
GRUB pour correspondre à votre écran. Elle cassera le rendu si le
fichier de données de polices unicode.pf2
n'est pas chargé, donc elle est
encadrée par une directive if.
Du point de vu de GRUB, les fichiers sont relatifs à la partition
utilisée. Si vous utilisez une partition /boot séparée, supprimez
/boot dans les chemins précédents (vers le noyau et vers
unicode.pf2
). Vous devrez aussi
changer la ligne « set root » pour pointer vers la
partition de démarrage.
L'entrée Firmware Setup
peut être
utilisée pour entrer dans l'interface de configuration fournie par
le micrologiciel (parfois nommée « configuration
BIOS »).
Ajoutew une entrée de menu pour Windows dans grub.cfg
:
cat >> /boot/grub/grub.cfg << EOF
# Begin Windows addition
menuentry "Windows 11" {
insmod fat
insmod chain
set root=(hd0,1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
EOF
Vous devriez remplacer (hd0,1)
par le
nom désigné par GRUB pour l'ESP. Vous pouvez utiliser la directive
chainloader
pour dire à GRUB de lancer
un autre exécutable EFI, dans ce cas le gestionnaire de démarrage
de Windows. Vous pouvez ajouter des outils supplémentaires au
format exécutable EFI (par exemple un shell EFI) dans l'ESP et leur
créer des entrées GRUB.