\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{sam. mars 12 18:04:27 CET 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={grub2},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={multiboot bootloader},
CreationDate={D:20160312180427},
ModDate={D:20160312180427},
Keywords={grub;Linux;boot}
}}
\begin{document}
 
\begin{center}
{\Huge grub2 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large multiboot bootloader}
 
\vspace{10mm}
 
\hspace{1mm}  Brièvement, un boot loader est le premier logiciel qui est lancé au démarrage de l'ordinateur. Il est responsable du chargement et de transférer le contrôle à un kernel. Le kernel, en retour, initialise le reste du système d'exploitation.
\vspace{5mm} \\
 
 
\hspace{1mm}  GRUB est un boot loader très puissant, qui peut charger une grande variété de systèmes d'exploitation. GRUB est conçu pour adresser la complexité du boot d'un ordinateur personnel.
\vspace{5mm} \\
 
 
\hspace{1mm}  Une des fonctionnalité les plus importantes est sa flexibilité; GRUB comprend les systèmes de fichier et les formats exécutable de kernel, ce qui permet de charger un kernel sans enregistrer sa position physique sur le disque.
\vspace{5mm} \\
 
 
\hspace{1mm}  En bootant avec GRUB, vous pouvez utiliser soit une interface en ligne de commande, ou une interface. En utilisant la ligne de commande, il suffit de spécifier l'emplacement du dique et le nom de fichier du kernel manuellement. Dans l'interface par menu, il suffit de sélectionner un OS en utilisant les touches. Le menu est basé sur un fichier de configuration qui peut être préparé avant. Il est possible de basculer d'un mode à l'autre, et même éditer les entrées du menu avant de les utiliser.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Fonctionnalités }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{Reconnaissante de plusieurs formats d'exécutable}
\item[\hspace{1mm} -]{Supporte de nombreuses variantes de a.out, plus ELF. Les tables de symbole sont également chargés.}
\item[\hspace{1mm} -]{Support de kernels non-multiboot}
\item[\hspace{1mm} -]{Supporte de nombreux kernels 32bits qui ne sont pas multiboot compliant ( FreeBSD, NetBSD, OpenBSD, et Linux).}
\item[\hspace{1mm} -]{Charger plusieurs modules}
\item[\hspace{1mm} -]{Support complet du chargement de modules.}
\item[\hspace{1mm} -]{Charger un fichier de configuration}
\item[\hspace{1mm} -]{Support de fichiers de configuration au format texte avec des commandes de boot. Il est également possible de charger un autre fichier de configuration dynamiquement et embarque un fichier de configuration preset dans un fichier image grub. La liste des commandes sont un superset de ces lignes de commandes supportées.}
\item[\hspace{1mm} -]{Fournis une interface par menu}
\item[\hspace{1mm} -]{Une interface à menu avec un timeout programmable est disponible. Il n'y a pas de limite fixée sur le nombre d'entrées de boot, et l'implémentation actuelle a l'espace pour des centaines.}
\item[\hspace{1mm} -]{Interface en ligne de commande flexible: Une interface flexible, accessible depuis le menu, est disponible pour éditer les commandes, ou écrire une nouvelle commande. Si aucun fichier de configuration n'est présent, GRUB supprime la ligne de commande.}
\item[\hspace{1mm} -]{Suporte plusieurs systèmes de fichier: AFFS, AtheOs Fs, BeFS, BtrFS, cpio, ext2/3/4, DOS, ISO9660, JFS, Minix Fs, NTFS, ReiserFS, ROMFS, SFS, Squash4, tar, UDF, BSD UFS, XFS et ZFS.}
\item[\hspace{1mm} -]{Décompression automatique: Peut décompresser des fichiers compressés avec gzip ou xz. Cette fonction est automatique et transparente à l'utilisateur.}
\item[\hspace{1mm} -]{Accède aux données sur un périphérique installé}
\item[\hspace{1mm} -]{Supporte la lecture des données depuis des disquettes ou disques dur reconnus par le BIOS}
\item[\hspace{1mm} -]{Indépendant des translation de géometrie du disque. À la différence de nombreux boot loader, GRUB gère les géometries de disque de manière transparente.}
\item[\hspace{1mm} -]{Detecte toute la RAM installée. GRUB peut généralement trouver toute la RAM installée sur une machine compatible PC. Il utiliser des techniques de requête du BIOS pour trouver toutes les régions mémoire.}
\item[\hspace{1mm} -]{Support du mode LBA. GRUB détecte automatiquement si le mode LBA est accessible et l'utilise si disponible.}
\item[\hspace{1mm} -]{Support du boot réseau}
\item[\hspace{1mm} -]{GRUB est un bootloader basé sur le disque mais supporte également le réseau, en utilisant TFTP}
\item[\hspace{1mm} -]{Support de terminaux distants}
\item[\hspace{1mm} -]{Pour supporter des machines sans console, GRUB fournis un terminal distant. Seul le terminal série est implémenté actuellement.}
\end{description}
 
\vspace{1cm}{\huge Convention de nommage }
 
\
 
\hspace{1mm} La syntaxe de périphérique utilisée dans GRUB est un peu différent de ce qui est vu dans un OS, et il est nécessaire de spécifier un couple disque/partition. l'exemple: \\
\hspace{1mm} \textbf{(fd0)} \\
\hspace{1mm} Avant tout, GRUB exige que le nom du périphérique soit entre parenthèses. fd signifie une disquette. Le numéro 0 est le numéro du disque, qui est compté en partant de 0. Cette expression indique toute la disquette. \\
\hspace{1mm} \textbf{(hd0,msdos2)} \\
\hspace{1mm} Ici, hd signifie un disque dur. 0 indique le numéro du disque. msdos indique le type de partition, et 2 indique e numéro de partition. Les numéros de partitions sont comptés à partir de 1, et non 0. Cette expression spécifie la 2ème partition du premier disque. Dans ce cas, GRUB utilise une partition du disque, au lieu du disque entier. \\
\hspace{1mm} \textbf{(hd0,msdos5)} \\
\hspace{1mm} Cela spécifie la première partition étendue du disque dur. Noter que les numéros de partition pour les partitions étendues sont comptés à partir de 5, sans regarder le nombre de partition primaire sur le disque. \\
\hspace{1mm} \textbf{(hd1,msdos1,bsd1)} \\
\hspace{1mm} Signifie la partition a de BSD sur le premier slice du second disque. \\
 
\hspace{1mm}  Noter que GRUB ne fait pas de distinction entre IDE et SCSI. Il compte simplement les numéros de disque de 0, sans regarder leur type. Normalement, un disque IDE est inférieur au numéro d'un disque SCSI, bien que ce n'est pas vrai si l'on change la séquence de boot en inversant les disque IDE et SCSI dans le BIOS.
\vspace{5mm} \\
 
 
\hspace{1mm} Maintenant, pour spécifier un fichier on utilisera la syntaxe: \\
\hspace{1mm} \textbf{(hd0,msdos1)/vmlinuz} \\
\hspace{1mm} Cela spécifie le fichier nommé 'vmlinuz', trouvé sur la première partition du premier disque dur. \\
 
\vspace{1cm}{\huge Installation }
 
\
 
\hspace{1mm}  Pour installer GRUB comme boot loader, il faut d'abord installer GRUB et les utilitaires sous un OS type UNIX. Une fois installé, la commande grub-install install le bootloader sur le disque.
\vspace{5mm} \\
 
 
\hspace{1mm}  GRUB est fournis avec des images de boot, qui sont généralement dans /usr/lib/grub/<cpu>-<plateform>; c'est le répertoire d'image, et le répertoire où le boot loader doit les trouver (généralement /boot) est le répertoire de boot.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour installer GRUB sous un OS type Unix, invoquer le programme grub-install en root. L'utilisation est très simple. Vous devez simplement spécifier un argument au programme, où installer le boot loader. L'argument doit être un fichier de périphérique (par ex: /dev/hda). l'option --boot-directory spécifie le répertoire de boot (/boot par défaut).
\vspace{5mm} \\
 
 
\hspace{1mm} Certains bios ont un bug qui exposent la première partition d'un disque usb comme disquette au lieu de l'exposer comme disque usb, il est nécessaire dans ce cas d'utiliser: \\
\hspace{1mm} \textbf{losetup /dev/loop0 /dev/sdb1} \\
\hspace{1mm} \textbf{mount /dev/loop0 /mnt/usb} \\
\hspace{1mm} \textbf{grub-install --boot-directory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0} \\
 
\hspace{1mm}  Noter que grub-install est actuellement un simple script shell et le vrai travail est fait pas grub-mkimage et grub-setup.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Créer un CDROM bootable }
 
\
 
\hspace{1mm}  GRUB supporte le mode sans émulation dans la spécification El Torito. Celà signifie qu'on peut utiliser tout le CDROM depuis GRUB sans avoir à créer un fichier image disquette ou disque dur, qui peut créer des problèmes de compatibilité.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour booter depuis un CD-ROM, GRUB utilise une image spéciale appelée cdboot.img, qui est concaténé avec core.img. Le core.img utilisé pour cela devrait être construit avec au moins les modules iso9660 et biosdisk. Le CDROM bootable va généralement nécessiter également un fichier de configuration grub.cfg et quelques autres modules.
\vspace{5mm} \\
 
 
\hspace{1mm} Pour créer un CD de récupération GRUB simple, utiliser la commande grub-mkrescue: \\
\hspace{1mm} \textbf{grub-mkrescue -o grub.iso} \\
\hspace{1mm} Pour inclure d'autres fichiers à l'image, créer un répertoire \\
\hspace{1mm} \textbf{mkdir iso} \\
\hspace{1mm} créer un répertoire pour GRUB: \\
\hspace{1mm} \textbf{makd -p iso/boot/grub} \\
\hspace{1mm} Si souhaité, créer le fichier de configuration grub.cfg et copier les fichier et répertoires pour le disque dans iso/. Enfin, créer l'image: \\
\hspace{1mm} \textbf{grub-mkrescue -o grub.iso iso} \\
 
\hspace{1mm}  Le périphérique root sera définis de manière approprié en entrant le fichier de configuration, pour réferrer aux noms de fichier dans le cd sans avoir à utiliser de nom de périphérique expicit. Celà simplifie la production d'images qui fonctionnent sur les disques optiques et les périphériques de stockage USB.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Mappage entre les disques BIOS et les périphériques OS }
 
\
 
\hspace{1mm}  Si le fichier de map de périphérique existe, les utilitaires GRUB (grub-probe, grub-setup, etc) le lise pour mapper les périphériques BIOS aux périphériques OS. Ce fichier consiste de ligne sous la forme: \textbf{(device) file}
\vspace{5mm} \\
 
 
\hspace{1mm}  device est un disque spécifié dans la syntaxe GRUB, et file est un fichier OS, qui est normalement un fichier de périphérique.
\vspace{5mm} \\
 
 
\hspace{1mm}  Historiquement, le fichier de mappage de périphérique a été utilisé parce que les noms de périphérique GRUB devaient être utilisés dans le fichier de configuration, et ils étaient dérivés des numéro de lecteur du BIOS. Le mappage entre les disque BIOS et OS ne peut pas toujours être deviné correctement: par exemple GRUB obtiendra le mauvais ordre si on échange la séquence de boot entre IDE et SCSI dans le BIOS.
\vspace{5mm} \\
 
 
\hspace{1mm}  Malheureusement, même les noms de périphérique OS ne sont pas toujours stable. Les versions moderne de Linux peuvent sonder les disques dans un ordre différent d'un boot à l'autre, et le préfixe (/dev/hd* vs /dev/sd*) peut changer en fonction du pilote utilisé. Cela impose d'éditer fréquemment le fichier de map.
\vspace{5mm} \\
 
 
\hspace{1mm}  GRUB évite ce problème en utilisant les UUID ou les labels de système de fichier en générant grub.cfg, et il est recommandé de faire de même pour toute entrée ajoutée manuellement. Si le fichier de map n'existe pas, les utilitaires GRUB assument un map temporaire à la volée. C'est suffisant, en particulier pour les système à un seul disque.
\vspace{5mm} \\
 
 
\hspace{1mm}  Cependant, le fichier de map de périphérique n'est pas entièrement obsolète, et il est utilisé pour écraser un environnement courant différent de celui du boot. Un cas courant est l'utilisation d'une partition ou d'un volume logique comme disque pour une machine virtuelle.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Installation BIOS }
 
\
 
\hspace{1mm}  Le format de la table de partition traditionnellement utilisé pour les plateformes PC BIOS est appelée le format MBR; c'est le format qui autorise jusqu'à 4 partitions primaire et des partitions logiques additionnelles. Avec ce format de table de partition il y a 2 manières d'installer GRUB: Il peut être embarqué dans la zone entre le MBR et la première partition, (généralement 31KiB, appelée la zone embarquée), ou l'image peut être installé dans un système de fichier et une liste de blocks le forme peuvent être stockés dans le premier secteur de cette partition.
\vspace{5mm} \\
 
 
\hspace{1mm}  Chaque méthode a ses inconvénients. Il n'y a pas de manière de réserver de l'espace dans la zone embarquée de manière sûre, et certains logiciels propriétaire sont connus pour l'utiliser; et les systèmes sont parfois partitionnés sans laisser suffisamment d'espace avant la première partition. D'un autre coté, installer dans un système de fichier signifie que GRUB est vulnérable si ses blocks sont déplacés dans le système de fichiers tel que fsck, donc cette approche est fragile, et peut seulement être utilisée si le système /boot est sur le même disque que le BIOS boot.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les systèmes récents utilisent le format GPT. C'est spécifié dans EFI, mais peut également être utilisé sur les plateformes BIOS si le système le supporte. Par exemple, GRUB et GNU/Linux peuvent être utilisé dans cette configuration. Avec ce format, il est possible de réserver une partition entière pour GRUB, appelée la partition de Boot. GRUB peut ainsi être embarquée dans cette partition sant rique d'être écrasé par un autre logiciel et dans être contenu dans un système de fichier.
\vspace{5mm} \\
 
 
\hspace{1mm}  En créant un BIOS Boot Partition dans un système GPT, on doit s'assurer qu'il y a au moins 31KiB d'espace disponible. Il faut également s'assurer qu'il a le type de partition correcte. En utilisant parted:
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Boot }
 
\
 
\hspace{1mm}  Grub peut charger les kernels conforme au Multiboot de manière consistante mais pour certains OS, il faut utiliser une méthode spécifique.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge booter un OS }
 
