搭建linux ris服务器批量在dell服务器上安装windows 2003

Posted: 2009年10月7日星期三
以前写了一个《使用kickstart批量安装Linux》对于sa来说节省了很大部分时间,现在又一批机器需要安装windows 2003由于有一台linux安装服务器,为节约服务器着想,决定在这台服务器上面安装一个linux ris服务器,其实在网上有一堆文章介绍搭建一个linux ris服务器批量安装windows,对于一般的pc来说照着他们的做也许没有问题很简单就能搭建出来,但是对于服务器而言就比较的麻烦了,首先我们的这批服务器是dell的服务器,安装windows 2003需要dell的安装引导盘,引导盘的作用就是用来加载驱动程序,而网上的文章基本没有介绍有关如何加载驱动?加载驱动有什么技巧以及注意的地方。我也问了我的一些sa的朋友,几个朋友都告诉我他们是一台台手动去安装,问他们原因,他们说配置驱动很麻烦。事实证明他们说的确实是这样,如果你安装的机器是10台以内,我建议你还是别照着我的做了,一台台手动安装比较的快。

本文的中演示的是安装windows 2003 i386版本。并不适用其它版本,对于window 2003之前的版本可以参照linux ris安装文档进行相应的更改,对于vista之后的windows更不适用,vista之后的版本都改成了wds进行批量部署。
实施方案的拓扑图如下所示
          ┌────────┐
          │   Boot Server   │
          │(DHCP TFTP samba)│
          └───┬────┘
                  │
          ┌───┴───┐
          │     Switch    │
          └───┬───┘
                   │
      ┌─────┴──────┐
      │                         │
┌──┴───┐        ┌───┴───┐
│Client(PxE)  │        │Client(PxE)    │
└──────┘        └───────┘
实施步骤
1.配置启动服务器
2.配置安装方案
3.启动待安装服务器,进行系统安装

启动服务器就一个普通的linux pc能够连接上网络,下面说说我要安装的服务器配置
dell 1950:
CPU: E5410*2(2330MHZ)
mem: 2G*4
raid控制卡: PERC 6/i
网卡: NetXtreme II Broadcom
配置启动服务器
启动服务器的目的是帮助待安装机器上启动Red Hat Linux安装程序。启动服务器上需要搭建一个DHCP 服务器和一个TFTP 服务器,一个nfs用来传输网络镜像文件。前者是为了给待安装机器分配IP地址,后者则是提供了一个让待安装机器下载启动镜像的途径。
首先配置DHCP服务
1) 安装DHCP服务器包(RPM包名:dhcpd)。
2)配置服务器IP地址
3) 编辑DHCP服务器配置文件 /etc/dhcp.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;
range dynamic-bootp 192.168.0.128 192.168.0.254;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.0.4;
filename "pxelinux.0";
}
}

注:
一般参数基本一样,下面我说以下几个重要,平时作为dhcp服务器,不常用的几个参数
allow booting;allow bootp;这两句话的意思是能作为pxe的启动服务器,给他们分配ip地址,next-server作用是指定tftp服务器的地址,filename,找到tftp服务器后找下载那个启动文件,搭建tftp服务器
4) 给启动服务器配置一个IP,这个IP必须在DHCP服务器定义的子网内。上例中配置的启动服务器的ip地址为192.168.0.4。
5) 启动DHCP服务。
service dhcpd start
配置TFTP服务器(如没有安装xinetd软件包,先安装这个软件包)

1) 安装TFTP服务器包(RPM包名:tftpd)。
2) 编辑TFTP 服务器的配置文件 /etc/xinetd.d/tftp。配置文件如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = dpan
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -m /tftpboot/rules -vv
disable = no
}

注:
这里选定了/tftpboot为TFTP 服务器的根目录位置。
-m /tftpboot/rules 这里指定一个规则文件,这个文件的作用下文中指出,
-vv的作用是把tftp的log详细输出,log文件为/var/log/message,作用为便于调试。
3)建立/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

这个文件的作用是把所有的查找大写的内容转为小写,由于windows不区分大小写,故统一改成小写。
4)启动TFTP服务
service xinetd start

由于windows的ris安装是通过windows共享文件的方式进行文件传输后,在linux下可以通过samba实现与windows进行文件共享,进而实现了ris安装
配置samba服务器
1) 安装samba服务器包(RPM包名:samba)。
2)配置服务器IP地址
3) 编辑samba服务器配置文件 /etc/samba/smb.conf

