私有签名,在yml中自动化后报错。

我这边把manifest.yml文件中

  signature:
    files:
      - file: ${product}/ca/rootca.crl
        dst: cms.crl

签名文件,改成

  signature:
    certificates:
      # 根公钥证书,文件需要满足正则表达式要求:^(/[a-zA-Z0-9._-]+)+\\.der$
      rootca_der: ${product}/ca/rootca.der
      # 签名证书,文件需要满足正则表达式要求:^(/[a-zA-Z0-9._-]+)+\\.pem(.enc)?$
      signer_pem: ${product}/ca/signer.pem.enc
      # 时间戳签名证书,文件需要满足正则表达式要求:^(/[a-zA-Z0-9._-]+)+\\.pem(.enc)?$
      timestamp_signer_pem: ${product}/ca/ts_signer.pem.enc
      # 时间戳签名私钥,文件需要满足正则表达式要求:^(/[a-zA-Z0-9._-]+)+\\.cnf$
      timestamp_signer_cnf: ${product}/ca/tsa.cnf
      # 证书吊销列表:文件需要满足正则表达式要求:^(/[a-zA-Z0-9._-]+)+\\.crl$
      rootca_crl: ${product}/ca/rootca.crl



并且把文件传到ca路径下了,但是重新编译,报如下错误。

任务 work.task_buildgppbin 开始
不能从 yaml 文件中获取到键值 base/vendor, 没有相关配置
切换工作目录到: /home/es/workspace/manifest/temp/build_openUBMC_debug_dev/sdk
不能从 yaml 文件中获取到键值 base/signature/simple_signer_server, 没有相关配置
不能从 yaml 文件中获取到键值 base/signature/signserver, 没有相关配置
ERROR: 任务 work.task_buildgppbin 执行失败, 打开了自签名模式但未找到待签名的uboot文件,构建失败
ERROR: 任务 work.task_buildgppbin 执行失败
ERROR: 任务 personal 执行失败
ERROR: 请查看日志信息
>> conan install --requires='bingo_cases/[>=1.0.0]@openubmc/stable' -u --deployer-folder=/tmp/tmpeplxa04o -of /tmp/tmpeplxa04o -d direct_deploy
[INFO unified_error_analyzer.py:186 analyze_errors]
============================================================
[INFO unified_error_analyzer.py:187 analyze_errors] 🔍 开始统一错误分析
[INFO unified_error_analyzer.py:188 analyze_errors] ============================================================
[WARNING unified_error_analyzer.py:326 _output_unified_analysis]
✅ 没有发现匹配的错误案例
timed out
timed out
timed out
timed out
timed out
timed out
timed out
ERROR: 运行子任务 work.task_build_rootfs_img 类 bmcgo.tasks.task_build_rootfs_img失败

但是在另一台电脑上较老的版本就可以成功编译私有签名。

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

私有签名构建报错问题分析与解决方案

根据您提供的配置修改及错误日志,当前在进行 OpenUBMC 自签名构建时出现了多个关键错误。以下是详细的分析与解决方案。


:magnifying_glass_tilted_left: 问题核心

您已在 manifest.yml 中正确配置了自签名所需的证书路径:

signature:
  certificates:
    rootca_der: ${product}/ca/rootca.der
    signer_pem: ${product}/ca/signer.pem.enc
    timestamp_signer_pem: ${product}/ca/ts_signer.pem.enc
    timestamp_signer_cnf: ${product}/ca/tsa.cnf
    rootca_crl: ${product}/ca/rootca.crl

但构建过程仍失败,报错信息如下:

:multiply: 不能从 yaml 文件中获取到键值 base/vendor,没有相关配置
:multiply: 不能从 yaml 文件中获取到键值 base/signature/simple_signer_server,没有相关配置
:multiply: 不能从 yaml 文件中获取到键值 base/signature/signserver,没有相关配置
:multiply: ERROR: 任务 work.task_buildgppbin 执行失败,打开了自签名模式但未找到待签名的 uboot 文件


:pushpin: 问题一:YAML 配置缺失关键字段

:cross_mark: 缺失字段列表:

字段 说明
base/vendor 标识厂商信息,必选字段
base/signature/simple_signer_server 指定签名服务器地址
base/signature/signserver (旧版兼容)签名服务端点

:white_check_mark: 解决方案:补全 base 配置项

manifest.yml 的顶层 base 字段中添加以下内容:

base:
  version: "1.00.00.00.B001"  # 示例版本号
  customization: "customization/prototype.py"
  rtos_version: 208.8.0
  rtos_kernel: 5.10_ek_preempt_pro
  dependency_buildtools: dependency/dependency_buildtools.xml
  vendor: "your_company_name"  # 必须添加!如:Aaeon, Changjiang_Computing

  signature:
    simple_signer_server: http://localhost:8080/sign  # 自建签名服务地址
    # 或使用 local 模式(若支持):
    # simple_signer_server: local
    
    certificates:
      rootca_der: ${product}/ca/rootca.der
      signer_pem: ${product}/ca/signer.pem.enc
      timestamp_signer_pem: ${product}/ca/ts_signer.pem.enc
      timestamp_signer_cnf: ${product}/ca/tsa.cnf
      rootca_crl: ${product}/ca/rootca.crl

:warning: 注意:

  • base/vendor必选项,缺失会导致解析失败。
  • base/signature/simple_signer_server 是签名流程的核心配置,必须存在(即使使用本地签名)。
  • 若不使用远程签名服务器,可设为 local 或指向一个本地脚本处理程序。

:pushpin: 问题二:未找到待签名的 U-Boot 文件

