Mardi 10 mars 2020

Multiboot USB

Utilisation Git

Si Git est installé sur le système, nous pouvons obtenir les fichiers directement à partir du référentiel:

cd ~
git clone git://github.com/aguslr/multibootusb.git

Chaque fois que nous voulons mettre à jour les fichiers :

cd multibootusb && git pull

Sans Git

Si Git n’est pas installé, nous pouvons toujours obtenir les fichiers :

wget https://github.com/aguslr/multibootusb/tarball/master -O - | tar -xzv --strip-components 1 --exclude={README.md,demo.gif}

Utilisation du script

Il suffit de l’exécuter en tant que root:

./makeUSB.sh <device>

<device> est le nom du périphérique USB (par exemple /dev/sd).
Exécutez mount pour obtenir cette information. Autre possibilité , juste après avoir inséré la clé USB , exécuter dmesg dans une fenêtre terminal :

[ 2541.013465] sd 4:0:0:0: [sde] Attached SCSI removable disk

Dans notre exemple la clé est sous /dev/sdd

** AVERTISSEMENT **: Cela efface toutes les données du périphérique, alors assurez-vous de choisir le bon.

Ce sont les options pour le script:

Script to prepare multiboot USB drive
Usage: makeUSB.sh [options] device [fs-type]

 device                         Device to modify (e.g. /dev/sdb)
 fs-type                        Filesystem type for the data partition [ext3|ext4|vfat|ntfs]
  -e,  --efi                    Enable EFI compatibility
  -i,  --interactive            Launch gdisk to create a hybrid MBR
  -l,  --log                    Save debug information to log
  -h,  --help                   Display this message

Création “manuelle”

Clé USB universelle bootable MBR et UEFI

Hybrid UEFI GPT + BIOS GPT/MBR boot(archlinux wiki)

Cette configuration est utile pour créer une clé USB universelle, bootable partout. Tout d’abord, vous devez créer une table de partitions GPT sur votre périphérique. Vous avez besoin d’au moins 3 partitions:

  • Une partition d’amorçage BIOS (type EF02) qui doit doit avoir une taille de 1 Mo
  • Une partition système EFI (type EF00 avec un système de fichiers FAT32) au minimum 50 Mo
  • Votre partition de données (utilisez un système de fichiers pris en charge par GRUB) peut prendre le reste de l’espace de votre lecteur

Ensuite, vous devez créer une table de partition hybride MBR, car définir l’indicateur de démarrage sur la partition de protection MBR peut ne pas être suffisant.

Mode su

sudo -s

Identifier la clé USB par dmesg (exemple /dev/sdd

dmesg
    [25430.573773] sd 4:0:0:0: [sde] Attached SCSI removable disk

La clé est sur /dev/sdd

On va initialiser la clé USB

gdisk /dev/sdd
GPT fdisk (gdisk) version 1.0.4

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): x

Expert command (? for help): z
About to wipe out GPT on /dev/sdd. Proceed? (Y/N): Y
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Blank out MBR? (Y/N): Y

Lancer gdisk pour préparer la clé USB

gdisk /dev/sdd
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-30282974, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-30282974, default = 30282974) or {+-}size{KMGTP}: +1M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF02
Changed type of partition to 'BIOS boot partition'

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-30282974, default = 4096) or {+-}size{KMGTP}: 
Last sector (4096-30282974, default = 30282974) or {+-}size{KMGTP}: +50M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'

Command (? for help): n
Partition number (3-128, default 3): 
First sector (34-30282974, default = 106496) or {+-}size{KMGTP}: 
Last sector (106496-30282974, default = 30282974) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700
Changed type of partition to 'Microsoft basic data'

Command (? for help): r

Recovery/transformation command (? for help): h     # h --> make hybrid MBR

WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
just hit the Enter key at the below prompt and your MBR partition table will
be untouched.

Type from one to three GPT partition numbers, separated by spaces, to be
added to the hybrid MBR, in sequence: 1 2 3
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N

Creating entry for GPT partition #1 (MBR partition #1)
Enter an MBR hex code (default EF):  
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #3 (MBR partition #3)
Enter an MBR hex code (default 07): 
Set the bootable flag? (Y/N): Y

Recovery/transformation command (? for help): x  # x --> extra functionality (experts only)

Expert command (? for help): h                   # h --> recompute CHS values in protective/hybrid MBR

Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdd.
The operation has completed successfully.

Systèmes de fichier ,montage ,grub

Systèmes de fichier

pacman -S dosfstools            # pour les systèmes de fichier vfat
mkfs.vfat -F 32 /dev/sdd2       # FAT32 pour EFI
mkfs.vfat -F 32 /dev/sdd3       # FAT32 partition principale

