The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
PXE Network Windows Installation
Howto use your Funtoo machine to serve a MS Windows installation over the network In this guide we will assume that you have followed the PXE Network Boot Server Wiki article and have a working network/pxe boot setup. As of now this guide will cover Windows XP. Soon it will be expanded to also cover Windows 7.
Prerequisites
- A working Funtoo installation
- A working PXE Setup (DHCP, TFTP, PXELinux)
- app-arch/cabextract
- A legitimate copy of Microsoft Windows
- Driver for your NIC - Suggested to use a complete driver pack with all major supported NIC hardware for the version of Windows to be installed.
- RIS Linux toolkit >=0.4
- A working Samba server setup
Creating the Windows XP Image
- In the previous guide, PXE Network Boot Server, we used /tftproot as the working directory so we will also use it in this guide for convenience. If you chose to use a different working directory then please apply it where needed in place of the /tftproot we will be going by here.
First you will need to create an ISO from your Windows XP installation disc. If you already have the ISO image you may skip this step.
dd if=/dev/sr0 of=/tftproot/winxp.iso
If your cdrom device isn't /dev/sr0 please use the appropriate device in this command.
Mount the ISO and Prepare Installation Sources
Mount Image to /tftproot/cdrom
mkdir /tftproot/cdrom; mount -o loop /tftproot/winxp.iso /tftproot/cdrom
Create the new directory for the network installation files and copy the needed files to it
mkdir /tftproot/winxp; cp -R /tftproot/cdrom/i386 /tftproot/winxp/i386
Depending on your CD/DVD copy of windows the directory name may be I386 as opposed to i386, if that is the case you will just need to change the first part of the command, keeping the new directory name i386 - this is going to be very important later on when creating the remap file! Check the contents of your newly created i386 directory to see if the filenames are in all CAPS or if they are already in lowercase.
ls /tftproot/winxp/i386
If you happen to have all UPPERCASE filenames, lets go ahead and run a script to convert it to all lowercase:
cd /tftproot/winxp/i386;ls | awk '$0!=tolower($0){printf "mv \"%s\" \"%s\"\n",$0,tolower($0)}' | sh
Extracting and Modifying the Required Boot Files
Install app-arch/cabextract
emerge -av app-arch/cabextract
Extract the prepackaged drivers:
cd /tftproot/winxp/i386;cabextract driver.cab
Install support for a large list of network cards
cd /tftproot/;wget http://downloads.sourceforge.net/project/bootfloppy/pxefiles.tar.gz tar zxvf pxefiles.tar.gz; cp pxefiles/drivers/* winxp/i386/
Copy the BINLSRV /INFParser tools to /tftproot
cp pxefiles/script/* /tftproot/
Extract the netboot startrom:
cd /tftproot; cabextract winxp/i386/startrom.n1_
Fix the startrom for netbooting xp:
sed -i -e 's/NTLDR/XPLDR/gi' startrom.n12 mv startrom.n12 winxp.0
Fix XPLDR:
cabextract winxp/i386/setupldr.ex_ sed -i -e 's/winnt\.sif/winxp\.sif/gi' setupldr.exe sed -i -e 's/ntdetect\.com/ntdetect\.wxp/gi' setupldr.exe mv setupldr.exe xpldr cp winxp/i386/ntdetect.com ntdetect.wxp
Creating a remapping file
Create the file /tftproot/tftpd.remap and add the following to it:
ri ^[az]: # Remove “drive letters” rg \\ / # Convert backslashes to slashes rg \# @ # Convert hash marks to @ signs rg /../ /..no../ # Convert /../ to /..no../ rg A a rg B b rg C c rg D d rg E e rg F f rg G g rg H h rg I i rg J j rg K k rg L l rg M m rg N n rg O o rg P p rg Q q rg R r rg S s rg T t rg U u rg V v rg W w rg X x rg Y y rg Z z r ^/(.*) \1 r ^xpldr xpldr r ^ntdetect.wxp ntdetect.wxp r ^winxp.sif winxp.sif
Install/Configure Samba
If you don't already have samba installed then:
emerge -av net-fs/samba
Create a Samba share for your tftp server in /etc/samba/smb.conf *Be sure you have the other required samba settings configured in the file
[Global] interfaces = lo eth0 wlan0 bind interfaces only = yes workgroup = WORKGROUP security = user [tftproot] path = /tftproot browsable = true read only = yes writable = no guest ok = yes
Start Samba:
/etc/init.d/samba start
or if samba has already been started:
/etc/init.d/samba restart
Creating a Setup Instruction File
Create a the file /tftproot/winxp.sif and add the following, replacing SAMBA_SERVER_IP with the local IP address of your samba server:
[data] floppyless = "1" msdosinitiated = "1" ; Needed for second stage OriSrc = "\\SAMBA_SERVER_IP\tftproot\winxp\i386" OriTyp = "4" LocalSourceOnCD = 1 DisableAdminAccountOnDomainJoin = 1 [SetupData] OsLoadOptions = "/fastdetect" ; Needed for first stage SetupSourceDevice = "\Device\LanmanRedirector\SAMBA_SERVER_IP\tftproot\winxp" [UserData] ComputerName = *
Edit your boot menu so that it contains the following entry:
LABEL WinXP MENU LABEL Install MS Windows XP KERNEL winxp.0
Re-Start all required daemons
If the daemon isn't already running use start instead or restart in the following commands
/etc/init.d/dnsmasq restart /etc/init.d/in.tftpd restart
Modify Binlsrv, update driver cache, and start driver hosting service
Change the BASEPATH= variable at or around line #62 of binlsrv.py so that it is:
BASEPATH='/tftproot/winxp/i386/'
Generate driver cache
cd /tftproot;./infparser.py winxp/i386/
Start binlservice
./binlsrv.py
Booting the client
If all is well, you should be able to boot the client choosing to boot from network in the boot options, you should get to your PXELinux bootloader, and see the Install Windows XP option after pressing enter you *should* kick off your XP installation via network!! Congratulations!