倒腾了半天,终于自己从网络安装了windowsXP, 其中还自己折腾了一个驱动,看了一点windows安装环境的内容。搞出来挺不容易,一定记录一下。

先说说环境,我是一个无线路由器,有线的方式拖着被安装的机器Thinkpad R40e, 无线的方式拖着 Thinkpad x200, 属于一个子网。无线基本就和有线的一样用,蛮方便的。

标题按照启动的顺序写的,自己编写代码不是很多,但是假如你能够看懂 python, 和一些configuration file会有蛮大的帮助。

1. dhcp / tftp环境。

x200是安装的服务器,所以要将无线路由器(网关)上的dhcp服务关掉,否则就有冲突了,然后将x200的服务开启。使用tftpd32 service edition。这个tftp 服务器是windows中挺好的,非常小巧好用,我喜欢。

dhcp就设置一个网段,然后将default router我写的x200的IP,其实应该不用到。

2. 得到pxelinux 映像文件

从网上下载syslinux-3.80 (built on 2009.5.29) , 注意3.81, 8.82有bug, 一开始用的就是3.82但是不行,后面会报告j8j9...的一个乱码文件找不到。google一下说是syslinux的bug……

syslinux的source到大牛网站kernel.org下载.

我们使用到的是syslinux 下面的 pxelinux.

wikipedia的解释,PXELINUX is used in conjunction with a compliant on a network card. The PXE environment uses or to enable basic networking, then downloads a program via . This bootstrap program loads and configures a according to directives that are also downloaded from the TFTP server.

我们就把pxelinux.0放到tftp home dir下。

然后找一下menu.c32(菜单), memdisk(内存虚拟硬盘),复制到tftp home dir

在tftp home dir 建立名为pxelinux.cfg子目录, 再建一个文件default, 其实可以根据不同的机器MAC地址写不同的配置文件。default的内容为:

DEFAULT menu.c32

PROMPT 0

ALLOWOPTIONS 0

TIMEOUT 50

MENU TITLE PXELinux Menu

LABEL winxp

MENU LABEL winxp

kernel winxp.0

然后配置安装windows的开机p_w_picpath

在E:\tftp目录建立子目录winxp,将windows安装光盘上的i386目录拷贝到E:\tftp\winxp目录,这样就有了目录E:\tftp\winxp\i386目录。将c:\windows\inf目录下的所有文件拷贝到E:\tftp\winxp\i386目录。(是拷贝目录下的文件,而不是目录) 将i386下的文件startrom.n1_ 使用winrar解压得到文件startrom.n12,将此文件更名为winxp.0,移动到目录E:\tftp 将i386下的文件setupldr.ex_ 使用winrar解压得到文件 setupldr.exe,将此文件更名为NTLDR,移动到目录E:\tftp 将 i386下的文件ntdetect.com拷贝到E:\tftp

在E:\tftp目录下建立文件winnt.sif,内容如下(注意修改其中的IP为你服务器的IP):

[data]

floppyless = "1"

msdosinitiated = "1"

; Needed for second stage

OriSrc = "\\192.168.21.151\reminst\winxp\i386"

OriTyp = "4"

LocalSourceOnCD = 1

DisableAdminAccountOnDomainJoin = 1

[SetupData]

OsLoadOptions = "/fastdetect"

; Needed for first stage

SetupSourceDevice = "\Device\LanmanRedirector\192.168.21.151\reminst\winxp"

[UserData]

ComputerName = *

; if needed

;ProductID=

上面这些是别处黏贴过来的,注意最后这个文件有两处ip地址,一开始只写了一个,害的我用python调试了好久才发现问题。。

然后配置网络匿名共享目标机启动了WINXP的安装程序后,XP的安装文件需要通过网络共享的方式拷贝过去。这时需要配置你的WINDOWS机器开启匿名共享。步骤如下:将E:\tftp目录共享,共享名为reminst。 注意共享权限中加入everyone,如果为NTFS分区,同时还要注意此目录的读写权限中也加入everyone。启动guest用户,并将guest用户密码置空从控制面板->管理工具进入“本地安全策略”,在本地策略->用户权利指派下找到“拒绝从网络访问这台计算机”,从中删除guest用户从控制面板->管理工具进入“本地安全策略”,在本地策略->安全选项下找到“让每个人权限应用于匿名用户”,将其启用。找到“可匿名访问的共享”,在其中加入reminst

还要从windows防火墙中将文件和打印机共享的东西允许起来。

下面就是RIS

windows RIS (remote install service), 本来是windows 2003 server这样的服务器版本上才会有的服务,现在我们windows XP 也可以有!有人用python写了一个 ris-linux, 我下载的是最新版0.4, 他主要完成的功能是从windows安装包里面找到NIC(网卡)的驱动。

用法是cmd走到ris的目录下,然后运行 infparser.py $(替换成windows i386目录), 这个python脚本的作用就是将i386下面的所有网卡驱动找出来,写到两个文件,nics.txt, 和devlist.cache。

然后将python写的一个服务器运行起来,.\binlsrv.py

当然我们需要安装python解释器,ris-linux用的是python 2.4, 我用2.6执行也成功了。

但是走到这里的时候依旧不行,boot到windows安装环境后就死机了,服务器端写的是PCI\VEN_14E4没有找到。即网卡没有驱动。。杯具。然后看看nics.txt文件里面的确是没有那个vendor id 和DEV 170d 的id。不甘心啊,然后看看找了nics.txt里面的文件,发现指向的也是一个驱动文件.cat .inf .sys这样的东西。网上下了一个r40e的驱动,居然驱动的文件里就是这样的东西。于是,

将这三个文件使用windows的cab打包工具makecab压缩一下,变成.CA_, .SY_这样的后缀,复制到 winxp\i386 目录下。在重新infparser一下,再试,就可以出现windows的logo和滚动条了!

可是事情依旧不那么顺利,进入之后,蓝屏了, 显示的是

PROCESS1_INITIALIZATION_FAILED, 错误代码0x0000006B 0xc0000022 0x00000002。

google也没有一个原因,后来我从另一台电脑上试图访问samba的winxp目录,居然不行,是tftp home dir没有设置访问用户,加上everyone, 改成完全控制。

再试一下,OK!