Tout d’abord, vous devez monter la partition EFI System (Ex: /mnt/multiboot/efi) et la partition de données (Ex: /mnt/multiboot/data) de votre clé USB (EX: /dev/sdd).

montage

mkdir -p /mnt/multiboot/efi
mount /dev/sdd3 /mnt/multiboot
mount /dev/sdd2 /mnt/multiboot/efi

grub
Vous pouvez maintenant installer GRUB pour prendre en charge EFI + GPT et BIOS + GPT/MBR. La configuration GRUB (–boot-directory) peut être conservée au même endroit.
Installation GRUB pour EFI

grub-install --target=x86_64-efi --efi-directory=/mnt/multiboot/efi --boot-directory=/mnt/multiboot/boot --removable --recheck /dev/sdd

Installation GRUB pour BIOS

grub-install --target=i386-pc --boot-directory=/mnt/multiboot/boot --recheck /dev/sdd

La partition de données est montée sur /mnt/multiboot et le dossier multiboot media/dplus/iso/multibootusb/
Copiez les fichiers GRUB nécessaires:

# répertoire nommé *boot* pour stocker les fichiers de configuration de GRUB, un répertoire nommé *krnl* pour les fichiers du noyau et un autre nommé *isos* pour les fichiers ISO
mkdir -p /mnt/multiboot/boot/{grub,bin,krnl,isos}
mkdir -p /mnt/multiboot/boot/grub/grub.d
# Copie des fichiers GRUB
cp -rf media/dplus/iso/multibootusb/mbusb.d /mnt/multiboot/boot/grub/

Le fichier grub.cfg

nano /mnt/multiboot/boot/grub/grub.cfg
# Config for GNU GRand Unified Bootloader (GRUB)

insmod font
if loadfont unicode ; then
  if keystatus --shift ; then true ; else
    if [ x"${grub_platform}" = xefi ]; then
      insmod efi_gop
      insmod efi_uga
      insmod videotest
      insmod videoinfo
    else
      insmod vbe
      insmod vga
    fi
    insmod gfxterm
    insmod gfxmenu
    set gfxmode=auto
    set gfxpayload=auto
    terminal_output gfxterm
    if terminal_output gfxterm ; then true ; else
      terminal gfxterm
    fi
  fi
fi

# Timeout for menu
set timeout=30

# Load custom GRUB configuration
if [ -e "$prefix/grub.cfg.local" ]; then
  source "$prefix/grub.cfg.local"
fi

# Load MBUSB configuration
if [ -e "$prefix/mbusb.cfg" ]; then
  source "$prefix/mbusb.cfg"
fi

# Grub options
submenu "GRUB2 options ->" {
  menuentry "List devices/partitions" {
    ls -l
    sleep --interruptible 9999
  }

  menuentry "Enable GRUB2's LVM support" {
    insmod lvm
  }

  menuentry "Enable GRUB2's RAID support" {
    insmod dm_nv
    insmod mdraid09_be
    insmod mdraid09
    insmod mdraid1x
    insmod raid5rec
    insmod raid6rec
  }

  menuentry "Enable GRUB2's PATA support (to work around BIOS bugs/limitations)" {
    insmod ata
    update_paths
  }

  menuentry "Enable GRUB2's USB support *experimental*" {
    insmod ohci
    insmod uhci
    insmod usbms
    update_paths
  }

  menuentry "Mount encrypted volumes (LUKS and geli)" {
    insmod luks
    insmod geli
    cryptomount -a
  }

  menuentry "Enable serial terminal" {
    serial
    terminal_input --append serial
    terminal_output --append serial
  }
}

# Reboot
menuentry "Reboot" {
  reboot
}
# Poweroff
menuentry "Poweroff" {
  halt
}

Copie des fichiers ISO sur le lecteur USB

Le fichier concernant les OS mbusb.cfg

nano /mnt/multiboot/boot/grub/mbusb.cfg
# Partition holding files
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
export imgdevpath rootuuid

# Custom variables
set isopath="/boot/isos"
export isopath

# Load modules
insmod regexp
insmod all_video

