
Я создаю мультизагрузочную флешку с производными от Ubuntu. Я следовал нескольким руководствам, найденным в сети: по сути, вы помещаете iso на флешку, а затем загружаете их с помощью grub, который установлен на флешке.
Однако у меня возникла следующая проблема: моя флешка должна работать и с включенным Secure Boot. Однако мне нужен модуль loopback grub для загрузки isos, а когда я загружаюсь с включенным secure boot, secure boot запрещает grub загружать loopback module. Поэтому я не могу загрузиться
Кто-нибудь смог загрузить ISO-образ из grub с включенной безопасной загрузкой?
Спасибо
валерио
решение1
В данный момент я пытаюсь это обойти.
Похоже, что grub ubuntu был явно пропатчен, чтобы предотвратить загрузку модулей во время безопасной загрузки. Сообщение об ошибке немного бесполезно: оно сбивает с толку ссылкой на имя файла, когда ошибка возникает независимо от того, какой модуль загружается:
apt-get source grub-common
...
grep -C 10 "Secure Boot forbids" -r .
...
#ifdef GRUB_MACHINE_EFI
if (grub_efi_secure_boot ())
{
grub_error (GRUB_ERR_ACCESS_DENIED,
"Secure Boot forbids loading module from %s", filename);
return 0;
}
#endif
...
Патч, который это добавляет — ./debian/patches/no_insmod_on_sb.patch
Лучшим вариантом, вероятно, будет пересобрать grub, либо жестко запрограммировав поддержку loopback, либо разрешив загрузку модулей, либо, возможно, просто отключить безопасную загрузку при загрузке с USB (поскольку это, как правило, происходит довольно редко).
Последствия для безопасности, связанные с разрешением grub загружать модули, довольно сложны, поэтому я воздержусь от комментариев по ним, поскольку кто-нибудь тут же скажет мне, что я не прав, и нам придется поспорить.
решение2
Похоже, что текущие версии подписанного образа grub (по крайней мере, тот, который я тестировал, который идет с Ubuntu 20.04) содержат модуль loopback
, поэтому нет необходимости загружать/вставлять его. На самом деле, это невозможно, как уже было отмечено в ответе выше. Я публикую конфигурацию, которую я использовал для создания внешнего диска, который может загружать среду установки/живого режима Ubuntu и установку Windows 10.
В итоге я использовал несколько разделов — 512 МБ EFI, 20 ГБ NTFS для распакованных файлов Windows и большой раздел FAT32 для всего остального, включая Ubuntu ISO. Раздел NTFS нужен, так как Windows теперь включает установочные файлы размером более 4 ГБ. Я не думаю, что подписанный образ grub на данный момент включает модуль exfat, поэтому NTFS здесь единственный вариант. В качестве примечания: распакованные файлы Windows должны находиться в корне раздела, размещение их в подкаталоге у меня не сработало.
Ниже приведена конфигурация, которую я использовал для установки grub на раздел EFI:
sudo grub-install \
--boot-directory=[EFI mount point]/boot \
--efi-directory=[EFI mount point] \
--uefi-secure-boot \
--removable \
--target=x86_64-efi \
--no-bootsector \
/dev/sdaX
А вот файл grub.cfg
(я думаю, что строки над первым пунктом меню лишние, но это реальная конфигурация, которую я использовал):
search --no-floppy --set=root --fs-uuid [UUID of EFI partition]
set prefix=($root)'/boot/grub'
configfile $root/EFI/BOOT/grub.cfg
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry 'Ubuntu 20.04.1' --class ubuntu --class gnu-linux --class gnu --class os {
set isodir='/images/ubuntu'
set isoname='ubuntu-20.04.1-desktop-amd64.iso'
set isofile=$isodir/$isoname
search --no-floppy --set=isodev --fs-uuid [UUID of FAT32 partition]
loopback loop0 ($isodev)/$isofile
linux (loop0)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash
initrd (loop0)/casper/initrd
}
menuentry 'Windows 20H2' {
set efi_path=/efi/boot/bootx64.efi
search --no-floppy --set=windev --fs-uuid [UUID of NTFS partition]
chainloader ($windev)/$efi_path
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
Вот и все, надеюсь, кому-то это будет полезно.