Chinaunix首页 | 论坛 | 博客
  • 博客访问: 571546
  • 博文数量: 130
  • 博客积分: 7473
  • 博客等级: 少将
  • 技术积分: 1466
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-10 22:29
文章分类

全部博文(130)

文章存档

2012年(1)

2011年(22)

2010年(2)

2009年(58)

2008年(47)

分类: 系统运维

2011-05-09 01:33:16

PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。  
PXE协议的成功运行需要解决以下两个问题:  
既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置;  
通过什么协议下载Linux内核和根文件系统  
对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。  
至于第二个问题,在PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。  
这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程。  
工作过程  
在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。  
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。  
步骤
有了前面的背景知识,接下来就可以正式操作了,下面按照顺序给出了操作步骤:  
配置DHCP Server  
选用ISC dhcp-3.0,DHCP Server的配置文件是/etc/dhcpd.conf,配置文件的内容如下:  

option space PXE;
option PXE.mtftp-ip             code 1 = ip-address;
option PXE.mtftp-cport          code 2 = unsigned integer 16;
option PXE.mtftp-sport          code 3 = unsigned integer 16;
option PXE.mtftp-tmout          code 4 = unsigned integer 8;
option PXE.mtftp-delay          code 5 = unsigned integer 8;
option PXE.discovery-control    code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-class-identifier "PXEClient";
vendor-option-space PXE;
# At least one of the vendor-specific PXE options must be set in
# order for the client boot ROMs to realize that we are a PXE-compliant
# server.   We set the MCAST IP address to 0.0.0.0 to tell the boot ROM
# that we can't provide multicast TFTP (address 0.0.0.0 means no
# address).
option PXE.mtftp-ip 0.0.0.0;
# This is the name of the file the boot ROMs should download.
filename "pxelinux.0";
# This is the name of the server they should get it from.
next-server 192.168.0.1;
}
ddns-update-style interim;
ignore client-updates;
default-lease-time 1200;
max-lease-time 9200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.254;
option domain-name-servers 192.168.0.1,192.168.0.2;
option domain-name "mydomain.org";
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.100;
}  
host q10 {
hardware ethernet 00:00:F0:6B:38:5B;
fixed-address 192.168.0.22;
}
  

dhcpd.conf配置文件中几个关键部分说明如下:host q10{…}定义了笔记本Q10网卡的MAC地址与IP地址的对应关系,表明DHCP Server为Q10分配一个固定的IP:192.168.0.22;filename ""指定bootstrap的文件名;netx-server指定TFTP Server的地址。其它的配置请读者参考DHCP Server的手册。  

配置TFTP server  

选用tftp-hpa,TFTP Server的配置文件是/etc/xinetd.d/tftp,配置文件的内容如下:  

service tftp
{
       socket_type          = dgram
       protocol             = udp
       wait                    = yes
       user                    = root
       server                = /usr/sbin/in.tftpd
       server_args          = -u nobody -s /tftpboot
       disable                 = no
       per_source              = 11
       cps                   = 100 2
}
  

这里制定了/tftpboot为TFTP Server的根目录位置。  

配置bootstrap  

bootstrap文件在dhcpd.conf中被指定为pxelinux.0文件,放置在/tftpboot。Linux内核以及Linux根文件系统也放置在/tftpboot。pxelinux.0在执行过程中,要读配置文件,所有的配置文件都放在/tftpboot/pxelinux.cfg/目录下。由于PXElinux具有为不同的PXE Client提供不同的Linux内核以及根文件系统的功能,所以要通过不同的配置文件名来区分出不同的PXE Client的需求。比如一个PXE Client由DHCP Server分配的IP地址为192.168.0.22,那么相对应的配置文件名为/tftpboot/pxelinux.cfg/C0A80016(注:C0A80016为IP地址192.168.0.22的十六进制表示)。如果找不到,就按照顺序C0A80016->; C0A8001->; C0A800->; C0A80->; C0A8->; C0A->; C0->; C->;default查找配置文件。  

/tftpboot/pxelinux.cft/C0A80001配置文件的具体内容如下:  

