【版本】
当前版本号v20221022
版本 | 修改说明 |
---|---|
v20221022 | 增加常见问题解答 |
v20220420 | 增加了实验说明,补充了常见问题解答 |
v20211031 | 更新缺失图片 |
v20211021 | 更新客户端无法请求服务端进行下载的问题 |
v20211013 | 初始化版本 |
【实验名称】实验5.1 PXE+Kickstart 自动部署 CentOS
【实验目的】
- 掌握 Kickstart 的配置和使用
- 掌握通过 PXE 启动 和 加载 Kickstart 自动安装 CentOS 系统
【实验环境】
- VirtualBox
- CentOS 7
- FinalShell
【实验说明】
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等。
Tmpl
虚拟机在此实验中安装 DHCP服务、TFTP 服务和 FTP 服务。主要承担 DHCP 服务器作用,并同时通过 TFTP 提供 pxelinux 启动程序下载,通过 FTP 提供CentOS安装文件下载。客户端启动以后到自动安装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 和客户端建立连接后,会开始传输软件包,客户端将开始安装操作系统。当安装完成后,它将提示重新引导计算机。
- 在此次实验中网络的连接图如下所示:
【实验资源】
- CentOS-7-x86_64-Minimal-2009.iso
链接:https://pan.baidu.com/s/1kw7nT7dbonUTSlPqIHVwhQ
提取码:heis
【实验步骤】
网卡2配置
- 打开 Virtualbox,进入
Tmpl
虚拟机的设置界面。启用和设置网卡2。新增的网卡主要用于启用 DHCP 服务。
注意:网卡2指向的 VirtualBox 的虚拟网卡,是配置了 IP 为 10.0.0.2 的那张,请根据自己的实际情况配置。
插入光盘
增加一个光驱,并选择
CentOS-7-x86_64-Minimal-2009.iso
盘片(注意此盘片为最小化CentOS的安装镜像,大小为973MB).设置
CentOS-7-x86_64-Minimal-2009.iso
盘片为第二IDE控制器从通道
。启动
Tmpl
虚拟机,并使用root
用户登录。
su
挂载 /mnt2
- 创建一个新的目录
/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 的配置
- 查看新网卡的名称。
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
- 修改新的网卡配置。
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 服务安装与配置
- 安装DHCP服务。
yum install dhcp -y
- 编辑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文件
}
- 复制 DHCP 服务配置文件
dhcpd.service
cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
- 修改 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 地址。
- 重新加载 systemd manager 的所有配置,让 DHCP 服务配置能够生效。
systemctl daemon-reload
Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。详细了解
- 设置 DHCP 服务为自动启动,并重启
systemctl enable dhcpd
systemctl restart dhcpd
FTP 服务器的安装和配置
- 安装 FTP 服务器。
yum install vsftpd -y
- 复制第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 .
- 设置 FTP 服务器为开机启动。
systemctl enable vsftpd
- 启动 FTP 服务,查看状态是否为 active。
systemctl start vsftpd
systemctl status vsftpd
- 如果成功启动会在第3行看到以下内容
Active: active (running)
- 部署
TFTP
服务
yum install -y tftp-server tftp
- 正常安装完成会看到以下内容:
已安装:
tftp.x86_64 0:5.2-22.el7
tftp-server.x86_64 0:5.2-22.el7
完毕!
- 编辑
TFTP
配置文件,指定TFTP的根目录
vi /etc/xinetd.d/tftp
- 在第14行,找到disable = yes,把yes 改为 no 。设置
TFTP
为开机启动。
- 设置
TFTP
为开机启动。
systemctl enable tftp
- 启动
TFTP
服务,并查看状态。
systemctl start tftp
systemctl status tftp
- 安装 syslinux。
yum install syslinux -y
Syslinux是一个启动加载器集合,可以从硬盘、光盘或通过PXE 的网络引导启动系统。了解更多
- 配置 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
- 创建 pxelinux.cfg 目录,可以放置默认的开机选项,也可以针对不同的客户端主机提供不同的开机选项。
mkdir /var/lib/tftpboot/pxelinux.cfg
- 设置开机菜单并提供 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.0 | boot loader文件 |
- 设置权限
chmod 777 /var/lib/tftpboot/pxelinux.cfg/default
- 创建 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
- 编辑 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
- 禁用 SELINUX。
vi /etc/selinux/config
- 把
SELINUX
设置为disabled
SELINUX=disabled
- 确保关闭并禁用防火墙。
systemctl stop firewalld
systemctl disable firewalld
- 重启
Tmpl
虚拟机
reboot
开始配置 Clinet 客户端。新建一台虚拟机。
虚拟机命名为’Client你学号后3位'。
内存至少要分配
2048M
,否则会无法安装。创建虚拟硬盘
设置系统启动顺序。勾选网络,并且排在启动顺序第一位。
网络设置注意要使用和
Tmpl
虚拟机相同的网卡。连接方式选取仅主机(Host-Only)网络
。启动
Client
虚拟机。取消启动盘启动。等待大概2分钟,系统进入安装界面自动安装,无需干预。
系统安装完成后,请注意不要重启,请先关闭
Client
虚拟机。Client
虚拟机启动顺序调整为硬盘为第一顺序,再启动。启动以后使用以下账号登录。
用户名: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)检查步骤25
Tmpl
虚拟机的 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
。