Here are some of our preliminary findings on UEFI pxe booting
Note that not all grub sources contain the necessary
modules to netboot as the net.mod and others are missing or don’t work.
[LIST]
[*][SIZE=3]PXE Boot Windows UEFI hardware to Linux PXE Server [/SIZE]
[/LIST]
[LIST]
[*][SIZE=3][SIZE=4]--------------------------------------------------------[/SIZE][/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Overview[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]booting UEFI hardware via PXE is possible by using our existing Linux server environment. [/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Setting UEFI booting integrated with legacy PXE booting involves configuration changes to the dhcp server and adding functionality to the tftpboot server.[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Configuring the DHCP server is shown in step 1 and has no hazardous effects on the live network environment as the configuration selects the proper boot method for each instance and as long as no machines are configured to UEFI boot with network as the first option as we currently don’t have a working boot to local disk option [/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Configuring a bootable grub2 menu with options and default is very possible[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Booting useful applications via UEFI is possible with hardware compatiblity of some hardware an issue. ie Dell 5420,5530 and MS Surface[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Other Applications will need to be evaluated on a individual basis for grub and hardware compatibily[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]UEFI is not mainstream as based on our research very few people or organizations are doing this at this time [/SIZE]
[/LIST]
[LIST]
[*]1. PXE server and DHCP setup
[/LIST]
[LIST]
[*][SIZE=3] – Linux server version: Debian Wheezy[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] – DHCP configuration file:[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Start with standard fog confiuration to setup working tftp server[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]On DHCP server[/SIZE]
[/LIST]
[LIST]
[*]In /etc/dhcp/dhcpd.conf change Original PXE boot stanza to the following
[/LIST]
[LIST]
[*]next-server 192.168.0.2
[/LIST]
[LIST]
[*]option arch code 93 = unsigned integer 16;
[/LIST]
[LIST]
[*]if option arch = 00:07 {
[/LIST]
[LIST]
[*]filename “bootx64.efi”;
[/LIST]
[LIST]
[*]}else if option arch = 00:06 {
[/LIST]
[LIST]
[*]filename “bootia32.efi”;
[/LIST]
[LIST]
[*]}else {
[/LIST]
[LIST]
[*]filename “pxelinux.0”;
[/LIST]
[LIST]
[*]}
[/LIST]
[LIST]
[*][SIZE=3]each of the files listed above are located in the root of the tftpboot directory in the example above [/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] a. pxelinux.0 is setup in the normal fog install[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] b. bootx64.efi and bootia32.efi are compliled as grub bootloaders for UEFI explained in Step 2 below.[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]There are now 3 boot options that dhcp knows to select based on system achitecture when it boots to dhcp.[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] a. 00:07 specifies 64bit hardware UEFI hardware[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] b. 00:06 specifies 32bit hardware UEFI hardware [/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] c. pxelinux.0 specifies normal non-UEFI pxeboot setup[/SIZE]
[/LIST]
[LIST]
[*]2. Modules for Grub2:
[/LIST]
[LIST]
[*][SIZE=3]We have found 2 sources that work for creating the .efi files needed to boot hardware to the server many do not[/SIZE]
[/LIST]
[LIST]
[*]On tftpboot server run
[/LIST]
[LIST]
[*]apt-get install grub-efi-ia32-bin grub-efi-amd64-bin grub-pc
[/LIST]
[LIST]
[*]to install grub files needed
[/LIST]
[LIST]
[*]3. Make efi boot image (Script):
[/LIST]
[LIST]
[*]vim /root/build64.sh
[/LIST]
[LIST]
[*]grub-mkimage --format=x86_64-efi
[/LIST]
[LIST]
[*]–config=/tftpboot/EFI/boot/grub.cfg
[/LIST]
[LIST]
[*]–output=/tftpboot/bootx64.efi
[/LIST]
[LIST]
[*]ls /usr/lib/grub/x86_64-efi | sed -n 's/\.mod//gp'
[/LIST]
[LIST]
[*][SIZE=3]At this point a 64bit UEFI piece of hardware should be able to boot to the network and get a grub prompt[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3]Note a. various versions of grub have different capabilities regarding network booting as some do not include the necessary network modules[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3][SIZE=4] b. [/SIZE][SIZE=4][COLOR=#dd0000][SIZE=4][COLOR=#dd0000]–config=[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] points to the location of the grub.cfg file in step 4 below[/SIZE][/SIZE]
[/LIST]
[LIST]
[*][SIZE=3][SIZE=4] c. [/SIZE][SIZE=4][COLOR=#dd0000][SIZE=4][COLOR=#dd0000]–output=[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] is the location of the folder where the compiled file ends up[/SIZE][/SIZE]
[/LIST]
[LIST]
[*][SIZE=3][SIZE=4] d. line starting [/SIZE][SIZE=4][COLOR=#dd0000][SIZE=4][COLOR=#dd0000]`ls[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] specifies location of grub modules and what to include, in this example everything[/SIZE][/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] two Distros that worked at this point are[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] – From Debian Sid[/SIZE]
[/LIST]
[LIST]
[*][SIZE=3] – From Ubuntu mini ISO (Saucy, less modules than Sid)[/SIZE]
[/LIST]