Ironic是一个OpenStack项目,它提供裸机(而不是虚拟机)。

一个称为Ironic Python Agent(IPA)的工具用于控制和配置这些物理节点,执行擦除机器和将镜像写入磁盘等任务。这是通过引导自定义的Linux内核和运行IPA并连接到Ironic Conductor的initramfs镜像来完成的。

Ironic项目通过Disk Image Builder支持几个不同的镜像构建器,包括CoreOS、TinyCore等。

然而,这些镜像构建器都有限制,例如,它们需要root权限,它们的大小都是几百兆字节(除了TinyCore)TinyCore的缺点之一是硬件支持有限,虽然它不在生产中使用,但它被用于OpenStack门控测试(在具有大约300MB RAM的虚拟机中启动)。

大型部署镜像意味着节点的配置时间较长,因此笔者开始创建一个小型、可定制的镜像,以解决其他现有镜像的问题。

 

Buildroot

笔者选择使用Buildroot,这是一个大家都认为易于使用的、构建嵌入式Linux镜像的工具。

到目前为止,它作为一个概念验证是相当成功的。

Linux内核是〜2MB
压缩的initramfs映像是〜25MB
通过OpenStack Ironic门控测试
高度可定制(多亏了Buildroot)

可以通过menuconfig系统进行定制,类似于Linux内核。

 

Buildroot menuconfig

 

源代码

用于构建镜像的所有源代码都位于ipa-buildroot存储库中笔者的GitHub帐户(https://github.com/csmart/ipa-buildroot)上。笔者还写了一些文档,用于引导你完成整个构建和定制过程。

ipa-buildroot存储库包含IPA特定的Buildroot配置,并跟踪Git子模块中的上游Buildroot。通过使用上游Buildroot和外部存储库,IPA Buildroot配置作为常规Buildroot构建的选项出现。

 

在Buildroot 默认配置列表中的IPA

 

Buildroot将编译内核和initramfs,然后发布构建脚本克隆Ironic Python Agent存储库并为目标创建Python Wheels。

以下最终镜像将在./output/images下找到:

bzImage(内核)
rootfs.cpio.xz(ramdisk)
rootfs.iso9660(ISO镜像)

这些文件可以上传到Glance与Ironic一起使用。

 

自定义

Buildroot允许你自定义构建参数、目标initramfs和Linux内核。这样做也很简单,每次运行make时,它会回到你离开的地方,重新创建你的镜像。

 

 

该构建脚本直接获取Ironic Python Agent,使得构建高度灵活地获取要使用的确切版本。你可以通过在Buildroot的menuconfig中自定义设置来指定Ironic Python Agent和需求存储库的位置和分支。

设置Ironic Python Agent和Requirement位置、Git版本

笔者从头开始(使用tinyconfig)创建了内核配置,并故意努力实现平衡大小和功能。应该在大多数基于Intel的计算机(BIOS和UEFI)上引导,但对硬盘和以太网控制器等硬件的支持被故意限制。我们的目标是从小开始,再根据需要增加更多支持,因此可能需要修改才能在你的硬件上工作。

使用imagebuild脚本自动构建

手动进行构建是很好的,因为它有助于了解拼接过程,但是手动涉及的更多。

Ionic Python Agent(IPA)repo有一些镜像创建脚本,这使得构建CoreOS和TinyCore镜像非常简单。笔者现在提供一些补丁,来增加对创建Buildroot镜像的支持。

这些补丁包含几个脚本,其中包括手动构建方法和一个Makefile来将它们整合在一起。只有install-deps.sh脚本需要root权限,而且如果它检测到没有依赖关系,其他所有Buildroot任务将作为非特权用户运行。这是Buildroot方法的一大优点!

再次强调,笔者已经在repo中包含了文档(https://github.com/csmart/ironic-python-agent/tree/buildroot/imagebuild/buildroot#buildroot-ironic-python-agent),所以请参阅有关如何构建和自定义镜像的更多细节。但总的来说,做这个是很简单的:

 

这些操作将自动执行以下任务:

获取Buildroot Git存储库
加载默认的IPA Buildroot配置
下载并验证所有源代码
构建工具链
使用工具链构建:
系统库和软件包
Linux内核
用于IPA和依赖关系的Python Wheels
创建内核、initramfs和ISO镜像

默认配置指向上游IPA Git存储库,但是你可以将其更改为指向任何你喜欢的repo和提交。 例如,如果你正在处理IPA,你可以将Buildroot指向当地的Git repo,然后构建并引导该镜像进行测试。

 

帮助

要查看可用的Makefile目标,只需运行帮助目标:

make help

如果你输入-help选项,那么shell脚本也可以提供帮助:

 

 

编译:Jonathan Zhang

作者Chris Smart

来源:http://superuser.openstack.org/articles/openstack-ironic-buildroot/

投稿邮箱:openstackcn@sina.cn