PXE网络安装实战(原创)
发表于:2007-07-04来源:作者:点击数:
标签:
PXE 网络 安装实战 在实际工作中,我们经常会遇到这样的情况:想要安装 Linux 但是计算机不带光驱或软驱,或者是笔记本配置的非标准的软驱和光驱,如1394接口,USB接口等,在Linux安装时所引导的Linux内核一般都不会带这些接口的驱动,所以也无法通过本地安
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 netb
ios-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 w
ant 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/pxe
linux.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
javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">
|
南非蜘蛛 回复于:2005-06-22 16:23:30 | 和我做的智能安装差不多:)
| kecai_cale 回复于:2005-06-22 17:07:24 | 好!学习一下
| wind521 回复于:2005-06-22 17:10:58 | 利用远程启动来实现,主要的是Tftp和dhcp服务一定要配合好
| platinum 回复于:2005-06-22 17:11:48 | [quote:6fd1165af4="wind521"]利用远程启动来实现,主要的是Tftp和dhcp服务一定要配合好[/quote:6fd1165af4] 说到根儿上了 :D
| wind521 回复于:2005-06-22 17:14:17 | 这个东东偶原来在第一家单位的时候给人家作过 还不错
| 南非蜘蛛 回复于:2005-06-22 17:16:33 | 我对bsd的jumpstart,rh9 的kickstart,debian的FAI solaris的jumpstart都有点研究,wind侄子,那天一起聊聊
| platinum 回复于:2005-06-22 17:17:47 | [quote:986c7b2f9c="南非蜘蛛"]wind侄子,那天一起聊聊[/quote:986c7b2f9c] :shock: 这个怎么回事啊。。。 我叫蜘蛛大哥,难不成。。。。。
| 南非蜘蛛 回复于:2005-06-22 17:25:06 | [quote:edcf2054ad="platinum"] :shock: 这个怎么回事啊。。。 我叫蜘蛛大哥,难不成。。。。。[/quote:edcf2054ad]
wind的老婆是我侄女 一不小心,大了一辈
platinum弟弟
| platinum 回复于:2005-06-22 17:26:43 | [quote:f673402e9e="南非蜘蛛"] platinum弟弟[/quote:f673402e9e] 那我岂不是也“一不小心”了,wind 啊,我不是成心的 :em06:
| tigerlei 回复于:2005-06-22 18:07:35 | 同情wind
| closed 回复于:2005-06-23 08:53:28 | 圈子就这么小?
| st690714 回复于:2005-06-23 09:55:49 | 重装系统也要通过DHCP吗?
| 风流涕淌 回复于:2005-06-23 10:33:41 | 学习中,先支持一下
| maonan0001 回复于:2005-06-23 13:50:06 | 跟 我在公司架设的差不多~
| aida2008 回复于:2005-06-27 17:35:21 | 无盘网就有利用这一技术,不过你把它的功能又拓展了
| bigluo 回复于:2005-07-06 01:11:01 | 系统安装完后会重启,client machines会不断地重复安装。
| jinscan 回复于:2005-07-06 09:46:51 | 学习
| 雨培心 回复于:2005-07-06 11:13:16 | 你们都在说什么侄子的,楼主讲得很详细啊
| lengi 回复于:2005-07-06 12:59:11 | 呵呵。我以前也做过pxe多播智能安装,同时安装几百台计算机,感觉真爽啊。
| tramp568 回复于:2005-07-10 18:15:12 | 学习中,收下~~
| goat 回复于:2005-07-12 20:07:25 | 做无盘的windows时候 PXE用得很多,但没试过用UNIX类系统来做服务器。 不知有没有人试过
| flyhu 回复于:2005-07-17 14:20:03 | 不错啊.好啊。又学到新东西了。.
| xlight 回复于:2005-07-29 13:00:57 | 好久不见了tigerlei,最近可好?和嫂子的幸福生活一定很甜蜜吧?
记得当年我问过你一个问题:“通过Linux怎么PXE安装windows系统?”
不知道现在你能不能给我这个答案阿?
|
原文转自:http://www.ltesting.net
|
|