How To Install Windows XP througth network (Ubuntu + dhcpd + tftpd-hpa + syslinux + samba)

透過網路開機 PXE 來安裝 Windows XP 、Windows 2003、Windows 2000 都能採用這樣的方法來做。以下就是使用 Ubuntu 來做為 NIS 伺服器的安裝 XP 的步驟。

Ubuntu 須要有兩個網路介面(對外、DHCP用),如果只有一個網路介面可用虛擬網卡設置。

僅一網卡的設置,可能要移除 network-manager 並重新設定網路配置產生虛擬網卡。

sudo apt-get purge network-manager

sudo vim /etc/network/interface

#######/etc/network/interface#############
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.128.119
netmask 255.255.255.0
gateway 192.168.128.1

auto eth0:0
iface eth0:0 inet static
address 192.168.101.1
netmask 255.255.255.0

##########################################

sudo /etc/init.d/networking restart

Ubuntu 10.04 安裝必要的套件 dhcpd 、tftp-hpa、syslinux、samba。

sudo apt-get install dhcp3-server tftpd-hpa syslinux samba


設定 DHCP3-SERVER 讓它可以支援網路開機

vim /etc/dhcp3/dhcpd.conf

###/etc/dhcp3/dhcpd.conf###################
ddns-update-style none;
allow booting;
allow bootp;

subnet 192.168.101.0 netmask 255.255.255.0 {
range 192.168.101.10 192.168.101.50;
option routers 192.168.128.1;
next-server 192.168.101.1; #告訴 dhcp client 誰是 tftp server
filename "pxelinux.0"; #filename 設定其路徑是相對於 tftp 所設定的根目錄
}

###########################################

配置 tftpd-hpa 啟動設定及「tftpboot-remap」檔案路徑對應規則

修改設定檔加入路徑對應規則的檔案

sudo vim /etc/default/tftpd-hpa

###/etc/default/tftpd-hpa#################
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -m /var/lib/tftpboot/tftpd.remap -vvv" #加入參數 -m 路徑對應規則表, -vvv 可以在/var/log/syslog寫入紀錄,可用於檢視問題出在哪裏。
##########################################

編輯路徑對應規則表「/var/lib/tftpboot/tftpd.remap」

sudo vim /var/lib/tftpboot/tftpd.remap

###/var/lib/tftpboot/tftpd.remap###########
ri ^[a-z]: # 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

# XP 啟動相關檔案對應規則
r winxp.0 winxp/winxp.0
r xpldr winxp/xpldr
r winxp.sif winxp/winxp.sif
r ntdetect.wxp winxp/ntdetect.wxp
##########################################

設置 pxelinux 網路開機相關設定

建立開機選單設定檔「pxelinux.cfg/default」

sudo mkdir /var/lib/tftpboot/pxelinux.cfg
sudo vim /var/lib/tftpboot/pxelinux.cfg/default

###/var/lib/tftpboot/pxelinux.cfg/default#######
#設定檔中的路徑都是以 tftp 的根目錄作為相對路徑,此例中為「/var/lib/tftpboot/」
DEFAULT menu.c32
PROMPT 0
ALLOWOPTIONS 0
TIMEOUT 50

MENU TITLE PXELinux Menu

# XP 的PXE安裝選項
LABEL winxp
MENU LABEL winxp
kernel winxp.0
################################################

複製 pxe 開機必要的檔案到 tftpd-hpa 的根目錄下「/var/lib/tftpboot」

sudo cp /usr/lib/syslinux/pxelinux.0 /usr/lib/syslinux/menu.c32 /usr/lib/syslinux/chain.c32 /usr/lib/syslinux/memdisk /var/lib/tftpboot

重新啟動 dhcp-server、tftpd-hpa

sudo /etc/init.d/dhcp3-server restart
sudo /etc/init.d/tftpd-hpa restart

此時在 Client PC 用網路開機看看是否有選單出現

完成上面的這些步驟後,我們大致上已經把環境建置好了。接下來要做的動作就是讓 XP 可以在我們建構的環境中執行安裝。

取得XP的啟動核心以及必要的相關檔案,並修改他們。

將 XP 的安裝光碟放入 Ubuntu 的光碟機中,並將它掛載到 “/mnt" 的目錄下。

sudo mount /dev/sr0 /mnt

建立目錄 /var/lib/tftpboot/winxp/i386,並將 XP 的安裝檔 Copy 到剛建立的目錄下。

