Linux应该这么学第19章使用 PXE+Kickstart 无人值守安装服务

本章讲解了如下内容:
➢ 无人值守安装系统;
➢ 部署相关服务程序;
➢ 自动部署客户端主机。
刚入职的运维新手经常会被要求去做一些安装操作系统的工作。如果按照第 1 章讲解的
用光盘镜像来安装操作系统,其效率会相当低下。本章将介绍可以实现无人值守安装服务的
PXE+Kickstart 服务程序,并带领大家动手安装部署 PXE + TFTP + FTP + DHCP + Kickstart 等
服务程序,从而搭建出一套可批量安装 Linux 系统的无人值守安装系统。在学完本章内容之
后,运维新手就可以避免枯燥乏味的重复性工作,大大提供系统安装的效率。

19.1 无人值守安装系统
本书在第 1 章讲解了使用光盘镜像来安装 Linux 系统的方法,坦白讲,该方法适用于只
安装少量 Linux 系统的情况。如果生产环境中有数百台服务器都需要安装系统,这种方式就
不合时宜了。这时,我们就需要使用 PXE + TFTP +FTP + DHCP + Kickstart 服务搭建出一个
无人值守安装系统。这种无人值守安装系统可以自动地为数十台服务器安装系统,这一方面
将运维人员从重复性的工作中解救出来,也大大提升了系统安装的效率。
无人值守安装系统的工作流程如图 19-1 所示。

 PXE(Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,
可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持 PXE 技术),主
要用于在无人值守安装系统中引导客户端主机安装 Linux 操作系统。Kickstart 是一种无人
值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个
ks.cfg 文件,当安装过程中需要填写参数时则自动匹配 Kickstart 生成的文件。所以只要
Kickstart 文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要

运维人员的干预,就可以自动完成安装工作。TFTP、FTP 以及 DHCP 服务程序的配置与
部署已经在第 11 章和第 14 章进行了详细讲解,这里不再赘述。
由于当前的客户端主机并没有完整的操作系统,也就不能完成 FTP 协议的验证了,所以
需要使用 TFTP 协议帮助客户端获取引导及驱动文件。vsftpd 服务程序用于将完整的系统安装
镜像通过网络传输给客户端。当然,只要能将系统安装镜像成功传输给客户端即可,因此也
可以使用 httpd 来替代 vsftpd 服务程序。

19.2 部署相关服务程序

19.2.1 配置 DHCP 服务程序

DHCP 服务程序用于为客户端主机分配可用的 IP 地址,而且这是服务器与客户端主机进
行文件传输的基础,因此我们先行配置 DHCP 服务程序。首先按照表 19-1 为无人值守系统设
置 IP 地址,然后按照图 19-2 和图 19-3 在虚拟机的虚拟网络编辑器中关闭自身的 DHCP 服务。

表19-1 无人值守系统与客户端的设置

主机名称操作系统IP地址
无人值守系统RHEL7192.168.10.1
客户端主机未安装操作系统-

当挂载好光盘镜像并把 Yum 仓库文件配置妥当后,就可以安装 DHCP 服务程序软件包了。 

[root@localhost ~]# yum install dhcp

第 14 章已经详细讲解了 DHCP 服务程序的配置以及部署方法,相信各位读者对相关的配
置参数还有一些印象。但是,我们在这里使用的配置文件与第 14 章中的配置文件有两个主要区
别:允许了 BOOTP 引导程序协议,旨在让局域网内暂时没有操作系统的主机也能获取静态 IP
地址;在配置文件的最下面加载了引导驱动文件 pxelinux.0(这个文件会在下面的步骤中创建),
其目的是让客户端主机获取到 IP 地址后主动获取引导驱动文件,自行进入下一步的安装过程。

[root@localhost ~]# vi /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
allow booting;
allow bootp;
dns-update-style interim;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
        option subnet-mask 255.255.255.0;
        option domain-name-servers 192.168.10.1;
        range dynamic-bootp 192.168.10.100 192.168.10.200;
        default-lease-time 21600;
        max-lease-time 43200;
        next-server 192.168.10.1;
        filename "pxelinux.0";
}

