Clé autonome applications UEFI

Mise à jour : Debian 10.5 / Buster

Sommaire

1 - Préparation de la clé

1.1 - Formatage

Afin d'être amorçable en mode UEFI, partitionner la clé en mode GPT et créer la partition pour l'ESP (Efi System Partition) :

$ sudo dmesg |tail -1
[ 4724.046563] sd 3:0:0:0: [sdb] Attached SCSI removable disk
$ sudo parted /dev/sdb -s mklabel gpt mkpart ESP fat32 2MiB 512MiB set 1 esp on
$ sudo mkfs.fat -F 32 -n ESP /dev/sdb1
$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sdb
└─sdb1 vfat ESP 311C-4029

1. 2 - Préparation de l'arborescence

$ findmnt /mnt
$ sudo mount /dev/sdb1 /mnt
$ sudo mkdir -p /mnt/EFI/BOOT
$ sudo tree /mnt
/mnt
└── EFI
└── BOOT
....

2 - Installation en mode non compatible Secure Boot

2.1 - Principe

$ sudo cp tetris.efi /mnt/EFI/BOOT/bootx64.efi
$ sudo tree /mnt
/mnt
└── EFI
└── BOOT
└── Bootx64.efi
.....
$ sudo umount /mnt

2.2 - Exemple : Tetris UEFI

L'application tetris.efi peut-être utilisée pour vérifier l'amorçage de la plate-forme en mode UEFI

tetris.efi

2.3 - Exemple : Shell UEFI

$ sudo mount /dev/sdb1 /mnt
$ sudo cp ShellBinPkg/UefiShell/X64/Shell.efi /mnt/EFI/BOOT/bootx64.efi
$ sudo umount /mnt

shell uefi

2.4 - Exemple : Grub efi

3 - Installation en mode compatible Secure Boot

3.1 - Principe

Afin qu'une application puisse être amorcée depuis une plate-forme en mode Secure Boot, plusieurs solutions sont possibles

3.2 - Exemple : Shell UEFI

$ sudo cp /usr/lib/shim/shimx64.efi.signed /mnt/EFI/BOOT/bootx64.efi
$ sudo cp /usr/lib/shim/mmx64.efi.signed /mnt/EFI/BOOT/mmx64.efi
$ sudo cp ShellBinPkg/UefiShell/X64/Shell.efi /mnt/EFI/BOOT/grubx64.efi
$ sudo tree /mnt/EFI
/mnt/EFI
└── BOOT
├── bootx64.efi # En fait, shimx64.efi.signed
├── grubx64.efi # En fait, shell.efi
└── mmx64.efi # En fait, mmx64.efi.signed
$ sudo umount /mnt
$ mokutil --list-enrolled |grep -A1 SHA-256
[SHA-256]
33b2a0f7f044ff9f063733dd1585405a89ec9b9117a2a832ce4e9f394021d266
--
....
$ sudo aptitude install pesign
$ pesign -P -h -i ShellBinPkg/UefiShell/X64/Shell.efi  | cut -f 2 -d ' '
33b2a0f7f044ff9f063733dd1585405a89ec9b9117a2a832ce4e9f394021d266
$ sudo mokutil --delete-hash 33b2a0f7f044ff9f063733dd1585405a89ec9b9117a2a832ce4e9f394021d266
$ sudo mokutil --import-hash $(pesign -P -h -i ShellBinPkg/UefiShell/X64/Shell.efi | cut -f 2 -d ' ')