DEFAULT install
PROMPT 1
LABEL install
KERNEL vmlinuz
APPEND initrd=initrd.img devfs=nomount ramdisk_size=16384
  

此配置文件指定了Linux内核以及根文件系统的名称,并给内核传递了一些参数,其中ramdisk_size参数要非常注意,它指定Linux内核启动后建立ramdisk的大小,如果设置太小,Linux的安装过程就可能无法进行。  

制作Linux内核/根文件系统  

因为需要通过网络安装,所有选择Redhat Linux 8.0安装盘(disk #1)中E:\images\bootnet.img(光驱的盘符为E:)。bootnet.img包括Linux内核、Linux根文件系统(有安装程序在内)。用bootnet.img制作一张引导软盘,方法在DOS命令行运行E:\dosutils\rawrite E:\images\bootnet.img,根据提示制作。制作完毕后,将引导软盘中的vmlinuz(Linux内核)和initrd.img(Linux根文件系统)拷贝到Linux Server的/tftpboot下。  

启动DHCP Server/TFTP Server  

在Linux Server上,运行service dhcpd start和service xinetd restart。  

启动Q10  

Q10加电后,在出现Samsung公司徽标时,在左下角会提示用户按F12进入网络引导。按F12后,Q10进入网络引导过程。首先通过DHCP Server获得了IP地址,然后下载并执行bootstrap文件pxelinux.0;在执行中,读入配置文件/tftpboot/pxelinux.cfg/C0A80016。此时屏幕上出现boot:,敲入install,就进入了Redhat Linux 8.0的网络安装界面,一切OK!  

计算机的网卡中必须要有BootROM--PXE Client。同时,PXE协议也可作为无盘Linux技术,用于引导放置在远程的Linux。实际上,只要根据需要,在Pxelinux的配置文件的APPEND选项中,为Linux内核传进需要mount的文件系统的位置参数即可。
PXE无盘站的启动原理简介:

  当客户机启动后,通过网卡bootrom程序广播一个引导请求帧,包含客户机的网卡号如:00E04C500234。 服务器接到请求帧便调用BOOTP(boot protocol/启动协议)或者DHCP( Dynamic Host Configuration Protocol/动态主机配置协议),分配给工作站端的机器名字、IP地址、服务器端的IP地址、以及启动时的映像文件等。工作站分配到IP地址后,利用服务器提供的TFTP ( Trivial File Transfer Protocol/小文件传输协议),接收到完整的启动文件后,就开始执行文件中的启动程序,将执行点转向启动块的入口,启动工作站。接着是不同的OS有不同的引导方式了,要启动无盘win98,需要往服务器上上传win98文件,并制作启动影像文件,工作站才能读取win98的启动影像文件,进一步读取win98安装目录,启动win98。

二、安装PXE无盘站所需的软件:

  根据以上的原理解释,我们知道启动无盘win98需要网卡PXE bootrom程序(写入主板bios,如果网卡已有PXE bootrom则不需要),DHCP服务器软件,PXE服务软件,TFTP服务软件,工作站上传工具,当然,还要有WIN98操作系统软件。
  我筛选的软件:8139网卡写入主板的bootrom程序8139pxe.lom,cbrom606.exe,awdflash.exe,Vicomsoft DHCP Server,3COM Dabs101(包含TFTP服务与PXE服务等),litenet115上传工具,Win98se操作系统,litenet所需英文win98软件包(如果有英文win98则忽略)。

三、安装PXE无盘站所需的硬件:

  如果只是做实验,硬件只需要两台普通的能装WIN98的PC电脑(含网卡并联网)。
  我的试验环境:
服务器:k6-2-350, 128m,硬盘46G Ibm 7200转,8139网卡
工作站(一台):C333, 主板via691(Award Bios),64m,tnt2 m64/16m显卡, 4235声卡,8139网卡
联网方式:双绞线直连

四、服务器端软件安装及配置

1、普通方式安装WIN98操作系统(如果已经是,忽略这一步),安装好网卡驱动程序、协议及服务(协议可以安装IPX/SPX兼容协议,NETBEUI,TCP/IP,Microsoft 网络上的文件与打印机共享)。

2、在“TCP/IP属性”中,指定IP地址,例如:

IP地址:192.168.0.1
子网掩码:255.255.255.0
默认网关:192.168.0.1

3、假定计算机名称为:pxeserver,工作组名为pxedomain。

4、安装3Com Dabs,序列码为:0111151111111111,安装类型:SERVER ,可使用缺省路径即C:\Program Files\3Com\DynamicAccess boot services。
  运行开始菜单中“程序”——3Com Boot Services中的PXE Server,如果在打开3COM PXE对话框时出现警告框,请点击“是”跳过。在3COM PXE Server对话框的Options标签中去掉“Proxy DHCP”前面的勾,在“File”菜单中的“Open Boot File”选中C:\Program Files\3Com\DynamicAccess boot services中的Bootptab,然后点击“打开(O)”按钮退出。

5、安装Vicomsoft DHCP Server并运行,在菜单中的“Network”下的“DHCP Setup”中的“Boot Server IP”设定为192.168.0.1,“Boot File”设定为C:\Program Files\3Com\DynamicAccess boot services\win98.pxe (3Com Dabs中的启动文件路径,win98.pxe的制作方法见下文),在菜单中的“Ports”下的“New Port”中把“Ip Address”由缺省的192.168.181.254改为192.168.0.1,在“Router Address”中填入“192.168.0.1”(此为工作站网关),点OK确定退出。如果需要用sygate之类的软件共享上网,还需要在菜单中的“Edit”下的“Preferences”中的“Network”选项中设定“DNS Addresses”为192.168.0.1,“Default Domain Name”设定为pxedomain。

6、在服务器上建立一个文件夹“pxeboot”并设为完全共享,在PXEBOOT文件夹下,为各用户建立个人目录并完全共享,例如:user01、user02、user03……

五、工作站软件安装上传及设置

1、 在有盘工作站上正常安装Win98并安装好需要的应用软件,假定为缺省安装路径c:\windows,安装好网卡驱动程序、协议及服务,协议可以安装IPX/SPX兼容协议,NETBEUI,TCP/IP,并且可以安装Microsoft 网络上的文件与打印机共享(注意这里与NT下的PXE-PDK无盘不同),将网络登录设置为“Microsoft友好登录”,设定计算机工作组为pxedomain。

2、 复制实模式下驱动程序
将keyb.com、ndishlp.sys、net.exe、net.msg、protman.dos、protman.exe、protocol.ini、RTL8139.sys、rtsnd.dos、snapshot.exe复制到c:\Windows目录下,全部替代;将第一版的ndis.vxd复制到c:\Windows\System 目录下,这里可用提供的e98files.exe解压到Windows文件夹中。

如果不知道还需要复制什么文件,可以运行litenet中的instnic.exe看提示一一复制。

3、 运行litenet115安装程序setup.exe,出现“Step 0”界面,单击“Next”。

4、 关闭“license.txt”文本,单击“Yes”按钮,出现“Step 1”界面,在“NetBIOS Server Name”文本框中输入服务器名,如pxeserver。在“NetBIOS Share Name”文本框中输入共享目录名,如pxeboot,单击“Next”。
出现“Comfirm”对话框,要求驱动网卡实模式,单击“Yes”,出现“Real Mode Net”对话框,在“Nic Type”选择框中选取“RTL8139”,单击“Install”,而后单击“Finish”。

5、 出现“Step 2”界面,单击“Next”, 出现“Step 3”界面,提示Windows目录、System目录、TEMP目录位置,若无误则单击“Next”。

6、 出现“Step 4”界面,在“Location of MS Windows files”文本框中,输入英文版的Win98安装文件所在路径(其实只需要输snapshot.exe所在目录就行,可能还需要base4.cab,如果已经拷贝了e98files到c:\windows,则只需输入c:\windows即可),单击“Next”。

7、 出现“Step 5”界面,按默认值设置,单击“Next”。 出现“Comfirm”对话框,单击“OK”,出现另一对话框,选择“No”,使工作站自动登录,再次出现对话框,提示计算机是否重启,选择“Yes”。

8、 重启出现“Step 6”界面,放入一张质量较好的软盘,用于制作启动映象盘,单击“Next”,出现格式化对话框,将其全面格式化,并可选中“复制系统文件”。

9、 出现“Step 7”界面,制作引导软盘,单击“Next”,复制相关文件。

10、 出现“Step 8”界面,系统提示安装Litenet实用工具,按默认值设置,单击“Next”,再三次单击“Yes”。

11、 出现“Step 9”界面,单击“Next”,再单击“OK”,出现“Synchroniaer”界面,选择“From Local Driver”,如果是第一次上传,单击“Complete Copy”(完全上传),开始上传文件。
上传完成后,系统自动检测WIN98SE,若为SE则提示你替换NDIS.VXD或运行FTuner进行PATCH,此处有个选项说是否建立虚拟盘,可以去掉前面的勾以节省工作站内存。

12、 出现“Step 10”,单击“Finish”完成。

13、 上传文件后,在服务器端作以下改动:
1) 拷贝服务器或工作站中c:\windows\system\sysdm.cpl到共享文件夹中的windows\system中如D:\pxeboot\windows\system中(解决工作站打不开控制面板的系统属性问题);

