Recherche de site Web

Comment créer une clé USB multiboot avec Linux


Objectif

Créez un périphérique USB amorçable contenant plusieurs distributions Linux.

Exigences

  • Un périphérique USB de taille suffisante pour contenir plusieurs isos
  • Permissions root pour modifier les partitions de l’appareil et installer grub

Difficulté

DOULEUR MOYENNE

Introduction

Pouvoir faire fonctionner un système d’exploitation entier directement à partir d’un support d’installation est extrêmement utile : nous pouvons tester une distribution, l’utiliser à des fins de sauvegarde, ou peut-être pour réparer un système existant. La façon habituelle de créer un support amorçable est d’y écrire une image système à l’aide de la commande dd ou d’un outil dédié. Dans ce tutoriel, nous allons voir comment créer un périphérique USB multiboot qui peut héberger plusieurs images de distributions.

Un mot sur le BIOS vs UEFI

UEFI (Unified Extensible Firmware Interface) : c’est le firmware moderne créé en remplacement de l’ancien BIOS (Basic Input Output System). La majorité des distributions Linux récentes peuvent démarrer dans les deux modes sans problème : l’installateur ajustera automatiquement son comportement en conséquence.

Les deux firmwares sont, par standard, associés à une disposition spécifique de la table de partition : UEFI va de pair avec gpt, tandis que le BIOS est livré avec celui msdos. Ces associations, cependant, ne sont pas strictement obligatoires, puisque, du moins en théorie, un micrologiciel UEFI peut démarrer le processus de démarrage à partir d’une disposition de disque msdos et un système BIOS hérité peut faire de même à partir d’un disque partitionné gpt.

Dans le premier cas, la partition EFI doit être la première sur le disque, et être formatée avec le fileystem fat32, dans le second, il devrait exister une partition de démarrage du bios sans aucun système de fichiers, nécessaire pour stocker l’étape grub 1.5, car sur une disposition gpt, l’espace entre l’enregistrement de démarrage principal et la première partition n’existe pas (c’est là que cette étape grub est généralement installée).

Nous préparerons notre appareil à l’aide d’une disposition msdos traditionnelle, en installant le chargeur de démarrage grub à la fois en mode efi et en mode hérité pour pouvoir démarrer les distributions à la fois en mode UEFI et en mode BIOS.

Préparation de l’appareil

La première chose que nous devons faire est de préparer notre appareil. Nous allons créer deux partitions, dans l’ordre :

  • Une partition EFI
  • Une partition de données

Le premier est nécessaire pour démarrer en mode UEFI, car c’est là que grub-efi est installé. La partition doit être formatée avec un système de fichiers fat32. Théoriquement, la configuration fonctionnerait même avec cette partition, puisque nous pourrions également l’utiliser pour stocker les images de distributions que nous voulons utiliser. Cependant, dans ce cas, nous serions limités, car fat32 ne prend pas en charge les fichiers de plus de 4 Go, et certains iso peuvent dépasser cette taille.

La deuxième partition sera formatée avec un système de fichiers supporté par grub, et hébergera les images et les fichiers de configuration grub.

Pour les besoins de ce tutoriel, je vais supposer que le périphérique que nous voulons préparer est /dev/sdb.

La table de partition et la partition EFI

La première chose à faire est de créer une table de partition msdos sur l’appareil :

sudo parted -s /dev/sdb mklabel msdos

Après cette étape, nous pouvons créer la partition EFI et la formater avec un système de fichiers fat32. La taille recommandée pour la partition est de 550 Mio : sur les partitions plus petites, nous pourrions recevoir une erreur telle que « pas assez de clusters pour le FAT 32 bits » :

sudo parted -s /dev/sdb mkpart primary 1MiB 551MiB

Nous procéderons ensuite à l’activation des drapeaux esp et boot :

sudo parted -s /dev/sdb set 1 esp on
sudo parted -s /dev/sdb set 1 boot on

Enfin, nous devons créer le système de fichiers fat32 :

sudo mkfs.fat -F32 /dev/sdb1

La partition des données

L’autre partition que nous devons créer est la partition de données, qui hébergera les images ISO des distributions et les fichiers de configuration grub. Nous pouvons ajuster la taille de la partition à nos besoins : plus elle est grande, plus elle pourra contenir d’images. Ici, nous allons utiliser tout l’espace restant sur l’appareil :

sudo parted -s /dev/sdb mkpart primary 551MiB 100%

Nous pouvons formater la partition avec l’un des systèmes de fichiers pris en charge par grub. Dans ce cas, j’utiliserai ext4 :

sudo mkfs.ext4 /dev/sdb2

Création des points de montage et montage des partitions

L’étape suivante consiste à monter la partition EFI et la partition de données quelque part dans notre système afin que nous puissions y créer les répertoires nécessaires, installer grub et mettre en place nos fichiers iso :

Create the mountpoints
sudo mkdir /media/{efi,data}

Mount the EFI partition
sudo mount /dev/sdb1 /media/efi

Mount the data partition
sudo mount /dev/sdb2 /media/data

Installation du chargeur d’amorçage grub

Pour que notre appareil puisse fonctionner à la fois en mode hérité et en mode UEFI, nous devons installer grub et grub pour efi. Sur Fedora, le binaire grub s’appelle grub2 et pour générer une configuration personnalisée sur une configuration UEFI, l’installation du paquet grub2-efi-modules est également nécessaire. Sur d’autres distributions, le nom du binaire est simplement « grub » :