# MultiBoot USB menu
submenu "Multiboot ->" {
  # Warning for 32-bit systems
  if ! cpuid -l; then
    clear
    echo "This is a 32-bit computer."
    echo "You won't get to use 64-bit software on it."
    echo
    echo -n "To continue, press ESC or wait 10 seconds... "
    sleep --interruptible 10
    echo
    echo
  fi

  # Load custom configuration
  if [ -e "$prefix/mbusb.cfg.local" ]; then
    source "$prefix/mbusb.cfg.local"
  fi

  # Load configuration files
  echo -n "Loading configuration files... "
  for cfgfile in $prefix/mbusb.d/*.d/*.cfg; do
    source "$cfgfile"
  done
}

Dossiers de la clé multiboot

Téléchargez et copiez les fichiers ISO dans le dossier /mnt/multiboot/boot/isos/ du lecteur USB

Clé

dmesg
[   18.805942]  sdd: sdd1 sdd2 sdd3
[   18.808951] sd 4:0:0:0: [sdd] Attached SCSI removable disk

Montage de la clé

sudo -s
mkdir -p /mnt/multiboot
mount /dev/sdd3 /mnt/multiboot

Structure des configurations OS

tree -L 2 /mnt/multiboot/boot/grub/mbusb.d/
/mnt/multiboot/boot/grub/mbusb.d/
├── archlinux.d
│   └── generic64.cfg
├── debian.d
│   └── netboot-generic.cfg.ERR
├── kali.d
│   └── generic.cfg
├── manjaro.d
│   └── generic.cfg
└── pmagic.d
    └── generic.cfg

Manjaro

Modifier la configuration pour prise en charge langue FR par défaut

sed -i 's/quiet splash/lang=fr_FR keytable=fr quiet splash/g' /mnt/multiboot/boot/grub/mbusb.d/manjaro.d/generic.cfg

Le fichier iso

rsync -h --progress  media/dplus/iso/manjaro/manjaro-xfce-18.1.3-191114-linux53.iso /mnt/multiboot/boot/isos/ && sync

Archlinux

Le fichier iso

rsync -h --progress  media/dplus/iso/archlinux/archlinux-2020.02.01-x86_64.iso  /mnt/multiboot/boot/isos/ && sync

Kali

Modifier la configuration pour prise en charge langue FR par défaut

sed -i 's/hostname=kali/hostname=kali lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105/g' /mnt/multiboot/boot/grub/mbusb.d/kali.d/generic.cfg

Le fichier iso

rsync -h --progress  media/dplus/iso/kali-linux-2019-2-amd64-iso/kali-linux-2019.2-amd64.iso /mnt/multiboot/boot/isos/ && sync

Partition magic

Montage fichier iso sur tmp

mkdir -p tmp
sudo mount -o loop -t iso9660 pmagic_2019_12_24.iso tmp/

Copie du répertoire pmagic sur la racine de la clé USB

sudo cp -r tmp/pmagic/ /mnt/multiboot/ && sync
sudo umount tmp

Remplacer le fichier /mnt/multiboot/boot/grub/mbusb.d/pmagic.d/generic.cfg

submenu "Pmagic..." {
 set default_settings="edd=on keymap=fr-latin1 fr_FR"
 set live_settings="boot=live eject=no"
 set linux_64="/pmagic/bzImage64"
 set linux_32="/pmagic/bzImage"
 set initrd_img="/pmagic/initrd.img /pmagic/fu.img /pmagic/m64.img"
 set initrd_img32="/pmagic/initrd.img /pmagic/fu.img /pmagic/m32.img"
 set message="Chargement kernel et initramfs. Patienter SVP..."

 menuentry "Pmagic - Default settings 64 (Runs from RAM)"{
	echo $message
	search --set -f $linux_64
	linux $linux_64 $default_settings
	initrd $initrd_img
 }

 menuentry "Pmagic - Default settings 32 (Runs from RAM)"{
	search --set -f $linux_32
	linux $linux_32 $default_settings
	initrd $initrd_img32
 }

 menuentry "Pmagic - Live with default settings 64"{
	echo $message
	search --set -f $linux_64
	linux $linux_64 $default_settings $live_settings
	initrd $initrd_img
 }
 menuentry "Pmagic - Live with default settings 32"{
	search --set -f $linux_32
	linux $linux_32 $default_settings $live_settings
	initrd $initrd_img32
 }

 menuentry "Pmagic - Clonezilla 64"{
	echo $message
	search --set -f $linux_64
	linux $linux_64 $default_settings clonezilla=yes
	initrd $initrd_img
 }
 menuentry "Pmagic - Clonezilla 32"{
	search --set -f $linux_32
	linux $linux_32 $default_settings clonezilla=yes
	initrd $initrd_img32
 }
}

Les fichiers ISO présents

tree /mnt/multiboot/boot/isos/
/mnt/multiboot/boot/isos/
├── archlinux-2020.02.01-x86_64.iso
├── kali-linux-2019.2-amd64.iso
└── manjaro-xfce-18.1.3-191114-linux53.iso

Structure globale de la clé multiboot

tree -L 3 /mnt/multiboot/
/mnt/multiboot/
├── boot
│   ├── bin
│   ├── grub
│   │   ├── fonts
│   │   ├── grub.cfg
│   │   ├── grub.d
│   │   ├── grubenv
│   │   ├── i386-pc
│   │   ├── mbusb.cfg
│   │   ├── mbusb.d
│   │   ├── themes
│   │   └── x86_64-efi
│   ├── isos
│   │   ├── archlinux-2020.02.01-x86_64.iso
│   │   ├── kali-linux-2019.2-amd64.iso
│   │   └── manjaro-xfce-18.1.3-191114-linux53.iso
│   └── krnl
├── efi
└── pmagic
    ├── bzImage
    ├── bzImage64
    ├── fu.img
    ├── initrd.img
    ├── m32.img
    ├── m64.img
    └── pmodules
        ├── PMAGIC_2018_04_30.SQFS
        └── scripts

Debian (PROBLEME BOOT , NON RECONNAISSANCE USB)

PROBLEME Debian netinst…Clé USB Multibootable Debian
initrd pour hd-media
Il faut télécharger une petite archive pour que le mode install se déroule sans encombre : initrd.gz
L’initrd est une image du RAM-disque initiale (un disque virtuel RAM configuré pour le démarrage de Linux, contenant possiblement des modules nécessaires pour monter l’image du système et certains scripts pour le faire).

Or l’initrd.gz se trouvant dans les iso de Debian ne convient pas pour une clé USB, elle est faite pour les supports optiques (CD/DVD). L’iso ne sera pas détecté durant l’installation, excepté si elle a été placé dans la clé à l’aide de la commande dd ou cp mais nn veut mettre plusieurs iso sur une même clé USB…

Il faut utiliser des iso hybrides ou des images hdd , les télécharger dans le dossier initrd de la clé USB

sudo -s
mkdir -p /mnt/multiboot/initrd # création dossier initrd
wget -O /mnt/multiboot/initrd/initrd-i386.gz https://mirrors.kernel.org/debian/dists/stable/main/installer-i386/current/images/hd-media/initrd.gz # Pour les iso i386   
wget -O /mnt/multiboot/initrd/initrd-amd64.gz https://mirrors.kernel.org/debian/dists/stable/main/installer-amd64/current/images/hd-media/initrd.gz #Pour les iso amd64

Remplacer le fichier /mnt/multiboot/boot/grub/mbusb.d/debian.d/netboot-generic.cfg

for isofile in $isopath/debian-*netinst.iso; do
  if [ -e "$isofile" ]; then
      menuentry "Debian Buster 64 (mode expert)" {
	set isofile=$isofile
	loopback loop $isofile
	linux (loop)/install.amd/vmlinuz config fromiso=/dev/sdb1/$isofile lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 priority=medium
	initrd '/initrd/initrd-amd64.gz'
      }
    }
  fi
done

Modifier le fichier de configuration /mnt/multiboot/boot/grub/mbusb.d/debian.d/netboot-generic.cfg

submenu "Debian..." {
 menuentry "Debian Stretch 32 (mode expert)" {
	set isofile='/boot/isos/debian-9.6.0-i386-netinst.iso'
	loopback loop $isofile
	linux (loop)/install.i386/vmlinuz config fromiso=/dev/sdb1/$isofile lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 priority=medium
	initrd '/initrd/initrd-i386.gz'
 }

 menuentry "Debian Stretch 64 + firmware (mode expert)" {
	set isofile='/boot/isos/debian-9.8.0-amd64-firmware-netinst.iso'
	loopback loop $isofile
	linux (loop)/install.amd/vmlinuz config fromiso=/dev/sdb1/$isofile lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 priority=medium
	initrd '/initrd/initrd-amd64.gz'
 }
 menuentry "Debian Stretch 64 (mode expert)" {
	set isofile='/boot/isos/debian-9.8.0-amd64-netinst.iso'
	loopback loop $isofile
	linux (loop)/install.amd/vmlinuz config fromiso=/dev/sdb1/$isofile lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 priority=medium
	initrd '/initrd/initrd-amd64.gz'
 }
}

Démarrez n’importe quelle ISO avec MEMDISK (facultatif)

[Using Syslinux’s MEMDISK][usingmemdisk], , un fichier ISO peut être chargé directement en mémoire (si le système en a assez), ce qui permettra de démarrer certaines images ISO non prises en charge.

Pour obtenir le fichier binaire de MEMDISK, vous pouvez installer syslinux à l’aide du gestionnaire de paquets de votre système et le trouver dans /usr/lib/syslinux/memdisk ou /usr/lib/syslinux/bios/memdisk, suivant votre distribution.

sudo pacman -S syslinux # le fichier /usr/lib64/syslinux/bios/memdisk

Alternativement, vous pouvez télécharger l’archive officielle depuis kernel.org, dans ce cas, vous trouverez le binaire /bios/memdisk/memdisk.

Une fois que vous avez le fichier, il suffit de le copier dans votre partition de données:

cp -f /usr/lib64/syslinux/bios/memdisk /mnt/multiboot/boot/grub/

Démontage

sudo umount /mnt/multiboot
sudo umount /mnt/multiboot/efi

Test de lecteur USB avec QEMU

Pour tester le lecteur USB nouvellement créé dans un environnement virtuel, exécutez:

sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 2G -vga std -hda /dev/sdd

Remplacer /dev/sdd par le nom du périphérique USB (par exemple. /dev/sdb,/dev/sdc,etc…).
Exécutez mount pour obtenir cette information.

Obtenir des fichiers amorçables ISO

Vous pouvez télécharger des fichiers ISO à partir de ces sites ,dans le dossier <mountpoint>/boot/isos:

  • Antergos:un système d’exploitation moderne, élégant et puissant basé sur une des meilleures distributions Linux disponibles, Arch Linux.
  • Arch Linux: une distribution légère et flexible de Linux® qui tente de rester simple.
  • AVG Rescue CD:un outil pour réparer les pannes du système et permettre à vos systèmes de fonctionner à pleine capacité.
  • BackBox: une distribution basée sur Ubuntu développée pour effectuer des tests de pénétration et des évaluations de sécurité.
  • CentOS: un effort de logiciel libre axé sur la communauté visant à fournir un écosystème open source robuste.
  • Clonezilla Live: une petite distribution GNU/Linux pour le “clonage” des ordinateurs x86/amd64 (x86-64).
  • Debian: un système d’exploitation gratuit (OS) pour votre ordinateur.
  • elementary OS: un remplacement rapide et ouvert pour Windows et OS X.
  • Fedora: un système d’exploitation poli et facile à utiliser.
  • Gentoo Linux: une distribution Linux souple et basée sur les sources.
  • GParted Live: outil de partitionnement sur une distribution GNU/Linux.
  • Grml Live Linux: un système live bootable basé sur Debian qui comprend une collection de logiciels GNU/Linux spécialement pour les administrateurs système.
  • Hiren’s BootCD: une trousse de premiers soins pour votre ordinateur.
  • Kali Linux: une distribution Linux dérivée de Debian conçue pour le forensic numérique et les tests de pénétration.
  • Linux Mint: une distribution basée sur Ubuntu dont le but est de fournir une expérience complète en incluant des plugins de navigateur, des codecs multimédia, la prise en charge de la lecture de DVD, Java et autres Composants.
  • Manjaro Linux: une distribution Linux conviviale basée sur le système d’exploitation Arch développé indépendamment.
  • openSUSE: un projet et une distribution Linux sponsorisés par SUSE Linux GmbH et d’autres sociétés.
  • Parabola GNU/Linux-libre: un effort communautaire pour fournir un système d’exploitation entièrement libre simple et léger.
  • Parted Magic: une solution complète de gestion des disques durs et plus encore.
  • Slax Linux: un système d’exploitation Linux moderne, portable, petit et rapide avec une approche modulaire et un design exceptionnel.
  • SliTaz: un système d’exploitation sécurisé et performant utilisant le noyau Linux et le logiciel GNU.
  • SystemRescueCd: une solution de secours de système Linux pour administrer ou réparer votre système et vos données après une panne.
  • Tails: un système d’exploitation en direct, qui vise à préserver votre vie privée et l’anonymat.
  • Trisquel GNU/Linux: un système d’exploitation entièrement gratuit pour les particuliers, les petites entreprises et les centres éducatifs.
  • Ubuntu: une plateforme logicielle open source qui va du cloud, au smartphone.
  • Void: un système d’exploitation à usage général, basé sur le noyau Linux® monolithique.

Vous pouvez obtenir des noyaux iPXE à partir de ces sites Web (sauvegardez sur <mountpoint>/boot/krnl):

  • boot.rackspace.com: une collection de scripts iPXE qui vous permettent de rapidement redémarrer les systèmes d’exploitation, les utilitaires et d’autres outils très facilement.
  • netboot.xyz: un moyen de sélectionner les différents installateurs ou utilitaires du système d’exploitation à partir d’un emplacement dans le BIOS sans avoir besoin d’aller chercher le support pour exécuter l’outil.

Demo

Demo GIF

Références