Remote Install WinXP from a FreeBSD box

1. Install tftp-hpa (/usr/ports/ftp/tftp-hpa)
Install samba3, perl, python

2. Set pxeboot environment

3. Change tftpd server to tftp-hpa
/usr/local/libexec/in.tftpd in.tftpd -v -m /tftpboot/rules -s /tftpboot

4. Write rules
(Warning! If you apply my rule, all filenames in tftproot must be lowercase)
# cat > /tftpboot/rules
ri ^[a-z]: # Remove “drive letters”
rg \\ / # Convert backslashes to slashes
rg \# @ # Convert hash marks to @ signs
rg /../ / # Convert /../ to /
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

5. extract I386 files from Windows XP installation CD


– Copy i386 directory from the installation media to a subdir called winxp
in the ris working directory

– Extract the pxe loader:

– Modify the name of the loader from NTLDR to XPLDR:
sed -i -e ‘s/NTLDR/XPLDR/gi’ startrom.n12

– Move the modified pxe loader to tftpd root, and call it winxp.0

– Extract the setuploader, using cabextract:
cabextract /i386/SETUPLDR.EX_

– Modify the name of the response file from winnt.sif to winxp.sif
sed -i -e ‘s/winnt\.sif/winxp\.sif/gi’ setupldr.exe

– Modify the name of ntdetect from to ntdetect.wxp
sed -i -e ‘s/ntdetect\.com/ntdetect\.wxp/gi’ setupldr.exe

– Move the modified setuploader to tftpd root, and call it xpldr

– Copy /i386/NTDETECT.COM to tftpd root
and call it ntdetect.wxp

6. Create winxp.sif


floppyless = “1”
msdosinitiated = “1”
; Needed for second stage
OriTyp = “4”
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

OsLoadOptions = “/fastdetect”
; Needed for first stage
SetupSourceDevice = “\Device\LanmanRedirector\YOUR_SERVER_NAME\YOUR_SERVER_SHARE\winxp”

ComputerName = *
; if needed

*** Remember to set the share folder in the samba server ***


path = /mnt/disk/ris
browsable = true
read only = No
guest ok = Yes

7. Install NIC drivers to i386/inf
cp nicdrivers/* i386/inf
ln i386/inf/* i386/*

8. Rename all files in winxp to lowercase

find ./ -depth \
| perl -ne 'chomp;m</[^/]*$>;$d=$`;$_=$f=$&;'\
's/([\x80-\xFF].)|(\w)/$1\l$2/g;system "echo",$d.$f,$d.$_ if $f ne $_'

9. Get Binl Server and extract it
tar zxf
cd ris-linux-0.2

10. Run
./ /where/is/winxp/i386/inf

11. Run ./

12. Go to install Windows XP 🙂

** Useful Ref **