基础通用问题FAQ

Q1:社区需求ISSUE端到端交付流程
A:参考:

Q2:BMC有几个分区,升级会如何处理
A:iBMC系统存在3个分区镜像

  • 主用分区(active):当前生效分区
  • 备用分区:主用分区镜像的备份,通常主备一致
    • 当主区异常,备区切为主,主区降为备并同步当前主区的镜像,主备一致
    • 升级时主备会一起升级
  • 可用分区:真正承载备用的BMC版本
    • “可用分区镜像倒换”生效可用分区,可用分区切为主,原主分区同步新主分区镜像后切为备,原备用分区切为可用分区
  • 升级时:主用分区与可用分区互换,同时升级主分区+备分区

Q3:如何通过BMC转发ipmi命令
A:桥接转发命令:

# 例:0x02是数据长度,0x06 0x01是要转发的命令
./ipmitool.exe -I lanplus -H 90.94.13.110 -U Administrator -P password -C 17 raw 0x30 0x93 0xdb 0x07 0x00 0x7a 0x01 0x2c 0x02 0x06 0x01

Q4:为什么新建的组件拉起会有异常
A:加入到某一进程拉起的组件(如hardware、framework等进程),需要在manifest中配置组件拉起白名单:build/customization/prototype.py,在subsys_startup_components中新增组件名

Q5:telnet连接如何访问busctl
A:执行export $(cat /dev/shm/dbus/.dbus)

Q6:如何在调试版本中默认带上telnet
A:将busybox组件打包到manifest中带上即可

Q7:北向映射器rackmount组件的lua脚本中如何加日志打印调试
A:配置类型为script的lua代码无法打印日志,配置类型为plugins的lua代码中可以直接使用通用的日志接口

Q8:如何让日志不受限流机制的影响,强制打印
A:如:log:error_easy(fmt, ...),日志接口名加上_easy后缀

Q9:如何关闭日志限流机制
A:在/dev/shm/dbus/.dbus里加一行MCC_DEBUG=1重启相关进程即可关闭日志限流功能

Q10:如何查看某一个Position下对应的所有对象资源
A:例:busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/ObjectGroup/00 bmc.kepler.ObjectGroup GetObjects 'a{ss}s' 0 'hwdiscovery'

Q11:rackmount中的配置文件在环境上如何修改?
A:实机环境上json映射文件在对应的接口组件目录下,如:/opt/bmc/app/redfish,可以直接修改进行调试

Q12:EEPROM中的csr和内置的csr的选择策略和优先级是怎么样的?
A:比较Eeprom中读取的格式版本号和内置CSR的格式版本号,选择版本较高的,格式版本一致则比较数据版本DataVersion,选择版本较高的,若数据版本也一致则优先选择加载内置的CSR

Q13:组件拉起出现异常,总是自动重启,不方便定位问题根因怎么办?
A:关闭框架的组件运行状态检查:在mdbctl下执行 attach maca setmonitorstatus running false

Q14:如何记录和监控内存占用情况
A:常用命令:

  1. top -c -e M
  2. cat /proc/meminfo | grep -E '^MemTotal|^MemFree|^MemAvailable' | awk '{printf "%s: %.2f MB\n", $1, $2/1024}'

Q15:组件如果是通过C代码开发的,如何上环境调试?
A:C代码不像lua代码可以直接在环境上修改源码调试,通常可以在本地构建出对应的so,然后去环境上直接替换(通常在/usr/lib64下),重启对应的服务后可以生效

Q17:如何内置默认的证书用于调测?
A:以ssl证书为例,打包时放在目录/opt/bmc/trust/partner/ssl/ssl.p12下,升级后会默认自动导入

Q18:如何查询所有组件的busctl命令的用法
A:1)dbus接口支持的全部方法在环境上通过dbus命令都可以查询到,通过busctl --user introspect bmc.kepler.hwdiscovery <对象path>可以看到某一个对象下挂的每一个方法以及需要的入参数量和类型;2)官网文档也有部分介绍和示例:https://www.openubmc.cn/docs/zh/development/api/app_api/account.html

Q19:社区当前支持哪些BMC芯片
A:可以根据目录结构判断:manifest/build/product/BMC/,该目录下每一个单独的目录对应一款BMC芯片的构建工程