2) 进入PXEBOOT\WINDOWS文件夹,将3COM DABS安装目录中的FREEMEE.COM拷贝到此目录下,
找到并打开USERCMD.BAT做如下修改:
将QRESTALL命令前的rem去掉(可不改),并在其下添加以下一行:
c:\windows\freemem.com (解决作站运行到最后一步时,光标在左上角闪动几秒种后重启或起动到win98的蓝色界面, 出现鼠标后定住或重启的问题)
在WIN.COM命令之前插入以下面这条语句:
QVMEM S: %SERVER% %USERNAME% (设定虚拟盘符)

3) 找到并打开SYSTEM.INI,在[386Enh]小节添加以下三条语句:
PagingDrive=S (S为前面用QVMEM映射的虚拟盘符)
MinPagingFileSize=65535
MaxPagingFileSize=65535
这样无盘WIN98就可以使用虚拟内存了。如果工作站运行游戏或其它软件出现内存不足提示,可以适当把值设大!

4)为了屏蔽启动信息:
在Pxeboot\windows\Usercmd.bat第一行加入ctty con(生成软盘中的autoexec.bat也要做相应修改,见下文)

14、修改生成软盘中的文件:

1) 如果不能同时启动多台工作站,有的工作站启动的时候死机,将RANDELAY.EXE文件复制到A:\WINBOOT 目录下,在A:\WINBOOT\STARTNET.BAT中的QUALCNX命令前加入RANDELAY 5 60。