Installing legacy grub2
sudo grub2-install \
  --target=i386-pc \
  --recheck \
  --boot-directory="/media/data/boot" /dev/sdb

Installing grub for efi
sudo grub2-install \
  --target=x86_64-efi \
  --recheck \
  --removable \
  --efi-directory="/media/efi" \
  --boot-directory="/media/data/boot"

Comme vous pouvez l’observer, dans les deux cas, nous avons utilisé /media/data/boot comme répertoire d’amorçage grub. Ce répertoire sera automatiquement créé lorsque les commandes ci-dessus seront lancées, et il hébergera les fichiers de configuration grub.

Copiez les images et créez le fichier grub.cfg

Pour créer ou mettre à jour une configuration grub sur un système Linux moderne, nous exécutons généralement la commande grub2-mkconfig, ou, dans les distributions basées sur debian, le script wrapper update-grub. Ces outils effectuent automatiquement les opérations nécessaires.

Dans notre cas, cependant, nous devons mettre les mains dans le cambouis et créer la configuration manuellement. Toutes les distributions n’ont pas besoin des mêmes directives, mais nous allons voir ici quelques exemples courants. Tout d’abord, nous devons créer le répertoire qui hébergera les images de nos distributions :

sudo mkdir /media/data/boot/iso

Optionnellement, nous pouvons vouloir nous approprier ce répertoire, pour pouvoir déplacer des images dessus plus facilement. En supposant un id et un gid de 1000, nous exécuterions :

sudo chown 1000:1000 /media/data/boot/iso

Maintenant, supposons que nous voulions inclure la dernière image netinstall de Fedora dans notre configuration. Tout d’abord, nous devons télécharger l’image dans le répertoire /media/data/iso :

wget -O /media/data/boot/iso/Fedora-Workstation-netinst-x86_64-28-1.1.iso \
https://download.fedoraproject.org/pub/fedora/linux/releases/28/Workstation/x86_64/iso/Fedora-Workstation-netinst-x86_64-28-1.1.iso

Ensuite, une fois le téléchargement terminé, nous devons ajouter une entrée pour celui-ci dans le fichier grub.cfg dans le répertoire /media/data/boot/grub2. Comme il s’agit de la première entrée que nous ajoutons, le fichier lui-même doit être créé :

menuentry "Fedora-Workstation-netinst-x86_64-28-1.1" {
    isofile="/boot/iso/Fedora-Workstation-netinst-x86_64-28-1.1.iso"
    loopback loop "${isofile}"
    linux (loop)/isolinux/vmlinuz iso-scan/filename="${isofile}" inst.stage2=hd:LABEL=Fedora-WS-dvd-x86_64-28 quiet
    initrd (loop)/isolinux/initrd.img
}

La structure d’entrée est assez simple : nous avons défini la variable isofile, avec le chemin d’accès à notre image comme valeur. Grub est capable de démarrer à partir d’une commande iso directe, et c’est à cela que sert la commande loopback : dans l’exemple ci-dessus, l’image du système de fichiers sera montée et rendue disponible sur le périphérique de boucle.

La ligne commençant par linux contient le chemin d’accès à vmlinuz, qui est l’exécutable du noyau, ainsi que d’autres directives de démarrage. Parmi eux, vous pouvez remarquer iso-scan/filename qui est nécessaire pour trouver l’image iso sur le disque en utilisant le chemin spécifié.

Enfin, la ligne commençant par initrd spécifie le chemin d’accès à l’initrd. Tous ces chemins sont, évidemment, relatifs au dispositif de boucle, c’est pourquoi ils sont préfixés par la notation (de boucle).

Comment savons-nous quelles directives nous devrions utiliser dans un cas spécifique ? Une façon est de monter l’image quelque part dans notre système et de jeter un coup d’œil aux fichiers placés dans le répertoire isolinux. Cependant, la configuration pré-écrite existe déjà et est facile à trouver en ligne.

Autre exemple, maintenant : nous allons ajouter la dernière image de la version d’Ubuntu à notre appareil amorçable :

wget http://releases.ubuntu.com/18.10/ubuntu-18.10-desktop-amd64.iso?_ga=2.232120863.1006005768.1540658570-734439277.1540658570 \
-O /media/data/boot/iso/ubuntu-18.10-desktop-amd64.iso

Maintenant, nous ajoutons l’entrée au fichier de configuration :

menuentry "Ubuntu 18.10 - Try without installing" {
    isofile="/boot/iso/ubuntu-18.10-desktop-amd64.iso"
    loopback loop "${isofile}"
    linux (loop)/casper/vmlinuz iso-scan/filename="${isofile}" boot=casper quiet splash ---
    initrd (loop)/casper/initrd
}

Voici à quoi devrait ressembler notre menu multiboot à ce stade :

Menu Grub Multiboot

Réflexions finales

Dans ce tutoriel, nous avons vu comment créer un périphérique multiboot-usb contenant de nombreuses images de distributions. Suite à cette configuration, nous pourrons démarrer à la fois sur l’héritage du firmware UEFI, en choisissant l’image à lancer dans le menu grub.

La configuration
grub.cfg présentée ici est absolument minimale, et peut être davantage personnalisée pour inclure de nombreux autres modules et ajuster d’autres paramètres comme le délai d’expiration de grub : consulter la documentation officielle de grub est le moyen idéal pour commencer à explorer les nombreuses possibilités.

Articles connexes: