问题背景
1.原本期望是能够用上conan中的user字段,用于区分社区conan包和自有conan包,因此自有的conan包名会是mdb_interface/1.110.11@wuzhou/stable
2.在切入2606版本时,遇到如下报错
Resolved version ranges
hica/[>=1.70.14 <1.71.0]@openubmc/stable: hica/1.70.14@openubmc/stable
observability/[>=1.110.2 <1.130.0]@openubmc/stable: observability/1.120.4@openubmc/stable
ERROR: Version conflict: Conflict between mdb_interface/[>=1.80.1]@openubmc/stable and mdb_interface/1.110.11@wuzhou/stable in the graph.
Conflict originates from observability/1.120.4@openubmc/stable
问题分析
1.根据报错判断是observability组件依赖mdb_interface/[>=1.80.1]@openubmc/stable但是在manifest当中又指定了mdb_interface/1.110.11@wuzhou/stable,导致不知道用哪个版本的mdb,从而产生的报错
2.分析observability组件中的service.json和conanbase.py文件
service.json
build中指定了mdb_interface版本范围
"build": [
{
"conan": "libmc4lua/[>=0.0.1]"
},
{
"conan": "mdb_interface/[>=1.80.1]"
},
{
"conan": "opentelemetry/1.13.0.022"
}
]
conanbase.py
自动生成的构建文件中指定了user和channel
def requirements(self):
# 编译依赖
self.requires("libmc4lua/[>=0.0.1]@openubmc/stable")
self.requires("mdb_interface/[>=1.80.1]@openubmc/stable")
self.requires("opentelemetry/1.13.0.022@openubmc/stable")
skynet = self.conf.get("user.tools:skynet")
3.借助ai分析bingo源码
下放关键代码部分,其默认生成的conanbase,如果service.json指定了build的组件版本,那么是会默认生成user为openubmc
@staticmethod
def get_dependencies_v2(service_data, key):
dependencies = []
user_channel = f"@{misc.conan_user()}/stable"
deps = ComponentHelper.get_config_value(service_data, key, [])
for dep in deps:
conan = dep.get(misc.CONAN)
if conan is None:
log.info("获取 conan 依赖失败, 跳过未知组件")
continue
if conan.find("@") < 0:
conan += user_channel
if not misc.conan_package_match(conan, True):
raise BmcGoException(f"未正确定义依赖组件的名称: {conan}")
dependencies.append(conan)
return dependencies
4.分析了一下之前为什么不会遇到的原因,原先我们刚好把build有依赖的组件都进行了定制化,或组件本身未指定依赖mdb版本,但是目前较新的组件,基本都在build中增加了mdb版本依赖
一些修改方案
1.修改组件依赖,build下不放mdb --修改组件可能过多,而且破坏原本指明的依赖关系,且组件都需要重新构建
2.采用options形式,沿用openubmc —修改量可能过多,每个组件都需要单独修改定制
3.直接取消user区分,沿用openubmc —无法根据包名进行区分自有和社区版本
疑问
按照当前情况分析,存在组件依赖user字段(openubmc)的情况,那么user字段不方便作为定制版本区分,请教一下社区各位大佬,基于当前情况,有没有更加合理的方案