第19章 使用 PXE+Kickstart 无人值守安装服务
章节简述
刚入职的运维新手经常会被要求去做一些安装操作系统的工作。如果按照第 1 章介绍的使用光盘镜像来安装操作系统,这种方式不仅耗时,效率还相当低下。本章将介绍一种能够实现无人值守安装的解决方案—PXE+Kickstart 服务程序。并带领大家动手安装部署 PXE+TFTP+FTP+DHCP+Kickstart 等服务,从而搭建出一套可批量安装 Linux 系统的无人值守安装系统。在学完本章内容之后,运维新手就可以告别枯燥乏味的重复性工作,大幅提高系统安装的效率。
19.1 无人值守系统
本书在第 1 章讲解了使用光盘镜像来安装 Linux 系统的方法,坦白讲,该方法适用于只安装少量 Linux 系统的情况。如果生产环境中有数百台机器都需要安装系统,这种方式就不合时宜了。这时,就需要使用 PXE+TFTP+FTP+DHCP+Kickstart 服务搭建出一个无人值守安装系统。这种无人值守安装系统可以自动地为数十台甚至上百台机器安装系统,这一方面将运维人员从重复性的工作中解救出来,另外一方面也大大提升了系统安装的效率。
无人值守安装系统的工作流程如图 19-1 所示。
图19-1 无人值守安装系统的工作流程
PXE(Preboot eXecute Environment,预启动执行环境)是由Intel 公司开发的技术,能够让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持 PXE 技术),主要用于在无人值守安装系统中引导客户端主机安装 Linux 操作系统。Kickstart 是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文件, 当安装过程中需要填写参数时则自动匹配Kickstart 生成的文件。所以只要 Kickstart 文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要运维人员的干预,就能自动完成安装工作。TFTP、FTP 以及 DHCP 服务程序的配置与部署已经在第 11 章和第 14 章进行了详细讲解,这里不再赘述。
由于客户端主机还没有完整的操作系统,因此无法通过 FTP 进行验证,所以需要 TFTP来帮助客户端获取启动引导文件和驱动程序。vsftpd 服务则用于通过网络传输完整的系统安装镜像给客户端。当然,传输镜像的方式并不局限于 FTP,也可以选择httpd 服务来替代vsftpd,只要能顺利传输镜像文件即可。
19.2 部署相关服务程序
在本章,我们会部署多款服务,这些服务以及作用如表 19-1 所示。由于其中某些服务的配置过程在前面的章节中有详细的介绍,因此下文在涉及相应服务的配置部署时,节奏会比较快。如有需要,大家返回到前面的章节进行重温。
表 19-1 接下来实验中即将用到的服务及作用
服务名称 | 主要作用 |
---|---|
kea | 分配网卡信息及指引获取驱动文件 |
tftp-server | 提供驱动及引导文件的传输 |
SYSLinux | 提供驱动及引导文件 |
vsftpd | 提供完整系统镜像的传输 |
Kickstart | 提供安装过程中选项的问答设置 |
19.2.1 配置DHCP服务程序
DHCP 服务程序用于为客户端主机分配可用的 IP 地址,而且这是服务器与客户端主机进行文件传输的基础,因此要先行配置 DHCP 服务程序。首先按照表 19-2 为无人值守系统设置IP 地址,然后按照图 19-2 和图 19-3 在虚拟机的虚拟网络编辑器中关闭自身的 DHCP 服务即取消(选中复选框),避免与自己配置的服务冲突。
表 19-2 无人值守系统与客户端的设置
主机名称 | 操作系统 | IP 地址 |
---|---|---|
无人值守系统 | RHEL 10 | 192.168.10.10 |
客户端 | 未安装操作系统 | - |
图19-2 打开虚拟机的虚拟网络编辑器
图19-3 关闭虚拟机自带的DHCP服务
除了上面提及的服务之外,PXE+KickStart 无人值守安装系统还会用到诸如 sips、slp、mountd 等多项相关的服务协议,因此本实验会临时关闭 firewalld 防火墙,以便数据能够正常传送:
root@linuxprobe:~# systemctl stop firewalld
当挂载好光盘镜像并把仓库文件配置妥当后,就可以安装 kea 服务软件包了:
root@linuxprobe:~# dnf install -y kea
Updating Subscription Management repositories.
Last metadata expiration check: 0:02:33 ago on Sat 05 Apr 2025 12:09:27 AM CST.
Dependencies resolved.
==========================================================================
Package Arch Version Repo Size
==========================================================================
Installing:
kea x86_64 2.6.1-4.el10 BaseOS 1.3 M
Installing dependencies:
boost-system x86_64 1.83.0-4.el10 BaseOS 16 k
kea-libs x86_64 2.6.1-4.el10 BaseOS 3.1 M
libpq x86_64 16.1-7.el10 BaseOS 253 k
log4cplus x86_64 2.1.1-7.el10 BaseOS 355 k
mariadb-connector-c x86_64 3.4.1-1.el10 BaseOS 214 k
mariadb-connector-c-config noarch 3.4.1-1.el10 BaseOS 10 k
………………省略部分输出信息………………
Installed:
boost-system-1.83.0-4.el10.x86_64
kea-2.6.1-4.el10.x86_64
kea-libs-2.6.1-4.el10.x86_64
libpq-16.1-7.el10.x86_64
log4cplus-2.1.1-7.el10.x86_64
mariadb-connector-c-3.4.1-1.el10.x86_64
mariadb-connector-c-config-3.4.1-1.el10.noarch
Complete!
第 14 章已经详细讲解了 DHCP 服务程序的配置以及部署方法,相信各位读者对相关的配置参数还有一些印象。但是,我们在这里使用的配置文件与第 14 章中的配置文件有下面两个主要的区别。
在配置文件的下面加载了引导驱动文件 pxelinux.0(这个文件会在下面的步骤中创建),其目的是让客户端主机获取到 IP 地址后主动获取引导驱动文件,自行进入下一步的安装过程。
指定了 TFTP 服务器的 IP 地址,在安装过程中能自动获取到初始的驱动和引导文件。
root@linuxprobe:~# vim /etc/kea/kea-dhcp4.conf
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "ens160" ]
},
"subnet4": [
{
"id": 1,
"subnet": "192.168.10.0/24",
"pools": [
{
"pool": "192.168.10.100 - 192.168.10.200"
}
],
"option-data": [
{
"name": "routers",
"data": "192.168.10.10"
},
{
"name": "boot-file-name",
"data": "pxelinux.0"
},
{
"name": "tftp-server-name",
"data": "192.168.10.10"
}
]
}
]
}
}
Tips :
当前pxelinux.0 文件不存在,不过不用担心,后面会找到它的。
在确认 DHCP 服务程序的参数都填写正确后,重新启动该服务程序,并将其添加到开机启动项中。这样在设备下一次重启之后,可以在无须人工干预的情况下,自动为客户端主机安装系统。
root@linuxprobe:~# systemctl restart kea-dhcp4
root@linuxprobe:~# systemctl enable kea-dhcp4
Created symlink '/etc/systemd/system/multi-user.target.wants/kea-dhcp4.service' → '/usr/lib/systemd/system/kea-dhcp4.service'.
与以往的红帽企业版不同,RHEL 10 系统中存在一些“讨厌”的服务,它们的参数错误会导致服务启动失败,但有时却不会在屏幕上向用户显示任何提示信息。建议在启动 kea 后查看一下服务状态,以免后续实验中客户端分配不到网卡信息。若输出状态为“active (running)”则表示服务已经正常运行:
root@linuxprobe:~# systemctl status kea-dhcp4
● kea-dhcp4.service - Kea DHCPv4 Server
Loaded: loaded (/usr/lib/systemd/system/kea-dhcp4.service; enabled; pres>
Active: active (running) since Sat 2025-04-05 00:25:25 CST; 29s ago
Invocation: 6b06921a371a4856ad8ce1c0189d8b30
Docs: man:kea-dhcp4(8)
Main PID: 4092 (kea-dhcp4)
Tasks: 29 (limit: 24371)
Memory: 3.3M (peak: 9M)
CPU: 36ms
CGroup: /system.slice/kea-dhcp4.service
└─4092 /usr/sbin/kea-dhcp4 -c /etc/kea/kea-dhcp4.conf
………………省略部分输出信息………………
19.2.2 配置TFTP服务程序
我们曾经在第 11 章中学习过 vsftpd 服务与 TFTP 服务。vsftpd 是一款功能丰富的文件传输服务程序,允许用户以匿名开放模式、本地用户模式、虚拟用户模式进行访问认证。但是,当前的客户端主机还没有安装操作系统,该如何进行登录认证呢?
TFTP 作为一种基于 UDP 的简单文件传输协议,不需要进行用户认证即可获取所需的文件资源。因此接下来配置 TFTP 服务程序,为客户端主机提供引导及驱动文件。当客户端主机有了基本的驱动程序之后,再通过 vsftpd 服务程序将完整的光盘镜像文件传输过去。
root@linuxprobe:~# dnf install -y tftp-server
Updating Subscription Management repositories.
Last metadata expiration check: 0:18:20 ago on Sat 05 Apr 2025 12:09:27 AM CST.
Dependencies resolved.
==============================================================================
Package Architecture Version Repository Size
==============================================================================
Installing:
tftp-server x86_64 5.2-47.el10 AppStream 44 k
………………省略部分输出信息………………
Installed:
tftp-server-5.2-47.el10.x86_64
Complete!
TFTP 文件目录内暂时不需要放入文件,安装后启动即可:
root@linuxprobe:~# systemctl restart tftp
root@linuxprobe:~# systemctl enable tftp
Created symlink '/etc/systemd/system/sockets.target.wants/tftp.socket' → '/usr/lib/systemd/system/tftp.socket'.
19.2.3 配置 SYSLinux 服务程序
SYSLinux 是一个用于提供引导加载的服务程序。与其说SYSLinux 是一个服务程序,不如说是一个包含了很多引导文件的文件夹。在安装好SYSLinux 服务程序后,/usr/share/ syslinux 目录中会出现很多引导文件。
root@linuxprobe:~# dnf install -y syslinux
Updating Subscription Management repositories.
Last metadata expiration check: 0:21:45 ago on Sat 05 Apr 2025 12:09:27 AM CST.
Dependencies resolved.
==============================================================================
Package Architecture Version Repository Size
==============================================================================
Installing:
syslinux x86_64 6.04-0.29.el10 BaseOS 576 k
Installing dependencies:
syslinux-nonlinux noarch 6.04-0.29.el10 BaseOS 605 k
………………省略部分输出信息………………
Installed:
syslinux-6.04-0.29.el10.x86_64 syslinux-nonlinux-6.04-0.29.el10.noarch
Complete!
我们首先需要把 SYSLinux 提供的引导文件(包含前文提到的文件 pxelinux.0)复制到TFTP 服务程序的默认目录中,这样客户端主机就能顺利地获取到引导文件了。另外,在 RHEL 10 系统光盘镜像中也有一些需要调取的引导文件。确认光盘镜像已经被挂载到/media/cdrom 目录后,使用复制命令将光盘镜像中自带的一些引导文件也复制到 TFTP 服务程序的默认目录中。
root@linuxprobe:~# cd /var/lib/tftpboot
root@linuxprobe:/var/lib/tftpboot# cp -r /usr/share/syslinux/* .
root@linuxprobe:/var/lib/tftpboot# cp /media/cdrom/images/pxeboot/* .
cp 命令后面接的句点(.)表示当前工作目录。也就是说,上述 cp 命令表示将文件复制到当前工作目录(即/var/lib/tftpboot)中。在复制过程中,若多个目录保存着相同的文件,则手动敲击 y 键进行覆盖即可。
然后在TFTP 服务程序的目录中新建pxelinux.cfg 目录。虽然该目录的名字带有后缀, 但依然也是目录,而非文件!我们在里面创建一个名为 default 的文件,用作系统的引导菜单界面(类似于图 19-4 所示的功能)。
图19-4 Linux系统的引导菜单界面
默认的开机菜单中有 3 个选项:安装系统、对安装介质进行检验、排错模式。既然已经确定采用无人值守的方式安装系统,若还需要为每台主机手动选择相应的选项,则未免与我们的主旨(无人值守安装)相悖。
因此我们不会提供 3 个选项,而只提供一个安装 RHEL 10 的功能,并且不需要用户手动选择它,系统会自动选择并加载(相当于用户敲击回车键的效果)。
root@linuxprobe:/var/lib/tftpboot# mkdir pxelinux.cfg
root@linuxprobe:/var/lib/tftpboot# vim pxelinux.cfg/default
1 DEFAULT auto
2 LABEL auto
3 KERNEL vmlinuz
4 APPEND initrd=initrd.img inst.ks=ftp://192.168.10.10/pub/ks.cfg inst.stage2=ftp://192.168.10.10 inst.repo=ftp://192.168.10.10/BaseOS quiet
root@linuxprobe:/var/lib/tftpboot# cd ~
其中 DEFAULT 用于指定自动加载的选项,我们命名为 auto,在第 3 行使用 KERNEL vmlinuz 参数加载内核文件,该文件刚才已经复制到 TFTP 目录中,文件位于/var/lib/ tftpboot/vmlinuz 中。
随后加载 ks.cfg 文件,用于自动应答安装中出现的问题,以及加载稍后会复制到 FTP 目录中的系统安装源。最后,建议在安装源的后面加入 quiet 参数,意为使用静默安装方式, 不再需要用户进行确认。文件修改完毕后保存即可。开机选项菜单是被调用的文件,因此不需要单独重启任何服务。
19.2.4 配置VSFtpd服务程序
在这套无人值守安装系统的服务中,光盘镜像是通过 FTP 传输的,因此势必要用到vsftpd 服务程序。当然,也可以使用 httpd 服务程序来提供 Web 网站访问的方式,只要确保能将光盘镜像顺利传输给客户端主机即可。如果打算使用 Web 网站服务来提供光盘镜像, 一定记得将上面配置文件中的光盘镜像获取网址和 Kickstart 应答文件获取网址修改一下。
root@linuxprobe:~# dnf install -y vsftpd
Updating Subscription Management repositories.
Last metadata expiration check: 0:43:08 ago on Sat 05 Apr 2025 12:09:27 AM CST.
Dependencies resolved.
========================================================================================
Package Architecture Version Repository Size
========================================================================================
Installing:
vsftpd x86_64 3.0.5-8.el10 AppStream 174 k
………………省略部分输出信息………………
Installed:
vsftpd-3.0.5-8.el10.x86_64
Complete!
RHEL 10 系统版本的 vsftpd 服务默认不允许匿名公开访问模式,因此需要手动进行开启:
root@linuxprobe:~# vim /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
………………省略部分输出信息………………
刘遄老师再啰嗦一句,在配置文件修改正确之后,一定将相应的服务程序添加到开机启动项中,这样无论是在生产环境中还是在红帽认证考试中,都可以在设备重启之后依然能提供相应的服务。希望各位读者一定养成这个好习惯。
root@linuxprobe:~# systemctl restart vsftpd
root@linuxprobe:~# systemctl enable vsftpd
Created symlink '/etc/systemd/system/multi-user.target.wants/vsftpd.service' → '/usr/lib/systemd/system/vsftpd.service'.
在确认系统光盘镜像已经正常挂载到/media/cdrom 目录后,把目录中的光盘镜像文件全部复制到 vsftpd 服务程序的工作目录中:
root@linuxprobe:~# cp -r /media/cdrom/* /var/ftp
这个过程大约需要 3~5 分钟。在此期间,咱们也别闲着,将 SELinux 安全子系统中放行 FTP 的允许策略设置成on(开启)。
root@linuxprobe:~# setsebool -P ftpd_connect_all_unreserved=on
19.2.5 创建KickStart应答文件
毕竟,我们使用 PXE+Kickstart 部署的是一套“无人值守安装系统服务”,而不是“无人值守传输系统光盘镜像服务”,因此还需要让客户端主机能够一边获取光盘镜像,一边自动帮用户填写好安装过程中出现的选项。简单来说,如果生产环境中有 100 台机器,它们需要安装相同的系统环境,那么在安装过程中单击的按钮和填写的信息也应该都是相同的。那么, 为什么不创建一个类似于备忘录的需求清单呢?这样,在无人值守安装系统时,会从这个需求清单中找到相应的选项值,从而免去了手动输入之苦。更重要的是,这也避免了人的干预, 彻底实现无人值守自动安装系统,而不是单纯地传输系统光盘镜像。
有了上文做铺垫,相信大家现在应该能猜到 Kickstart 其实并不是一个服务程序,而是一个应答文件了。是的!Kickstart 应答文件中包含了系统安装过程中需要使用的选项和参数信息,系统会自动调取这个应答文件的内容,从而彻底实现无人值守安装系统。那么,既然这个文件如此重要,该去哪里找呢?其实在 root 管理员的家目录中有一个名为 anaconda- ks.cfg 的文件,它就是应答文件。下面将这个文件复制到 vsftpd 服务程序的工作目录中
(在开机选项菜单的配置文件中已经定义了该文件的获取路径,也就是 vsftpd 服务程序数据目录中的 pub 子目录)。使用 chmod 命令设置该文件的权限,确保所有人都有可读的权限, 以保证客户端主机顺利获取到应答文件及里面的内容:
root@linuxprobe:~# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
root@linuxprobe:~# chmod +r /var/ftp/pub/ks.cfg
Kickstart 应答文件并没有想象中的那么复杂,它总共只有 41 行左右的参数和注释内容, 大家完全可以通过参数的名称及介绍来快速了解每个参数的作用。刘遄老师在这里挑选几个比较有代表性的参数进行讲解,其他参数建议大家自行修改测试。
其中,第 1~15 行主要是一些注释信息和空行,这些信息指定了系统以图形化模式进行安装、禁用 KDUMP 服务、键盘类型以及系统语言,不需要任何修改。
root@linuxprobe:~# vim /var/ftp/pub/ks.cfg
1 # Generated by Anaconda 40.22.3.12
2 # Generated by pykickstart v3.52.5
3 #version=RHEL10
4 # Use graphical install
5 graphical
6
7 %addon com_redhat_kdump --disable
8
9 %end
10
11 # Keyboard layouts
12 keyboard --vckeymap=us --xlayouts='us'
13 # System language
14 lang en_US.UTF-8
15
在第 16~18 行,一定要让网卡默认处于 DHCP 模式,否则在几十、上百台机器上安装完系统后,会因为 IP 地址相互冲突而导致后续无法管理。这里的主机名称默认即可。
16 # Network information
17 network --bootproto=dhcp --device=ens160 --onboot=on --ipv6=auto --activate
18 network --hostname=linuxprobe.com
在第 19~24 行,记得要添加上系统 BaseOS 安装源的信息,并将 AppStream 改为 FTP 网络源模式。graphical-server-environment 即带有图形化界面的服务器环境,它对应的是安装界面中的 Server With GUI 选项。
19 repo --name="BaseOS" --baseurl=ftp://192.168.10.10/BaseOS
20 repo --name="AppStream" --baseurl=ftp://192.168.10.10/AppStream
21
22 %packages
23 @^graphical-server-environment
24
在第 25~29 行,在%end 和 firstboot 之间加入一条 reboot 命令,用于在系统结束安装后能自动重启,无须用户手动操作。如果没有这条语句,则会如图 19-5 所示,需要再手动单击重启。
25 %end
26 reboot
27 # Run the Setup Agent on first boot
28 firstboot --enable
29
图19-5 系统安装结束,需手动点击重启
第 31~35 行表示安装磁盘的名称为 sda 并自动分区,这便要求我们在后续新建客户端虚拟机时,一定要选择 SCSI 或 SATA 类型的磁盘(见图 19-6),否则会变成/dev/hd 或/dev/nvme 开头的名称,进而会因找不到硬盘设备而终止安装进程。此处默认即可,无须修改。
31 ignoredisk --only-use=sda
32 autopart
33 # Partition clearing information
34 clearpart --none --initlabel
35
图19-6 选择SCSI或SATA硬盘类型
在最后的第 36~41 行中,timezone 参数定义了系统默认时区为 Shanghai。如果大家的服务器时间不准确,则按照如下修改即可。此外,还创建了一个普通用户 linuxprobe, 其密码为/etc/shadow 文件中的加密密文,它由系统自动创建。此处默认即可,无须修改。
36 # System timezone
37 timezone Asia/Shanghai --utc
38
39 # Root password
40 rootpw --iscrypted --allow-ssh $y$j9T$MacHqEWCBAHDZWft7rBQjYSA$h5ypm01FEHP.1 VKG80r0iiv9H9AU6UDRnycTdwCEyhA
41 user --groups=wheel --name=linuxprobe --password=$y$j9T$O1Btaze/IJPvCKbVOfQi IJw.$ZjwvTAeWD1NYuqNHl3FeLFqeLDmxFvmsXR19KCKbUE6 --iscrypted --gecos="linuxprobe"
由上可知,Kickstart 应答文件真正的修改并不多,其中的默认参数就已经非常合适了。最后预览一下 ks.cfg 文件的全貌。
root@linuxprobe:~# cat /var/ftp/pub/ks.cfg
# Generated by Anaconda 40.22.3.12
# Generated by pykickstart v3.52.5
#version=RHEL10
# Use graphical install
graphical
%addon com_redhat_kdump --disable
%end
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens160 --onboot=on --ipv6=auto --activate
network --hostname=linuxprobe.com
repo --name="BaseOS" --baseurl=ftp://192.168.10.10/BaseOS
repo --name="AppStream" --baseurl=ftp://192.168.10.10/AppStream
%packages
@^graphical-server-environment
%end
reboot
# Run the Setup Agent on first boot
firstboot --enable
# Generated using Blivet version 3.10.0
ignoredisk --only-use=sda
autopart
# Partition clearing information
clearpart --none --initlabel
# System timezone
timezone Asia/Shanghai --utc
# Root password
rootpw --iscrypted --allow-ssh $y$j9T$pg8bgLsCm0JreeO8laDHb8qW$cNPfXxGES.qDqkCTrpJUgM3GKju1jD3T9qQ1HMcxvr/
user --groups=wheel --name=linuxprobe --password=$y$j9T$UH7lJoF0c2H0zav1zlYatL.y$jtv7wke6M6zT7m1cLkIHz2W7FcP.grvhnxKa3PbnGyA --iscrypted --gecos="linuxprobe"
如果大家在生产环境中需要用到这个文件,则可以直接复制并使用上面的内容。
Kickstart 应答文件将使用 FTP 服务进行传输,然后由安装向导进行调用,因此也不需要重启任何服务。
19.3 自动部署客户机
在按照上文讲解的方法成功部署各个相关的服务程序后,就可以使用 PXE+Kickstart 无人值守安装系统了。在采用下面的步骤建立虚拟机时,一定要把客户端的网络模式设定成与服务器一致的“仅主机模式”,否则两台设备无法进行通信,也就更别提自动安装系统了。其余硬件配置选项并没有强制性要求,大家可参考这里的配置选项来设定。
第 1 步:打开“新建虚拟机向导”程序,选择“自定义(高级)”配置类型,然后单击“下一步”按钮,如图 19-7 所示。在随后的虚拟机硬件兼容性选项中,选择默认的 Workstation 17.x or later,步骤省略。
第 2 步:将虚拟机操作系统的安装来源设置为“稍后安装操作系统”。这样做的目的是让虚拟机真正从网络中获取系统安装镜像,同时也可避免 VMware Workstation 虚拟机软件按照内设的方法自行安装系统。单击“下一步”按钮,如图 19-8 所示。
图19-7 选择虚拟机的配置类型
图19-8 设置虚拟机操作系统的安装来源
第 3 步:将“客户机操作系统”设置为 Linux,版本为“Red Hat Enterprise Linux 9 64 位”,然后单击“下一步”按钮,如图 19-9 所示。希望在你看到本书的时候,VMware Workstation 已经支持 RHEL 10 选项。
第 4 步:对虚拟机进行命名并设置安装位置。大家可自行定义虚拟机的名称,而安装位置则尽量选择磁盘空间较大的分区。然后单击“下一步”按钮,如图 19-10 所示。在随后设置虚拟机处理器的个数及核心数、内存容量值时,请大家根据实际情况自行选择,步骤省略。
图19-9 选择客户端主机的操作系统
图19-10 命名虚拟机并设置虚拟机的安装位置
第 5 步:设置虚拟机的网络连接类型为“使用仅主机模式网络”,如图 19-11 所示。一定要确保服务器与客户端同处于相同的网络模式,否则客户端无法获得从服务器传送过来的系统镜像及应答文件。随后的SCSI 控制器类型选择默认的 LSI Logic,步骤省略。
第 6 步:设置磁盘类型并指定容量。设置“虚拟磁盘类型”为 SCSI 或 SATA,如图 19-12所示。随后在磁盘创建确认界面,选择“创建新虚拟磁盘”选项,步骤省略。
这里将“最大磁盘大小”设置为 20GB。需要说明的是,这个 20GB 指的是虚拟机系统能够使用的最大上限,该空间不会被立即占满,因此设置得稍微大一些也没有关系。然后单击 “下一步”按钮,如图 19-13 所示。随后的确认磁盘文件名称界面选择默认值即可,步骤省略。
图19-11 设置客户端的网络模式
图19-12 设置虚拟硬盘类型为SCSI或SATA
图19-13 将磁盘容量指定为20GB
第 7 步:结束“新建虚拟机向导程序”后,先不要着急打开虚拟机系统。大家还需要单击图 19-14 中的“自定义硬件”按钮,在弹出的如图 19-15 所示的界面中,把“网络适配器” 设备同样也设置为“仅主机模式”(这个步骤非常重要),移除其他不需要的硬件。
图19-14 单击虚拟机的“自定义硬件”按钮
图19-15 设置虚拟机网络适配器设备为仅主机模式
第 8 步:可能有些同学设置的虚拟机无法进入安装界面,原因是没有设置成 BIOS 模式。为此,可进入“选项”选项卡,然后单击“高级”按钮,在“固件类型”框中选择 BIOS,然后单击“确认”按钮,如图 19-16 所示。
图19-16 确认固件类型为BIOS
现在,我们就同时准备好了 PXE+Kickstart 无人值守安装系统与虚拟机。在生产环境中, 大家只需要将配置妥当的服务器上架,接通服务器和虚拟机之间的网线,然后启动客户端 即可。接下来就会按照图 19-17 到图 19-20 那样,开始传输光盘镜像文件并进行自动安装了—期间完全无须人工干预。
图19-17 自动传输光盘镜像文件并安装系统
图19-18 根据应答文件自动填写安装信息
图19-19 自动安装系统,无须人工干预
图19-20 顺利进入到系统界面
由此可见,当生产环境工作中有数百台机器需要批量安装系统时,使用无人值守安装系统的便捷性是不言而喻的。
复习题
-
部署无人值守安装系统时,需要用到哪些服务程序和文件?
答:需要用到SYSLinux 引导服务、DHCP 服务、vsftpd 文件传输服务(或 httpd 网站服务)、TFTP 服务以及 Kickstart 应答文件。
-
在 VMware Workstation 虚拟机软件中,DHCP 服务总是分配错误 IP 地址,原因可能是什么?
答:虚拟机的虚拟网络编辑器中自带的 DHCP 服务可能没有关闭,由此产生了错误分配 IP 地址的情况。
-
如何启用TFTP 和vsftpd 服务?
答:分别执行systemctl start tftp 和 systemctl start vsftpd 命令。
-
成功安装SYSLinux 服务程序后,可以在哪个目录中找到引导文件?
答:安装好 SYSLinux 服务程序软件包后,在/usr/share/syslinux 目录中会出现很多引导文件,在其中选择需要的引导文件即可。
-
在开机选项菜单文件中,把 default 参数设置成 auto 的作用是什么?
答:目的是让系统自动开始安装过程,而不需要运维人员再去选择是安装系统还是校验镜像文件。
-
为什么一定要将配置文件中客户端的网卡模式为 DHCP(动态模式)?
答:因为通过无人值守批量安装出的操作系统是完全一样的,如果网卡模式为 STATIC(静态),则所有的 IP 地址都相同,会导致局域网混乱。
-
安装vsftpd 文件传输服务或 httpd 网站服务的作用是什么?
答:把光盘镜像文件完整、顺利地传送到客户端。
-
Kickstart 应答文件的作用是什么?
答:Kickstart 应答文件中包含了系统安装过程中需要使用的选项和参数信息,客户端在安装系统的过程中可以自动调取这个应答文件中的内容,从而彻底实现无人值守安装系统。
-
请简述ks.cfg 文件的作用。
答:在系统安装过程中自动应答原本需要用户进行填写和确认的信息,真正实现无人值守批量安装系统的效果。
-
如果客户端开机后无法自动获取和安装系统,但已经完全按照本章所讲进行了配置并确保肯定没有错误,则背后的原因是什么?
答:问题有可能是出在了客户端的启动方式上,需进入虚拟机的 BIOS 选项中,将启动方式改成网络,再重启。