MDT 2013/WDS Win 2012R2 – using pxelinux as pxe boot loader

Hello world,

In the previous post, we have seen how it was possible to easily combine WDS and MDT 2013 in order to build a portable deployment infrastructure.  In the past (and the solution is still valid), we were using custom tftp solution and we were using the pxelinux boot loader to customize and personalize our deployment solution. We like the fact that we can use only Microsoft built-in tools to setup our portable deployment infrastructure (we can script the installation process – maybe described in another post).  The other advantage of using WDS component is the fact that the TFTP part includes all the latest additions to the protocol ( You can specify size block through the GUI in order to speed up your download)


We assume that you have followed the setup instructions as described in this post .  You have checked that you configuration is working as expected.  Now, you would like to customize the user experience.  We usually brand on deployment infrastructure. We will be using the pxelinux (which is open source) component.  The pxelinux component enables you to create a custom menu while the system is booting up and let you select which operations you want to perform.

Step 1 – Download the pxelinux components

We first need to download the components and file we need in order to customize the tftp part of our deployment server solution.  We will be downloading the syslinux package from this location.  When saved on your computer, you can unzip it into your favorite location.  For this post, we assume that you have unzipped the package under c:\syslinux-6.02\

Step 2 – Copy the files in your WDS server

You will need to copy the files listed below into the WDS boot folder location.  In other words, copy the following files

  • <%Location%>\syslinux-6.02\bios\com32\chain\chain.c32
  • <%Location%>\syslinux-6.02\bios\com32\cmenu\libmenu\libmenu.c32
  • <%Location%>\syslinux-6.02\bios\com32\libutil\libutil.c32
  • <%Location%>\syslinux-6.02\bios\com32\menu\menu.c32
  • <%Location%>\syslinux-6.02\bios\com32\menu\vesamenu.c32
  • <%Location%>\syslinux-6.02\bios\com32\lib\libcom32.c32
  • <%Location%>\syslinux-6.02\bios\com32\elflink\ldlinux\ldlinux.c32
  • <%Location%>\syslinux-6.02\bios\core\pxelinux.0

where <%Location%> is the location where you have unzipped the syslinux package

into the following folders

  • <%DriveLetter%>\RemoteInstall\Boot\x86
  • <%DriveLetter%>\RemoteInstall\Boot\x64

Step 3 – Rename some files

You might want to rename the following files

x86 architecture
  • <%DriveLetter%>\RemoteInstall\Boot\x86\ into abortpxe.0
  • <%DriveLetter%>\RemoteInstall\Boot\x86\pxeboot.n12  into pxeboot.0
  • <%DriveLetter%>\RemoteInstall\Boot\x86\pxelinux.0  into

x64 architecture

  • <%DriveLetter%>\RemoteInstall\Boot\x64\  into abortpxe.0
  • <%DriveLetter%>\RemoteInstall\Boot\x64\pxeboot.n12  into pxeboot.0
  • <%DriveLetter%>\RemoteInstall\Boot\x64\pxelinux.0  into


At the end, you should end up with something like the following screenshot

Click on picture for better resolution


Step 4 – Create the boot loader menu 

We will create a folder named pxelinux.cfg under the following folders

  • <%DriveLetter%>\RemoteInstall\Boot\x86\
  • <%DriveLetter%>\RemoteInstall\Boot\x64\

Under the following locations,

  • <%DriveLetter%>\RemoteInstall\Boot\x86\pxelinux.cfg
  • <%DriveLetter%>\RemoteInstall\Boot\x64\pxelinux.cfg

we will create a file called default.  The file is empty for the moment. We will come back to it a little bit later and we will populate it accordingly

Step 5 – Configure the WDS to use the pxe

Now, we have to tell WDS to use file instead of the default pxeboot.n12.  In Windows 2012 R2, there is no gui anymore to configure such options.  You will need to use the command line. So, from a command line, you will execute the following commands

x86 architecture

  • wdsutil /set-server /bootprogram:boot\x86\ /architecture:x86
  • wdsutil /set-server /N12bootprogram:boot\x86\ /architecture:x86

x64 architecture

  • wdsutil /set-server /bootprogram:boot\x64\ /architecture:x64
  • wdsutil /set-server /N12bootprogram:boot\x64\ /architecture:x64

At this stage, you can reboot the computer or simply restart the wds service

Step 7 – Create you menu 

if you go back to the location

  • <%DriveLetter%>\RemoteInstall\Boot\x86\pxelinux.cfg
  • <%DriveLetter%>\RemoteInstall\Boot\x64\pxelinux.cfg

You will have to edit the default file and append the following content

DEFAULT vesamenu.c32
MENU COLOR TITLE 0 #ffffffff #00000000 none
KERNEL pxeboot.0

#—boot to hard disk
LABEL local
MENU LABEL Boot from Harddisk
Type 0x80

Step 8 – Test your configuration

If you go to your client computer where you need to deploy the operating system, you will be presented with the following screen when starting the pxe boot process

Click on Picture for Better Resolution 

After pressing F12, you should see the boot menu you have created using the pxelinux component.

Click on Picture for Better Resolution 

Using WDS management console;  you should be able to skip the pressing F12 message.  We did not test it (yet) but we will definitely give it a try to smooth a little bit more the deployment process.

Final Notes

Voila ! We have seen in this post and the previous one how you could use only built-in tools to create a deployment infrastructure.  In this post, we have seen how you could customize a little bit further the deployment infrastructure using open source pxelinux components.  We used this component in the past in order to setup the custom tftp solution.  However, we never combined the pxelinux and the WDS components.  We have found most of the information over here

Till Next Time

See ya

Sources :

60 thoughts on “MDT 2013/WDS Win 2012R2 – using pxelinux as pxe boot loader

  1. @Sung,

    We are currently overloaded with work… you should check the web site of syslinux… they provides the files and good information on how to use uefi boot loader for pxe

    hope this help
    Till next time
    See ya

  2. @Frans,

    Sorry it didn’t work for you…but you do not explain what’s not working or error message or logs that you have encountered….

    Till next time
    See ya

  3. Hi, does it work on UEFI system ?
    Because on my server, I can boot on the PXE menu with a Legacy bios but with a UEFI bios nothing appear :/
    Does I did something wrong ?

  4. it works perfectly in Legacy mode but it would be great to have a tutorial for a uefi system. I have searched in the PXELINUX wiki, it says i have to modify entries “in the dhcp configuration file” but i can’t understand where is this file located

  5. @Gianluca,

    Currently, we have no time to provide such tutorial..However, we will take this feedback and comments and put this in our to do list…
    I do not know when I will be able to tackle this but we will try…
    till next time
    see ya

  6. @MK,

    It’s possible to perform pxe boot using syslinux files for UEFI but it’s seems that there are a lot of bug or shortcoming in the current solution. TFTP download is extremely slow and it seems that’s a bug that might have been fixed but does not seem to us (we have tested it). For linux, syslinux uefi does not support secure boot…. So, If you are planning to deploy uefi system and deploy windows operating system, stick with WDS
    There are other options (i.e. using GRUB ) to have uefi pxe capabilities and provide support for secure boot as well
    If time permit, we will try to post something about that

    till next time
    See ya

Leave a Reply