2)为了屏蔽启动信息:
修改autoexec.bat,加入:
@echo off
cls
ctty nul
...
...

15、 在服务器端“PXEBOOT\Windows”目录下,找到Netnames.db文件并打开它,删除其所有信息,输入机号及网卡地址,例如:
user01 00E04C500234
user02 00E04C500235
…… ……
若不知道网卡地址,Litenet可自动添加网卡记录到Netnames.db文件中。其方法为:在工作站启动出现:
Enter the name for this computer (Hardware Address 00E04C500234):
时,输入机号,例如:user01。系统提示:
Confirm that Hardware address 00E04C500234 is assicpned the name user01(Y/N) Y
系统提示重启计算机,注意此时只能修改一台,不然会出现文件共享出错。

16、给工作站加入PXE bootrom启动代码,如果网卡有PXE启动芯片则跳过这一步,如果没有,重新启动计算机并切换到MS-DOS方式:
1)读出BIOS文件
AWDFLASH /sy a b.bin
保存为b.bin,有找不到源文件的提示属于正常现象。
把b.bin复制一份以便可以恢复原来的状态
2)写8139pxe.lom到b.bin里面
CBROM606 b.bin /pci 8139pxe.lom
8139pxe.lom大小为52k,是专用写入主板Bios的,不要错把写入网卡的写入bios!
3)把b.bin写入主板BIOS
AWDFLASH b.bin /py /sn /r
4)OK!
不成功的原因可能有以下几个:
1)BIOS容量不够用
CBROM b.bin /d
找REMAIN COMPRESS CODE SPACE一行,看是否够64KB不够的话可以用CBROM删除一些LOGO之类的东西.
2)bios类型是AMI的或不是标准AWDARD的,比如华硕和皇朝的一些主板就都不行,但是可以用其它工具,这里不一一介绍了。

