IBMC升级为UBMC后,再次更新BMC固件失败

BMC模组默认是自带的IBMC固件,第一次升级为客户自行开发的固件后升级成功,后续再次升级则失败

分析日志信息:解密失败,好像和密钥有关

1970-01-01 00:44:59.974011 web_backend NOTICE: init.lua(98): upload content length:number 68969386, remaining capacity space:number 131526656
1970-01-01 00:45:06.676810 firmware_mgmt NOTICE: active_fructl.lua(95): get host type is Singlehost
1970-01-01 00:45:06.677151 firmware_mgmt NOTICE: utils.lua(35): The file path is local.
1970-01-01 00:45:06.694548 firmware_mgmt NOTICE: init.lua(33): update status to FS_SIMPLE_UPGRADING.
1970-01-01 00:45:06.704694 firmware_mgmt NOTICE: task_service.lua(49): task create success, task id: 2824511260
1970-01-01 00:45:06.765757 firmware_mgmt NOTICE: file_transfer.lua(145): start to move file [rootfs_openUBMC-lzh.hpm] from tmp to shm
1970-01-01 00:45:07.258691 firmware_mgmt NOTICE: file_transfer.lua(150): move_file_s ok:true, err:0
1970-01-01 00:45:07.695172 firmware_mgmt NOTICE: validate_sign.lua(174): verify signature successfully
1970-01-01 00:45:07.696414 firmware_mgmt NOTICE: action.lua(37): Validate signature successfully
1970-01-01 00:45:07.706381 firmware_mgmt ERROR: C: [WSEC_CBB][778] (UTC) 1970-01-01 00:45:07 [SDP] Cipher header invalid with unexpected domain 3.
1970-01-01 00:45:07.707008 firmware_mgmt ERROR: C: [WSEC_CBB][362] (UTC) 1970-01-01 00:45:07 [SDP] SdpDecryptInitPrepare failed 356.
1970-01-01 00:45:07.707078 bmc_core ERROR: kmc_file.c(317): kmc_get_plaintext: SdpDecryptInitEx failed, ret = 356.
1970-01-01 00:45:07.707090 bmc_core ERROR: kmc_file.c(348): file_decrypt: decrypt failed.
1970-01-01 00:45:07.709544 firmware_mgmt ERROR: hpm_package.lua(179): read from profile_en failed, generate new key and try again
1970-01-01 00:45:07.712630 firmware_mgmt ERROR: C: [WSEC_CBB][636] (UTC) 1970-01-01 00:45:07 The file is not KSF format.
1970-01-01 00:45:07.713042 firmware_mgmt ERROR: C: [WSEC_CBB][830] (UTC) 1970-01-01 00:45:07 ReadRootKeyByHandle() failed 255
1970-01-01 00:45:07.713837 firmware_mgmt ERROR: C: [WSEC_CBB][1805] (UTC) 1970-01-01 00:45:07 MemImportKsf ReadKsf failed, result = 255
1970-01-01 00:45:07.714669 firmware_mgmt ERROR: hpm_package.lua(207): decrypt srcfile failed, err:./opt/bmc/libmc/lualib/mc/logging.lua:395: kmc import ksf failed, ret = 255
1970-01-01 00:45:07.715322 firmware_mgmt WARNING: init.lua(97): hpm_package.lua:669 > hpm_package.lua:565 > hpm_package.lua:241: An error occurred during the firmware upgrade process. Details: Upgrade write config file failed
1970-01-01 00:45:07.715780 firmware_mgmt ERROR: control.lua(321): parse package(rootfs_openUBMC-lzh.hpm) failed, ret:FirmwareUpgradeError: An error occurred during the firmware upgrade process. Details: Upgrade write config file failed.
1970-01-01 00:45:07.941371 firmware_mgmt NOTICE: active_fructl.lua(95): get host type is Singlehost
1970-01-01 00:45:07.941780 firmware_mgmt NOTICE: active_single_host_fructrl.lua(61): active_single_host_fructrl fructrl get power status
1970-01-01 00:45:07.943802 firmware_mgmt NOTICE: state_simple_upgrading.lua(87): simple upgraded, current active mode is:nil, wait restart seconds:30000
1970-01-01 00:45:07.951129 firmware_mgmt NOTICE: init.lua(33): update status to FS_IDLE.

bmc升级失败模组信息:

请协助分析固件升级失败的原因和解决方案

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

解决方案

根据您的情况,建议按以下步骤尝试解决:

方案一:使用包含正确密钥的过渡包升级

此方案是解决“第一次升级成功,后续升级失败”最直接有效的方法。

  1. 降级或找到一个有正确密钥的版本:首先,需要将您的BMC恢复到可以正常升级的状态。可以尝试使用一个 预置了升级密钥的社区过渡包 进行升级。这通常是一个已知的、包含正确签名和密钥的稳定版本(如 25.00.00 或特定的过渡版本)。
  2. 重新升级目标包:在成功升级到过渡版本后,再尝试升级您自己开发的自签名包或目标版本。

方案二:修复密钥问题

如果方案一不可行,可以尝试以下操作:

  1. 删除并重置环境密钥:根据升级FAQ【Q13】的建议,规避措施是 删除环境密钥。具体操作通常是通过命令行或特定接口清除BMC中存储的旧密钥数据(例如 data/trust/ksf/ 目录下的相关文件),然后重启BMC,让其重新生成或加载正确的密钥。
  2. 联系PAE获取密钥文件:如 openUBMC 25.03 问题的解决方案所述,如果是因为社区包密钥为空,请联系 PAE(产品应用工程师) 获取正确的升级密钥文件,并在打包时替换掉。
  3. 检查出包过程:确保您的自签名包在构建时,正确包含了签名和加密步骤。参考 自签名CA创建以及HPM签名指导 文档,确保签名证书、加密密钥(AES-256-CBC)和相关的密钥文件(如 ksf 文件)都已正确配置并打包进HPM文件中。

