So, I wanted to do PXE for both Windows and Linux on the same network, but it’s not technically correct to have two PXE servers running on the same network. Soooo… It was either figuring out how to get Windows onto a UNIX tftp server, or using WinPE (the windows deployment service). I went with the later…
First I downloaded syslinux
(http://www.kernel.org/pub/linux/utils/boot/syslinux/) and stripped
out a couple of files I needed. core\pxelinux.0
com32\menu\vesamenu.c32 and com32\modules\chain.c32 were taken and
placed into F:\RemoteInstall\Boot\x86 and F:\RemoteInst4all\Boot\x64
In both \Boot\x86 & \Boot\x64, rename pxelinux.0 to pxelinux.com.
This makes pxelinux.0 become the default remote binary when WinPE
sends files across. Basically it ends up becoming a syslinux/pxelinux
setup.
Create a directory named “pxelinux.cfg” in the \boot\x86 & \boot\x64
directories.
Create a file named “default” in that directory… my default file was
setup to boot Windows 2008R2 & Linux of various configurations. Under
this article is the default file contents.
In the \boot\x86 & \boot\x64 directories, make a copy of pxeboot.n12,
and abortpxe.com and name it pxeboot.0 and abortpxe.0, respectively.
Since I’m using Windows 2008R2 WDS & not RIS, I had to go through the
commandline to change the configurations:
wdsutil /set-server /bootprogram:boot\x86\pxelinux.com /architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.com /architecture:x86
wdsutil /set-server /bootprogram:boot\x64\pxelinux.com /architecture:x64
wdsutil /set-server /N12bootprogram:boot\x64\pxelinux.com /architecture:x64
After everything, I took the Red Hat installation CD and extracted the
pxeboot images necessary. For Red Hat 5.5, it was on the CD in
images/pxeboot. First, make a directory in WDS-ROOT\Boot\x86\Linux &
WDS-Root\Boot\x64\Linux. In whatever method you desire, move the
files vmlinuz & initrd.gz to your WDS-ROOT\Boot\x86\Linux, or replace
x86 with x64 if your using a 64-bit version. Of course, you’ll have a
kickstart file location on the net to place in the APPEND portions
below 😉 Or you could place them in IIS on the Windows machine and
pass the URL through the APPEND. Note: I have a repo that handles
Kickstarts and RPMs.
WDS-ROOT\Boot\x64\pxelinux.cfg\default:
DEFAULT vesamenu.c32
PROMPT 0
NOESCAPE 1
ALLOWOPTIONS 0
MENU TITLE Deployment Services
# Menus
# Windows Deployment Services
LABEL wds
MENU LABEL Windows Deployment Services
MENU DEFAULT
KERNEL pxeboot.0
MENU BEGIN
MENU LABEL Linux
MENU TITLE Linux
MENU BEGIN
MENU LABEL Linux 32bit
MENU TITLE Linux 32bit
LABEL RHEL55-32-Base
MENU LABEL RHEL 5.5 Base
KERNEL Linux/vmlinuz-rhel55-x86
APPEND initrd=Linux/initrd-rhel55-x86.img
ks=http://MYREPOIP/RHEL55/RHEL55_x86_WDS.ks
LABEL RHEL-55-x86-HP580G5
MENU LABEL RHEL 5.5 HP580G5
KERNEL Linux/vmlinuz-rhel55-x86
APPEND initrd=Linux/initrd-rhel55-x86.img
ks=http://MYREPOIP/WDS/RHEL55_x86_HP580G5_WDS.ks
MENU END
MENU BEGIN
MENU LABEL Linux 64bit Configuration
MENU TITLE Linux 64bit Configuration
label RHEL55-64-Base
menu label RHEL 5.5 Base
KERNEL Linux/vmlinuz-rhel55-x64
APPEND initrd=Linux/initrd-rhel55-x64.img
ks=http://MYIP/WDS/RHEL55_x64_BASE_WDS.ks
label RHEL-55-x64-HP580G5
MENU LABEL RHEL 5.5 HP580G5
KERNEL Linux/vmlinuz-rhel55-x64
APPEND initrd=Linux/initrd-rhel55-x64.img
ks=http://MYREPOIP/RHEL55_64/WDS/RHEL55_x64_HP580G5_WDS.ks
#—
label RHEL-55-x64-PHYS
MENU LABEL RHEL 5.5 Physical Configuration
KERNEL Linux/vmlinuz-rhel55-x64
APPEND initrd=Linux/initrd-rhel55-x64.img
ks=http://MYREPOSERVER/kickstart/RHEL55_64/ks-files/WDS/RHEL5x_x64_PHYS__WDS_ABB.ks
MENU END
MENU END
A wonderful example of the “default” file, made by someone else on the
net, and I used this as reference:
DEFAULT vesamenu.c32
#MENU BACKGROUND pxelinux.cfg/mtsplash.jpg
PROMPT 0
NOESCAPE 0
ALLOWOPTIONS 0
TIMEOUT 200
MENU TITLE Boot Menu
LABEL Ghost_Client_UNDI
MENU LABEL ^1. Ghost Client UNDI
MENU DEFAULT
kernel memdisk
append keeppxe initrd=imz/Client_undi.imz
LABEL Ghost_Client_NDIS
MENU LABEL ^2. Ghost Client NDIS
kernel memdisk
APPEND keeppxe initrd=imz/Client_ndis.IMZ
MENU BEGIN
MENU LABEL ^3. Ghost Menu
MENU TITLE Ghost Menu
LABEL Ghost_UNDI
MENU LABEL ^1. Ghost 11.5 UNDI
kernel memdisk
append keeppxe initrd=imz/ghost_undi.imz
LABEL Ghost_NDIS
MENU LABEL ^2. Ghost 11.5 NDIS
kernel memdisk
append keeppxe initrd=imz/ghost_ndis.imz
LABEL Ghost_Ses_1
MENU LABEL ^3. Ghost Session 1 + Rename
kernel memdisk
append keeppxe initrd=imz/ghost_ses1.imz
LABEL Ghost_no_Rename
MENU LABEL ^4. Ghost Session 1 w/o Rename
kernel memdisk
append keeppxe initrd=imz/ghost_ses1_!ren.imz
LABEL Ghost_Create
MENU LABEL ^5. Ghost Create 1
kernel memdisk
append keeppxe initrd=imz/ghost_ses1_cap.imz
LABEL Ghost_JA
MENU LABEL ^6. Ghost -ja=1
kernel memdisk
append keeppxe initrd=imz/ghost_undi_ja.imz
MENU SEPARATOR
LABEL return
MENU INDENT 5
MENU LABEL ^Esc – Return to Main Menu
MENU EXIT
MENU END
LABEL DiskWipe
#gdisk 1 /del /all /y
#gdisk 1 /mbr /wipe /y
#gdisk 1 /cre /pri /for /q /y /r
#a bit redundant but effective.
MENU LABEL ^4. DiskWipe
menu passwd fakepasswd
kernel memdisk
append keeppxe initrd=imz/diskwipe.imz
MENU BEGIN
MENU LABEL ^5. Utils
MENU TITLE Utility Menu
MENU PASSWD fakepasswd
LABEL memtest
MENU LABEL ^1. Memory Test 86+
linux utils/memtest86+
LABEL Memory_Test_MicroSoft
MENU LABEL ^2. MicroSoft Windows Memory Diagnostic
kernel memdisk
append initrd=imz/ramtest.imz
LABEL Parted_Magic
MENU LABEL ^3. Parted Magic
kernel utils/pmagic/bzImage
append initrd=/utils/pmagic/initramfs load_ramdisk=1
prompt_ramdisk=0 rw sleep=10
LABEL Gdisk
MENU LABEL ^4. Gdisk
kernel memdisk
append keeppxe initrd=imz/gdisk.imz
MENU BEGIN
MENU LABEL ^5. Dell Diagnostics
MENU TITLE Dell Diagnostics Utilties
LABEL Dell_diag
MENU LABEL ^1. Dell Diagnostics (740 – 755)
kernel memdisk raw
append initrd=imz/diags.img
LABEL Dell_diag2
MENU LABEL ^2. Dell Diagnostics (240 – 620)
kernel memdisk
append keeppxe initrd=imz/DD.imz
LABEL Dell_diag3
MENU LABEL ^3. Dell Diagnostics (150 – 260)
kernel memdisk
append keeppxe initrd=imz/DD_old.imz
MENU SEPARATOR
LABEL return
MENU INDENT 5
MENU LABEL ^Esc – Return to Main Menu
MENU EXIT
MENU END
LABEL HDT
MENU LABEL ^6. HDT (Hardware Detction Tool)
KERNEL utils/hdt.c32
APPEND modules=utils/modules.pcimap pciids=utils/pci.ids
LABEL offline
MENU LABEL ^7. Offline NT Password & Registry Editor
kernel utils/cd080802/vmlinuz
append rw vga=1 initrd=utils/cd080802/initrd.cgz,utils/cd080802/scsi.cgz
MENU BEGIN
MENU LABEL ^8. Hard Drive Tools
MENU TITLE Hard Drive Tools
LABEL HDAT2
MENU LABEL ^1. HDAT2 (Hard Drive Utility)
kernel memdisk
append keeppxe initrd=imz/HDAT2.imz
LABEL salvation_hdd_scan_repair
MENU LABEL ^2. Salvation Scan and Repair
kernel memdisk
append initrd=utils/salvation_hdd_scan_repair.igz
LABEL dft
MENU LABEL ^3. IBM/Hitachi Drive Fitness Test
kernel memdisk
append initrd=utils/hd/ibm_hitachi/dft.igz
LABEL maxblast
MENU LABEL ^4. Maxtor Maxblast
kernel memdisk
append initrd=utils/hd/maxtor_quantum/maxblast.igz
LABEL powermax
MENU LABEL ^5. Maxtor PowerMax
kernel memdisk
append initrd=utils/hd/maxtor_quantum/powermax.igz
label SeaTools
MENU LABEL ^6. Seagate SeaTools
kernel memdisk
append keeppxe initrd=imz/seatools.imz
LABEL datalife
MENU LABEL ^7. Western Digital – Data Lifeguard
kernel memdisk
append initrd=utils/hd/western_digital/datalife.igz
LABEL dlgudma
MENU LABEL ^8. Western Digital – Data Lifeguard UDMA
kernel memdisk
append initrd=utils/hd/western_digital/dlgudma.igz
LABEL return
MENU INDENT 5
MENU LABEL ^Esc – Return to Previous Menu
MENU EXIT
MENU END
LABEL 3Com_NIC_Util
MENU LABEL ^9. 3Com NIC Util
kernel memdisk
append keeppxe initrd=imz/3com.imz
MENU SEPARATOR
LABEL return
MENU INDENT 5
MENU LABEL ^Esc – Return to Main Menu
MENU EXIT
MENU END
MENU BEGIN
MENU LABEL ^6. Pre OSes
MENU TITLE Alternate Pre OSes
MENU PASSWD fakepasswd
LABEL WinPE
MENU LABEL ^1. WinPE 2.0
KERNEL boot/pxeboot.0
LABEL Parted Magic
MENU LABEL ^2. Parted Magic
kernel utils/pmagic/bzImage
append initrd=/utils/pmagic/initramfs load_ramdisk=1
prompt_ramdisk=0 rw sleep=10
LABEL TS_linux
MENU LABEL ^3. Thin Station Linux
kernel utils/vmlinuz
append ramdisk_blocksize=4096 initrd=utils/initrd root=/dev/ram0
ramdisk_size=524288 console=ttyS3 ipappend 1
MENU SEPARATOR
LABEL return
MENU INDENT 5
MENU LABEL ^Esc – Return to Main Menu
MENU EXIT
MENU END
LABEL centos
MENU LABEL ^7. Kickstart CentOS 5.3
KERNEL centos/vmlinuz
APPEND initrd=centos/initrd.img noipv6
ks=http://local-webserver-IP/ks.cfg ksdevice=bootif IPAPPEND 2
LABEL Local_Drive
MENU LABEL ^8. Boot Local Drive
# localboot 0
KERNEL chain.c32
APPEND hd0 0
We have configured kickstart in WDS. It boots properly in pxe but during installation of Linux, again it asks for ip configuration. Also not taking ks.cfg file.
The kickstart is custom to your configuration, the one in the article is a generic one.
You can create one by performing a configuration by disk and grabbing the ks.cfg from the /root, or using the kickstart configurator that is available on redhat or centos.