2512LTS 版本升级问题

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

openUBMC 2512LTS 版本升级失败问题分析与解决建议

根据您提供的日志和环境信息,本次升级失败的核心问题已定位,以下是详细的分析和解决方案。

问题概述

在尝试将 openUBMC 升级至 25.12.00.02 版本(2512LTS)时,升级过程在解压镜像阶段失败。核心错误日志如下:

Failed to search command: /bin/tar xvf /dev/shm/upgrade/rootfs_img.tar.gz -O rootfs_BMC.img
Function execve : mismatched command /bin/tar
tar rootfs img to flash failed, ret: 126
Write bmc package to flash failed

这表明系统未能成功执行 tar 命令来解压固件包。

根本原因分析

结合知识库信息和当前日志,失败的根本原因在于:

  1. 签名校验与系统完整性策略冲突:您在社区发行版源码的基础上增加了签名校验。mismatched command /bin/tar 这一错误强烈暗示系统中存在某种安全沙箱、执行策略或权限控制机制(如 SELinux、AppArmor 或自定义的执行钩子),该机制拦截了对 /bin/tar 的调用。
  2. 命令执行被拒绝:错误码 126 通常表示 “command invoked cannot execute”(无法执行命令),与“命令不匹配 (mismatched command)”的错误信息相吻合。这说明 bmc_upgrade 进程虽然发起了系统调用,但内核或中间件出于安全策略的考虑,拒绝了此执行请求。
  3. 自定义签名校验的副作用:您增加的签名校验可能触发了更严格的安全模型,不仅校验了固件,还对升级过程中调用的所有系统工具(如 tar)的合法性和权限进行了审查,导致合法的 tar 命令被执行时被误判为不匹配或不可信。

与知识库信息的关联

  1. bmc_upgrade 服务在流程中的角色:日志中 bmc_upgrade NOTICE: decompress_img.lua(75): begin to extract img filefirmware_mgmt 模块的协同工作,与知识库中描述的 Bmc_Upgrade 服务负责“提取和写入包到闪存”完全一致。
  2. AppDump 路径信息:日志中出现的 /dev/shm/upgrade/ 路径,是 bmc_upgrade 服务用于临时存放升级包的标准位置,与知识库中 bmc_upgrade 服务的功能相符。
  3. 类似升级失败模式:知识库中的 Upgrade FailureFirmware Upgrade Failure 描述了升级过程因执行阶段报错而失败的情况,与本次 write package to flash 后的 decompress_img 步骤失败形成高度相似的模式。

解决方案与建议

方案一:审查并调整签名校验引入的安全策略(推荐)

这是最根本的解决方法。

  1. 检查安全模块:登录BMC系统,检查是否启用了SELinux、AppArmor或类似的MAC(强制访问控制)模块。
    # 检查 SELinux
    sestatus
    # 检查 AppArmor
    systemctl status apparmor
    
  2. 审查自定义代码:仔细检查您添加的签名校验代码,确认是否在 bmc_upgrade 服务的启动脚本或执行环境中添加了限制性的安全上下文或执行钩子。
  3. 白名单机制:如果安全策略是您自定义签名校验的一部分,务必为 bmc_upgrade 进程允许调用的关键系统命令,例如 /bin/tar

方案二:验证系统 tar 命令的可执行性

在进行升级前,手动验证 tar 命令在目标环境中是否正常工作。

  1. 通过SSH登录BMC。
  2. 检查 /bin/tar 是否存在且有执行权限:
    ls -l /bin/tar
    
  3. 尝试执行一个简单的 tar 命令,看是否会触发相同的“mismatched command”错误:
    /bin/tar --version
    
    如果此命令也失败,则确认是执行层面的问题。

方案三:检查 bmc_upgrade 服务的权限和上下文

  1. 服务权限:确保 bmc_upgrade 服务以一个能够访问和执行系统二进制文件的用户身份运行(通常是 root)。
  2. 脚本完整性:升级包中的 decompress_img.lua 脚本可能硬编码了 /bin/tar 路径。虽然概率较低,但也应确认该路径在您的系统中是正确的(例如,系统中 tar 是否位于 /usr/bin/tar?)。如果是,则需要修改脚本或创建软链接。

方案四:临时禁用安全策略进行测试(仅用于诊断)

为确认问题是否由安全策略引起,可临时禁用相关模块。

# 临时禁用SELinux(如果启用)
setenforce 0

# 然后尝试重新升级
# (测试后,请根据结果决定是否 `setenforce 1` 重新启用)

如果禁用后升级成功,则强烈证明您的自定义签名校验引入了不兼容的安全策略。

总结

升级失败是由于 自定义添加的签名校验机制 与系统执行环境之间产生了冲突,导致 bmc_upgrade 服务在关键的解包步骤中无法执行 /bin/tar 命令。这不是一个固件包本身的问题,而是一个安全策略与系统服务执行权限的兼容性问题

建议优先检查并修正由签名校验引入的安全模型,确保升级过程所需的核心系统命令能够在 bmc_upgrade 进程的上下文中被正常调用。 成功解决此兼容性问题后,升级应能顺利完成。

相关链接:

  1. 25.09版本真机升级失败求助
  2. 我按照“从零开始,玩转openUBMC”搭建环境没有hpm_signer工具,怎么制作和生成过度包?
  3. 升级白牌包到5%失败
  4. OpenUBMC2506 BMC固件升级失败
  5. BIOS实现和带内交互介绍 | 文档中心 | openUBMC