Petitboot 启动驱动¶
https://bugs.launchpad.net/ironic/+bug/1526265
这为 OpenPOWER 服务器添加了 petitboot 启动驱动。OpenPOWER Foundation 是由 IBM 发起的围绕 Power 架构产品的协作。
注意
由于 IBM 固件维护者添加了对经典 PXELinux 文件格式的支持,因此该规范已退役。因此,不再需要此规范。
问题描述¶
OpenPOWER 服务器使用 FSP(灵活服务处理器)来初始化系统芯片并监控其他硬件组件。FSP 可以设置为 OPAL(开放 Power 抽象层)模式来处理 IPMI 操作。OpenPOWER 服务器上的固件使用 petitboot 作为平台无关的引导加载程序。Petitboot 可以从任何 Linux 可挂载的文件系统加载内核、initrd 和设备树文件,并且可以使用 FTP、SFTP、TFTP、NFS、HTTP 和 HTTPS 协议从网络加载文件。
Petitboot 与标准的 pxe 行为非常相似,但有一些细微的差别,例如
无论启动设备是什么,petitboot 都会被加载。
Petitboot 会检查固件中的系统配置,例如启动设备,并且不会下载任何网络引导加载程序,因为它本身就可以作为网络引导加载程序工作。
如果启动设备是硬盘,petitboot 将扫描引导或预备分区以从本地引导加载程序(例如 grub2)加载引导选项,然后让 grub2 加载系统。
如果启动设备是网络,petitboot 将查找 dhcp 响应中的 PXE 配置文件(209)选项。如果未提供显式的配置文件,则 petitboot 将尝试自动发现
pxelinux 风格的配置,使用机器的 MAC 地址、DHCP 租约的 IP 地址,并回退到名为 default 的文件。Petitboot 根据配置文件中的路径信息从网络请求镜像,然后使用 kexec 加载系统。因此,当启动设备是网络时,部署系统和实例系统都应支持从 kexec 启动。
petitboot 网络引导的配置文件的格式与
pxelinux.cfg不同,并且应传递更多关于网络的内核命令行参数。
提议的变更¶
添加
iscsi_opc和agent_opc驱动程序。opc表示 OpenPOWER 控制器,它使用 petitboot 驱动程序作为启动驱动程序,并使用 ipminative 驱动程序作为硬件控制驱动程序。例如,iscsi_opc 驱动程序将如下所示class OpenPOWERIscsiAndIPMINativeDriver(base.BaseDriver): """Petitboot + Iscsi + IPMINative driver""" def __init__(self): self.power = ipminative.NativeIPMIPower() self.console = ipminative.NativeIPMIShellinaboxConsole() self.boot = petitboot.PetitbootBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = ipminative.NativeIPMIManagement() self.vendor = iscsi_deploy.VendorPassthru() self.inspect = inspector.Inspector.create_if_enabled( 'OpenPOWERIscsiAndIPMINativeDriver')
在 ironic.conf 中添加 petitboot 驱动程序的配置选项
[petitboot] config_template: template path for petitboot configuration. protocol: string value for the transfer protocol, only support http and tftp in this spec, default http.
Petitboot 驱动程序继承 base.BootInterface 并实现以下函数。
validate()- 检查引导选项和镜像类型。在此规范中,OpenPOWER 机器仅支持使用整个磁盘镜像的本地引导和使用分区镜像的网络引导。get_properties- 在此规范中,返回与 pxe 驱动程序的属性相同的通用属性。prepare_ramdisk()- Petitboot 驱动程序将更新 dhcp 选项,构建 petitboot 网络引导加载程序的配置文件,然后将启动设备设置为网络。此过程类似于 pxe 驱动程序,但有一些细微的差别。Petitboot 不需要 NBP 文件,因此 petitboot 驱动程序不会将
bootfile-name(67) 选项传递给 dhcp。Petitboot 驱动程序将使用 PXE 配置文件 (209) 选项和 PXE 路径前缀 (210) 选项来定位配置文件。Petitboot 将连接这些值以生成文件传输请求。209 选项的值是相对文件路径,例如<node_uuid>/config。210 选项的值取决于 petitboot 部分中的protocol配置。如果是 tftp,则 210 选项的值是
CONF.deploy.tftp_root如果是 http,则 210 选项的值是
CONF.deploy.http_url。
Petitboot 驱动程序将管理包含内核和 ramdisk 路径信息的此配置文件。配置文件的格式如下
default deploy label deploy kernel ``{{ [petitboot_url]/<node_uuid>/deploy_kernel }}`` initrd ``{{ [petitboot_url]/<node_uuid>/deploy_ramdisk }}`` append ``{{ parameter }}``
clean_up_ramdisk()- 清理为引导部署系统而设置的环境。它取消链接部署内核/ramdisk。prepare_instance()- 此方法与 pxe 驱动程序非常相似。如果引导选项是本地,只需清理 petitboot 配置文件。
如果引导选项是网络,则更新 petitboot 配置文件以引导实例镜像。
clean_up_instance()- 清理为引导实例而设置的环境。它取消链接实例内核/ramdisk 并删除 petitboot 配置。
备选方案¶
无
数据模型影响¶
无
RPC API 影响¶
无
状态机影响¶
无
REST API 影响¶
无
客户端 (CLI) 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
Ramdisk 影响¶
需要构建一个能够在 PPC64 硬件上运行的 ramdisk,但是,这可以在下游完成。
应将支持添加到 ramdisk 构建工具中,例如 disk-image-builder 和 coreos-image-builder,以构建此类 ramdisk。
安全影响¶
无
其他最终用户影响¶
要为 OpenPOWER 服务器使用 petitboot 驱动程序,驱动程序属性中的 cpu_arch 应为 ppc64le 或 ppc64,具体取决于实例镜像的 cpu 架构。OpenPOWER 服务器可以根据内核镜像的字节序切换到适当的字节序格式。本地引导未启用时,部署内核和实例内核都应支持从 kexec 启动。
可扩展性影响¶
无
性能影响¶
无
其他部署者影响¶
新的配置选项
[petitboot]
config_template: template path for petitboot configuration.
protocol: string value for the transfer protocol, only support http
and tftp in this spec, default http.
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
chenglch <chenglch@cn.ibm.com>
- 其他贡献者
baiyuan <bybai@cn.ibm.com>
工作项¶
实现 petitboot 启动驱动程序。
添加
iscsi_opc和agent_opc驱动程序以管理 OpenPOWER 服务器。编写单元测试用例。
编写配置文档。
依赖项¶
无
测试¶
单元测试
第三方 CI 测试:我们计划为该驱动程序构建第三方 CI,但目前没有足够的硬件可用。
升级和向后兼容性¶
此驱动程序不会破坏 REST API 或 RPC API 的任何兼容性。
文档影响¶
编写文档以指导操作员如何使用 petitboot 驱动程序与 Ironic 配合使用。