原理
PXE请求顺序说明
① PXE 客户端发送UDP广播请求
PXE 客户端从PXE网卡启动,通过PXE BootROM(自启动芯片)以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。
② DHCP 服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE 客户端的请求,验证通过它将给客户端提供响应,这个响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
③ PXE 客户端请求下载启动文件
客户端收到服务器的回应 后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
④ TETP 服务器响应客户端请求并传送文件
当服务器收到客户端的请求后,将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从tftp服务器下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
⑤ 请求下载自动应答文件
客户端通过 pxelinux.cfg/default 文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
⑥ 客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到http镜像,并按照该文件的配置请求下载安装过程需要的软件包。
http镜像和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。
安装完成后,将提示重新引导计算机。
开始配置
1.关闭乱七八糟的东西
1.关闭selinux
2.关闭防火墙
systemctl stop firewalld
2.配置一块新的网卡,设置新网段
vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=10.0.0.5
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
重启网卡
service network restart
3.安装dhcp服务
yum -y install dhcp
配置dhcp服务
cat >>/etc/dhcp/dhcpd.conf<<EOF
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.1 10.0.0.200;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
option routers 10.0.0.5;
option domain-name-servers 114.114.114.114;
next-server 10.0.0.5;
filename "/pxelinux.0";
}
EOF
allow 允许pxe
next-server tftp服务器的ip信息,可以配置在非dhcp服务器
filename tftp服务器的预启动文件
subnet 配置dhcp服务器的网络信息,10.0.0.0/24
range dynamic-bootp 设置分配的地址范围
subnet-mask 配置分配地址的子网掩码
option routers 配置分配的路由地址,可以直接上网 route -n
option domain-name-servers dns地址设置 cat /etc/resolv.conf
启动dhcp服务
systemctl start dhcpd
systemctl enable dhcpd
测试是否可以使用dhcp获取ip(测试方法可以新建另一台机器在同一交换机的即可)
4.安装TFTP
yum -y install tftp-server
配置
vim /etc/xinetd.d/tftp
disable= yes
改为
disable= no
启动tftp
systemctl start tftp
systemctl enable tftp
5.安装HTTP服务
yum -y install httpd
启动
systemctl start httpd
systemctl enable httpd
6.挂载镜像
创建目录
mkdir /var/www/html/CentOS7
挂载镜像
mount /dev/cdrom /var/www/html/CentOS7
7.PXE配置
系统引导配置
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
创建root密码
python -c 'import crypt; print(crypt.crypt("111111"))'
配置ks.cfg
mkdir /var/www/html/ks_config
vim /var/www/html/ks_config/CentOS7-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# 告知安装程序,这是一次全新安装,而不是升级
install
# 通过http下载安装镜像
url --url="http://10.0.0.5/CentOS7/"
# 以文本格式安装
text
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens192 --ipv6=auto --activate
network --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $6$dIIFN1r/r0AhjHdf$mXt6eYceyhQkOZcmD13VPepPs0s7s2Y1aBb.Op2kq9TBncFRMasAsPHACqsESBbscWtDYqNoYSUS4bE6yW0Zy0
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
# 安装好重启
reboot
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
配置default
vim /var/lib/tftpboot/pxelinux.cfg/default
改为以下内容
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.5/ks_config/CentOS7-ks.cfg