天天看點

windows環境下PXE安裝win2k、winXP、win2k3

http://liaowake.blog.163.com/blog/static/250751020091161920817/    

     其實網絡上已經有了網絡安裝xp的方法,是以本文重點在于實作過程中重要環節可能出現的問題。Windows server已經提供了網絡安裝服務,來部署xp或2003的網絡安裝,可這要在域模式下來實作。經過一些人的努力,實作了工作組模試的網絡安裝。通過網絡安裝windows,無疑是非常友善的批量裝機方法,不用光驅,不用CD光牒,隻要是可以從網絡啟動的電腦就可以從網絡上安裝xp或2003。這要在一些老電腦的獨立網卡上還要裝一個啟動子產品,也不貴一兩塊錢一個。如今新機子的內建網卡已經内置網絡啟動功能了。

要求:

  1、DHCP伺服器,負責配置設定IP

  2、TFTP伺服器,負責傳輸檔案到用戶端

  3、BINL實作工作組模式網絡安裝的關鍵,此服務實作了從網絡加載用戶端網卡的驅動,主要靠NCQ,NCR,RQU,RSU四種封包實作。

  4、win2k、winxp、win2k3CD光牒或鏡像檔案

   其實要同時實作DHCP+TFTP,在windows環境下用tftpd32.exe這個工具就OK了。而BINL這個東東要用國外某位高人的作品binlsrv。安裝工作過程大概如下:Client端由網絡啟動,發現DHCP伺服器并獲得IP、tftp 伺服器位址、啟動檔案名即startrom.n12Client 從tftp服各器下載下傳startrom.n12檔案并執行,startrom.n12會向tftp伺服器請求ntldr(由setupldr.exe改名而來)并執行它,ntldr再加載ntdetect.com bootfont.bin 和winnt.sif,ntldr通過winnt.sif檔案中的setupsourcedevice參數來決定接下來要從哪裡加載檔案,\Device \LanmanRedirector\表示從網絡加載。它會向tftp伺服器的\folder\i386\目錄請求預安裝環境所需檔案,這裡的 folder和上而setupsourcedevice中的folder是一樣的,是以這也就規定了 tftp的跟目錄是在共享目錄之下,否則就會出上面那個錯誤提示。預安裝環境加載驅動前會向binlsrv 伺服器發送Client端網卡驅動編号,binlsrv服務端查找驅動資料庫,将比對client端網卡的驅動檔案名發給client端,安裝程式加載 tcp/ip驅動時,會從tftp伺服器的xp安裝源檔案所在目錄下載下傳。然後安裝程式繼續安裝過程,這時已經可以支援tcp/ip,可脫離pxe,安裝源檔案不再從tftp下載下傳,而從”檔案共享伺服器”的共享目錄下載下傳,最終完成安裝。

  現在,知道大緻工作流程,就開工了。先建立一個共享檔案夾來放需要的工具,我就取名為"tftp"吧,再在tftp裡面建立三個檔案夾分别為win2k,winxp,win2k3,這樣做便于管理,分别從win2k,winxp,win2k3CD光牒或者鏡像中複制I386檔案夾到對應的系統中,比如說從XPCD光牒中複制I386檔案夾到winxp中,對應就OK了,3個系統的I386都要,因為我們要選擇性安裝系統。

  接着,就是要用到符合微軟PXE啟動的幾個檔案:

  1、startrom.n12

  2、setupldr.exe

  3、ntdetect.com

  4、winnt.sif

  startrom.n12,setupldr.exe,ntdetect.com這三個檔案可以在I386的檔案夾中找到,理論上應該是通用的,但為了區分一下,就分别從各自的I386中找吧,而winnt.sif這個檔案就靠自己編寫,随便建一個空白文本文擋輸入參數就OK.

   對于startrom.n12,不能直接找到,搜尋I386中的"STARTROM.N1_"這個檔案,用winrar或者其他解壓縮工具打開就會發現startrom.n12了。

  setupldr.exe同樣不能直接找到,搜尋I386中的"SETUPLDR.EX_"這個檔案,同樣用winrar或者其他解壓縮工具打開,提取裡面的setupldr.exe檔案

  ntdetect.com可以在I386中直接找到.