[global]
null passwords = true
workgroup = MYGROUP
server string = Samba Server
security = share
load printers = no
disable spoolss = yes
debug level = 2
log file = /var/log/samba/%m.log
max log size = 0
dns proxy = no
[wininstall]
path = /tftpboot
browsable = true
read only = No
writable = yes
guest ok = Yes

配置启动信息
在windows下可以通过expand解压缩光盘中的文件,由于linux下面没有这个工具,但是有人写了一个叫cabextract的工具可以解压windows光盘中的压缩文件,具体可以在http://www.cabextract.org.uk/下载到你所需的版本,
由于我采用的centos 5.2 32位版,为简单着想我安装的是rpm包,具体操作如下
1)下载
wget http://www.cabextract.org.uk/cabextract-1.2-1.i386.rpm
2)安装
rpm -ivh cabextract-1.2-1.i386.rpm
上传windows 2003的iso镜像或者光盘中的内容到服务器的一个目录,这里我采用上传一个windows 2003的iso镜像到dpan目录下。并把光盘挂载到/tftpboot的win2k3目录下
1)建立win2k3目录
mkdir /tftpboot/win2k3
2)挂载iso文件到/mnt目录下
mount -o loop /dpan/windows2003.iso /mnt
3)为方便我们往后面往里面添加驱动或者添加启动后的脚本文件,我们把光盘中的内容复制到/tftpboot下的win2k3目录下
cp -r /mnt/* /tftpboot/win2k3
4)进入/tftpboot目录,配置windows ris启动文件信息(每行为一个命令)

cd /tftpboot
cabextract win2k3/i386/startrom.n1_
sed -i -e 's/NTLDR/W2K3L/gi' startrom.n12
mv startrom.n12 /tftpdpan/w2k3.0
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 /tftpdpan/w2k3l
cp win2k3/i386/ntdetect.com /tftpdpan/ntdetect.2k3

5)复制pxe的启动镜像到/tftpboot目录
启动镜像pxelinux.0可以在syslinux安装包里获得。安装好syslinux安装包后,将pxelinux.0复制到/tftpboot
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
6)启动镜像pxelinux.0文件在执行过程中,会读取同目录下pxelinux.cfg文件夹下的配置文件以确定它应该加载什么启动文件。
建立启动配置文件存放文件夹
mkdir /tftpboot/pxelinux.cfg
建立启动配置文件default
default win2k3
label win2k3
kernel w2k3.0

建立应答文件/tftpboot/wi2k3.sif,文件内容如下所示

[data]
AutoPartition = "0"
floppyless = "1"
msdosinitiated = "1"
UnattendedInstall = "Yes"
OriSrc = "\\192.168.0.4\wininstall\win2k3\i386"
OriTyp = "4"
LocalSourceOnCD = "1"
DisableAdminAccountOnDomainJoin = "1"

[SetupData]
OsLoadOptions = "/fastdetect"
SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.4\wininstall\win2k3"

[Unattended]
UnattendMode = "FullUnattended"
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.4\wininstall\win2k3\i386"
LegacyNIC = "1"

[UserData]
ProductKey = "11111-11111-11111-11111-11111"
FullName = "abc"
OrgName = "xyz"
ComputerName = *

[GuiUnattended]
AdminPassword = 123456
EncryptedAdminPassword = "No"
OEMSkipRegional = "1"
TimeZone = "220"
OemSkipWelcome = "1"

[Identification]
JoinWorkgroup = WORKGROUP

[RemoteInstall]
Repartition = "No"
UseWholeDisk = "No"

[Networking]
InstallDefaultComponents = "Yes"


完成后目录结构如下所示
|-- w2k3l
|-- ntdetect.2k3
|-- pxelinux.0
|-- pxelinux.cfg
|  `-- default
|-- win2k3
|  |-- i386
|  |-- autorun.inf
|  |-- bootfont.bin
|  |-- docs
|  |-- i386
|  |-- $oem$
|  |-- printers
|  |-- readme.htm
|  |-- setup.exe
|  |-- support
|  |-- win51
|  |-- win51ia
|  `-- win51ia.sp1
|-- rules
|-- w2k3.0
`-- wi2k3.sif

经过以上的操作基本可以把dell 1950起来到蓝色的安装界面,要是有不需要任何驱动的机器,基本可以完成安装。由于是服务器,有些特定的硬件需要提前加载好驱动,安装起来比较的麻烦,下面告诉你怎样加载驱动,
首先是NetXtreme II Broadcom网卡驱动,既然是网络安装,那么首先需要加载的一定是网卡驱动,由于Broadcom公司提供了ris的驱动(不是系统下的驱动),具体这可在Broadcom驱动下载页中下载到相应的驱动,我需要的驱动下载地址为:http://www.broadcom.com/docs/driver_download/NXII/win_2k3_RIS-5.0.0.zip
下载解压
wget http://www.broadcom.com/docs/driver_download/NXII/win_2k3_RIS-5.0.0.zip
mkdir -p /tftpdpan/nicdriver
unzip win_2k3_RIS-5.0.0.zip -d /tftpdpan/nicdriver


由于要驱动网卡,需要一个binlserver, BINL读取所有新的与网络接口卡相关的 .inf 文件,并在映像中创建 .pnf 文件。
配置binl server,用来加载网卡驱动
1)服务器下载
wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz
2)解压
tar xf ris-linux-0.4.tar.gz
3)执行
cd ris-linux-0.4
./infparser.py /tftpdpan/nicdrivers/Server/W2K3_W2K8/RIS/
./binlsrv.py -d
cp /tftpdpan/nicdrivers/Server/W2K3_W2K8/RIS/b06nd51x.sys /tftpdpan/win2k3/i386
启动被安装服务器,现在就可以加载到网卡驱动了

加载完网卡驱动还有找不到磁盘,需要加载raid磁盘驱动:
通过光盘安装过windows的用户知道在开始时蓝色屏幕上有一个按F6的提示,这个提示是用来通过软盘加载磁盘驱动,这类驱动是windows系统中的驱动,可以下载好windows驱动,解压好驱动放在一个指定的目录,再通过应答文件,一般可以加载上这类驱动,这类驱动加载完毕后不必在系统中再安装这类驱动。加载这类驱动有注意点:文件要有正确的oem数字签名(一般提供驱动的厂商都带数字签名),乱改动这类文件,同时不在配置文件中写明去掉数字签名认证,是不能加载的。
下面通过一个实例说明怎么加载dell的PERC 6/i raid卡的驱动,完成ris的驱动加载
1)下载dell的perc 6/i驱动
wget ftp://ftp.us.dell.com/SAS-RAID/DELL_MULTI-DEVICE_A07_R211422.exe
2)建立加载驱动的目录
mkdir -p /tftpboot/win2k3/\$oem\$/textmode
3)解压驱动文件
unzip DELL_MULTI-DEVICE_A07_R211422.exe -d /tftpboot/win2k3/\$oem\$/textmode
4)配置自动应答文件wi2k3.sif,在文件的末尾加上如下内容
[MassStorageDrivers]
"DELL PERC5 and PERC6/CERC6 RAID Controller Driver (Server 2003 32 bit)"=OEM

[OEMBootFiles]
nodev.inf
oemsetup.inf
percsas.cat
percsas.sys
txtsetup.oem
同时在wi2k3.sif中的[Unattended]段添加如下字段
OemPreInstall = "Yes"
注意了[MassStorageDrivers]段中的字符是编辑txtsetup.oem文件查看PERC_32中后面的字符段得到的结果,[OEMBootFiles]段中下面的配置就是刚刚解压后的所有文件,这样就完成了对raid卡驱动的加载
完成后目录结构如下所示
|-- w2k3l
|-- ntdetect.2k3
|-- pxelinux.0
|-- pxelinux.cfg
|  `-- default
|-- win2k3
|  |-- i386
|  |-- autorun.inf
|  |-- bootfont.bin
|  |-- docs
|  |-- i386
|  |-- $oem$
|    |-- textmode
|    |-- nodev.inf
|    |-- oemsetup.inf
|    |-- percsas.cat
|    |-- percsas.sys
|    `-- txtsetup.oem
|  |-- printers
|  |-- readme.htm
|  |-- setup.exe
|  |-- support
|  |-- win51
|  |-- win51ia
|  `-- win51ia.sp1
|-- rules
|-- w2k3.0
`-- wi2k3.sif
以上就可以完成对raid卡为PERC 6/i 网卡为:NetXtreme II Broadcom的机器批量安装。但安装完成后还需手动打补丁包、安装简单的软件如rar,以及执行一写安全脚本命令等。这样如果一台台去操作,工作量大。
学习了以下某些盗版光盘的制作方法,完成该系统的优化操作(由于这部分已经快是一个成型的windows系统,故建立的这部分文件千万注意了为windows文件格式,最好用windows下的文本编辑器进行编辑操作,用vi编辑的话会有两个后果,一是文件保存是两者的换行符不一致,而如果写了中文的话,两者保存了文件的编码方式不一致,导致执行不了这部分的命令)。
CMDLINES.TXT 这个文件位于$OEM$目录下,安装是当进行到注册组件(也就安装到剩余13分钟)时这个特殊的脚本被安装程序调用
下面是一个典型的
[COMMANDS]
"install.cmd"
"REGEDIT32.EXE /S youhua.reg"
"update.cmd"
这个文件的内容总是以" [COMMANDS]"为起头;总是使用引号(")来标记下面需要执行的每条命令CMDLINES.TXT是一个比较受限制的命令行接口,这就意味着很多传统DOS命令将不能由它进行调用,但是外部命令(比如REGEDIT32.EXE)还是可以调用的.
注意路径问题,这里的youhua.reg、update.cmd和install.cmd的路径为cmdlines.txt的同级目录.在$oem$目录下建立一个youhua.reg和install.cmd文件,youhua.reg文件为注册表优化的一部分参数,install.cmd为打补丁和安装网卡驱动的一些操作,install.cmd为添加网卡驱动的操作,下载网卡驱动,放置在$oem$目录下的DrvInst下,下面为几个文件的具体实例
install.cmd

@ echo off
@ color 0a

@ echo 安装网卡驱动中。。。。。 2>>%HOMEDRIVE%/errlog.txt

@ cd DrvInst 2>>%HOMEDRIVE%/errlog.txt

BDrv5706.msi /qn 2>>%HOMEDRIVE%/errlog.txt

if %errorlevel% EQU 0 (
@ echo 网卡驱动安装成功 2>>%HOMEDRIVE%/errlog.txt
@ cd ..
@ goto win2k3sp2 2>>%HOMEDRIVE%/errlog.txt
) else (
@ echo 网卡驱动安装失败 继续安装WINDOWS_2003_SP2 补丁 2>>%HOMEDRIVE%/errlog.txt
@ cd ..
@ goto win2k3sp2 2>>%HOMEDRIVE%/errlog.txt
)

:win2k3sp2

@echo 安装WINDOWS_2003_SP2补丁中。。。。 2>>%HOMEDRIVE%/errlog.txt

sp2.exe /passive /norestart 2>>%HOMEDRIVE%/errlog.txt

if %errorlevel% EQU 0 (
@ echo WINDOWS_2003_SP2补丁安装成功 2>>%HOMEDRIVE%/errlog.txt
) else (
@ echo WINDOWS_2003_SP2补丁安装失败 详细见errlog日志 2>>%HOMEDRIVE%/errlog.txt
)

youhua.reg

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\netBT\Parameters]
"SMBDeviceEnabled"=dword:0
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"RestrictAnonymous"=dword:1
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"SynAttackProtect"=dword:1
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableCAD"=dword:1
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DontDisplayLastUserName"=dword:1
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DontDisplayLockedUserId"=dword:3
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"DontDisplayLastUserName"=dword:1
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]
"PortNumber"=dword:12345
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
"PortNumber"=dword:12345

完成后目录结构如下所示
|-- w2k3l
|-- ntdetect.2k3
|-- pxelinux.0
|-- pxelinux.cfg
|  `-- default
|-- win2k3
|  |-- i386
|  |-- autorun.inf
|  |-- bootfont.bin
|  |-- docs
|  |-- i386
|  |-- $oem$
|    |-- install.cmd
|    |-- youhua.reg
|    |-- cmdlines.txt
|    |-- DrvInst
|      |-- BDrv5706.msi
|      |-- 0x0409.ini
|      |-- DrvFiles.cab
|      |-- instmsia.exe
|      |-- instmsiw.exe
|      |-- setup.exe
|      |-- Setup.ini
|  |-- textmode
|      |-- nodev.inf
|      |-- oemsetup.inf
|      |-- percsas.cat
|      |-- percsas.sys
|      `-- txtsetup.oem
|  |-- printers
|  |-- readme.htm
|  |-- setup.exe
|  |-- support
|  |-- win51
|  |-- win51ia
|  `-- win51ia.sp1
|-- rules
|-- w2k3.0
`-- wi2k3.sif
上一步部分不是说有一部分命令不能执行吗,还有办法在应答文件中添加即自动应答的GuiRunOnce段中添加执行脚本,具体就是在第一次登录系统时执行脚本,脚本放置在$oem$下的$1目录里,这个目录里的内容会放在系统安装盘下根目录下,由于windows自动安装中不能自动分区通过GuiRunOnce,使用系统自带的diskpart命令实现自动分区,使用系统自带的cacls等命令实现分区及系统安全
在wi2k3.sif文件中添加如下内容,实现分区和系统安全及其其它命令
[GuiRunOnce]
%systemdrive%\diskpart.cmd
%systemdrive%\setup.cmd
下面是实现后的目录结构
|-- w2k3l
|-- ntdetect.2k3
|-- pxelinux.0
|-- pxelinux.cfg
|  `-- default
|-- win2k3
|  |-- i386
|  |-- autorun.inf
|  |-- bootfont.bin
|  |-- docs
|  |-- i386
|  |-- $oem$
|    |-- install.cmd
|    |-- youhua.reg
|    |-- cmdlines.txt
|    |-- DrvInst
|      |-- BDrv5706.msi
|      |-- 0x0409.ini
|      |-- DrvFiles.cab
|      |-- instmsia.exe
|      |-- instmsiw.exe
|      |-- setup.exe
|      |-- Setup.ini
|  |-- textmode
|      |-- nodev.inf
|      |-- oemsetup.inf
|      |-- percsas.cat
|      |-- percsas.sys
|      `-- txtsetup.oem
|  |-- $1
|      |-- diskpart.cmd
|      |-- diskpart.txt
|      |-- setup.cmd
|  |-- printers
|  |-- readme.htm
|  |-- setup.exe
|  |-- support
|  |-- win51
|  |-- win51ia
|  `-- win51ia.sp1
|-- rules
|-- w2k3.0
`-- wi2k3.sif

下面是几个文件的具体内容
diskpart.cmd

@ echo off
for %%i in (d,e,f,g,h) do mountvol %%i: /D > nul
%windir%\system32\diskpart /s %systemdrive%\diskpart.txt
echo y | format D: /FS:NTFS /V:GAME /Q /X /A:4096
if %errorlevel% EQU 0 (
@ echo format D: success....
) else (
@ echo format D: fail....
)
echo y | format E: /FS:NTFS /V:OTHER /Q /X /A:4096
if %errorlevel% EQU 0 (
@ echo format E: success....
) else (
@ echo format E: fail....
)


diskpart.txt

select disk 0
create partition extended
create partition logical size=30800
assign letter=D
create partition logical
assign letter=E


setup.cmd

@ echo off

@del /f /q %WINDIR%\Web\printers
@del /f /q %WINDIR%\Web\printers\images
@del /f /q %WINDIR%\Web\printers\PrtCabs
@del /f /q %WINDIR%\Help\iisHelp

wmic useraccount where name='administrator' call Rename test
net user dpan 123456 /add /passwordchg:yes /expires:never
net localgroup "Remote Desktop Users" dpan /add
net user epan 654321 /add /passwordchg:yes /expires:never
net localgroup "Remote Desktop Users" epan /add
net localgroup Users dpan /del
Net user epan 654321

Cacls D:\ /e /c /d epan
Cacls C:\ /t /e /c /g epan:f
Cacls E:\ /t /e /c /g epan:f
Cacls C:\ /e /c /d dpan
Cacls D:\ /t /e /c /g dpan:f
Cacls E:\ /e /c /d dpan
Cacls C:\ /e /c /d everyone
Cacls D:\ /e /c /d everyone
Cacls E:\ /e /c /d everyone
Cacls C:\ /e /c /r everyone
Cacls D:\ /e /c /r everyone
Cacls E:\ /e /c /r everyone

del %systemdrive%\diskpart.cmd
del %systemdrive%\diskpart.txt
del %systemdrive%\%0

0 评论: