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

6.1 PXE介绍

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

PXE启动工作原理

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

  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文件里的安装信息,下载安装源文件进行自动化安装

UEFI客户端的安装文档:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/performing_an_advanced_rhel_installation/preparing-for-a-network-install_installing-rhel-as-an-experienced-user#configuring-a-tftp-server-for-uefi-based-clients_preparing-for-a-network-install

6.3 在cento6上实现PXE自动化安装centos

6.4 在centos7上实现PXE自动化安装centos

6.5 在centos8上实现PXE自动化安装centos

6.5.1 安装前准备

关闭防火墙和selinux,DCHP服务器静态IP

网络要求:关闭VMWare软件中的DHCP服务,基于NAT模式

注意:使用1G以下内存的主机安装Centos7,8会提示空间不足,建议2G以上

6.5.2 安装相关软件包并启动

[root@centos8 ~]# dnf install dhcp-server tftp-server httpd syslinux-nonlinux -y
[root@centos8 ~]# systemctl enable --now httpd tftp dhcpd

6.5.3 配置DHCP服务

[root@centos8 ~]# cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centos8 ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "waluna.top";
option domain-name-servers 114.114.114.114,223.5.5.5;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.100 10.0.0.200;
  option routers 10.0.0.2;
  next-server 10.0.0.8;
  filename "pxelinux.0";
}
[root@centos8 ~]# systemctl restart dhcpd

6.5.4 准备yum源和相关目录

[root@centos8 ~]# mkdir -pv /var/www/html/centos/{6,7,8}/os/x86_64
mkdir: created directory '/var/www/html/centos'
mkdir: created directory '/var/www/html/centos/6'
mkdir: created directory '/var/www/html/centos/6/os'
mkdir: created directory '/var/www/html/centos/6/os/x86_64'
mkdir: created directory '/var/www/html/centos/7'
mkdir: created directory '/var/www/html/centos/7/os'
mkdir: created directory '/var/www/html/centos/7/os/x86_64'
mkdir: created directory '/var/www/html/centos/8'
mkdir: created directory '/var/www/html/centos/8/os'
mkdir: created directory '/var/www/html/centos/8/os/x86_64'
[root@centos8 ~]# tree /var/www/html/
/var/www/html/
└── centos
    ├── 6
    │   └── os
    │       └── x86_64
    ├── 7
    │   └── os
    │       └── x86_64
    └── 8
        └── os
            └── x86_64

10 directories, 0 files
[root@centos8 ~]# mount /dev/sr0 /var/www/html/centos/8/os/x86_64/
mount: /var/www/html/centos/8/os/x86_64: WARNING: device write-protected, mounted read-only.
[root@centos8 ~]# mount /dev/sr1 /var/www/html/centos/7/os/x86_64/
mount: /var/www/html/centos/7/os/x86_64: WARNING: device write-protected, mounted read-only.
[root@centos8 ~]# mount /dev/sr2 /var/www/html/centos/6/os/x86_64/
mount: /var/www/html/centos/6/os/x86_64: WARNING: device write-protected, mounted read-only.

6.5.5 战备kickstart文件

[root@centos8 ~]# mkdir /var/www/html/ks
[root@centos8 ~]# vim /var/www/html/ks/centos6.cfg   # 内容见2.2.2.3
[root@centos8 ~]# vim /var/www/html/ks/centos7.cfg   # 内容见2.2.2.2
[root@centos8 ~]# vim /var/www/html/ks/centos8.cfg   # 内容见2.2.2.1

6.5.6 准备PXE启动相关文件

[root@centos8 ~]# mkdir /var/lib/tftpboot/centos{6,7,8}
[root@centos8 ~]# cp /var/www/html/centos/6/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6
[root@centos8 ~]# cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7
[root@centos8 ~]# cp /var/www/html/centos/8/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8
[root@centos8 ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/

# 以下三个文件是centos8安装所必须的文件,cnetos6,7则不需要
[root@centos8 ~]# cp /var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/

# 生成安装菜单文件
[root@centos8 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@centos8 ~]# cp /var/www/html/centos/8/os/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

# 最终目录结构如下:
[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

4 directories, 12 files

6.5.7 准备启动菜单文件

[root@centos8 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title Install CentOS Linux

label linux8
  menu label Auto Install CentOS Linux ^8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img ks=http://10.0.0.8/ks/centos8.cfg
label linux7
  menu label Auto Install CentOS Linux ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=http://10.0.0.8/ks/centos7.cfg
label linux6
  menu label Auto Install CentOS Linux ^6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://10.0.0.8/ks/centos6.cfg

label manual
  menu label ^Manual Install Centos Linux 8.1
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img inst.repo=http://10.0.0.8/centos/8/os/x86_64/

label rescue
  menu label ^Rescue a CentOS Linux system 8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img inst.repo=http://10.0.0.8/centos/8/os/x86_64/ rescue

label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff

6.5.8 测试客户端基于PXE实现自动安装

新准备一主机,设置网卡引导,可看到启动菜单,并实现自动安装

注意:VMWare workstation对于不同的Centos版本,生成的虚拟机的硬件并不兼容