在确认 DHCP 服务程序的参数都填写正确后,重新启动该服务程序,并将其添加到开机启动
项中。这样在设备下一次重启之后,在无须人工干预的情况下,自动为客户端主机安装系统。

[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

19.2.2 配置 TFTP 服务程序

我们曾经在第 11 章中学习过 vsftpd 服务与 TFTP 服务。vsftpd 是一款功能丰富的文件传
输服务程序,允许用户以匿名开放模式、本地用户模式、虚拟用户模式来进行访问认证。但
是,当前的客户端主机还没有安装操作系统,该如何进行登录认证呢?而 TFTP 作为一种基
于 UDP 协议的简单文件传输协议,不需要进行用户认证即可获取到所需的文件资源。因此
接下来配置 TFTP 服务程序,为客户端主机提供引导及驱动文件。当客户端主机有了基本的
驱动程序之后,再通过 vsftpd 服务程序将完整的光盘镜像文件传输过去。

[root@localhost ~]# yum install tftp-server

TFTP 是一种非常精简的文件传输服务程序,它的运行和关闭是由 xinetd 网络守护进
程服务来管理的。xinetd 服务程序会同时监听系统的多个端口,然后根据用户请求的端口
号调取相应的服务程序来响应用户的请求。需要开启 TFTP 服务程序,只需在 xinetd 服务
程序的配置文件中把 disable 参数改成 no 就可以了。保存配置文件并退出,然后重启 xinetd
服务程序,并将其加入到开机启动项中(在 RHEL 7 系统中,已经默认启用了 xinetd 服务
程序,因此在将其添加到开机启动项中的时候没有输出信息属于正常情况)。

[root@localhost ~]# vi /etc/xinetd.d/tftp 
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@localhost ~]# systemctl restart xinetd
[root@localhost ~]# systemctl enable xinetd

TFTP 服务程序默认使用的是 UDP 协议,占用的端口号为 69,所以在生产环境中还需要
在 firewalld 防火墙管理工具中写入使其永久生效的允许策略,以便让客户端主机顺利获取到
引导文件。

[root@localhost ~]# firewall-cmd --permanent --add-port=69/udp
success
[root@localhost ~]# firewall-cmd --reload
success

19.2.3 配置 SYSLinux 服务程序

SYSLinux 是一个用于提供引导加载的服务程序。与其说 SYSLinux 是一个服务程序,不
如说更需要里面的引导文件,在安装好 SYSLinux 服务程序软件包后,/usr/share/syslinux 目录
中会出现很多引导文件。

[root@localhost ~]# yum install syslinux

我们首先需要把 SYSLinux 提供的引导文件复制到 TFTP 服务程序的默认目录中,也就是前
文提到的文件 pxelinux.0,这样客户端主机就能够顺利地获取到引导文件了。另外在 RHEL7 系统
光盘镜像中也有一些我们需要调取的引导文件。确认光盘镜像已经被挂载到/media/cdrom 目录后,
使用复制命令将光盘镜像中自带的一些引导文件也复制到 TFTP 服务程序的默认目录中。

[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@localhost media]# file /dev/cdrom
/dev/cdrom: symbolic link to `sr0'
[root@localhost media]# file /dev/sr0 
/dev/sr0: block special
[root@localhost /]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# ll
总用量 28
-rw-r--r--. 1 root root 26764 11月  4 13:23 pxelinux.0
[root@localhost tftpboot]# mount /dev/cdrom /media/
mount: /dev/sr0 写保护,将以只读方式挂载        
[root@localhost tftpboot]# cp /media/images/pxeboot/{vmlinuz,initrd.img} .
[root@localhost tftpboot]# cp /media/isolinux/{vesamenu.c32,boot.msg} .

然后在 TFTP 服务程序的目录中新建 pxelinux.cfg 目录,虽然该目录的名字带有后缀,但
依然也是目录,而非文件!将系统光盘中的开机选项菜单复制到该目录中,并命名为 default。
这个 default 文件就是开机时的选项菜单,如图 19-4 所示。

 

[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp /media/isolinux/isolinux.cfg pxelinux.cfg/default

默认的开机菜单中有两个选项,要么是安装系统,要么是对安装介质进行检验。既然我
们已经确定采用无人值守的方式安装系统,还需要为每台主机手动选择相应的选项,未免与
我们的主旨(无人值守安装)相悖。现在我们编辑这个 default 文件,把第 1 行的 default 参数
修改为 linux,这样系统在开机时就会默认执行那个名称为 linux 的选项了。对应的 linux 选项
大约在 64 行,我们将默认的光盘镜像安装方式修改成 FTP 文件传输方式,并指定好光盘镜像
的获取网址以及 Kickstart 应答文件的获取路径:

[root@linuxprobe tftpboot]# vim pxelinux.cfg/default
1 default linux
2 timeout 600
3
4 display boot.msg
5
6 # Clear the screen when exiting the menu, instead of leaving the menu displa yed.
7 # For vesamenu, this means the graphical background is still displayed witho ut
8 # the menu itself for as long as the screen remains in graphics mode.
9 menu clear
10 menu background splash.png
11 menu title Red Hat Enterprise Linux 7.0
12 menu vshift 8
13 menu rows 18
14 menu margin 8
15 #menu hidden
16 menu helpmsgrow 15
17 menu tabmsgrow 13
18
19 # Border Area
20 menu color border * #00000000 #00000000 none
21
22 # Selected item
23 menu color sel 0 #ffffffff #00000000 none
24
25 # Title bar
26 menu color title 0 #ff7ba3d0 #00000000 none
27
28 # Press [Tab] message
29 menu color tabmsg 0 #ff3a6496 #00000000 none
30
31 # Unselected menu item
32 menu color unsel 0 #84b8ffff #00000000 none
33
34 # Selected hotkey
35 menu color hotsel 0 #84b8ffff #00000000 none
36
37 # Unselected hotkey
38 menu color hotkey 0 #ffffffff #00000000 none
39
40 # Help text
《Linux 就该这么学》 - 必读的 Linux 系统与红帽 RHCE 认证免费自学书籍
389
41 menu color help 0 #ffffffff #00000000 none
42
43 # A scrollbar of some type? Not sure.
44 menu color scrollbar 0 #ffffffff #ff355594 none
45
46 # Timeout msg
47 menu color timeout 0 #ffffffff #00000000 none
48 menu color timeout_msg 0 #ffffffff #00000000 none
49
50 # Command prompt text
51 menu color cmdmark 0 #84b8ffff #00000000 none
52 menu color cmdline 0 #ffffffff #00000000 none
53
54 # Do not display the actual menu unless the user presses a key. All that is
displayed is a timeout message.
55
56 menu tabmsg Press Tab for full configuration options on menu items.
57 
58 menu separator # insert an empty line
59 menu separator # insert an empty line
59 menu separator # insert an empty line
60 
61 label linux
62 menu label ^Install Red Hat Enterprise Linux 7.0
63 kernel vmlinuz
64 append initrd=initrd.img inst.stage2=ftp://192.168.10.1 ks=ftp://192.168.
10.1/pub/ks.cfg quiet
65
………………省略部分输出信息………………

19.2.4 配置 vsftpd 服务程序

在我们这套无人值守安装系统的服务中,光盘镜像是通过 FTP 协议传输的,因此势必
要用到 vsftpd 服务程序。当然,也可以使用 httpd 服务程序来提供 Web 网站访问的方式,
只要能确保将光盘镜像顺利传输给客户端主机即可。如果打算使用 Web 网站服务来提供
光盘镜像,一定记得将上面配置文件中的光盘镜像获取网址和 Kickstart 应答文件获取网
址修改一下。

[root@localhost tftpboot]# yum install vsftpd

刘遄老师再啰嗦一句,在配置文件修改正确之后,一定将相应的服务程序添加到开机启
动项中,这样无论是在生产环境中还是在红帽认证考试中,都可以在设备重启之后依然能提
供相应的服务。希望各位读者一定养成这个好习惯。

[root@localhost tftpboot]# systemctl restart vsftpd
[root@localhost tftpboot]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

在确认系统光盘镜像已经正常挂载到/media/cdrom 目录后,把目录中的光盘镜像文件全
部复制到 vsftpd 服务程序的工作目录中。

这个过程大约需要 3~5 分钟。在此期间,我们也别闲着,在 firewalld 防火墙管理工具中
写入使 FTP 协议永久生效的允许策略,然后在 SELinux 中放行 FTP 传输:

[root@localhost tftpboot]# firewall-cmd --permanent --add-service=ftp
success
[root@localhost tftpboot]# firewall-cmd --reload
success
[root@localhost tftpboot]# setsebool -P ftpd_connect_all_unreserved=on

19.2.5 创建 KickStart 应答文件

毕竟,我们使用 PXE + Kickstart 部署的是一套“无人值守安装系统服务”,而不是“无人值
守传输系统光盘镜像服务”,因此还需要让客户端主机能够一边获取光盘镜像,还能够一边自动帮
我们填写好安装过程中出现的选项。简单来说,如果生产环境中有 100 台服务器,它们需要安装
相同的系统环境,那么在安装过程中单击的按钮和填写的信息也应该都是相同的。那么,为什么
不创建一个类似于备忘录的需求清单呢?这样,在无人值守安装系统时,可以从这个需求清单中
找到相应的选项值,从而免去了手动输入之苦,更重要的是,也彻底解放了人的干预,彻底实现
无人值守自动安装系统,而不是单纯地传输系统光盘镜像。
有了上文做铺垫,相信大家现在应该可以猜到 Kickstart 其实并不是一个服务程序,而是
《Linux 就该这么学》 - 必读的 Linux 系统与红帽 RHCE 认证免费自学书籍
391
一个应答文件了。是的!Kickstart 应答文件中包含了系统安装过程中需要使用的选项和参数
信息,系统可以自动调取这个应答文件的内容,从而彻底实现了无人值守安装系统。那么,既
然这个文件如此重要,该去哪里找呢?其实在 root 管理员的家目录中有一个名为 anacondaks.cfg 的文件,它就是应答文件。下面将这个文件复制到 vsftpd 服务程序的工作目录中(在开
机选项菜单的配置文件中已经定义了该文件的获取路径,也就是 vsftpd 服务程序数据目录中
的 pub 子目录中)。使用 chmod 命令设置该文件的权限,确保所有人都有可读的权限,以保证
客户端主机可以顺利获取到应答文件及里面的内容:

[root@localhost tftpboot]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@localhost tftpboot]# chmod +r /var/ftp/pub/ks.cfg 

Kickstart 应答文件并没有想象中的那么复杂,它总共只有 46 行左右的参数和注释内容,
大家完全可以通过参数的名称及介绍来快速了解每个参数的作用。刘遄老师在这里挑选几个
比较有代表性的参数进行讲解,其他参数建议大家自行修改测试。
首先把第 6 行的光盘镜像安装方式修改成 FTP 协议,仔细填写好 FTP 服务器的 IP 地址,并
用本地浏览器尝试打开下检查有没有报错。然后把第 21 行的时区修改成上海(Asia/Shanghai),最
后再把 29 行的磁盘选项设置为清空所有磁盘内容并初始化磁盘:

[root@localhost ~]# vim /var/ftp/pub/ks.cfg
1 #version=RHEL7
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4
5 # Use CDROM installation media
6 url --url=ftp://192.168.10.1
7 # Run the Setup Agent on first boot
8 firstboot --enable
9 ignoredisk --only-use=sda
10 # Keyboard layouts
11 keyboard --vckeymap=us --xlayouts='us'
12 # System language
13 lang en_US.UTF-8
14
15 # Network information
16 network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
17 network --hostname=localhost.localdomain
18 # Root password
19 rootpw --iscrypted $6$pDjJf42g8C6pL069$iI.PX/yFaqpo0ENw2pa7MomkjLyoae2zjMz2
UZJ7b H3UO4oWtR1.Wk/hxZ3XIGmzGJPcs/MgpYssoi8hPCt8b/
20 # System timezone
21 timezone Asia/Shanghai --isUtc
22 user --name=linuxprobe --password=$6$a9v3InSTNbweIR7D$JegfYWbCdoOokj9sodEccdO.
zL F4oSH2AZ2ss2R05B6Lz2A0v2K.RjwsBALL2FeKQVgf640oa/tok6J.7GUtO/ --iscrypted --gecos =
"linuxprobe"
23 # X Window System configuration information
24 xconfig --startxonboot
25 # System bootloader configuration
26 bootloader --location=mbr --boot-drive=sda
27 autopart --type=lvm
28 # Partition clearing information
29 clearpart --all --initlabel
30
31 %packages
32 @base
33 @core
34 @desktop-debugging
35 @dial-up
36 @fonts
37 @gnome-desktop
38 @guest-agents
39 @guest-desktop-agents
40 @input-methods
41 @internet-browser
42 @multimedia
43 @print-client
44 @x11
45
46 %end

如果觉得系统默认自带的应答文件参数较少,不能满足生产环境的需求,则可以通过 Yum
软件仓库来安装 system-config-kickstart 软件包。这是一款图形化的 Kickstart 应答文件生成工
具,可以根据自己的需求生成自定义的应答文件,然后将生成的文件放到/var/ftp/pub 目录中
并将名字修改为 ks.cfg 即可。

19.3 自动部署客户端主机

在按照上文讲解的方法成功部署各个相关的服务程序后,就可以使用 PXE + Kickstart 无人值
守安装系统了。在采用下面的步骤建立虚拟主机时,一定要把客户端的网卡模式设定成与服务端
一致的“仅主机模式”,否则两台设备无法进行通信,也就更别提自动安装系统了。其余硬件配置
选项并没有强制性要求,大家可参考这里的配置选项来设定。

第1步:打开“新建虚拟机向导”程序,选择“典型(推荐) ”配置类型,然后单击“下
一步”按钮,如图 19-5 所示。

 图 19-5 选择虚拟机的配置类型

第2步:将虚拟机操作系统的安装来源设置为“稍后安装操作系统”。这样做的目的是让
虚拟机真正从网络中获取系统安装镜像,同时也可避免 VMware Workstation 虚拟机软件按照
内设的方法自行安装系统。单击“下一步”按钮,如图 19-6 所示。

第3步:将“客户机操作系统”设置为“Centos 7 64 位”,然后单击“下
一步”按钮,如图 19-7 所示。 

图 19-7 选择客户端主机的操作系统

第4步:对虚拟机进行命名并设置安装位置。大家可自行定义虚拟机的名称,而安装位
置则尽量选择磁盘空间较大的分区。然后单击“下一步”按钮,如图 19-8 所示。

图 19-8 命名虚拟机并设置虚拟机的安装位置

第5步:指定磁盘容量。这里将“最大磁盘大小”设置为 20GB,指的是虚拟机系统能够
使用的最大上限,而不是会被立即占满,因此设置得稍微大一些也没有关系。然后单击“下一
步”按钮,如图 19-9 所示。

第6步:结束“新建虚拟机向导程序”后,先不要着急打开虚拟机系统。大家还需要单击图
19-10 中的“自定义硬件”按钮,在弹出的如图 19-11 所示的界面中,把“网络适配器”设备同样
也设置为“仅主机模式”(这个步骤非常重要),然后单击“确定”按钮。

现在,我们就同时准备好了 PXE + Kickstart 无人值守安装系统与虚拟主机。在生产环
境中,大家只需要将配置妥当的服务器上架,接通服务器和客户端主机之间的网线,然后启
动客户端主机即可。接下来就会按照图 19-12 和图 19-13 那样,开始传输光盘镜像文件并进
行自动安装了—期间完全无须人工干预,直到安装完毕时才需要运维人员进行简单的初
始化工作。

由此可见,当生产环境工作中有数百台服务器需要批量安装系统时,使用无人值守安装
系统的便捷性是不言而喻的。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值