diskimage-builder images

使用 diskimage-builder 构建的镜像建议在实际硬件上用于生产环境。推荐的发行版是

  • CentOS Stream 9

  • Debian Bookworm (debian-minimal 元素)

以下应该可以工作,但仅接受有限的测试和支持

  • Ubuntu 20.04 Focal

  • Debian Bullseye (debian-minimal 元素)

构建

… 使用辅助脚本

要使用 ironic-python-agent-builder 构建镜像,请运行

ironic-python-agent-builder <distribution, e.g. ubuntu>

您可以通过 -e 标志添加其他 diskimage-builder 元素

ironic-python-agent-builder -e <extra-element> --release 9-stream centos

您可以指定目标镜像的基本名称

ironic-python-agent-builder -o my-ipa --release 9-stream centos

您可以通过设置 ARCH 环境变量来指定目标镜像的架构(默认值为 amd64)

export ARCH=aarch64
ironic-python-agent-builder -o my-ipa --release 9-stream centos

… 使用 diskimage-builder

您也可以直接使用 diskimage-builder。首先,您需要将 ELEMENTS_PATH 变量设置为正确的位置

  • 如果使用 pip install --user 安装,请使用

    export ELEMENTS_PATH=$HOME/.local/share/ironic-python-agent-builder/dib
    
  • 在 Fedora/CentOS/RHEL 上(通过 sudo pip install 或从软件包安装)

    export ELEMENTS_PATH=/usr/share/ironic-python-agent-builder/dib
    
  • 在 Debian 及其衍生版本上,如果使用 sudo pip install 安装

    export ELEMENTS_PATH=/usr/local/share/ironic-python-agent-builder/dib
    

现在,您可以构建镜像,添加 ironic-python-agent-ramdisk 元素,例如

export DIB_RELEASE=9-stream
disk-image-create -o ironic-python-agent \
    ironic-python-agent-ramdisk centos

要使用 ironic-python-agent 的特定分支,请使用

export DIB_REPOREF_ironic_python_agent=origin/stable/queens
export DIB_REPOREF_requirements=origin/stable/queens

要为除 amd64 以外的架构构建镜像,您可以设置 ARCH 环境变量或使用 -a 来指定目标架构

disk-image-create -a arm64 -o ironic-python-agent \
    ironic-python-agent-ramdisk fedora

ISO 镜像

此外,IPA ramdisk 可以打包在 ISO 中,用于某些虚拟介质驱动程序。使用 ironic-python-agent-builder 仓库中的 iso-image-create 脚本,将 initrd 和内核传递给它,例如

./tools/iso-image-create -o /path/to/output.iso -i /path/to/ipa.initrd -k /path/to/ipa.kernel

这是一个通用工具,可用于将任何 initrd 和内核组合成适合启动的 ISO,因此应该适用于任何 IPA ramdisk。

高级选项

禁用救援

默认情况下,镜像中启用了救援模式。由于它允许网络上的任何人设置 ramdisk 的 root 密码,因此如果您不支持救援功能,可以禁用它。在构建镜像之前设置以下内容

export DIB_IPA_ENABLE_RESCUE=false

SSH 访问

可以使用 dynamic-logindevuser 元素将 SSH 访问添加到 DIB 构建的 IPA 镜像。

dynamic-login 元素允许操作员通过内核命令行参数在启动时注入 SSH 密钥

  • sshkey="ssh-rsa <您的 公钥 在此>" 添加到 ironic.conf 文件中的 pxe_append_params 设置中。

    警告

    公钥周围的引号很重要!

  • 重新启动 ironic-conductor。

注意

此元素默认添加到已发布的镜像中。

devuser 元素允许在构建时创建用户,例如

export DIB_DEV_USER_USERNAME=username
export DIB_DEV_USER_PWDLESS_SUDO=yes
export DIB_DEV_USER_AUTHORIZED_KEYS=$HOME/.ssh/id_rsa.pub
disk-image-create debian ironic-python-agent-ramdisk devuser

一致的网络接口命名

基础云镜像通常通过插入一个空的 udev 规则来禁用一致的网络接口命名。如果您需要实例镜像或部署镜像,请包含 stable-interface-names 元素以获得一致的网络接口命名。

ironic-python-agent-builder -e stable-interface-names --release 9-stream centos

固件移除

默认情况下,该元素会移除一些固件 blob 以减小镜像大小。列表可以在本段下方找到。这些固件镜像中的大多数由 SoC、Wi-Fi 芯片、一些 GPU 和 Smartnics 使用,这些不太可能遇到。如果您想覆盖此设置,请将 IPA_REMOVE_FIRMWARE 环境变量更改为以逗号分隔的目录或文件列表,这些目录或文件位于 /usr/lib/firmware 下。将其设置为一个空字符串以禁用固件移除。

