
Estoy construyendo una memoria USB de arranque múltiple con derivados de Ubuntu. Seguí varios tutoriales que encontré en línea: esencialmente, colocas los isos en una memoria USB y luego los inicias usando grub, que está instalado en la memoria USB.
Sin embargo, tengo el siguiente problema: mi dispositivo debería funcionar también con el arranque seguro activado. Sin embargo, necesito el módulo loopback grub para iniciar los isos, y cuando inicio con el arranque seguro activado, el arranque seguro prohíbe que grub cargue el módulo loopback. Entonces no puedo arrancar
¿Alguien ha podido arrancar una ISO desde grub con el arranque seguro activado?
Gracias
valerio
Respuesta1
Estoy intentando solucionar este problema en este momento.
Parece que el grub de Ubuntu ha sido parcheado explícitamente para evitar la carga de módulos durante el arranque seguro. El mensaje de error es un poco inútil: hace referencia confusa al nombre del archivo, cuando el error ocurre independientemente del módulo que se esté cargando:
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
...
El parche que agrega esto es ./debian/patches/no_insmod_on_sb.patch
Probablemente su mejor opción sea reconstruir grub, ya sea codificando el soporte de loopback o permitiendo la carga de módulos, o tal vez simplemente pueda desactivar el arranque seguro al arrancar desde USB (ya que esto tiende a ser una actividad bastante rara).
Las implicaciones de seguridad de permitir que grub cargue módulos son bastante complicadas, así que evitaré comentar sobre ellas porque alguien me dirá instantáneamente que estoy equivocado y tendremos una discusión.
Respuesta2
Parece que las versiones actuales de la imagen de grub firmada (al menos la que he probado, que viene con Ubuntu 20.04) contienen el loopback
módulo, por lo que no es necesario cargarlo/insertarlo. De hecho, esto no es posible, como ya se señaló en la respuesta anterior. Estoy publicando la configuración que utilicé para crear una unidad externa que pueda iniciar un entorno de instalación/en vivo de Ubuntu y una instalación de Windows 10.
Terminé usando varias particiones: una EFI de 512 MB, NTFS de 20 GB para los archivos de Windows descomprimidos y una partición FAT32 grande para todo lo demás, incluida la ISO de Ubuntu. El NTFS es necesario ya que Windows ahora incluye archivos de instalación de más de 4 GB. No creo que la imagen de grub firmada incluya el módulo exfat en este momento, por lo que NTFS es la única opción aquí. Como nota al margen, los archivos de Windows descomprimidos deben residir en la raíz de la partición; tenerlos en un subdirectorio no funcionó para mí.
A continuación se muestra la configuración que utilicé para instalar grub en la partición 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
Y aquí está el grub.cfg
archivo (creo que las líneas encima de la primera entrada del menú son redundantes, pero esa es la configuración real que utilicé):
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
}
Y eso es todo, espero que a alguien le resulte útil.