AccueilActualités informatiqueFOSDEM : aperçu du chargeur de démarrage Grub 2.12

FOSDEM : aperçu du chargeur de démarrage Grub 2.12

L’une des têtes pensantes derrière Grub, Daniel Kiper d’Oracle, a esquissé dans un talk enregistré lors du FOSDEM de cette année (qui se déroule comme un événement en ligne) l’état et les plans futurs pour le bootloader répandu. La maintenance du code source en C et en assembleur est restée un défi, ce qui se traduit par un développement plutôt lent et était également l’un des thèmes du talk.

Même s’il existe de nombreuses possibilités de démarrer un système Linux sur du matériel x86, le chargeur de démarrage Grub est la méthode la plus répandue. La raison pour laquelle la plupart des distributions Linux utilisent Grub dans la version 2.04 ou même dans l’édition actuelle 2.06 est la disponibilité de plusieurs modules pour les configurations multi-boot, pour plusieurs systèmes de fichiers, pour EFI et pour le démarrage sécurisé. Grub – abréviation de GNU Grand Unified Bootloader – a été entièrement réécrit dans sa version 2 il y a dix ans, afin de résoudre de nombreux problèmes avec Grub Legacy sur du matériel moderne et de reprendre également du code d’autres projets open source comme le projet précurseur PUPA.

Sommaire

Selon Kiper, le long chemin vers Grub 2.06, sorti en juin 2021 avec presque un an de retard, a surtout été marqué par des corrections de failles de sécurité. Après Boothole, qui neutralisait le Secure Boot dans certaines circonstances, il y a eu Boothole 2, puis huit autres failles, qui indiquent surtout des problèmes dans la gestion de la mémoire des parties du programme C. Kiper décrit également la gestion des zones de mémoire comme l’obstacle qui continue à rendre le processus de développement difficile, tout comme les travaux de nettoyage et les décisions plus longtemps discutées concernant la suppression de fonctionnalités pour la compatibilité descendante.

La taille du traditionnel Master Boot Record (MBR), qui était fixée à 31 kilo-octets jusqu’à Grub 2.06, en fait partie. Sur les supports de données modernes comme les SSD et les NVME, cela entraîne un mauvais alignement des blocs du système de fichiers et des pages de mémoire. Il est donc courant de réserver 1 mégaoctet au début d’un disque pour le MBR. Grub 2.06 ne traite donc plus les MBR de taille inférieure ou uniquement par le biais de solutions de contournement manuelles. En outre, dans le cadre de ces travaux de nettoyage, le chargeur de démarrage maîtrise LUKS32 ainsi que le démarrage de partitions BTRFS dont Grub peut désormais utiliser les espaces réservés.

Ce n’est qu’un début : après les importants travaux de nettoyage du code source de Grub 2.06, la version 2.12 est prévue pour mi-2022. Il est également prévu de réécrire les modules de Grub en Rust.

(Image : Domaine public / FOSDEM)

Pour 2022, les développeurs de Grub ont prévu d’accélérer le processus de révision et de test. L’objectif est une publication annuelle et rapide du chargeur de démarrage, dont la version actuelle a jusqu’à présent été intégrée dans les sources de paquets de Fedora 35 et Arch Linux, tandis qu’Ubuntu et Debian en sont encore à la version 2.04. Actuellement, quelques bugs de blocage dans la gestion de la mémoire retardent l’intégration d’autres correctifs, qui devraient être intégrés dans la version 2.12 de Grub annoncée au milieu de l’année. Pour y parvenir, l’équipe de développement est en train de mettre en place des méthodes de test systématiques, dans l’espoir de pouvoir en automatiser certaines. En outre, les architectures de processeur RISC-V et Loongson Architecture, en abrégé LoongArch, devraient être ajoutées.

En raison de bugs et de failles de sécurité passés, Daniel Axtens, développeur chez IBM, propose de réécrire certaines parties de Grub en Rust. Cela aurait l’avantage d’assurer une gestion sûre de la mémoire dès la compilation du code du programme Rust. En effet, grâce à ses modèles d’accès stricts, Rust n’autorise pas les erreurs de pointeur typiques du C, qui causent manifestement tant de maux de tête aux programmeurs de Grub. L’effort à fournir n’est cependant pas négligeable, car sans restructuration des zones de mémoire utilisées plusieurs fois, Rust ne fait pas non plus ce qu’il doit faire. Pour Grub 2.12, seuls quelques modules seront donc portés sur Rust.

Dans le cadre d’une longue présentation, Kiper a parlé des différentes versions de Grub actuellement utilisées par les principales distributions Linux (qui seront enregistrées à la fin du FOSDEM 22). En raison des longs délais d’attente entre les versions de Grub, les mainteneurs maintiennent le chargeur de démarrage en forme pour le matériel moderne avec leurs propres patchs et modules, autant que faire se peut. Ces voies spéciales causent régulièrement des problèmes sur les systèmes plus anciens comme Ubuntu 18.04 après les mises à jour. L’objectif déclaré du Grub-Teama est donc d’accélérer la vitesse de publication de telle sorte que les distributions n’aient plus besoin d’appliquer leurs propres correctifs à leurs paquets Grub d’ici trois à quatre ans. Pour montrer que ce projet est déjà en bonne voie, le talk a cité Fedora 35 qui, depuis Grub 2.06, a pu se passer d’une centaine de correctifs propres.

Plus d'articles