
Estou construindo um stick USB de inicialização múltipla com derivados do Ubuntu. Segui vários tutoriais encontrados online: essencialmente, você coloca o isos em um pendrive e depois inicializa-os usando o grub, que está instalado no pendrive.
Porém, estou com o seguinte problema: meu stick também deve funcionar com o Secure Boot ativado. No entanto, preciso do módulo loopback grub para inicializar o isos e, quando inicializo com inicialização segura ativada, a inicialização segura proíbe o grub de carregar o módulo de loopback. Então, não consigo inicializar
Alguém conseguiu inicializar um iso do grub com inicialização segura ativada?
Obrigado
Valério
Responder1
Estou tentando contornar isso no momento.
Parece que o grub do Ubuntu foi explicitamente corrigido para evitar o carregamento de módulos durante a inicialização segura. A mensagem de erro é um pouco inútil: ela faz referência confusa ao nome do arquivo, quando o erro ocorre independentemente de qual módulo está sendo carregado:
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
...
O patch que adiciona isso é ./debian/patches/no_insmod_on_sb.patch
Sua melhor aposta é provavelmente reconstruir o grub com suporte a loopback de codificação ou permitir o carregamento de módulos, ou talvez você possa simplesmente desabilitar a inicialização segura ao inicializar a partir de USB (já que isso tende a ser uma atividade bastante rara).
As implicações de segurança de permitir que o grub carregue módulos são bastante complicadas, então evitarei comentar sobre elas porque alguém me dirá instantaneamente que estou errado e teremos que discutir.
Responder2
Parece que as versões atuais da imagem grub assinada (pelo menos aquela que testei, que vem com o Ubuntu 20.04) contêm o loopback
módulo, portanto não há necessidade de carregá-lo/inserí-lo. Na verdade, isso não é possível, como já foi observado na resposta acima. Estou postando a configuração que usei para criar uma unidade externa que pode inicializar um ambiente de instalação/live do Ubuntu e uma instalação do Windows 10.
Acabei usando várias partições - uma EFI de 512 MB, NTFS de 20 GB para os arquivos descompactados do Windows e uma grande partição FAT32 para todo o resto, incluindo o ISO do Ubuntu. O NTFS é necessário porque o Windows agora inclui arquivos de instalação maiores que 4 GB. Não acho que a imagem grub assinada inclua o módulo exfat no momento, então NTFS é a única opção aqui. Como observação lateral, os arquivos descompactados do Windows devem residir na raiz da partição; tê-los em um subdiretório não funcionou para mim.
Abaixo está a configuração que usei para instalar o grub na partição 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
E aqui está o grub.cfg
arquivo (acho que as linhas acima da primeira entrada do menu são redundantes, mas essa é a configuração real que usei):
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
}
E isso é tudo, espero que alguém ache útil.