Provide CLI login capabilities, consisting of a restricted shell and ipmcget/ipmcset commands
Access rate limit exceeded. Please log in to continue.
cli
openUBMC 命令行(CLI)组件,提供受限 Shell 命令,以及 ipmcget(查询)/ ipmcset(配置)两套命令。
| 项目 | 内容 |
|---|---|
| 组件名称 | cli |
| 许可证 | Mulan PSL v2 |
| 最后更新 | 2026 年 8 月 25 日 |
1. 组件概述
1.1 组件简介
cli 组件是 openUBMC 对外的人机交互入口,向上提供命令行界面,向下屏蔽资源协作接口与后端服务差异。由两部分组成:
| 部分 | 语言 | 说明 |
|---|---|---|
| 受限 Shell(CLP) | C(src/clp/) |
登录后进入的命令行环境,仅放行固定命令集 |
ipmcget / ipmcset |
Lua(src/lualib/、src/service/) |
将命令解析为 URI,经路由映射器转成后端资源协作接口对象调用 |
1.2 解决什么问题
1、解决服务器底层管理的标准化、自动化与可追溯性问题。
服务器内部硬件组件众多,配置项复杂。如果缺乏统一的接口,运维将面临配置不一致、批量操作困难、接口随意变更导致自动化脚本失效等问题。
2、CLI 的解决方案:
统一配置与接口,屏蔽硬件差异,允许用户通过简单的命令完成所有管理操作。
支持基于 Shell / Python 的自动化运维,使得大规模服务器集群的批量配置、状态监控成为可能。
接口基线与生命周期管控,解决接口变更导致上下游系统兼容性问题,确保自动化流程的稳定性和可维护性。
1.3 核心功能
1. 受限 Shell:登录提示符、命令历史、会话超时(默认 900 秒,notimeout 可取消)、敏感信息遮蔽;命令集含 help、ipmcget、ipmcset、mdbctl、ping、reboot、rollback、passwd、ssh 等。
2. ipmcget / ipmcset:参数化命令 [-l <location>] [-t <target>] -d <dataitem> [-s <systemid>] [-v <value>],支持普通/分页/任务三类执行模式、敏感命令二次确认与鉴权、SOL 会话管理、一键日志收集入口(ipmcget -d diaginfo)。
1.4 外部交互边界图
只有Release包才会默认使用clp_commands。本组件不持有数据,所有查询/配置最终通过 D-Bus 用户会话总线(
sd_bus)访问资源协作接口对象(path+interface)与后端服务(账号、重启、SOL、任务服务等)。
flowchart LR A1((SSH登录)) -->|release包| B(/usr/bin/clp_commands) A1 -->|debug包| C(/bin/bash) A2((Telnet登录)) --> C
2. 使用说明和示例
运行help指令可以查看clp_commands下所有可用指令
2.1 ipmcget / ipmcset 命令
作用:ipmcget 查询 BMC 状态、配置、日志等信息;ipmcset 下发配置与控制命令。
语法:
ipmcget/ipmcset [-l <location>] [-t <target>] -d <dataitem> [-s <systemid>] [-v <value>]
| 参数 | 必选 | 说明 |
|---|---|---|
-l <location> |
否 | 机框/位置(仅当构建开启 cli_l_supported 时可用,默认关闭) |
-t <target> |
否 | 目标资源类型,缺省为 _(通配) |
-d <dataitem> |
是 | 数据项,如 version、sensor、sel |
-s <systemid> |
否 | 多机形态下的系统 ID |
-v <value> |
否 | 附加参数/配置值 |
可能抛出的异常及触发条件(通过 pcall 捕获,打印到标准输出而非抛堆栈):
| 输出 | 触发条件 |
|---|---|
Invalid Command |
路由映射器响应异常,或命令执行类型未注册 |
Request failed. |
后端服务返回错误(errs 非空) |
Request failed, the echo profile does not exist. |
回显模板文件缺失 |
Invalid input |
鉴权提示后,密码输入失败 |
| 内部错误消息 | Lua 执行抛出未预期异常 |
参数不完整/非法时打印对应层级的帮助信息(Usage/参数列表/Example),不算异常。
应用场景 / 限制条件:
- 场景:日常巡检(版本、传感器、SEL、日志查询)、配置下发、SOL 会话管理、用户口令管理。
- 限制:
ipmcget只读;写操作需对应权限,部分命令需二次确认或密码鉴权;passwd命令仅在bmc.kepler.Cli.Command的Enabled属性为True(默认)时可用。mdb_interface 仓中定义了资源协作接口路径:/bmc/kepler/:Customer/Cli/Command/:Id。
调试示例(命令底层直调,等价于在受限 Shell 内执行):
# 查询版本
ipmcset /opt/bmc/skynet/lua /opt/bmc/apps/cli/service/ipmcget.lua -d version
# 设置 SOL 超时时间
ipmcset /opt/bmc/skynet/lua /opt/bmc/apps/cli/service/ipmcset.lua -t sol -d timeout -v 15
# 期望输出:Set SOL timeout period successfully.
对于非 Release 构建,ipmcget/ipmcset 命令支持 --verbose=<level> 调整运行日志级别。
调试示例
# 设置日志级别为debug,查看详细调试信息
ipmcget --verbose=debug -d version
ipmcset --verbose=debug -d sel
# 设置日志级别为info,查看一般信息
ipmcget --verbose=info -d sensorlist
ipmcset --verbose=info -t syslog -d state -v enabled
<level> |
说明 |
|---|---|
| error | 仅错误信息 |
| warning | 警告及以上 |
| notice | 重要通知及以上 |
| info | 一般信息(默认) |
| debug | 详细调试信息 |
| mass | 大量日志(最高级别) |
2.2 受限 Shell 调试命令
| 命令 | 作用 |
|---|---|
help |
打印命令帮助 |
exit |
中止CLP会话 |
ping |
测试IPv4网络状态 |
ping6 |
测试IPv6网络状态 |
ifconfig |
查看网络设备信息 |
notimeout |
取消登录会话超时 |
free |
检测内存状态 |
top |
检查系统资源使用情况。不接受参数 |
df |
检查磁盘使用情况 |
netstat |
用于检查端口状态 |
route |
用于检查路由信息。不接受参数 |
reboot [-f] [-r] [-R] |
重启 BMC(-f 强制、-r 进入恢复模式、-R 重启并回滚) |
rollback |
强制重启并回滚 |
passwd [options] [LOGIN] |
修改/锁定/解锁账号口令 |
mdbctl |
在线调试命令(实现位于 mdbctl 组件) |
3. 组件扩展案例
3.1 扩展能力概述
本组件支持声明式配置 + 模板扩展命令(主要在rackmount仓的interface_config/目录下),无需改动核心代码。
3.2 扩展点说明
| 扩展点 | 位置 | 作用 |
|---|---|---|
| 接口配置 JSON(rackmount仓) | interface_config/{ipmcget,ipmcset}/*.json |
URI → 后端调用映射、参数校验、回显引用 |
| 回显模板(rackmount仓) | interface_config/echoes/** |
自定义输出格式(Lua 模板引擎) |
| 客户/产品定制(rackmount仓) | interface_config/customer/**interface_config/<platform_board>/ |
按客户/产品替换配置与模板 |
| 自定义路由脚本(cli组件仓) | src/lualib/route/** |
复杂命令定制逻辑(如 SOL activate) |
3.3 二次开发指导
openUBMC社区的CLI接口采用接口映射配置方案实现,需要将命令配置到json文件中。CLI命令的接口映射配置文件位于 rackmount 代码仓的 interface_config/cli 路径下。参考社区文档:
4. 问题定界指南
快速定位:提示不完整/Usage 异常 → 参数解析层(ipmc.lua);Invalid Command/类型未注册 → 命令执行层;输出格式不符/模板缺失 → 回显层;登录提示符/超时/COMMAND NOT SUPPORTED → 受限 Shell 层(src/clp/)。
典型问题:
| 现象 | 可能原因 | 定位 |
|---|---|---|
Invalid Command |
接口配置缺 URI 或命令类型未注册 | 运行日志搜 Invalid command type |
Request failed. |
后端服务返回错误 | 查后端服务日志 |
COMMAND NOT SUPPORTED |
verb 未注册或功能未使能(如 passwd) |
检查 help 输出与 Enabled 开关 |
| 任务命令卡在进度 | 任务对象异常 | 运行日志搜 get task failed |
关键错误码(src/clp/libs/common/inc/clp.h):241 FUNCTION_NOT_SUPPORTED、245 REQUIRED_OPTION_MISSING、253 COMMAND_NOT_RECOGNIZED、254 COMMAND_NOT_SUPPORTED、255 COMMAND_ERROR_UNSPECIFIED;口令相关 0x83 用户锁定、0x96 初始口令需重置等。
复现方法:
① ipmcget --verbose=debug -d <dataitem> 开日志;
② 底层直调排除 Shell 干扰(见 2.1);
③ 核对 interface_config 配置;
④ busctl/mdbctl 直接访问后端对象判断问题在 CLI 层还是后端。
5. FAQ
Q1:ipmcget/ipmcset 报 Invalid Command?
命令未命中合法接口配置,或命令执行类型未注册。检查 interface_config 下 URI 配置;app日志搜 Invalid command type。
Q2:配置命令返回 Request failed.?
命令已下发但后端返回错误。查app日志,或 --verbose=debug 提升日志级别。
Q3:受限 Shell 里 passwd 显示 COMMAND NOT SUPPORTED?
CLI 的 passwd 未使能(bmc.kepler.Cli.Command 的 Enabled 为false)。确认功能开关已打开(见2.1 应用场景 / 限制条件)。
# 查看 passwd 命令状态
mdbctl get /bmc/kepler/openubmc/Cli/Command/passwd bmc.kepler.Cli.Command Enabled
Q4:一键日志包在哪?
默认 /tmp/dump_info.tar.gz,可用 ipmcget -d diaginfo -v <path> 指定。
Introduction
Provide CLI login capabilities, consisting of a restricted shell and ipmcget/ipmcset commands
Customize your domain