Я пытаюсь добавить возможность начальной загрузки UEFI к BIOS, только Ubuntu 18.04 основывала пользовательскую ISO. Все методы, которые я нашел до сих пор, требуют efi.img файла, который не присутствует в ISO. Я могу использовать файл из полной установки Ubuntu 18.04? Если да, я должен отредактировать его? В противном случае, как я могу создать efi.img файл?
Пользовательская ISO разработана для выполнения от USB, не установленного. Это также предназначается для распределения новым пользователям Linux. Добавление возможностей UEFI к USB, а не ISO не является решением, мы смотрим.
Это - сценарий, что я раньше создавал толстый раздел. Это выполняется в папке, содержащей извлеченную ISO:
#! /bin/sh
BOOT_IMG_DATA="$PWD"
BOOT_IMG=efi.img
#Ensure needed folders exist
if [ ! -d "$BOOT_IMG_DATA"/efi/boot ]; then
mkdir -p "$BOOT_IMG_DATA"/efi/boot
fi
if [ ! -d "$BOOT_IMG_DATA"/boot/grub ]; then
mkdir -p "$BOOT_IMG_DATA"/boot/grub
fi
chmod -R +rw "$BOOT_IMG_DATA"/boot/grub
chmod -R +rw "$BOOT_IMG_DATA"/efi/boot
# Create the 64-bit EFI GRUB binary (bootx64.efi) and the El-Torito boot
# image (efiboot.img) that goes in the /isolinux directory for booting on
# UEFI systems.
# First, build bootx64.efi, which will be installed here in /EFI/BOOT:
grub-mkimage --format=x86_64-efi --output=bootx64.efi --config=grub.cfg --compression=xz --prefix=/EFI/BOOT part_gpt part_msdos fat ext2 hfs hfsplus iso9660 udf ufs1 ufs2 zfs chain linux boot appleldr ahci configfile normal regexp minicmd reboot halt search search_fs_file search_fs_uuid search_label gfxterm gfxmenu efi_gop efi_uga all_video loadbios gzio echo true probe loadenv bitmap_scale font cat help ls png jpeg tga test at_keyboard usb_keyboard
# Then, create a FAT formatted image that contains bootx64.efi in the
# /EFI/BOOT directory. This is used to bootstrap GRUB from the ISO image.
dd if=/dev/zero of=efiboot.img bs=1K count=1440
# Format the image as FAT12:
mkdosfs -F 12 efiboot.img
# Create a temporary mount point:
MOUNTPOINT=$(mktemp -d)
# Mount the image there:
mount -o loop efiboot.img $MOUNTPOINT
# Copy the GRUB binary to /EFI/BOOT:
mkdir -p $MOUNTPOINT/EFI/BOOT
cp -a bootx64.efi -s $MOUNTPOINT/EFI/BOOT
# Unmount and clean up:
umount $MOUNTPOINT
rmdir $MOUNTPOINT
# Move the efiboot.img to isolinux:
mv efiboot.img isolinux
mv bootx64.efi efi/boot
echo
echo "Done building /EFI/BOOT/bootx64.efi and /isolinux/efiboot.img."
Это - сценарий, который я использую для создания ISO:
#!/bin/bash
# The example names get mapped to their roles here
orig_iso="$HOME"/foxclone/foxclone025-01.iso
new_iso="$HOME"/foxclone/foxclone025-02.iso
new_files="$PWD"
mbr_template=isohdpfx.bin
# Extract MBR template file to disk
dd if="$orig_iso" bs=1 count=432 of="$mbr_template"
# Create the new ISO image
xorriso -as mkisofs \
-U \
-allow-lowercase \
-r -V 'foxclone025-02' \
-o "$new_iso" \
-J -J -joliet-long \
-isohybrid-mbr "$mbr_template" \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot \
-e isolinux/efiboot.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
"$new_files"
Кто-либо видит проблему в коде? Я действительно ценю другую пару глаз, смотрящую на это, поскольку я думаю, что стал "слишком близким к лесу для наблюдения деревьев".
Править: Контент начальной загрузки/личинки и EFI/BOOT следует
larry@larry-Satellite-C55-A:~/foxclone/iso3$ ls -l boot/grub
total 2492
-rw------- 1 larry larry 2523136 Jul 31 01:33 efi.img
-rw------- 1 larry larry 5004 Mar 18 2019 font.pf2
-rw------- 1 larry larry 941 Aug 5 15:28 grub.cfg
-rw------- 1 larry larry 604 Aug 5 15:28 loopback.cfg
drwxr-xr-x 2 larry larry 12288 Jan 13 09:20 x86_64-efi
larry@larry-Satellite-C55-A:~/foxclone/iso3$ ls -l EFI/BOOT
total 2424
-rw------- 1 larry larry 1334816 Aug 5 15:28 BOOTx64.EFI
-rw------- 1 larry larry 1146744 Aug 5 15:28 grubx64.efi
Содержание grub.cfg
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 "Foxclone" {
set gfxpayload=keep
linux /casper/vmlinuz boot=casper quiet splash ---
initrd /casper/initrd
}
Я думаю, что Вы включите возможность начальной загрузки UEFI путем простого добавления загрузчиков shimx64.efi и grubx64.efi и конфигурационный файл личинки к подкаталогам / каталога EFI. См. стандартную Ubuntu ISO для та же установка. У Вас уже есть съемные носители установка UEFI для/EFI/Boot с подарком grubx64.efi и shimx64.efi там, но переименованный к bootx64.efi. Все, в чем Вы нуждаетесь, является grub.cfg в/EFI/ubuntu. В установленной системе этот grub.cfg является просто тремя тупиками строки, которые копируют сохраняемый grub.cfg с/boot/grub/grub.cfg, но в Вашем случае, я не думаю, что Вы будете обновлять ядра, которые изменяют/boot/grub/grub.cfg, поэтому просто помещают копию/boot/grub/grub.cfg файла там. К вашему сведению тупиковая личинка похожа (Ваш UUID и HD номер x и число раздела:
search.fs_uuid <UUID-of-the-Ubuntu-root> root hd?,gpt?
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
Тупик будет копировать в сохраняемой копии установки grub.cfg, таким образом, полный файл личинки, который не изменяется (никакие обновления ядра в Вашем случае) будет прекрасен. Я начал видеть рекомендации, которые копает помещение grub.cfg в работы/EFI/Boot теперь, но в прошлом, которое не сделало, только смотрел в/EFI/ubuntu для grub.cfg.
Право, на самом деле довольно просто настроить. grub.cfg смотрит хорошо, если Вы разобрались в названиях своего случая: initrd и не initrd.lz и vmlinuz и не vmlinuz.efi как стандартная Гостеприимная Ubuntu использование ISO.