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
阅读(1371) | 评论(0) | 转发(1) |