Windows Deployment Server Modifications Syslinux

To make this possible, alter WDS to serve up a PXELinux menu with options to either proceed with WDS or jump over to a Linux PXE server:

  • Download Syslinux 3.86and extract to a temporary location
  • Copy the following three files directly to your WDS x64 boot directory, e.g., D:\RemoteInstall\Boot\x64\
    • core\pxelinux.0
    • modules\pxechain.com
    • com32\menu\menu.c32
  • Make duplicate copies of these existing WDS files (should already be present in directory above); they need to have “zero” as the extension
    • n12 -> pxeboot.0
    • com -> abortpxe.0
  • Create a directory in x64 named “pxelinux.cfg”
  • Create a new text file: x64\pxelinux.cfg\default with the following as a guide:

DEFAULT menu.c32

MENU TITLE WDS PXE Server

 

LABEL wds

MENU DEFAULT

MENU LABEL Windows Deployment Services

KERNEL pxeboot.0

 

LABEL abort

MENU LABEL Abort PXE

Kernel   abortpxe.0

 

LABEL linuxpxe

MENU LABEL Linux PXE server…

KERNEL pxechain.com

APPEND 192.168.4.33::pxelinux.0

#IP address above is Linux PXE host

To activate, run these two commands from a command prompt on the WDS server:

wdsutil /set-server /bootprogram:boot\x64\pxelinux.0 /architecture:x64

wdsutil /set-server /N12bootprogram:boot\x64\pxelinux.0 /architecture:x64

Action!

Boot a machine from the network and you should get a PXELinux menu that offers a choice:

One other note: the Linux PXE server doesn’t actually need to be on the same network, it just needs to be reachable from the client.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Step Two – Install PXELinux

PXELinux is part of the SysLinux package

  • ZIP\core\pxelinux.0
  • ZIP\com32\menu\vesamenu.c32
  • ZIP\com32\modules\chain.c32
  • Copy the files into \\WDS\REMINST\Boot\x86
  • Rename pxelinux.0 to pxelinux.com
  • You also need to make copies of two original WDS files in this folder
  • Copy n12and rename it to pxeboot.0
  • Copy com and rename it to abortpxe.0
  • Create to new subfolders
  • \\WDS\REMINST\Boot\x86\Linux
  • \\WDS\REMINST\Boot\x86\pxelinux.cfg
  • The pxelinux.cfgfolder is where you store the files that make up the PXE boot (F12) menu.
  • All the files we will put in there are text files, even though they don’t use a .txtextension
  • First create a new text file called default.  This is the first menu that loads.
  • Paste the following text into it
  • DEFAULT c32
  • PROMPT 0
  • MENU TITLE PXE Boot Menu (x86)
  • MENU INCLUDE pxelinux.cfg/graphics.conf
  • MENU AUTOBOOT Starting Local System in 8 seconds
  • # Option 1 – Exit PXE Linux & boot normally
  • LABEL bootlocal
  • menu label ^Boot Normally
  • menu default
  • localboot 0
  • timeout 80
  • TOTALTIMEOUT 9000
  • # Option 2 – Run WDS
  • LABEL wds
  •  MENU LABEL ^Windows Deployment Services
  •  KERNEL pxeboot.0
  • # Option 3 – Exit PXE Linux
  • LABEL Abort
  • MENU LABEL E^xit
  • KERNEL abortpxe.0
  • Now create a text file called graphics.conf
  • This file controls how the menu is displayed. It’s very versatile so have a play around until it looks as basic or as flashy as you like
  • Paste the following text into it
  • MENU MARGIN 10
  • MENU ROWS 16
  • MENU TABMSGROW 21
  • MENU TIMEOUTROW 26
  • MENU COLOR BORDER 30;44 #00000000 #00000000 none
  • MENU COLOR SCROLLBAR 30;44 #00000000 #00000000 none
  • MENU COLOR TITLE 0 #00269B #00000000 none
  • MENU COLOR SEL 30;47          #40000000 #20ffffff
  • MENU BACKGROUND background.jpg
  • NOESCAPE 0
  • ALLOWOPTIONS 0
  • If you want to use a custom background, place it in the \\WDS\REMINST\Boot\x86folder.
  • The image should be a 640×480 jpeg file.
  • Make sure it has the same name as specified in the MENU BACKGROUND line in conf
  • Now we need to change the default boot program in WDS
  • Open the Windows Deployment Services Console
  • Right Click on your Server and select Properties
  • From the Boottab change the default boot program for x86 architecture to\Boot\x86\pxelinux.com
  • In Server 2008 R2 you have to use the wdsutil  command lineto set the the default boot program with these commands

wdsutil /set-server /bootprogram:boot\x86\pxelinux.com /architecture:x86

wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.com /architecture:x86

Step Three – Test it out

Before you go any further, do a test PXE boot to check everything is OK.

I use a Hyper-V VM to make this testing process quicker. Just make sure it’s set to boot to a legacy network adapter in the settings

