Aller au contenu

Wikilivres/Aller plus loin avec GRUB/Des commandes derrière les menus

Un livre de Wikilivres.

GRUB nous apparait sous la forme d'une menu. S'il est possible de déplacer dans le menu la sélection du système d'exploitation et de le lancer, GRUB offre d'autres possibilités.

éditeur du mode "e"

[modifier | modifier le wikicode]

Une fois une entrée de menu surlignée, il est possible d'en voir la logique. La touche e permet de passer dans le mode "e". Ce mode "e" permet de voir les commandes derrière cette entrée de menu. Dans un premier temps, les commandes qui s'affichent sont les commandes qui sont exécutées pour charger le système d'exploitation mentionné.

En réalité, GRUB offre d'autres possibilités que de lire ces commandes:

  • Il est possible d'exécuter ces commandes avec la touche F10
  • Le logiciel utilisé étant un éditeur de texte, il est possible de retoucher les commandes avant de les lancer, mais nous reviendrons plus tard sur ce point.

Il est également possible de sortir de ce mode "e" avec la touche ESC et d'accéder à la ligne de commande avec la touche c.

ligne de commande du mode "c"

[modifier | modifier le wikicode]

La touche c permet de passer dans le mode "c". Ce mode "c" permet de lancer des commandes et d'en voir les résultats, sur un écran défilant en mode texte, selon le principe d'une ligne de commande.

Par exemple, la commande "help" permet d'afficher les commandes disponibles. Une autre commande permet de revenir au mode initial.

Exemple d'une séquence de lancement

[modifier | modifier le wikicode]

Nous présentons ici la structure d'une commande de lancement au travers d'un exemple.

A titre d'illustration sont reproduites ci-dessous un exemple de commandes qui peuvent éventuellement être présente dans une entrée du menu GRUB. Le commandes sont expliquées après le commentaire introduit par le caractère dièse (#). Cela ne signifie pas pour autant que ce caractère est reconnue par GRUB.

 menuentry 'Debian GNU/Linux, with Linux 5.10.0-17-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-17-rt-amd64-advanced-UUID=074e5a60-b0b8-4876-8673-bec4bc8394a5' {
                # load_video est une commande qui charge divers drivers liés à l'affichage vidéo.
                load_video
                # insmod est une commande qui charge un module dynamique du noyau. gzio est un nom de module sur ce système.
                insmod gzio

                # Chargement conditionnel de modules de décompression
                if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi


                # Chargement du module liés aux systèmes de partitions de disques du DOS
                insmod part_msdos
                # Chargement du module lié au système de fichiers ext2.
                insmod ext2
                # Définition d'une racine, sur un disque hd0 et sur une partition msdos1
                set root='hd0,msdos1'
                # Conditionne un traitement à la valeur de la variable $feature_platform_search_hint comparé à la lettre 'y' signifiant "oui".
                if [ x$feature_platform_search_hint = xy ]; then
                  # Les deux branches de l'alternative sont équivalentes, mais la première utilise des options --hint-
                  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  074e5a60-b0b8-4876-8673-bec4bc8394a5
                else
                  search --no-floppy --fs-uuid --set=root 074e5a60-b0b8-4876-8673-bec4bc8394a5
                fi
                # Affiche le chargement en cours d'une version d'un noyau Linux
                echo    'Loading Linux 5.10.0-17-rt-amd64 ...'
                # Active le chargement d'un noyau Linux /boot/vmlinuz-5.10.0-17-rt-amd64
                #  ... avec une option root pour préciser la partition racine
                #  ... avec d'autres options à détailler par la suite.
                linux   /boot/vmlinuz-5.10.0-17-rt-amd64 root=UUID=074e5a60-b0b8-4876-8673-bec4bc8394a5 ro vga=normal nomodeset quiet apparmor=1 security=apparmor
                # Affiche le chargement d'un disque initial en mémoire RAM
                echo    'Loading initial ramdisk ...'
                # Chargement initial du disque /boot/initrd.img-5.10.0-17-rt-amd64
                initrd  /boot/initrd.img-5.10.0-17-rt-amd64
        }

Nous voyons deux traitements conditionnels:

L'instruction if condition then action ; fi permet d'exprimer une exécution conditionnelle à l'image de ce que peut faire le langage bash La condition est l'instruction shell présente entre le if et le then. L'action est l'action réalisée lorsque la condition est vraie.

                if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi

La condition, compare la variable $grub_platform à la valeur xen ... Le x de gauche est une astuce permettant d'éviter le cas de la chaîne vide. Ici, l'action est une séquence de commandes séparées par le caracatère ';' L'action consiste dans le chargement de deux modules: xzio et lzopio.