冷呆獸試驗場

在Linux上架設PXE Server安裝Windows Server 2008 R2繁體中文版

事前準備

  1. 下載並安裝 WAIK (The Windows Automated Installation Kit (AIK) for Windows 7)

  2. 至MSDN下載Windows Server 2008 R2 SP1繁體中文版安裝光碟, 和2008R2的繁體中文語言包

製作PXE開機使用的WinPE image

開啟WAIK裡面的Deployment Tools Command Prompt

建立目錄結構

copype.cmd amd64 c:\winpe_amd64

掛載WinPE的image

dism /mount-wim /wimfile:winpe.wim /mountdir:mount /index:1

安裝所需套件

dism /image:mount /add-package /packagepath:"C:\Program Files\Windows AIK\Tools\PETools\amd64\WinPE_FPs\winpe-setup.cab"  
dism /image:mount /add-package /packagepath:"C:\Program Files\Windows AIK\Tools\PETools\amd64\WinPE_FPs\winpe-setup-server.cab"  
dism /image:mount /add-package /packagepath:"C:\Program Files\Windows AIK\Tools\PETools\amd64\WinPE_FPs\zh-tw\winpe-setup_zh-tw.cab"  
dism /image:mount /add-package /packagepath:"C:\Program Files\Windows AIK\Tools\PETools\amd64\WinPE_FPs\zh-tw\winpe-setup-server_zh-tw.cab"

將語言包的iso檔掛載或解開,把裡面的 "LangPacks" 目錄複製到 mount 底下 (裡面有zh-TW的lp.cab檔案)

copy g:\langpacks C:\winpe_amd64\mount

重新製作lang.ini檔

dism /image:mount /gen-langini /distribution:mount

確認語系檔案, 列出的語系應該有en-US和zh-TW

dism /image:mount /get-intl /distribution:mount

建立winpeshl.ini,防止WinPE馬上執行setup.exe

notepad mount\Windows\System32\winpeshl.ini 

在winpeshl.ini裡面加入這些文字

[LaunchApp]  
AppPath = %SystemRoot%\system32\startnet.cmd 

修改startnet.cmd

notepad mount\Windows\System32\startnet.cmd 

startnet.cmd的內容大約如下,指定unattended設定檔的路徑(在PXE server的samba分享上)

[wpeinit]  
reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PXE /f  
x:\setup.exe /unattend:\\pxe.server\2008R2\autounattend.xml 

將PXE的開機檔案複製到PXE Server

net use n: \\pxe.server\2008R2  
mkdir n:\win2008  
copy mount\Windows\Boot\PXE\*.* n:\win2008  
copy "c:\Program Files\Windows AIK\Tools\PETools\amd64\boot\boot.sdi" n:\win2008 

卸載WinPE的image, 並寫入所有變更

dism /unmount-wim /mountdir:mount /commit

複製WinPE的image到PXE Server

copy winpe.wim n:\win2008\boot.wim

設定BCD Store

bcdedit -createstore BCD  
bcdedit -store BCD -create {ramdiskoptions} /d "Ramdisk Options"  
bcdedit -store BCD -set {ramdiskoptions} ramdisksdidevice boot  
bcdedit -store BCD -set {ramdiskoptions} ramdisksdipath \win2008\boot.sdi  
bcdedit -store BCD -create /d "WinPE Boot Image" /application osloader

上面的最後一行指令會產生一組UUID,請將這組UUID記下,用在下面的指令內 ( 取代掉{UUID} )

bcdedit -store BCD -set {UUID} systemroot \Windows  
bcdedit -store BCD -set {UUID} detecthal Yes  
bcdedit -store BCD -set {UUID} winpe Yes  
bcdedit -store BCD -set {UUID} osdevice ramdisk=[boot]\win2008\boot.wim,{ramdiskoptions}  
bcdedit -store BCD -set {UUID} device ramdisk=[boot]\win2008\boot.wim,{ramdiskoptions}  
bcdedit -store BCD -create {bootmgr} /d "Windows Boot Manager"  
bcdedit -store BCD -set {bootmgr} timeout 30  
bcdedit -store BCD -displayorder {UUID} 

