Loading Windows PE with iPXE

Last Updated:
tags: http ipxe network-boot pxe system-deployment tftp windows
categories: systems

One of the things that got me looking at iPXE, was the number of Operating Systems you can load. I often need to deploy series of systems with a mixture of Windows, VMware and Linux of various flavours, so having one tool to network boot them all is really handy.

To get Windows loaded, I use Microsoft's MDT to script an unattended build. In order to install an MDT-based build over the network, you need to get Windows PE loaded first, and the PE media will then load the rest of the scripts (VBScript) and GUI (HTA-based) and run through the task-sequence you configure in the MDT wizard.

Loading PE turned out to be not so tricky:

kernel wimboot
initrd http://${next-server}/win/bootmgr bootmgr
initrd http://${next-server}/win/BCD BCD
initrd http://${next-server}/win/segmono_boot.ttf segmono_boot.ttf
initrd http://${next-server}/win/segoe_slboot.ttf segoe_slboot.ttf
initrd http://${next-server}/win/wgl4_boot.ttf wgl4_boot.ttf
initrd http://${next-server}/win/boot.sdi boot.sdi
initrd http://${next-server}/win/lt64.wim boot.wim

The first thing you need is the wimboot kernel, available here. Once you've compiled it and placed it in your PXE/HTTP path, you can load it like you would any Linux OS kernel. The various PE components are then loaded into memory using the initrd command, and boot continues as normal as if you had booted the DVD, with PE resident in memory.

The files - bootmgr, BCD, boot.sdi and boot.wim can all be copied from your PE media when generated in MDT. The fonts - segmono_boot.ttf, segoe_slboot.ttf and wgl4_boot.ttf are optional, however highly highly recommended. If anything goes wrong with your boot, you won't get any messages on-screen without these fonts.

The first argument to initrd should point to the TFTP or HTTP location of the file. The second should remain the same as the above example, as wimboot/PE looks for files loaded into memory with these names.