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)
Overview
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\abortpxe.com into abortpxe.0
- <%DriveLetter%>\RemoteInstall\Boot\x86\pxeboot.n12 into pxeboot.0
- <%DriveLetter%>\RemoteInstall\Boot\x86\pxelinux.0 into pxelinux.com
x64 architecture
- <%DriveLetter%>\RemoteInstall\Boot\x64\abortpxe.com into abortpxe.0
- <%DriveLetter%>\RemoteInstall\Boot\x64\pxeboot.n12 into pxeboot.0
- <%DriveLetter%>\RemoteInstall\Boot\x64\pxelinux.0 into pxelinux.com
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 pxelinux.com 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\pxelinux.com /architecture:x86
- wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.com /architecture:x86
x64 architecture
- wdsutil /set-server /bootprogram:boot\x64\pxelinux.com /architecture:x64
- wdsutil /set-server /N12bootprogram:boot\x64\pxelinux.com /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
PROMPT 0
MENU COLOR TITLE 0 #ffffffff #00000000 none
MENU BACKGROUND test.png
MENU TITLE PORTABLE MDT CAPABILITY
#—boot to MDT WINPE IMAGES
LABEL MDT
MENU LABEL MDT Boot Images
KERNEL pxeboot.0#—boot to hard disk
LABEL local
MENU DEFAULT
MENU LABEL Boot from Harddisk
LOCALBOOT 0
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 : http://www.syslinux.org/wiki/index.php/WDSLINUX
@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
It doesn’t seem to work, nothing happens just the normal WDS menu loads..
@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
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 ?
@Nokolo,
UEFI should be supported by pxelinux but you need to have the correct binaries… (see http://www.syslinux.org/wiki/index.php?title=PXELINUX#UEFI)
Till next time
See ya
Thanks for the amazing article. My two cents about Deploy OS using WDS Server in Windows Server 2012 r2.
http://www.itingredients.com/deploy-os-using-wds-in-windows-server-2012-r2/
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
@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
How to get uefi syslinux files? Thank you
@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