PXE and Kickstart, Automated Installations for Linux via WDS

Today I decided to setup automated installations for Linux distros (RHEL, Fedora, CentOS), similar to how we deploy our Windows installations via PXE.  Since we already had WDS running for installing Windows, it was just a matter of reconfiguring WDS, setting up the necessary structure and kickstart files for our automated Linux installations.  While I do not cover the initial WDS installation process, I will attempt to go over the steps performed after the basic WDS install (native or mixed). 

What you will need:

  • Windows server running WDS (and working via DHCP).
  • A recent copy of SYSLINUX (extracted to a folder somewhere on the WDS server).
  • An HTTP or anonymous FTP server to hold your installation media.

Currently when I boot my computer with PXE enabled, I am prompted to hit F12 for network boot.  When I press F12, I am prompted by “Windows Boot Manager” to select my boot images that I setup in WDS.  Since I can’t install Linux images directly using the WDS interface, an alternative boot image is necessary.  That is where SYSLINUX/PXELINUX takes over.

Pre-Setup

  • Create the necessary directory structure inside the WDS RemoteInstall directory (this was specified during the WDS installation).
    • Inside the x86 folder (RemoteInstall\Boot\x86\), create the following folders (including pxelinux.cfg):
      • conf
      • img
      • knl
      • pxelinux.cfg

