问题背景
需要将conan二进制转移到内网自建的conan仓
当前已经在外网通过构建的方式将conan二进制缓存打包转移到内网,但上传到自建conan仓时出现问题
问题现象
上传到自建conan仓的命令:
conan search "*" | tail -n +3 | xargs -P 12 -I {{}} conan upload {{}} -c --all -r cbmc_release
出错打印:
![]()
ERROR: boost/1.82.0.B001@openUBMC.release/rc: Upload recipe to 'cbmc_release' failed: The 'boost/1.82.0.B001@openUBMC.release/rc' package has 'exports_sources' but sources not found in local cache.
Probably it was installed from a remote that is no longer available.
涉及的组件有:
Computing_Component_RAID/V100R001C00SPC512B020@openUBMC.release/stable
Cyrus_SASL/2.1.28-h1.computing.ibmc.r1@openUBMC.release/rc
Editline_Library_-_libedit/3.1-20230828-htrunk2@openUBMC.release/rc
Signature_Verify_CBB_Library/24.1.0.B006_001@openUBMC.release/rc
boost/1.82.0.B001@openUBMC.release/rc
curl/7.79.1-25.oe2203sp3-htrunk31@openUBMC.release/rc
hisec_tls/24.1.0.B039@openUBMC.release/rc
huawei_secure_c/1.0.2@openUBMC.release/rc
json/B003_00002@openUBMC.release/rc
kmc/24.0.0.B020_002@openUBMC.release/rc
libjpeg/9f@openUBMC.release/rc
libssh2/1.10.0-5.oe2203sp3-htrunk4-1@openUBMC.release/rc
lldpd/1.0.17-h1@openUBMC.release/stable
luajit/2.1.0.B012@openUBMC.release/rc
muparser/2.3.4@openUBMC.release/stable
net-snmp/5.9.1-6.oe2203sp3-htrunk4.B005@openUBMC.release/rc
nginx/1.27.1-htrunk3.1@openUBMC.release/stable
ntp/4.2.8p17-3.oe2403-htrunk3-1@openUBMC.release/rc
openldap/2.6.6-htrunk1@openUBMC.release/rc
openssh/8.8p1-23.oe2203sp3.r6@openUBMC.release/rc
secbox/24.0.10.B066_00001@openUBMC.release/rc
skynet/1.7.0.B016@openUBMC.release/rc
sqlite3/3.37.2-6.oe2203sp3-h2.B001@openUBMC.release/rc
vpp/V300R024C10SPC002B100_002@openUBMC.release/rc
初步分析和尝试
这些组件都是openUBMC.release通道发布,实际上这些组件在本地缓存都有hw.ibmc.release,而hw.ibmc.release通道的组件推送没报错。
应该是组件的conanfile.py文件定义了源码,但是这些闭源组件包并没有源码快照,因此报错,目前通过注释 exports_sources 变量和source函数能推送大部分:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright © Huawei Technologies Co., Ltd. 2022-2025. All rights reserved.
import os
from conans import ConanFile, tools, CMake
class hi1880_conan(ConanFile):
name = "Computing_Component_RAID"
description = "Computing_Component_RAID"
settings = "os", "arch", "compiler"
_env_build = None
generators = "cmake"
#exports_sources = ["permissions.ini"] 注释变量exports_sources
_cmake = None
@property
def _source_subfolder(self):
return "sorce_subfolder"
#def source(self): 注释函数 source
# git = tools.Git(verify_ssl=False, folder="hi1880_code")
# git.clone(**self.conan_data["sources"][self.version]["HI1880V100_DEVELOP"])
def build(self):
# 修改工作目录
lib_path = "hi1880_code/src/host/tools/lib"
os.chdir(lib_path)
# 修改脚本 适配构建环境,并只编译64位
self.run("sed -i 's/buildtools\///g' Makefile")
self.run("sed -i '76c all : $(OBJS64LE)' Makefile")
self.run("sed -i '77,79d' Makefile")
self.run("make")
def package(self):
hs_h_dir = "hi1880_code/src/include/open_api"
hs_lib_dir = "hi1880_code/src/host/tools/lib"
self.copy("*", src=hs_h_dir, dst="include", symlinks=True)
self.copy("tool_lib.h", src=hs_lib_dir, dst="include", symlinks=True)
self.copy(
"raidlib.so*", src=f"{hs_lib_dir}/bin/64le", dst="usr/lib64", symlinks=True
)
self.copy("permissions.ini", src="", dst="")
def package_info(self):
self.cpp_info.libdirs = ["usr/lib64"]
尽管做这样的修改,但是仍然有部分组件无法推送:
![]()
ERROR: luajit/2.1.0.B012@openUBMC.release/rc: Upload recipe to 'cbmc_release' failed: No remote 'openubmc_dev' defined in remotes
ERROR: Errors uploading some packages
涉及的组件有:
luajit/2.1.0.B012@openUBMC.release/rc
nginx/1.27.1-htrunk3.1@openUBMC.release/stable
skynet/1.7.0.B016@openUBMC.release/rc
实际上nginx/1.27.1-htrunk3.1@openUBMC.release/stable和skynet/1.7.0.B016@openUBMC.release/rc是依赖luajit/2.1.0.B012@openUBMC.release/rc的。
诉求
1、应该如何修改才能将luajit、nginx、skynet推送到远端
2、为解决package has ‘exports_sources’ but sources not found in local cache.的问题,目前是挨个去改每个出问题的组件,工作量很大,且不方便做自动化,有没有更方便的办法, 或者发布组件时不强制源码校验?
