答案内容由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.
问题定位
该错误发生在执行 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 的独立目录。
根本原因分析
结合 Knowledge Graph 和相关文档(如 search result id 1, 3, 4),可以确认以下几点:
-
init.py 脚本逻辑问题:
init.py的设计预期是先解压bmc_sdk.zip到一个中间目录,然后从中提取sdk/、rtos_compiler/等内容,并将其复制到指定位置(如/root或构建环境路径)。 -
路径映射错误或解压路径未切换:
当前错误的关键在于命令为:cp -rf rtos_compiler /root但实际文件位于
bmc_sdk/rtos_compiler,因此脚本未正确进入bmc_sdk目录即执行复制操作,导致rtos_compiler不在当前路径下。 -
Docker 环境与宿主路径差异导致缓存污染:
您使用的是 Docker 镜像swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_25.09。若您之前已成功构建过一次,可能残留了旧的 SDK 缓存(如~/sdk,~/rtos_compiler),影响本次初始化行为。 -
Manifest 配置变更或分支适配问题:
您当前切换到了br_release_openUBMC2509_20251230分支。若该分支对init.py或manifest.yml的初始化流程进行了修改,而bmc_sdk.zip仍为旧版或不匹配版本(如未更新pre_download配置),也会导致初始化失败。
解决方案
步骤 1:清理环境,避免路径冲突
# 删除可能存在的旧 SDK 和编译器缓存
rm -rf ~/sdk ~/rtos_compiler
# 如果是在容器内,也清理根目录下的相关目录
rm -rf /root/sdk /root/rtos_compiler
注意:确保您以正确用户身份运行命令(如 root),否则权限不足可能导致部分删除失败。
步骤 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/
步骤 3:确认 init.py 执行路径与参数正确
您应将 -path 参数指向 .zip 文件本身,而不是解压后的目录:
python3 init.py -path ./bmc_sdk.zip -user xxx -psw xxx
正确行为:
init.py会自动解压并提取所需内容。- 自动识别
sdk/、rtos_compiler/等子目录。
常见错误:
- 将
-path设为./bmc_sdk(解压后目录),可能导致路径解析错误。 - 某些版本的
init.py不支持相对路径,建议使用绝对路径以提高稳定性。
步骤 4:检查并升级工具链(Bingo / Bmcgo)
根据知识图谱信息,bmcgo 版本(即 bingo)也可能影响构建流程:
# 升级 bingo 工具至最新版
bingo upgrade
# 或
pip install --upgrade bmcgo
已知问题:版本 0.5.317 存在签名失败问题(参考 KC #1 & #2),建议升级至 0.6.x 以上版本。
验证当前版本:
bingo -v
# 或
bmcgo --version
步骤 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
推荐操作流程总结
# 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
参考资料
- openUBMC 社区 SDK 下载页面
- BMC SDK 初始化文档
init.py设计改进提案:使用pre_download机制自动管理 SDK(避免手动处理路径)
附加建议
若您之前成功构建过一次,而现在出现失败,很可能是以下原因之一:
- Docker 容器磁盘残留了旧环境状态 → 建议重新启动干净容器
- 使用了不同版本的
bmc_sdk.zip→ 确保与文档/分支完全对应 - 网络或权限问题导致部分文件未完全解压 → 多次尝试或校验 sha256
若仍失败,请提供以下信息以进一步诊断:
ls -l bmc_sdk/rtos_compiler输出pwd返回的当前路径bingo -v显示的版本号cat /root/.bmcgo_log/task.log | grep -i error日志片段
我们将基于更详细日志进一步排查。
相关链接: