Part 5 - 虚拟机自动化部署

2021-10-13
10分钟阅读时长

«返回课程汇总页面

【版本】

当前版本号v20221022

版本修改说明
v20221022增加常见问题解答
v20220420增加了实验说明,补充了常见问题解答
v20211031更新缺失图片
v20211021更新客户端无法请求服务端进行下载的问题
v20211013初始化版本

【实验名称】实验5.1 PXE+Kickstart 自动部署 CentOS

【实验目的】

  • 掌握 Kickstart 的配置和使用
  • 掌握通过 PXE 启动 和 加载 Kickstart 自动安装 CentOS 系统

【实验环境】

  • VirtualBox
  • CentOS 7
  • FinalShell

【实验说明】

  1. PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于 Client/Server 的网络模式,支持工作站通过网络从远端服务器下载映像,并由支持通过网络启动操作系统,再启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或 MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8/linux等。

  2. Tmpl虚拟机在此实验中安装 DHCP服务、TFTP 服务和 FTP 服务。主要承担 DHCP 服务器作用,并同时通过 TFTP 提供 pxelinux 启动程序下载,通过 FTP 提供CentOS安装文件下载。

  3. 客户端启动以后到自动安装CentOS的详细过程如下描述:

  • (1)客户端向 DHCP 发送请求索取IP 内置PXE Client 从自己的 PXE 网卡启动,通过 PXE BootROM(自启动芯片)会通过UDP(User Datagram Protocol,用户数据报协议)发送一个广播请求,向本网络中的DHCP 服务器索取 IP。
  • (2)DHCP 服务器提供信息 当 DHCP 服务器收到客户端的请求后,其会验证是否来自合法的 PXE Client 的请求,验证通过后,它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的 IP 地址、pxelinux 启动程序(TFTP)位置,以及配置文件所在位置。
  • (3)PXE 客户端请求下载启动文件 当客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括 :pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img 等文件。
  • (4)服务器(Tmpl虚拟机)响应客户端请求并传送文件 当服务器收到客户端的请求后,他们之间在后续将有更多的信息在客户端与服务器之间作应答,用以决定启动参数。BootROM 由 TFTP 从服务器下载启动安装所必须的文件(pxelinux.0、pxelinux.cfg/default)。default 文件下载完成后,会根据该文件中定义的引导顺序,启动 Linux 安装程序的引导内核。
  • (5)请求下载自动应答文件 客户端通过 pxelinux.cfg/default 文件成功的引导 Linux 安装内核后,安装程序必须首先确定你通过什么安装介质来安装 Linux,如果是通过网络安装(NFS、FTP、HTTP),这时可以初始化网络,并定位安装源位置。接着它会读取 default 文件中指定的自动应答文件 ks.cfg 所在位置,根据该位置请求下载该文件。
  • (6)客户端安装操作系统 将 ks.cfg 文件下载回来后,通过该文件找到 OS Server,并按照该文件的配置请求下载安装过程需要的软件包。当 OS Server 和客户端建立连接后,会开始传输软件包,客户端将开始安装操作系统。当安装完成后,它将提示重新引导计算机。
  1. 在此次实验中网络的连接图如下所示:

【实验资源】

  • CentOS-7-x86_64-Minimal-2009.iso
链接:https://pan.baidu.com/s/1kw7nT7dbonUTSlPqIHVwhQ 
提取码:heis

【实验步骤】

网卡2配置

  1. 打开 Virtualbox,进入Tmpl虚拟机的设置界面。启用和设置网卡2。新增的网卡主要用于启用 DHCP 服务。

注意:网卡2指向的 VirtualBox 的虚拟网卡,是配置了 IP 为 10.0.0.2 的那张,请根据自己的实际情况配置。

插入光盘

  1. 增加一个光驱,并选择CentOS-7-x86_64-Minimal-2009.iso盘片(注意此盘片为最小化CentOS的安装镜像,大小为973MB).

  2. 设置CentOS-7-x86_64-Minimal-2009.iso盘片为第二IDE控制器从通道

  3. 启动Tmpl虚拟机,并使用root用户登录。

su

挂载 /mnt2

  1. 创建一个新的目录/mnt2用于挂载CentOS-7-x86_64-Minimal-2009.iso盘片。
mkdir /mnt2
mount /dev/sr1 /mnt2

在实验 Part 1 的时候,我们已经挂载了一个 CentOS-7-x86_64-DVD-2009.iso 镜像在 /mnt。所以这次我们挂载到 /mnt2。

  • 正常返回以下消息
mount: /dev/sr0 写保护,将以只读方式挂载

重复执行挂载命令会提示类似以下信息,表示 /mnt2 已经挂载,并不是错误消息:

mount:/dev/sr0 is write-protected,mounting read-only
mount:/dev/sr0 is already mounted or /mnt2 busy
      /dev/sr0 is already mounted on /mnt2
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt2 忙
       /dev/sr0 已经挂载到 /mnt2 上

网卡2 在 CentOS 的配置

  1. 查看新网卡的名称。
ip a
  • 正常情况下,Virtualbox 会新出现一个名称为enp0s8的网卡。VMWare Workstation 会出现一个ens34的网卡。
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:23:d3:fa brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d1d7:deb5:18ab:e080/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
  1. 修改新的网卡配置。
vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
  • 完整内容可以参考以下
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
#网卡名称修改为新网卡名称
NAME="enp0s8"
#UUID 不能和旧的网卡一致,所以这个可以自行修改。
UUID="015214e3-3bda-4a8c-b201-05168f20343a"
#设备名称修改为新网卡名称
DEVICE="enp0s8"
ONBOOT="yes"
IPADDR="10.0.0.80"
PREFIX="24"
GATEWAY="10.0.0.254"
DNS1="223.5.5.5"
IPV6_PRIVACY="no"
  • 修改完以后重启网络服务,查看新的网卡的 IP 是否为 10.0.0.80
systemctl restart network
ip a

DHCP 服务安装与配置

  1. 安装DHCP服务。
yum install dhcp -y
  1. 编辑DHCP服务配置文件dhcpd.conf
vi /etc/dhcp/dhcpd.conf
  • 内容如下:
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
default-lease-time 600;  #指定确省租赁时间为600s
max-lease-time 7200;     #指定最大租赁时间为7200s
subnet 10.0.0.0 netmask 255.255.255.0 {    #指定dhcp监听IP所在网卡的子网和掩码
range 10.0.0.180 10.0.0.200;   #dhcp分配IP地址池范围;
option routers 10.0.0.254;     #路由器IP,可以写网关IP;
option broadcast-address 10.0.0.255;       #指定广播地址
next-server 10.0.0.80;   #告知客户端TFTP Server 的IP地址;
filename "pxelinux.0";   #pxelinux 启动文件位置; 告知客户端从TFTP根目录下载pxelinux.0文件
}
  1. 复制 DHCP 服务配置文件dhcpd.service
cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
  1. 修改 DHCP 服务配置中的启动命令,增加指定监听网卡为新增的网卡2。
vi /etc/systemd/system/dhcpd.service  
  • 在第10行找到这句,并在最后加上新网卡名称。内容类似以下,注意修改最后的网卡名称为你的网卡2的名称。
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid enp0s8

这里的修改目的主要是让自动安装系统的客户端连接到此网卡后,由 DHCP 服务自动给客户端分配 IP 地址。

  1. 重新加载 systemd manager 的所有配置,让 DHCP 服务配置能够生效。
systemctl daemon-reload

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。详细了解

  1. 设置 DHCP 服务为自动启动,并重启
systemctl enable dhcpd
systemctl restart dhcpd

FTP 服务器的安装和配置

  1. 安装 FTP 服务器。
yum install vsftpd -y
  1. 复制第2块光盘内容到 FTP 目录下,提供给 PXE 客户端下载安装镜像内容。
