PXE介绍
PXE(Preboot Excution Environment 预启动执行环境) intel公司研发
基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。
PXE可以引导和安装Windows,linux等多种操作系统
PXE工作原理
- 1. Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client
- 2. Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0
- 3. Client执行接收到的pxelinux.0文件
- 4. Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
- 5. Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
- 6. Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
- 7. Client启动Linux内核
- 8. Client下载安装源文件,读取自动化安装脚本
安装过程
环境准备
- 系统centos7.5
- 关闭selinux
- 关闭防火墙
- 所需安装包(dhcp,httpd(nginx或者使用ftp都可以),tftp-server,syslinux)
程序安装
yum install dhcp tftp-server httpd syslinux #安装所需软件
systemctl enable dhcpd httpd tftp.socket #设置开机启动
systemctl start httpd #启动httpd服务
准备centos镜像源
mkdir /var/www/html/centos/{6,7}/ -pv #准备镜像存放目录
vim /etc/fstab #加下面这行,并保存
/dev/sr0 var/www/html/centos/7 iso9660 defaults 0 0
mount -a #挂载刚才所添加的目录
准备ks文件
mkdir /var/www/html/ksdir/{6,7} -pv #准备ks文件
cp /root/anaconda-ks.cfg /var/www/html/ksdir/7/ks7_mini.cfg #拷贝模板
chmod a+r /var/www/html/ksdir/7/ks7_desktop.cfg #加可读权限
vim /var/www/html/ksdir/7/ks7_desktop.cfg #配置如下
#version=DEVEL
# Use network installation
url --url="http://192.168.60.xx/centos7"
# Use text mode install
text
reboot
# System authorization information
auth --enableshadow --passalgo=sha512
# 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=ens33 --ipv6=auto --activate
network --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $6$NZlDw5yTEu79AaT7$slYXYWi2gBTyK4MDsmUsV.lKmsul76.Vs8FJv6MAX/8YtHpQROhpW1f0a2ioo834v4g01pWpMQVxhNhtPfhBl0
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
user --name=ningmeng --password=$6$HKbLyKFeh5SNc5GQ$1Pu.e/zWxzqcvinnzRw4MylFgX5pkzStRLQp7U5aMgevpXOfWyOOijTDPtju.cY7b/nvtKLnGF0qlV.I4r1vB. --iscrypted --gecos="ningmeng"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="xfs" --ondisk=sda --size=1024
part /data --fstype="xfs" --ondisk=sda --size=10240
part / --fstype="xfs" --ondisk=sda --size=5000
%packages
@^minimal
@core
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
以上ks是我真实使用的配置,有很多同学可能不懂每条配合的含义,可以点这条链接 kickstart配置文件详解
配置dhcp服务
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf #拷贝模板
vim /etc/dhcp/dhcpd.conf #配置如下
option domain-name "luckynm.cn"; #域名,如果没特殊要求可以随便写
option domain-name-servers 114.114.114.114,1.1.1.1; #dns服务器地址
option routers 192.168.30.200;
default-lease-time 86400;
max-lease-time 100000;
subnet 192.168.60.0 netmask 255.255.255.0 {
range 192.168.60.10 192.168.60.100; #client端获取地址的起始与结束ip
option routers 192.168.60.254;
next-server 192.168.60.xx; #server地址,也就是本机的ip
filename "pxelinux.0"; #获取的引导文件
}
systemctl start dhcpd #启动dhcp服务
准备PXE相关文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
vim /var/lib/tftpboot/pxelinux.cfg/default #启动菜单配置如下
default menu.c32 #启动是菜单样式
timeout 600
menu title Auto Install CentOS
label desktop
menu label Install ^Desktop CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.30.7/ksdir/7/ks7_desktop.cfg
label mini
menu label Install ^Mini CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.30.7/ksdir/7/ks7_mini.cfg
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
[root@lemon 7]#tree /var/lib/tftpboot/ #目录下文件格局如下
/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
客户端测试安装
以上步骤就是篇日志pxe服务器的过程,如果测试的话,可以直接在vmware新建一个虚拟机启动即可(注意:不需要指定镜像)