PXE介绍
PXE:Preboot Excution Environment,预启动执行环境,是由Intel公司研发,基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,可以引导和安装Windows,linux等多种操作系统
PXE工作原理
1、客户端计算机通过网络启动时,将发送DHCP请求到局域网中的DHCP服务器,请求IP地址和引导服务器地址(Boot Server)。DHCP服务器收到请求后,将回复DHCP应答,包含了IP地址、引导服务器地址等信息。
2、客户端收到DHCP应答后,将向引导服务器请求PXE相关的引导文件(pxelinux.0)。
3、引导文件(pxelinux.0)将根据客户端硬件信息,确定使用何种引导方式(BIOS/Legacy or UEFI)以及使用何种内核和ramdisk和pxelinux.cfg。如果需要的内核和ramdisk在本地存在,则将其加载到内存中;否则将从网络中下载。
4、当内核和ramdisk加载到内存后,将执行kickstart文件,该文件包含了一系列安装Linux操作系统的自动化脚本,安装过程无需人工干预。
UEFI客户端启动模式:UEFI网络自动化部署
自动化安装部署
关闭防火墙和SELINUX,DHCP服务器静态IP
#安装http tftp-server dhcp system-config-kickstart,syslinux(包含pxelinux.0文件)
[root@centos7 ~]#yum -y install httpd tftp-server dhcp syslinux system-config-kickstart
[root@centos7 ~]#systemctl enable --now httpd tftp dhcpd
#准备yum源和目录
[root@centos7 ~]#mkdir -pv /var/www/html/centos/7/os/x86_64
[root@centos7 ~]#mount /dev/sr0 /var/www/html/centos/7/os/x86_64
#准备kickstart文件,放入http目录上,可直接http访问
[root@centos7 ~]#mkdir /var/www/html/ks/
[root@centos7 ~]#vim /var/www/html/ks/centos7.cfg
[root@centos7 ~]#grep -vE '^#|^$' /var/www/html/ks/centos7.cfg
install
xconfig --startxonboot
keyboard --vckeymap=us --xlayouts='us'
rootpw --iscrypted $1$bpNEv8S5$lK.CjNkf.YCpFPHskSNiN0
url --url="http://10.0.0.100/centos/7/os/x86_64"
lang en_US
auth --useshadow --passalgo=sha512
text
firstboot --enable
selinux --disabled
skipx
services --disabled="chronyd"
ignoredisk --only-use=sda
firewall --disabled
network --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai --nontp
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
zerombr
clearpart --all --initlabel
part swap --fstype="swap" --ondisk=sda --size=3072
part / --fstype="xfs" --ondisk=sda --size=51200
part /boot --fstype="xfs" --ondisk=sda --size=1024
part /data --fstype="xfs" --ondisk=sda --size=30720
%post
useradd wang
%end
%packages
@core
%end
#配置DHCP服务
[root@centos7 ~]#vim /etc/dhcp/dhcpd.conf
option domain-name "example.com";
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.1 10.0.0.200;
option routers 10.0.0.1;
next-server 10.0.0.100;
filename "pxelinux.0";
}
[root@centos7 ~]#systemctl start dhcpd
#准备PXE启动相关文件,放入TFTP目录文件夹
[root@centos7 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos7 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
[root@centos7 ~]#cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
[root@centos7 ~]#cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
注意:
centos8需要额外3个文件
cp /var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/
最终目录
最终目录文件列表如下:
/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
#准备启动菜单
[root@centos7 ~]#Vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label auto
menu label ^Auto Install CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.100/ks/centos7.cfg
label manual
menu label ^Manual Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.repo=http://10.0.0.100/centos/7/os/x86_64
label local
menu default
menu label ^Boot from local drive
localboot 0xffff
利用cobbler实现自动化安装
Cobbler是一款Linux生态的自动化运维工具,基于Python2开发,用于自动化批量部署安装操作系统;其提供基于CLI的管理方式和WEB配置界面,其中WEB配置界面是基于Python2和Django框架开
发。另外,cobbler还提供了API,方便二次开发。Cobbler属于C/S模型(客户端/服务器模型)
Cobbler主要用于快速网络安装linux操作系统,支持众多的Linux发行版如:Red Hat、Fedora、CentOS、Debian、Ubuntu和SuSE等,甚至支持windows的安装
Cobbler实质是PXE的二次封装,将多种安装参数封装到一起,并提供统一的管理方法Cobbler是在HTTP、TFTP、DHCP等各种服务的基础上进行相关操作的,实际安装的大体过程类似于基
PXE的网络安装:客户端(裸机)开机使用网卡引导启动,其请求DHCP分配一个地址后从TFTP服务器获取启动文件,加载到客户端本地内存中运行,并显示出可安装的系统列表;在人为的选定安装的操作
系统类型后,客服端会到HTTP服务器下载相应的系统安装文件并执行自动安装
client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP
DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址
client裸机拿到ip后再向cobbler server发送请求OS引导文件的请求
cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port
client裸机通过上面告知的TFTP server地址通信,下载引导文件
client裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image
cobbler server发送请求的kickstart和os iamge
client裸机加载kickstart文件
client裸机接收os image,安装该os image