Q20:新的BMC芯片如果要接入社区应该如何入口?
A:参考:bcal:基于工厂模式和动态加载机制的 BMC 系统硬件抽象层框架项目 - AtomGit 社区提供一个bmc soc驱动适配层以及一套配套的接口实现上层业务和芯片驱动解耦,不同的bmc soc可以通过实现这一条标准的接口规范实现接入社区版本

Q21:BMC芯片是否一定要搭配eMMC
A:是,openUBMC社区版本当前的设计方案是从eMMC启动

Q22:BMC如果登录不上如何排查?
A:如果无法ping通, 1)串口登录参考1.1查询关键信息,比如网口、路由是否存在等;2)wireshark抓包./tcpdump -i eth2 -s 0 -v -w caps_eth2.pcap ,查看报文是否到达网口;3)查看iptables规则:报文是否被拦截等

Q23:BMC ssl证书为什么导入不上?
A:首先排查系统时间,如果时间异常需要使用date命令更新时间尝试。大概率是系统时间异常导致证书导入报证书过期错误

Q24:BMC时间有哪些更新方式?
A:1)从RTC芯片同步时间;2)配置NTP服务器;3)调用设置时间的资源协作接口,可以从mdb仓查询

Q25:BMC时间更新,NTP与RTC的优先级是怎么样的?
A:开启ntp服务后,就会停止从rtc同步时间,但是ntp需要配有效的ntp服务器地址才可以进行时间同步

Q26:组件健康状态检查机制会自动重启组件和服务,如何临时关闭?
A: 在mdbctl中执行

attach maca
setmonitorstatus running false

Q27:如何在出包的时候关闭MACA的组件健康状态检查?
A:修改manifest仓中产品目录下的mc_control.json文件配置,将其中的使能状态置为false

Q28:如何追踪监控ipmi数据收发?
A:以BT通道为例:busctl --user call bmc.kepler.ipmi_core /bmc/kepler/Debug/IpmiCore/TraceIpmi bmc.kepler.Debug.IpmiCore.TraceIpmi Trace a{ss}bsyyss 0 true "bt" 0xff 0xff "" "file" 记录下来的消息会保存在/tmp/ipmi.txt中

Q29:持久化类型有哪些种类
A:临时持久化(TemporaryPer) /run/persistence/per_temporary.db
复位持久化(ResetPer) /opt/bmc/pram/persistence/per_reset.db
掉电持久化(PoweroffPer) /data/trust/persistence/per_poweroff.db
永久持久化(PermanentPer) /dev/mmcblk0p8

Q30:日志中如何查看持久化数据信息
A:通过一键收集查看持久化数据库内容,收集后持久化数据存放在 dump_info\AppDump\persistence 目录下,每种持久化类型的数据导出到一个json文件,可以通过表名进行搜索

Q31:openubmc_sdk.lock文件如何更新组件版本号
A:使用命令:bingo lock -u 组件名,按提示一步步操作即可

Q32:软件包升级大小限制默认为110M,如何临时解除限制
A:1、必须带上的公共修改:
nsm组件:在dist/user_conf/rootfs/opt/bmc/web/nginx/conf/nginx.conf 中配置 client_max_body_size
2、web接口需要修改:
webui组件:搜索“文件大小限制”关键字,修改限制的大小值
web_backend组件:src/lualib/firmware_inventory.lua FILE_SIZE_110M
3、redfish接口修改:
redfish组件:src/lualib/UpdateService/firmware_inventory.lua 有个FILE_SIZE_110M

Q33:组件如果构建报错,如何定位组件依赖关系和实际生效的构建选项
A:复制报错结尾的create命令:ERROR: 执行命令 conan create xxx 并执行,查看生成的json文件,里面有详细的组件构建信息

Q34:manifest中的管脚复用ioconfig.sh如何配置
A:如下规则

每4字节一组写入,以第一组数据0x07FF01EF为例
二进制数据:00000111 11111111 00000001 11101111
对应io复用表中 bit31 -> bit0(大端,与索引顺序相反排布)

Q35:lockfile机制相关的几个配置文件分别有什么作用
A:openubmc_sdk.lock:只要把组件配置到了这里,默认所有单板都会生效;openubmc.lock 中只做组件版本号的声明,如果要生效,需要在manifest.yml添加对应的组件

Q36:如何查看内存占用情况
A:cat /proc/meminfo | grep -E '^MemTotal|^MemFree|^MemAvailable' | awk '{printf "%s: %.2f MB\n", $1, $2/1024}'

Q36:社区如何构建Aspeed单板
A:openUBMC Aspeed版本构建