2- 利用 PXE 实现自动化系统部署

本贴最后更新于 1264 天前,其中的信息可能已经沧海桑田

6 利用 PXE 实现自动化系统部署

6.1 PXE 介绍

PXE:Preboot Excution Environment,预启动执行环境,是由 Intel 公司研发,基于 Client/Server 的网 络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,可以引导 和安装 Windows,linux 等多种操作系统

PXE 启动工作原理

clipboard.png

6.2 利用 PXE 实现自动化安装流程

clipboard.png

  1. Client 向 PXE Server 上的 DHCP 发送 IP 地址请求消息,DHCP 检测 Client 是否合法(主要是检测 Client 的网卡 MAC 地址),如果合法则返回 Client 的 IP 地址,同时将启动文件 pxelinux.0 的所在 TFTP 服务器地址信息一并传送给 Client
  2. Client 向 TFTP 服务器发送获取 pxelinux.0 请求消息,TFTP 服务器接收到消息之后,向 Client 发送 pxelinux.0 大小信息,试探 Client 是否满意,当 TFTP 收到 Client 发回的同意大小信息之后,正式向 Client 发送 pxelinux.0
  3. Client 执行接收到的 pxelinux.0 文件,并利用此文件启动
  4. Client 向 TFTP 服务器发送请求针对本机的配置信息文件(在 TFTP 服务器的 pxelinux.cfg 目录下),TFTP 服务器将启动菜单配置文件发回 Client,继而 Client 根据启动菜单配置文件执行后续操作
  5. Client 根据启动菜单配置文件里的信息,向 TFTP 发送 Linux 内核和 initrd 文件请求信息,TFTP 接收到消息之后将内核和 initrd 文件发送给 Client
  6. Client 向 TFTP 发送根文件请求信息,TFTP 接收到消息之后返回 Linux 根文件系统
  7. Client 启动 Linux 内核,加载相关的内核参数
  8. 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 版本,生成的虚拟机的硬件并不兼容

clipboard.png

  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...