BIOSのみ、Ubuntu 18.04ベースのカスタムISOにUEFIブート機能を追加

BIOSのみ、Ubuntu 18.04ベースのカスタムISOにUEFIブート機能を追加

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を作成するとほとんどのユーティリティが失敗します。もう1つのアプローチは、Debianのようにインストール専用のISOを構築することです。他の問題はありません。私はブータブルベッドルームのサイズ、仕様、さらにはヘビー級のゲーマーディストリビューション(Fedora)を超えませんでした。

関連情報