Preparing Installation Media

  • Setup an FTP server to hold your installation media (HTTP works also): Currently the average size of a Red Hat distribution is about 5GB, so make sure the server you select will have the necessary disk space. You will need separate installation media for both distribution specific 32bit and 64bit installs.  If you want Fedora 9, CentOS 5.2, and RHEL 5.2 images (both 32bit and 64bit), that will be about 30GB.  As long as you’re not archiving old distributions, this should not be an issue.
    • On my FTP server in the root/path, I created a directory for each of my installation media.  Also, creating a standard naming convention will help with editing the configuration files later and any case sensitivity issues.  Example: My directory names are DistroVersion_arc (Fedora9_32bit), as you will see later on.
    • Copy the entire installation dvd media to the corresponding directories you created (not the .iso, extract its entire contents).
  • In the FTP root directory for the media you copied, create a kickstart file (ks.cfg).  (Example:  ftp://ftpserver.domain.com/Fedora9_32bit/ks.cfg)  I have included example kickstart files at the bottom of this article.
  • Once you have copied the installation media for a distro to your FTP server, you need to copy 2 files from that specific distro media to your WDS server.
    • From the (installation media\images\pxeboot) directory, copy the following:
      • Copy vmlinuz to the following directory on the WDS server (RemoteInstall\Boot\x86\knl\).  Rename the file to an identifying name such as vmlinuz-fedora9-32bit.
      • Copy initrd.img to the following directory on the WDS server (RemoteInstall\Boot\x86\img\).  Rename the file to an identifying name such as initrd-fedora9-32bit.

When it comes time to configure your option menus, you will need to specify these files for each version/distro you plan on making available.

Configuring WDS

  • From inside the downloaded SYSLINUX archive, copy the following files:
    • pxelinux.0 from the (syslinux\core) directory to your (RemoteInstall\Boot\x86\) directory on the WDS server.
    • menu.c32 and vesamenu.c32 from the (syslinux\com32\menu) directory to your (RemoteInstall\Boot\x86\) directory on the WDS server.
  • Inside the (RemoteInstall\Boot\x86\) directory, create copies of the following files, rename them accordingly (you can copy paste then rename):
    • Make a copy of pxeboot.n12, save it as pxeboot.0
    • Make a copy of abortpxe.com, save it as abortpxe.0
  • Inside (RemoteInstall\Boot\x86\pxelinux.cfg\), create a file called default.  This will be the initial menu you see during PXE boot, edit the file and give it the following contents:
       # File: wdspath\RemoteInstall\Boot\x86\pxelinux.cfg\default
       # Default boot option to use
       DEFAULT menu.c32
       TIMEOUT 50
       # Prompt user for selection
       PROMPT 0
       # Menu Configuration
       MENU WIDTH 80
       MENU MARGIN 10
       MENU PASSWORDMARGIN 3
       MENU ROWS 12
       MENU TABMSGROW 18
       MENU CMDLINEROW 18
       MENU ENDROW 24
       MENU PASSWORDROW 11
       MENU TIMEOUTROW 20
       MENU TITLE Main Menu
 
       # Menus
       # Windows
	LABEL Windows
	MENU LABEL Windows Installer
	KERNEL pxeboot.0
       # x86
       LABEL x86
         MENU LABEL Linux 32bit Installs (x86)
         KERNEL menu.c32
         APPEND conf/x86.conf
       # x64
       LABEL x64
         MENU LABEL Linux 64bit Installs (x64)
         KERNEL menu.c32
         APPEND conf/x64.conf
	# Windows
	LABEL Exit
	MENU LABEL Exit
	KERNEL abortpxe.0
  • Now you need to create the sub-menu configuration files for your 32 and 64 bit installs that you specified in your default file (RemoteInstall\Boot\x86\conf\x86.conf and RemoteInstall\Boot\x86\conf\x64.conf respectively).  These files will list the available distros to install, and the path to your copied kernel\image files, including your kickstart file which contains the path for your FTP or HTTP installation media.  Each option needs to point to the specific kernel and image that was created from the installation media earlier.
       # File: wdspath\RemoteInstall\Boot\x86\conf\x86.conf
       # Default boot option to use
       DEFAULT menu.c32
       # Prompt user for selection
       PROMPT 0
       # Menu Configuration
       MENU WIDTH 80
       MENU MARGIN 10
       MENU PASSWORDMARGIN 3
       MENU ROWS 12
       MENU TABMSGROW 18
       MENU CMDLINEROW 18
       MENU ENDROW 24
       MENU PASSWORDROW 11
       MENU TIMEOUTROW 20
       MENU TITLE Linux32Bit (x86) OS Selection
       # Return to Main Menu
       LABEL MainMenu
         MENU DEFAULT
         MENU LABEL ^Main Menu
         KERNEL menu.c32
       #
       # Blank boots
       #
       LABEL Fedora 9 32bit
         MENU LABEL Fedora 9 32bit
         KERNEL knl/vmlinuz-fedora9-x86
         APPEND initrd=img/initrd-fedora9-x86.img ks=ftp://ftpserver.mydomain.com/Fedora9_32bit/ks.cfg
       # File: wdspath\RemoteInstall\Boot\x86\conf\x64.conf
       # Default boot option to use
       DEFAULT menu.c32
       # Prompt user for selection
       PROMPT 0
       # Menu Configuration
       MENU WIDTH 80
       MENU MARGIN 10
       MENU PASSWORDMARGIN 3
       MENU ROWS 12
       MENU TABMSGROW 18
       MENU CMDLINEROW 18
       MENU ENDROW 24
       MENU PASSWORDROW 11
       MENU TIMEOUTROW 20
       MENU TITLE 64Bit (x64) OS Choice
       # Return to Main Menu
       LABEL MainMenu
         MENU DEFAULT
         MENU LABEL ^Main Menu
         KERNEL menu.c32
       #
       # Blank boots
       #
       LABEL CentOS 5.2 64bit
         MENU LABEL CentOS 5.2 64bit
         KERNEL knl/vmlinuz-centos52-x64
         APPEND initrd=img/initrd-centos52-x64.img ks=ftp://ftpserver.mydomain.com/CentOS52_64bit/ks.cfg
       LABEL Fedora 9 64bit
         MENU LABEL Fedora 9 64bit
         KERNEL knl/vmlinuz-fedora9-x64
         APPEND initrd=img/initrd-fedora9-x64.img ks=ftp://ftpserver.mydomain.com/Fedora9_64bit/ks.cfg
       LABEL RHEL 5.2 64bit
         MENU LABEL RHEL 5.2 64bit
         KERNEL knl/vmlinuz-rhel52-x64
         APPEND initrd=img/initrd-rhel52-x64.img ks=ftp://ftpserver.mydomain.com/RHEL52_64bit/ks.cfg
  • Lastly, set WDS to use the pxelinux.0 boot image.  If you need to get to the normal WDS boot image, you can use the Windows Installer option created in your default menu.
    • Open Windows Deployment Services on your WDS server.  Right click your server -> Properties.  Under the Boot tab, set the Default boot program for x86 architecture (Boot\x86\pxelinux.0), or browse to the pxelinux.0 file we created earlier.  You may leave the other architectures alone or change as you see fit.

wds_properties

**For Windows 2008 R2 installations you must set the bootimage via command-line as followed:

wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x86
wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x64
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x64

Finished Result

http://www.ohjeah.net/wp-content/uploads/2008/10/linux_pxe.swf

Example Kickstart File

Here is an example kickstart file for Fedora 9.  For each new distro I normally perform a cd install with my desired options, then use the resulting /root/anaconda-cfg.ks for assistance.  Note that the kickstart file specifies the FTP path of your installation media that you created in the beginning of this article.

#Version=F9
#32bit
install
text
url --url ftp://ftpserver.mydomain.com/Fedora9_32bit
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$X.qPQYdk$L.YRbuORBd30
firewall --disabled
authconfig --enableshadow --enablemd5 --passalgo=sha512
selinux --disabled
timezone America/Chicago
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
clearpart --all --drives=sda
part /boot --fstype ext3 --size=1000
part swap --size=2048
part / --fstype ext3 --size=1 --grow
%packages
@editors
@development-tools
@text-internet
@core
@base
@hardware-support
@admin-tools
grub
openldap
openldap-devel
openldap-client
net-snmp*
ntp

59 thoughts on “PXE and Kickstart, Automated Installations for Linux via WDS

  1. Chadley

    By the way thanks a million for this this it works briliantly, and I have learnt a whole lot from you.
    I really appreciate the effort you have put in this how-to.

  2. Jiljith C.P

    Unbelievable! It works and straight away too!
    Very detailed instructions with the logic. Awesome!
    10 out of 10.

    Thanks a lot.

  3. teleute

    This is exactly what I was trying to do…thank you! However, I followed the instructions exactly (WDS is on WS2008 64-bit, so I copied all of the above files into the x64 directory as well as x86, and adjusted the boot menu in the last step for that as well) and yet it’s behaving exactly as before – going straight into Windows install. If you have any thoughts, I’d greatly appreciate it. Otherwise, thanks again for the walkthrough, and hopefully I can figure out what I need to do to get it to work!

  4. jro Post author

    Did you try the setup just using the x86 directory/paths as I described? Or did you have an issue with that first and that is why you tried the x64 dir?

  5. teleute

    I did just the x86 first, then added the x64 when that didn’t work (and the ia64 when *that* didn’t work). 🙂

  6. teleute

    Yes. I tell the machine I’m trying to install to to PXE boot. It waits about 5 seconds, then does exactly what it did before – shows “Windows is loading files” and the IP of the WDS server. And then it starts the Windows installation procedure. (It’s not RIS anymore in 2008, IIRC)

  7. teleute

    Hmmm…I did have that, but I wiped it out and tried again, and restarted. Now I get the error “Windows failed to start. A recent hardware or software change might be the cause” etc…

    File: \windows\system32\winload.efi

    Status: 0xc0000225

    Info: The selected entry could not be loaded because the application is missing or corrupt.

  8. teleute

    Well…*sigh* I tested this just now when trying to deploy to a non-EFI machine and it’s fine (well, haven’t tweaked all the options, but the general framework is good). Most of the machines I have to deploy to are EFI, though. EFI’s caused me a bunch of issues in other areas, too…

    I’m really grateful for your help to this point, and this great walkthrough. If you have any thoughts on the EFI issue that’d be amazing, but I don’t expect a thing. 🙂

  9. jro Post author

    Are you running your WDS install in native or mixed mode? I know 2008 has some support for EFI though I’ve never attempted it myself. Pretty sure it has to be in native mode though.

  10. teleute

    Oh, and the Windows deployment from this server to the EFI machines worked fine before trying to add the Linux stuff. So it’s probably the linux boot loader conflicting somehow, I’d think…

  11. jro Post author

    Are you trying to boot Itanium/Macs or? Unfortunately I have no EFI systems to try this with 8(

  12. teleute

    It’s a Bladecentre HS22. Also, I rebooted and tried again, and now it’s back to just booting straight into the WDS and ignoring the existence of Linux altogether. *sigh* These Blades are a nightmare with Linux…

  13. jro Post author

    I wish I had one to play with but unfortunately we’ve gone more of the Virtualization route 🙁 I’ll keep poking around, let me know if you figure it out!

  14. teleute

    Will do! Thanks so much.

    One more quick question, if you’re not sick of me…;-) And this one might actually be helpful to other future readers. Can the paths to the image, kickstart file, etc… be paths local to the WDS machine, rather than ftp?

  15. teleute

    nm on the path issue, btw. 🙂 Still hacking away at getting the EFI machines on board. I think the error message was a red herring – every other time it’s booted straight into WDS. So for some reason it’s just not seeing the Linux stuff at all. Anyway, I’ll let you know if I find anything more out.

  16. jro Post author

    Yea, pxelinux won’t work for efi images. Everything I’ve read seems to recommend elilo.efi for the boot image. Might want to give that a try.

    These links might be helpful:
    http://syslinux.zytor.com/archives/2003-September/002468.html
    http://listman.redhat.com/archives/kickstart-list/2003-July/msg00115.html
    http://fedoraproject.org/wiki/QA:Testcase_UEFI_pxeboot
    http://www.klabs.be/~fpiat/linux/debian/di-netboot-assistant/
    http://www.gossamer-threads.com/lists/engine?do=post_view_printable;post=9223;list=syslinux

    Guess I’ll have to add a elilo section once I pickup a efi machine.

  17. teleute

    Sweet…thank you so much! I wasn’t searching for IA64 because technically these aren’t IA machines, but hopefully the same thing will work for them. With any luck I’ll get around to trying this today, and I’ll let you know.

  18. teleute

    I’m not sure if I can describe this right, but I’ll try. I don’t think the Blade is even looking for a boot image at all. I put the elilo.efi image as the setting for ia64 machines, and still the Blade went straight to Windows. Then put it for all of them, and the Blade went straight to Windows. A non-Blade went to elilo.efi, so it’s definitely in there and being read in general. In fact, if I put in a non-existent path, the other machines all show that they’re trying to read garbage.com or whatever I’ve put in there, and they hang. The Blade just goes to Windows every single time. I’m writing IBM today, but I’m not holding my breath on them supporting this…*sigh*

  19. teleute

    Well, you’ll be happy to know I’ve given up on EFI. 😉 There’s a slightly buried option when you set the boot order called “legacy only”. I say buried because it didn’t actually appear – I had to go into “Add Boot Option” and scroll through a tonne of stuff to see it. Anyway, put that first and then everything works fine, and that’s how I’m leaving it. Thanks for all your help!

  20. jack

    The Above steps I have tried on Microsoft WDS 2008 and its works!!!!, but I have small issue when I select EXIT menu to abortpxe.0 it wont go to next boot, it hangs there.. I have copied the abortpxe.com to abortpxe.0

  21. Niels

    Hello,

    First of all, very nice tutorial!
    im trying with the debian netinstall(debian-503-i386-netinst.iso), extracted the iso to my apache http server (wich is reachable)
    in conf/x86.conf i have:
    LABEL Debian Lenny new 2.6.26.2 32bit
    MENU LABEL Debian Lenny new 2.6.26.2 32bit
    KERNEL knl/vmlinuz
    APPEND initrd=img/initrd.img ks=http://10.4.3.72/debian-503-i386-netinst/preseed.cfg
    i use the pxe boot and i can choose for that version, it loads vmlinux and initrd.img and it starts with the debian setup. But it isnt going automatically! and i dont know what im doing wrong.. plus when i go tru the setup it suddenly ask for mounting cdrom, but its a netinstall! those 2 problems i have wich i dont know how to fix.
    this is the layout of my preseed.cfg (also tried to name is ks.cfg)
    #### Contents of the preconfiguration file (for lenny)
    ### Localization
    # Locale sets language and country.
    d-i debian-installer/locale string en_US

    # Keyboard selection.
    #d-i console-tools/archs select at
    d-i console-keymaps-at/keymap select us
    # Example for a different keyboard architecture
    #d-i console-keymaps-usb/keymap select mac-usb-us

    ### Network configuration
    # netcfg will choose an interface that has link if possible. This makes it
    # skip displaying a list if there is more than one interface.
    d-i netcfg/choose_interface select auto

    # To pick a particular interface instead:
    #d-i netcfg/choose_interface select eth1

    # If you have a slow dhcp server and the installer times out waiting for
    # it, this might be useful.
    d-i netcfg/dhcp_timeout string 60

    # If you prefer to configure the network manually, uncomment this line and
    # the static network configuration below.
    #d-i netcfg/disable_dhcp boolean true

    # If you want the preconfiguration file to work on systems both with and
    # without a dhcp server, uncomment these lines and the static network
    # configuration below.
    #d-i netcfg/dhcp_failed note
    #d-i netcfg/dhcp_options select Configure network manually

    # Static network configuration.
    #d-i netcfg/get_nameservers string 192.168.1.1
    #d-i netcfg/get_ipaddress string 192.168.1.42
    #d-i netcfg/get_netmask string 255.255.255.0
    #d-i netcfg/get_gateway string 192.168.1.1
    #d-i netcfg/confirm_static boolean true

    # Any hostname and domain names assigned from dhcp take precedence over
    # values set here. However, setting the values still prevents the questions
    # from being shown, even if values come from dhcp.
    d-i netcfg/get_hostname string unassigned-hostname
    d-i netcfg/get_domain string unassigned-domain

    # Disable that annoying WEP key dialog.
    d-i netcfg/wireless_wep string
    # The wacky dhcp hostname that some ISPs use as a password of sorts.
    #d-i netcfg/dhcp_hostname string radish

    # If non-free firmware is needed for the network or other hardware, you can
    # configure the installer to always try to load it, without prompting. Or
    # change to false to disable asking.
    #d-i hw-detect/load_firmware boolean true

    ### Network console
    # Use the following settings if you wish to make use of the network-console
    # component for remote installation over SSH. This only makes sense if you
    # intend to perform the remainder of the installation manually.
    #d-i anna/choose_modules string network-console
    #d-i network-console/password password r00tme
    #d-i network-console/password-again password r00tme

    ### Mirror settings
    # If you select ftp, the mirror/country string does not need to be set.
    d-i mirror/protocol string ftp
    # d-i mirror/country string manual
    d-i mirror/http/hostname string http.us.debian.org
    etc…

    Anyone who can help me? (i followed the tuturial three times, just to be sure!)

  22. Jimbo

    Right, followed all the steps and fell at the last hurdle.. canot change the boot option on wds to use the pxelinux.0 boot image. Can change the default boot image, when I click select there are none listed. Under Boot images folder I can only add the wim type.

    Does this work on 2008 R2? Fresh install in it’s own domain, PXE boot works fine but only windows.

    Help!

    Cheers, Jim

  23. Simon

    In Windows 2008 R2 there is a small change(I’m sure they call it a fix…) that makes it a bit harder to change the Default Boot Program. Luckily you can still edit the Boot Programs via Command Prompt w/ Admin Privileges.

    Check current WDS config for Boot Program Policy with: wdsutil /Get-Server /show:config

    Setting x86 Default Boot Program:
    wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x86

    Setting x64 Default Boot Program:
    wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x64

    Enjoy! 🙂

  24. Pingback: Interesting.. at Ohjeah!

  25. jro Post author

    Thanks for the 2008 R2 info!

    One of these days I’ll get around to updating this.

  26. tom

    running win 2008 R2 wds, everything works great for windows installs but after i make the changes in this walk through it still boots right to the \x86\images\boot.wim and i can’t get the new menu to come up.

    this is the /show:config

    Windows Deployment Services Management Utility [Version 6.1.7600.16385]
    Copyright (C) Microsoft Corporation. All rights reserved.

    SETUP INFORMATION FOR SERVER
    [—————————————————————————–]

    Server State:
    OS version: 6.1
    WDS operational mode: Native

    Installation State:
    RemoteInstall location: G:\RemoteInstall
    RemoteInstall share up-to-date: Yes
    Boot files installed:
    x86 – Yes
    x64 – Yes
    ia64 – No

    [—————————————————————————–]

    CONFIGURATION INFORMATION FOR SERVER
    [—————————————————————————–]

    Server Authorization:
    Authorization state: Not Authorized

    Answer Policy:
    Answer clients: Yes
    Answer only known clients: No
    Response delay: 2 seconds

    Active Directory Use Policy:
    Preferred DC:
    Preferred GC:
    Prestage devices using MAC: No
    New computer naming policy: %61Username%#
    Domain search order: Global Catalog Only
    New computers join domain: Yes

    New Computer OU:
    OU type: Server Domain
    OU: CN=Computers,DC=research,DC=att,DC=com

    DHCP Configuration:
    DHCP service status: Not Installed
    DHCP option 60 configured:

    PXE Bind Policy:
    Use DHCP ports: Yes
    Rogue detection: Disabled
    RPC port: 5040

    Interface Bind Policy:
    Policy: Exclude Registered
    Registered interfaces:

    Boot Program Policy:
    Known client PXE prompt policy: OptOut
    New client PXE prompt policy: OptOut
    Allow N12 for new clients:
    Architecture discovery: Enabled
    Reset boot program: No
    Default boot programs:
    x86 – boot\x86\pxelinux.0
    x64 – boot\x64\pxeboot.com
    ia64 – boot\ia64\bootmgfw.efi
    Default N12 boot programs:
    x86 – boot\x86\pxeboot.n12
    x64 – boot\x64\pxeboot.n12
    ia64 – boot\ia64\bootmgfw.efi

    Banned GUIDs list:

    Boot Image Policy:
    Default image type for x64 clients: Both
    Default boot images:
    x86 –
    x64 –
    ia64 –

    WDS Client Policy:
    Logging policy:
    Enabled: No
    Logging level: Info

    Unattend policy:
    Enabled: No
    Command-line precedence: No
    WDS unattend files:
    x86 –
    x64 –
    ia64 –

    OSChooser Policy:
    Menu name:

    Server Automatic Refresh Policy:
    Refresh period: 900 seconds

    BCD Refresh Policy:
    Enabled: No
    Refresh period: 60 minutes

    Auto-Add Policy:
    Policy: Disabled
    Poll interval: 10 seconds
    Max retry count: 2160 times
    Message to pending clients:
    Retention period:
    Approved devices: 30 days
    Other devices: 1 days
    Defaults for x86:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes
    Defaults for x64:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes
    Defaults for ia64:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes

    WDS PXE Providers:
    Name: BINLSVC
    Path: C:\Windows\system32\binlsvc.dll
    Order: 1
    Critical: Yes

    WDS Transport Server Policy:
    IPv4 source: Range
    Start address: 239.0.0.1
    End address: 239.0.0.254
    IPv6 source: Range
    Start address: FF15::1
    End address: FF15::FF
    Start port: 64001
    End port: 65000
    Network profile:
    Multicast session policy:
    Slow client handling policy: None
    AutoDisconnect threshold: 256 KBps
    Multistream stream count: 2
    Slow client fallback: Yes

    [—————————————————————————–]

    The command completed successfully.

    any help would be appreciated

  27. jro Post author

    What are you using for dhcp?

    In dhcp you should have boot option 66 pointing to your WDS server, and boot option 67 pointing to the image, say boot\x86\pxelinux.0

  28. jro Post author

    Simon also posted a comment above that might help you, about setting the default boot image.

  29. tom

    we are using windows DHCP with 66 and 67 and 67 is pointing to boot\x86\pxelinux.0
    I saw Simons post and that helped with setting the default boot image. This was done prior to the previous post.

  30. jro Post author

    Guess it’s time to make a 2008 R2 guide 🙂

    Going to try and do this right now, hopefully wont take too long.

  31. tom

    thanks, i’m not too sure what i missed, i have a colleague going over your walk through right now to see if i misses something

  32. jro Post author

    Pretty easy fix, in addition to what Simon mentioned earlier you need to set the N12bootimage as well.

    wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x86
    wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x64
    wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x86
    wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x64

    Updated the post as well, thanks. It’s up to you if you want to duplicate the entire setup with the boot\x64 directory so that your x86 and x64 architectures don’t share the same structure, but I don’t think it will cause any issues (maybe for win7 deployments).

  33. Robert T

    I don’t know what went wrong but I get:

    Trying to load: pxelinux.cfg/default
    Unable to locate configuration file

    I have the default file saved in the pxelinux.cfg directory. Any help to shed some light on this would be grateful!

    DHCP Configuration:
    DHCP service status: Running
    DHCP option 60 configured: Yes

    PXE Bind Policy:
    Use DHCP ports: No
    Rogue detection: Disabled
    RPC port: 5040

    Interface Bind Policy:
    Policy: Exclude Registered
    Registered interfaces:

    Boot Program Policy:
    Known client PXE prompt policy: OptIn
    New client PXE prompt policy: OptIn
    Allow N12 for new clients:
    Architecture discovery: Enabled
    Reset boot program: No
    Default boot programs:
    x86 – boot\x86\pxelinux.0
    x64 – boot\x86\pxelinux.0
    ia64 – boot\ia64\bootmgfw.efi
    Default N12 boot programs:
    x86 – boot\x86\pxelinux.0
    x64 – boot\x86\pxelinux.0
    ia64 – boot\ia64\bootmgfw.efi

    Banned GUIDs list:

    Boot Image Policy:
    Default image type for x64 clients: Both
    Default boot images:
    x86 –
    x64 –
    ia64 –

    WDS Client Policy:
    Logging policy:
    Enabled: No
    Logging level: Info

    Unattend policy:
    Enabled: No
    Command-line precedence: No
    WDS unattend files:
    x86 –
    x64 –
    ia64 –

    OSChooser Policy:
    Menu name:

    Server Automatic Refresh Policy:
    Refresh period: 900 seconds

    BCD Refresh Policy:
    Enabled: No
    Refresh period: 60 minutes

    Auto-Add Policy:
    Policy: Disabled
    Poll interval: 10 seconds
    Max retry count: 2160 times
    Message to pending clients:
    Retention period:
    Approved devices: 30 days
    Other devices: 1 days
    Defaults for x86:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes
    Defaults for x64:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes
    Defaults for ia64:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes

    WDS PXE Providers:
    Name: BINLSVC
    Path: C:\Windows\system32\binlsvc.dll
    Order: 1
    Critical: Yes

    WDS Transport Server Policy:
    IPv4 source: Range
    Start address: 239.0.0.1
    End address: 239.0.0.254
    IPv6 source: Range
    Start address: FF15::1
    End address: FF15::FF
    Start port: 64001
    End port: 65000
    Network profile:
    Multicast session policy:
    Slow client handling policy: None
    AutoDisconnect threshold: 256 KBps
    Multistream stream count: 2
    Slow client fallback: Yes

    [—————————————————————

    The command completed successfully.

    C:\Users\dcadmin>wdsutil /Get-Server /show:config

    Windows Deployment Services Management Utility [Version 6.1.7600
    Copyright (C) Microsoft Corporation. All rights reserved.

    SETUP INFORMATION FOR SERVER
    [—————————————————————

    Server State:
    OS version: 6.1
    WDS operational mode: Native

    Installation State:
    RemoteInstall location: C:\RemoteInstall
    RemoteInstall share up-to-date: Yes
    Boot files installed:
    x86 – Yes
    x64 – Yes
    ia64 – No

    [—————————————————————

    CONFIGURATION INFORMATION FOR SERVER
    [—————————————————————

    Server Authorization:
    Authorization state: Not Authorized

    Answer Policy:
    Answer clients: No
    Answer only known clients: No
    Response delay: 0 seconds

    Active Directory Use Policy:
    Preferred DC:
    Preferred GC:
    Prestage devices using MAC: No
    New computer naming policy: %61Username%#
    Domain search order: Global Catalog Only
    New computers join domain: Yes

    New Computer OU:
    OU type: Server Domain
    OU: CN=Computers,DC=corp,DC=dchoc,DC=com

    DHCP Configuration:
    DHCP service status: Running
    DHCP option 60 configured: Yes

    PXE Bind Policy:
    Use DHCP ports: No
    Rogue detection: Disabled
    RPC port: 5040

    Interface Bind Policy:
    Policy: Exclude Registered
    Registered interfaces:

    Boot Program Policy:
    Known client PXE prompt policy: OptIn
    New client PXE prompt policy: OptIn
    Allow N12 for new clients:
    Architecture discovery: Enabled
    Reset boot program: No
    Default boot programs:
    x86 – boot\x86\pxelinux.0
    x64 – boot\x86\pxelinux.0
    ia64 – boot\ia64\bootmgfw.efi
    Default N12 boot programs:
    x86 – boot\x86\pxelinux.0
    x64 – boot\x86\pxelinux.0
    ia64 – boot\ia64\bootmgfw.efi

    Banned GUIDs list:

    Boot Image Policy:
    Default image type for x64 clients: Both
    Default boot images:
    x86 –
    x64 –
    ia64 –

    WDS Client Policy:
    Logging policy:
    Enabled: No
    Logging level: Info

    Unattend policy:
    Enabled: No
    Command-line precedence: No
    WDS unattend files:
    x86 –
    x64 –
    ia64 –

    OSChooser Policy:
    Menu name:

    Server Automatic Refresh Policy:
    Refresh period: 900 seconds

    BCD Refresh Policy:
    Enabled: No
    Refresh period: 60 minutes

    Auto-Add Policy:
    Policy: Disabled
    Poll interval: 10 seconds
    Max retry count: 2160 times
    Message to pending clients:
    Retention period:
    Approved devices: 30 days
    Other devices: 1 days
    Defaults for x86:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes
    Defaults for x64:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes
    Defaults for ia64:
    Referral server:
    Boot program path:
    WDS client unattend file path:
    Boot image path:
    User: Domain Admins
    Join rights: Full
    Join domain: Yes

    WDS PXE Providers:
    Name: BINLSVC
    Path: C:\Windows\system32\binlsvc.dll
    Order: 1
    Critical: Yes

    WDS Transport Server Policy:
    IPv4 source: Range
    Start address: 239.0.0.1
    End address: 239.0.0.254
    IPv6 source: Range
    Start address: FF15::1
    End address: FF15::FF
    Start port: 64001
    End port: 65000
    Network profile:
    Multicast session policy:
    Slow client handling policy: None
    AutoDisconnect threshold: 256 KBps
    Multistream stream count: 2
    Slow client fallback: Yes

    [—————————————————————

    The command completed successfully.

  34. Matthew

    Awsome guide, i am just trying this out now myself.

    i am lost though, i am doing centos 5.5, and in the x86.conf file, in your example you have this line:

    APPEND initrd=img/initrd-fedora9-x86.img ks=ftp://10.0.1.171//CentOS/86/ks.cfg

    i am confused with the initrd-fedora9-x86.img part since i don’t recall such a file for CentOS or being asked to make one….

    What am i overlooking?

  35. Matthew

    okay blonde moment i guess, i assume you are refering to the initrd.img file found in the pxeboot folder

  36. Matthew

    Perhaps that isnt it, i get as far as

    Tryng to load: pxelinux.cfg/default ok

    but then i get Boot failed: press a key to retry or wait for reboot

    this is on the server i am trying to boot over the network.

    Using server 2008 r2 x64 in Vm, windows booting works fine, but i need centos for an older server that only boots from floppies.

  37. iqbal

    hello friends…thanx for the tutorial ..its awesome
    my Rhel5.3 boot properly but after some time installation stopped..error is ftp cant retrieve the image2.img…..plz help

  38. newbies

    i have problem with f12….unable to read package metadata..can u give me solution?please…help me for my final project

  39. Viper753

    I was wondering if you know how I can add an option in the WDS Boot Manager that will default to the Hard drive OS? Currently when I enable the WDS the only options I have are for the images. I would like to see and entry in the Boot Manager that says “Boot to OS” and it be the default. If a selection for an image isnt made then it loads from the Harddrive. I am migrating from a FOG based imaging system (Which works AWESOME!) to the WDS system.

  40. teleute

    Just a note for those that may now be trying this with RHEL 6 (and possibly Fedora? Not sure if they made the same changes). They’ve changed things in their install so that instead of each piece of software having a “Packages” directory, everything’s in one big Packages directory and the individual software symlinks to it. This makes sense, since the other way there was quite a bit of duplication. However, that means if you were using the above instructions and were keeping everything on Windows, including your FTP, this no longer works. The PXE booting can all still be through Windows, but the actual ISO (or extracted ISO) has to be on Linux for that symlinking to function.

Leave a Reply

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