• # Boot Loader Specification (blscfg de grub2)

    Posté par . En réponse à la dépêche Fedora 31 est sortie !. Évalué à 4. Dernière modification le 31 octobre 2019 à 13:43.

    (c'est uniquement pour vous mettre l'eau à la bouche)
    Ce n'est pas une nouveauté f31, mais f30 ou f29, que j'ai raté car je suis passé de f29 à f31 (oui c'est mal).

    Quand on ajoute un noyau à son GNU/Linux chéri, vous savez comment ça se passe, il faut changer grub.cfg. C'est fait, sous Fedora, par une usine à gaz nommée grubby. Si c'est automatisé et que les programmes font bien leur job, ce n'est pas vraiment souci. Mais si vous ajoutez à la main un noyau, etc.

    Donc Fedora utilise maintenant Boot Loader Specification :
    https://systemd.io/BOOT_LOADER_SPECIFICATION

    Comment ça marche concrètement ?
    Si j'ajoute un noyau (avec son initrd) à ma machine, il me suffit de déposer un fichier qui décrit ce noyau dans /boot/loader/entries/ . Le nom du fichier doit être machineId_CeQueVousVoulez.conf. machineId est à récupérer de /etc/machine-id.

    Exemple de fichier :

     $ cat /boot/loader/entries/16218b18041341aa845c9ed438f5c154-5.3.7-301.fc31.x86_64.conf
     title Fedora (5.3.7-301.fc31.x86_64) 31 (Thirty One) version 5.3.7-301.fc31.x86_64
     linux /boot/vmlinuz-5.3.7-301.fc31.x86_64
     initrd /boot/initramfs-5.3.7-301.fc31.x86_64.img
     options $kernelopts
     grub_users $grub_users
     grub_arg --unrestricted
     grub_class kernel
    

    Si vous supprimez le noyau, il vous suffit de supprimer le ficher pour qu'il n'apparaisse plus dans grub lors du boot.

    Un lecteur attentif aura remarqué qu'on n'a pas tout pour pouvoir booter, notamment il manque la partition root. Quand on ajoute un noyau, on ne change pas de root, donc l'information n'a pas à être dans ce fichier. Néanmoins c'est récupéré dans la variable $kernelopts qui est définit dans grub.cfg.
    Dans mon grub.cfg j'ai :
    set default_kernelopts="root=UUID=033fead8-f5bf-4433-a108-74c7359b96c1 ro rd.md.uuid=8ac3b7b8-1bc9-7973-15a8-1361718c00ae"

    Comment grub prend en compte les fichiers dans /boot/loader/entries ?
    Il le fait lors du boot et va créer "à la volée" une entrée grub classique (qu'on pourra éditer avec grub au boot si nécessaire) genre :

     menuentry 'Fedora 31' ... {
     set root=...
     linux /boot/vmlinuz-... root=...
     initrd /boot/initramfs-...
     }
    

    C'est demandé dans le fichier grub.cfg par :

     insmod blscfg
     blscfg
    

    Et voilà !

    C'est une petite chose mais je suis ravi de le voir car avant c'est vraiment "hugly".