最近的工作涉及到服务器自动安装和网络部署操作系统,然后使用 ansible 和 saltsatck 进行配置并安装 openstack 。

难点在于服务器的自动安装,由于不单只是通过 PXE 安装服务器,还需要能够安装时进行分区、配置网卡等工作,因此需要在开始安装前,必须先收集服务器的硬件信息。

调研了一下目前的开源项目中,提供此类功能的有 tinycorelinux 、 puppet razor-el-mk 可做类似的工作。tinycorelinux 是个很好的工具,整个系统在 PXE 之后在内存中执行,可在里面加上简单的 agent 完成任务报告的工作;razor 是 puppet 绑定在一起用的,el-mk 基于 centos ,它在里面装了 razor 的 agent,使用 facter 进行硬件信息收集。

这些方案的基本思路都是相通的,首先通过 PXE 下载 microkernel ,然后直接在内存中执行,启动网卡,运行 agent 并向服务器汇报信息,并接收来自服务器的命令。基本的技术原理都是 PXE + linux initramfs ,根据不同的需要向 initramfs 中加硬件驱动。

仔细研究了一下之后,发现用 debootstrap + busybox 工具做这样的小系统会更加简单,有以下的优点:

  1. debootstrap 生成的小 ubuntu 能方便使用 apt 安装额外的工具

  2. 可直接把驱动模块拷贝到小镜像内使用

  3. 定制脚本非常简单容易

整个小系统在不安装额外的软件和内核模块的情况下,为 100 M 左右,并可加入 busybox 后裁减到 40-50 M(包含完整的基础库)。在安装了 python3 (完整的 python3 ),可裁减到 110 M 左右。

网友评论