\
 
\hspace{1mm}  GRUB a 2 méthodes de boot distinct. Une des 2 est de charger un OS directement, et l'autre est de chaîner le loader qui va ainsi charger l'OS.
\vspace{5mm} \\
 
 
\hspace{1mm}  Multiboot est le format natif supporté par GRUB. Il supporte également Linux. Cependant, DOS et Windows ont certains problèmes.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour les OS qui ne supportent pas Multiboot et n'ont pas de support spécifique dans GRUB, le chain-loader doit être utilisé, ce qui implique qu'un autre loader est chargé.
\vspace{5mm} \\
 
 
\hspace{1mm} La commande chainloader est utilisée pour définir ce mode. Il est normalement nécessaire de charger certains modules GRUB et définir le périphérique root de manière approprié. Pour un système Windows, une entrée peut ressembler à:
 
{\ttfamily
menuentry "Windows" \{\\ \hspace{2mm}insmod chain\\ \hspace{2mm}insmod ntfs\\ \hspace{2mm}set root=(hd0,1)\\ \hspace{2mm}chainloader +1\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  Sur les système avec plusieurs disques dur, une travail supplémentaire doit être fournis. Le chain-Loading est seulement supporté sur les PC BIOS et les plateformes EFI.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Boot Loopback }
 
\
 
\hspace{1mm}  Grub est capable de lire une image ( CD ou HDD) stocké dans un stockage accessible. Cependant l'OS lui-même devrait être capable de trouver son root. Cela implique généralement de lancer un programme dans l'espace utilisateur avant que le vrai root soit trouvé. GRUB peut charger une petite image faite spécialement en ram en la passant au kernel, avec les commandes kfreebsd\_module, knetbsd\_module\_elf, kopenbsd\_ramdisk, initrd, initrd16, multiboot\_module, multiboot2\_module, ou xnu\_ramdisk, en fonction du chargeur.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Problèmes spécifiques à l'OS }
 
\
 
\hspace{1mm}  Vu que GNU/Hurd est conforme à Multiboot, il est facile à booter. Il ne faut cependant pas oublier de spécifier la partition root du kernel.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1.]{Spécifier le périphérique root de GRUB sur le même disque que celui de GNU/Hurd. La commande search --set=root --file /boot/gnumach.gz ou similaire peut aider.}
\item[\hspace{1mm} 2.]{Charger le kernel et les modules:}
\item[\hspace{1mm} multiboot /boot/gnumach.gz root=device:hd0s1]{}
\item[\hspace{1mm} module /hurd/ext2fs.static ext2fs --readonly --multiboot-command-line='\$\{kernel-command-line\}' --host-priv-port='\$\{host-port\}' --device-master-port='\$\{device-port\}' --exec-server-task='\$\{exec-task\}' -T typed '\$\{root\}' '\$(task-create)' '\$(task-resume)']{}
\item[\hspace{1mm} module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)']{}
\item[\hspace{1mm} 3.]{Finalement, lancer la commande boot.}
\end{description}
 
\vspace{1cm}{\huge GNU/Linux }
 
\
 
