网络远程安装windows

      本来想晚些再发这篇文章,因为想实现多操作系统的网络安装,苦于没有测试环境,用虚拟环境会有这样那样的问题,没有成功,所以多操作系统的安装没有实现,只有理论上的方法。这几天也算是给自己放个假,过完这两天又要开始忙了,所以先写出单操作系统网络安装过程,多操作系统网络安装,等到有环境了,测试成功了再补上吧。

      其实网络上已经有了网络安装xp的方法,所以本文重点在于实现过程中重要环节可能出现的问题。Windows server已经提供了网络安装服务,来部署xp或2003的网络安装,可这要在域模式下来实现。经过一些人的努力,实现了工作组模试的网络安装。通过网络安装windows,无疑是非常方便的批量装机方法,不用光驱,不用光盘,只要是可以从网络启动的电脑就可以从网络上安装xp或2003。这要在一些老电脑的独立网卡上还要装一个启动模块,也不贵一两块钱一个。如今新机子的集成网卡已经内置网络启动功能了。

既是网络安装就要有服务器端和客户端,在此服务器端要运行四个服务:
1.  dhcp 用来分配置IP指定tftp服务器地址和启动文件
2.  tftp 提供文件传输服务
3.  binl 这个是实现工作组模式网络安装的关键,此服务实现了从网络加载客户端网卡的驱动,主要靠NCQ,NCR,RQU,RSU四种报文实现。
4.  文件共享服务
前两个服务可以使用Tftpd32来实现,第三个服务要用国外某位高人的作品binlsrv(本站提供下载)

首先来准备所需文件

从系统安装光盘里提取出STARTROM.N1_,SETUPLDR.EX_,NTDETECT.COM,BOOTFONT.BIN四个文件,用winrar或7zip打开前两个文件,提取出startrom.n12和setupldr.exe
Startrom.n12 此文件为微软的符合pxe启动规范的文件,执行后加载ntldr文件
Setupldr.exe 顾名思义,setup loader 安装加载程序,要将此文件改名为ntldr
Ntdetect.com 被setupldr调用,检测硬件,搜集基本硬件信息
BOOTFONT.BIN 这个是字体文件,也是setupldr调用的
Setupldr.exe还需要一个文件:winnt.sif,该文件内容如下

[data]
floppyless = "1"
msdosinitiated = "1"
; Needed for second stage
OriSrc = “\\SJZ-RING0\RemInst\xp\i386\”
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\SJZ-RING0\Reminst\xp"

[UserData]
ComputerName = *

其中主要是SetupSourceDevice 一行,如果SetupSourceDevice 的值不对会结出
The entry “setupsourcedevice” in the [setupdata] section of the inf file is corrupt or missing.
的错误提示。

这一行的格试为:
\Device\LanmanRedirector\server\share name\folder
\Device\LanmanRedirector\ 这部分始终不变
Server 这一行是服务器的计算机名
Share name 当然就是共享文件夹的共享名
Folder 是安装源文件所在文件夹
看起来有点复杂,但一定要按照这个目录结构来放置文件,否则就会得到上面那个错误提示
而OriSrc这一行在实际应用中没有发现它的作用,这行只是比setupsourcedevice多了\i386\(注意有两个”\”)为了保险起见,还是按这种格式书写即可。

选程安装工作过程大概如下:

Client端由网络启动,发现DHCP服务器并获得IP、tftp 服务器地址、启动文件名即startrom.n12
Client 从tftp服各器下载startrom.n12文件并执行,startrom.n12会向tftp服务器请求ntldr(由setupldr.exe改名而来)并执行它,ntldr再加载ntdetect.com bootfont.bin 和winnt.sif,ntldr通过winnt.sif文件中的setupsourcedevice参数来决定接下来要从哪里加载文件,\Device\LanmanRedirector\表示从网络加载。它会向tftp服务器的\folder\i386\目录请求预安装环境所需文件,这里的folder和上而setupsourcedevice中的folder是一样的,所以这也就规定了 tftp的跟目录是在共享目录之下,否则就会出上面那个错误提示。
预安装环境加载驱动前会向binlsrv 服务器发送Client端网卡驱动编号,binlsrv服务端查找驱动数据库,将匹配client端网卡的驱动文件名发给client端,安装程序加载tcp/ip驱动时,会从tftp服务器的xp安装源文件所在目录下载。
然后安装程序继续安装过程,这时已经可以支持tcp/ip,可脱离pxe,安装源文件不再从tftp下载,而从”文件共享服务器”的共享目录下载,最终完成安装。

了解了工作过程配置工作就简单了,要注意的是哪个阶段请求的是服务器端的哪个服务。

将之前准备好的五个文件放入f:\reminst
把xp的安装源文件的i386目录复制到f:\reminst\xp\下

配置tftpd32,我们只需要里面的dhcp和tftp服务
在settings里边将设置base directory,这是tftp的跟目录,本文设为f:\RemInst 按照上面的结论共享目录也是它,且共享名要和winnt.sif里指定的一样。
设置DHCP server,在ip pool starting address 里输入dhcp的地址池开始地址,地址段要和提供服务的网卡在同一网段。
Boot file 这里就是startrom.n12了
Mask 填255.255.255.0
其它可以不用管了

下面配置binlsrv
Binlsrv配置只有一步:生成驱动数据库文件
把client端网卡的驱动文件 inf sys之类的文件放入xp安装源文里
然后用Infparser.py 生成数据库文件,这是个python的解本文件,要安装python,我将他编译在了windows下可执行的exe,与binlsrv一起打包提供下载。
命令行执行 infparser.exe [驱动所在路径] 例如本文件的infparser.exe f:\reminst\xp\i386\
在infparser.exe所在目录生成nics.txt devlist.cache两个文件,复制到binlsrv.exe所在目录。

文件共享服务配置
如果你的服务器端用的是xp那么在我的电脑 文件夹选项里的查看标签,打开 简单文件共享,因为这样就开始了文件共享的匿名访问。如果是server 2003 就没有这个选项了,要开启匿名访问,在运行里输入gpedit.msc打开组策略,展开 计算机配置 windows设置 安全设置 本地策略 安全选项,把“网络访问:本地帐户的共享和安全模式”改为 “仅来宾……”
将”帐户:来宾帐户状态” 改为启用
“帐户:使用空白密码的本地帐户只允许进行控制台登录”改为 禁用
匿名访问打开后,将f:\reminst目录共享,共享名和winnt.sif里指定的要一至,本文就是reminst

Ok至此所有工作完成,运行tftp32,binlsrv,在其它电脑上设置为从网络启动,测试一下是不是可以从网络安装了。

RemInst.rar

参考文章:
RIS for Linux

网络远程安装windows》有2个想法

  1. qq

    在你的帮助下成功了,非常感谢。编译Infparser.py 实属首创啊,帮了我们这些小鸟们。

    回复

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据