openubmc升级问题

ibmc版本:3.01.00.40
openubmc版本:25.12

根据论坛指导完成如下操作:

openubmc修改:

  1. mainfest添加自签名,并在opt/bmc/trust/partner下预置rootca.der

  2. firmware_mgmt改为community_enable: false

  3. [hpm_encrypt] 改为true

bios,ibmc重签名:
1.使用bingo hpm_signer 重签名 华为bios和ibmc

操作过程:
1.ibmc3.01.00.40 升级为完成如上修改的openubmc
2.升级重签名后bios和ibmc

现象:升级失败

报错日志如下

1970-01-01 00:03:35.149535 firmware_mgmt NOTICE: active_fructl.lua(96): get host type is Singlehost
1970-01-01 00:03:35.150204 firmware_mgmt NOTICE: utils.lua(34): The file path is Local.
1970-01-01 00:03:35.153497 firmware_mgmt NOTICE: init.lua(80): Upgrading_Flag is true
1970-01-01 00:03:35.179081 firmware_mgmt NOTICE: init.lua(41): update status to FS_SIMPLE_UPGRADING.
1970-01-01 00:03:35.209080 firmware_mgmt NOTICE: task_mgmt.lua(312): Create task[Id: 2418458037, StartTime: 1970-01-01T00:03:35+00:00, Progress: 0, State: New] successfully
1970-01-01 00:03:35.210137 firmware_mgmt NOTICE: task_service.lua(55): task create success, task id: 2418458037
1970-01-01 00:03:35.211116 firmware_mgmt NOTICE: task_id_mgmt.lua(30): add serial task id(2418458037) successfully
1970-01-01 00:03:35.213439 firmware_mgmt NOTICE: tasks_scheduling.lua(122): start tasks processer
1970-01-01 00:03:35.307436 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 2418458037, StartTime: 1970-01-01T00:03:35+00:00, Progress: 0, State: Running] successfully
1970-01-01 00:03:35.308182 firmware_mgmt NOTICE: file_transfer.lua(169): start to move file [temp_upgrade_file.hpm] from tmp to shm
1970-01-01 00:03:35.410354 firmware_mgmt NOTICE: file_transfer.lua(174): move_file_s ok:true, err:0
1970-01-01 00:03:35.449562 firmware_mgmt NOTICE: validate_sign.lua(170): the custom ca certificate is exist, load custom certificate
1970-01-01 00:03:35.476060 firmware_mgmt NOTICE: validate_sign.lua(195): verify signature successfully
1970-01-01 00:03:35.477036 firmware_mgmt NOTICE: action.lua(37): Validate signature successfully
1970-01-01 00:03:35.478571 firmware_mgmt NOTICE: hpm_package.lua(782): ManufacturerValidateEnabled is false, there is no need to validate manufacture_id.
1970-01-01 00:03:35.486587 firmware_mgmt ERROR: hpm_package.lua(179): read from profile_en failed, generate new key and try again
1970-01-01 00:03:35.489410 firmware_mgmt ERROR: C: [WSEC_CBB][639] (UTC) 1970-01-01 00:03:35 The file is not KSF format.
1970-01-01 00:03:35.490097 firmware_mgmt ERROR: C: [WSEC_CBB][792] (UTC) 1970-01-01 00:03:35 ReadRootKeyByHandle() failed 255
1970-01-01 00:03:35.490960 firmware_mgmt ERROR: C: [WSEC_CBB][1266] (UTC) 1970-01-01 00:03:35 MemImportKsf ReadKsf failed, result = 255
1970-01-01 00:03:35.491678 firmware_mgmt ERROR: hpm_package.lua(207): decrypt srcfile failed, err:./opt/bmc/libmc/lualib/mc/logging.lua:458: kmc import ksf failed, ret = 255
1970-01-01 00:03:35.492283 firmware_mgmt ERROR: action.lua(41): Unpack package failed
1970-01-01 00:03:35.492895 firmware_mgmt ERROR: task_instance.lua(185): parse package(bios_image.hpm) failed, ret:FirmwareUpgradeError.

答案内容由AI生成,仅供参考:

解决方案

请根据您的实际需求选择以下任一方案:

方案一:对重签名后的 BIOS/iBMC 包执行加密流程(推荐)

在制作/重签名 BIOS 和 iBMC 固件包时,除了签名外,还必须执行加密操作。相关要求如下:

  1. 在 manifest 仓库的 .bmcgo/config 中确认已添加:
    [hpm_encrypt]
    enable=true
    
  2. 确保实际出包流程走到了加密分支。若使用 bingo hpm_signer 工具重签名,需要确认该工具是否同时具备加密能力;如果不支持,需要配合 crypto_tool 工具对最终的 HPM 包进行加密。
  3. 对于从模组版本升级到社区版本的非社区包,配置文件(profile)的加密流程是必须的,不能只签不加密。

