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

答案内容由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