Saturday, 7 September 2013

Create A WinPE 4.0 Disc using WADK For Windows 8

Step 1:
Download Windows ADK For Windows 8

Step 2:
Install Windows ADK For Windows 8, remember you can install in windows vista or windows 7 too

Step 3:
Using the ADK For Windows 8 Terminal type:

"Copype *amd64* *c:\location*"

The information that is between *stars* is changable to meet your needs. amd64 means you will be making a 64bit disc, x86 means 32bit. "c:\location" is a destination for the pe working files.You can change it to whatever drive or folder you want to use. Do not include the * symbol in your typing. After you are finished and have burned the iso you will need to manually delete c:\location, unless you want to keep it?

Step 4:
Using the ADK For Windows 8 Terminal type (This is optional):

"imagex /mountrw *c:\location\*media\sources\boot.wim 1 *c:\location\*mount"

Step 5:
Copy any additional files you want or make any changes you wish to the mounted directory (This is optional)

Step 6:
commit your changes using the ADK For Windows 8 terminal by typing (This is optional):

"imagex /unmount *c:\location\*mount /commit"

Step 7:
Generate the ISO file. Type into ADK For Windows 8 Terminal:

"MakeWinPEMedia /ISO *c:\location* *c:\location*\*winpe4x8664*.iso

Step 8:
Burn the iso file to a dvd or cd using whatever software you normally burn iso files with (I recommend Ashampoo Burning Studio 6 Free Edition)

-----------------------------------
Some useful commands you can use in winpe 4 for capturing and deploying images:

Capture an image:
"dism /Capture-Image /Compress:max /CaptureDir:*D:\* /ImageFile:*E:\windows*.wim /Name:"*windows*" " (the first set of " " around windows must be included)

Apply an image:
"dism /Apply-Image /ImageFile:*E:\Windows*.wim /Index:*1* /ApplyDir:*W:\*" (a .wim file can have mulitple images in it, labled as sperate indexes)

Combining Windows Deployment Services & PXELinux for the ultimate network boot

Step One – Install WDS

This should be obvious and if you are reading this I imagine you’ve done it already. Ours is running on a Windows Server 2003 box but it should work fine with the latest, more secure, stuff.
  • We will be adding bits to the folders within the \\WDS\REMINST share

Step Two – Install PXELinux

PXELinux is part of the SysLinux package
  • Download SysLinux from here
  • There’s quite a bit in SysLinux but you only need to extract the following files
    • 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 pxeboot.n12 and rename it to pxeboot.0
    • Copy abortpxe.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 .txt extension
  • First create a new text file called default.  This is the first menu that loads.
  • Paste the following text into it
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    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
    # 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
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    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 graphics.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 Boot tab change the default boot program for x86 architecture to\Boot\x86\pxelinux.com
    • In Server 2008 R2 you have to use the wdsutil  command line to set the the default boot program with these commands
1
2
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
wds-pxe-menu
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
    1
    2
    3
    4
    5
    6
    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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
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)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
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

Conclusion


This is a really useful tool to have in our SysAdmin arsenal. I encourage you to give it a go. Let me know if your successful, or if you are having any problems getting it working, in the comments section. I’d also love to hear of any other tools you’ve added to the PXE menu.