在/home/workspace/manifest/rackmount下面使用bingo build --stage=stable的命令编译,报错如下。请帮忙指点一下,谢谢
答案内容由AI生成,仅供参考:
结论
您的构建失败是由于 新增 Redfish 接口后未配置对应的 PrivilegeMap 权限 所致。
根本解决方案:
在privilege_map_config.json中为/redfish/v1/OpenUBMC添加权限声明。
切勿长期屏蔽 MapperChecker 权限校验,否则会影响代码合规性和安全性。
完成上述配置后,即可成功通过 bingo build 构建流程。
点击此处查看详细分析解答
扩展 Redfish 接口 /redfish/v1/OpenUBMC 编译报错问题分析与解决
根据您提供的信息,您在扩展 Redfish 外部接口时新增了路径 /redfish/v1/OpenUBMC,并在执行 bingo build --stage=stable 时遇到编译失败。错误日志中明确指出了问题根源:
红字警告提示:
[Rule 6.1]: redfish接口PrivilegeMap校验检查失败,错误值:NULL,错误位置:URI:NULL, Type:NULL, location:NULL 映射器配置检查失败,构建终止
同时提示:
若要在不配置PrivilegeMap的情况下个人出包,请用在MapperChecker中注释check_privilege_map的方法进行屏蔽 特殊资源请在privilege_map_config.json文件中手动声明资源类型
问题定位
虽然您已按文档创建了接口映射配置文件 OpenUBMC.json,但构建系统在校验阶段因缺少权限映射(PrivilegeMap)而拒绝通过。
核心原因
新增 Redfish 接口 /redfish/v1/OpenUBMC 后,必须在 privilege_map_config.json 文件中声明该接口的访问权限级别,否则 MapperChecker 校验会失败,导致 bingo build 构建中断。
这是一套安全机制,确保所有 Redfish 接口都有明确的访问控制策略(如读、写、执行等操作所需的权限角色),防止未经授权的访问。
解决方案
正确做法:为新接口添加 PrivilegeMap 权限配置
步骤 1:确认 privilege_map_config.json 文件位置
该文件通常位于:
interface_config/redfish/privilege_map_config.json
请检查是否存在此文件,若不存在,请从主分支同步或创建。
步骤 2:编辑 privilege_map_config.json,添加新接口权限
在文件中找到对应的权限结构(通常是按 URI 路径映射权限),添加如下条目:
{
"Uri": "/redfish/v1/OpenUBMC",
"Privileges": {
"GET": ["ConfigureManager", "Login"]
}
}
说明:
GET请求需要登录权限和配置管理权限。- 可根据实际需求调整权限等级,常见如:
Login,ConfigureManager,ConfigureComponents等。- 若为写操作(POST/PUT/PATCH),需添加如
"POST": ["ConfigureManager"]等更高权限。
示例完整片段:
[
{
"Uri": "/redfish/v1",
"Privileges": {
"GET": ["Login"]
}
},
{
"Uri": "/redfish/v1/Managers",
"Privileges": {
"GET": ["Login"],
"PUT": ["ConfigureManager"]
}
},
// ➕ 新增以下内容
{
"Uri": "/redfish/v1/OpenUBMC",
"Privileges": {
"GET": ["Login", "ConfigureManager"]
}
}
]
注意:确保 JSON 格式合法(逗号、引号、括号匹配)。
临时绕过方案(仅用于开发调试)
如果您只是想临时绕过校验以完成本地打包,可按提示操作:
若要在不配置PrivilegeMap的情况下个人出包,请用在MapperChecker中注释check_privilege_map的方法进行屏蔽
操作方式(不推荐长期使用):
- 找到
MapperChecker工具代码(一般位于bmcgo或bingo工具链内部)。 - 搜索
check_privilege_map方法。 - 在调用处用
#或//注释掉该方法调用。
风险:绕过权限校验可能导致安全隐患或后续合入主干被拒。仅限个人调试使用。
验证文件结构和内容
OpenUBMC.json 内容验证(您已基本正确)
{
"Resources": [
{
"Uri": "/redfish/v1/OpenUBMC",
"Interfaces": [
{
"Type": "GET",
"RspBody": {
"@odata.id": "/redfish/v1/OpenUBMC",
"Id": "OpenUBMC",
"Name": "OpenUBMC",
"WelcomeMessage": "${ProcessingFlow[1]/Destination/WelcomeMessage}"
},
"ProcessingFlow": [
{
"Type": "Property",
"Path": "/bmc/demo/MyMDSModel/1",
"Interface": "bmc.demo.OpenUBMC.Community",
"Destination": {
"WelcomeMessage": "WelcomeMessage"
}
}
]
}
]
}
]
}
您的配置基本正确,但请确保
ProcessingFlow索引与实际一致(目前使用[1],但数组只有 一个元素 [0])→ 存在错误!
修复建议:修正 ProcessingFlow 引用索引
应改为:
"WelcomeMessage": "${ProcessingFlow[0]/Destination/WelcomeMessage}"
否则运行时可能无法正确解析变量,导致响应体字段为空。
最终正确步骤总结
| 步骤 | 操作 |
|---|---|
| 1 | 确保 OpenUBMC.json 放在 interface_config/redfish/mapping_config/ 目录下 |
| 2 | 修改 privilege_map_config.json,添加 /redfish/v1/OpenUBMC 的权限定义 |
| 3 | 修正 OpenUBMC.json 中 ${ProcessingFlow[1]} → 改为 [0] |
| 4 | 提交所有更改(git add .) |
| 5 | 重新运行构建命令:bingo build --stage=stable |
参考文档
- 《Redfish接口映射配置指南》
mapper_check/README.md:了解具体校验规则(如 Rule 6.1)interface_config/redfish/目录下的现有 JSON 配置示例
结论
您的构建失败是由于 新增 Redfish 接口后未配置对应的 PrivilegeMap 权限 所致。
根本解决方案:
在privilege_map_config.json中为/redfish/v1/OpenUBMC添加权限声明。
切勿长期屏蔽 MapperChecker 权限校验,否则会影响代码合规性和安全性。
完成上述配置后,即可成功通过 bingo build 构建流程。
在tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json中增加了接口,搞定
root@f4985a3ffe1a:/home/workspace/manifest/rackmount# git diff tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
diff --git a/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json b/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
index b92e1d16..03ac06ca 100644
— a/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
+++ b/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
@@ -112,6 +112,11 @@
“/redfish/v1/Schemas/{id}”: {
“Flag”: “Pass”,
“Reason”: “Schema<84><90><8D><9C><80><81><85><8D>”
-
}, -
"/redfish/v1/OpenUBMC": { -
"Flag": "Add", -
"Entity": "Manager", -
"Reason": "Custom OpenUBMC resource, mapped to Manager privileges" }}
-}
\ No newline at end of file
+}
root@f4985a3ffe1a:/home/workspace/manifest/rackmount#