windows環境下PXE安裝win2k、winXP、win2k3

  好了,現在找到要用到的檔案,由于從三個I386提取出所需要的檔案的名稱是一緻的,我們要修改名字跟裡面的東東達到選擇性啟動安裝。

現在,我們就從XPCD光牒中的I386檔案中提取出需要的3個檔案開始改起吧,記得要修改的話,在windows下,我就用UE吧。對于XP系統的步驟就簡單說明吧:

1、複制I386檔案夾到剛剛建的winxp目錄下

2、用Winrar解壓"STARTROM.N1_"檔案得到"startrom.n12"檔案,

3、用UE替換"startrom.n12"檔案中所有"NTLDR"為"XPLDR",

4、移動修改後的"startrom.n12"到tftp目錄下并改名為"winxp.0",

5、用winrar解壓"SETUPLDR.EX_"檔案得到"setupldr.exe"

6、用UE替換"setupldr.exe"裡面的全部"winnt.sif"為"winxp.sif","ntdetect.com"為"ntdetect.wxp"

7、移動修改過的"setupldr.exe"到tftp目錄并改名為"XPLDR"

8、複制I386中的"NTDETECT.COM"到tftp目錄并名為"ntdetect.wxp"

9、對于winnt.sif這個檔案,由于上面我們已經用UE将"setupldr.exe"中的winnt.sif替換為winxp.sif,是以我們建立的檔案為"winxp.sif",用記事本建立一個檔案,儲存為"winxp.sif",輸入以下參數:

=====================我是分割線,不要複制我=========================

[data]

floppyless = "1"

msdosinitiated = "1"

; Needed for second stage

OriSrc = "\\你的伺服器名稱\你的共享名稱\winxp\i386"

OriTyp = "4"

LocalSourceOnCD = 1

DisableAdminAccountOnDomainJoin = 1

[SetupData]

OsLoadOptions = "/fastdetect"

; Needed for first stage

SetupSourceDevice = "\Device\LanmanRedirector\你的伺服器名稱\你的共享名稱\winxp"

[UserData]

ComputerName = *

; if needed

;ProductID

=========================我是分割線,不要複制我======================

簡單說明一下參數意義:

表示你的共享路徑了,"你的伺服器名稱"可以輸入你目前計算名稱或者目前計算的固定IP位址,“你的共享名稱”就是你建立的共享名稱了,本例中我就以tftp為共享名稱了。

這行的說明跟上述的一緻了。

這些是安裝系統時要求你輸入的内容,比如ProductID這行,注意,前面有個紅色的分号,表示這行不用了,當你需要時可以将分号去掉并輸入對應的序列号,輸入序列号後,在安裝過程中就不用輸入了。

具體winnt.sif說明請看上網搜尋相幹資料,

附上我的winxp.sif檔案内容:

OriSrc = "\\wake\tftp\winxp\i386"

SetupSourceDevice = "\Device\LanmanRedirector\wake\tftp\winxp"

  到了這裡,XP的PXE修改就完畢了,将winxp.0、ntdetect.wxp、winxp.sif、XPLDR複制到tftp檔案夾下。

win2k3的與XP一樣修改,不過修改内容的名字有差別,容易管理。大緻上就這樣:

1、複制win2k3中的I386檔案夾到剛剛建立的win2k3檔案夾中

3、用UE替換"startrom.n12"檔案中所有"NTLDR"為"w2k3l",

4、移動修改後的"startrom.n12"到tftp目錄下并改名為"w2k3.0",

6、用UE替換"setupldr.exe"裡面的全部"winnt.sif"為"wi2k3.sif","ntdetect.com"為"ntdetect.2k3"

7、移動修改過的"setupldr.exe"到tftp目錄并改名為"w2k3l"

8、複制I386中的"NTDETECT.COM"到tftp目錄并名為"ntdetect.w2k3"

9、我的wi2k3.sif檔案内容如下:

OriSrc = "\\wake\tftp\win2k3\i386"

SetupSourceDevice = "\Device\LanmanRedirector\wake\tftp\win2k3"

ComputerName = test

;ProductID=

至此,win2k3的PXE啟動檔案修複完畢,将w2k3.0、ntdetect.2k3、w2k3l、wi2k3.sif複制到tftp檔案夾下。

由于上述的修改都是對于"winnt"的,而win2000就是winnt的一種吧.是以,有好多地方不用修改,直接可以用,但名字要與其他兩個系統所提取出的區分開。大緻流程如下:

1、複制win2000中I386檔案夾到剛剛建立的win2k中

3、用UE替換"startrom.n12"檔案中所有"NTLDR"為"w2kld",

4、移動修改後的"startrom.n12"到tftp目錄下并改名為"w2k.0",

6、移動修改過的"setupldr.exe"到tftp目錄并改名為"w2kld"

8、複制I386中的"NTDETECT.COM"到tftp目錄并名為"pxelinux.0ntdetect.com"

9、注意,這次winnt.sif要改名為"pxelinux.0winnt.sif",我的内容如下:

OriSrc = "\\wake\tftp\win2k\i386"

SetupSourceDevice = "\Device\LanmanRedirector\wake\tftp\win2k"

現在解釋一下為什麼要取“pxelinux.0winnt.sif”和"pxelinux.0ntdetect.com"這兩個名字。前面的字首"pxelinux.0"取自于啟動檔案“pxelinux.0”,由于我們要實作選擇性安裝不同的作業系統,能做到這樣的,據我知道隻有pxelinux,而pxelinux來自于syslinux,後面再詳細說明。而win2000的PXE啟動時所需用的winnt.sif檔案在響應時有BUG,可以自己試試不改動的情況,你會發現啟動不了的,隻有從第一個啟動檔案,即“pxelinux.0”将它的名字以字首形式加入到"winnt.sif"中可以避免這個BUG,但“winnt.sif”名字修改為“pxelinux.0winnt.sif”時,ntdetect.com也接着要對應修改名字為“pxelinux.0ntdetect.com”。是以實際上win2k從PXE啟動所需要的檔案分别為:w2k.0、pxelinux.0ntdetect.com、pxelinux.0winnt.sif、W2KLD這幾個檔案。

好了,現在tftp檔案目錄如下:

windows環境下PXE安裝win2k、winXP、win2k3

win2k中就放有一個I386檔案夾,這個檔案夾來自于win2000CD光牒中的I386

win2k3的I386檔案夾來自于CD光牒win2k3的I386檔案夾

winxp的I386檔案夾來自于CD光牒winxp中的I386檔案夾

現在就是要做啟動菜單了,上面之前說過要用到syslinux中的pxelinux,是以,請到相關網站先下載下傳syslinux,裡面有我們需要的pxelinux及其他工具,具體自己看英文說明。好了,我就用syslinux3.73版,從core檔案夾中找到pxelinux.0檔案,從com32\menu下找到vesamenu.c32檔案,從com32\modules下找到chain.c32檔案,将這三個檔案複制到tftp檔案夾下面,并建立一個名字為“pxelinux.cfg”的檔案夾,pxelinux.cfg檔案夾負責存放pxelinux.0的配置檔案。而vesamenu.c32是菜單所需要的檔案,chain.c32是從硬碟啟動選項中的kenerl檔案,作用相當與winxp.0、w2k3.0、w2k.0這三個檔案,可以忽略不要,但為了做稍為多小小功能(從硬碟啟動),就順便要吧。然後再到pxelinux.cfg這個檔案夾下,用記事本建立一個無字尾,名字為"default"的空白檔案,該檔案内容為:

DEFAULT vesamenu.c32

PROMPT 0

MENU TITLE PXE Boot Install Menu By wake

MENU BACKGROUND splash.png

TIMEOUT 200

LABEL hdd

MENU LABEL ^0----Boot From HARDDISK

kernel chain.c32

APPEND hd0 1

LABEL winxp

MENU LABEL ^1----Boot for Install Windows XP   From NetWork

kernel winxp.0

LABEL win2k

MENU LABEL ^2----Boot for Install Windows 2000 From NetWork

kernel w2k.0

LABEL win2k3

MENU LABEL ^3----Boot for Install Windows 2003 From NetWork

kernel w2k3.0

簡單說明一下,第一行,DEFAULT vesamenu.c32,必須的,因為要用到菜單功能,必須有這個vesamenu.c32檔案,具體可以看syslinux中vesamenu.c32所在目錄的vesamenu.c檔案說明。

MENU TITLE PXE Boot Install Menu By wake表示菜單的标題了,可以取自己喜歡的英文名稱。

MENU BACKGROUND splash.png  表示菜單後面的背景檔案,我這裡就放一個名稱為splash.png檔案。

TIMEOUT 200 多少毫秒後逾時,可以設大一點。

LABEL hdd     用來區分其他kernel的,友善自己管理

MENU LABEL ^0----Boot From HARDDISK  選項菜單的名稱,^0表示按數字”0“可以直接跳到該選項

kernel chain.c32   啟動時的核心,這個就是從硬碟啟動所需要的東西了

APPEND hd0 1     這裡表示從第一個硬碟中的第一個分區啟動,根據實際進行修改。

接着的檔案就差不多了,不做多解釋。

現在我們再配置TFTP這個檔案,我的配置就這樣了:

windows環境下PXE安裝win2k、winXP、win2k3

由于我的網卡的IP位址是192.168.1.25,是以WINS/DNS伺服器就用我的IP位址吧,預設路由也設定為192.168.1.25,啟動檔案就是pxelinux.0了,還有,請先關閉你所在網絡中的DHCP伺服器吧,避免IP沖突了。現在DHCP、TFTP伺服器架設完畢。接下來的任務就是binl這個東東了,具體是幹什麼的,前面已經說明清楚了。我這裡在windows環境中就用binlsrv.exe這個由國外高手編寫的東東了。由于binlsrv.exe需要從“驅動資料庫”中找用戶端網卡對應的驅動檔案,将比對用戶端網卡的驅動檔案名發給用戶端,而“驅動資料庫”檔案我們沒有,怎樣辦呢?這時要用到ris-linux點選可以下載下傳,(官方的連接配接不知道為什麼失效,自己上傳已經下載下傳好的。)運作ris-linux壓縮包裡的infparser.py生成網卡驅動資訊檔案nics.txt,需要安裝Python,首先從已經安裝好的 Windows XP系統目錄下把inf檔案夾(一般情況下為C:\Windows\inf)複制一份,放到存放infparser.py的目錄下,然後運作:

windows環境下PXE安裝win2k、winXP、win2k3

infparser.py inf

如果成功運作的話會生成nics.txt跟devlist.cache兩個檔案,這裡要用到的是nics.txt,将它拷入存放binlsrv.exe的目錄下即可。或者你可以用的nics.txt檔案:

====================我是分割線,不要複制我呀=============================================

021b 8138 RTL8139.SYS rtl8139

021b 8139 RTL8139.SYS rtl8139

0e11 ae32 netflx3.sys netflx3

0e11 ae34 netflx3.sys netflx3

0e11 ae35 netflx3.sys netflx3

0e11 ae40 netflx3.sys netflx3

0e11 ae43 netflx3.sys netflx3

0e11 b011 netflx3.sys netflx3

0e11 b012 netflx3.sys netflx3

0e11 b030 netflx3.sys netflx3

0e11 f130 netflx3.sys netflx3

0e11 f150 netflx3.sys netflx3

100b 0020 FA312nd5.sys FA312

100b 0022 DP83820.sys dp83820

1011 0002 dc21x4.sys DC21x4

1011 0009 dc21x4.sys DC21x4

1011 000f DEFPA.sys DEFPA

1011 0014 dc21x4.sys DC21x4

1011 0019 dc21x4.sys DC21x4

1011 1065 b1cbase.sys b1cbase

1014 003e IBMTRP.SYS IBMTRP

1022 2000 pcntpci5.sys PCnet

1022 2001 pcntn5hl.sys PCnetHL

102f 0020 tbatm155.sys tbatm155

1039 0900 sisnic.sys SISNIC

1050 0840 W840ND.sys W840ND

1050 0940 w940nd.sys w89c940

107e 0008 ip5515.sys ip5515

108d 0001 mdgndis5.sys MadgeTRN

108d 0004 mdgndis5.sys MadgeTRN

108d 0005 mdgndis5.sys MadgeTRN

108d 0007 mdgndis5.sys MadgeTRN

108d 0008 mdgndis5.sys MadgeTRN

10b6 0002 mdgndis5.sys MadgeTRN

10b6 0003 cpqtrnd5.sys CPQTRND5

10b6 0006 mdgndis5.sys MadgeTRN

10b6 0007 mdgndis5.sys MadgeTRN

10b6 0009 mdgndis5.sys MadgeTRN

10b6 000a mdgndis5.sys MadgeTRN

10b6 000b mdgndis5.sys MadgeTRN

10b7 0001 el985n51.sys el985nd5

10b7 1f1f NetWlan5.sys NetWlan5

10b7 4500 el90xbc5.sys EL90XBC

10b7 5057 el575nd5.sys el575nd5

10b7 5157 el575nd5.sys el575nd5

10b7 5257 el575nd5.sys el575nd5

10b7 6055 EL556ND5.sys EL556ND5

10b7 6056 EL556ND5.sys EL556ND5

10b7 6560 el656nd5.sys el656nd5

10b7 6562 el656nd5.sys el656nd5

10b7 6564 el656cd5.sys el656cd5

10b7 7646 el90xbc5.sys EL90XBC

10b7 9000 el90xnd5.sys EL90X

10b7 9001 el90xnd5.sys EL90X

10b7 9004 el90xbc5.sys EL90XBC

10b7 9005 el90xbc5.sys EL90XBC

10b7 9006 el90xbc5.sys EL90XBC

10b7 900a el90xbc5.sys EL90XBC

10b7 9050 el90xnd5.sys EL90X

10b7 9051 el90xnd5.sys EL90X

10b7 9055 el90xbc5.sys EL90XBC

10b7 9058 el90xbc5.sys EL90XBC

10b7 905a el90xbc5.sys EL90XBC

10b7 9200 el90xbc5.sys EL90XBC

10b7 9800 el98xn5.sys EL98x

10b7 9805 el98xn5.sys EL98x

10b7 9902 EL99XN51.SYS EL99X

10b7 9903 EL99XN51.SYS EL99X

10b7 9904 EL99XN51.SYS EL99X

10b7 9908 EL99XN51.SYS EL99X

10b7 9909 EL99XN51.SYS EL99X

10b7 990a EL99XN51.SYS EL99X

10b8 0005 smcpwr2n.sys Smcpwr2n

10b8 0006 otc06x5.sys OtcethCB

10b9 5261 ALI5261.SYS ALI5261

10d9 0531 mxnic.sys mxnic

10ec 8029 RTL8029.SYS rtl8029

10ec 8139 RTL8139.SYS rtl8139

1106 3043 fetnd5.sys FETNDIS

1106 3065 fetnd5.sys FETNDIS

1113 1211 RTL8139.SYS rtl8139

1113 1216 AN983.sys AN983

1127 0300 PCA200E.sys PCA200E

1127 0400 FOREHE.sys FOREHE

1133 e001 Diwan.sys DiWan

1133 e002 Diwan.sys DiWan

1133 e003 Diwan.sys DiWan

1133 e004 Diwan.sys DiWan

1133 e005 Diwan.sys DiWan

1133 e00b Diwan.sys DiWan

1133 e00c Diwan.sys DiWan

1133 e010 diwan.sys Diwan

1133 e012 diwan.sys Diwan

1133 e014 diwan.sys Diwan

1133 e015 diwan.sys Diwan

1133 e019 diwan.sys Diwan

1148 4000 SkFpWin.SYS SkFpWin

1148 4300 sk98xwin.SYS sk98xwin

114f 001d DIGIDXB.SYS DIGIDXB

114f 0023 DIGIDXB.SYS DIGIDXB

114f 0024 DIGIDXB.SYS DIGIDXB

115d 0003 cben5.sys CBEN5

1186 1002 DLH5XND5.sys DLH5X

1186 1300 RTL8139.SYS rtl8139

11ad 0002 lne100tx.sys lne100tx

11ad c115 lne100.SYS pnicII

11f6 1401 w940nd.sys w89c940

11f6 2011 W840ND.sys W840ND

1244 0700 b1cbase.sys b1cbase

1244 0a00 fpcibase.sys fpcibase

1244 0e00 fpcibase.sys fpcibase

1244 1200 b1cbase.sys b1cbase

1266 1910 RTL8029.SYS rtl8029

126c 1f1f NetWlan5.sys NetWlan5

1282 9102 DM9PCI5.SYS DM9102

12ae 0001 el985n51.sys el985nd5

12ae 0002 el985n51.sys el985nd5

1317 1985 AN983.sys AN983

1317 9511 AN983.sys AN983

1317 9513 AN983.sys AN983

13d1 ab02 tdk100b.sys CB102

13d1 ab03 cb102.sys CB102

13f0 0201 DLH5XND5.sys DLH5X

14b9 0340 pcx500.sys PCX500

14b9 0350 pcx500.sys PCX500

14b9 4800 pcx500.sys PCX500

14e4 1644 b57xp64.sys b57nd

14e4 1645 b57xp64.sys b57nd

14e4 1647 b57xp64.sys b57nd

14e4 4401 bcm4sbxp.sys bcm4sbxp

14f1 1803 cnxt1803.sys cnxt1803

1516 0800 RTL8139.SYS rtl8139

1516 0803 RTL8139.SYS rtl8139

1516 0891 RTL8139.SYS rtl8139

1562 0001 NetWlan5.sys NetWlan5

4a14 5000 RTL8029.SYS rtl8029

5401 0101 NetWlan5.sys NetWlan5

8086 1000 n1000nt5.sys N1000

8086 1001 e1000645.sys E1000

8086 1004 n1000645.sys N1000

8086 1030 D100IB5.SYS D100IB

8086 1031 e100b325.sys E100B

8086 1032 e100b325.sys E100B

8086 1033 e100b325.sys E100B

8086 1034 e100b325.sys E100B

8086 1035 e100b325.sys E100B

8086 1036 e100b325.sys E100B

8086 1038 e100b325.sys E100B

8086 1042 NetWlan5.sys NetWlan5

8086 1229 e100b645.sys E100B

8086 2449 e100b325.sys E100B

8e2e 3000 w940nd.sys w89c940

9004 6915 adptsf50.sys ADPTSF

e159 0001 tjisdn.sys TJISDN

==========================我是分割線,不要複制我呀================================

這樣,binl服務架設完畢。好了,差不多了,由于有些網卡驅動隻能在對應系統中的I386檔案夾中的"DRIVER.CAB"找到,把裡面的檔案解壓縮到I386目前檔案夾下吧,否則會提示找不到驅動的錯誤。我用虛拟機測試就有這樣的錯誤:

windows環境下PXE安裝win2k、winXP、win2k3

記住,先考慮用對應I386中的drive.cab檔案中的驅動,如果沒有的話,再在其他I386中的drive.cab中找。

最後一步了:将tftp共享出去,先測試可不可以匿名通路,如果不可以的話,請設定好,最後的檔案目錄如圖所示:

windows環境下PXE安裝win2k、winXP、win2k3
windows環境下PXE安裝win2k、winXP、win2k3
windows環境下PXE安裝win2k、winXP、win2k3

繼續閱讀