【组件仓库本地更新流程】openubmc的组件仓库中,有些组件版本疑似没有二进制包

当前有两个仓库:

ibmc_dev: http://0.0.0.0:9300/ [Verify SSL: True]
openubmc_dev: https://devrepo.devcloud.cn-north-4.huaweicloud.com/artgalaxy/api/conan/cn-north-4_ad268a13b93c480087c8a1e4b0fe8b15_conan_1/ [Verify SSL: False]

我使用以下脚本,将openubmc_dev的组件转移到ibmc_dev

import os
import subprocess

def run(cmd):
    ret = os.system(cmd)
    if ret != 0:
        raise Exception("Command failed: %s" % cmd)

# Assuming local = conan_server and artifactory remotes
output = subprocess.check_output(["conan", "search", "-r=openubmc_dev", "--raw"]).decode()
packages = output.splitlines()

print(f"{packages}\n{type(packages)}")

for package in packages:
    print("Downloading %s" % package)
    run("conan download %s -r=openubmc_dev" % package)

run("conan upload \"*\" --all -c --force -r=ibmc_dev")

发现文件大小对不上,(openubmc_dev有44221条,而ibmc_dev只有43689条):

conan search "*" -r ibmc_dev > conan_ibmc
conan search "*" -r openubmc_dev > conan_openubmc
 ll conan_*
-rw-r--r-- 1 root root 43689 Mar 26 09:11 conan_ibmc
-rw-r--r-- 1 root root 43689 Mar 26 09:12 conan_local
-rw-r--r-- 1 root root 44221 Mar 26 09:11 conan_openubmc

通过compare工具发现ibmc_dev缺失一些组件:

image
image
总共涉及这些组件版本:

account/1.70.19@hw.ibmc.release/rc
account/1.70.19@hw.ibmc.release/stable
fructrl/1.70.20@hw.ibmc.release/rc
fructrl/1.70.20@hw.ibmc.release/stable
general_hardware/1.70.43@hw.ibmc.release/rc
general_hardware/1.70.43@hw.ibmc.release/stable
sensor/1.70.24@hw.ibmc.release/rc
sensor/1.70.24@hw.ibmc.release/stable
thermal_mgmt/1.70.23@hw.ibmc.release/rc
thermal_mgmt/1.70.23@hw.ibmc.release/stable
vpd/1.70.81@hw.ibmc.release/rc
vpd/1.70.81@hw.ibmc.release/stable
webui/1.70.48@hw.ibmc.release/rc
webui/1.70.48@hw.ibmc.release/stable

尝试手动转移:

>conan download "webui/1.70.48@hw.ibmc.release/rc"  -r=openubmc_dev
Downloading conanmanifest.txt completed [0.15k]
Downloading conanfile.py completed [1.33k]
Downloading conan_export.tgz completed [2.32k]
Decompressing conan_export.tgz completed [0.00k]
webui/1.70.48@hw.ibmc.release/rc: Getting the complete package list from 'webui/1.70.48@hw.ibmc.release/rc#bb96c56ee897dcfc53bef909b4cbbe58'...
webui/1.70.48@hw.ibmc.release/rc: WARN: No remote binary packages found in remote

>conan upload "webui/1.70.48@hw.ibmc.release/rc" --all -c --force -r=ibmc_dev
Uploading to remote 'ibmc_dev':
Uploading webui/1.70.48@hw.ibmc.release/rc to remote 'ibmc_dev'
Uploaded conan_export.tgz -> webui/1.70.48@hw.ibmc.release/rc [2.32k]
Uploaded conanfile.py -> webui/1.70.48@hw.ibmc.release/rc [1.33k]
Uploaded conanmanifest.txt -> webui/1.70.48@hw.ibmc.release/rc [0.15k]
Uploaded conan recipe 'webui/1.70.48@hw.ibmc.release/rc' to 'ibmc_dev': http://0.0.0.0:9300/

里面有这么一个告警日志:

webui/1.70.48@hw.ibmc.release/rc: WARN: No remote binary packages found in remote

我想咨询一下

  1. 是否是因为组件没上传成功产生这个告警?
  2. 这个现象是否会对依赖此版本的manifest有影响?
  3. 临时解决方案是不是自行拉最新代码进行构建发布?

再次补充一个问题,使用复制过来的ibmc_dev编包一直不成功:

rm -rf temp/ && rm -rf output/
cd /root/.conan/ && rm -rf data/ && mkdir data/ && cd -
LOG=DEBUG bmcgo build -b openUBMC -r ibmc_dev

错误日志:

[2025-03-26 11:29:59,901 ERROR] ================== boost/1.82.0.B001@hw.ibmc.release/rc#56434ef3889adfeec499a19b0bd62f70 构建失败日志起始位置 ==================
[2025-03-26 11:29:59,915 INFO] Using lockfile: '/home/workspace/source/manifest/temp/conan_source_debug_dev/ibmc/all/ibmc.lock'
Configuration:
[settings]
arch=armv8
build_type=Debug
compiler=gcc
compiler.libcxx=libstdc++
compiler.luajit=1.7.x
compiler.version=7.3
os=Linux
[options]
*:module_symvers=9d01937095e74d48d1f044dd5254fbfc7c2e5bb1def2b854ad4f66e9878543b9
bmc_time:manufacture=True
chassis:manufacture=True
fructrl:manufacture=True
help:board_name=openUBMC
skynet:enable_luajit=True
vpd:board_name=openUBMC
[build_requires]
[env]
AR=aarch64-target-linux-gnu-ar
AS=aarch64-target-linux-gnu-as
CC=aarch64-target-linux-gnu-gcc
CFLAGS=-Wall -fPIC -fstack-protector-all -O2 -Wl,-z,relro,-z,now -Wl,-z,relro -Wl,-z,noexecstack -Wl,-z,now -fPIE -pie -fno-common -std=gnu11
CHOST=aarch64-target-linux-gnu
CONAN_CMAKE_FIND_ROOT_PATH=/opt/RTOS/208.8.0/arm64le_5.10_ek_preempt_pro/sdk
CONAN_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
CONAN_CMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
CONAN_CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY
CONAN_CMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
CONAN_CMAKE_FIND_SDK_ROOT=/opt/hi1711sdk
CONAN_CMAKE_SYSROOT=/opt/RTOS/208.8.0/arm64le_5.10_ek_preempt_pro/sdk
CONAN_CMAKE_SYSTEM_VERSION=3.14
CONAN_DISABLE_STRICT_MODE=1
CONAN_REVISIONS_ENABLED=1
CONAN_SKIP_BROKEN_SYMLINKS_CHECK=True
CXX=aarch64-target-linux-gnu-g++
CXXFLAGS=-I"/opt/hcc_arm64le/aarch64-target-linux-gnu/lib/include" -Wall -fPIC -fstack-protector-all -O2 -Wl,-z,relro,-z,now -Wl,-z,relro -Wl,-z,noexecstack -Wl,-z,now -fPIE -pie -fno-common -std=c++17
HOSTCC=gcc
KERNEL_PATH=/opt/RTOS/208.8.0/arm64le_5.10_ek_preempt_pro/sdk/usr/src/kernel/
LD=aarch64-target-linux-gnu-ld
PATH=[/opt/hcc_arm64le/bin]
PKG_CONFIG_PATH=/opt/RTOS/208.8.0/arm64le_5.10_ek_preempt_pro/sdk/lib64/pkgconfig:/opt/RTOS/208.8.0/arm64le_5.10_ek_preempt_pro/sdk/usr/lib64/pkgconfig
RANLIB=aarch64-target-linux-gnu-ranlib
STRIP=aarch64-target-linux-gnu-strip
Installing package: boost/1.82.0.B001@hw.ibmc.release/rc
Requirements
    boost/1.82.0.B001@hw.ibmc.release/rc from 'local_dev' - Cache
Packages
    boost/1.82.0.B001@hw.ibmc.release/rc:295f5ceaff90a1afe2a22ca78ccdeb749ab95b30 - Build

