0x01 前言

在测试软件的部署过程经常要安装新的虚拟机,虽然用虚拟机模板是一种不错的解决方案,但某些情况下使用全新安装的迅才是首选。

centos7无论是通过CLI还是GUI的方式安装都要进行一些列配置,部署次数少还可以接受,久而久之会觉得这东西装起来真的好繁琐,完全没心思去折腾。为了偷懒,我决定通过kickstart与tftp结合我家里的pfsense实现自动安装。

0x02 准备

需要准备的东西还不少,首先需要一个DHCP服务器,并且配置网络启动的相关信息。在这篇文章里不涉及自建DHCP服务器的内容,因为我使用pfsense作为路由器,因此会有相关的服务。

登入pfsense并定位到以下页面:

  • Services \ DHCP \ ServerLAN

在需要配置网络启动的网络中找到以下选项并配置即可,其中“Next Server”需要填写tftp服务器的地址:

然后需要安装tftp服务器,通过以下命令安装即可:

实现网络启动需要用到文件,这些文件可以通过以下地址找到:

我写这篇文章的时候,centos最新版本是7.5.1804,当版本更新时,这个目录会被移至最新版本的目录下,所以这里放一个截图做记录:

在我的使用环境中会使用我自有的centos镜像:

  • http://mirror.t.com/centos/base/

最后,还需要一台安装有GUI界面的centos7,用于运行kickstart以便生成配置文件。

0x03 tftp

pfsense的部分比较简单,就是一个服务指向的配置。当客户机请求DHCP服务内容时会返还网络启动的相关信息,在这里是tftp的服务器地址与BIOS文件。

tftp是至关重要的一步,它会将BIOS文件发送给客户机用于引导,其中的配置文件会包含启动方式等内容。

安装完tftp后需要启用tftp服务,首先修改配置文件:

然后进入以下目录并新建一个文件夹:

在这新建的文件夹下新建一个配置文件,内容如下:

如果有多个选项,可以增加“label”块的内容,比如:

因为我是通过网络进行自动安装,需要在“inst.ks”中指定kickstart生成的自动安装配置文件。因为我有自建的源镜像,所以地址如上。

当客户机启动时,会默认选择第一个选项为默认启动项。如果有多个启动项,你可能需要更长的等待时间,在上面配置文件中的“timeout”值为30,意为3秒,可以根据实际情况自行修改。

最后需要将启动需要的文件复制到tftpboot目录中:

还需要下载通过清华大学镜像站下载以下两个文件并放置到 /var/lib/tftpboot/ 目录中:

该文件夹中所有的文件含义如下:

  • chain.c32:引导系统
  • mboot.c32:通过内存引导
  • memdisk:将内存模拟为磁盘
  • menu.c32:菜单文件
  • pxelinux.0:引导程序,用于加载kernel和initrd
  • vmlinuz:内核
  • initrd.img:虚拟根文件

完成后即可通过以下命令启动tftp服务:

然后建立一个虚拟机进行测试,需要注意的是,虚拟机需要一个可以和DHCP服务器通讯的网卡,但不需要光驱:

因为还没配置kickstart与安装源,所以启动后会有错误,如果出现以下信息则说明tftp服务器运作正常:

0x04 kickstart

在进行kickstart配置文件的编写前需要准备centos的基础源“base”,这个安装源里包含一个很重要的文件:comps.xml。这个文件里包含group list,有了它才可以获取最小化安装、桌面化安装或者是服务器级别安装所需要的软件包。

在该xml文件同级别的目录下还有一个Packages文件夹,存放着基础的软件包;一个repodata文件夹,存放着Packages文件夹下软件包信息的数据库:

其他文件和文件夹一般用不上。

准备好之后在有桌面环境的centos7系统上打开软件管理器并安装kickstart,然后运行:

根据实际情况选择并填写相关信息。

其实每次安装完系统,在root目录下都会有一个名为“anaconda-ks.cfg”的文件,而这款软件到最后也是生成这个文件。

因此,不想折腾有GUI桌面的centos系统,通过最小化安装,然后将root目录下的“anaconda-ks.cfg”文件复制到本地进行修改。

以下是我的配置文件:

我对其中的某些内容做了修改,以适配我的使用环境:

  • url:值为我自有的镜像地址
  • text:使用text模式安装而不加载GUI
  • 分区:分为3个区
    • swap:1GB
    • boot:1GB
    • /:剩下的空间
  • packages:最小化安装(core)并安装wget与curl
  • addon:关闭kdump
  • post:
    • 用私有的repo替换官方的repo文件
    • 升级系统
    • 安装vmtools

因为系统更新需要很长的时间,所以部署起来需要3到4分钟,所有流程完成后会自动重启。

编写完kickstart的配置文件后将其放置在pxelinux.cfg目录下default文件中“inst.ks”值所对应的目录中即可,该步骤不需要重启tftp,但需要确认能通过http服务访问。

0x05 结语

经过多次调试才找到适用于我环境的自动部署kickstart配置文件,因此不能照搬,要根据实际情况进行编写。

以下为安装完成后的配置脚本: