Пилю свою ОС с нескучными обоями спасательный Live-CD на основе Ubuntu c дополнительным специфическим софтом. Ранее сделал Live-CD на основе live-build, который сам кривой как сабля, поддержка его заброшена (но вроде бы кто-то взялся за него снова) и не собирает hybrid образы для загрузки и Legacy, и EFI.
Решил сделать свой bash-скрипт для сборки hybrid iso. Образ собирается, в VMWare в Legacy-режиме вроде бы грузится. В EFI-режиме возникла проблема с запуском Grub2 загрузчика.
Функция сборки fat-раздела с загрузчиком
CHROOT="chroot64"
ARCH="amd64"
ARCHG="x86_64-efi"
BINARY="binary64"
...............................
makegrub()
{
mkdir -p $BINARY/EFI/BOOT
#mkdir -p $BINARY/boot/grub
cat > $BINARY/EFI/BOOT/grub.cfg << EOF
set timeout=5
set color_highlight=black/light-magenta
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry 'Boot rescue system' {
set gfxpayload=keep
linux /live/vmlinuz boot=casper
initrd /live/initrd
}
EOF
# root (hd0)/live/filesystem.squashfs
# https://askubuntu.com/questions/91484/how-to-boot-ubuntu-from-efi-uefi
GRUB_MODULES="fat iso9660 part_gpt part_msdos ntfs ext2 exfat btrfs hfsplus udf
font gettext gzio
normal boot linux linux16 configfile loopback chain
efifwsetup efi_gop efi_uga
ls help echo elf search search_label search_fs_uuid search_fs_file
test all_video loadenv
gfxterm gfxterm_background gfxterm_menu"
#GRUB_MODULES="linux part_gpt ext2 normal gfxterm gfxterm_background gfxterm_menu test all_video loadenv fat"
grub-mkimage -o $BINARY/EFI/BOOT/bootx64.efi -p /EFI/BOOT -O $ARCHG --verbose -c $BINARY/EFI/BOOT/grub.cfg $GRUB_MODULES
#grub-mkstandalone -o $BINARY/EFI/BOOT/bootx64.efi -O $ARCHG --verbose.
#cp -r /usr/lib/grub/$ARCHG $BINARY/EFI/BOOT
#rm -f $BINARY/EFI/BOOT/bootx64.efi; cp ./2/bootx64.efi $BINARY/EFI/BOOT
#rm -f $BINARY/EFI/BOOT/bootx64.efi; cp ./2/grubx64.efi $BINARY/EFI/BOOT/bootx64.efi
mkdir -p ./tmp
dd if=/dev/zero of=./efi.img bs=512 count=16384
mkfs.fat ./efi.img
mount ./efi.img ./tmp
cp -r $BINARY/EFI ./tmp
sync
umount ./tmp
rm -rf ./tmp
mv -f efi.img $BINARY
}
В итоге, при загрузке этого grub-а выводится
out of range pointer 0x48fb894800000000
Aborted. Press any key to exit.
... и вываливается в EFI shell.
Если подсунуть в качестве /EFI/BOOT/bootx64.efi загрузчик из ubuntu-mate-16.10-desktop-amd64.iso, переименовав из grubx64.efi, то появляется меню и ядро грузится (выпадая в итоге в panic, но это отдельная история).
Если подсунуть результат grub-mkstandalone (использует grub-mkimage и те же модули и ядро grub), то он тоже запускается.
Явно, что проблема в сборке grub-mkimage, образ получается немного меньше ubunt-овского. По всем описаниям, модулей для сборки указывается не так уж много, и то, что я видел и по логике должно быть я добавил - fat, part_msdos и т.д.
Кто-нибудь сталкивался с такой проблемой? Какие-то более информативные отладочные сообщения в grub можно включить?