参考链接

  • [自签名openubmc版本不保留配置升级后web页面拒绝登录问题分析] 描述了类似的自签名证书解密失败问题,其根因也是密钥不匹配。
  • [openUBMC 25.03 web上更新BIOS、BMC等固件包问题分析] 明确指出社区包的升级密钥为空导致失败,需要联系PAE获取密钥。
  • [BMC固件升级失败问题分析] 描述了因环境没有预置升级密钥而导致的失败,并提出了先用过渡包解决的方案。

总结

您遇到的故障是一个典型的 密钥/证书与系统状态不匹配 导致的解密失败问题。最佳实践是先使用一个已知稳定且包含正确密钥的 过渡包 将系统恢复到良好状态,再行升级。同时,请务必检查自签名包的构建过程,确保密钥和签名配置正确。

点击此处查看详细分析解答

好的,根据您提供的日志信息和问题描述,我来为您分析固件升级失败的原因并提供解决方案。

问题根因分析

根据您提供的日志和提供的上下文资料,您遇到的 “IBMC升级为UBMC后,再次更新BMC固件失败” 问题,根本原因是 升级包解密所需的密钥不匹配或缺失

具体分析如下:

  1. 解密失败是第一关:日志中明确记录了多个与密钥和加密相关的错误:

    • Cipher header invalid with unexpected domain 3: 这表明加密包的头部信息无效,domain字段不匹配。
    • SdpDecryptInitPrepare failed 356SdpDecryptInitEx failed, ret = 356: 解密初始化失败。
    • The file is not KSF format: KSF 是用于解密的关键密钥文件,此错误表明系统无法识别或加载该文件。
    • ReadRootKeyByHandle() failed 255MemImportKsf ReadKsf failed, result = 255: 一系列调用最终导致 KSF 文件导入内存失败。
  2. 根因与“密钥不匹配”或“密钥缺失”高度相关

    • 根据 OpenUBMC 25.03 版本的问题分析,社区直接出的版本其 升级密钥是一个空文件,使用社区包直接出伙伴包会导致没有升级密钥,从而升级失败。这与您的场景“第一次升级成功(可能使用了社区或过渡包),后续再次升级失败(可能使用了自签名包)”非常吻合。
    • 根据 【Q13】升级密钥解密失败导致升级失败 的分析,这也可能是因为 key_mgmt 更新密钥之后,新的 KSF 密钥与升级密钥不匹配,导致升级密钥无法解密。
    • 日志中出现的 kmc_file.c(317): file_decrypt: decrypt failed 也直接指向了密钥解密失败。
  3. 最终错误:所有解密失败最终汇总为 Upgrade write config file failed,表明系统在无法解密配置的情况下,无法继续进行升级流程。

解决方案

根据您的情况,建议按以下步骤尝试解决:

方案一:使用包含正确密钥的过渡包升级

此方案是解决“第一次升级成功,后续升级失败”最直接有效的方法。

  1. 降级或找到一个有正确密钥的版本:首先,需要将您的BMC恢复到可以正常升级的状态。可以尝试使用一个 预置了升级密钥的社区过渡包 进行升级。这通常是一个已知的、包含正确签名和密钥的稳定版本(如 25.00.00 或特定的过渡版本)。
  2. 重新升级目标包:在成功升级到过渡版本后,再尝试升级您自己开发的自签名包或目标版本。

方案二:修复密钥问题

如果方案一不可行,可以尝试以下操作:

  1. 删除并重置环境密钥:根据升级FAQ【Q13】的建议,规避措施是 删除环境密钥。具体操作通常是通过命令行或特定接口清除BMC中存储的旧密钥数据(例如 data/trust/ksf/ 目录下的相关文件),然后重启BMC,让其重新生成或加载正确的密钥。
  2. 联系PAE获取密钥文件:如 openUBMC 25.03 问题的解决方案所述,如果是因为社区包密钥为空,请联系 PAE(产品应用工程师) 获取正确的升级密钥文件,并在打包时替换掉。
  3. 检查出包过程:确保您的自签名包在构建时,正确包含了签名和加密步骤。参考 自签名CA创建以及HPM签名指导 文档,确保签名证书、加密密钥(AES-256-CBC)和相关的密钥文件(如 ksf 文件)都已正确配置并打包进HPM文件中。

参考链接

  • [自签名openubmc版本不保留配置升级后web页面拒绝登录问题分析] 描述了类似的自签名证书解密失败问题,其根因也是密钥不匹配。
  • [openUBMC 25.03 web上更新BIOS、BMC等固件包问题分析] 明确指出社区包的升级密钥为空导致失败,需要联系PAE获取密钥。
  • [BMC固件升级失败问题分析] 描述了因环境没有预置升级密钥而导致的失败,并提出了先用过渡包解决的方案。

总结

您遇到的故障是一个典型的 密钥/证书与系统状态不匹配 导致的解密失败问题。最佳实践是先使用一个已知稳定且包含正确密钥的 过渡包 将系统恢复到良好状态,再行升级。同时,请务必检查自签名包的构建过程,确保密钥和签名配置正确。