This article describes how to setup a network multi-boot environment which works for EFI and BIOS netboot clients with example application for:
- Configure GRUB to boot from network
- Configure GRUB as standalone (all-in-one) EFI image ( alternative approach )
- Mikrotik configuration
Configure GRUB to boot from network
In order to use grub you need to use at least grub in version 2.00 beta3. Using virtual machine from VMWare I was not able to boot R-Drive image. What’s more, using http://tftpd32.jounin.net/ tftp server even grub was not booting properly ( can not load some modules ). Grub bugtracker
insmod net
insmod efinet
insmod tftp
insmod efi_gop
insmod efi_uga
insmod chain
menuentry 'Debian net install' --class os {
set background_color=black
echo 'Loading linux...'
linux /#debiannet/linux
echo 'Loading initrd.gz...'
initrd /#debiannet/initrd.gz
echo 'Finished.'
}
menuentry 'Memtest86(EFI)' --class os {
set background_color=black
echo 'Loading BOOTX64.EFI...'
chainloader /#memtest/BOOTX64.EFI
echo 'Finished.'
}
menuentry 'Memtest86(Legacy)' --class os {
set background_color=black
echo 'Loading MEMTEST...'
linux16 /#memtest/MEMTEST
echo 'Finished.'
}
menuentry 'R-Drive(EFI)' --class os {
set background_color=black
echo 'Loading kernel64...'
linux /#rdrive/kernel64 rw acpi_osi=Linux acpi_backlight=vendor
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b64 /#rdrive/rm_scsi.b64 /#rdrive/rm_pcard.b64 /#rdrive/rm_other.b64 /#rdrive/rm_usb.b64 /#rdrive/rm_video.b64 /#rdrive/rootgui /#rdrive/rmconfig.bin
echo 'Finished.'
}
menuentry 'R-Drive(EFI)(Safe VGA Mode)' --class os {
set background_color=black
echo 'Loading kernel64...'
linux /#rdrive/kernel64 rw acpi_osi=Linux acpi_backlight=vendor rgui_video_mode_ask rgui_vesa_only rgui_video_mode=800x600@60
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b64 /#rdrive/rm_scsi.b64 /#rdrive/rm_pcard.b64 /#rdrive/rm_other.b64 /#rdrive/rm_usb.b64 /#rdrive/rootgui /#rdrive/rmconfig.bin
echo 'Finished.'
}
menuentry 'R-Drive(EFI)(Text Mode)' --class os {
set background_color=black
echo 'Loading kernel64...'
linux /#rdrive/kernel64 rw acpi_osi=Linux acpi_backlight=vendor
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b64 /#rdrive/rm_scsi.b64 /#rdrive/rm_pcard.b64 /#rdrive/rm_other.b64 /#rdrive/rm_usb.b64 /#rdrive/rootfs /#rdrive/rmconfig.bin
echo 'Finished.'
}
menuentry 'R-Drive(Legacy)' --class os {
set background_color=black
echo 'Loading kernel32...'
linux /#rdrive/kernel32 rw acpi_osi=Linux acpi_backlight=vendor
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b32 /#rdrive/rm_scsi.b32 /#rdrive/rm_pcard.b32 /#rdrive/rm_other.b32 /#rdrive/rm_usb.b32 /#rdrive/rm_video.b32 /#rdrive/rootgui /#rdrive/rmconfig.bin
echo 'Finished.'
}
menuentry 'R-Drive(Legacy)(Safe VGA Mode)' --class os {
set background_color=black
echo 'Loading kernel32...'
linux /#rdrive/kernel32 rw acpi_osi=Linux acpi_backlight=vendor rgui_video_mode_ask rgui_vesa_only rgui_video_mode=800x600@60
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b32 /#rdrive/rm_scsi.b32 /#rdrive/rm_pcard.b32 /#rdrive/rm_other.b32 /#rdrive/rm_usb.b32 /#rdrive/rootgui /#rdrive/rmconfig.bin
echo 'Finished.'
}
menuentry 'R-Drive(Legacy)(Text Mode)' --class os {
set background_color=black
echo 'Loading kernel32...'
linux /#rdrive/kernel32 rw acpi_osi=Linux acpi_backlight=vendor
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b32 /#rdrive/rm_scsi.b32 /#rdrive/rm_pcard.b32 /#rdrive/rm_other.b32 /#rdrive/rm_usb.b32 /#rdrive/rootfs /#rdrive/rmconfig.bin
echo 'Finished.'
BIOS image
Create grub efi image ( booti386 ).
grub-mkimage -d /usr/lib/grub/i386-pc/ -O i386-pc-pxe -o ./booti386 -p ‘(tftp)/grub’ pxe tftp
Place booti386 in root of tftp server and set it as ‘boot file name’ in dhcp server
grub.cfg should be place in tftp:grub/directory. Copy also efi module to tftp:grub/i386-pc from /usr/lib/grub/i386-pc
| booti386
\---grub
| grub.cfg
\---i386-pc-pxe
EFI image
Create grub efi image ( bootx64.efi ).
grub-mkimage -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi -o ./bootx64.efi -p ‘(tftp)/grub’ efinet tftp
If You are using i386 arch then install missing files:
apt-get install grub-efi-amd64-bin
Place bootx64.efi in root of tftp server and set it as ‘boot file name’ in dhcp server
grub.cfg should be place in tftp:grub/directory. Copy also efi module to tftp:grub/x86_64-efi from /usr/lib/grub/x86_64-efi
| bootx64.efi
\---grub
| grub.cfg
\---x86_64-efi
Configure GRUB as standalone (all-in-one) EFI image ( alternative approach )
Standalone grub file contains build in configuration and module files.
Efi image:
grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi –fonts=”unicode” -o ./bootx64.efi “boot/grub/grub.cfg=./grub_buildin.cfg
grub_efi_standalone.cfg used to make standalone efi image:
insmod net
insmod efinet
insmod tftp
insmod efi_gop
insmod efi_uga
insmod chain
net_bootp
set net_default_server=192.168.1.1
set root='(tftp)'
menuentry 'Debian net install' --class os {
set background_color=black
echo 'Loading linux...'
linux /#debiannet/linux
echo 'Loading initrd.gz...'
initrd /#debiannet/initrd.gz
echo 'Finished.'
}
menuentry 'Memtest86(EFI)' --class os {
set background_color=black
echo 'Loading BOOTX64.EFI...'
chainloader /#memtest/BOOTX64.EFI
echo 'Finished.'
}
menuentry 'Memtest86(Legacy)' --class os {
set background_color=black
echo 'Loading MEMTEST...'
linux16 /#memtest/MEMTEST
echo 'Finished.'
}
menuentry 'R-Drive(EFI)' --class os {
set background_color=black
echo 'Loading kernel64...'
linux /#rdrive/kernel64 acpi_osi=Linux acpi_backlight=vendor
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b64 /#rdrive/rm_scsi.b64 /#rdrive/rm_pcard.b64 /#rdrive/rm_other.b64 /#rdrive/rm_usb.b64 /#rdrive/rm_video.b64 /#rdrive/rootgui /#rdrive/rmconfig.bin
echo 'Finished.'
}
menuentry 'R-Drive(Legacy)' --class os {
set background_color=black
echo 'Loading kernel32...'
linux /#rdrive/kernel32 acpi_osi=Linux acpi_backlight=vendor
echo 'Loading initrd...'
initrd /#rdrive/lrfsbase.bin /#rdrive/rm_pata.b32 /#rdrive/rm_scsi.b32 /#rdrive/rm_pcard.b32 /#rdrive/rm_other.b32 /#rdrive/rm_usb.b32 /#rdrive/rm_video.b32 /#rdrive/rootgui /#rdrive/rmconfig.bin
echo 'Finished.'
In case of problem with ‘net_bootp’ module please ensure, that mikrotik dhcp for ‘Bootp support’ is set do ‘dynamic’
Mikrotik configuration
DHCP server
To use ‘net_bootp’ module from grub standalone build you need to set “Bootp support” in mikrotik dhcp configuration to ‘dynamic’.
TFTP server
Point tftp server where to search for files requested by client.
BIOS and UEFI Co-Existence
At the time of writing this text, it’s not possible to set different boot file depend of client platform: Mikrotik forum. Alternative you can use linux wiki.fogproject.org as dhcp server




