搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

PXE网络安装实战

在实际工作中,我们经常会遇到这样的情况:想要安装linux但是计算机不带光驱或软驱,或者是笔记本配置的非标准的软驱和光驱,如1394接口,usb接口等,在linux安装时所引导的linux内核一般都不会带这些接口的驱动,所以也无法通过本地安装 linux,此外,在一些场合,如机房,it实验室,工厂生产线,有大量的计算机需要同时安装linux,如果通过光驱的方式一个个安装,不仅效率低,也不利于维护。这是时候你就需要pxe的强大功能了。本文将就pxe的基本原理和工作方式进行简要介绍,重点通过实际操作来演示如何通过网络安装 redhat和freebsd这两个系统以及引申出来的其它功能
基本原理
pxe是什么
pxe(pre-boot execution environment)是由intel设计,可以使计算机通过网络启动的协议。协议分为client和server两端,pxe client在网卡的rom中,当计算机启动时,bios把pxe client调入内存执行,并显示出命令菜单,经用户选择后,pxe client将放置在远端的操作系统通过网络下载到本地运行。
pxe是怎样工作的
图一
图二
图1是网络安装redhat的过程,图2是网络安装freebsd的过程
从上图我们可以看到,无论安装什幺类型的操作系统,pxe的安装过程大致可以描述为以下几个步骤:
1. 客户机从自己的pxe网卡启动,向本网络中的dhcp服务器索取ip
2. dhcp服务器返回分给客户机ip以及bootstrap文件的放置位置(该文件一般是放在一台tftp服务器上)
3. 客户机向本网络中的tftp服务器索取bootstrap文件
4. 客户机取得bootstrap文件后之执行该文件
5. 根据bootstrap的执行结果,通过tftp服务器加载内核和文件系统
6. 进入安装画面, 此时可以通过选择ftp,http,nfs方式之一进行安装
从这里我们不难得到实现pxe网络安装必需的4个要素
1. 客户机的网卡必须为pxe网卡
2. 网络中必须要有dhcp和tftp服务器,当然这两个服务器可以是同一台物理主机
3. 所安装的操作系统必须支持网络安装,即必须提供自己的bootstrap
4. 必须要有ftp,http,nfs至少一个服务器,当然也可以和dhcp和tftp服务器同为一台物理主机
实际演练
了解了pxe的原理以及工作过程后,下面我们来实际操作,通过实现pxe网络安装必需的4个要素,来演示一遍安装的全过程.本例使用redhat9作为服务器的操作系统.
pxe网卡
现在市面上的的网卡,不论是板载或是pci网卡基本上都支持pxe,所以第一个要素不成问题.
dhcp和tftp服务器
为了简便起见,我们将dhcp和tftp服务运行在同一台物理主机上.
配置dhcp服务器
dhcp服务的配置文件是/etc/dhcpd.conf,但是redhat9 默认安装没有生成该文件,我们可以将/usr/share/doc/dhcp-3.0pl2/dhcpd.conf.sample拷贝到/etc下并改名为dhcpd.conf进行配置:
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway
   option routers         192.168.0.1;
   option subnet-mask       255.255.255.0;

   option nis-domain        "domain.org";
   option domain-name       "domain.org";
   option domain-name-servers   192.168.1.1;

   option time-offset       -18000; # eastern standard time
#    option ntp-servers       192.168.1.1;
#    option netbios-name-servers   192.168.1.1;
# --- selects point-to-point node (default is hybrid). don't change this unless
# -- you understand netbios very well
#    option netbios-node-type 2;

   range dynamic-bootp 192.168.0.128 192.168.0.254;
   default-lease-time 21600;
   max-lease-time 43200;

   # we want the nameserver to appear at a fixed address
   host ns {

#   next-server marvin.redhat.com;
hardware ethernet 00:e0:81:61:16:60;
fixed-address 192.168.0.105;
filename “/tftpboot/pxelinux.0”;
#   filename "/tftpboot/pxeboot";
option root-path "192.168.0.1:/freebsd";
   }
}
红色部分是修改过的部分,我一一解说其作用
next-server marvin.redhat.com
这是指明tftp服务器的ip或者是主机名,如果你的tftp和dhcp是同一台物理主机,那就可以注释掉该行,本例中便注释掉了该行
hardware ethernet 00:e0:81:61:16:60
fixed-address 192.168.0.105

如果你希望对某一台客户机指定一个固定的ip,那幺你就需要将该客户机的mac地址与你希望它得到的ip写在这里,本例我们将一台mac地址为00:e0:81:61:16:60的主机指定了一个固定ip: 192.168.0.105

filename

这一个选项很重要,它的作用是指明bootstrap所在的位置,一般是指向一个tftp服务器的某个目录下

option root-path

该选项在用来定义根文件系统的路径,一般是一个nfs方式。本例主要是针对安装freebsd而设置
配置tftp服务器
tftp服务的配置文件是/etc/xinetd.d/tftp,redhat9 默认安装已经生成了该文件

