저는 Archiso 라이브 USB를 만들고 있습니다. 내 목표는 SecureBoot와 호환되게 만드는 것입니다(SecureBoot가 활성화된 사용자는 시작할 수 있어야 합니다).
이전에도 누군가가 이런 질문을 한 것 같습니다(보안 부팅이 활성화된 상태에서 Arch Linux 설치 미디어를 부팅하는 방법은 무엇입니까?) Archiso의 빌드 프로세스에서 이를 구현하는 방법을 설명하지 않고 대답했습니다.
현재 내 문제는 build.sh
EFI 제작 프로세스를 다음과 같이 정의하는 스크립트에 있습니다.
# 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 부팅 시나리오에 대해 두 가지 기능이 있습니다. 즉, make_efi()
USB 스틱용 UEFI 부트 로더를 준비하는 것과 make_efiboot()
실제 CD/DVD에 구울 ISO9660 CD/DVD 이미지를 구축하기 위한 부팅 이미지를 준비하는 것입니다.
.iso
비슷한 도구를 사용하여 USB 스틱에 Linux 설치 이미지를 쓸 수 있다는 것을 보셨을 것입니다 . dd
이는 El Torito 부팅 정보가 포함된 일반 ISO9660 이미지가 아닙니다. 이러한 이미지에는 isohybrid
ISO 이미지 맨 처음에 간단한 MBR 파티션 테이블을 배치한 다음 파일을 efiboot.img
ISO 이미지 데이터의 "파티션"으로 렌더링하는 특수 처리가 포함되어 있습니다. 실제 CD/DVD 미디어에 굽거나 USB 스틱에 쓸 수 있는 "이중 모드" 이미지 파일입니다. 두 모드의 실제 부팅 프로세스는 매우 다르지만요.
귀하의 코드 조각에는 ISO 이미지 생성 단계가 분명히 포함되어 있지 않으므로 실제 USB 미디어가 기록될 것인지, 아니면 이미지 파일을 만드는 데 사용될 것인지 build.sh
추측할 수 없습니다 .${work_dir}/iso
.iso
/EFI/Boot/bootx64.efi
일부 UEFI 펌웨어에는 실제로 ISO9660 파일 시스템 지원이 기본적으로 포함되어 있으므로 El Torito 부팅 정보를 사용하여 특수 FAT32 UEFI 부팅 이미지를 읽는 대신(또는 추가로) ISO9660 파일 시스템을 살펴볼 수 있습니다. 경우 모든 시스템에 이 기능이 보장됩니다.