基于bmc_sdk 25.12制作docker镜像报错

问题描述

使用gitcode.com:openUBMC/manifest.git的最新main分支代码,使用bmc_sdk.zip 25.12版本,制作docker镜像过程中报错。

日志:

611.9 >> whoami

611.9 root
611.9 未检测到/opt/RTOS目录,可能未安装构建工具,请正确安装构建工具(可以manifest仓执行init.py或bingo build)
611.9 conan版本: 2.24.0
611.9 已知参数: [‘-t’, ‘install_sdk’, ‘-b’, ‘openUBMC’, ‘-ucc’]
611.9 调试框架: None, 构建参数: Namespace(board_name=‘openUBMC’, build_type=‘debug’, from_source=False, stage=‘dev’, verbose=False, update_conan_cache=True, remote=None, zip_code=None, supporte_code=‘default’, enable_qemu=False, qemu_in=False, coverage=False, asan=False, profile=‘’, enable_luajit=True, debug_frame=None, debug_task=None, version=‘’, target=‘install_sdk’, deploy=False)
611.9 单板源配置路径: /home/workspace/tool/build/product/BMC/openUBMC
611.9 复制单板的 manifest 目录从 /home/workspace/tool/build/product/BMC/openUBMC 到 /home/workspace/tool/temp/board_openUBMC
611.9 >> rm -rf /home/workspace/tool/temp/board_openUBMC
611.9 >> cp -rf /home/workspace/tool/build/product/BMC/openUBMC /home/workspace/tool/temp/board_openUBMC
611.9 不能从 yaml 文件中获取到键值 base/show_version, 没有相关配置
611.9 不能从 yaml 文件中获取到键值 tosupporte/default/show_version, 没有相关配置
611.9 >> conan remote list
612.1 不能从 yaml 文件中获取到键值 archive, 没有相关配置
612.1 不能从 yaml 文件中获取到键值 archive, 没有相关配置
612.1 不能从 yaml 文件中获取到键值 archive, 没有相关配置
612.1 不能从 yaml 文件中获取到键值 base/profile, 没有相关配置
612.1 ERROR: 开启了hpm加密配置, 在环境中未找到 ‘crypto_tool’, 请确认环境配置是否正确.
612.1 ERROR: 请查看日志信息
612.1 >> conan install --requires=‘bingo_cases/[>=1.0.0]@openubmc/stable’ -u --deployer-folder=/tmp/tmpmr15had_ -of /tmp/tmpmr15had_ -d direct_deploy
615.8 [INFO unified_error_analyzer.py:186 analyze_errors]
615.8 ============================================================
615.8 [INFO unified_error_analyzer.py:187 analyze_errors] :magnifying_glass_tilted_left: 开始统一错误分析
615.8 [INFO unified_error_analyzer.py:188 analyze_errors] ============================================================
615.8 [WARNING unified_error_analyzer.py:326 _output_unified_analysis]
615.8 :white_check_mark: 没有发现匹配的错误案例
615.8 ERROR:root:Command ‘[’/usr/local/bin/bingo’, ‘build’, ‘-t’, ‘install_sdk’, ‘-b’, ‘openUBMC’, ‘-ucc’]’ returned non-zero exit status 255.

dockerfile:28

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2512

  • 硬件配置:Intel(R) Core™ i7-14700 /64GB

重现步骤

1、
在manifest目录下执行
python3 init.py -path ./bmc_sdk.zip -user USER -psw PASSWORD
2、
根据https://discuss.openubmc.cn/t/topic/2060操作,编译出hpm文件成功
3、在manifest目录下执行
python3 build_image.py -s ./bmc_sdk.zip -u xx -p xxx -t openubmc/25.12

期望结果

生成docker镜像

实际结果

执行过程中报错

尝试过的解决方案

1、新建目录,重新拉git代码,使用main分支,直接执行
python3 build_image.py -s ./bmc_sdk.zip -u xx -p xxx -t openubmc/25.12
制作docker image成功,镜像大小为4.6G

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

基于 bmc_sdk 25.12 制作 Docker 镜像报错问题分析与解决方案

根据您提供的日志信息和上下文数据,当前在使用 bmc_sdk 25.12 版本和 openUBMC/manifest.gitmain 分支代码构建 Docker 镜像时出现多个关键错误。以下是对问题的详细分析及可行解决方案。