\hspace{1mm}  Il est relativement simple à booter, parce qu'il ressemble au boot des OS conformes Multiboot.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1.]{Définir le périphérique root de grub au même disque que le root de Linux.}
\item[\hspace{1mm} 2.]{Charger le kernel avec la commande: linux /vmlinuz root=/dev/sda1. Si nécessaire ajouter des paramètres au kernel: linux /vmlinuz root=/dev/sda1 acpi=off}
\item[\hspace{1mm} 3.]{Si besoin d'un initrd, utiliser la commande initrd: initrd /initrd}
\item[\hspace{1mm} 4.]{Finalement lancer la commande boot.}
\end{description}
 
\vspace{1cm}{\huge Fichier de configuration }
 
\
 
\hspace{1mm}  GRUB est configuré en utilisant grub.cfg, généralement dans /boot/grub. Ce fichier est flexible, mais beaucoups d'utilisateurs n'ont pas besoin d'écrire tout à la main.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Configuration simple }
 
\
 
\hspace{1mm}  Le programme grub-mkconfig génère grub.cfg correctement dans la plupart des cas. Il est prévu pour mettre à jours une distribution, et découvre les kernels disponible et tente de générer des entrées.
\vspace{5mm} \\
 
 
\hspace{1mm}  grub-mkconfig a quelques limitations. En ajoutant des entrées manuellement à la fin de la liste en éditant /etc/grub.d/40\_custom, ou en créant /boot/grub/custom.cfg, changer l'ordre des entrées du menu ou changer les scripts dans /etc/grub.d ou changer leur nom peut rendre les changements plus complexe. Cela peut être améliorer dans le future. Il est préférable dans ce cas d'éditer directement grub.cfg et de désactiver l'utilisation automatique de grub-mkconfig du système.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le fichier /etc/default/grub contrôle les opération de grub-mkconfig. Il est lu par un script shell, et doit être une entrée de shell POSIX valide; normalement c'est simplement une séquence de lignes KEY=value; mais si la valeur contient des espace ou des caractères spéciaux, ils doivent être entre guillemets.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} GRUB\_DEFAULT]{Entrée du menu par défaut. Peut être un nombre (la nième entrée) dans le menu, en commançant à 0, ou le titre d'une entrée du menu, ou la chaîne spéciale "saved", qui est l'entrée sauvée par GRUB\_SAVEDEFAULT, grub-set-default, ou grub-reboot. Défaut: 0}
\item[\hspace{1mm} GRUB\_TIMEOUT]{Boot sur le défaut au boot de n secondes. Défaut: 5. 0 boot immédiatement sans afficher le menu, et -1 attend indéfiniment}
\item[\hspace{1mm} GRUB\_HIDDEN\_TIMEOUT]{Attend n secondes pour une touche avant d'afficher le menu. Avec GRUB\_TIMEOUT à 0, le menu n'est jamais affiché sauf si une touche est pressée. Défaut: non-définis}
\item[\hspace{1mm} GRUB\_HIDDEN\_TIMEOUT\_QUIET]{Supprime le décompte de GRUB\_HIDDEN\_TIMEOUT. non définis par défaut.}
\item[\hspace{1mm} GRUB\_DEFAULT\_BUTTON]{}
\item[\hspace{1mm} GRUB\_TIMEOUT\_BUTTON]{}
\item[\hspace{1mm} GRUB\_HIDDEN\_TIMEOUT\_BUTTON]{}
\item[\hspace{1mm} GRUB\_BUTTON\_CMOS\_ADDRESS]{Variantes des variables correspondantes sans le suffix \_BUTTON, utilisés pour supporter les boutons de mise sous tension spécifique au vendeur.}
\item[\hspace{1mm} GRUB\_DISTRIBUTOR]{Définis par les distributeurs de GRUB pour identifier leur nom. Utilisé pour générer des titre d'entrée de menu plus informatifs}
\item[\hspace{1mm} GRUB\_TERMINAL\_INPUT]{Sélectionne le périphérique d'entrée du terminal. les noms dépendent de la plateform, mais peut inclure console (PC Bios et consoles EFI), serial, ofconsole (OpenFirmware Console), at\_keyboard (PC AT keyboard utilisant le protocole de boot HID), ou usb\_keyboard (clavier USB utilisant le protocole de boot HID). Défaut: utilise l'entrée de terminal natif de la plateforme.}
\item[\hspace{1mm} GRUB\_TERMINAL\_OUTPUT]{Sélectionne le périphérique de sortie du terminal. console, serial, gfxterm, ofconsole, ou vga\_text. Défaut: utilise la sortie de terminal native de la plateforme.}
\item[\hspace{1mm} GRUB\_TERMINAL]{Si définis, remplace GRUB\_TERMINAL\_INPUT et GRUB\_TERMINAL\_OUTPUT.}
\item[\hspace{1mm} GRUB\_SERIAL\_COMMAND]{Une commande pour configurer le port série pour utiliser la console série. Défaut: serial}
\item[\hspace{1mm} GRUB\_CMDLINE\_LINUX]{Arguments à ajouter aux entrées de menu pour le kernel Linux}
\item[\hspace{1mm} GRUB\_CMDLINE\_LINUX\_DEFAULT]{Sauf si GRUB\_DISABLE\_RECOVERY est définis, 2 entrées de menu sont générés pour chaque kernel linux: une entrée par défaut, et une entrée pour le mode récupération. Cette option liste les arguments à ajouter seulement à l'entrée par défaut, après ceux listés dans GRUB\_CMDLINE\_LINUX.}
\item[\hspace{1mm} GRUB\_DISABLE\_LINUX\_UUID]{Normalement, grub-mkconfig génère des entrées de menu qui utilisent des UUID pour identifier le système de fichie racine pour le kernel Linux en utilisant "root=UUID=...". Pour désactiver l'utilisation des UUID, définir cette option à true.}
\item[\hspace{1mm} GRUB\_DISABLE\_RECOVERY]{À true, désactive la génération des entrées de menu pour le mode récupération}
\item[\hspace{1mm} GRUB\_VIDEO\_BACKEND]{Si le support vidéo graphique est requis, soit parce que le terminal graphique gfxterm est utilisé ou parce que GRUB\_GFXPAYLOAD\_LINUX est définis, grub-mkconfig va normalement charger tous les pilotes vidéo GRUB et utiliser le plus approprié pour votre hardware. Cette option permet de forcer des paramètres spécifique. Une fois grub-install lancé, les pilotes disponible sont listés dans /boot/grub/video.lst.}
\item[\hspace{1mm} GRUB\_GFXMODE]{Définis la résolution utilisée dans le terminal graphique gfxterm. Noter que vous pouvez seulement utiliser les modes que votre carte supporte via les extensions VESA BIOS (VBE), donc pour les résolution d'écran LCD peuvent ne pas être disponible. Le défaut est auto, qui tente de sélectionner la résolution préférrée.}
\item[\hspace{1mm} GRUB\_BACKGROUND]{Définis l'image à utiliser avec le terminal graphique gfxterm. Ce fichie doit être accéssible au moment du boot et doit se terminer avec .png, .tga, .jpg, ou .jpeg. L'image sera redimensionné si besoin.}
\item[\hspace{1mm} GRUB\_THEME]{Définis un thème à utiliser avec le terminal graphique gfxterm}
\item[\hspace{1mm} GRUB\_GFGPAYLOAD\_LINUX]{à text, force Linux à booter en mode text normal. à keep, préserve le mode graphique définis avec GRUB\_GFXMODE.}
\item[\hspace{1mm} GRUB\_DISABLE\_OS\_PROBER]{Normalement, grub-mkconfig tente d'utiliser le programme os-prober, si installé, pour découvrir les autres OS installés sur le système et générer les entrées de menu appropriés pour eux. à true, désactive cette recherche.}
\item[\hspace{1mm} GRUB\_INIT\_TUNE]{Joue un son dans les haut-parleurs quand GRUB démarre. Utile pour les utilisateurs ne pouvant pas voir l'écran. La valeur de cette option est passée directement à play.}
\item[\hspace{1mm} GRUB\_BARAM]{Si mis, GRUB émet une commande badram pour filtrer des régions mémoire.}
\item[\hspace{1mm} GRUB\_PRELOAD\_MODULES]{Cette option peut être mis à une liste de modules GRUB séparés par des espaces. Chaque module sera chargé le plus tôt possible, au début de grub.cfg.}
\end{description}
 
\hspace{1mm}  Pour une personnalisation plus détaillée de la sortie de /etc/grub.d/40\_custom est particulièrement utile pour ajouter des entrées particulièrement utiles pour ajouter des entréess
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Ecrire des fichiers de configuration directement }
 
\
 
\hspace{1mm}  grub.cfg est écrit dans la langage de scripting intégré à GRUB, qui a une syntaxe similaire à BASH et d'autres shells.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} MOTS]{Un mot est une séquence de caractères considérés comme une unité simple. Les mots sont séparés par des métacaractères, qui sont les suivane, plus espace, tabulation et nouvelle ligne.}
\item[\hspace{1mm} \{ \} | \& \$ ; > <]{les guillemets peuvent être utilisés pour inclure les métacaractères dans les mots.}
\end{description}
 
\vspace{1cm}{\huge Mots réservés }
 
\
 
\hspace{1mm} Les mots réservés ont une signification spéciale pour GRUB. Les mots suivants sont reconus:
 
{\ttfamily
! \texttt{[}\texttt{[} \texttt{]}\texttt{]} \{ \}\\ case do done elif else esac fi for function\\ if in menuentry select then time until while\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge guillemets }
 
\
 
\hspace{1mm}  Les guillemets sont utilisés pour supprimés la signification spéciale de certains caractères ou mots. Il peut être utilisé pour traiter les métacaractères comme partie d'un mot. Il y a 3 mécanismes de guilemets: le caractère d'échappement, guillemets simple et guillemets double.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge expansion de variables }
 
\
 
\hspace{1mm}  Le caractère '\$' introduit l'expansion de variable. Le nom de la variable à étendre peut être entre crochets, qui servent optionnellement à protéger la variable à étendre des caractères qui suivent immédiatement.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les noms de variables normales commencent avec un caractère alphanumérique, suivi par 0 ou plusieurs caractères alphanumérique. Ces noms réfèrent aux entrées dans l'environnement GRUB.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les noms de variables positionnels consistent en 1 ou plusieurs chiffres. Ils représentent les paramètres passés aux appels de fonction, avec \$1 représentant le premier paramètre.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le nom de variable spéciale ? s'étend au code de sortie de la dernière commande exécutée. Quand les noms de variable positionnels sont actifs, d'autres variables @, *, et \# sont définis et s'étendent à tous les paramètres positionnels avec des guillemets nécessaire, sans guillemets, et comme compteur de paramètres, respectivement.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Commandes simple }
 
\
 
\hspace{1mm}  Une commande simple est une séquence de mots séparés par des espaces ou des tabulation et terminés par un ';' ou un newline. le premier mot spécifie la commande à exécuter. Les autres mots sont passés en argument à la commande.
\vspace{5mm} \\
 
 
\hspace{1mm}  La valeur de retour d'une commande simple est sont status de sortie. Si le mot réservé ! précède la commande, la valeur de retour est un NOT du status de sortie de la commande.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Commandes composés }
 
\
 
\hspace{1mm} Une commande composée est une des suivantes:
 
{\ttfamily
for name in word ...; do list; done\\ if list; then list; \texttt{[}elif list; then list;\texttt{]} ... \texttt{[}else list;\texttt{]}fi\\ while cond; do list; done\\ until cond; do list; done\\ function name \{ command; ...\}\\ menuentry title \texttt{[}--class=class ...\texttt{]}\texttt{[}--users=users\texttt{]}\texttt{[}--unrestricted\texttt{]}\texttt{[}--hotkey=key\texttt{]}\{command;...\}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Commande embarquées }
 
\
 
\hspace{1mm} Certaines commande sont également fournis par GRUB pour effectuer des action qui ne seraient pas possible autrement.
 
{\ttfamily
break\texttt{[}n\texttt{]}\\ continue\texttt{[}n\texttt{]}\\ return\texttt{[}n\texttt{]}\\ shift\texttt{[}n\texttt{]}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Configuration manuelle Multiboot }
 
\
 
\hspace{1mm}  L'autogénération des fichiers de configuration pour les environnements multi-bot dépendent de os-prober. Il est possible de créer soi-même la configuration
\vspace{5mm} \\
 
 
\hspace{1mm} Tout d'abord, créer une partition séparée pour GRUB. Certaines options ci-dessous montrent comment charger des images d'installeur d'OS depuis cette partition. Mounter cette partition dans /mnt/boot et désactiver GRUB dans tous les OS et installer manuellement le dernier GRUB compilé avec: \\
\hspace{1mm} \textbf{grub-install --boot-directory=/mnt/boot /dev/sda} \\
 
\hspace{1mm} Dans tous les OS installer les outils GRUB mais désactiver l'installation de GRUB dans le secteur de boot, pour avoir le menu.lst et grub.cfg disponible. Désactiver également l'utilisation d'os-prober en définissant: \\
\hspace{1mm} \textbf{GRUB\_DISABLE\_OS\_PROBER=true} \\
 
\hspace{1mm} Puis écrire un grub.cfg:
 
{\ttfamily
menuentry "OS using grub2" \{\\ \hspace{2mm}insmod xfs\\ \hspace{2mm}search --set=root --label OS1 --hint hd0,msdos8\\ \hspace{2mm}configfile /boot/grub/grub.cfg\\ \}\\ \hspace{2mm}\\ menuentry "OS using grub2-legacy" \{\\ \hspace{2mm}insmod ext2\\ \hspace{2mm}search --set=root --label OS2 --hint hd0,msdos6\\ \hspace{2mm}legacy\_configfile /boot/grub/menu.lst\\ \}\\ \hspace{2mm}\\ menuentry "Windows XP" \{\\ \hspace{2mm}insmod ntfs\\ \hspace{2mm}search --set=root --label WINDOWS\_XP --hint hd0,msdos1\\ \hspace{2mm}ntldr /ntldr\\ \}\\ \hspace{2mm}\\ menuentry "Windows 7" \{\\ \hspace{2mm}insmod ntfs\\ \hspace{2mm}search --set=root --label WINDOWS\_7 --hint hd0,msdos2\\ \hspace{2mm}ntldr /bootmgr\\ \}\\ \hspace{2mm}\\ menuentry "FreeBSD" \{\\ \hspace{2mm}insmod zfs\\ \hspace{2mm}search --set=root --label freepool --hint hd0,msdos7\\ \hspace{2mm}kfreebsd /freebsd@/boot/kernel/kernel\\ \hspace{2mm}kfreebsd\_module\_elf /freebsd@/boot/kernel/opensolaris.ko\\ \hspace{2mm}kfreebsd\_module\_elf /freebsd@/boot/kernel/zfs.ko\\ \hspace{2mm}kfreebsd\_module /freebsd@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache\\ \hspace{2mm}set kFreeBSD.vfs.root.mountfrom=zfs:freepool/freebsd\\ \hspace{2mm}set kFreeBSD.hw.psm.synaptics\_support=1\\ \}\\ \hspace{2mm}\\ menuentry "experimental GRUB" \{\\ \hspace{2mm}search --set=root --label GRUB --hint hd0,msdos5\\ \hspace{2mm}multiboot /experimental/grub/i386-pc/core.img\\ \}\\ \hspace{2mm}\\ menuentry "Fedora 16 installer" \{\\ \hspace{2mm}search --set=root --label GRUB --hint hd0,msdos5\\ \hspace{2mm}linux /fedora/vmlinuz lang=en\_US keymap=sg resolution=1280x800\\ \hspace{2mm}initrd /fedora/initrd.img\\ \}\\ \hspace{2mm}\\ menuentry "Fedora rawhide installer" \{\\ \hspace{2mm}search --set=root --label GRUB --hint hd0,msdos5\\ \hspace{2mm}linux /fedora/vmlinuz repo=ftp://mirror.switch.ch/mirror/fedora/linux/development/rawhide/x86\_64 lang=en\_US keymap=sg resolution=1280x800\\ \hspace{2mm}initrd /fedora/initrd.img\\ \}\\ \hspace{2mm}\\ menuentry "Debian sid installer" \{\\ \hspace{2mm}search --set=root --label GRUB --hint hd0,msdos5\\ \hspace{2mm}linux /debian/dists/sid/main/installer-amd64/current/images/hd-media/vmlinuz\\ \hspace{2mm}initrd /debian/dists/sid/main/installer-amd64/current/images/hd-media/initrd.gz\\ \}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Embarquer un fichier de configuration dans GRUB }
 
\
 
\hspace{1mm}  GRUB supporte un fichier de configuration embarqué directement dans l'image core, pour qu'il puisse être chargé avant d'entrée dans le mode normal. C'est utile pour par exemple quand est difficile de trouver le vrai fichier de configuration ou pour débugger un problème avec le chargement de ce fichier. grub-install utilise cette fonctionnalité quand il n'utilise pas de fonction disque du bios ou en installant sur un disque différent de celui contenant /boot/grub, auquel cas il doit utiliser la commande search pour trouver /boot/grub.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour embarquer un fichier de configuration, utiliser l'option -c de grub-mkimage. Le fichier est copié dans l'image core.
\vspace{5mm} \\
 
 
\hspace{1mm} Une fois embarqué, le fichier de configuration est exécuté, GRUB va charger le module 'normal', qui va lire le fichier de configuration de \$prefix/grub.cfg. À ce point, la variable root aura également été définis au nom du périphérique root. Par exemple, prefix peut être définis à '(hd0,1)/boot/grub' et et root peut être définis à 'hd0,1'. Donc, dans la plupart des cas, le fichier de configuration embarqué a seulement besoin des variables root et prefix, et ainsi supprimer le traitement normale de GRUB. Un exemple typique est:
 
{\ttfamily
search.fs\_uuid 01234567-89ab-cdef-0123-456789abcdef root\\ set prefix=(\$root)/boot/grub\\
}
\vspace{8mm}
 
\hspace{1mm}  Le module search\_fs\_uuid doit être inclus dans l'image core pour que cet exemple fonctionne.
\vspace{5mm} \\
 
 
\hspace{1mm} Dans des cas plus complexe, il peut être utile pour lire d'autres fichiers de configuration directement depuis le fichier de configuration embarquée. Cela permet de lire des fichiers qui ne s'appellent pas grub.cfg ou lire des fichiers depuis un répertoire autre que celui où les modules GRUB sont installés. Pour faire cela, inclure les modules configfile et normal dans l'image core, et embarquer un fichier de configuration qui utilise la commande configfile pour charger un autre fichier. L'exemple suivant nécessite également les modules echo, search\_label, et test à inclure dans l'image core:
 
{\ttfamily
search.fs\_label grub root\\ if \texttt{[} -e /boot/grub/example/test1.cfg \texttt{]}; then\\ \hspace{2mm}set prefix=(\$root)/boot/grub\\ \hspace{2mm}configfile /boot/grub/example/test1.cfg\\ else\\ \hspace{2mm}if \texttt{[} -e /boot/grub/example/test2.cfg \texttt{]}; then\\ \hspace{2mm}\hspace{2mm}set prefix=(\$root)/boot/grub\\ \hspace{2mm}\hspace{2mm}configfile /boot/grub/example/test2.cfg\\ \hspace{2mm}else\\ \hspace{2mm}\hspace{2mm}echo "Could not find an example configuration file!"\\ \hspace{2mm}fi\\ fi\\
}
\vspace{8mm}
 
\hspace{1mm}  Le fichier de configuration embarqué peut ne pas contenir d'entrées de menu directement.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge format du fichier de thème }
 
\
 
\hspace{1mm}  Le menu graphique GRUB supporte les thèmes qui peuvent être personnalisés. Le thème est configuré via un fichier texte qui spécifie les composant de l'interface graphique (incluant le menu de boot, la barre de progression de timeout, et les messages) ainsi que l'apparence en utilisant les couleurs, fonts, et images. Des exemples sont disponible dans docs/example\_theme.txt.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Couleurs }
 
\
 
\hspace{1mm} Les couleurs peuvent être spécifié de nombreuses manières:
 
{\ttfamily
Style HTML \#RRGGBB ou \#RGB\\ au format RGB décimal: "128,128,255".\\ Avec les noms de couleur SVG 1.0 qui doivent être spécifiés en minuscule.\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Fonts }
 
\
 
\hspace{1mm}  Les fonts GRUB utilisent le format de fonts bitmap PFF2. Les fonts sont spécifié avec le nom des font. Actuellement il n'y a pas de provision pour une liste de font préférentielle, ou de dériver une font d'une autre. Les fonts sont chargés avec la commande loadfont dans GRUB. Pour voir la liste des fonts chargés, exécuter lsfonts. S'il y a trop de font pour tenir dans l'écran, définir set pager=1 avant lsfonts.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Progress Bar }
 
\
 
\hspace{1mm}  Les barres de progression sont utilisées pour afficher le temps restant avant que GRUB boot sur l'entrée par défaut. Pour créer une barre de progression qui va afficher le temps restant, simplement créer un composant progress\_bar avec l'id \_\_timeout\_\_. Celà indique à GRUB que la progress bar devrait être mis à jours si le compteur du boot automatique est intérrompu par l'utilisateur.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les barres de progression peuvent optionnellement avoir un texte affiché. Ce texte est contrôlé par la variable text qui contient un template printf avec le seul argument \%d qui est le nombre de secondes restants. Additionnellement les valeurs spéciales “@TIMEOUT\_NOTIFICATION\_SHORT@”, “@TIMEOUT\_NOTIFICATION\_MIDDLE@”, “@TIMEOUT\_NOTIFICATION\_LONG@” sont remplacées avec les templates standard et traduits.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Indicateur de progression circulaire }
 
\
 
\hspace{1mm}  L'indicateur de progression circulaire fonctionne de manière similaire à la progress bar. en donnant un id de \_\_timeout\_\_, GRUB met à jours l'indicateur de progression circulaire pour indiquer le temps restant. pour cet indicateur, il y a 2 images utilisées: l'image au centre, et l'image de tick. L'image du centre est rendue au centre du composant, et l'image tick est utilisée pour rendre chaque marque à la circomférence de l'indicateur.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Labels }
 
\
 
\hspace{1mm}  Les labels texte peuvent être placés sur l'écran de boot. La font, couleur et alignement horizontale peuvent être spécifiés pour les labels. Si un label a l'id \_\_timeout\_\_, le text pour ce label est également utilisé avec un message informant l'utilisateur du nombre de secondes restant jusqu'au boot automatique. C'est utile dans le acs où vous souhaitez que le texte soit affiché au lieu d'une progress bar.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Boot Menu }
 
\
 
\hspace{1mm}  Le menu de boot où GRUB affiche les entrées de menu. C'est une liste d'éléments, où chaque élément a un titre, et un icône optionnel. L'icône est sélectionné basésur les classes spécifiée pour l'entrée du menu. Si il y a un fichier png nommé myclass.png dans grub/themes/icons, il sera affiché pour les éléments ayant cette classe. Le menu de boot peut être personnalisé de différentes manières, tels que la font et la couleur utilisé pour le titre de l'entrée de menu, et en spécifiant de boites stylisés pour le menu lui-même, et pour l'élement sélectionné.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Boites stylisées }
 
\
 
\hspace{1mm} Une de fonctionnalité les plus importantes pour personnalisés la couche est d'utiliser des boites stylisés, composés de 9 régions rectangulaires, qui sont utilisés pour dessiner les boites.
 
{\ttfamily
Northwest (nw)\hspace{2mm}North (n)\hspace{2mm}Northeast (ne)\\ West (w)\hspace{2mm}Center (c)\hspace{2mm}East (e)\\ Southwest (sw)\hspace{2mm}South (s)\hspace{2mm}Southeast (se)\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Fichier de thème }
 
\
 
\hspace{1mm}  Le fichier de thème est un fichier texte, qui contient 2 types de déclarations, Les propriétés globales, et la construction de composant.
\vspace{5mm} \\
 
 
\hspace{1mm} Les propriétés globales sont spécifiées avec le format simple:
 
{\ttfamily
name1: value1\\ name2: "valeur qui peut contenir des espaces"\\ name3: \#88F\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Liste de propriétés globles }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} title-text]{Spécifie le texte à afficher en haut de l'écran}
\item[\hspace{1mm} title-font]{Font utilisée pour le titre}
\item[\hspace{1mm} title-color]{Couleur du titre}
\item[\hspace{1mm} message-font]{font à utiliser pour les messages}
\item[\hspace{1mm} message-color]{Couleurs pour les messages}
\item[\hspace{1mm} message-bg-color]{couleur de fond}
\item[\hspace{1mm} desktop-image]{Image à utiliser comme fond}
\item[\hspace{1mm} desktop-color]{Couleur pour le fond si desktop n'est pas spécifié}
\item[\hspace{1mm} terminal-box]{Spécifie le motif de nom de fichier pour la boite stylisée.}
\end{description}
 
\vspace{1cm}{\huge Construction }
 
\
 
\hspace{1mm}  Une plus grande personnalisation est fournie par des composants. Une arborescence de composants forment l'interface utilisateur. Les conteneurs sont des composants qui peuvent contenir d'autres composants, et il y a toujours un composant root qui est une instance d'un conteneur caneva.
\vspace{5mm} \\
 
 
\hspace{1mm} Les composant sont créés dans le fichier thème en préfixant le type de composant avec le signe +:
 
{\ttfamily
+ label \{ text="GRUB" font="aqui 11" color="\#8FF" \}\\
}
\vspace{8mm}
 
\hspace{1mm}  Les propriétés d'un composant sont spécifiés avec "name=value", où value peut être un simple mot, un chaîne entre guillemets, ou un tuple "(ex: preferred\_size=(120,80)"
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Liste de composants }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} label]{Un label affiche une ligne de texte. Propriétés:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} id]{À "\_\_timeout\_\_" pour afficher le temps passé pour booter sur l'entrée par défaut.}
\item[\hspace{6mm} text]{Le texte à afficher}
\item[\hspace{6mm} font]{La font à utiliser}
\item[\hspace{6mm} color]{La couleur du texte}
\item[\hspace{6mm} align]{left, center et right}
\item[\hspace{6mm} visible]{À false permet de cacher le label.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} image]{Affiche une image. Propriétés:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} file]{Chenin de l'image à charger}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} progress\_bar]{Affiche une barre horizontale de progression. Propriétés}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} id]{À "\_\_timeout\_\_" pour afficher le temps passé pour booter sur l'entrée par défaut.}
\item[\hspace{6mm} fg\_color]{couleur de devant pour le rendu}
\item[\hspace{6mm} bg\_color]{couleur de fond pour le rendu}
\item[\hspace{6mm} border\_color]{La couleur de bordure pour le rendu}
\item[\hspace{6mm} text\_color]{Couleur du texte}
\item[\hspace{6mm} bar\_style]{La spécification de la boite stylisée pour la barre de progression.}
\item[\hspace{6mm} highlight\_style]{La spécification de boite stylisée pour la région survolée de la barre de progression.}
\item[\hspace{6mm} highlight\_overlay]{À true, la highlight box est affichée par dessus.}
\item[\hspace{6mm} text]{Le texte à afficher sur la barre de progression.}
\item[\hspace{6mm} font]{font à utiliser}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} circular\_progress]{Affiche un indicateur de progression circulaire. L'apparence de ce composant est déterminé par 2 images. Propriétés:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} id]{À "\_\_timeout\_\_" pour afficher le temps passé pour booter sur l'entrée par défaut.}
\item[\hspace{6mm} center\_bitmap]{Nom de l'image au centre}
\item[\hspace{6mm} tick\_bitmap]{Nom de l'image de tick}
\item[\hspace{6mm} num\_ticks]{Nombre de ticks qui sont créés dans un cercle complet}
\item[\hspace{6mm} ticks\_disappear]{booléen indiquant si les ticks apparaîssent ou disparaissent progressivement.}
\item[\hspace{6mm} start\_angle]{Position du premier tick, mesuré en "parrot" (1 parrot = 1/256 du cercle complot.)}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} boot\_menu]{Affiche le menu de boot GRUB. il permet de sélectionner les éléments et de les exécuter. propriétés:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} item\_font]{font à utiliser pour les items de menu}
\item[\hspace{6mm} selected\_item\_font]{Font à utiliser pour l'élément sélectionné}
\item[\hspace{6mm} item\_color]{Couleur du texte}
\item[\hspace{6mm} selected\_item\_color]{Couleur du texte de l'élément séléctionné}
\item[\hspace{6mm} icon\_width]{Largeur de l'icône}
\item[\hspace{6mm} icon\_height]{Hauteur de l'icône}
\item[\hspace{6mm} item\_height]{Hauteur de chaque élément du menu}
\item[\hspace{6mm} item\_padding]{Espace en pixels à laisser de chaque côté du contenu de l'élément du menu}
\item[\hspace{6mm} item\_icon\_space]{L'espace entre un icône et le texte, en pixels}
\item[\hspace{6mm} item\_spacing]{Espace à laisser entre les éléments du menu, en pixel}
\item[\hspace{6mm} menu\_pixmap\_style]{Motif de fichier pour la boite stylisée.}
\item[\hspace{6mm} selected\_item\_pixmap\_style]{Boite stylisée pour l'élement sélectionné}
\item[\hspace{6mm} scrollbar]{booléen indiquant si la barre de défilement est affichée}
\item[\hspace{6mm} scrollbar\_frame]{Motif de fichier pour le fond de la barre de défilement.}
\item[\hspace{6mm} scrollbar\_thumb]{Motif de fichier pour la barre de défilement.}
\item[\hspace{6mm} scrollbar\_thumb\_overlay]{À true, le scrollbar thumb des bords s'affichent par dessus la scrollbar frame.}
\item[\hspace{6mm} scrollbar\_slice]{Emplatement de la barre de défilement (west, center, east)}
\item[\hspace{6mm} scrollbar\_left\_pad]{padding à gauche, en pixel}
\item[\hspace{6mm} scrollbar\_right\_pad]{padding à droite, en pixel}
\item[\hspace{6mm} scrollbar\_top\_pad]{Padding en haut, en pixel}
\item[\hspace{6mm} scrollbar\_bottom\_pad]{padding en bas, en pixel}
\item[\hspace{6mm} visible]{À false permet de cacher la barre de progression}
\end{description}
 
\vspace{1cm}{\huge booter grub depuis le réseau }
 
\
 
\hspace{1mm} Les instructions suivantes fonctionnent seulement sur les systèmes PC BIOS où l'environnement PXE est disponible. \\
\hspace{1mm} \textbf{Pour générer une image PXE, lancer:} \\
\hspace{1mm} grub-mkimage --format=i386-pc-pxe --output=grub.pxe --prefix='(pxe)/boot/grub' pxe pxecmd \\
 
\hspace{1mm}  copier grub.pxe, /boot/grub/*.mod et /boot/grub/*.lst sur le serveur TFTP, s'assurant que *.mod et *.lst sont accessibles via le chemin /boot/grub depuis les serveur TFTP. définir la configuration du serveur DHCP pour offrir grub.pxe comme fichier de boot.
\vspace{5mm} \\
 
 
\hspace{1mm}  On peut également utiliser l'utilitaire grub-mknetdir pour générer une image et un répertoire GRUB, au lier de copier les fichiers manuellement.
\vspace{5mm} \\
 
 
\hspace{1mm}  Une fois GRUB démarré, les fichiers sur le serveur TFTP sera accessible via le périphérique pxe.
\vspace{5mm} \\
 
 
\hspace{1mm}  L'adresse ip du serveur et de la passerrelle peuvent être contrôlés en changeant le périphérique (pxe) en (pxe:server-ip) ou (pxe:server-ip:gateway-ip).
\vspace{5mm} \\
 
 
\hspace{1mm}  GRUB fournis de nombreuses variables d'environnements qui peuvent être utilisée pour inspecter ou changer le comportement du périphérique PXE:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} net\_<interface>\_ip]{L'adresse IP de cette machine. Lecture seule}
\item[\hspace{1mm} net\_<interface>\_mac]{L'adresse MAC de l'interface réseau. Lecture seule}
\item[\hspace{1mm} net\_<interface>\_hostname]{Le nom d'hôte du client fournis par DHCP. Lecture seule.}
\item[\hspace{1mm} net\_<interface>\_domain]{Nom de domaine du client fournis par DHCP. Lecture seule.}
\item[\hspace{1mm} net\_<interface>\_rootpath]{Le chemin du disque root du client, fournis par DHCP. Lecture seule.}
\item[\hspace{1mm} net\_<interface>\_extensionspath]{Le chemin d'extensions de vendeur DHCP additionnels fournis par DHCP. Lecture seule}
\item[\hspace{1mm} net\_<interface>\_boot\_file]{Nom du fichier de boot fournis pas DHCP. Lecture seule.}
\item[\hspace{1mm} net\_<interface>\_dhcp\_server\_name]{Le nom du serveur DHCP responsable pour ces paramètres de boot. Lecture seule.}
\item[\hspace{1mm} net\_default\_ip]{L'adresse IP de l'interface par défaut. Lecture seule. alias de net\_\$\verb|{|net\_default\_interface\verb|}|\_ip}
\item[\hspace{1mm} net\_default\_mac]{L'adresse mac de l'interface par défaut. Lecture seule. alias de net\_\$\verb|{|net\_default\_interface\verb|}|\_mac}
\item[\hspace{1mm} net\_default\_server]{Le serveur par défaut. Lecture écriture}
\end{description}
 
\vspace{1cm}{\huge Utilitser GRUB via une ligne série }
 
\
 
\hspace{1mm}  Pour les machines sans écran/clavier, il peut être utile de contrôler via des communications série. Pour connecter une machine avec un autre via une ligne série, il faut préparer un cable série, et avoir une carte série multiport. De plus, un émulateur de terminal est également requis, tels que minicom.
\vspace{5mm} \\
 
 
\hspace{1mm} Comme pour GRUB, l'instruction pour définir un terminal série et simple. Exemple: \\
\hspace{1mm} \textbf{serial --unit=0 --speed=9600} \\
\hspace{1mm} \textbf{terminal\_input serial; terminal\_output serial} \\
 
\hspace{1mm}  La commande serial initialise la série, COM1. Cette commande accepte de nombreuses options. Les commandes terminal\_input et terminal\_output choisissent quel type de terminal utiliser.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Utiliser GRUB avec des touches de mise en route }
 
\
 
\hspace{1mm} Certains vendeurs de laptop fournissent un bouton power-on additionnel qui boot un autre OS. GRUB supporte de tels boutons avec les variables GRUB\_TIMEOUT\_BUTTON, GRUB\_DEFAULT\_BUTTON, GRUB\_HIDDEN\_TIMEOUT\_BUTTON and GRUB\_BUTTON\_CMOS\_ADDRESS dans default/grub. Les valeurs connue sont :
 
{\ttfamily
Dell XPS M1530\\ 85:3\\ Asus EeePC 1005PE\\ 84:1\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Fichiers image GRUB }
 
\
 
\hspace{1mm}  GRUB consiste de nombreuses images: une variété d'image de boot pour démarrer GRUB de différentes manières, une image kernel, et un jeu de modules qui sont combinés avec l'image kernel pour former l'image core.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} boot.img]{Sur les systèmes PC BIOS, cette image est la première partie de GRUB à démarrer. Elle est écrite dans un MBR ou sur le secteur de boot d'une partition. Parce que le secteur de boot PC fait 512 octets, la taille de cette image fait exactement 512 octets. La seule fonction de boot.img est de lire le premier secteur de l'image core depuis le disque local, et de sauter dessus. À cause de la restriction de la taille, boot.img ne peut pas comprendre la structure d'un système de fichier, donc grub-setup code en dur l'emplacement du premier secteur de l'image core dans boot.img en installant GRUB.}
\item[\hspace{1mm} diskboot.img]{Cette image est utilisée comme premier secteur de l'image core en bootant depuis un disque dur. Elle lit le reste de l'image core en mémoire et démarre le kernel. Vu que la gestion du système de fichier n'est pas encore disponible, il encode l'emplacement de l'image core en utilisant un format de liste de blockes}
\item[\hspace{1mm} cdboot.img]{Cette image est utilisée comme premier secteur de l'image core en bootant depuis un CD-ROM.}
\item[\hspace{1mm} pxeboot.img]{Cette image est utilisée comme début de l'image core en bootant depuis le réseau en utilisant PXE.}
\item[\hspace{1mm} lnxboot.img]{Cette images peut être placée comme début de l'image core pour que GRUB ressemble à un kernel liste qui peut être booté par LILO.}
\item[\hspace{1mm} kernel.img]{Cette image contient les facilités basiques de GRUB: frameworks pour les périphériques et gestion des fichiers, variables d'environnement, mode récupération, etc. Elle est rarement utilisée directement, mais intégré dans toutes les images core.}
\item[\hspace{1mm} core.img]{L'image core de GRUB. Elle est construite dynamiquement depuis d'image kernel et une liste arbitraire de modules par le programme grub-mkimage. Généralement, elle contient suffisamment de modules pour accéder à /boot/grub, et charger tout le reste. Le design modulaire permet à l'image core d'être conservée petite, vu que la zone disque où elle doit résider fait souvent moins de 32Ko.}
\item[\hspace{1mm} *.mod]{Tout le reste de GRUB réside dans des modules. Ils sont souvent chargés automatiquement, ou intégrés dans l'image core s'ils sont essentiels, mais peuvent également être chargés manuellement en utilisant insmod.}
\end{description}
 
\vspace{1cm}{\huge Syntaxe et sémantiques de système de fichiers }
 
\
 
\hspace{1mm}  GRUB utilise une syntaxe spéciale pour spécifier les disques qui peuvent être accédés par le BIOS. À cause de la limitation des BIOS, GRUB ne peut pas distinguer les disques IDE, ESDI, SCSI, et d'autres. Vous devez connaître quel périphérique BIOS est équivalent à quel périphérique OS. Normalement, cela devrait être clair si les fichiers sont visible dans un périphérique ou en utilisant la commande search.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Comment spécifier les périphériques }
 
\
 
\hspace{1mm} La syntaxe de périphérique est la suivante:
 
{\ttfamily
(device\texttt{[},partmap-name1part-num1\texttt{[},partmap-name2part-num2\texttt{[},...\texttt{]}\texttt{]}\texttt{]})\\
}
\vspace{8mm}
 
\hspace{1mm} Les disques BIOS et EFI utilisent soit fd ou hd suivis par un chiffre, comme fd0 ou cd. AHCI, PATA, crypto, USB utilisent le nom du pilote suivi par un nombre. Memdisque et host sont limités à un disque et donc son référrés juste par le nom du pilote. RAID(md), ofdisk(ieee1275 et nand), LVM(lv), LDM et arcdisq (arc) utilisent un nom de disque intrinsèque du disque aliasé comme nand. Les conflit sont résolus en suffixant un nombre si nécessaire. Les virgules doivent être échappés:
 
{\ttfamily
(fd0)\\ (hd0)\\ (cd)\\ (ahci0)\\ (ata0)\\ (crypto0)\\ (usb0)\\ (cryptouuid/123456789abcdef0123456789abcdef0)\\ (mduuid/123456789abcdef0123456789abcdef0)\\ (lvm/system-root)\\ (lvmid/F1ikgD-2RES-306G-il9M-7iwa-4NKW-EbV1NV/eLGuCQ-L4Ka-XUgR-sjtJ-ffch-bajr-fCNfz5)\\ (md/myraid)\\ (md/0)\\ (ieee1275/disk2)\\ (ieee1275//pci@1f\textbackslash{},0/ide@d/disk@2)\\ (nand)\\ (memdisk)\\ (host)\\ (myloop)\\ (hostdisk//dev/sda)\\
}
\vspace{8mm}
 
\hspace{1mm}  part-num représente le numéro de partition de device, commençant à 1. partname est optionnel mais est recommandé vu que le disque peut avoir de nombreux partmaps top-level. En spécifiant le 3ème et dernier composant on peut accéder aux sous-partitions.
\vspace{5mm} \\
 
 
\hspace{1mm} La syntaxe (hd0) représente utilisant tout le disque, alors que la syntaxe (hd0,1) représente l'utilisation de la première partition du disque.
 
{\ttfamily
(hd0,msdos1)\\ (hd0,msdos1,msdos5)\\ (hd0,msdos1,bsd3)\\ (hd0,netbsd1)\\ (hd0,gpt1)\\ (hd0,1,3)\\
}
\vspace{8mm}
 
\hspace{1mm}  En activant le support réseau (tftp) , (http) et autre sont également disponibles. Avant d'utiliser le disque réseau, il faut initialiser le réseaux. En bootant sur un cdrom, (cd) est disponible.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Comment spécifier des fichiers }
 
\
 
\hspace{1mm}  Il y a 2 manières de spécifier des fichiers, par nom de fichier absolue, et par liste de block.
\vspace{5mm} \\
 
 
\hspace{1mm}  Un nom de fichier absolue a la forme (hd0,1)/boot/grub/grub.cfg. Si le nom du périphérique est omis, GRUB utilise le périphérique root implicitement.
\vspace{5mm} \\
 
 
\hspace{1mm} Une liste de blocks est utilisée pour spécifier un fichie qui n'apparaît pas dans le système de fichier, comme un chainloader. La syntaxe est [offset]+length[,[offset]+length]... par exemple: \\
\hspace{1mm} \textbf{0+100,200+1,300+300} \\
 
\hspace{1mm}  Cela signifie que GRUB devrait lire les blocks 0 à 99, le block 200, et les blocks 300 à 599. Si l'offset est absent, GRUB assume que l'offset est 0. De même, si le nom du périphérique est absent, le périphérique root est assumé.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Interface utilisateur de GRUB }
 
\
 
\hspace{1mm}  GRUB a une interface de menu simple pour choisir une entrée depuis un fichier de configuration, et une ligne de commande. GRUB lit son fichier de configuration dès qu'il l'a chargé. S'il en trouve un, l'interface à menu est activée en utilisant les entrées trouvées dans le fichier. Avec la ligne de commande, ou si le fichier de configuration n'a pas été trouvé, GRUB passe sur l'interface en ligne de commande.
\vspace{5mm} \\
 
 
\hspace{1mm}  L'interface en ligne de commande fournis un prompt similaire à un shell Unix. Chaque commande est immédiatement exécutée après qu'elle soit entrée. Les commandes sont un sous-jeu de celles disponible dans le fichier de configuration, utilisée avec la même syntaxe.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le mouvement du curseur et l'édition du text sur la ligne peut être fait via un sous-jeu de fonctions disponible dans le shell BASH:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} C-f (flèche droite)]{Déplacer d'un caractère en arrière}
\item[\hspace{1mm} C-b (flèche gauche)]{Déplace d'un caractère en avant}
\item[\hspace{1mm} C-a (HOME)]{Déplacer au début de la ligne}
\item[\hspace{1mm} C-e (END)]{Déplace à la fin de la ligne}
\item[\hspace{1mm} C-d (DEL)]{Supprimer le caractère sous le curseur}
\item[\hspace{1mm} C-h (BS)]{Supprimer le caractère à gauche du curseur}
\item[\hspace{1mm} C-k]{Supprimer le texte de la position courant à la fin de la ligne}
\item[\hspace{1mm} C-u]{Supprimer le texte du début de la ligne à la position du curseur}
\item[\hspace{1mm} C-y]{Placer le texte supprimé dans le tampon au curseur}
\item[\hspace{1mm} C-p, C-n (flèche du haut/bas)]{De déplacer dans l'historique}
\end{description}
 
\hspace{1mm}  En tapant des commande interactivement, si le curseur et dans ou avant le premier mot dans la ligne de commande, la touche TAB affiche un listing des commandes disponible, ou la completion des disques, partitions, et noms de fichiers.
\vspace{5mm} \\
 
 
\hspace{1mm}  Noter qu'on ne peut pas utiliser la fonctionnalité de completion dans le système de fichier TFTP.
\vspace{5mm} \\
 
 
\hspace{1mm}  L'interface à menu est facile à utiliser. ses commande sont raisonnablement intuitives et décrites à l'écran. Basiquement, l'interface à menu fournis une liste d'entrées de boot. Utiliser les touches fléchées pour sélectionner l'entrée, puis appuyer sur entrer pour valider le choix
\vspace{5mm} \\
 
 
\hspace{1mm}  Les commandes sont disponible pour entrer une ligne de commande en appuyant sur 'c' qui opèrent exactement comme la version sans fichier de configuration de GRUB, mais permet de retourner au menu si désiré en appuyant sur échappe.
\vspace{5mm} \\
 
 
\hspace{1mm}  En protégeant l'interface avec un mot de passe, tout ce que l'on peut faire est de choisir une entrée avec entrer ou appuyer sur p pour entrer un mot de passe.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Éditer une entrée de menu }
 
\
 
\hspace{1mm}  L'éditeur d'entrée de menu ressemble à l'interface à menu principale, mais les lignes dans le menu sont des commandes individuelles dans l'entrée sélectionnée au lieu des noms de l'entrée.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si échappe est pressé dans l'éditeur, il annule tous les changement faits sur l'entrée et retourne dans le menu principal.
\vspace{5mm} \\
 
 
\hspace{1mm}  Chaque ligne dans l'entrée de menu peut être édité librement, et on peut également ajouter des lignes. Pour booter sur l'entrée éditée, utiliser Ctrl+x.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Variables d'environnement GRUB }
 
\
 
\hspace{1mm}  GRUB supporte les variables d'environnement qui sont similaires aux système UNIX
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} biosnum]{En chaînant un autre chargeur de boot, GRUB a besoin de connaître quel numéro de disque BIOS correspond au périphérique root pour qu'il puisse être enregistré correctement. Si cette variable n'est pas définie, GRUB le devine.}
\item[\hspace{1mm} check\_signatures]{Contrôle si GRUB force la signature numérique au chargement des fichiers.}
\item[\hspace{1mm} chosen]{En exécutant une entrée du menu, GRUB définis cette variable au titre de cette entrée.}
\item[\hspace{1mm} cmdpath]{L'emplacement depuis lequel core.img a été chargé, en chemin absolue. Définis par GRUB au démarrage.}
\item[\hspace{1mm} color\_highlight]{Cette variable contient les couleurs de terminal foreground et background, séparé par un '/'. Définir cette variable change ces couleurs. Défaut: 'black/white'}
\item[\hspace{1mm} color\_normal]{Cette variable contient les couleurs normales foreground et background, séparés par un '/'. Chaque couleur doit être un nom parmis black, blue, green, cyan, red, magenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow, white. défaut: white/black}
\item[\hspace{1mm} debug]{Cette variable peut être mis pour activer le debuggage de différents composants de GRUB. Contient une liste de facilités, ou all.}
\item[\hspace{1mm} default]{Si cette variable est définie, elle identifie une entrée du menu qui devrait être par défaut. Peut être identifier par un numéro ou un titre.}
\item[\hspace{1mm} fallback]{Si définie, identifie une entrée de menu qui devrait être sélectionnée si l'entrée par défaut échoue.}
\item[\hspace{1mm} gfxmode]{Si définie, indique la résolution utilisée dans le terminal graphique gfxterm. Noter qu'il n'est possible d'utiliser que les modes VESA BIOS Extensions (VBE). défaut: auto.}
\item[\hspace{1mm} gfxpayload]{contrôle le mode vidéo dans lequel Linux démarre. Remplace l'option de boot vga=. peut être 'text' pour forcer linux à booter en mode texte normal, 'keep' pour préserver le mode graphique définis avec gfxmode, ou une des valeurs permises pour gfxmode.}
\item[\hspace{1mm} gfxterm\_font]{nom d'une font à utiliser pour le texte dans le terminal graphique gfxterm.}
\item[\hspace{1mm} grub\_cpu]{En mode normal, GRUB définis cette variable au type de CPU pour lequel GRUB a été construit.}
\item[\hspace{1mm} grub\_platform]{En mode normal, GRUB définis cette variable à la platform pour laquelle GRUB a été construit (ex: pc ou efi)}
\item[\hspace{1mm} icondir]{Répertoire dans lequel le menu graphique GRUB devrait rechercher les icônes, après avoir recherché dans le répertoire 'icons'}
\item[\hspace{1mm} lang]{code de langue que la commande gettext utilise pour traduire les chaînes.}
\item[\hspace{1mm} locale\_dir]{Répertoire où trouver les fichiers de traduction, généralement /boot/grub/locale. sinon, l'internationnalisation est désactivée.}
\item[\hspace{1mm} menu\_color\_highlight]{Contient les couleurs foreground et background à utiliser pour les entrées de menu sélectionnés, séparés par un '/'.}
\item[\hspace{1mm} menu\_color\_normal]{Contient les couleurs à utiliser pour les entrée non-sélectionnés}
\item[\hspace{1mm} net\_*]{Voir la partie réseaux}
\item[\hspace{1mm} pager]{À 1, pause la sortie après chaque écran plein et attend une entrée clavier.}
\item[\hspace{1mm} prefix]{L'emplacement du répertoire /boot/grub. Normalement définis par GRUB}
\item[\hspace{1mm} root]{Nom du périphérique root}
\item[\hspace{1mm} superusers]{liste de noms de superutilisateurs pour activer le support de l'authentification}
\item[\hspace{1mm} theme]{Répertoire contenant un theme graphique}
\item[\hspace{1mm} timeout]{Spécifie le temps en seconde à attendre une entrée clavier avant de booter l'entrée par défaut. 0 indique de booter immédiatement, et -1, attend indéfiniment.}
\item[\hspace{1mm} timeout\_style]{Peut être menu, countdown, ou hidden.}
\end{description}
 
\vspace{1cm}{\huge Block d'environnement GRUB }
 
\
 
\hspace{1mm}  Il est souvent utile de se rappeler d'un boot à l'autre. Par exemple, l'entrée par défaut peut être celle sélectionnée la dernière fois. GRUB n'implémente pas délibérément le support pour écrire des fichiers afin de minimiser les risques de corruption des systèmes de fichier. Cependant, GRUB fournis un block d'environnement qui peut être utilisé pour sauver une petite quantité d'états.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le block d'environnement est un fichie 1024 octets préalloués, qui vis dans /boot/grub/grubenv. Au boot, load\_env charge les variables depuis ce fichier, et save\_env sauve les variables dans ce fichier. grub-editenv peut être utilisé pour éditer le block d'environnement.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour des raisons de sécurité, ce stockage est seulement disponible si installé sur un simple disque (ni LVM ou RAID), en utilisant un système de fihier sans checksum (pas de ZFS), et en utilisant des fonction BIOS ou EFI (pas de ATA, USB ou IEEE1275).
\vspace{5mm} \\
 
 
\hspace{1mm}  grub-mkconfig utilise cette facilité pour implémenté GRUB\_SAVEDEFAULT
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Liste de commandes disponible }
 
\
 
\hspace{1mm}  Les commandes appartiennent à différents groupes. Quelques commandes peuvent être utilisées dans la section globale du fichier de configuration (ou menu). La plupart d'entre-elles peuvent être entrée sur la ligne de commande et peut être utilisée soit dans le menu ou spécifiquement dans les entrées du menu.
\vspace{5mm} \\
 
 
\hspace{1mm}  En mode récupération, seul insmod, ls, set, et unset sont normalement disponibles.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Commandes pour le menu uniquement }
 
\
 
\hspace{1mm}  Les sémantiques utilisées pour parser le fichier de configuration sont les suivantes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{Les fichiers doivent être au format plain-text}
\item[\hspace{1mm} -]{Les options sont séparés par des espaces}
\item[\hspace{1mm} -]{Tous les nombres peuvent être en décimal ou en hexadécimal.}
\item[\hspace{1mm} ]{Ces commandes peuvent être seulement être utilisés dans le menu:}
\item[\hspace{1mm} ]{}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} menuentry title \texttt{[}--class=class ...\texttt{]}\texttt{[}--users=users\texttt{]}\texttt{[}--unrestricted\texttt{]}\texttt{[}--hotkey=key\texttt{]}\{command;...\}]{Définie une entrée du menu nommée title. --class peut être spécifié plusieurs fois, et est utilisée par les thèmes pour afficher différentes classes en utilisant différents styles. --users donne aux utilisateurs spécifiques l'accès à l'entrée. --unrestricted donne accès à tous les utilisateurs. --hotkey associe une touche avec l'entrée, ou 'backspace, tab ou delete.}
\item[\hspace{1mm} submenu title \texttt{[}--class=class ...\texttt{]}\texttt{[}--users=users\texttt{]}\texttt{[}--unrestricted\texttt{]}\texttt{[}--hotkey=key\texttt{]}\{command;...\}]{Définis un sous-menu.}
\end{description}
 
\hspace{1mm}  Liste des commandes générales, utilisée dans le menu et sur la ligne de commande:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} serial \texttt{[}--unit=unit\texttt{]} \texttt{[}--port=port\texttt{]} \texttt{[}--speed=speed\texttt{]} \texttt{[}--word=word\texttt{]} \texttt{[}--parity=parity\texttt{]} \texttt{[}--stop=stop\texttt{]}]{Initialise un périphérique série. unit est un nombre de 0 à 3. Le port série n'est pas utilisé sauf si les commandes terminal\_input et terminal\_output sont utilisés.}
\item[\hspace{1mm} terminal\_input \texttt{[}--append|--remove\texttt{]} \texttt{[}terminal1\texttt{]} \texttt{[}terminal2\texttt{]} …]{Sélectionne un terminal d'entrée. Sans argument, liste les terminaux actifs et disponibles. --append ajoute les terminaux nommés à la liste de terminaux actifs. --remove supprime les terminaux nommés de la liste active.}
\item[\hspace{1mm} terminal\_output \texttt{[}--append|--remove\texttt{]} \texttt{[}terminal1\texttt{]} \texttt{[}terminal2\texttt{]} …]{Identique à terminal\_output, mais pour les terminaux se sortie}
\item[\hspace{1mm} terminfo \texttt{[}-a|-u|-v\texttt{]} \texttt{[}term\texttt{]}]{Définis les capacités de votre terminal en donnant le nom d'une entrée dans la base terminfo, qui devrait correspondre à une variable d'environnement TERM dans Unix. "vt100", "vt100-color", "ieee1275", et "dumb". Les options -a (--ascii), -u (--utf8), et -v (--visual-utf8) contrôlent comment le text non-ASCII est affiché.}
\end{description}
 
\hspace{1mm}  Liste des commande utilisable sur la ligne de commande et dans les entrées de menu
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} \texttt{[}]{Alias de test}
\item[\hspace{1mm} acpi \texttt{[}-1|-2\texttt{]} \texttt{[}--exclude=table1,…|--load-only=table1,…\texttt{]} \texttt{[}--oemid=id\texttt{]} \texttt{[}--oemtable=table\texttt{]} \texttt{[}--oemtablerev=rev\texttt{]} \texttt{[}--oemtablecreator=creator\texttt{]} \texttt{[}--oemtablecreatorrev=rev\texttt{]} \texttt{[}--no-ebda\texttt{]} filename …]{Les systèmes BIOS modern implémentent ACPI, et définissent diverses tables qui décrivent l'interface entre un OS conforme ACPI et le firmware. Dans certains cas, les tables fournies par défaut ne fonctionnent qu'avec certains OS, et il peut être nécessaire de les remplacer. Cette commande va remplacer le Root System Description Pointer (RSDP) dans le Extended BIOS Data Area pour pointer vers de nouvelles tables. Si --no-ebda est utilisé, les nouvelles tables seront connues uniquement de GRUB, mais peut être utilisé par l'émulation EFI de GRUB.}
\item[\hspace{1mm} authenticate \texttt{[}userlist\texttt{]}]{Vérifie l'utilisateur dans userlist ou listé dans la variable superusers.}
\item[\hspace{1mm} background\_color color]{Définis la couleurs de fond pour le terminal actif. Ne peut être changé qu'en utilisant gfxterm}
\item[\hspace{1mm} background\_image \texttt{[}\texttt{[}--mode ‘stretch’|‘normal’\texttt{]} file\texttt{]}]{Charge l'image de fond pour le terminal actif depuis le fichier spécifié. Uniquement en utilisant gfxterm}
\item[\hspace{1mm} badram addr,mask\texttt{[},addr,mask...\texttt{]}]{Filtrer la mémoire endommagée. La syntaxe est la même que fournie par l'utilitaire memtest86+}
\item[\hspace{1mm} blocklist file]{Affiche une liste de block pour le fichier donné.}
\item[\hspace{1mm} boot]{La commande boot démarre un OS ou un chain-loader qui a été chargé.}
\item[\hspace{1mm} cat \texttt{[}--dos\texttt{]} file]{Affiche le contenu d'un fichier. Si --dos est utilisé, les CR/NL sont affiché comme simple nouvelle ligne.}
\item[\hspace{1mm} chainloader \texttt{[}--force\texttt{]} file]{Charge le fichier comme chain-loader. --force charge le fichier même si la signature est incorrect.}
\item[\hspace{1mm} clear]{Éfface l'écran}
\item[\hspace{1mm} cmosclean byte:bit]{Efface la varleur d'un bit dans le CMOS.}
\item[\hspace{1mm} cmosdump contents]{Dump le contenu du CMOS en valeurs hexadécimal.}
\item[\hspace{1mm} cmostest byte:bit]{Test la valeur d'un bit dans le CMOS.}
\item[\hspace{1mm} cmp file1 file2]{Compare 2 fichiers.}
\item[\hspace{1mm} configfile file]{Charge le fichier de configuration spécifié, puis affiche le menu.}
\item[\hspace{1mm} cpuid \texttt{[}-l\texttt{]}]{Vérifie les fonctionnalités CPU. Cette commande est seulement disponible sur les systèmes x86. -l retourne vrai si le CPU supporte le mode long (64-bits)}
\item[\hspace{1mm} crc file]{Affiche le checksum CRC32 du fichier}
\item[\hspace{1mm} cryptomount device|-u uuid|-a|-b]{Définis l'accès à un périphérique chiffré. -a monte tous les périphérique chiffrés détectés. GRUB supporte les disques chiffrés en utilisant LUKS et geli.}
\item[\hspace{1mm} date \texttt{[}\texttt{[}year-\texttt{]}month-day\texttt{]} \texttt{[}hour:minute\texttt{[}:second\texttt{]}\texttt{]}]{Sans argument, affiche l'heure et la date courante. Sinon prend la date et l'heure courante, change un élément spécifié et définis le résultat comme nouvelle date et heure.}
\item[\hspace{1mm} devicetree file]{Charge le dtb depuis un système de fichier, pour le passer à Linux.}
\item[\hspace{1mm} distrust pubkey\_id]{Supprime la clé publique donnée du jeu de clé de GRUB. pubkey\_id est les 4 derniers octets en hexa de l'id de clé GPG v4, qui est également la sortie de list\_trusted. L'id de clé peut être obtenu avec gpg --fingerprint. Ces clés sont utilisées pour valider les signatures.}
\item[\hspace{1mm} drivemap -l|-r|\texttt{[}-s\texttt{]} from\_drive to\_drive]{Sans option, map le lecteur from\_drive au lecteur to\_drive. C'est nécessaire pour chain-load certains OS, comme DOS. -s inverse le mappage, inversant 2 disques. -l liste les mappages courant. -r réinitialise tous les mappages}
\item[\hspace{1mm} echo \texttt{[}-n\texttt{]} \texttt{[}-e\texttt{]} string …]{Affiche le texte demandé et, sauf si l'option -n est utilisée, une nouvelle ligne. -e autorise l'interprétation des caractères échappé.}
\item[\hspace{1mm} eval string ...]{Concatène les arguments ensemble en utilisant un simple espace comme séparateur et évalue de résultat comme séquence de commandes GRUB.}
\item[\hspace{1mm} export envvar]{Exporte la variable d'environnement envvar. Les variables exportée sont visible aux fichiers de configurations chargés avec configfile}
\item[\hspace{1mm} false]{Ne fait rien, se termine avec un code de sortie false}
\item[\hspace{1mm} gettext string]{Traduit la chaîne donnée dans la langue courante. La langue courant est stockée dans la variable lang.}
\item[\hspace{1mm} gptsync device \texttt{[}partition\texttt{[}+/-\texttt{[}type\texttt{]}\texttt{]}\texttt{]}...]{Les disques utilisant une table de partition GUID ont également une table de partition MBR pour compatibilité avec le BIOS et avec d'anciens OS. Les MBR peut seulement représenter un sous-jeu limité d'entrées de partitions GPT. Cette commande popule le MBR avec les entrées de partition spécifiés sur le périphérique. Jusqu'à 3 partitions peuvent être utilisée. 'type' est un code de type de partition MBR, [+/-] rend la partition active ou non.}
\item[\hspace{1mm} halt --no-apm]{arrête l'ordinateur. Si l'option --no-apm est spécifiée, aucun appel APM n'est effectué. Sinon, l'ordinateur est éteint en utilisant APM.}
\item[\hspace{1mm} hashsum --hash hash --keep-going --uncompress --check file \texttt{[}--prefix dir\texttt{]}|file …]{Calcule ou vérifie les hashes des fichier. (adler32, crc64, crc32, crc32rfc1510, crc24rfc2440, md4, md5, ripemd160, sha1, sha224, sha256, sha512, sha384, tiger192, tiger, tiger2, whirlpool.}
\item[\hspace{1mm} help \texttt{[}pattern ...\texttt{]}]{Affiche des informations sur les commandes intégrées.}
\item[\hspace{1mm} initrd file]{Charge le ramdisk initial pour une image kernel Linux et définis les paramètres appropriés dans la zone de configuration de Linux. Peut seulement être spécifiée après la commande linux.}
\item[\hspace{1mm} initrd16 file]{Identique, mais pour un ramdisk initiale en mode 16bits.}
\item[\hspace{1mm} insmod module]{Charge un module GRUB}
\item[\hspace{1mm} keystatus \texttt{[}--shift\texttt{]}\texttt{[}--ctrl\texttt{]}\texttt{[}--alt\texttt{]}]{Retourne true si les touches Shift, Control, ou Alt sont enfoncée, comme requis par les options. Utile dans les scripts pour permettre un certain contrôle utilisateur sur le comportement sans avoir à attendre une touche.}
\item[\hspace{1mm} linux file]{Charge l'image Linux. Le reste de la ligne de commande est passée telle quelle au kernel.}
\item[\hspace{1mm} linux16 file]{Idem mais charge un kernel en mode 16bits.}
\item[\hspace{1mm} list\_env -f file]{Liste toutes les variables dans le fichier block d'environnement. -f écrase l'emplacement par défaut du block d'environnement.}
\item[\hspace{1mm} load\_env -f file]{Charge toutes les variables depuis le fichier block d'environnement dans l'environnement.}
\item[\hspace{1mm} loadfont file]{Charge les fonts spécifiées.}
\item[\hspace{1mm} loopback -d device file]{Charge le contenu d'un fichier comme périphérique. -d pour le supprimer. ex loopback loop0 /path/to/image; ls (loop0)/}
\item[\hspace{1mm} ls \texttt{[}arg ...\texttt{]}]{Liste des périphériques ou fichiers.}
\item[\hspace{1mm} lsfonts]{Liste les fonts chargées}
\item[\hspace{1mm} lsmod]{Liste les modules chargés}
\item[\hspace{1mm} md5sum]{alias de hashsum --hash md5 arg …}
\item[\hspace{1mm} module \texttt{[}--nounzip\texttt{]} file \texttt{[}arguments\texttt{]}]{Charge un module pour l'image kernel multiboot. Le reste de la ligne est passé comme ligne de commande du module.}
\item[\hspace{1mm} multiboot \texttt{[}--quirk-bad-kludge\texttt{]} \texttt{[}--quirk-modules-after-kernel\texttt{]} file …]{Charge l'image kernel multiboot depuis le fichier spécifié. Le reste de la ligne est passé au kernel comme ligne de commande.}
\item[\hspace{1mm} nativedisk]{switch d'un pilote de disque firmware à un natif.}
\item[\hspace{1mm} normal \texttt{[}file\texttt{]}]{Entre en mode normal et affiche le menu GRUB. En mode normal, les commandes, modules de système de fichier, et modules cryptographique sont automatiquement chargés, et le parser de script GRUB est disponible. Si un fichier est donné, les commandes seront lues depuis ce fichier, sinon elles sont lues depuis \$prefix/grub.cfg, s'il existe.}
\item[\hspace{1mm} normal\_exit]{sort du mode normal. Si cette instance du mode normal n'a pas été imbriqué dans un autre, retourne en mode rescue.}
\item[\hspace{1mm} parttool partition commands]{Effectue diverses modifications des entrées de la table de partition. Chaque command est soit un booléen, auquel cas il doit être suivi avec + ou -, pour activer ou désactiver cette option, ou peut prendre une valeur sous la forme command=value.}
\item[\hspace{1mm} password user clear-password]{Définir un utilisateur nommé user avec le mot de passe donné.}
\item[\hspace{1mm} password\_pbkdf2 user hashed-password]{Définis un utilisateur nommé user avec le mot de passe hashé. Utiliser grub-mkpasswd-pbkdf2 pour générer des hashs de mot de passe.}
\item[\hspace{1mm} play file | tempo \texttt{[}pitch1 duration1\texttt{]}\texttt{[}pitch2 duration2\texttt{]}...]{Jouer un son. Si l'argument est un nom de fichier, joue le fichier.}
\item[\hspace{1mm} probe \texttt{[}--set var\texttt{]} --driver|--partmap|--fs|--fs-uuid|--label device]{Récupère des informations de périphérique. --set assigne le résultat à la variable var, sinon affiche l'information à l'écran.}
\item[\hspace{1mm} pxe\_unload]{Décharge l'environnement PXE.}
\item[\hspace{1mm} read \texttt{[}var\texttt{]}]{Lit une ligne d'entrée de l'utilisateur. Si une variable var est donnée, définis cette variable d'environnement.}
\item[\hspace{1mm} reboot]{Redémarre la machine}
\item[\hspace{1mm} regexp \texttt{[}--set \texttt{[}number:\texttt{]}var\texttt{]} regexp string]{Test si l'expression régulière matche la chaîne.}
\item[\hspace{1mm} rmmod module]{Supprime un module chargé}
\item[\hspace{1mm} save\_env \texttt{[}-f file\texttt{]} var ...]{Sauve les variables nommée depuis l'environnement dans le fichier block d'environnement.}
\item[\hspace{1mm} search \texttt{[}--file|--label|--fs-uuid\texttt{]} \texttt{[}--set \texttt{[}var\texttt{]}\texttt{]} \texttt{[}--no-floppy\texttt{]} name]{Recherche des périphérique par fichier (-f, --file) label de système de fichier (-l, --label), ou UUID de système de fichier (-u, --fs-uuid). Avec --set, la variable var est définis avec le premier périphérique trouvé. La variable par défaut est root. --no-floppy empêche de recherche les périphérique disquette. les commandes search.file, search.fs\_label, et search.fs\_uuid sont des alias de search --file, search --label, et search --fs-uuid, respectivement.}
\item[\hspace{1mm} sendkey \texttt{[}--num|--caps|--scroll|--insert|--pause|--left-shift|--right-shift|--sysrq|--numkey|--capskey|--scrollkey|--insertkey|--left-alt|--right-alt|--left-ctrl|--right-ctrl ‘on’|‘off’\texttt{]}… \texttt{[}no-led\texttt{]} keystroke]{Insert des touches dans le tampon clavier en bootant. certains OS ou chain-loader nécessitent que des touches particulières soient pressées pour entrer en mode safe. Jusqu'à 16 touches peuvent être fournis. Les noms des touches peuvent être:}
\end{description}
 
\hspace{1mm} Name   Key
 
{\ttfamily
escape\hspace{2mm}\hspace{2mm}\hspace{2mm}Escape\\ exclam\hspace{2mm}\hspace{2mm}\hspace{2mm}!\\ at\hspace{2mm}\hspace{2mm}\hspace{2mm}@\\ numbersign\hspace{2mm}\hspace{2mm}\hspace{2mm}\#\\ dollar\hspace{2mm}\hspace{2mm}\hspace{2mm}\$\\ percent\hspace{2mm}\hspace{2mm}\hspace{2mm}\%\\ caret\hspace{2mm}\hspace{2mm}\hspace{2mm}\textasciicircum \\ ampersand\hspace{2mm}\hspace{2mm}\hspace{2mm}\&\\ asterisk\hspace{2mm}\hspace{2mm}\hspace{2mm}*\\ parenleft\hspace{2mm}\hspace{2mm}\hspace{2mm}(\\ parenright\hspace{2mm}\hspace{2mm}\hspace{2mm})\\ minus\hspace{2mm}\hspace{2mm}\hspace{2mm}-\\ underscore\hspace{2mm}\hspace{2mm}\hspace{2mm}\_\\ equal\hspace{2mm}\hspace{2mm}\hspace{2mm}=\\ plus\hspace{2mm}\hspace{2mm}\hspace{2mm}+\\ backspace\hspace{2mm}\hspace{2mm}\hspace{2mm}Backspace\\ tab\hspace{2mm}\hspace{2mm}\hspace{2mm}Tab\\ bracketleft\hspace{2mm}\hspace{2mm}\hspace{2mm}\texttt{[}\\ braceleft\hspace{2mm}\hspace{2mm}\hspace{2mm}\{\\ bracketright\hspace{2mm}\hspace{2mm}\hspace{2mm}\texttt{]}\\ braceright\hspace{2mm}\hspace{2mm}\hspace{2mm}\}\\ enter\hspace{2mm}\hspace{2mm}\hspace{2mm}Enter\\ control\hspace{2mm}\hspace{2mm}\hspace{2mm}press and release Control\\ semicolon\hspace{2mm}\hspace{2mm}\hspace{2mm};\\ colon\hspace{2mm}\hspace{2mm}\hspace{2mm}:\\ quote\hspace{2mm}\hspace{2mm}\hspace{2mm}’\\ doublequote\hspace{2mm}\hspace{2mm}\hspace{2mm}"\\ backquote\hspace{2mm}\hspace{2mm}\hspace{2mm}‘\\ tilde\hspace{2mm}\hspace{2mm}\hspace{2mm}\textasciitilde\\ shift\hspace{2mm}\hspace{2mm}\hspace{2mm}press and release left Shift\\ backslash\hspace{2mm}\hspace{2mm}\hspace{2mm}\textbackslash{}\\ bar\hspace{2mm}\hspace{2mm}\hspace{2mm}|\\ comma\hspace{2mm}\hspace{2mm}\hspace{2mm},\\ less\hspace{2mm}\hspace{2mm}\hspace{2mm}<\\ period\hspace{2mm}\hspace{2mm}\hspace{2mm}.\\ greater\hspace{2mm}\hspace{2mm}\hspace{2mm}>\\ slash\hspace{2mm}\hspace{2mm}\hspace{2mm}/\\ question\hspace{2mm}\hspace{2mm}\hspace{2mm}?\\ rshift\hspace{2mm}\hspace{2mm}\hspace{2mm}press and release right Shift\\ alt\hspace{2mm}\hspace{2mm}\hspace{2mm}press and release Alt\\ space\hspace{2mm}\hspace{2mm}\hspace{2mm}space bar\\ capslock\hspace{2mm}\hspace{2mm}\hspace{2mm}Caps Lock\\ F1\hspace{2mm}\hspace{2mm}\hspace{2mm}F1\\ F2\hspace{2mm}\hspace{2mm}\hspace{2mm}F2\\ F3\hspace{2mm}\hspace{2mm}\hspace{2mm}F3\\ F4\hspace{2mm}\hspace{2mm}\hspace{2mm}F4\\ F5\hspace{2mm}\hspace{2mm}\hspace{2mm}F5\\ F6\hspace{2mm}\hspace{2mm}\hspace{2mm}F6\\ F7\hspace{2mm}\hspace{2mm}\hspace{2mm}F7\\ F8\hspace{2mm}\hspace{2mm}\hspace{2mm}F8\\ F9\hspace{2mm}\hspace{2mm}\hspace{2mm}F9\\ F10\hspace{2mm}\hspace{2mm}\hspace{2mm}F10\\ F11\hspace{2mm}\hspace{2mm}\hspace{2mm}F11\\ F12\hspace{2mm}\hspace{2mm}\hspace{2mm}F12\\ num1\hspace{2mm}\hspace{2mm}\hspace{2mm}1 (numeric keypad)\\ num2\hspace{2mm}\hspace{2mm}\hspace{2mm}2 (numeric keypad)\\ num3\hspace{2mm}\hspace{2mm}\hspace{2mm}3 (numeric keypad)\\ num4\hspace{2mm}\hspace{2mm}\hspace{2mm}4 (numeric keypad)\\ num5\hspace{2mm}\hspace{2mm}\hspace{2mm}5 (numeric keypad)\\ num6\hspace{2mm}\hspace{2mm}\hspace{2mm}6 (numeric keypad)\\ num7\hspace{2mm}\hspace{2mm}\hspace{2mm}7 (numeric keypad)\\ num8\hspace{2mm}\hspace{2mm}\hspace{2mm}8 (numeric keypad)\\ num9\hspace{2mm}\hspace{2mm}\hspace{2mm}9 (numeric keypad)\\ num0\hspace{2mm}\hspace{2mm}\hspace{2mm}0 (numeric keypad)\\ numperiod\hspace{2mm}\hspace{2mm}\hspace{2mm}. (numeric keypad)\\ numend\hspace{2mm}\hspace{2mm}\hspace{2mm}End (numeric keypad)\\ numdown\hspace{2mm}\hspace{2mm}\hspace{2mm}Down (numeric keypad)\\ numpgdown\hspace{2mm}\hspace{2mm}\hspace{2mm}Page Down (numeric keypad)\\ numleft\hspace{2mm}\hspace{2mm}\hspace{2mm}Left (numeric keypad)\\ numcenter\hspace{2mm}\hspace{2mm}\hspace{2mm}5 with Num Lock inactive (numeric keypad)\\ numright\hspace{2mm}\hspace{2mm}\hspace{2mm}Right (numeric keypad)\\ numhome\hspace{2mm}\hspace{2mm}\hspace{2mm}Home (numeric keypad)\\ numup\hspace{2mm}\hspace{2mm}\hspace{2mm}Up (numeric keypad)\\ numpgup\hspace{2mm}\hspace{2mm}\hspace{2mm}Page Up (numeric keypad)\\ numinsert\hspace{2mm}\hspace{2mm}\hspace{2mm}Insert (numeric keypad)\\ numdelete\hspace{2mm}\hspace{2mm}\hspace{2mm}Delete (numeric keypad)\\ numasterisk\hspace{2mm}\hspace{2mm}\hspace{2mm}* (numeric keypad)\\ numminus\hspace{2mm}\hspace{2mm}\hspace{2mm}- (numeric keypad)\\ numplus\hspace{2mm}\hspace{2mm}\hspace{2mm}+ (numeric keypad)\\ numslash\hspace{2mm}\hspace{2mm}\hspace{2mm}/ (numeric keypad)\\ numenter\hspace{2mm}\hspace{2mm}\hspace{2mm}Enter (numeric keypad)\\ delete\hspace{2mm}\hspace{2mm}\hspace{2mm}Delete\\ insert\hspace{2mm}\hspace{2mm}\hspace{2mm}Insert\\ home\hspace{2mm}\hspace{2mm}\hspace{2mm}Home\\ end\hspace{2mm}\hspace{2mm}\hspace{2mm}End\\ pgdown\hspace{2mm}\hspace{2mm}\hspace{2mm}Page Down\\ pgup\hspace{2mm}\hspace{2mm}\hspace{2mm}Page Up\\ down\hspace{2mm}\hspace{2mm}\hspace{2mm}Down\\ up\hspace{2mm}\hspace{2mm}\hspace{2mm}Up\\ left\hspace{2mm}\hspace{2mm}\hspace{2mm}Left\\ right\hspace{2mm}\hspace{2mm}\hspace{2mm}Right\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} set \texttt{[}envvar=value\texttt{]}]{Définis la variable envvar à la valeur spécifiée. Sans argument, affiche les variables d'environnement}
\item[\hspace{1mm} sha1sum]{Alias de hashsum --hash sha1 arg …}
\item[\hspace{1mm} sha256sum]{Alias de hashsum --hash sha256 arg …}
\item[\hspace{1mm} sha512sum]{Alias de hashsum --hash sha512 arg …}
\item[\hspace{1mm} sleep \texttt{[}--verbose\texttt{]} \texttt{[}--interruptible\texttt{]} count]{Attend count seconde. --interruptible permet à ESC d'intérompre. --verbose affiche un décompte.}
\item[\hspace{1mm} source file]{Lit le fichier comme fichier de configuration, et son conteneu est incorporé directement dans le fichier source. À la différence de configfile, exécute le contenu du fichier sans changer le contexte.}
\item[\hspace{1mm} test expression]{Évalue l'expression et retourne un code de sortie. Similaire à la commande test de bash.}
\item[\hspace{1mm} true]{Ne fait rien, retourne true.}
\item[\hspace{1mm} trust \texttt{[}--skip-sig\texttt{]} pubkey\_file]{Lit la clé publique et l'ajoute au jeu de clé de GRUB.}
\item[\hspace{1mm} unset envvar]{Indéfinis la variable d'environnement donnée}
\item[\hspace{1mm} uppermem]{Cette commande n'est pas encore implémentée}
\item[\hspace{1mm} verify\_detached \texttt{[}--skip-sig\texttt{]} file signature\_file \texttt{[}pubkey\_file\texttt{]}]{Vérifie une signature détaché style GPG du fichier donné.}
\item[\hspace{1mm} videoinfo \texttt{[}\texttt{[}WxH\texttt{]}xD\texttt{]}]{Liste les modes vidéo disponibles.}
\item[\hspace{1mm} net\_add\_addr interface card address]{Ajoute une adresse réseau}
\item[\hspace{1mm} net\_add\_dns server]{Ajoute un serveur DNS}
\item[\hspace{1mm} net\_add\_route shortname ip\texttt{[}/prefix\texttt{]} \texttt{[}interface | ‘gw’ gateway\texttt{]}]{Ajoute une route}
\item[\hspace{1mm} net\_bootp \texttt{[}card\texttt{]}]{Effectue une autoconfiguration bootp}
\item[\hspace{1mm} net\_del\_addr interface]{Supprime une adresse IP de l'interface}
\item[\hspace{1mm} net\_del\_dns address]{Supprime un serveur DNS}
\item[\hspace{1mm} net\_del\_route shortname]{Supprime une route}
\item[\hspace{1mm} net\_get\_dhcp\_option var interface number type]{Récupère les options DHCP}
\item[\hspace{1mm} net\_ipv6\_autoconf \texttt{[}card\texttt{]}]{Effectue une autoconfiguration IPv6}
\item[\hspace{1mm} net\_ls\_addr]{Liste les interfaces}
\item[\hspace{1mm} net\_ls\_cards]{Liste les cartes réseaux}
\item[\hspace{1mm} net\_ls\_dns]{Liste les serveurs DNS}
\item[\hspace{1mm} net\_ls\_routes]{Liste les routes}
\item[\hspace{1mm} net\_nslookup name \texttt{[}server\texttt{]}]{Effectue des recherches DNS}
\end{description}
 
\vspace{1cm}{\huge Jeux de caractères }
 
\
 
\hspace{1mm}  GRUB utilise UTF-8 en interne. Tous les fichiers texte, incluant les configuration, sont supposés être encodés en UTF-8.
\vspace{5mm} \\
\hspace{1mm}  GRUB supporte la traduction. Pour cela il faut avoir des fichiers *.mo dans \$prefix/locale, charger le module gettext et définir la variable lang.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Authentification et autorisation }
 
\
 
\hspace{1mm}  Par défaut, l'interface est accessible à tout le monde avec un accès physique à la console: tout le monde peut sélectionner et éditer une entrée du menu, et tout le monde a un accès directe à un prompt shell. Pour la plupart des systèmes, c'est raisonnable vu qu'avec un accès physique il existe d'autres manière d'avoir un accès complet.
\vspace{5mm} \\
 
 
\hspace{1mm}  Cependant, dans certains environnements, tels que les kiosques, il peut être approprié de bloquer le boot loader pour exiger une authentification avant d'effectuer certaines opérations.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les commandes password et password\_pbkdf2 peuvent être utilisées pour définir les utilisateurs, chacun ayant un mot de passe associé. password définis le mot de passe en clair, ce qui exige que grub.cfg soit sécurisé; password\_pbkdf2 définis le password hashé en utilisant la rfc2898, qui nécessite l'utilisation de grub-mkpasswd-pbkdf2 pour générer les hashs.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour activer l'authentification, la variable superusers doit être définis à la liste des nom d'utilisateurs séparés par des espaces, ',', ';' ou '|'. Les superusers sont autorisés à utiliser la ligne de commande, éditer les entrées du menu, et exécuter une entrée du menu.
\vspace{5mm} \\
 
 
\hspace{1mm} Les autres utilisateur peuvent avoir accès aux entrée de menu spécifique en donnant une liste d'utilisateurs en utilisant l'option --users de la commande menuentry. Si l'option --unrestricted est utilisée pour une entrée de menu, cette entrée n'est pas restreinte. Si l'option --users n'est pas utilisée pour une entrée de menu, seul les superusers y ont accès. Exemple:
 
{\ttfamily
set superusers="root"\\ password\_pbkdf2 root grub.pbkdf2.sha512.10000.biglongstring\\ password user1 insecure\\ \hspace{2mm}\\ menuentry "May be run by any user" --unrestricted \{\\ \hspace{2mm}set root=(hd0,1)\\ \hspace{2mm}linux /vmlinuz\\ \}\\ \hspace{2mm}\\ menuentry "Superusers only" --users "" \{\\ \hspace{2mm}set root=(hd0,1)\\ \hspace{2mm}linux /vmlinuz single\\ \}\\ \hspace{2mm}\\ menuentry "May be run by user1 or a superuser" --users user1 \{\\ \hspace{2mm}set root=(hd0,2)\\ \hspace{2mm}chainloader +1\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  Le programme grub-mkconfig n'a pas encore le support pour générer des fichiers de configuration avec l'authentification. Vous pouvez utiliser /etc/grub.d/40\_custom pour ajouter une simple authentification superusers, en ajoutant set superusers= et password ou password\_pbkdf2.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Utiliser des signatures numériques dans GRUB }
 
\
 
\hspace{1mm}  core.img peut optionnellement fournir la vérification de tous les fichiers lus. Ce document ne couvre pas commen s'assurer que le firmware de la plateform (ex: coreboot) valide core.img.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si la variable check\_signatures est à 'enforce', toute tentative de core.img de charger un autre fichier implique d'invoquer verify\_detached foo foo.sig. foo.sig doit contenir une signature valide pour le fichier foo.
\vspace{5mm} \\
 
 
\hspace{1mm} GRUB utilise les signatures détachée type GPG, et supporte actuellement DSA et RSA. Une clé de signature peut être générée en utilisant \\
\hspace{1mm} \textbf{gpg --gen-key} \\
\hspace{1mm} Un fichier peut être signé avec \\
\hspace{1mm} \textbf{gpg --detach-sign /path/to/file} \\
 
\hspace{1mm} Pour une validation complète de tous les sous-composants et le kernel chargé, ils doivent tous être chargés. Cela peut être fait pas grub-mkconfig:
 
{\ttfamily
\# Edit /dev/shm/passphrase.txt to contain your signing key's passphrase\\ for i in `find /boot -name "*.cfg" -or -name "*.lst" -or \textbackslash{}\\ \hspace{2mm}-name "*.mod" -or -name "vmlinuz*" -or -name "initrd*" -or \textbackslash{}\\ \hspace{2mm}-name "grubenv"`;\\ do\\ \hspace{2mm}gpg --batch --detach-sign --passphrase-fd 0 \$i < /dev/shm/passphrase.txt\\ done\\ shred /dev/shm/passphrase.txt\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
