一,原理
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于C/S的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端请求DHCP服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先放置在服务器中的终端操作系统。严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
PXE的详细工作过程:
客户端PXE网卡启动-->通过Bootp协议广播dhcp请求-->DHCP服务器响应-->获取IP,TFTP服务器地址-->从TFTP上下载 pxelinux.0以及系统内核文件vmlinuz、initrd.img-->启动系统-->到指定url去下载ks.cfg文件-->根据ks.cfg文件去NFS/HTTP/FTP服务器自动下载软件包安装系统-->完成安装。
PS:在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
二,配置DHCP服务
DHCP 客户端(dhclient)工作在udp 的68 号端口上,dhcp的服务器(dhcpd)端工作于udp 67号端口
1,dhcp 客户端向网络发送dhcp discover 广播报文
2,dhcp 服务器端响应offer 报文(ip/netmask)
3,dhcp 客户端 request 请求使用该地址
4,dhcp 服务器端 ack 确认
1,安装DHCP
# yum -y install dhcp
2,提供DHCP配置文件,复制配置文件模板
# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
3,编辑配置文件
# vim /etc/dhcp/dhcpd.conf
ddns-update-style interim; ###dhcp支持的dns动态更新方式
ignore client-updates; ###禁止客户端更新
allow booting; ###支持PXE启动
allow bootp; ###支持boottp
subnet 192.168.1.0 netmask 255.255.255.0 { ###设置网段
option routers 192.168.1.1; ###设置网关
option subnet-mask 255.255.255.0; ###设置子网掩码
option domain-name-servers 8.8.8.8,8.8.4.4; ###设置dns服务器地址
range dynamic-bootp 192.168.1.110 192.168.1.254; ###设置dhcp服务器IP地址租用的范围
default-lease-time 21600; ###默认租约时间
max-lease-time 43200; ###最大租约时间
next-server 192.168.1.118; ###tftp服务器地址
filename "pxelinux.0"; ###tftp服务器根目录下面的pxelinux.0文件
}
4,重启DHCP服务
# chkconfig dhcpd on
# service dhcpd restart
三,配置tftp服务
1,安装xinetd , tftp,syslinux
# yum -y install xinetd tftp-server syslinux
# chkconfig xinetd on
# chkconfig tftp on
# service xinetd start
# netstat -unl | grep ":69"
2,准备tftpboot下的文件
# mount -r /dev/cdrom /media/cdrom
# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
四,准备安装树
# mkdir /var/www/html/centos6
# mount --bind /media/cdrom /var/www/html/centos6
# service httpd start
五,提供ks.cfg文件
# vim /root/ks.cfg
#version=DEVEL
install
url --url=http://192.168.1.118/centos6
lang en_US.UTF-8
keyboard us
key --skip
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$NpvdMIOj$9IIqXQ05uucKanibRIrjXP/Dn2dr3yX3xleCtp8HFj91ilMalqijSWHJnqnp9Ew07M.Lf2hMzrGi9bwXqEMhM0
#Reboot after instaiiation
reboot
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet 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 -all
zerombr yes
text
part /boot --fstype=ext4 --size=200
part pv.008002 --size=61440
volgroup vg0 --pesize=8192 pv.008002
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
logvol swap --name=swap --vgname=vg0 --size=20480
logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480
%packages
@Base
@Core
@base
@basic-desktop
@chinese-support
@client-mgmt-tools
@core
@desktop-platform
@fonts
@general-desktop
@graphical-admin-tools
@legacy-x
@network-file-system-client
ibus-table-cangjie
ibus-table-erbi
ibus-table-wubi
lftp
tree
@x11
%end
%post
echo -e 'Luochen test Machine' >> /etc/issue
sed -i '1,$s@id:[0-9]:initdefault:@id:3:initdefault:@g' /etc/inittab
# set the hostname
ClientName=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F. '{print $NF}'`
sed -i "s@HOSTNAME=.*@HOSTNAME=client$ClientNAME.luochen.com@g" /etc/sysconfig/networks
%end
# cp /root/ks.cfg /var/www/html/
# chmod a+r /var/www/html/ks.cfg
六,编辑/var/lib/tftpboot/pxelinux.cfg/default
# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.1.118/ks.cfg ###添加ks.cfg 文件路径