:magnifying_glass_tilted_left: 一、问题概述

  • 目标:基于 bmc_sdk 25.12 制作 OpenUBMC 的 Docker 构建镜像。
  • 环境
    • 操作系统:Ubuntu 24.04
    • 芯片架构:x86_64(i7-14700)
    • 内存:64GB
    • Conan 版本:2.24.0
    • 使用脚本:build_image.py -s ./bmc_sdk.zip -u xx -p xxx -t openubmc/25.12
  • 错误表现
    • YAML 文件中缺失多个关键配置项(如 show_version, archive, profile
    • 提示缺少 crypto_tool
    • 报错退出状态码为 255

:puzzle_piece: 二、关键错误分析

1. YAML 文件缺失必要字段

相关日志:

不能从 yaml 文件中获取到键值 base/show_version, 没有相关配置
不能从 yaml 文件中获取到键值 tosupporte/default/show_version, 没有相关配置
不能从 yaml 文件中获取到键值 archive, 没有相关配置
不能从 yaml 文件中获取到键值 base/profile, 没有相关配置

原因分析:

这些字段是 manifest.yml 中必须存在的配置项,用于控制构建流程。特别是:

字段 用途 来源
base/show_version 是否在版本信息中显示自定义版本号 manifest.yml
tosupporte/default/show_version 定制发布包是否显示版本 manifest.yml
archive 指定构建产物默认输出路径 archive.inimanifest.yml
base/profile 构建使用的 Conan profile 名称 manifest.yml

:red_exclamation_mark: 说明当前使用的 main 分支 manifest 代码 未正确配置这些字段,或 与 bmc_sdk_25.12 不兼容

:white_check_mark: 解决方案:

确保 manifest/build/product/BMC/openUBMC/manifest.yml 包含以下内容:

base:
  show_version: true
  profile: "profile.dt.ini"  # 或其他有效 profile 文件名

tosupporte:
  default:
    show_version: true

archive: "default_archive_path/"  # 可选,但需存在或设置默认值

同时确认:

  • profile.dt.ini 文件存在于项目中(通常位于根目录或 profiles/
  • 若使用自定义 tosupporte 包类型,请确保结构完整

2. 缺少 crypto_tool 导致 HPM 加密失败

相关日志:

ERROR: 开启了hpm加密配置, 在环境中未找到 ‘crypto_tool’, 请确认环境配置是否正确.

原因分析:

  • 根据文档 {id: 6}构建制品定制化方案),post_hpm 脚本会在制作 HPM 包前执行。
  • 若启用了加密签名(如通过 gpp.files.condition 设置了 .cms 输出),系统将尝试调用 crypto_tool
  • 此工具通常由 签名服务器组件 提供,未安装则导致构建中断。

:white_check_mark: 解决方案:

方案一:临时关闭 HPM 加密功能

修改 manifest.yml 中的 gpp.files 配置,移除或注释以 .cms 结尾的输出项

gpp:
  files:
    # - file: ${work_out}/rootfs_BMC.img.cms  # 注释此行可绕过 crypto_tool 检查
    - file: ${work_out}/rootfs_BMC.img
    - file: ${work_out}/rootfs_BMC.tar.gz

:warning: 注意:仅适用于非安全测试场景。

方案二:安装签名服务组件

按照《[PKI 实践指南]{id:5}》和《[签名包制作指导]{id:3}》搭建本地签名服务:

  1. 安装 cms-server

    go build -o cms-server main.go
    
  2. 准备证书材料(rootca.pem, signer.pem 等)

  3. 启动服务并确保 crypto_tool$PATH 中可访问


3. Conan 版本过高导致兼容性问题

关键信息:

  • 当前 Conan 版本:2.24.0
  • 根据知识图谱描述:

    version 2.21.0 is noted as incompatible with openubmc-bingo 0.5.272

此外,文档 {id:4}(openUBMC 25.12 LTS 发布说明)提到:

适配 Conan 2.0,支持产品仓裁剪…

表明:

  • openUBMC 25.12 虽支持 Conan 2.x,但对具体子版本有要求
  • 当前主流推荐版本为 2.13.0(多处文档验证)

:white_check_mark: 解决方案:

降级 Conan 至 2.13.02.19.1

pip3 uninstall conan -y
pip3 install conan==2.19.1
# 或
pip3 install conan==2.13.0

验证命令:

conan --version

4. 未检测到 /opt/RTOS 目录

日志:

未检测到/opt/RTOS目录,可能未安装构建工具

原因分析:

  • /opt/RTOS 是 OpenUBMC 构建工具链的标准安装路径
  • 当前环境可能未运行 init.py 初始化脚本,或未正确挂载 SDK

:white_check_mark: 解决方案:

在执行 build_image.py 前,先手动运行初始化脚本:

cd /home/workspace/manifest
python3 init.py -s ../bmc_sdk.zip

确保:

  • bmc_sdk.zip 解压后内容被正确复制至 /opt/RTOS
  • 目录权限允许 root 访问

:hammer_and_wrench: 三、综合解决步骤(推荐)

# 1. 清理现有环境
pip3 uninstall conan -y
pip3 install conan==2.13.0

# 2. 进入 manifest 目录
cd /home/workspace/manifest

# 3. 运行初始化脚本安装 SDK
python3 init.py -s ../bmc_sdk.zip

# 4. 检查 manifest.yml 配置是否完整(参考上文补全字段)

# 5. 临时关闭 HPM 签名(避免 crypto_tool 缺失)
# 编辑 manifest.yml,注释掉所有 .cms 输出项

# 6. 执行镜像构建
python3 build_image.py -s ./bmc_sdk.zip -u <your_username> -p <your_password> -t openubmc/25.12

:books: 四、补充建议

建议项 说明
:white_check_mark: 使用官方 Docker 镜像作为基础 推荐使用 swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_25.09 作为构建环境基础镜像(见 {id:8}
:white_check_mark: 安装 vscode-yaml 插件 可实现 manifest.yml 文件的语法检查与自动补全(见 {id:2}
:white_check_mark: 确保网络代理设置正确 若使用公司内网,需为 Docker 和 Conan 配置 HTTP 代理(见 {id:5}

:white_check_mark: 五、总结

错误 根本原因 解决方法
YAML 缺失字段 manifest.yml 配置不全 补全 show_version, archive, profile
找不到 crypto_tool 启用 HPM 加密但未部署签名服务 关闭 .cms 输出或部署签名服务
Conan 版本过高 2.24.0 与 bingo 不兼容 降级至 2.13.0 或 2.19.1
/opt/RTOS SDK 未初始化 运行 init.py 安装 SDK

:white_check_mark: 推荐最终使用 Conan 2.13.0 + 完整 manifest.yml + 关闭 HPM 签名,可快速完成镜像构建。

如需长期支持签名功能,请部署独立的 CMS 签名服务 并集成至构建流程。


如仍有问题,请提供 manifest.yml 全文及 profile.dt.ini 内容以便进一步诊断。

相关链接:

  1. 2506版本manifest编译问题
  2. BMC_studio一键出包失败
  3. bingo build报错,任务 work.build.conan 执行失败
  4. 25.12版本编译报错
  5. 构建工程 | 文档中心 | openUBMC

你本地的bingo工具可能存在问题。卸载deb包,更新bingo再试下。

dpkg -P openubmc-bingo

bingo up

我的环境应该没有问题,根据BMC 3.xx.xx.xx版本升级openubmc指导 操作,可以编译出hpm并升级到板子。

可能是您没有执行过manifest下的init.py?先执行一遍这个试试?

在这个manifest目录下,环境配置命令python3 init.py -path ./bmc_sdk.zip -user USER -psw PASSWORD执行过了,然后才进行编译,得到hpm文件

日志提醒你配置了加密但未安装crypto_tool工具。

请联系项目支持

@qinzida
config配置文件分3级,按优先级从高到低依次为manifest根目录的.bmcgo/config~/.bmcgo/config , /etc/bmcgo.conf
检查下这3个文件里的hpm加密开关hpm_encrypt 配置是否enable为true,

[hpm_encrypt]
enable=false

是true的话,可以按以下方案解决:

在manifest根目录的.bmcgo/config 文件中临时添加
[hpm_encrypt]
enable=false

后续如果要使用hpm包加密,在将enable改为true

已安装工具了

收到,感谢回复。第一个文件配置了为true,第二个文件不存在,第三个文件没有配置。设置为false,可以成功构建镜像。

这条日志已经在提醒非常清晰的提醒你,如果“需要加密”是你需要的逻辑,请联系项目支持。

具体代码请参考:AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台

        # 构建阶段检查
        bt = misc.build_type()
        if args.build_type not in bt:
            raise errors.ConfigException(f"构建类型 build_type 错误, 可用选项为: {misc.build_type_str()}, 请检查参数")

        hpm_encrypt = self.bconfig.hpm_encrypt
        if misc.need_encrypt_hpm() or (hpm_encrypt and hpm_encrypt.need_encrypt):
            if not shutil.which("crypto_tool"):
                raise errors.BmcGoException(f"开启了hpm加密配置, 在环境中未找到 'crypto_tool', 请确认环境配置是否正确.")
            os.environ["HPM_ENCRYPT"] = "true"
        else:
            log.info(f"未开启hpm加密配置")

你也可以使用which crypto_tool命令检查是否已安装,一般会安装在/usr/local/bin/目录

我在重现步骤2提到根据下面这个网址进行了操作,就是安装了工具,并编译出文件了
2、
根据[https://discuss.openubmc.cn/t/topic/2060操作,编译出hpm文件成功