完成加密后,重新生成 bios_image.hpm 和 iBMC 升级包,再进行升级。

方案二:将升级包标记为社区包(跳过加解密)

如果您希望使用未加密的包,可以设置:

community_enable: true

这样 openUBMC 会跳过验签和加解密流程,直接升级。但此方案会失去签名校验,安全性较低,且需要您确认包内容可信。

方案三:检查密钥预置情况

日志中 read from profile_en failed 还提示系统尝试从 profile_en 读取解密密钥失败。若确认包已正确加密,还需要检查:

  • 升级到的 openUBMC 25.12 系统中是否预置了解密所需的根密钥;
  • 您预置的 rootca.der 与加密所用密钥是否匹配。
点击此处查看详细分析解答

根据您提供的日志信息和操作步骤,问题定位如下:

问题分析

从报错日志来看,升级流程分为两个阶段:

  1. 签名验证阶段:成功

    • validate_sign.lua(195): verify signature successfully — 重签名后的 bios_image.hpm 签名校验已通过。
    • ManufacturerValidateEnabled is false — 未强制校验厂商 ID。
  2. 解密阶段:失败

    • read from profile_en failed, generate new key and try again
    • The file is not KSF format.(KSF 为 openUBMC 的加密文件格式)
    • ReadRootKeyByHandle() failed 255
    • MemImportKsf ReadKsf failed, result = 255
    • decrypt srcfile failed ... kmc import ksf failed, ret = 255
    • 最终 parse package(bios_image.hpm) failed, ret:FirmwareUpgradeError

核心结论: 当前升级包只完成了“签名”,但没有完成“加密”。由于您将 firmware_mgmt 配置为 community_enable: false(即非社区包模式),openUBMC 在验签通过后会继续执行解密流程。但您的 bios_image.hpm 并不是 KSF 加密格式,因此系统无法解密该固件包,最终导致升级失败。

原因对照

社区论坛中的问题分析也明确指出了这种情况:

触发条件: 升级的固件包不是社区包又没有做包的加密
问题原因: 社区包会跳过验签和加解密,但是当前升级的固件包没标注是社区包(前面走了验签),但是又没加密,会导致升级失败。

您的情况完全吻合:非社区包 + 未加密 = 验签通过但解密失败

解决方案

请根据您的实际需求选择以下任一方案:

方案一:对重签名后的 BIOS/iBMC 包执行加密流程(推荐)

在制作/重签名 BIOS 和 iBMC 固件包时,除了签名外,还必须执行加密操作。相关要求如下:

  1. 在 manifest 仓库的 .bmcgo/config 中确认已添加:
    [hpm_encrypt]
    enable=true
    
  2. 确保实际出包流程走到了加密分支。若使用 bingo hpm_signer 工具重签名,需要确认该工具是否同时具备加密能力;如果不支持,需要配合 crypto_tool 工具对最终的 HPM 包进行加密。
  3. 对于从模组版本升级到社区版本的非社区包,配置文件(profile)的加密流程是必须的,不能只签不加密。

完成加密后,重新生成 bios_image.hpm 和 iBMC 升级包,再进行升级。

方案二:将升级包标记为社区包(跳过加解密)

如果您希望使用未加密的包,可以设置:

community_enable: true

这样 openUBMC 会跳过验签和加解密流程,直接升级。但此方案会失去签名校验,安全性较低,且需要您确认包内容可信。

方案三:检查密钥预置情况

日志中 read from profile_en failed 还提示系统尝试从 profile_en 读取解密密钥失败。若确认包已正确加密,还需要检查:

  • 升级到的 openUBMC 25.12 系统中是否预置了解密所需的根密钥;
  • 您预置的 rootca.der 与加密所用密钥是否匹配。

补充说明

  • 您已将 [hpm_encrypt] enable=true 添加到 manifest 中,这主要影响 openUBMC 主固件包的出包流程。对于单独重签名的 BIOS/iBMC 包,若重签名工具没有触发加密流程,则包内数据仍为明文,导致解密失败。
  • 参考论坛中 BMC 3.xx.xx.xx版本升级openubmc指导 的 FAQ:“无论自签名还是无签名方式,从模组版本升级到社区版本都需要配置文件的加密流程”,并且需要 crypto_tool 工具确保 packethpm_ext4.sh 脚本执行到加密分支。

因此,请重点确认重签名后的 BIOS/iBMC 包是否已正确完成加密(而非仅签名),这是当前升级失败的直接原因。