以前写了一个对 于sa来说节省了很大部分时间,现在又一批机器需要安装windows 2003由于有一台linux安装服务器,为节约服务器着想,决定在这台服务器上面安装一个linux ris服务器,其实在网上有一堆文章介绍搭建一个linux ris服务器批量安装windows,对于一般的pc来说照着他们的做也许没有问题很简单就能搭建出来,但是对于服务器而言就比较的麻烦了,首先我们的这 批服务器是dell的服务器,安装windows 2003需要dell的安装引导盘,引导盘的作用就是用来加载驱动程序,而网上的文章基本没有介绍有关如何加载驱动?加载驱动有什么技巧以及注意的地方。 我也问了我的一些sa的朋友,几个朋友都告诉我他们是一台台手动去安装,问他们原因,他们说配置驱动很麻烦。事实证明他们说的确实是这样,如果你安装的机 器是10台以内,我建议你还是别照着我的做了,一台台手动安装比较的快。 本文的中演示的是安装windows 2003 i386版本。并不适用其它版本,对于window 2003之前的版本可以参照进行相应的更改,对于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光盘中的压缩文件,具体可以在下载到你所需的版本, 由于我采用的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的驱动(不是系统下的驱动),具体这可在中下载到相应的驱动,我需要的驱动下载地址为: 下载解压 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 |