Intereting Posts
Является ли эта ошибка «поддерживается только цель Win32», исходящая из неправильного cc1plus? Сервер Ubuntu 14.04: измените em1 на eth0 – нет /etc/udev/rules.d/70-persistent-net.rules файл Как scp себя? Как быстро создать локальный репозиторий apt для случайных пакетов с использованием дистрибутива linux на базе Debian? xinitrc: запуск xterm с помощью tmux заставляет все окна использовать одну и ту же геометрию Что именно подразумевается под «niced» и «un-niced» пользовательским процессом? конвертировать исполняемый файл обратно в исходный код C Подсчитайте ненулевые числа для каждой строки второго столбца в текстовом файле Перемещение / etc для разделения раздела Некоторые FTP-клиенты синхронизируют соединение с Pure-FTPd добавить номер заказа к определенному тексту OpenSSH_5.3 не имеют подсказки при истечении срока действия учетной записи пользователя Является ли количество tty максимальным количеством одновременных сеансов? grub-install: дескриптор файла 3 просочился на вызов vgs Установка копирует только некоторые файлы в определенные папки?

Создайте Archiso с надлежащей подписью UEFI SecureBoot

Я строю Archiso Live USB. Моя цель – сделать его совместимым с SecureBoot (пользователи с включенным SecureBoot должны иметь возможность загрузить его).

Похоже, что об этом уже спрашивали ( Как загрузить установочный носитель Arch Linux с включенной безопасной загрузкой? ) И отвечали, но нет объяснения, как это можно сделать в процессе сборки Archiso.

На данный момент у build.sh сценарием 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 , я считаю, что я понимаю все остальное (и могу изменить скрипт сборки, чтобы он включал подписанные двоичные файлы efi) в разделе «PreLoader», но как я могу запустить

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

правильно команда во время процесса сборки Archiso?

efibootmgr только конфигурирует переменные загрузки UEFI вашей системы, чтобы добавить этот конкретный загрузчик на этот конкретный диск (идентифицируемый UUID диска в заголовке таблицы разделов GPT) в порядке загрузки вашей системы. Это не имеет ничего общего с Secure Boot.

При подготовке UEFI-загрузочного съемного носителя это вам не понадобится. Для UEFI съемный носитель является загрузочным, если на нем просто есть /EFI/Boot/bootx64.efi . На USB-накопителе в формате FAT32 это должно быть в основной файловой системе флешки; на фактическом CD / DVD в формате ISO9660 файловая система FAT32 должна быть упакована в специальный файл образа загрузки, расположение которого на диске указано в данных загрузки El Torito.

Ваш сценарий build.sh уже включает создание efiboot.img , который, очевидно, предназначен для этого файла загрузочного образа (если он определен с соответствующими параметрами на этапе создания образа ISO).

По сути, ваш build.sh имеет две разные функции для разных ситуаций загрузки UEFI: make_efi() предназначен для подготовки загрузчика UEFI для USB-накопителя, а make_efiboot() предназначен для подготовки загрузочного образа для создания образа CD / DVD ISO9660, который будет быть записанным на настоящем CD / DVD.

Возможно, вы видели установочные образы Linux .iso которые можно записать на USB-накопитель с помощью dd или аналогичного. Это не просто обычные образы ISO9660 с загрузочной информацией El Torito: эти образы include специальную isohybrid обработку, которая помещает простую таблицу разделов MBR в самое начало ISO-образа, которая затем представляет файл efiboot.img как «раздел» внутри Данные ISO-образа, в результате чего образуется файл «двойного режима», который может работать как при записи на фактический носитель CD / DVD, так и при записи на USB-накопитель, даже если фактическая процедура загрузки сильно отличается в этих двух режимах.

Ваш fragment build.sh , по-видимому, не включает в себя этап создания образа ISO, поэтому я не могу предположить, будет ли ${work_dir}/iso записываться на фактический носитель USB или будет ли он использоваться для создания файла образа .iso .

Некоторые микропрограммы UEFI фактически include встроенную поддержку файловой системы ISO9660, поэтому они могут просто искать /EFI/Boot/bootx64.efi в файловой системе ISO9660 вместо (или в дополнение к) чтения специального загрузочного образа FAT32 UEFI с использованием информации о загрузке El Torito; однако не все системы гарантированно имеют такую ​​возможность.