2509版签名包构建问题

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

2509版本签名包构建失败问题分析与解决方案

根据您提供的错误日志和上下文信息,您在使用 openUBMC 25.09 版本构建签名包时遇到了初始化过程中的文件复制错误。以下是详细的分析与解决步骤。

/usr/bin/cp: cannot stat 'rtos_compiler': No such file or directory
ERROR:root:Command ['usr/bin/cp', '-rf', 'rtos_compiler', '/root'] returned non-zero exit status 1.

:magnifying_glass_tilted_left: 问题定位

该错误发生在执行 python3 init.py 初始化脚本的过程中,具体表现为:

  • 解压 bmc_sdk.zip 成功。
  • 脚本试图将 rtos_compiler 目录复制到 /root 路径失败。
  • 报错原因是系统无法找到名为 rtos_compiler 的文件或目录(cannot stat)。

这表明虽然 bmc_sdk.zip 中包含 rtos_compiler 文件夹(见您日志中 inflating: bmc_sdk/rtos_compiler/...),但在调用 cp 命令时当前工作目录下并不存在名为 rtos_compiler 的独立目录。


:pushpin: 根本原因分析

结合 Knowledge Graph 和相关文档(如 search result id 1, 3, 4),可以确认以下几点:

  1. init.py 脚本逻辑问题
    init.py 的设计预期是先解压 bmc_sdk.zip 到一个中间目录,然后从中提取 sdk/rtos_compiler/ 等内容,并将其复制到指定位置(如 /root 或构建环境路径)。

  2. 路径映射错误或解压路径未切换
    当前错误的关键在于命令为:

    cp -rf rtos_compiler /root
    

    但实际文件位于 bmc_sdk/rtos_compiler,因此脚本未正确进入 bmc_sdk 目录即执行复制操作,导致 rtos_compiler 不在当前路径下。

  3. Docker 环境与宿主路径差异导致缓存污染
    您使用的是 Docker 镜像 swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_25.09。若您之前已成功构建过一次,可能残留了旧的 SDK 缓存(如 ~/sdk, ~/rtos_compiler),影响本次初始化行为。

  4. Manifest 配置变更或分支适配问题
    您当前切换到了 br_release_openUBMC2509_20251230 分支。若该分支对 init.pymanifest.yml 的初始化流程进行了修改,而 bmc_sdk.zip 仍为旧版或不匹配版本(如未更新 pre_download 配置),也会导致初始化失败。


:white_check_mark: 解决方案

:white_check_mark: 步骤 1:清理环境,避免路径冲突

# 删除可能存在的旧 SDK 和编译器缓存
rm -rf ~/sdk ~/rtos_compiler

# 如果是在容器内,也清理根目录下的相关目录
rm -rf /root/sdk /root/rtos_compiler

:warning: 注意:确保您以正确用户身份运行命令(如 root),否则权限不足可能导致部分删除失败。


:white_check_mark: 步骤 2:验证并重新解压 bmc_sdk.zip

确保您当前位于 manifest 仓库根目录下,并手动检查 bmc_sdk.zip 是否完整:

# 查看压缩包内容是否包含 rtos_compiler
unzip -l bmc_sdk.zip | grep rtos_compiler

# 正常输出应类似:
#       XX ...     bmc_sdk/rtos_compiler/hcc_arm64le.tar.gz
#       XX ...     bmc_sdk/rtos_compiler/rtos_base-208.9.1.SPC0100-...

如果存在,请执行完整解压流程

# 删除之前残留的 bmc_sdk 目录
rm -rf bmc_sdk/

# 新建并进入目录进行解压
mkdir -p bmc_sdk
unzip bmc_sdk.zip -d bmc_sdk/

:white_check_mark: 步骤 3:确认 init.py 执行路径与参数正确

您应将 -path 参数指向 .zip 文件本身,而不是解压后的目录:

python3 init.py -path ./bmc_sdk.zip -user xxx -psw xxx

:white_check_mark: 正确行为:

  • init.py 会自动解压并提取所需内容。
  • 自动识别 sdk/rtos_compiler/ 等子目录。

:cross_mark: 常见错误:

  • -path 设为 ./bmc_sdk(解压后目录),可能导致路径解析错误。
  • 某些版本的 init.py 不支持相对路径,建议使用绝对路径以提高稳定性。

:white_check_mark: 步骤 4:检查并升级工具链(Bingo / Bmcgo)

根据知识图谱信息,bmcgo 版本(即 bingo)也可能影响构建流程:

# 升级 bingo 工具至最新版
bingo upgrade
# 或
pip install --upgrade bmcgo

:light_bulb: 已知问题:版本 0.5.317 存在签名失败问题(参考 KC #1 & #2),建议升级至 0.6.x 以上版本

验证当前版本:

bingo -v
# 或
bmcgo --version

:white_check_mark: 步骤 5:核对 SDK 与 Docker 镜像版本兼容性

  • SDK 中 rtos_compiler 对应的 RTOS 版本应为 208.9.1(从您的日志可见)。
  • 确保 Docker 镜像 24.04.2_25.09 支持该 SDK 版本。
  • 某些情况下需手动设置 Conan profile 中的路径(参考 search result id 9):
    sed -i 's/208\.[0-9]\+\.[0-9]\+/208.9.1/g' /root/.conan2/profiles/profile.ini
    

:white_check_mark: 推荐操作流程总结

# 0. 确保所在目录为 manifest 仓库根路径
cd /home/workspace/manifest

# 1. 清理旧数据
rm -rf ~/sdk ~/rtos_compiler /root/sdk /root/rtos_compiler bmc_sdk/

# 2. 重新下载或验证 bmc_sdk.zip 完整性
wget https://openubmc.cn/marketplace/bmc_sdk/download/latest -O bmc_sdk.zip  # 替换为实际链接
unzip -t bmc_sdk.zip  # 验证完整性

# 3. 执行初始化(确保路径为 zip 文件)
python3 init.py -path ./bmc_sdk.zip -user xxx -psw xxx

# 4. 升级工具
bingo upgrade

# 5. 构建签名包
LOG=info bingo build -b openUBMC -r artifactory

:books: 参考资料


:white_check_mark: 附加建议

若您之前成功构建过一次,而现在出现失败,很可能是以下原因之一:

  • Docker 容器磁盘残留了旧环境状态 → 建议重新启动干净容器
  • 使用了不同版本的 bmc_sdk.zip确保与文档/分支完全对应
  • 网络或权限问题导致部分文件未完全解压 → 多次尝试或校验 sha256

:red_question_mark: 若仍失败,请提供以下信息以进一步诊断:

  1. ls -l bmc_sdk/rtos_compiler 输出
  2. pwd 返回的当前路径
  3. bingo -v 显示的版本号
  4. cat /root/.bmcgo_log/task.log | grep -i error 日志片段

我们将基于更详细日志进一步排查。

相关链接:

  1. bingo build -b openUBMC -r openubmc_dev报错签名失败
  2. 0.5.317版本的bmcgo,出BMC签名包失败问题
  3. 咨询社区2509版本出包部署到开发板后,网络异常问题
  4. openubmc 2509 环境初始化报错
  5. 【方案讨论】支持自动下载安装bmc_sdk,减少openubmc的容器数量
1 个赞