【方案讨论】支持自动下载安装bmc_sdk,减少openubmc的容器数量

背景

openubmc的manifest仓是产品配置仓,之前的方案需要提前下载bmc_sdk.zip文件,调用init.py中初始化容器,此设计带来如下问题:多个openubmc版本使用不同的bmc_sdk.zip,开发者使用时一般一个容器对应一个openubmc版本,增加维护难度。

问题

之前的需求 AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台 提出了由产品管理SDK的要求,但在代码实现时存在以下:

  1. schema定义错误:配置项sdk/downloads中未将name申明为必选,但在构建脚本中会读取name配置,未配置name时会触发失败。
  2. schema类型不合适:sdk/downloads下载配置定义为数组,不利于管理(申明必选配置)和继承(多schema混合使用时)
  3. schema未覆盖产品(product)、平台(platform)以及Conan1、conan2等场景的schema配置
  4. 下载逻辑混乱,download_dependencies中依赖download_buildtools任务,但两个任务间不存在依赖关系,导致场景覆盖不全(1、删除~/rtos_compiler或~/sdk之后,download_buildtools下载成功之前download_dependencies会复制sdk内容,触发失败)。
  5. 下载的文件名固定存储在~/downloads目录,且以配置项的name标记,当多个产品需要使用不同的配置时会导致文件覆盖,进而产生重复下载。
  6. 功能错误:download_dependencies执行更快,如果bmc_sdk变更,一般复制~/sdk ~/rtos_compiler动作会快于download_buildtools,导致复制和安装的rtos_compiler和sdk不正确。

修改

bingo已提任务 AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台 和PR AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台 ,计划的优化方案:

  1. 下载配置由sdk变更为pre_download,每个配置项都是一个对象,包含url和sha256成员,其中bmc_sdk是必选配置(pre_download非必选)
  2. 下载动作调整到task_prepare任务
  3. 下载变更为通用逻辑,当下载对象名为bmc_sdk时会做解压功能到~/rtos_compiler和~/sdk
  4. 为兼容之前将构建工具存储在~/rtos_compiler和~/sdk目录的逻辑,为避免跨目录存储导致的不一致,需要每次都解压bmc_sdk(会增加解压时长)
  5. scheme定义调整到产品(product)、平台(platform)等所有产品配置项。

配套的manifest配置,请用户按需同步 PR AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台

配置项说明

schema文件新增以下配置内容,其中bmc_sdk是必选配置,hi1711_boot_images是可选配置。

    "pre_download": {
      "type": "object",
      "description": "文件前置下载动作,支持下载各类需要的文件",
      "required": ["bmc_sdk"],
      "properties": {
        "bmc_sdk": {
          "description": "openubmc的开发包文件,内置各种工具和配置,该文件必须是一个zip文件,下载后会自动解压到~/sdk、~/rtos_compiler、/usr/bin等安装目录",
          "$ref": "#/$defs/download"
        },
        "hi1711_boot_images": {
          "description": "如果你需要构建签名的openubmc镜像,你需要从PAE获取到一个文件名格式为Hi1711_[0-9]{8}_[0-9a-f]{40}.tar.gz的未签名1711启动镜像压缩包,可以使用名为hi1711_boot_images的配置项申明。",
          "$ref": "#/$defs/download"
        }
      },

配置示例

manifest.yml仓中配置示例:

pre_download:
  bmc_sdk:
    url: https://repo.openubmc.cn/25.09/sdk/bmc_sdk.zip
    sha256: 442fad3dfeb9f83bb6b7f55c7486fe0f19149083bd0b148d0ad370127991534c

讨论

请各位 sig-CICD 的伙伴参与方案讨论,本修改会有以下影响:

  1. 工具会删除sdk/downloads配置,如果用户正在使用此配置,需要在bingo合入后升级到新版本bingo并同步社区manifest仓配置。 – 有使用的请邮件反馈讨论。

这个构建要怎么构建,目前manifest README还没更新,我想手动尝试下,pr时候,还没看到有manifest README的pr。

升级bingo到最新版本:bingo up
执行产品构建命令:bingo build

此方案还存在一些跟bmcgo配合的问题,包括:

  1. Hi1711_20250618_xxxxxxxxxxxxxxxx.tar.gz文件如何下载。
  2. bmcgo和bingo的task_prepare任务当前未归一,pre_download下载功能在bmcgo中不具备。

以下PR在pre_download配置项中新增了hi1711_boot_images配置项。

配置策略描述:

    "pre_download": {
      "type": "object",
      "description": "文件前置下载动作,支持下载各类需要的文件",
      "required": ["bmc_sdk"],
      "properties": {
        "bmc_sdk": {
          "description": "openubmc的开发包文件,内置各种工具和配置,该文件必须是一个zip文件,下载后会自动解压到~/sdk、~/rtos_compiler、/usr/bin等安装目录",
          "$ref": "#/$defs/download"
        },
        "hi1711_boot_images": {
          "description": "如果你需要构建签名的openubmc镜像,你需要从PAE获取到一个文件名格式为Hi1711_[0-9]{8}_[0-9a-f]{40}.tar.gz的未签名1711启动镜像压缩包,可以使用名为hi1711_boot_images的配置项申明。",
          "$ref": "#/$defs/download"
        }
      },

此方案因政策原因无法落地,如有需要的开发者可以在manifest.yml中新增如下内容告诉bingo需要下载的工具及sha256校验:

 pre_download:
 	   bmc_sdk:
 	     url: https://repo.openubmc.cn/25.09/sdk/bmc_sdk.zip
 	     sha256: 442fad3dfeb9f83bb6b7f55c7486fe0f19149083bd0b148d0ad370127991534c
 	 

如果需要下载hi1711_boot_images的,可以在pre_download同级增加hi1711_boot_images配置,格式与bmc_sdk相同。

或者参考已关闭的PR处理。