一.原理簡介
RIS(遠端安裝服務,Remote Installation Services) 是windows server的可選服務,利用RIS可以讓管理者很友善地為用戶端部署作業系統。
二.環境說明
server os:CentOS 5.4 i386
server soft:dhcp, tftp, samba, ris-linux
可以使用yum安裝:
yum –y install dhcp*
yum –y install tftp*
yum –y install samba*
server ip:eth1: 192.168.0.1
client:HP 360G5
windows 2003 sp2 cn enterprise
三.安裝配置過程簡介
1. 配置DHCP
more /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.0.1;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.0.10 192.168.1.254;
default-lease-time 21600;
max-lease-time 43200;
# Group the PXE bootable hosts
# PXE-server configuration direction
next-server 192.168.0.1; #指向nfs伺服器
filename “/pxelinux.0″; #/tftp根目錄下的啟動引導檔案
}
重新開機dhcp服務:/etc/init.d/dhcpd restart
2. 配置TFTP
more /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -u nobody -s /tftpboot -m /tftpboot/rules –vv
#-s指定tftp根目錄, -m指定一個規則檔案, -vv輸出tftp的log到/var/log/message
disable = no #預設yes,關閉
per_source = 11
cps = 100 2
flags = IPv4
}
重新開機tftp服務:/etc/init.d/xinetd.restart
檢視tftp服務是否啟動:chkconfig –list | grep tftp
3. 建立TFTP的rules檔案
Linux下區分大小寫,但windows不區分,為免混亂,将所有查找檔案内容統一改成小寫。
more /tftpboot/rules
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
4. 配置SAMBA
windows的ris安裝是通過windows共享檔案的方式進行檔案傳輸,在linux下可以通過samba實作與windows進行檔案共享,進而實作ris安裝windows。
編輯samba配置檔案:/etc/samba/smb.conf
全局配置:
[global]
null passwords = true
workgroup = WORKGROUP
server string = Samba Server Version %v
security = share
dns proxy = no
load printers = no
disable spoolss = yes
debug level = 2
log file = /var/log/samba/%m.log
max log size = 0
共享配置:
[wininstall]
comment = Windows 2003 Install
path = /tftpboot
browsable = true
read only = no
writeable = yes
guest ok = yes
重新開機samba服務:/etc/init.d/smb restart
5. 配置啟動需要的檔案
上傳windows2003的鏡像或者檔案到伺服器。這裡使用上傳鏡像然後挂載。
mount /root/win2003cn.iso /mnt –o loop
mkdir /tftpboot/win2k3
cd /mnt
cp –a * /tftpboot/win2k3
下面需要解壓一些iso中的檔案,可以使用cabextract。
下載下傳頁:http://www.cabextract.org.uk/
可以根據版本下載下傳。
wget http://www.cabextract.org.uk/cabextract-1.3-1.i386.rpm
rpm –ivh cabextract-1.3-1.i386.rpm
配置windows ris 啟動檔案
cd /tftpboot
cabextract win2k3/i386/startrom.n1_
#解壓
sed -i -e ‘s/NTLDR/W2K3L/gi’ startrom.n12
#直接替換startrom.n12檔案中” NTLDR”為” W2K3L”
#W2K3L: windows 2003 Setup Loader
mv startrom.n12 /tftpboot/w2k3.0
# w2k3.0: windows 2003 pxe loader
cabextract win2k3/i386/setupldr.ex_
sed -i -e ‘s/winnt\.sif/wi2k3\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.2k3/gi’ setupldr.exe
mv setupldr.exe /tftpboot/w2k3l
cp win2k3/i386/ntdetect.com /tftpboot/ntdetect.2k3
# ntdetect.2k3: windows 2003 ntdetect.com
配置pxe啟動鏡像
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
# pxelinux.0依賴于syslinux,沒有安裝使用yum:yum –y install syslinux*
# pxelinux.0是PXE啟動引導檔案
配置pxe啟動加載檔案
pxelinux.0啟動中,讀取同目錄先pxelinux.cfg檔案夾下的配置檔案以确定它應該怎麼加載啟動檔案。
mkdir /tftpboot/pxelinux.cfg
vim /tftpboot/pxelinux.cfg/default
default win2k3
label win2k3
kernel w2k3.0 #與ris啟動檔案比對
建立安裝應答檔案
這個檔案很強大,提供的參數不是對系統很了解的人并不一定全知道,我們隻需要知道對我們有用的參數。當然,沒事的時候也可以慢慢研究。:)
vim /tftpboot/wi2k3.sif
[data]
AutoPartition = “0″
#關閉自動分區,2003還不能完全自動分區,這點需要手工操作。如果一定要跳過這一步,需要和後面的參數配合,并且2003提供的隻有将全盤劃成根盤(c:\)
floppyless = “1″
msdosinitiated = “1″
UnattendedInstall = “Yes”
OriSrc = \\192.168.0.1\wininstall\win2k3\i386
#注意samba和win安裝檔案路徑
OriTyp = “4″
LocalSourceOnCD = “1″
DisableAdminAccountOnDomainJoin = “1″
[SetupData]
OsLoadOptions = “/fastdetect”
SetupSourceDevice = “\Device\LanmanRedirector\192.168.0.1\wininstall\win2k3″
[Unattended]
UnattendMode = “FullUnattended”
#使用unattended檔案
FileSystem = “LeaveAlone”
NtUpgrade = “No”
OverwriteOemFilesOnUpgrade = “No”
DriverSigningPolicy = “Ignore”
UpdateInstalledDrivers = “Yes”
ConfirmHardware = “No”
ExtendOEMPartition = “0″
TargetPath = “\WINDOWS”
UnattendSwitch = “Yes”
WaitForReboot = “No”
CrashDumpSetting = “0″
OemSkipEula = “Yes”
OEMSkipWelcome = “1″
InstallFilesPath = “\\192.168.0.1\wininstall\win2k3\i386″
LegacyNIC = “1″
OemPreInstall = “Yes” #加載OEM中的驅動
[UserData]
ProductKey = “M4VQK-HVTD9-42RQX-2DJP2-23KVM”
FullName = “admin”
OrgName = “SDO”
ComputerName = C1ZJ
[GuiUnattended]
AdminPassword = WD#sd7258
EncryptedAdminPassword = “No”
OEMSkipRegional = “1″
TimeZone = “220″
OemSkipWelcome = “1″
[LicenseFilePrintData]
AutoMode=PerServer
AutoUsers=5
[Identification]
JoinWorkgroup = WORKGROUP
[RemoteInstall]
Repartition = “NO”
UseWholeDisk = “No”
#這裡和分區有關
[Networking]
InstallDefaultComponents = “Yes”
#以下的預設檔案中沒有,和伺服器raid卡驅動有關
[MassStorageDrivers]
“Windows Driver for Smart Array SAS/SATA Controllers” = OEM
[OEMBootFiles]
cp011324.xml
cpqsetup.exe
generic.dll
hpcisss2.cat
hpcisss2.sys
hpcissx2.inf
install.xml
txtsetup.oem
#以下是系統安裝完畢後第一次啟動執行的批處理檔案
[GuiRunOnce]
%systemdrive%\preinstall\runonce.cmd
6. 驅動加載相關
因為是伺服器的安裝,是以需要提前加載一些驅動,自動安裝的麻煩就在此。
pxe安裝需要加載網卡驅動(引導和檔案傳輸是兩個階段,傳輸檔案階段開始時要先把網卡驅動加載起來的)。
查到伺服器使用的Broadcom NetXtreme II網卡,而Broadcom提供在ris下的驅動:
wget http://www.broadcom.com/docs/driver_download/NXII/win_2k3_RIS-5.0.0.zip
mkdir /tftpboot/nicdrive
unzip win_2k3_RIS-5.0.0.zip -d /tftpboot/nicdrive
驅動網卡,需要有一個binl server,binl讀取所有新的與網絡接口卡相關的.inf檔案,并在映像中建立.pnf檔案。
binl server下載下傳:http://oss.netfarm.it/guides/
wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz
tar –zxvf ris-linux-0.4.tar.gz
cd ris-linux-0.4
./infparser.py /tftpboot/nicdrive/Server/W2K3_W2K8/RIS/
./binlsrv.py -d #-d 背景運作,不能停止此程式
cp /tftpboot/nicdrive/Server/W2K3_W2K8/RIS/b06nd51x.sys /tftpboot/win2k3/i386
這裡是Broadcom提供有專門的ris網卡驅動,如果沒有,可以将windows需要的網卡驅動(不限于網卡)的.inf檔案放在/tftpboot/inf檔案夾下,執行:
./infparser.py /tftpboot/inf
./binlsrv.py
然後是加載raid卡驅動(其他驅動也适用,關鍵是能否找到相關檔案)
光 盤安裝windows在開始時藍色螢幕上有一個按F6的提示,提示是通過軟碟加載磁盤驅動,這類驅動是windows系統中的驅動,可以下載下傳好 windows驅動,解壓好驅動放在一個指定的目錄,再通過應答檔案,一般可以加載上這類驅動。這類驅動加載完畢後不必在系統中再安裝。加載這類驅動有注 意點:檔案要有正确的oem數字簽名(一般提供驅動的廠商都帶數字簽名),亂改動這類檔案,同時不在配置檔案中寫明去掉數字簽名認證,是不能加載的。
下載下傳HP的raid卡驅動(已經查明型号:Smart Array E200i, 一般一個驅動支援多種類型的raid卡)。
wget http://h30445.www3.hp.com/pub/softlib2/software1/sc-windows/p1285069816/v55115/cp011324.exe
mkdir /tftpboot/win2k3/i386/$oem$/textmode
unzip cp011324.exe -d /tftpboot/win2k3/i386/$oem$/textmode
在自動應答檔案wi2k3.sif末尾添加:
[MassStorageDrivers]
“Windows Driver for Smart Array SAS/SATA Controllers” = OEM
#” Windows Driver for Smart Array SAS/SATA Controllers”可以檢視textmode檔案夾下的txtsetup.oem檔案,名字保持一緻
[OEMBootFiles]
cp011324.xml
cpqsetup.exe
generic.dll
hpcisss2.cat
hpcisss2.sys
hpcissx2.inf
install.xml
txtsetup.oem
#textmode下的所有檔案名字,一般自動安裝的驅動檔案.inf, .cat, .sys
修改[Unattended]字段,添加:
OemPreInstall = “Yes”
7. 更新檔,前期包,其他驅動的加載
完成以上操作就已經可以安裝系統了,但是系統安裝完成後需要做一些前期操作,像打更新檔,打安全包,或者一些驅動(晶片組,網卡,顯示卡等在上面沒有加載到系統中的一些驅動)。
這些優化的問題可以利用批處理檔案解決。這些批處理檔案最好是在windows下編輯好再上傳到伺服器,否則會出現格式問題導緻檔案不能執行。
首先需要在$oem$目錄下建立cmdlines.txt檔案,這個檔案會在系統安裝過程的注冊元件時間段(即還剩13分鐘左右時)調用:
vim /tftpboot/win2k3/$oem$/cmdlines.txt
[COMMANDS]
“install.cmd”
#檔案的内容以” [COMMANDS]“為起頭;使用引号(“)來标記下面需要執行的每條指令。 注意路徑問題,install.cmd的路徑為cmdlines.txt的同級目錄。這裡還可以添加系統資料庫。
以下是此時使用的nstall.cmd:
@ echo off
title Windows Install Prepackage, Hotfix and Drives
@ color 0a
@echo 安裝WINDOWS_2003_SP2更新檔, 大約需要20分鐘… 2>>%HOMEDRIVE%/errlog.txt
@ cd hotfix 2>>%HOMEDRIVE%/errlog.txt
WindowsServer2003-KB914961-SP2-x86-CHS.exe /quiet /norestart
WindowsUpdateAgent30-x86.exe /quiet /norestart
WindowsServer2003-KB925902-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB930178-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB931784-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB932168-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB935839-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB935840-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB933729-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB943460-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB921503-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB938829-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB941644-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB943485-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB942830-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB942831-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB943055-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB946026-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB941693-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB944338-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB945553-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB948590-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB951748-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB950974-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB952954-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB938464-x86-CHS.exe /quiet /norestart
windowsserver2003-kb953155-x86-chs.exe /quiet /norestart
windowsserver2003-kb954211-x86-chs.exe /quiet /norestart
windowsserver2003-kb956803-x86-chs.exe /quiet /norestart
windowsserver2003-kb956841-x86-chs.exe /quiet /norestart
windowsserver2003-kb957095-x86-chs.exe /quiet /norestart
WindowsServer2003-KB958644-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB957097-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB956802-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB958687-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB958690-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB960225-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB952004-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB956572-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB960803-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB961501-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB968537-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB970238-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB958469-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB971032-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB971657-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB967723-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB953298-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB958869-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB971486-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB975467-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB969947-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB974392-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB972270-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB971468-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB975713-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB977165-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB978251-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB979683-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB980232-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB979559-x86-CHS.exe /quiet /norestart
WindowsServer2003-KB980218-x86-CHS.exe /quiet /norestart
if %errorlevel% EQU 0 (
@ echo 更新檔安裝成功, 繼續安裝prepackge… 2>>%HOMEDRIVE%/errlog.txt
@ cd ..
@ goto prepackge 2>>%HOMEDRIVE%/errlog.txt
) else (
@ echo 更新檔安裝失敗, 繼續安裝prepackge… 2>>%HOMEDRIVE%/errlog.txt
@ cd ..
@ goto prepackge 2>>%HOMEDRIVE%/errlog.txt
)
:prepackge
@ echo 安裝Prepackage中… 2>>%HOMEDRIVE%/errlog.txt
@ cd windows_2010628 2>>%HOMEDRIVE%/errlog.txt
install.bat /qn 2>>%HOMEDRIVE%/errlog.txt
if %errorlevel% EQU 0 (
@ echo Prepackage安裝成功 2>>%HOMEDRIVE%/errlog.txt
@ cd ..
@ goto end 2>>%HOMEDRIVE%/errlog.txt
) else (
@ echo Prepackage安裝失敗 2>>%HOMEDRIVE%/errlog.txt
@ cd ..
@ goto end 2>>%HOMEDRIVE%/errlog.txt
)
:end
批處理檔案中的hotfix(有重要的更新檔,可以下載下傳放到這,但别忘記了修改批處理檔案),windows_20100628(安全部門制作的安全包解壓所得)檔案夾和install.cmd位于同級目錄,這裡就是在/tftpboot/win2k3/$oem$/下
其中在元件注冊時不能執行的的指令或者程式(包括有互動而不适合執行的程式),可以通過在自動應答檔案wi2k3.sif中添加[GuiRunOnce]字段,在第一次登入系統時執行腳本來完成一些短時間能夠完成的操作。
在/tftpboot/win2k3/$oem$/下建立檔案夾$1,這個檔案夾下的所有檔案(夾)會在安裝過程中複制到兄根目錄,即C槽。
mkdir /tftpboot/win2k3/$oem$/$1
cd mkdir /tftpboot/win2k3/$oem$/$1
mkdir preinstall
在windows平台編輯一個批處理檔案runonce.cmd,上傳到preinstall檔案夾下:
@ echo off
title Windows GuiRunOnce Install Drives
@ color 0a
echo starting drive
echo.
@ cd\
@ cd preinstall
@ cd hp
call bp000588.cmd
echo.
echo starting pcanywhere
@ cd\
@ cd preinstall
@ cd pcanywhere_10.5.1cn
start /wait SymantecpcAnywhere.msi
echo.
shutdown -r -t 0
exit
這 裡我将HP的所有驅動放到hp檔案夾下(因為我也分部清楚哪些需要,哪些不需要,就隻有全部上傳了,L),pcanywhere安裝檔案放到 pcanywhere_10.5.1cn檔案夾下。所有這些檔案夾統一放到preinstall檔案夾下(有需要還可以增加,修改runonce.cmd 即可)
最後在自動應答檔案wi2k3.sif中添加:
[GuiRunOnce]
%systemdrive%\preinstall\runonce.cmd
#注意路徑
8. 進階
上面隻是提到32為系統,對于64位系統,我們可以在/tftpboot下建立win2k3_64檔案夾,将iso下的檔案拷到此檔案夾下。
cabextract win2k3_64/i386/startrom.n1_
#解壓
sed -i -e ‘s/NTLDR/W2K3L_64/gi’ startrom.n12
#直接替換startrom.n12檔案中” NTLDR”為” W2K3L_64”
#W2K3L_64: windows 2003 64bit Setup Loader
mv startrom.n12 /tftpboot/w2k3_64.0
# w2k3_64.0: windows 2003 bit pxe loader
cabextract win2k3_64/i386/setupldr.ex_
sed -i -e ‘s/winnt\.sif/wi2k3_64\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.2k3_64/gi’ setupldr.exe
mv setupldr.exe /tftpboot/w2k3l_64
cp win2k3_64/i386/ntdetect.com /tftpboot/ntdetect.2k3_64
# ntdetect.2k3_64: windows 2003 bit ntdetect.com
samba伺服器需要建立針對64位系統的共享目錄,如[win64install];同時建立自動應答檔案/tftpboot/wi2k3_64.sif 。這兩者當中的路徑問題請一定要注意一一對應。
pxe加載/tftpboot/pxelinux.cfg/default檔案,需要有系統選擇時,可以修改檔案:
vim /tftpboot/pxelinux.cfg/default
default win2k3
timeout 30
label win2k3
kernel w2k3.0
label win2k3_64
kernel w2k3_64.0
其實不管是32位還是64位系統,啟動檔案都是一樣的,這些都可以不用修改,隻是用戶端從伺服器下載下傳檔案的路徑一定要區分32位和64位。
啟 動順序:pxelinux.0—> default—> pxe loader(w2k3.0, startrom.n12)—>setup loader(w2k3l, setupldr.exe) —> ntdetect.com(ntdetect.2k3) and winnt.sif(wi2k3.sif)
9. 小結
關 于驅動加載的問題,如果我們參照一台已經裝好windows2003系統的伺服器的硬體驅動(重要的是晶片組,網卡,顯示卡等)可以看出這些驅動主 要由.sys, .dll, .inf(驅動資訊檔案), .cat(驅動簽名檔案)等檔案組成。如果能收集到這些檔案放到系統安裝檔案裡,就不用事後打驅動那麼麻煩。但這個過程目前我還沒有摸透,這點還是有很大 的改進空間的。
使用這套系統安裝windows2003系統,加上打更新檔(大概超過20分鐘)的時間,前後在40分鐘左右
轉載于:https://blog.51cto.com/lxshopping/1303738