:warning: 报错信息:

ERROR: 任务 work.task_buildgppbin 执行失败,打开了自签名模式但未找到待签名的uboot文件

:white_check_mark: 原因分析(来自知识库):

  • 自签名模式需要 原始未签名的 U-Boot 二进制文件(如 Hi1711_boot_4096.bin)。
  • 如果 SDK 中只包含了已签名的版本,则 task_buildgppbin 无法提取原始文件进行再签名。
  • 根据文档和用户反馈,该文件通常位于 SDK 目录下,命名如:
    • Hi1711_boot_4096_debug.bin
    • Hi1711_boot_pmode_debug.bin

:white_check_mark: 解决方案:

  1. 确认 SDK 包含未签名的 U-Boot 文件

    • 检查 SDK 路径(通常是 ${sdk_path})下是否有如下文件:
      Hi1711_boot_4096.bin
      Hi1711_boot_pmode.bin
      
    • 若没有,请联系 PAE(平台支持工程师) 获取含原始镜像的 SDK 包。
  2. manifest.ymlgpp 字段中正确引用文件(参考知识库示例)

gpp:
  files:
    - file: ${sdk_path}/Hi1711_boot_4096.bin
      dst: Hi1711_boot_4096.bin
      condition:
        build_type: release
    - file: ${sdk_path}/Hi1711_boot_4096_debug.bin
      dst: Hi1711_boot_4096.bin
      condition:
        build_type: debug
  1. 确保环境变量或路径定义正确
    • ${sdk_path} 应指向有效的 SDK 解压目录。
    • 可通过日志确认路径是否被正确解析。

:pushpin: 问题三:为何旧版本能成功而新版本失败?

:white_check_mark: 可能原因:

原因 说明
构建工具(bingo)版本不同 新版本加强了配置校验,强制要求 base/vendorsimple_signer_server 等字段存在
SDK 内容差异 旧环境使用的 SDK 包含原始 U-Boot 镜像,新环境可能遗漏
签名逻辑变更 新版本可能移除了默认值或放宽策略,改为严格模式

:paperclip: 参考知识库信息:

  • 用户 Aaeon 在使用链接 https://discuss.openubmc.cn/t/topic/215/9 构建时也遇到了类似问题。
  • 官方回答明确指出:“如果打开了自签名模式,需要未签名的 uboot 原始文件,若确需签名的请找 PAE 获取专用文件。”

:white_check_mark: 总结:完整解决步骤

:white_check_mark: 第一步:完善 manifest.yml 配置

base:
  vendor: "YourCompany"  # 必填
  signature:
    simple_signer_server: local  # 或具体 URL
    # 其他签名配置...

:white_check_mark: 第二步:确认 SDK 含有原始 U-Boot 文件

  • 查看路径:~/sdk${sdk_path}
  • 检查文件是否存在:
    • Hi1711_boot_4096.bin
    • Hi1711_boot_pmode.bin
  • 如无,请联系 PAE 获取完整 SDK

:white_check_mark: 第三步:验证文件引用路径正确

确保在 gpp/files 中正确引用上述文件,并设置合适的 condition

:white_check_mark: 第四步:清理缓存并重新构建

# 清除 conan 缓存(如有必要)
conan remove "*" -c

# 重新执行构建
bingo build -b openUBMC

:paperclip: 参考资料


如按以上步骤操作后问题仍未解决,请提供以下信息以便进一步排查:

  1. manifest.yml 完整 basegpp 配置片段
  2. ls ${sdk_path} 输出结果
  3. bingo -vconan -v 版本号

相关链接:

  1. 自签名构建报错问题
  2. OpenUBMC2506 BMC固件升级失败
  3. 如何新增仿真数据和仿真驱动
  4. 0.5.317版本的bmcgo,出BMC签名包失败问题
  5. 签名包制作指导 | 文档中心 | openUBMC

signserver 这个字段应该填什么内容呢?

其他ai建议

 signserver:  # 新增此字段,开发环境用本地占位
      enable: false  # 关闭远程签名服务器(开发环境跳过)
      type: "local"  # 签名类型:local(本地)/ remote(远程)
      url: ""  # 远程签名服务器地址(关闭时留空)
      token: ""  # 远程签名服务器鉴权令牌(关闭时留空)
      timeout: 30  # 超时时间(单位:秒,可选)

环境上~/sdk目录缺少一个Hi1711_yyyymmdd_xxxx.tar.gz文件,即待签名的uboot文件。

这个文件在bmc_sdk里面吗?我现在下的2512里面是没有类似的文件

Hi1711_boot_4096.bin        Hi1711_boot_4096_pmode.bin        hi1711sdk.tar.gz  rtos.tar.gz
Hi1711_boot_4096_debug.bin  Hi1711_boot_4096_pmode_debug.bin  readme.txt

他报的其他错误,

不能从 yaml 文件中获取到键值 base/vendor, 没有相关配置
切换工作目录到: /home/es/workspace/manifest/temp/build_openUBMC_debug_dev/sdk
不能从 yaml 文件中获取到键值 base/signature/simple_signer_server, 没有相关配置
不能从 yaml 文件中获取到键值 base/signature/signserver, 没有相关配置

也是因为缺少这个文件的原因吗?

这些是提示,不是报错。 有ERROR的行,是报错信息。

Hi1711_yyyymmdd_xxxx.tar.gz 这个文件正常从哪里获取呀?我从别的设备上拷过来一个倒是能用了。

社区开发,我这里基本上不考虑签名,因为这是你们和华子的E2E对接。这个开发东西确实太杂了。我目前就专心qemu开发。