Cross-build from 'Linux:x86_64' to 'Linux:armv8'
Installing (downloading, building) binaries...
boost/1.82.0.B001@hw.ibmc.release/rc: Configuring sources in /root/.conan/data/boost/1.82.0.B001/hw.ibmc.release/rc/source
ERROR: boost/1.82.0.B001@hw.ibmc.release/rc: Error in source() method, line 24
        git.clone(**self.conan_data["sources"][self.version])
        CalledProcessErrorWithStderr: Command 'git -c http.sslVerify=false fetch --depth 1 origin "1.82.0"' returned non-zero exit status 128.
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
fatal: unable to access 'https://szv-open.codehub.huawei.com/OpenSourceCenter/boostorg/boost.git/': Could not resolve host: szv-open.codehub.huawei.com


[2025-03-26 11:29:59,923 ERROR] ================== boost/1.82.0.B001@hw.ibmc.release/rc#56434ef3889adfeec499a19b0bd62f70 构建失败日志结束位置 ==================

虽然这个错误日志提到的组件是boost/1.82.0.B001@hw.ibmc.release/rc
但每次重新构建提示的组件都不同

1、组件未上传二进制,仅上传了recipe,所以告警说没有二进制。
2、对manfiest无影响,缺少二进制时会自动从源码构建,唯一要做的是确保有权限访问社区的源码仓。
3、如果想缓存二进制,提交效率,也可以在本地构建再推包。

指定社区仓试试,LOG=DEBUG bmcgo build -b openUBMC -r openubmc_dev

是这样的,我需要在公司内网搭建conan仓,我原本的思路是conan download openubmc_dev下所有的组件,然后转移容器,在内网环境conan upload到自己的私仓,但是构建过程中还是出现错误。

现在似乎搞清楚原因了,就是openubmc_dev不完全包括二进制,必须要在外网环境完整执行一次.hpm构建,然后再到内网conan upload。相当于手动构建出二进制到.conan/data。

是这样的么?

要讲清楚这个问题就得理解recipe和package,recipe简单理解就是构建脚本和元数据,配合不同的编译器、编译选项、特性(options)都会生成不同的package,所以一个recipe可以应对无数个package。
完整构建hpm只是构建出了一个跟hpm匹配的package集,如果将构建生成packages推送到conan仓,重复构建hpm时可以直接复用二进制。
实际开发过程中我们会使用到各种各样的包,如DT包(x86_64包)、debug包、release包、特性(options)组合包,以及这些包的组合等等。。。。。。。

所以:能获取到源码的场景建议使用recipe归档,conan在缺包时会自动构建二进制

那这样会带来一个大问题

我们的开发环境是纯内网环境,不能执行源码构建。

当前的策略是将组件从外网打包成package,然后归档到我们的内网环境。

一旦涉及多hpm构建(debug、release包等等),就麻烦了。

我能想到的办法就是一种hpm对应一个组件仓。

有多种解决方案:
方案一:按你说的方法来,先解决产品构建的问题,其它DT依赖的组件包也按这个策略。
方案二:将openUBMC的开源源码同步到你们内部的私仓,使用私仓重新发布相同版本的组件。
方案三:【落地时间不确定】待社区构建的conan包管理器升级到conan2.0后,使用 Backing up third-party sources with Conan 特性从备份地址下载源码包。

方案二,需要源码编译的组件,是否都在开放范围内?

openUBMC的开源源码

方案二,如果能修改conanfile.py中的仓库地址为我们的私仓地址,是不是能够做到debug、release仓库归一,也能让构建时自动解决组件依赖

但是直接改conanfile.py不是很好,是否考虑用环境变量配置源码仓地址和权限

海哥说的重新发布,是不是就是改了组件的源码仓地址和权限,然后再以recipe的形式发布的组件?

不会使用环境变更读取仓地址,因为组件包太多,不适合使用环境变更且改动太大,而且会破坏软件包完整性。建议看方案三,待conan2.0之后考虑支持,参考conan文档: