1. 程式人生 > >通過pxe從網路啟動安裝Windows XP

通過pxe從網路啟動安裝Windows XP




        系統不幸中招,系統時間被改,防毒軟體一開啟就自動關閉,只要是防毒相關的程式,一開啟就都自動關閉了,開啟程序管理器,發現不斷有一系列名字類似(一個系統檔名加上不斷遞增的數字,具體名字想不起來了)的程序被建立、關閉,重起進入安全模式亦是如此。沒辦法,只好求助Google,Baidu了。但是搜了老半天也找不出這到底是個啥病毒,更不用說專殺工具了,只找到一篇文章:
仔細看了下,跟我的中毒症狀基本一致,應該就是它了。裡面使用了一個軟體System Repair Engineer,下載回來試了下,感覺很不錯,收藏。不過清除的辦法感覺還是太麻煩了,而且俺經常要上上網上銀行買點東西啥的,萬一有一兩個漏網之魚就不好了,我心想算了,為了安全起見,還是把系統重灌一下比較穩妥。

        於是備份好資料,翻出安裝盤,放入光碟機,重起,但是過了會系統並沒從光碟機啟動,又進到windows裡了,難道是安裝盤有問題,換了幾張盤後發現,俺的光 驅現在只認DVD不認CD了,但是俺手裡只有CD的安裝盤,而旁邊桌上型電腦上的CD又沒法裝到筆記本上來用,沒辦法,只好另找別的出路了。

       努力想了一下我所知道的安裝系統的方法:
               1、光碟引導,已經行不通,排除;
               2、軟盤引導,沒有軟碟機,排除;
               3、DOS引導,在Windows下裝個矮人純DOS環境,重起進入DOS載入ISO安裝,這個方法倒是可行,而且硬碟上有備份的安裝盤映象,但是此法有 個缺陷,安裝的過程中不能斷電,否則就徹底啟動不起來了,而且以前用過,這次就算了,得換個新方法,再次排除;
               4、USB引導,通過可引導的U盤或者行動硬碟啟動,跟DOS引導類似,而且手裡沒可引導的U盤或行動硬碟,排除;
               5、網路引導,通過PXE引導,然後從網路安裝,這個方法雖然很早以前就聽到過了,但是從來沒實踐過,這次就用這個方法好了。

       安裝方法確定下來了,剩下的就是怎麼安裝的問題了,再次搬來Google、Baidu(搜尋引擎真是好東西啊,難以想象沒有它們,要找到解決這些問題的方法該有多麻煩,在此俺要感謝Google、Baidu、以及網際網路上千千萬萬跟大家分享他所學的人),經過努力搜尋、研究後,初步掌握了通過網路安裝的基本原理和方法。通過網路安裝Windows有兩種方案可選:
       第一種方案是通過Windows自帶的網路安裝服務,需要一臺安裝了Windows Server 2000或者Windows Server 2003的機器,在上面安裝RIS服務,而RIS服務需要有域環境支援,由於局域網裡沒有安裝了2000或2003的伺服器,所以這個方案還是比較麻煩;
       另一種方案就是通過一些第三方的軟體模擬出RIS的環境來,就是安裝DHCP、TFTP、Samba以及BINL服務,這些不論是在 Linux/Unix,還是Windows環境下,都是很容易實現的,而且Windows下的軟體還是綠色的,連安裝都省了,啥也不說,就是它了。

       首先準備要用到的軟體:

               DHCP跟TFTP服務可以用tftpd32,下載:官方英文版,漢化的網上也很多,各大下載站都有;
               Samba就是Windows的檔案共享服務,Windows自帶;
               BINL得自己編譯一下,點此下載ris-linux-0.3.tar.gz,原始碼為解壓後的binlsrv.c,編譯方法開啟原始檔即可看到,如果沒有編譯環境,可以從網上下載一個編譯好的binlsrv.exe檔案即可。
       然後準備需要用到的檔案,分別設定好各項服務並啟動之:
               1. 在tftpd32目錄下新建一tftpboot資料夾,點選右鍵,將其共享,此資料夾存放pxe引導檔案以及Windows XP的安裝檔案,資料夾名跟共享名都可以自定義,只需在後面的配置檔案裡做相應修改即可。另外如果磁碟分割槽格式為NTFS的話,需要為其加入Everyone的可讀許可權;
               2.
下載一份syslinux,我選擇的是syslinux-3.63.zip,解壓縮,將pxelinux.0拷入tftpboot資料夾,然後在pxeboot目錄下新建pxelinux.cfg資料夾,並且在pxelinux.cfg裡面新建default檔案,內容如下:
prompt 1
default winxp
timeout 100

label winxp
kernel winxp.0
如果需要圖形啟動選單並且加入其它其它引導選項,只需將syslinux-3.63/com32/menu目錄下vesamenu.c32拷入tftpboot目錄即可,相應pxelinux.cfg/default檔案內容如下:
DEFAULT vesamenu.c32
PROMPT 
0

MENU TITLE PXE Boot Install Menu
MENU BACKGROUND splash.png

LABEL hdd
MENU LABEL ^
0----Boot From HDD
kernel chain.c32
APPEND hd0 
1

LABEL winxp
MENU LABEL ^
1----Boot for Install Windows XP
kernel winxp
.0

LABEL win2k
MENU LABEL ^
2----Boot for Install Windows 2000
kernel w2k
.0

LABEL win2k3
MENU LABEL ^
3----Boot for Install Windows 2003
kernel win2k3
.0

LABEL linux
MENU LABEL ^
4----Boot for Install Linux
kernel vmlinuz
append initrd
=initrd.img ramdisk_size=9216 noapic acpi=off
               3. 將安裝光碟下I386資料夾提取出到tftpboot/winxp/下,另外在跟I386資料夾同級目錄下如果有$OEM$資料夾,也可以一併提取到 tftpboot/winxp下,此資料夾為隱藏資料夾,用UltraISO開啟光碟映象可以看到,直接開啟光碟的話可能看不到,或者在UltraISO 選擇“檔案-開啟光碟”也可以看到。
               4. 將I386目錄下STARTROM.N1_、NTDETECT.COM檔案拷入一臨時目錄,將前兩個檔案更名為.cab字尾,然後解壓出 startrom.n12跟setupldr.exe。此時需要用到sed對這幾個檔案作相應的修改,下載地址:http: //gnuwin32.sourceforge.net/packages/sed.htm,相應命令如下:
sed -i -e 's/NTLDR/XPLDR/g' startrom.n12
sed -i -e 's
/ntldr/XPLDR/g' startrom.n12
sed -i -e 's
/winnt/.sif/winxp/.sif/g' setupldr.exe
sed -i -e 's
/ntdetect/.com/ntdetect/.wxp/g' setupldr.exe不知道什麼原因,我用windows下的sed進行操作時sed會死掉,所以這一步是在Linux下進行的,然後分別將startrom.n12、 setupldr.exe、ntdetect.com改名為winxp.0、XPLDR、ntdetect.wxp,並拷入tftpboot目錄,然後在 tftpboot目錄下新建檔案winxp.sif,內容如下:
[Data]
    floppyless 
="1"
    msdosinitiated 
="1"
    
; Needed for second stage
    OriSrc ="//192.168.0.2/tftpboot/winxp/i386"
    OriTyp 
="4"
    LocalSourceOnCD 
=1
    DisableAdminAccountOnDomainJoin 
=1

[SetupData]
    OsLoadOptions 
="/fastdetect"
    
; Needed for first stage
    SetupSourceDevice ="/Device/LanmanRedirector/192.168.0.2/tftpboot/winxp"

[UserData]
    ComputerName
=*
    
; if needed
;ProductID=
綠色部分192.168.0.2tftpboot分別為伺服器名或IP和共享名,可根據實際情況作相應的修改,另外也可以在這個檔案里加入一些其它的自動應答選項,以實現無人值守自動安裝,具體 可參考相關文件,或者根據光碟上的winnt.sif作相應修改。另外在檢視tftpd日誌的時候發現有對BOOTFONT.BIN檔案的請求記錄,於是 從I386目錄將其拷入tftpboot目錄中,發現可以使剛啟動時的字元安裝介面改善一點,此檔案非必需,可以根據情況決定是否拷入。
               5. 執行ris-linux壓縮包裡的infparser.py生成網絡卡驅動資訊檔案nics.txt,需要安裝Python,由於通過sed修改檔案的時候打開了一臺Linux機器,所以我這一步也在Linux上執行的,Windows下操作應該與此類似,首先從已經安裝好的Windows XP系統目錄下把inf資料夾(一般情況下為C:/Windows/inf)複製一份,放到存放infparser.py的目錄下,然後執行:
infparser.py inf如果成功執行的話會生成nics.txt跟devlist.cache兩個檔案,這裡要用到的是nics.txt,將它拷入存放binlsrv.exe的目錄下,devlist.cache檔案為Linux下執行binlsrv.py是要用到的,這裡用不到。然後將需要用到的網絡卡驅動檔案(.sys字尾)放入I386目錄下,如果不知道是哪個檔案的話,可以先跳過這一步,啟動ftpd32.exe跟binlsrv.exe,從網路啟動安裝一遍,檢視binlsrv.exe輸出的資訊或者tftpd32的日誌,即可找到相應的sys檔案,或者將I386/DRIVER.CAB裡的所有檔案解壓到I386目錄即可。如果執行infparser.py出錯的話,可以將其用編輯器開啟,修改第36行debug = 0為debug = 1,重新執行,根據輸出資訊找出解析錯誤的inf檔案(我這裡為oem23.inf跟oem24.inf),將其刪除再次執行,如果仍然有錯,重複以上步驟直至成功執行。
        當然如果有網絡卡驅動對應的inf檔案的話,我們可以從inf檔案裡找出需要的資訊,手工編輯一個nics.txt出來。
               6. 開啟binlsrv.exe,使BINL服務啟動。
               7. 開啟tftpd32.exe,點選下方的設定,將自定義目錄設為存放上面引導檔案及安裝檔案的資料夾,這裡為./tftpboot,確定,然後開啟DHCP伺服器選項卡,將啟動檔案設為pxelinux.0,其它資訊根據區域網環境做相應設定即可,例如:
IP池起始地址        192.168.0.200
池的大小               
54
啟動檔案pxelinux.0
WINS/DNS伺服器     202.99.192.68
預設路由器             192.168.0.1
掩碼           
255.255.255.0
點選儲存,然後關掉程式重新執行,以使設定生效。
       一切就緒,啟動要安裝系統的機器,選擇從網路啟動,開始安裝。

主要參考資料:
http://oss.netfarm.it/guides/
A complete Guide to Ris & Linux
通過PXE安裝WINDOWS XP配置手記(Linux)
無光碟機、軟碟機,通過PXE安裝Windows 2003
2008-4-21補充:
        早上查詢PXE引導WinPE的資料時看到PXE伺服器架設指南及PXE啟動WinPE(含PE2.0)解決方案總結裡面說ntdetect.com是公用的,沒必要修改,於是在虛擬機器上試了下,確實如此,另外XP跟2003的startrom.n12跟setupldr.exe也是可以通用的,但是為區分不同系統,還是得對這兩檔案改名並做相應修改。

2008-4-22補充:
       今天差點闖了大禍,有個朋友系統中毒了,去給他重灌系統,結果找到的幾張盤都裝不過去,就想正好這兩天的研究成果可以用上了,在另一臺機子上開啟tftpd32跟binlsrv,結果網絡卡驅動怎麼也弄不好,從驅動光盤裡弄出來的驅動一到安裝介面就藍屏,網上搜了下,找到篇文章:NVIDIA nForce晶片組全系列網絡卡驅動for WINPE Beta1,大概看了下,原來是nvidia的網絡卡硬體原因。還好最後在一張老毛桃修改的winpe裡找到個能用的,整了一下午終於搞定,正準備高興呢,結果裝好一看,系統裡原先的分割槽都沒了,整個磁碟被重新格成一個區了,這才想起這兩天看過好幾個文章都說過這事,只不過這兩天都是在虛擬機器上實驗的,也不用分幾個區,所以沒碰到過這情況,就沒放在心上。哎!實在是太大意了。趕緊關機,從網路啟動到maxdos下,開啟diskgen,恢復分割槽表,重起,看了下別的區都回來了,裡面的檔案也都還在,懸著的心終於可以放下了。趕緊修改winxp.tif,然後裝好系統,OVER。同志們如果設定了無人值守應答檔案的話,一定要小心了,千萬別犯跟偶一樣的錯誤,如果丟了重要檔案就欲哭無淚了。修改方法為在winxp.tif中新增下面這段,如果有的話就改成跟下面一樣:
[RemoteInstall]
    Repartition 
= No
    UseWholeDisk 
= No
相關檔案下載:
http://silenceisdefeat.org/~dragon/tools/pxexp.rar

windows xp + windows 2003(沒找到2000的安裝盤,所以沒做2000的),圖形選擇選單
http://silenceisdefeat.org/~dragon/tools/pxeboot.rar