6 利用 PXE 实现自动化系统部署
6.1 PXE 介绍
PXE:Preboot Excution Environment,预启动执行环境,是由 Intel 公司研发,基于 Client/Server 的网 络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,可以引导 和安装 Windows,linux 等多种操作系统
PXE 启动工作原理
6.2 利用 PXE 实现自动化安装流程
- Client 向 PXE Server 上的 DHCP 发送 IP 地址请求消息,DHCP 检测 Client 是否合法(主要是检测 Client 的网卡 MAC 地址),如果合法则返回 Client 的 IP 地址,同时将启动文件 pxelinux.0 的所在 TFTP 服务器地址信息一并传送给 Client
- Client 向 TFTP 服务器发送获取 pxelinux.0 请求消息,TFTP 服务器接收到消息之后,向 Client 发送 pxelinux.0 大小信息,试探 Client 是否满意,当 TFTP 收到 Client 发回的同意大小信息之后,正式向 Client 发送 pxelinux.0
- Client 执行接收到的 pxelinux.0 文件,并利用此文件启动
- Client 向 TFTP 服务器发送请求针对本机的配置信息文件(在 TFTP 服务器的 pxelinux.cfg 目录下),TFTP 服务器将启动菜单配置文件发回 Client,继而 Client 根据启动菜单配置文件执行后续操作
- Client 根据启动菜单配置文件里的信息,向 TFTP 发送 Linux 内核和 initrd 文件请求信息,TFTP 接收到消息之后将内核和 initrd 文件发送给 Client
- Client 向 TFTP 发送根文件请求信息,TFTP 接收到消息之后返回 Linux 根文件系统
- Client 启动 Linux 内核,加载相关的内核参数
- Client 通过内核参数下载 kickstart 文件,并根据 kickstart 文件里的安装信息,下载安装源文件进行自动化安装
6.3 在 Centos7 上实现 PXE 自动化安装 CentOS
6.3.1 安装前准备
关闭防火墙和 SELINUX,DHCP 服务器静态 IP
网络要求:关闭 Vmware 软件中的 DHCP 服务
6.3.2 安装相关软件包并启动服务
[17:02:56 root@centos7 ~]#yum install -y httpd tftp-server dhcp syslinux system-config-kickstart
[17:04:02 root@centos7 ~]#systemctl enable --now httpd tftp dhcpd
注意:由于dhcp还没有配置,此时还无法立即启动
6.3.3 准备 yum 源和相关目录
[17:04:10 root@centos7 ~]#mkdir -pv /var/www/html/centos/7/x86_64
[17:06:13 root@centos7 ~]#mkdir /dev/sr2 /var/www/html/centos/7/x86_64
6.3.4 准备 kickstart 文件
[17:07:52 root@centos7 ~]#cat /var/www/html/ks/ks-centos7.cfg | grep -vE '^#'
install
keyboard 'us'
rootpw --iscrypted $1$NxU3dKmV$fRJv0NpyNJv6sQSK2SEh//
lang en_US
auth --useshadow --passalgo=sha512
text
selinux --disabled
skipx
firewall --disabled
network --bootproto=dhcp --device=eth0
reboot
timezone Asia/Shanghai
url --url="http://192.168.10.71/centos/7/x86_64"
bootloader --append="net.ifnames=0" --location=mbr
zerombr
clearpart --all --initlabel
part /boot --fstype="ext4" --size=1000
part / --fstype="xfs" --size=10000
%post
mkdir /root/.ssh -m 700
cat > /root/.ssh/authorized_keys <
6.3.5 配置 DHCP 服务
[17:11:56 root@centos7 ~]#cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
option domain-name "zhang.org";
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.200 192.168.10.240;
option routers 192.168.10.2;
next-server 192.168.10.71;
filename "pxelinux.0";
}
[17:11:58 root@centos7 ~]#systemctl start dhcpd
6.3.6 准备 PXE 启动相关文件
[17:12:45 root@centos7 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[17:13:08 root@centos7 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
[17:15:40 root@centos7 ~]#cp /var/www/html/centos/7/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
[17:16:08 root@centos7 ~]#cp /var/www/html/centos/7/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
最终目录如下:
[17:17:57 root@centos7 ~]#tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
6.3.7 准备启动菜单
[17:35:18 root@centos7 ~]#cat /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label auto
menu label ^Auto Install MENU
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.10.71/ks/ks-centos7.cfg
label manual
menu label ^Manual Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.10.71/centos/7/x86_64/
label local
menu default
menu label ^Boot from local drive
localboot 0xffff
6.3.8 测试客户端基于 PXE 实现自动安装
新准备一台主机,设置网卡引导,可看到看启动菜单,并实现自动安装
6.4 在 CentOS8 上实现 PXE 自动化安装 Centos6,7,8
6.4.1 安装前准备
关闭防火墙和 SELINUX,DHCP 服务器静态 IP
网络要求:关闭 Vmware 软件中的 DHCP 服务,基于 NAT 模式
注意:使用 1G 以下内存的主机安装 CentOS 7,8 会提示空间不足,建议 2G 以上
6.5.2 安装相关软件包并启动
[17:49:58 root@centos8 ~]#dnf -y install dhcp-server tftp-server httpd syslinux-nonlinux
[17:52:04 root@centos8 ~]#systemctl enable --now httpd tftp dhcpd
6.4.3 配置 DHCP 服务
[17:57:42 root@centos8 ~]#cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp-server/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
option domain-name "zhang.org";
option domain-name-servers 180.76.76.76,223.6.6.6;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.200 192.168.10.240;
option routers 192.168.10.2;
next-server 192.168.10.81;
filename "pxelinux.0";
}
[17:57:53 root@centos8 ~]#systemctl start dhcpd
6.4.4 准备 yum 源和相关目录
[17:57:56 root@centos8 ~]#mkdir -pv /var/www/html/centos/{6,7,8}/x86_64/
[18:01:09 root@centos8 ~]#mount /dev/sr0 /var/www/html/centos/8/x86_64/
[18:01:37 root@centos8 ~]#mount /dev/sr1 /var/www/html/centos/7/x86_64/
[18:01:47 root@centos8 ~]#mount /dev/sr2 /var/www/html/centos/6/x86_64/
#挂载光盘,切记不要挂错
6.4.5 准备 kickstart 文件
[18:02:57 root@centos8 ~]#mkdir /var/www/html/ks
[18:03:30 root@centos8 ~]#ls /var/www/html/ks
ks-centos6.cfg ks-centos7.cfg ks-centos8.cfg
6.4.6 准备 PXE 启动相关文件
#准备Centos6,7,8各自的内核文件
[18:04:06 root@centos8 ~]#mkdir /var/lib/tftpboot/centos{6,7,8}
[18:04:57 root@centos8 ~]#cp /var/www/html/centos/6/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/
[18:05:43 root@centos8 ~]#cp /var/www/html/centos/7/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/
[18:05:52 root@centos8 ~]#cp /var/www/html/centos/8/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8/
[18:09:53 root@centos8 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
#以下三个是Centos8安装所必须文件,Centos6,7不需要
[18:06:01 root@centos8 ~]#cp /var/www/html/centos/8/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/
#生成安装菜单文件
[18:08:02 root@centos8 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[18:08:51 root@centos8 ~]#cp /var/www/html/centos/8/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#最终目录结构如下
[18:11:06 root@centos8 ~]#tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── centos6
│ ├── initrd.img
│ └── vmlinuz
├── centos7
│ ├── initrd.img
│ └── vmlinuz
├── centos8
│ ├── initrd.img
│ └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default
6.4.7 准备启动菜单文件
[18:54:32 root@centos8 ~]#cat /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label linux8
menu label Auto Install Centos Linux ^8
kernel centos8/vmlinuz
append initrd=centos8/initrd.img ks=http://192.168.10.81/ks/ks-centos8.cfg
label linux7
menu label Auto Install Centos Linux ^7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.10.81/ks/ks-centos7.cfg
label linux6
menu label Auto Install Centos Linux ^6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://192.168.10.81/ks/ks-centos6.cfg
label manual
menu label ^Manual Install CentOS Linux 8
kernel centos8/vmlinuz
append initrd=centos8/initrd.img inst.repo=http://192.168.10.81/centos/8/x86_64/
label rescue
menu label ^Rescue a CentOS Linux system 8
kernel centos8/vmlinuz
append initrd=centos8/initrd.img inst.repo=http://192.168.10.81/centos/8/x86_64/ rescue
label local
menu default
menu label ^Boot from local drive
localboot 0xffff
6.4.8 测试客户端基于 PXE 实现自动安装
新准备一台主机,设置网卡引导,可看到看启动菜单,并实现自动安装,选择最后
注意:VMware workstation 对于不同的 CentOS 版本,生成的虚拟机的硬件并不兼容
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于