service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
per_source = 11
cps = 100 2
flags = ipv4
}
这个文件基本上不用改动,但是需要注意的的是server_args= -s /tftpboot这一行,它的含义是将/tftpboot作为root目录,这样在dhcpd.conf中的filename一行就应该写 bootstrap的相对路径: filename “/pxelinux.0”,这是出于安全方面考虑的.如果你去掉了-s这个参数,那幺就要在filename一行指出bootstrap的绝对路径: filename “/tftpboot/pxelinux.0”.为了和本例的dhcpd.conf相一致,我们去掉-s变为
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = /tftpboot
per_source = 11
cps = 100 2
flags = ipv4
}
bootstrap
对于支持网络安装的操作系统,bootstrap基本上都可以从安装源文件上找到,对于本例来说,redhat的bootstrap就是 /usr/lib/syslinux/pxelinux.0,freebsd的bootstrap就是/boot/pxeboot,我们把它们都拷贝到 /tftpboot下.
nfs服务器
要实现freebsd的安装还缺少一个nfs服务器,即dhcpd.conf所提到的root-path选项,我们不妨也将它和dhcp,tftp运行在同一个物理主机上,它的配置文件很简单,就是/etc/exports:
/freebsd  *(rw)
到这里,四个要素已经全部实现,我们开始着手进行最后的配置.
配置redhat
把redhat第一张安装光盘上images/pxeboot目录下的initr.img和vmlinux也考到/tftpboot/目录下。在 /tftpboot创建pxelinux.cfg目录,用于放syslinux的配制文件。sysconfig的配制文件有现成的可用,在redhat第一张安装光盘isolinux/下有一个isolinux.cfg文件,把它拷贝到/tftpboot/pxelinux.cfg/目录下并改名为 default.下面为修改后的default文件:
default linux
prompt 1
timeout 30
label linux
kernel vmlinuz
append initrd=initrd.img
这个default 文件很容易看懂,就是告诉启动后使用那个内核引导
配置freebsd
以freebsd5.2为例,将5.2-release-i386-disc1.iso挂接在/freebsd下:
mount –o loop 5.2-release-i386-disc1.iso /freebsd
开始安装
服务器方面
首先通过setup命令设置服务器自身的ip为192.168.0.1,然后依此启动dhcp,tftp,nfs服务器:
# cd /etc/rc.d/init.d
# ./dhcpd restart
(如果安装redhat,先要将dhcpd.conf中的filename "/tftpboot/pxeboot" 注释掉(加字符#),再把filename "/tftpboot/pxelinux.0" 去掉注释(去掉字符#),安装freebsd则刚好相反)
#./xinetd restart
#./nfs restart
关闭防火墙
#./iptables stop
客户机方面
客户机只需设置bios从网络启动即可,开机后可以看到它将按预计引导进入安装画面,此时和用光驱从本地安装的画面是一样的.接下来就可以根据安装手册完成安装,这里就不再叙述
引申
pxe除了用于网络安装以外,也可以直接从网络引导内核到内存中执行,实现无盘系统.我们结合上面的配置举两个实际的例子来说明.
例一:
如果你管理的机房或者实验室的linux系统有了故障,需要进入到rescue模式去修复.若是一台一台去从光驱或软盘引导进入就太麻烦了,我们可以采用pxe来一劳永逸.具体做法是:在/var/www/html下建立redhat/base目录,并且拷贝第一张安装盘上的 /redhat/base/netstag2.img到/var/www/html/redhat/base目录里.这样客户机网络引导进入安装画面时候,只需输入linux rescue,然后在选择rescue img位置时选择http,输入服务器的ip,路径一栏输入/,回车后就可以顺利进入安全模式。
例二:
大部分主板测试部门都会采用memtest86这个软件去测试内存,一般地做法是将程序写到软盘里,从软盘启动执行,这样一来,即要占用大量的软驱而且大大缩短了软盘的寿命,成本会增加.我们可以采用pxe方式直接从网络引导这个程序到内存执行,速度又快又可以避免设备的消耗.具体做法是修改 default的内容为
default linux
prompt 1
timeout 600
label linux
kernel vmlinuz
append initrd=initrd.img
label mem
kernel mem86.bin
append root=/dev/ram0 rw
mem86.bin是memtest86的主程序,将它放置到/tftpboot下,客户机从pxe引导进入安装画面时只需输入mem,就可以直接通过tftp将mem86.bin解压到ramdisk并自动运行.

小结
pxe使得我们本来繁琐的重复性工作得到了简化,大大节省了人力物力以及时间,这对于力求降低成本的工厂有着重大的意义,对于个人而言,无疑也加深了对网络安装的更深一步认识.
作者 雷凯 上海mitac环达计算机公司软件处 email:tigerleihm@yahoo.com.cn

screen.width-300)this.width=screen.width-300 border=0 alt=click to open in new window>

()

相关文章:
© 2006   www.java-asp.net