预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。
第一步:客户端广播,寻找DHCP服务器,DHCP服务器响应,并提供ip地址和bootstrap文件(即pxelinux.0)位置
第二步:客户端有了ip地址之后,向TFTP请求pxelinux.0文件(这个文件的位置是DHCP服务器告诉客户端的),TFTP响应请求并返回pxelinux.0给客户端
第三步:客户端执行pxelinux.0文件
第四步:客户端向TFTP请求pxelinux.cfg文件,TFTP响应并返回pxelinux.cfg给客户端
第五步:客户端读pxelinux.cfg这个文件
第六步:客户端向TFTP请求压缩格式的内核文件vmlinuz,TFTP响应并返回vmlinuz给客户端
第七步:客户端向TFTP请求initrd.img文件(临时根文件系统),TFTP响应并返回initrd.img文件
第八步:客户端加载内核,挂载临时根文件系统,启动系统安装流程
第九步:客户端请求Kickstart文件(http,nfs,cdrom等方式都可以,具体看设置)
第十步:客户端读取Kickstart文件自动安装系统
DHCP服务器
ip:192.168.253.129
系统:CentOS6
TFTP服务器
ip:192.168.253.129
系统:CentOS6
HTTPD服务器
ip:192.168.253.129
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做“双机热备”的。
安装dhcp程序包
yum install -y dhcp
复制DCHP模版文件
/bin/cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
修改模版文件/etc/dhcp/dhcpd.conf
[root@localhost ~]# grep -vE "#|^$" /etc/dhcp/dhcpd.conf
option domain-name "ice.com";
option domain-name-servers 192.168.253.2;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.253.0 netmask 255.255.255.0 { #负责的网段
range 192.168.253.200 192.168.253.205; #分配的地址范围
option routers 192.168.253.2; #告知客户端网关地址
}
next-server 192.168.253.129; #tftp服务器地址
filename="pxelinux.0"; #向tftp请求的文件
接下来可以测试一下看是否配置成功了
启动DHCP
/etc/init.d/dhcpd start
为了不影响实验,先把vmware的dhcp关了
另外开一台虚拟机测试,从下图可以看到DHCP工作的几个步骤。
简单文件传输协议也称小型文件传输协议(Trivial File Transfer Protocol, TFTP),是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)。
小型文件传输协议非常简单,通过少量存储器就能轻松实现——这在当时是很重要的考虑因素。所以TFTP被用于引导计算机,例如没有大容量存储器的路由器。现在它仍然被用于在一个网络上主机之间传输小文件,例如从一台网络主机或服务器引导一个远程X Window System终端或其他的瘦客户端。TFTP 用 UDP 端口号 69 进行文件传输活动。
安装tftp服务和syslinux(包含我们需要的pxelinux.0等文件)
yum -y install syslinux tftp-server tftp
复制相关文件到tftp共享目录下(需要先挂载光盘)
CentOS6与CentOS7目录结构有一些不一样
这是CentOS6的情况
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
修改配置文件/var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.9!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ip=192.168.253.200 netmask=255.255.255.0 gateway=192.168.253.2 ks=http://192.168.253.129/ks.cfg #这里指定ks文件位置
启动tftp顺便测试一下
chkconfig tftp on
service xinetd restart
如果是CentOS7
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
修改配置文件/var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 5
timeout 30
MENU TITLE CentOS 7 PXE Menu
LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img ip=192.168.253.200 netmask=255.255.255.0 gateway=192.168.253.2 ks=http://192.168.253.129/ks.cfg #这里的ks文件根据具体情况自定义
这里使用http方式发送ks文件所以需要个httpd服务
yum install httpd -y
编写ks文件/var/www/html/ks.cfg
[root@localhost ~]# cat /var/www/html/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="https://mirrors.aliyun.com/centos/6/os/x86_64/"
# Root password
rootpw --iscrypted $1$.EaLyDeQ$FujxZcce.b3ZpI1MI9JWR0
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=static --device=eth0 --gateway=192.168.253.2 --ip=192.168.253.181 --nameserver=192.168.253.2 --netmask=255.255.255.0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=150
part swap --fstype="swap" --size=2048
part / --fstype="ext4" --grow --size=1
%packages
@base
@development
%end
启动httpd服务
/etc/init.d/httpd start
接下来就简单了,创建一台虚拟机,不需要导入镜像直接开机,然后就可以喝茶看报纸等安装完成了