Clé autonome rEFInd

Mise à jour : Debian 10.0

L'objectif est de disposer d'une clé USB autonome, amorçable sur un système UEFI, donnant accès

La clé utilise le Gestionnaire d'amorçage rEfind :

Références :

Sommaire

1 - Principe

L'installation de refind sur une clé usb s'effectue en deux temps

2 - Création

2.1 - Préparation de la clé

$ sudo dd if=/dev/zero of=/dev/sdb count=500MB bs=1 && sync
$ sudo parted /dev/sdb mklabel gpt
$ sudo parted /dev/sdb mkpart primary fat32 1 551
$ sudo parted /dev/sdb set 1 boot on
$ sudo parted /dev/sdb name 1 ESP
$ sudo mkfs.fat -F32 /dev/sdb1
mkfs.fat 4.1 (2017-01-24)
$ sudo parted /dev/sdb print
Model: VendorCo ProductCode (scsi)
Disk /dev/sdb: 15,9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 551MB 549MB fat32 ESP boot, esp

2.2 - Installation de refind

$ sudo aptitude install refind
$ aptitude versions refind
i 0.11.3-1 stable,testing 500

Au cours du dépaquetage refuser l'installation sur le système

$ sudo refind-install --usedefault /dev/sdb1 --alldrivers
ShimSource is none
Installing rEFInd on Linux....
Note: IA32 (x86) binary not installed!
Copied rEFInd binary files

Copying sample configuration file as refind.conf; edit this file to configure
rEFInd.
$ sudo mount /dev/sdb1 /mnt
$ tree /mnt
/mnt
└── EFI
└── BOOT
├── BOOT.CSV
├── bootx64.efi
├── drivers_x64
│ ├── btrfs_x64.efi
│ ├── ext2_x64.efi
│ ├── ext4_x64.efi
│ ├── hfs_x64.efi
│ ├── iso9660_x64.efi
│ ├── ntfs_x64.efi
│ └── reiserfs_x64.efi
├── icons
│ ├── arrow_left.png
│ ├── arrow_right.png
│ ├── boot_linux.png

│ ├── os_refind.png
│ ├── os_refit.png
│ ├── os_slackware.png

├── keys
│ ├── altlinux.cer
│ ├── canonical-uefi-ca.der
│ ├── centos.cer
│ ├── fedora-ca.cer
│ ├── microsoft-kekca-public.der
│ ├── microsoft-pca-public.der
│ ├── microsoft-uefica-public.der
│ ├── openSUSE-UEFI-CA-Certificate-4096.cer
│ ├── openSUSE-UEFI-CA-Certificate.cer
│ ├── refind.cer
│ └── SLES-UEFI-CA-Certificate.cer
└── refind.conf

5 directories, 92 files
$ sudo umount /dev/sdb1

2.3 - Test

$ sudo aptitude install qemu ovmf
$ sudo qemu-system-x86_64 /dev/sdb1 --bios /usr/share/ovmf/OVMF.fd

refind standard

3 - Ajout de composants supplémentaires

Référence : Installing Additional Components

3.1 - Préparation

Les composants supplémentaires sont recopiés dans un répertoire tools de la clé USB

$ sudo mount /dev/sdb1 /mnt
$ sudo mkdir -p /mnt/EFI/tools

3.2 - uefi shell

refind reconnaît et permet de lancer un programme uefi shell lorsqu'ils est placé dans le répetoire EFI/tools sous le nom de shellx64.efi

$ sudo cp Shell.efi /mnt/EFI/tools/shellx64.efi

3.3 - memtest86

refind reconnaît et permet de lancer un programme memtest86 lorsqu'ils est placé dans un répetoire EFI/tools/memtest

$ sudo mkdir -p /mnt/EFI/tools/memtest
$ sudo cp -r XXXXXXXX /mnt/EFI/tools/memtest

3.4 - gdisk

refind reconnaît et permet de lancer la version efi de gdisk lorsqu'ils est placé dans le répertoire EFI/tools

$ sudo cp  gdisk_x64.efi /mnt/EFI/tools/

3.5 - Tetris

Préparer le programme tetris UEFI comme indiqué dans Programmes UEFI
$ sudo mkdir /mnt/EFI/GAME
$ sudo cp tetris.efi /mnt/EFI/GAME

3.6 - grub

$ sudo mkdir /mnt/EFI/GRUB
$ sudo grub-mkstandalone --output=/mnt/EFI/GRUB/bootx64.efi --format=x86_64-efi --modules="part_gpt part_msdos luks"
$ sudo grub-mkstandalone --output=/mnt/EFI/GRUB/bootx64.efi --format=x86_64-efi --modules="part_gpt part_msdos luks" \
"boot/grub/grub.cfg=grub.cfg" \
"boot/grub/splash.png=splash.png" \
"boot/grub/layouts/fr.gkb=fr.gkb"

4 - Test

$ sudo umount /dev/sdb1
$ qemu-system-x86_64 -m 2048 -smp 2 -enable-kvm -boot d --bios /usr/share/ovmf/OVMF.fd /dev/sdb

refind - menu principal

refind - menu grub

5 - Utilisation

Pour réinstaller Grub dans l'ESP du disque système, dans le cas d'un système linux

$ [ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD"
$ sudo aptitude reinstall grub-efi
$ sudo update-grub
$ sudo mount /dev/sda1 /boot/efi
$ sudo grub-install --target=x86_64 --bootloader-id=DEBIAN
$ file /boot/efi/EFI/DEBIAN/grubx64.efi
$ efibootmgr | grep DEBIAN
$ efibootmgr |grep BootOrder