sudo mkdir /var/lib/tftpboot/winxp/i386 -p
sudo cp -R /mnt/i386/* /var/lib/tftpboot/winxp/i386
sudo umount /mnt

安裝解「CAB」壓縮格式的套件 「cabextract」

sudo apt-get install cabextract

修改安裝相關檔案,這些修正後來會對應到檔案路徑對應表。

cd /var/lib/tftpboot/winxp
sudo cabextract i386/startrom.n1_
sudo sed -i -e 's/ntldr/xpldr/ig' startrom.n12
sudo mv startrom.n12 winxp.0
sudo cabextract i386/setupldr.ex_
sudo sed -i -e 's/winnt\.sif/winxp\.sif/ig' setupldr.exe
sudo sed -i -e 's/ntdetect\.com/ntdetect\.wxp/ig' setupldr.exe
sudo mv setupldr.exe xpldr
sudo cp i386/ntdetect.com ntdetect.wxp

#將 i386 目錄下所有檔案的檔名都改為小寫
ls i386 | awk '$0!=tolower($0){printf "mv \"%s\" \"%s\"\n",$0,tolower($0)}' | sh

tftpd.remap 運作中的紀錄

創建系統安裝時的應答文件 winxp.sif

[data]
floppyless = "1"
msdosinitiated = "1"
; Needed for second stage
OriSrc = "\\192.168.101.1\reminst\winxp\i386" ;網路芳鄰上的安裝路徑
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1
[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\192.168.101.1\reminst\winxp" ;網路芳鄰上的路徑
[UserData]
ComputerName=*
;if needed
;ProductID=

;自動應答文件,如果想自動完成安裝,需要下面的部分
[Unattended]
UnattendMode=FullUnattended
UnattendSwitch="Yes"
OemPreinstall="Yes"
OemSkipEula="Yes"
FileSystem=*
WaitForReboot="No"
NoWaitAfterTextMode=1
NoWaitAfterGUIMode=1
DriverSigningPolicy=Ignore
NonDriverSigningPolicy=Ignore
Hibernation="No"
TargetPath = \WINDOWS
InstallFilesPath = "\\192.168.101.1\reminst\winxp\i386"
LegacyNIC = 1
[SystemRestore]
[GuiUnattended]
EncryptedAdminPassword="No"
AutoLogon="Yes"
AdminPassword=*
OEMSkipRegional=1

設置網路芳鄰分享資料夾,提供安裝 Windows XP 所需要的檔案。

新增分享資料夾,修改設定檔將下面的設定加在檔案的最後面。

[reminst]
path = /var/lib/tftpboot
browsable = true
read only = no
writable = yes
guest ok = yes

重新啟動 Samba Server

sudo /etc/init.d/smbd restart

啟動 Binl Server 提供 XP 安裝時所需要的驅動程式

解壓縮驅動程式檔到 i386 的目錄下,並將所有檔案的檔名改為小寫。如果你的電腦網卡驅動不在內建的驅動程式包裏,可以自已下載電腦的驅動解壓縮放到這目錄下即可。

cd /var/lib/tftpboot/winxp/i386
sudo cabextract driver.cab
#所有檔案的檔名轉為小寫
sudo ls | sudo awk '$0!=tolower($0){printf "sudo mv \"%s\" \"%s\"\n",$0,tolower($0)}' | sh

下載 ris-linux ,產生驅動程式列表並執行 binlsrv 服務。
Note : you can get windows drivers from driverpacks.net

cd /var/lib/tftpboot
sudo wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz
sudo tar -xzvf ris-linux-0.4.tar.gz

#下載好心人收集到的 Drivers inf 檔
sudo  wget http://downloads.sourceforge.net/project/bootfloppy/pxefiles.tar.gz?use_mirror=space
sudo tar -xzvf pxefiles.tar.gz
sudo cp -R pxefiles/drivers/* /var/lib/tftpboot/winxp/i386

#如果還是有些網卡無法驅動的話,繼續下面這個步驟:
#到 http://driverpacks.net/downloads 下載最符合系統需求的驅動壓縮檔,它可能是要用BT的方式下載的。
#下載完成後將壓縮檔解壓並放到 /var/lib/tftpboot/winxp/i386 目錄下。

#將 i386 下所有檔案的檔名轉為小寫
cd /var/lib/tftpboot/winxp/i386
sudo ls | sudo awk '$0!=tolower($0){printf "sudo mv \"%s\" \"%s\"\n",$0,tolower($0)}' | sh

#產生驅動程式列表檔,並啟用 binlsrv 服務
cd /var/lib/tftpboot/ris-linux-0.4
sudo ./infparser.py /var/lib/tftpboot/winxp/i386
nohup sudo ./binlsrv.py &

binlsrv 正常運作的樣子

最後一切準備就緒,只要將要安裝 XP 的電腦接上網路線並設定由網路開機就能知道結果了。

參考來源:
http://oss.netfarm.it/guides/ris-linux.php
http://www.techienote.com/2010/06/pxe-booting-windows-xp-installation.html
http://blog.yalin.tw/2007/06/pxe-in-freebsd-windows-xp.html

2 thoughts on “How To Install Windows XP througth network (Ubuntu + dhcpd + tftpd-hpa + syslinux + samba)

  1. 通告: WAIK: Install Windows XP via WinPE | jerry-yang work's logs

  2. 通告: 用Ubuntu建立一個由網路開機「載入WinPE 自動化安裝Windows OS」的環境 | jerry-yang work's logs

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s