cp -rf /mnt2/* /var/ftp/pub/

(1)复制成功后,进入该目录

cd /var/ftp/pub
ls
  • 应该可以查到到以下内容
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

(2)查看各个目录的容量

du -h --max-depth=1
  • 正常会看到以下内容
8.4M    ./EFI
68M     ./images
60M     ./isolinux
498M    ./LiveOS
396M    ./Packages
3.0M    ./repodata
1.1G    .
  1. 设置 FTP 服务器为开机启动。
systemctl enable vsftpd
  1. 启动 FTP 服务,查看状态是否为 active。
systemctl start vsftpd
systemctl status vsftpd
  • 如果成功启动会在第3行看到以下内容
 Active: active (running)
  1. 部署TFTP服务
yum install -y tftp-server tftp
  • 正常安装完成会看到以下内容:
已安装:
  tftp.x86_64 0:5.2-22.el7
  tftp-server.x86_64 0:5.2-22.el7                  

完毕!
  1. 编辑TFTP配置文件,指定TFTP的根目录
vi /etc/xinetd.d/tftp
  • 在第14行,找到disable = yes,把yes 改为 no 。设置TFTP为开机启动。

  1. 设置TFTP为开机启动。
systemctl enable tftp
  1. 启动TFTP服务,并查看状态。
systemctl start tftp
systemctl status tftp
  1. 安装 syslinux。
yum install syslinux -y

Syslinux是一个启动加载器集合,可以从硬盘、光盘或通过PXE 的网络引导启动系统。了解更多

  1. 配置 tftp-server 提供 pxe 的 bootloader 需要的相关配置文件。
cp -rf /usr/share/syslinux/* /var/lib/tftpboot
  • 正常情况下,进入/var/lib/tftpboot目录,应该可以查看到以下内容:
cd /var/lib/tftpboot
ls
altmbr.bin     dosutil       ifcpu64.c32         kbdmap.c32   pcitest.c32     syslinux.com
altmbr_c.bin   elf.c32       ifcpu.c32           linux.c32    pmload.c32      syslinux.exe
altmbr_f.bin   ethersel.c32  ifplop.c32          ls.c32       poweroff.com    ver.com
cat.c32        gfxboot.c32   int18.com           lua.c32      pwd.c32         vesainfo.c32
chain.c32      gptmbr.bin    isohdpfx.bin        mboot.c32    pxechain.com    vesamenu.c32
cmd.c32        gptmbr_c.bin  isohdpfx_c.bin      mbr.bin      pxelinux.0      vpdtest.c32
config.c32     gptmbr_f.bin  isohdpfx_f.bin      mbr_c.bin    reboot.c32      whichsys.c32
cpuid.c32      gpxecmd.c32   isohdppx.bin        mbr_f.bin    rosh.c32        zzjson.c32
cpuidtest.c32  gpxelinux.0   isohdppx_c.bin      memdisk      sanboot.c32
diag           gpxelinuxk.0  isohdppx_f.bin      memdump.com  sdi.c32
disk.c32       hdt.c32       isolinux.bin        meminfo.c32  sysdump.c32
dmitest.c32    host.c32      isolinux-debug.bin  menu.c32     syslinux64.exe
  1. 创建 pxelinux.cfg 目录,可以放置默认的开机选项,也可以针对不同的客户端主机提供不同的开机选项。
mkdir /var/lib/tftpboot/pxelinux.cfg
  1. 设置开机菜单并提供 Kickstart 安装文件。
vi /var/lib/tftpboot/pxelinux.cfg/default
  • 内容如下:
default menu.c32  
timeout 10        #超时等待时间,10秒内不操作将自动选择默认的菜单来加载
label CentOS7
kernel centos7/vmlinuz      #内核文件路径这里是相对路径
append initrd=centos7/initrd.img text ks=ftp://10.0.0.80/pub/ks.cfg

boot loader相关文件说明

配置项说明
menu.c32提供图形化菜单功能
vesamenu.c32也是提供图形化菜单功能,但界面和menu.c32不同
pxelinux.0boot loader文件
  1. 设置权限
chmod 777 /var/lib/tftpboot/pxelinux.cfg/default
  1. 创建 FTP 服务目录用于提供 Linux 内核文件下载。
mkdir /var/lib/tftpboot/centos7
cp /mnt2/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7
cp /mnt2/images/pxeboot/initrd.img /var/lib/tftpboot/centos7
  1. 编辑 Kickstart 配置文件。
vi /var/ftp/pub/ks.cfg
  • 注意第18 行,要把--device=enp0s8,修改为你的新网卡的名称。内容如下:
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://10.0.0.80/pub/"
# Use graphical install
graphical
# 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=enp0s8 --onboot=yes --ipv6=auto
network --hostname=localhost.localdomain
# Root password
#rootpw --iscrypted
#$6$R.sNXePHVTgkuHE7$.74bMyoV3.OWJL9Hq9u7cTuwwG9O.UfQRTjVVmg//h.4tZYGg2cc3Z.bYE5dkx5VCTgwDvY#J5q983zpivcCGw/
rootpw root
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Disk partitioning information
autopart --type=lvm

%packages
@^minimal
%end
  1. 禁用 SELINUX。
vi /etc/selinux/config
  • SELINUX设置为disabled
SELINUX=disabled
  1. 确保关闭并禁用防火墙。
systemctl stop firewalld
systemctl disable firewalld
  1. 重启Tmpl虚拟机
reboot
  1. 开始配置 Clinet 客户端。新建一台虚拟机。

  2. 虚拟机命名为’Client你学号后3位'。

  3. 内存至少要分配2048M,否则会无法安装。

  4. 创建虚拟硬盘

  5. 设置系统启动顺序。勾选网络,并且排在启动顺序第一位。

  6. 网络设置注意要使用和Tmpl虚拟机相同的网卡。连接方式选取仅主机(Host-Only)网络

  7. 启动Client虚拟机。取消启动盘启动。

  8. 等待大概2分钟,系统进入安装界面自动安装,无需干预。

  9. 系统安装完成后,请注意不要重启,请先关闭Client虚拟机。

  10. Client虚拟机启动顺序调整为硬盘为第一顺序,再启动。

  11. 启动以后使用以下账号登录。

用户名:root
密码:root

【常见问题】

1. 客户端无法获取ks.cfg

提示“curl: Failed to connect to 10.0.0.80:Network is unreachable” 和 “Warning: anaconda: failed to fetch kickstart from ftp://10.0.0.80/pub/ks.cfg”

答:这个问题通常是由于多个 DHCP 服务,给客户端分配了错误的 IP 网段导致的。

  • (1)打开 Virtualbox 的主机网络管理器。

  • (2)创建一个新的虚拟网卡。可以看到新增一个结尾是“#2”的网卡。

  • (3)不启用2块网卡的DHCP服务。

  • (4)在 Windows 的网络适配器配置界面,清除旧虚拟网卡的IP,掩码和DNS,并保存。

  • (5)把旧网卡的配置配置到新网卡上。

  • (6)把服务端和客户端虚拟机的所有网卡都指向新网卡。

注意:服务端虚拟机的网卡1和网卡2都要指向新网卡。

  • (7)在Tmpl虚拟机查看 DHCP 服务器分配 IP的日志,查看是否正常分配 IP 给客户端。
tail -500 /var/log/messages|grep dhcpd

2. 客户端启动停在 CentOS 菜单选择界面。

答:可能有以下原因:

  • (1)检查步骤25Tmpl虚拟机的 pxelinux 配置文件。
/var/lib/tftpboot/pxelinux.cfg/default
  • (2)检查Tmpl虚拟机 FTP 能否正常下载 ks.cfg 文件。

查看 FTP 服务状态,正常应该是 active。不正常检查 FTP 的配置并尝试重启。

systemctl status vsftpd

使用wget尝试下载 ks.cfg 文件,正常应该会显示 'ks.cfg' saved。如果无法正常下载,说明 FTP 服务出错,检查 FTP 的配置并尝试重启。

yum install wget -y
wget ftp://10.0.0.80/pub/ks.cfg

3. 客户端无法启动,提示“WARNING:dracut-initqueue timeout - starting timeout scripts” 类似以下错误

答:这个错误大概率是因为Virtualbox 虚拟网卡自带的 DHCP 服务干扰服务器本身配置的DHCP服务导致的IP分配错误。可以尝试停用此服务。

  • (1)打开 Virtualbox 主机网络管理器

  • (2)去掉勾选的 启用服务器 选项。

  • (3)关闭虚拟机,重启Virtualbox。

如果以上步骤无法解决,可以新建一个虚拟网卡,并把虚拟机全部指向新的虚拟网卡。

  • (1)创建虚拟网卡。

  • (2)所有虚拟机指向新的虚拟网卡。

  • (3)把原虚拟网卡的IP 改掉,修改新的虚拟网卡的IP为 10.0.0.2,掩码255.255.255.0