倒腾了半天,终于自己从网络安装了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.c32PROMPT 0
ALLOWOPTIONS 0
TIMEOUT 50
MENU TITLE PXELinux Menu
LABEL winxpMENU 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!