正しいUEFI SecureBoot署名を使用してArchisoを構築してください。

正しいUEFI SecureBoot署名を使用してArchisoを構築してください。

私はArchiso Live USBを作っています。私の目標はSecureBootと互換性があることです(SecureBootが有効になっているユーザーは起動できる必要があります)。

以前にも誰かがこのような質問をしたようです(セキュアブートを有効にしてArch Linuxインストールメディアを起動する方法は?)Archisoのビルドプロセスでこれを実装する方法を説明せずに答えました。

現在私の問題は、build.shEFI作成プロセスを次のように定義するスクリプトにあります。

# Prepare /EFI
make_efi() {
mkdir -p ${work_dir}/iso/EFI/boot
cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/iso/EFI/boot/bootx64.efi
cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/iso/EFI/boot/

cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/iso/EFI/boot/loader.efi

mkdir -p ${work_dir}/iso/loader/entries
cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/
cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/
cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/

sed "s|%ARCHISO_LABEL%|${iso_label}|g;
     s|%INSTALL_DIR%|${install_dir}|g" \
    ${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/archiso-x86_64.conf

# EFI Shell 2.0 for UEFI 2.3+
curl -o ${work_dir}/iso/EFI/shellx64_v2.efi https://raw.githubusercontent.com/tianocore/edk2/master/ShellBinPkg/UefiShell/X64/Shell.efi
# EFI Shell 1.0 for non UEFI 2.3+
curl -o ${work_dir}/iso/EFI/shellx64_v1.efi https://raw.githubusercontent.com/tianocore/edk2/master/EdkShellBinPkg/FullShell/X64/Shell_Full.efi
}

# Prepare efiboot.img::/EFI for "El Torito" EFI boot mode
make_efiboot() {
mkdir -p ${work_dir}/iso/EFI/archiso
truncate -s 64M ${work_dir}/iso/EFI/archiso/efiboot.img
mkfs.fat -n ARCHISO_EFI ${work_dir}/iso/EFI/archiso/efiboot.img

mkdir -p ${work_dir}/efiboot
mount ${work_dir}/iso/EFI/archiso/efiboot.img ${work_dir}/efiboot

mkdir -p ${work_dir}/efiboot/EFI/archiso
cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/archiso/vmlinuz.efi
cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/efiboot/EFI/archiso/archiso.img

cp ${work_dir}/iso/${install_dir}/boot/intel_ucode.img ${work_dir}/efiboot/EFI/archiso/intel_ucode.img

mkdir -p ${work_dir}/efiboot/EFI/boot
cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi
cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/efiboot/EFI/boot/

cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/efiboot/EFI/boot/loader.efi

mkdir -p ${work_dir}/efiboot/loader/entries
cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/
cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/
cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/

sed "s|%ARCHISO_LABEL%|${iso_label}|g;
     s|%INSTALL_DIR%|${install_dir}|g" \
    ${script_path}/efiboot/loader/entries/archiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/archiso-x86_64.conf

cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/
cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/

umount -d ${work_dir}/efiboot
}

今に記載されているようにArch Wiki SecureBoot ページ、「PreLoader」セクションの他のすべてを理解しており、署名されたefiバイナリを有効にするようにビルドスクリプトを変更できると思いますが、どのように実行しますか?

efibootmgr --verbose --disk /dev/sdX --part Y --create --label "PreLoader" --loader /EFI/systemd/PreLoader.efi

Archisoのビルドプロセス中にコマンドが正しいですか?

ベストアンサー1

このefibootmgrステップでは、システムの起動順序に応じて、特定のディスク(GPTパーティションテーブルヘッダーのディスクUUIDによって識別される)に特定の起動ローダを追加するようにシステムのUEFI起動変数のみを設定します。セキュアブートとは関係ありません。

UEFI ブータブルリムーバブルメディアを準備する場合は必要ありません。 UEFIの場合、リムーバブルメディア付属の場合は起動可能です<media root>/EFI/Boot/bootx64.efi。 FAT32形式のUSBメモリースティックでは、メモリースティックの基本ファイルシステムに配置する必要があります。実際のISO9660フォーマットのCD / DVDでは、FAT32ファイルシステムは専用のブートイメージファイルとしてパッケージ化され、その場所はディスク上にあります。 El Toritoのスタートデータに表示されます。

あなたのbuild.shスクリプトには、明らかにこのブートイメージファイルで意図されたファイルの生成が含まれていますefiboot.img(ISOイメージの作成段階で適切なパラメータで識別される場合に限ります)。

build.shデフォルトでは、さまざまなUEFIブートシナリオに2つの機能があります。つまり、make_efi()USBスティック用のUEFIブートローダを準備することと、make_efiboot()実際のCD/DVDに焼くISO9660 CD/DVDイメージを構築するためのブートイメージを準備することです。

.iso同様のツールを使用して、USBスティックにLinuxインストールイメージを書き込むことができることがわかりました。ddこれはEl Toritoの起動情報を含む一般的なISO9660イメージではありません。これらのイメージには、isohybridISOイメージの最初に単純なMBRパーティションテーブルを配置し、ファイルをefiboot.imgISOイメージデータの「パーティション」としてレンダリングする特別な処理が含まれています。実際のCD / DVDメディアに書き込んだり、USBスティックに書き込むことができる「デュアルモード」イメージファイル。両方のモードの実際の起動プロセスは非常に異なりますが。

コードスニペットにはISOイメージの作成手順が明確に含まれていないため、実際のUSBメディアが記録されるのか、それともイメージファイルの作成に使用されるのかを推測することはできbuild.shません。${work_dir}/iso.iso

/EFI/Boot/bootx64.efi一部のUEFIファームウェアには実際にISO9660ファイルシステムのサポートがデフォルトで含まれているため、El Toritoブート情報を使用して特別なFAT32 UEFIブートイメージを読み取る代わりに(または追加で)ISO9660ファイルシステムを確認できます。すべてのシステムでこの機能が保証されます。

おすすめ記事