BIOS 기반 Ubuntu 18.04 사용자 정의 ISO에 UEFI 부팅 기능을 추가하려고 합니다. 지금까지 찾은 모든 방법에는 ISO에 없는 efi.img 파일이 필요합니다. Ubuntu 18.04 전체 설치 시 이 파일을 사용할 수 있나요? 그렇다면 편집해야 합니까? 그렇지 않은 경우 efi.img 파일을 어떻게 빌드합니까?
사용자 정의 ISO는 설치되지 않고 USB에서 실행되도록 설계되었습니다. 또한 새로운 Linux 사용자에게 배포하기 위한 것입니다. ISO 대신 USB에 UEFI 기능을 추가하는 것은 우리가 찾고 있는 솔루션이 아닙니다.
이것은 Fat 파티션을 만드는 데 사용한 스크립트입니다. 추출된 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"
코드에 문제가 있는 사람이 있나요? "숲에 너무 가까워서 나무가 보이지 않는다"는 생각이 들기 때문에 이 문제를 다른 눈으로 바라보게 되어 정말 감사합니다.
티아, 래리
답변1
내 생각엔 xooriso에 문제가 있는 것 같아. 먼저 아래 설명에 따라 일반 라이브 ISO에서 부팅 섹터를 추출해 보세요.
https://linuxconfig.org/legacy-bios-uefi-and-secureboot-ready-ubuntu-live-image-customization
흥미로운 점은 파일이 거기에 없다는 것입니다. syslinux-utils 패키지에는 isohybrid가 있습니다. 옮겨진 줄은 몰랐습니다. 신경쓰지 마세요.
위의 방법이 작동합니다. 그렇지 않으면 utils는 기본적으로 i386/i686 버전만 만듭니다.
dvdDL 및 BDR 이미지가 제대로 작동할 수 있도록 udf 및 제한된 크기를 사용하도록 uck를 수정할 수 있습니다.
xorriso는 작동하지만 약 4GB 이상의 사양을 초과합니다.
대부분의 경우 squishfs는 제한을 초과합니다. 보다 구체적으로 파일 크기 제한은 iso 크기 제한이 아닌 4GB입니다. 제한된 허용 joliet/rr 크기를 지정하지 않으면 iso를 생성할 때 대부분의 유틸리티가 실패합니다. 또 다른 접근 방식은 데비안처럼 설치 전용 ISO를 구축하는 것입니다. 다른 문제가 없지는 않습니다. 저는 부팅 가능한 침실의 크기, 사양, 심지어 헤비급 게이머 배포판(페도라)도 초과하지 않았습니다.