六、建立并配置WIN98无盘启动影像文件

1、运行服务器上开始菜单的“程序”——“3Com Boot Services”——“Boot Image Editor”,按提示执行“下一步”直到“完成”,并出现3Com Boot Image Edito对话框。

2、将安装工作站litenet115生成的软盘插入服务器软驱,选择3Com Boot Image Editor窗口中Create a TCP/IP or PXE image file选项,在“image file name”栏中使用缺省路径并加入文件名win98.img:“C:\Program Files\3Com\DynamicAccess boot services\win98.img”,选中options中的Writeable和Pre-OS两个选项,点击"ok"按钮建立启动影像文件。

3、选择3Com Boot Image Editor窗口中的Create a PXE menu boot file选项,点击"add"图标进入Edit Entry对话框,在image file文本框中输入win98.img,然后点击"ok"按钮返回Create menu file对话框,在此对话框中点击"save"按钮进入Save menu file对话框,在文件名文本框中输入win98.pxe,点击“OK”,然后点击“Save”保存返回,退出3Com Boot Image Edito对话框。

4、运行开始菜单中“程序”——“3Com Boot Services”——“Bootptab Editor”,在出现的对话框中选择“PXE”、“Open an existing”单选按钮,并在下面的文本框中输入C:\Program Files\3Com\DynamicAccess boot services\Bootptab,确定后进入BOOTPTAB Editor窗口。在窗口中选择"Edit"菜单下的"Add Host"菜单项,进入Edit Host窗口。在“Name”中输入 “user01”,在“Node”中输入网卡的MAC地址如:00E04C500234,在“Image”文本框中输入win98.pxe。点击“确定”按钮返回BOOTPTAB Editor窗口。选择“File”菜单下的“Save”保存设置,然后关闭BOOTPTAB Editor窗口。

七、在服务器上运行Vicomsoft DHCP Server,并在Status View窗口中点击按钮使其启动服务(按钮状态为On),运行3Com TFTP Server并使其启动服务(状态为 Server started)。可以不运行3Com PXE Server。

八、关闭工作站,取掉工作站的硬盘、软驱、光驱。
  重启进行工作站主板Bios设置,在STANDARD CMOS SETUP中,将硬盘设置为无,将软驱设置为1.44M(软驱设置为无会重启),在BIOS FEATURES SETUP中把Boot Up Floppy Seek(开机软驱寻道)设为Disable,有些主板还需要设置Boot First Lan(或者相似选项):Enable。
  重新启动,按Shift+F10键出现PXE启动设置框,选择
Network Boot Protocol:PXE
Boot Order:      Int 19h
Show Config Message: Disable (不出现提示信息,Enable为有提示信息)
按F4保存退出。

九、安装完成,工作站启动进入无盘Win98。

十、优缺点
 优点:
1、不用安装winnt server4.0+service park 6或win2000 server,减少安装时间,如果使用正版,不用买昂贵的软件及服务协议;
2、没有cannot find or load required file krnl386.exe问题;
3、没有tnt系列显卡16色问题;
4、没有添加了文件和打印共享就出错的问题;
5、没有修改工作站时间死机问题;
6、没有无法正常关机与重启的问题;

 缺点:
1、win98做服务器资源分配效率低,比如:
工作站启动时,服务器偶尔停顿;
工作站运行大型游戏如红警2、diablo2容易死机(不过还好,星际、帝国没问题);
工作站数量不能太多。
此缺点无法弥补,可能使用高配置的电脑做服务器会好一点点(期望值别太高哟)。
2、工作站用户权限设置功能弱,容易造成系统被破坏。
阅读(19391) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~