將BCD檔案複製到PXE Server

copy BCD n:\win2008

製作安裝使用的wim檔案

因為MSDN上的安裝光碟是整合版,為單純化安裝過程,我們將抽出單一版本(一般是Server Standard):

  1. 將安裝光碟掛載

  2. 取出 \sources\install.wim

  3. 查看版本資訊,確認所要版本的IMAGE INDEX

    imagex /info install.wim

  4. 例如抽出index為1的ServerStandard:

    imagex /export install.wim 1 srvstd.wim

  5. 將檔案複製到PXE Server上

    copy srvstd.wim n:\2008R2\win2008r2.wim

製作unattended file

大部份可參考這篇 How to Sysprep in Windows Server 2008 R2 and Windows 7 ,大概整理一下我加了一些功能之後所需要用到的元件如下,不一定會全部用到,沒有特殊用途的話以上面連結的為主

  • amd64_Microsoft-Windows-IE-InternetExplorer -> 4 specialize
  • amd64_Microsoft-Windows-International-Core -> 4 specialize
  • amd64_Microsoft-Windows-International-Core -> 7 oobeSystem
  • amd64_Microsoft-Windows-International-Core-WinPE -> 1 windowsPE
  • amd64_Microsoft-Windows-OutOfBoxExperience -> 3 generalize
  • amd64_Microsoft-Windows-Setup -> 1 windowsPE
  • amd64_Microsoft-Windows-ServerManager-SvrMgrNc -> 3 generalize
  • amd64_Microsoft-Windows-Shell-Setup -> 4 specialize
  • amd64_Microsoft-Windows-Shell-Setup -> 7 oobeSystem
  • amd64_Microsoft-Windows-SNMP-Agent-Service -> 4 specialize
  • wow64_Microsoft-Windows-IE-InternetExplorer -> 4 specialize
  • amd64_Microsoft-Windows-Foundation-Package -> Packages

主要解釋與中文語系有關的部份

1 windowsPE - amd64_Microsoft-Windows-International-Core-WinPE : 設定Windows PE階段的語系

InputLocale: 設定輸入法,以分號+空白隔開,像是: en-US; zh-TW

在下列項目都只填zh-TW:SystemLocale, UILanguage, UserLocale, SetupUILanguage\UILanguage

4 specialize - amd64_Microsoft-Windows-International-Core : 設定Windows的語系

設定項目與上一項一樣

7 oobeSystem - amd64_Microsoft-Windows-International-Core : 安裝Windows的語系

InputLocale設為en-US,其他項目與前述相同

Validate如果沒錯誤,就存檔,並複製到 n:\2008R2\autounattend.xml

PXE Server上所需做的動作與修改

將開機檔案搬到PXE開機的路徑下 ( 假定分享的路徑為 /var/www/html/share/iso/2008 ,tftp的root是 /tftpboot )

mv /var/www/html/share/iso/2008/win2008/ /tftpboot/

設定tftp的re-map

cat>/tftpboot/tftpd.map<<EOF  
rg \\ /  
ir ^Boot/ win2008/  
ir ^/Boot/ win2008/  
re ^bootmgr\.exe win2008/bootmgr.exe  
EOF 

並修改tftp的啟動參數 /etc/xinetd.d/tftp ,修改server_args的設定

server_args             = -s /tftpboot -m /tftpboot/tftpd.map -v 

/tftpboot/pxelinux.cfg/default 內,加上Windows 2008 R2的項目

LABEL win2008  
  menu label ^1)  Install Windows Server 2008 R2  
  boot win2008/pxeboot.n12

重新啟動xinetd,使tftp使用新設定運作

使用PXE安裝Windows Server 2008 R2

Please enjoy your one press installation. :)

Reference