If it doesn’t load make sure you have the following files and folders in the right place within the\\WDS\REMINST share

  • \Boot\x86\pxelinux.com
  • \Boot\x86\vesamenu.c32
  • \Boot\x86\chain.c32
  • \Boot\x86\pxeboot.0
  • \Boot\x86\abortpxe.0
  • \Boot\x86\background.jpg
  • \Boot\x86\Linux\
  • \Boot\x86\pxelinux.cfg\
  • \Boot\x86\pxelinux.cfg\default
  • \Boot\x86\pxelinux.cfg\graphics.conf

Step Four– Add new boot options

If you can boot into the new menu and still load WDS then we are ready to add our Linux distros and other tools. If not, go back to step one and check everything.

This stage is relatively easy. It is just a case of putting the relevant netboot files for your preferred distribution in to the \Boot\x86\Linux folder and then adding a menu option for them. You can find more info on where to get these from on the official WDSLinux wiki. I’ll show you a more generic way of doing things using Debian as an example

  • Create a new subfolder
  • \Boot\x86\Linux\Debian\
  • Download the netboot files (initrd.gz and linux) from a Debian mirror
  • Copy them into the Debian subfolder
  • Create a menu entry for them in \Boot\x86\pxelinux.cfg\default
  • LABEL debian6Netinstall
  • menu label ^Debian 6-0 Net-install
  • # Load the correct kernel
  • kernel /Linux/Debian/Linux
  • # Boot options
  • append priority=low vga=normal initrd=/Linux/Debian/initrd.gz

That’s all there is to it. As long as you download the correct files and boot the correct boot options on the append line of the menu, you should be OK.

What if I need 64-bit options

This is easy too just replicate everything we did in \Boot\x86 into \Boot\x64. Don’t forget to change the WDS Server boot program for the x64 architecture (as shown in step 2) to \Boot\x64\pxelinux.com

Taking it further

Hopefully you are reading this because you have numerous ideas of what you could boot to. To help you along I’ve included my current default menu as well as adding sub-menus for Linux and Tools. Most of them were fairly straightforward as they had special PXE version with instructions on their website, e.g. GParted & Clonezilla

default

DEFAULT      vesamenu.c32

PROMPT       0

 

MENU TITLE PXE Boot Menu (x86)

MENU INCLUDE pxelinux.cfg/graphics.conf

MENU AUTOBOOT Starting Local System in 8 seconds

 

# Option 1 – Exit PXE Linux & boot normally

LABEL bootlocal

menu label ^Boot Normally

menu default

localboot 0

timeout 80

TOTALTIMEOUT 9000

# Option 2 – Run WDS

LABEL wds

MENU LABEL ^Windows Deployment Services

KERNEL pxeboot.0

# Go to Linux sub-menu

LABEL linux

MENU LABEL ^Linux Distros

KERNEL vesamenu.c32

APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/linux.menu

# Go to Tools sub-menu

LABEL tools

MENU LABEL ^Tools

KERNEL vesamenu.c32

APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/tools.menu

# Exit PXE Linux

LABEL Abort

MENU LABEL E^xit

KERNEL abortpxe.0

 

linux.menu (save in same place default)

MENU TITLE Install a Linux Distro

 

LABEL debian6.0-amd64-Netinstall

menu label ^Debian 6-0 amd64-Net-install:

kernel /Linux/Debian-Net-Install-amd64/Linux

append priority=low vga=normal initrd=/Linux/Debian-Net-Install-amd64/initrd.gz

 

LABEL Centos5.0-Install

menu label ^Centos 5-0 32bit install:

kernel /Linux/Centos-5.0-32-bit/vmlinuz

APPEND ks initrd=Linux/Centos-5.0-32-bit/initrd.img ramdisk_size=100000

 

LABEL Debian-5.08-Installer

menu label ^Install 5.08 (Lenny)

kernel /Linux/debian-installer/i386/linux

append vga=normal debian-installer/allow_unauthenticated=true  initrd=/Linux/debian-installer/i386/initrd.gz

 

LABEL Main Menu

MENU LABEL ^Back to Main Menu

KERNEL vesamenu.c32

APPEND pxelinux.cfg/default

tools.menu (save in same place default)

MENU TITLE Tools

 

LABEL memtest

menu label ^Memory Test: Memtest86+ v4.20

kernel \Linux\memtest\memtestp

LABEL Clonezilla Live

MENU LABEL ^Clonezilla Live

kernel \Linux\Clonezilla\vmlinuz

append initrd=\Linux\Clonezilla\initrd.img boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run=”ocs-live-general” ocs_live_extra_param=”” ocs_live_keymap=”” ocs_live_batch=”no” ocs_lang=”” vga=788 nosplash fetch=http://192.0.0.24:81/RemoteInstall/Boot/x86/Linux/Clonezilla/filesystem.squashfs

LABEL gparted

MENU LABEL ^GParted Live

kernel \Linux\gparted\vmlinuz

append initrd=\Linux\gparted\initrd.img boot=live config  noswap noprompt  nosplash  fetch=http://192.0.0.24:81/RemoteInstall/Boot/x86/Linux/GParted/filesystem.squashfs

TEXT HELP

GParted live version: 0.8.1-3. Live version maintainer: Steven Shiau

Disclaimer: GParted live comes with ABSOLUTELY NO WARRANTY

ENDTEXT

LABEL Main Menu

MENU LABEL ^Back to Main Menu

KERNEL vesamenu.c32

APPEND pxelinux.cfg/default

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *