web-dev-qa-db-fra.com

Création d'USB live bootable UEFI à l'aide de l'ISO personnalisé

J'ai un appareil avec un processeur AMD64 mais un chargeur de démarrage UEFI qui ne prend en charge que i386.

J'ai créé un programme d'installation ISO Ubuntu 19.04 personnalisé en utilisant Cubic et je l'ai flashé sur un périphérique USB en utilisant usb-creator-gtk (Startup Disk Creator).

Cela crée deux partitions sur l'USB:

USB Partitions

La première partition formatée en ISO9660 et contient le contenu ISO, la seconde est une partition FAT32 qui contient uniquement les fichiers de démarrage .EFI.

La deuxième partition est celle à partir de laquelle la tablette va démarrer. Son contenu provient d'un fichier efi.img stocké dans/boot/grub sur l'ISO. À l'origine, il ne contenait que des fichiers AMD64 EFI:

AMD64 boot files

J'ai créé mon propre fichier img.efi de remplacement et entré un fichier bootia32.efi à l'aide de ces commandes:

dd if=/dev/zero of=efi.img bs=1M count=5
mkfs.fat efi.img
Sudo mount -o loop,rw efi.img /media/efi
Sudo cp -r <files> /media/efi

Cela crée avec succès une clé USB amorçable, cependant il ne charge pas le programme d'installation Grub, il charge uniquement une ligne de commande Grub.

J'ai utilisé ce bootia32.efi fichier pour charger avec succès grub auparavant, si je formate manuellement l'USB en FAT32, copie les fichiers ISO et place le fichier EFI personnalisé dans/EFI/BOOT alors l'appareil démarrera dans Grub comme je m'y attendais.

Mais je voudrais faire un ISO qui peut être flashé normalement et démarrer correctement.

Ma question est, quel est l'intérêt de créer une partition séparée pour contenir les fichiers EFI de démarrage comme le fait usb-creator-gtk? Comment puis-je faire en sorte que cette partition charge la configuration Grub de l'installateur au lieu de simplement la ligne de commande Grub?

Je vous remercie

2
Hugo

Merci à @oldfred d'avoir expliqué que les partitions séparées doivent dépasser la limite de taille de fichier de 4 Go pour FAT32.

J'ai réussi à créer l'ISO amorçable en plaçant à la fois le dossier boot et les dossiers EFI de l'ISO dans la partition FAT32 (efi.img).

J'ai modifié le grub.cfg pour le lancer à partir d'une partition différente de celle dans laquelle il se trouve.

Cela ne me semble pas correct car le fichier efi.img d'origine ne contenait que trois fichiers:

BOOTx64.EFI
grubx64.efi
mmx64.efi

Mais ça marche donc je suis content.

La structure exacte de mon fichier efi.img est la suivante:

.
├── boot
│   └── grub
│       ├── font.pf2
│       ├── grub.cfg
│       ├── loopback.cfg
│       └── x86_64-efi
│           ├── acpi.mod
│           ├── adler32.mod
│           ├── ahci.mod
│           ├── all_video.mod
│           ├── aout.mod
│           ├── appleldr.mod
│           ├── archelp.mod
│           ├── ata.mod
│           ├── at_keyboard.mod
│           ├── backtrace.mod
│           ├── bfs.mod
│           ├── bitmap.mod
│           ├── bitmap_scale.mod
│           ├── blocklist.mod
│           ├── boot.mod
│           ├── bsd.mod
│           ├── bswap_test.mod
│           ├── btrfs.mod
│           ├── bufio.mod
│           ├── cat.mod
│           ├── cbfs.mod
│           ├── cbls.mod
│           ├── cbmemc.mod
│           ├── cbtable.mod
│           ├── cbtime.mod
│           ├── chain.mod
│           ├── cmdline_cat_test.mod
│           ├── cmp.mod
│           ├── cmp_test.mod
│           ├── command.lst
│           ├── cpio_be.mod
│           ├── cpio.mod
│           ├── cpuid.mod
│           ├── crc64.mod
│           ├── cryptodisk.mod
│           ├── crypto.lst
│           ├── crypto.mod
│           ├── cs5536.mod
│           ├── ctz_test.mod
│           ├── datehook.mod
│           ├── date.mod
│           ├── datetime.mod
│           ├── diskfilter.mod
│           ├── disk.mod
│           ├── div.mod
│           ├── div_test.mod
│           ├── dm_nv.mod
│           ├── echo.mod
│           ├── efifwsetup.mod
│           ├── efi_gop.mod
│           ├── efinet.mod
│           ├── efi_uga.mod
│           ├── ehci.mod
│           ├── elf.mod
│           ├── eval.mod
│           ├── exfat.mod
│           ├── exfctest.mod
│           ├── ext2.mod
│           ├── fat.mod
│           ├── file.mod
│           ├── fixvideo.mod
│           ├── font.mod
│           ├── fs.lst
│           ├── gcry_arcfour.mod
│           ├── gcry_blowfish.mod
│           ├── gcry_camellia.mod
│           ├── gcry_cast5.mod
│           ├── gcry_crc.mod
│           ├── gcry_des.mod
│           ├── gcry_dsa.mod
│           ├── gcry_idea.mod
│           ├── gcry_md4.mod
│           ├── gcry_md5.mod
│           ├── gcry_rfc2268.mod
│           ├── gcry_rijndael.mod
│           ├── gcry_rmd160.mod
│           ├── gcry_rsa.mod
│           ├── gcry_seed.mod
│           ├── gcry_serpent.mod
│           ├── gcry_sha1.mod
│           ├── gcry_sha256.mod
│           ├── gcry_sha512.mod
│           ├── gcry_tiger.mod
│           ├── gcry_twofish.mod
│           ├── gcry_whirlpool.mod
│           ├── geli.mod
│           ├── gettext.mod
│           ├── gfxmenu.mod
│           ├── gfxterm_background.mod
│           ├── gfxterm_menu.mod
│           ├── gfxterm.mod
│           ├── gptsync.mod
│           ├── grub.cfg
│           ├── gzio.mod
│           ├── halt.mod
│           ├── hashsum.mod
│           ├── hdparm.mod
│           ├── help.mod
│           ├── hexdump.mod
│           ├── hfs.mod
│           ├── hfspluscomp.mod
│           ├── hfsplus.mod
│           ├── http.mod
│           ├── iorw.mod
│           ├── jfs.mod
│           ├── jpeg.mod
│           ├── keylayouts.mod
│           ├── keystatus.mod
│           ├── ldm.mod
│           ├── legacycfg.mod
│           ├── legacy_password_test.mod
│           ├── linux16.mod
│           ├── linuxefi.mod
│           ├── linux.mod
│           ├── loadbios.mod
│           ├── loadenv.mod
│           ├── loopback.mod
│           ├── lsacpi.mod
│           ├── lsefimmap.mod
│           ├── lsefi.mod
│           ├── lsefisystab.mod
│           ├── lsmmap.mod
│           ├── ls.mod
│           ├── lspci.mod
│           ├── lssal.mod
│           ├── luks.mod
│           ├── lvm.mod
│           ├── lzopio.mod
│           ├── macbless.mod
│           ├── macho.mod
│           ├── mdraid09_be.mod
│           ├── mdraid09.mod
│           ├── mdraid1x.mod
│           ├── memrw.mod
│           ├── minicmd.mod
│           ├── minix2_be.mod
│           ├── minix2.mod
│           ├── minix3_be.mod
│           ├── minix3.mod
│           ├── minix_be.mod
│           ├── mmap.mod
│           ├── moddep.lst
│           ├── morse.mod
│           ├── mpi.mod
│           ├── msdospart.mod
│           ├── mul_test.mod
│           ├── multiboot2.mod
│           ├── multiboot.mod
│           ├── nativedisk.mod
│           ├── net.mod
│           ├── newc.mod
│           ├── ntfscomp.mod
│           ├── ntfs.mod
│           ├── odc.mod
│           ├── offsetio.mod
│           ├── ohci.mod
│           ├── part_acorn.mod
│           ├── part_amiga.mod
│           ├── part_Apple.mod
│           ├── part_bsd.mod
│           ├── part_dfly.mod
│           ├── part_dvh.mod
│           ├── part_gpt.mod
│           ├── partmap.lst
│           ├── part_msdos.mod
│           ├── part_plan.mod
│           ├── part_Sun.mod
│           ├── part_sunpc.mod
│           ├── parttool.lst
│           ├── parttool.mod
│           ├── password.mod
│           ├── password_pbkdf2.mod
│           ├── pata.mod
│           ├── pbkdf2.mod
│           ├── pbkdf2_test.mod
│           ├── pcidump.mod
│           ├── play.mod
│           ├── png.mod
│           ├── priority_queue.mod
│           ├── probe.mod
│           ├── procfs.mod
│           ├── progress.mod
│           ├── raid5rec.mod
│           ├── raid6rec.mod
│           ├── random.mod
│           ├── read.mod
│           ├── reboot.mod
│           ├── regexp.mod
│           ├── reiserfs.mod
│           ├── relocator.mod
│           ├── romfs.mod
│           ├── scsi.mod
│           ├── serial.mod
│           ├── setjmp.mod
│           ├── setjmp_test.mod
│           ├── setpci.mod
│           ├── shift_test.mod
│           ├── signature_test.mod
│           ├── sleep.mod
│           ├── sleep_test.mod
│           ├── spkmodem.mod
│           ├── squash4.mod
│           ├── syslinuxcfg.mod
│           ├── terminal.lst
│           ├── terminal.mod
│           ├── terminfo.mod
│           ├── test_blockarg.mod
│           ├── testload.mod
│           ├── test.mod
│           ├── testspeed.mod
│           ├── tftp.mod
│           ├── tga.mod
│           ├── time.mod
│           ├── trig.mod
│           ├── tr.mod
│           ├── true.mod
│           ├── udf.mod
│           ├── ufs1_be.mod
│           ├── ufs1.mod
│           ├── ufs2.mod
│           ├── uhci.mod
│           ├── usb_keyboard.mod
│           ├── usb.mod
│           ├── usbms.mod
│           ├── usbserial_common.mod
│           ├── usbserial_ftdi.mod
│           ├── usbserial_pl2303.mod
│           ├── usbserial_usbdebug.mod
│           ├── usbtest.mod
│           ├── verify.mod
│           ├── video_bochs.mod
│           ├── video_cirrus.mod
│           ├── video_colors.mod
│           ├── video_fb.mod
│           ├── videoinfo.mod
│           ├── video.lst
│           ├── video.mod
│           ├── videotest_checksum.mod
│           ├── videotest.mod
│           ├── xfs.mod
│           ├── xnu.mod
│           ├── xnu_uuid.mod
│           ├── xnu_uuid_test.mod
│           ├── xzio.mod
│           └── zfscrypt.mod
└── efi
    └── boot
        ├── bootia32.efi
        ├── BOOTx64.EFI
        ├── grubx64.efi
        └── mmx64.efi

Certains d'entre eux ne sont probablement pas nécessaires, mais je ne suis pas préoccupé par les 10 Mo supplémentaires d'espace qu'il utilise.

C'est mon grub.cfg dans le fichier img.efi, notez la set root=(hd0):

if loadfont /boot/grub/font.pf2 ; then
    set gfxmode=auto
    insmod efi_gop
    insmod efi_uga
    insmod gfxterm
    terminal_output gfxterm
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

set timeout=5
menuentry "Install Ubuntu Server" {
    set root=(hd0)
    set gfxpayload=keep
    linux   /casper/vmlinuz  boot=casper only-ubiquity quiet splash ---
    initrd  /casper/initrd
}
menuentry "Run from internal disk" {
    linux    (hd1,gpt2)/boot/vmlinuz root=/dev/mmcblk1p2 intel_idle.max_cstate=0 quiet splash $vt_handoff
    initrd   (hd1,gpt2)/boot/initrd
}

Si quelqu'un peut faire la lumière sur ce qui devrait se trouver à l'intérieur du fichier efi.img, faites-le moi savoir.

0
Hugo