You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
blog/posts/2016/2016-02-11-multiboot-usb.md

112 lines
5.5 KiB
Markdown

5 years ago
<!-- title: Construire sa clef USB multiboot -->
<!-- category: GNU/Linux -->
<!-- tag: planet -->
5 years ago
J'ai essayé quantité d'utilitaires pour créer facilement une clef USB multiboot
et aucun ne fonctionne correctement sur des serveurs racks<!-- more --> (du type Dell
PowerEdge). Ces utilitaires ont en commun d'utiliser syslinux et de proposer
une interface graphique conviviale pour glisser-déposer des ISO sur la clef. Je
ne suis pas (encore) expert en partitionnement et boot mais je m'y intéresse
beaucoup en ce moment par la force des choses et on voit beaucoup de subtilités
pour booter sur du GPT au lieu de MBR. A force de chercher le bon utilitaire,
je suis tombé sur de la doc Archlinux (et oui encore) qui propose de créer
soi-même sa clef avec **GRUB** au lieu de **syslinux**. Cela veut dire qu'on ne
peut démarrer que des GNU/Linux et pas des utilitaires DOS (comme il y en a
quantité pour tester les disques ou la mémoire), c'est parfait, c'est la seule
chose que je fais. Cette documentation ArchLinux [est accessible à cette
adresse](https://wiki.archlinux.org/index.php/Multiboot_USB_drive).
Cet article est donc surtout un mémo pour moi même qui reprend les parties de
cette doc pertinentes pour mon cas d'usage J'ai besoin d'avoir le live CD de
CloneZilla et Knoppix ainsi que le DVD d'installation de CentOS 7 et Debian 8.
Je suis parti d'une clef de 16 Go sur laquelle j'ai une table de partition GPT
et une partition unique formatée en EXT2. J'avais commencé avec une partition en
FAT32 mais on ne peut pas copier un fichier de plus de 2Go. Hors dans notre
cas, on va copier les ISO sur la clef et laisser GRUB les monter pour y
accéder. C'est différent des solutions basées sur syslinux où l'ISO est
désarchivée sur la clef dans un répertoire Bref une ISO DVD d'installation de
CentOS pèse 4 Go donc on formate en EXT.
Voici ma table de partition :
$ fdisk -l /dev/sdf
Disque /dev/sdf : 14,5 GiB, 15504900096 octets, 30283008 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 34793BF6-88B6-4325-98D8-BD79DC297619
Device Start End Sectors Size Type
/dev/sdf1 2048 30282974 30280927 14,4G Linux filesystem
Ensuite, on crée un répertoire pour accueillir GRUB et les ISO :
$ mount /dev/sdf1 /mnt
$ mkdir -p /mnt/boot/iso
Et on installe GRUB :
grub-install --force --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdf
Il reste à copier les ISO dans le répertoire */mnt/boot/iso* et à créer un
fichier *mnt/boot/grub/grub.cfg*. Tout le problème est de configurer correctement
GRUB pour monter chaque type de distribution. Pour certaines, il n'y a pas de
solution pour que ça fonctionne. Le documentation ArchLinux liste la
configuration GRUB pour un certain nombre de distributions.
Voici ma configuration **/mnt/boot/grub/grub.cfg** pour les distributions installées sur ma clef :
# path to the partition holding ISO images (using UUID)
set imgdevpath="/dev/disk/by-uuid/53ac1278-3d48-4528-a348-2eb3b7b8dc93"
# define globally (i.e outside any menuentry)
insmod search_fs_uuid
search --no-floppy --set=isopart --fs-uuid 40c8461c-a5fd-4b3b-9a78-f8e92275ea98
# later use inside each menuentry instead
loopback loop ($isopart)$isofile
menuentry "Live clonezilla-live-2.4.2-61-amd64" {
set isofile="/boot/iso/clonezilla-live-2.4.2-61-amd64.iso"
loopback loop $isofile
linux (loop)/live/vmlinuz findiso=$isofile boot=live union=overlay username=user config
initrd (loop)/live/initrd.img
}
menuentry "Live clonezilla-live-2.2.2-32-i686-pae" {
set isofile="/boot/iso/clonezilla-live-2.2.2-32-i686-pae.iso"
loopback loop $isofile
linux (loop)/live/vmlinuz boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" GRUB_GFXMODE=1024x768 ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile
initrd (loop)/live/initrd.img
}
menuentry "Live Knoppix_v7.6.1DVD-2016-01-16-EN" {
set isofile="/boot/iso/KNOPPIX_V7.6.1DVD-2016-01-16-EN.iso"
loopback loop $isofile
linux (loop)/boot/isolinux/linux bootfrom=/mnt-iso/$isofile acpi=off keyboard=fr lang=fr
initrd (loop)/boot/isolinux/minirt.gz
}
menuentry "Install CentOS-7-x86_64-DVD-1511" {
set isofile="/boot/iso/CentOS-7-x86_64-DVD-1511.iso"
loopback loop $isofile
linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:UUID=53ac1278-3d48-4528-a348-2eb3b7b8dc93:/$isofile
initrd (loop)/isolinux/initrd.img
}
menuentry 'Install Debian-8.3.0-amd64-firmware' {
set isofile='/boot/iso/firmware-8.3.0-amd64-netinst.iso'
set initrdfile='/boot/iso/debian-8.3.0-am64-initrd.gz'
loopback loop $isofile
linux (loop)/install.amd/vmlinuz vga=791 iso-scan/ask_second_pass=true iso-scan/filename=$isofile
initrd $initrdfile
}
Pour trouver l'identifiant UUID de la clef qu'on claque dans la variable
*imgdevpath* en début de config et qu'on passe à *inst.stage2* dans la section
CentOS ou l'identifiant de la partition *fs-uuid* qu'on passe à la commande search,
on utilise la commande **blkid** :
blkid /dev/sdf1: UUID="53ac1278-3d48-4528-a348-2eb3b7b8dc93" TYPE="ext2" PARTUUID="40c8461c-a5fd-4b3b-9a78-f8e92275ea98"