分类: LINUX
2010-01-11 16:30:27
(Dhcp+nfs+tftp+ks )
在安装RedHat Linux企业版的过程中,我们都知道它允许通过NFS、HTTP或FTP协议来进行网络安装。但是在一般情况下我们需要有一个安装引导介质(引导光盘、引导软盘、U盘等),有没有一种方法不通过引导光盘方式来安装呢,而直接通过网络来进行安装?答案是有,即通过PXE技术实现。
一、基本原理:
PXE到底是什么东东?
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。
既然是通过网络传输,就需要IP地址;也就是说在其启动过程中,客户端请求服务器分配IP地址,之后PXE Client使用TFTP Client 通过TFTP(Trivial File Transfer Protocol)协议下载启动安装程序所需的文件。
简单地说PXE网络安装,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。
1:客户端网卡在主机启动初始化时通过网卡内置的PXE芯片启动DHCP进程向server获取ip地址,网卡获取到ip地址后,server会提供给client一个下载bootloader的指令,就是dhcp服务器中dhcpd.conf配置文件中filename这个选项。
2:网卡PXE芯片中已经包含了tftp client程序,获取到ip地址后,网卡会启动tftp服务去向tftp server请求传输这个bootloader文件PXElinux.0。当Bootloader加载后我们可以看到主机屏幕上有信息显示,而这个画面就是我们在用光驱装linux的时候看到的第一个画面。画面提示选择图形
界面安装还是linux text字符界面安装等信息。如果在server端的tftpboot目录下只有这个文件,那么客户机会一直停留在boot这个地方,因为没有default这个bootloader配置文件告诉机器下一步加载哪个系统内核,default配置文件的作用是告诉主机从哪里去加载操作系统内核,这个时候如果我们按照正常光碟装机时会看到提示:输入回车或者linux text等信息。Bootloader会去调用default配置文件中的操作系统内核文件。
3:default 文件配置好之后,接着就是指定内核文件,这个在default文件最后。就是vmlinuz,initrd.img *.msg 这几个文件。
4:到这一步加载成功后,系统就按照我们平常光碟装系统看到的过程一模一样了,选择语言,鼠标,键盘等,但因为有了KS这个自动安装脚步,这些都不要我们手工去指定,全部会自动完成。
5:到这里为止,也许有人会问,那我们从哪里去加载安装的镜像。且慢,不是有个ks安装脚本吗,就是这个脚本里面我们可以指定安装镜像在哪里。
6:现在就考虑系统镜像的传输,这里我们选用linux特有的NFS网络文件系统进行镜像的传输。
二、配置安装
可以分为如下步骤:
1、配置服务器端的DHCP,用于给客户端提供IP地址及其它信息
2、配置服务器端TFTP服务器,用于提供客户端PXE引导所必须的文件
3、配置服务器端NFS服务器,用于存放安装树
4、配置服务器端Kickstart,用于自动应答安装
5、使用PXE功能引导客户机
1、DHCP安装和配置
1)DHCP的安装
[root@oracle9i ~]# rpm -qa |grep dhcp
dhcpv6_client-0.10-24_EL4
dhcp-
我的机器已经安装,如果没有安装,找到Redhat的光盘镜像里面找到RPM包文件夹进行安装即可
2)、配置DHCP
[root@oracle9i ~]# cp /usr/share/doc/dhcp-
为了满足我们的安装需求,假设PXE服务器、DHCP服务器、TFTP服务器全部安装在一台为192.168.203..217的计算机上。我们需要进行如下操作:
(1)修改 /etc/dhcpd.conf 文件,指定 IP 地址等信息。
(2)在 '''/etc/dhcpd.conf''' 中增加 tftp-server 需要推送给客户端的启动文件(bootstrap):filename "pxelinux.0";因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是: /tftpboot/pxelinux.0";当然也可以指定为其它的路径。
另外需要指定 next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件: next-server 192.168.203.217;
最终的配置文件结果如下所示:
[root@oracle9i ~]# vi /etc/dhcpd.conf
option domain-name "domain.org";
option domain-name-servers 202.96.209.133;
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.203.128 192.168.203.254;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.203.227;# #TFTP Server的IP地址
filename "/pxelinux.0";
# we want the nameserver to appear at a fixed address
# host ns {
# next-server marvin.redhat.com;
# hardware ethernet 12:34:56:78:AB:CD;
# fixed-address 207.175.42.254;
# }
}
配置完成后,重启DHCP服务,并将它设为开机自启动。
[root@oracle9i ~]# service dhcpd restart
Shutting down dhcpd: [FAILED]
Starting dhcpd: [ OK ]
2、安装配置TFTP服务器
在PXE安装过程中,客户机在使用TFTP协议从TFTP服务器下载引导文件并执行。我们主要通过配置TFTP服务器和PXE的引导配置完成这个过程。
1)安装配置TFTP服务器
首先,安装TFTP服务器软件包,RedHat提供了如下两个软件包:
tftp-server:服务端程序
tftp :客户端程序
[root@oracle9i ~]# rpm -qa | grep tftp
tftp-server-0.39-3.el4
2)配置tftp服务
tftp 服务由xinetd服务管理。编辑 '''/etc/xinetd.d/tftp''' 文件,将 '''disable = yes''' 改为:disable = no。
[root@oracle9i ~]# vi /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
从这里看出,默认选择/tftpboot为TFTP服务器的根目录位置,配置完成后重启xinetd服务,使TFTP服务器生效。
[root@oracle9i ~]# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
[root@oracle9i ~]#
3)客户端PXE引导配置。
PXE启动映像文件由syslinux软件包提供,RedHat Enterprise Linux光盘中已提供,如果没有此软件包可以到syslinux 主页:下载rpm来安装。
我们只要安装了syslinux,就会生成一个pxelinux.0,将 pxelinux.0 这个文件复制到 '''/tftpboot''' 目录即可:
[root@oracle9i ~]# rpm -qa | grep syslinux
syslinux-2.11-1
[root@oracle9i ~]# rpm -ql syslinux | grep pxelinux.0
/usr/lib/syslinux/pxelinux.0
[root@oracle9i ~]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot
将 RedHat 安装光盘目录中的 '''images/pxeboot/{vmlinuz,initrd.img}''' 启动文件
复制/tftpboot/ ''':
[root@oracle9i ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@oracle9i ~]# cd /mnt/cdrom
[root@oracle9i cdrom]# cd images/
[root@oracle9i images]# ls
boot.iso diskboot.img pxeboot README xen
[root@oracle9i images]# cd pxeboot/
[root@oracle9i pxeboot]# ls
initi586.img initrd.img README vmlinuz vmlzi586
[root@oracle9i pxeboot]# cp vmlinuz /tftpboot/
[root@oracle9i pxeboot]# cp initrd.img /tftpboot/
由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。如果客户机的网卡的MAC地址为'''88:99:AA:BB:CC:DD''',对应的IP地址为192.168.1.195,那么客户机首先尝试以MAC地址为文件名匹配的配置文件,如果不存在就以IP地址来查找。根据上述环境针对这台主机要查找的以一个配置文件就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd。如果该文件不存在,就会根据IP地址来查找配置文件了,这个算法更复杂些,PXE映像查找会根据IP地址16进制命名的客户机配置文件。例如:192.168.1.195对应的16进制的形式为C
如果C
总体来说,pxelinux 搜索的文件的顺序是:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/ C
/tftpboot/pxelinux.cfg/ C
/tftpboot/pxelinux.cfg/ C
/tftpboot/pxelinux.cfg/ C
/tftpboot/pxelinux.cfg/ C
/tftpboot/pxelinux.cfg/ C
/tftpboot/pxelinux.cfg/ C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中是个不错的主意,可以减轻配置文件维护负担。接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件Default。
[root@oracle9i pxeboot]# mkdir /tftpboot/pxelinux.cfg/
将光盘中的 '''isolinux/isolinux.cfg''' 文件复制为 '''/tftpboot/pxelinux.cfg/default'''
4)、配置default文件内容:
[root@oracle9i pxeboot]# cp /mnt/cdrom/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
[root@oracle9i cdrom]# vi /tftpboot/pxelinux.cfg/default
default linux
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
kernel vmlinuz
append ks=nfs:192.168.203.227:/anzhuang/ks.cfg initrd=initrd.img
3、安装配置NFS服务器
安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。也就是我们前面提到的OS Server。这里使用 NFS 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。
1) 创建共享目录,并将光盘内容拷贝到共享目录中:
[root@oracle9i cdrom]# mkdir /anzhuang
[root@oracle9i cdrom]# cp –r /mnt/cdrom/* /anzhuang
[root@oracle9i cdrom]#
2) 安装NFS并将共享目录发布出去
[root@oracle9i cdrom]# rpm -qa |grep nfs
nfs-utils-lib-
nfs-utils-
[root@oracle9i cdrom]# vi /etc/exports
/anzhuang *(ro,sync)
3)重新启动NFS服务。
[root@oracle9i cdrom]# service portmap restart
Stopping portmap: [ OK ]
Starting portmap: [ OK ]
[root@oracle9i cdrom]# service nfs restart
Shutting down RPC svcgssd: [FAILED]
Shutting down NFS mountd: [FAILED]
Shutting down NFS daemon: [FAILED]
Shutting down NFS quotas: [FAILED]
Shutting down NFS services: [FAILED]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
[root@oracle9i cdrom]# exportfs /确认nfs共享正常/
/anzhuang
[root@oracle9i cdrom]# chkconfig --level 35 nfs on
4、配置Kickstart安装
通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart 的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。 该文件位于/root/anaconda-ks.cfg。
这里我直接使用该文件,拷贝本文件到/mnt/install下。
[root@oracle9i /]cp /root/anaconda-ks.cfg /anzhuang/ks.cfg
[root@oracle9i /] chmod a+r /anzhuang/ks.cfg
[root@oracle9i cdrom]# vi /anzhuang/ks.cfg
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.203.227 --dir=/anzhuang
lang en_US.UTF-8
langsupport --default=en_US.UTF-8 zh_CN.UTF-8 en_US.UTF-8
keyboard us
xconfig --card "VMWare" --videoram 16384 --hsync 31.5-37.9 --vsync 50-70 --resolution 800x600 --depth 16 --startxonboot --defaultdesktop gnome
network --device eth0 --bootproto static --ip 192.168.203.226 --netmask 255.255.255.0 --gateway 192.168.203.1 --nameserver 202.96.209.133 --hostname testhost
rootpw birdbird
firewall --disabled
selinux --disabled
authconfig --enableshadow --passalgo=md5
timezone Asia/Shanghai
bootloader --location=mbr --append="rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux
#part / --fstype ext3 --size=100 --grow --asprimary
#part swap --size=1024 --asprimary
%packages
@office
@admin-tools
… …
emacs
gcc43-c++
注意:关闭服务器端防火墙和SELINUX
5、配置客户端PXE引导安装
最后设置客户端BIOS选择从网卡启动。具体方法因BIOS版本不同而异。
网卡中的PXE代码会联系DHCP服务器来获取IP地址以及启动镜像,然后启动镜像被载入并运行。
安装完成后,安装程序会提示你重新启动机器。重新启动机器时切记要在BIOS里改成从硬盘启动。如果仍然从光盘启动机器,又会重复前面的自动安装步骤。