移除的固件

  • amdgpu

  • netronome

  • qcom

  • ti-communication

  • ti-keystone

  • ueagle-atm

  • rsi

  • mrvl

  • brcm

  • mediatek

  • ath10k

  • rtlwifi

可用元素

Ironic Python Agent (IPA) 额外硬件

此元素将 hardware python 包添加到 Ironic Python Agent (IPA) ramdisk。它还安装了 hardware 模块的几个软件包依赖项。

hardware 包提供了改进的硬件内省能力并支持基准测试。可以通过在 [DEFAULT] inspection_collectors 选项或 ipa-inspection-collectors 内核命令行参数中添加 extra-hardware 收集器来启用此功能。

以下环境变量可以设置为配置基于源代码安装时的元素

  • DIB_IPA_HARDWARE_PACKAGE 要使用的完整 hardware Python 包描述符。如果未设置,将使用 DIB_IPA_HARDWARE_VERSION

  • DIB_IPA_HARDWARE_VERSION 在未设置 DIB_IPA_HARDWARE_PACKAGE 时要安装的 hardware 包的版本。如果未设置,将安装最新版本。

ironic-python-agent-ramdisk

构建带有 ironic-python-agent 的 ramdisk。

更多信息请参见:https://docs.openstack.org/ironic-python-agent/2025.2/

除了安装 ironic-python-agent 之外,此元素还执行以下操作

  • 安装 dhcp-all-interfaces,以便节点在启动时尝试在所有可用的网络接口上获取 IP 地址。

  • 禁用基于 SysV 和 systemd 的系统上的 iptables 服务。

  • 禁用基于 Upstart 的系统上的 ufw 服务。

  • 安装 ironic-python-agent 运行所需的软件包:qemu-utils parted hdparm util-linux

  • 从源代码安装时,还会安装 python-devgcc,以便支持 ironic-python-agent 及其依赖项的基于源代码的安装。

  • 安装证书(如果有),该证书设置为环境变量 DIB_IPA_CERT,用于验证 ironic-python-agent 的真实性。证书可以是自签名证书或 CA 证书。

  • 使用环境变量 DIB_IPA_COMPRESS_CMD 指定的命令压缩 initramfs,默认值为“gzip”。此命令应从 stdin 监听原始数据,并将压缩数据写入 stdout。命令可以带参数。

  • 如果未将 DIB_IPA_ENABLE_RESCUE 设置为 false,则配置救援模式。

此元素输出两个文件

  • $IMAGE-NAME.initramfs:包含 ironic-python-agent (IPA) 服务的部署 ramdisk 文件。

  • $IMAGE-NAME.kernel:内核二进制文件。

注意

基于软件包的安装目前仅在 systemd 初始化系统上启用该服务。如果存在包含 upstart 或 sysv 打包的代理程序包,可以轻松更改此设置。

注意

使用 ramdisk 需要至少 1.5GB 的内存

ironic-python-agent-tls

为 ironic-python-agent-ramdisk 添加 TLS 支持。

默认情况下,此元素将在 IPA 中启用 TLS API 支持,并创建一个在构建时创建的自签名证书和密钥。

可选地,您可以提供自己的 SSL 证书和密钥,以及可选的 CA,通过以下环境变量。它们应设置为构建系统文件系统上的可访问路径。如果设置,它们将被复制到构建的 ramdisk 中,并且 IPA 将被配置为使用它们。

环境变量是

  • DIB_IPA_CERT_FILE 应指向 ramdisk 使用的 TLS 证书。

  • DIB_IPA_KEY_FILE 应指向与 DIB_IPA_CERT_FILE 匹配的私钥。

您可以使用以下环境变量配置生成的证书

  • DIB_IPA_CERT_HOSTNAME 生成的证书的 CN。默认值为“ipa-ramdisk.example.com”。

  • DIB_IPA_CERT_EXPIRATION 证书的有效期(天数)。默认值为 1095(三年)。

请注意,此元素生成的证书是自签名的,并且使用它们的任何节点都需要在 driver_info 中设置 agent_verify_ca=False。

此元素还可以配置 IPA 中的客户端证书验证。如果您希望验证客户端证书,请将 DIB_IPA_CA_FILE 设置为要将 IPA 客户端连接验证到的 CA 文件。此 CA 文件将被复制到构建的 ramdisk 中,并且 IPA 将被配置为使用它。