1.2 无人值守自动安装Linux操作系统
1.2.1 大规模部署案例
前面详细介绍了如何通过光盘手动安装部署Rocky Linux 9.1操作系统,但这种安装方式并不适用于所有应用环境。以作者的Lab实验室机房为例,总计10个机房,每个机房平均有30台主机,而这些主机都需要统一安装部署Linux操作系统。再如,像新浪、网易、淘宝这样的大型网络平台,有上千台服务器需要部署Linux操作系统。如果此时依然使用光盘逐一为每台主机安装操作系统,效率是极其低下的,这时就需要通过一种更加高效快捷的方式来为这些主机统一部署操作系统。
目前行业中普遍采用成熟稳定的PXE解决方案,通过网络安装并结合自动应答文件,实现无人值守自动安装部署操作系统。这种安装方式需要配置至少一台安装服务器,所有需要安装系统的客户端,通过网络连接服务器端,下载并执行服务器上的引导文件和安装程序,再根据服务器中存放的自动应答文件实现大规模自动安装部署。整体环境的拓扑结构如图1-18所示。
由于这种无人值守的解决方案需要提前部署一台包含DHCP、TFTP[2]、FTP等服务的安装服务器,因此,如果你对这些服务还比较陌生,可以选择跳过本节,阅读完后面关于服务的相关章节后再来看这部分内容会容易得多。
图1-18
安装部署流程为:客户端首先需要在BIOS中设置网络启动,客户端启动后会通过发送广播包的方式寻找DHCP服务器,如果找到DHCP服务器,即可向该服务器申请包括IP地址在内的各种网络参数,并通过DHCP获得TFTP服务器的位置,当客户端获得TFTP服务器的地址后,即可从TFTP服务器上将启动文件下载至本机内存并运行,最终实现无盘启动。我们可以对安装系统的配置文件进行自定义设置,设置Kickstart文件的共享位置,这样客户端启动后即可自动寻找Kickstart文件,实现无人值守安装操作系统。注意,Kickstart文件需要事先通过网络共享[3]。Kickstart文件中描述了如何安装和设置操作系统、如何运行部署脚本等。
1.2.2 PXE简介
前面介绍了计算机读取光盘中的引导文件实现操作系统的安装,本节需要实现的是无光盘情况下网络启动的无人值守安装,这里就需要用到PXE技术。
PXE是由Intel公司开发的基于客户端/服务器端的一种技术,其核心功能是让客户端通过网络从远端服务器下载启动镜像,从而启动网络。在整个过程中,客户端要求服务器端分配IP地址,再用TFTP协议下载位于服务器端的启动镜像到本机内存中并执行,由这个启动文件完成客户端基本软件的设置。
本书介绍的案例也需要实现安装系统的功能,但PXE技术只能实现从网络启动,当读取安装程序进入安装界面后,剩余的安装步骤,如语言设置、系统管理员密码设置、网络参数设置等还需要我们手动完成。也就是说,我们仅可实现无光盘网络启动,仍需手动安装操作系统,若要真正实现无人值守自动安装,还需要用到Kickstart技术。
1.2.3 Kickstart技术
Kickstart安装是目前主要的无人值守自动安装部署操作系统的方式,使用Kickstart技术,我们可以很轻松地实现自动安装及配置。这种技术的核心是自动应答文件(Kickstart文件),即将本来在安装过程中需要我们手动设置的语言、密码、网络等参数存入文件,通过读取自动应答文件实现自动设置。也就是说,我们需要事先将安装系统过程中问题的答案写入自动应答文件,开始安装时,指定安装程序读取自动应答文件实现自动安装及部署。
Kickstart文件可以通过如下三种方式生成。
◎ 手动编写(仅需要一个文本编辑工具)。
◎ 通过在线工具生成,红帽网站提供了该工具[4],要想使用该工具需要有红帽账户并订阅。
◎ 通过安装程序Anaconda自动生成,手动安装Linux系统后,/root目录中会自动生成一个anaconda-ks.cfg文件。
这里主要以手动安装Linux系统时自动生成的anaconda-ks.cfg文件为参考,手动编写一份自动应答文件。在1.2.5节中,我们将给出通过Kickstart技术自动部署Linux操作系统的完整案例。
1.2.4 配置安装服务器
从图1-18中可以看出,如果要实现无人值守自动安装部署操作系统,需要提前定制安装服务器,该服务器需要运行DHCP、TFTP、FTP三种服务。
1.DHCP服务器
DHCP服务器的主要功能是在企业内部网络中为客户端分配IP地址等网络参数。在无人值守环境中,当客户端选择从网络启动后,就会通过发送广播数据包来寻找 DHCP 服务器,从DHCP获得IP地址等参数后才可以通过TFTP共享服务器下载启动文件。以下是在Rocky Linux 9.1平台安装部署DHCP服务器的步骤。
首先,使用如下命令安装DHCP服务:
安装完成后,DHCP服务的主配置文件为/etc/dhcp/dhcpd.conf。我们可以修改该配置文件,实现为客户端分配网络参数的功能,以下为修改后的配置文件样本:
在上述样本中,subnet指定为哪个网段分配网络参数,这里设置为172.16.0.0。使用range指令,设置准备为客户端分配的IP地址池(一个地址区间),这里设置可以为客户端分配的IP地址从172.16.0.1到172.16.0.250。学习完本书后面的章节后,我们还可以根据客户端MAC地址分配固定IP地址。使用domain-name-servers指令,可以设置分配给客户端的DNS服务器地址,使用routers指令则可设置分配给客户端的网关地址。对网络启动至关重要的参数是next-server与filename,从安装部署流程可以看出,客户端启动计算机,并通过DHCP服务器获得IP地址后,还需要从TFTP下载启动文件,而next-server设置的就是TFTP服务器服务器的地址,filename设置的是在该TFTP服务器上共享的启动文件名称,客户端通过这两个参数连接TFTP服务器,并从中下载特定的启动文件,完成计算机的网络启动流程。
dhcp-server软件包还为我们准备好了一份配置文件的参考示例文件,路径为/usr/share/doc/dhcp-server/dhcpd.conf.example。
2.TFTP服务器
TFTP服务器为客户端提供了一种简单的文件共享功能,它不具备FTP服务器那样丰富的功能。不过由于设计简单,TFTP非常适用于传输小且简单的PXE启动文件。使用如下命令安装该服务器:
安装TFTP服务器后,启动tftp.service即可,默认的TFTP服务器定义的共享文件目录为/var/lib/tftpboot,也就是共享文件要放置的路径。
3.FTP服务器
FTP是File Transfer Protocol的简写,即文件传输协议。目前市面上有很多可以实现FTP的软件,vsftpd就是一种利用FTP进行数据共享的软件,从名字上就可以看出其主要特色是提供一种安全的数据共享服务。我们可以使用它作为Linux系统文件的共享服务平台,当客户端从网络启动正式进入安装界面后,还需要读取Rocky Linux光盘中的系统安装程序,以完成最后的安装。这些文件就通过vsftpd共享给网络用户。如果你的系统中还没有安装该软件,则可以使用dnf安装,安装完成后启动服务,默认禁止匿名共享,通过修改配置文件可以开启匿名共享功能,共享文件存储目录默认为/var/ftp。具体操作流程如下:
vsftpd.conf配置文件中默认anonymous_enable=NO,代表禁止匿名共享FTP,将NO修改为YES可以开启匿名共享功能。
1.2.5 自动化安装案例
本节介绍一个自动化安装部署操作系统的完整案例,其拓扑结构如图1-19所示。可以看出,为了减轻安装服务器的负载,我们将FTP单独放置在一台服务器中,以提高其读写性能。两台服务器的IP地址分别为172.16.0.253和172.16.0.254,对应的主机名分别为boot.example.com和ftp.example.com。
图1-19
具体实现步骤如下。
(1)通过以下命令安装部署DHCP服务器,该操作在boot.example.com主机中进行:
安装dhcp-server软件包后,默认会提供一份配置文件的参考模板/usr/share/doc/dhcp-server/dhcpd.conf.example,可以将该文件复制到/etc/dhcp目录中(覆盖原有的配置文件),并适当修改配置文件的内容,具体如下:
配置说明:本案例中为172.16.0.0/16网络分配动态IP地址,动态IP地址池从172.16.0.100至172.16.0.200,客户端获取的网关地址为172.16.0.1,TFTP服务器地址为172.16.0.253,启动文件的名称为pxelinux.0。
启动DHCP服务并设置为开机自启动:
默认防火墙会拦截对DHCP和FTP等服务的访问,这里通过firewall-cmd命令设置防火墙信任所有服务,允许客户端访问本机的所有服务:
(2)安装部署TFTP共享服务器:
配置文件中的 ExecStart 说明,在启动 tftpd 程序时通过-s 选项指定了默认的共享路径为/var/lib/tftpboot,我们需要将计算机的启动文件放到该目录中通过网络共享给客户端。
(3)将客户端所需的启动引导文件复制到TFTP服务器:
将Rocky Linux光盘放入光驱并运行如下命令,从光盘中复制启动镜像文件和启动配置文件至TFTP共享目录中:
修改PXE,启动配置文件如下:
配置说明:每一个label定义了一个启动菜单项目,menu default定义了默认的引导方式,从文件中可以看出,有一个启动项是直接安装Rocky Linux,另一个是使用安装光盘进行测试后再安装。timeout定义了启动界面的超时时间(时间单位为1/10秒),默认timeout 600代表,如果用户60秒不做任何操作,系统将直接使用menu default定义的默认引导方式安装系统。在本案例中,我们将超时时间修改为6秒(timeout 60)。此外,kernel指定的是系统内核文件(vmlinuz),在上面的步骤中,我们已经从光盘中将系统内核文件复制到TFTP 共享目录中,这样客户端就可以通过网络 TFTP 共享读取该文件。如果没有后面的inst.ks参数,我们可以实现无光盘场景的网络启动,后面的安装步骤需要手动完成,而设置inst.ks参数可以指定自动应答文件的位置,从而实现无人值守自动安装部署操作系统。本例将访问172.16.0.254的FTP共享,读取Kickstart文件。
重启TFTP服务并设置为开机自启动:
(4)部署FTP服务器,用来共享Kickstart应答文件和系统光盘中的软件包。
在172.16.0.254主机上使用,安装vsftpd软件包:
启动vsftpd服务并设置为开机自启动:
默认防火墙会拦截对FTP等服务的访问,这里通过firewall-cmd命令令防火墙信任所有访问者,允许客户端访问本机的所有服务:
(5)将系统光盘或ISO文件通过FTP共享。
部署完FTP服务后,需要将光盘中的文件复制到/var/ftp/pub目录中,如果有光盘与光驱,也可以通过mount命令将光盘直接挂载至/var/ftp/pub目录中,方法如下。
首先,将光盘从默认的挂载点卸载:
然后,将光盘重新挂载至/var/ftp/pub目录中:
如果没有光盘,仅有ISO镜像文件,也可以将ISO镜像文件挂载至/var/ftp/pub目录中:
注意
通过mount命令将设备挂载到某个目录中是临时的,如果要永久挂载,需要修改/etc/fstab文件。setenforce 0将SELinux临时关闭,重启后无效,设置永久规则需要修改SELinux配置文件。
(6)创建Kickstart自动应答文件。
在172.16.0.254主机上手动安装操作系统会自动生成anaconda-ks.cfg文件,我们对这个文件进行适当的修改,制作新的自动应答文件。
(7)启动客户端,安装部署系统。
在所有客户端主机的BIOS中,将第一启动方式设置为PXE网络启动,或通过类似于开机按F12键这样的快捷方式启动。注意,对于不同型号的主机,设置网络启动的方式不同,用户需要根据计算机的说明书进行设置。设置完成后,重启所有客户端计算机即可大规模集中安装部署操作系统。