Qemu仿真应用之冒烟测试篇

Qem使用指南: 指导如何一步步使用qemu
Qemu仿真应用之模拟事件篇: 指导如何模拟触发事件告警
Qemu仿真应用之新增板块篇:指导如何替换板卡

现在,跟各位朋友一起来学习如何将qemu用于冒烟测试

Qemu冒烟测试

常见的冒烟测试都是运行在流水线上,但其实冒烟测试也可以运行在本地。在这里,我将会从如何在流水线上搭建qemu冒烟测试和在本地搭建qemu冒烟测试两个维度进行

冒烟测试框架

openUBMC冒烟测试是基于Robot Framework为基底,采用北向接口(cli、web、redfish和ipmi)来调用和测试openUBMC组件。

测试框架的搭建和用例编写可以参考qemu组件仓的/test/docs,也欢迎各位一起来搭建和完善测试框架和用例

Robot Framework简介

Robot Framework 是一个开源的自动化测试框架,主要用于验收测试和自动化流程。它采用关键字驱动和数据驱动的方式,使得测试用例易于编写和维护,适合功能测试、API测试、UI 测试 等场景。

Robot Framework的特点

  • 关键字驱动:测试用例由可复用的关键字组成,降低编码门槛
  • 易于扩展:支持 Python、Java 等语言编写自定义库
  • 跨平台:支持 Windows、Linux、macOS
  • 丰富的库生态:提供 Selenium、Requests、Appium、SSHLibrary 等扩展库
  • 支持数据驱动:可以使用 CSV、Excel、数据库等方式管理测试数据
  • 集成报告 & 日志:自动生成 HTML 报告和日志,方便调试和分析

核心语法

  • *** Settings ***(配置区) 定义测试套件的全局设置
  • *** Variables ***(变量区) 定义全局变量
  • *** Test Cases ***(测试用例区) 编写测试用例
  • *** Keywords ***(自定义关键字区) 封装可复用的操作

如何快速基于openUBMC的测试框架写一个测试用例

在这里,以一个ipmi测试用例为例,一步步地完成ipmi测试用例编写

*** Settings ***
Documentation           搭建ipmitool工具所需要的命令和变量
Resource                ../resource.robot
Library                 OperatingSystem
Library                 BuiltIn

*** Keywords ***
Run External Ipmi Command
    [Documentation]     使用带外ipmitool工具运行ipmi命令
    [Arguments]    ${command}
    ${ipmi_cmd}=    Set Variable    ipmitool -H ${OPENUBMC_HOST} -U ${OPENUBMC_USERNAME} -P ${OPENUBMC_PASSWORD} -p ${IPMI_PORT} -C ${IPMI_C} -I lanplus ${command}
    Log    Command Input: ${ipmi_cmd}
    ${rc}    ${output}=    Run And Return Rc And Output    ${ipmi_cmd}
    RETURN    ${rc}    ${output}

上面是ipmi.robot文件的内容

keywords: 关键字区,每个关键字相当于其他语言的函数
[Documentation]: 描述这个关键字的作用
[Arguments]: 描述关键字函数的入参,即需要的参数
${ipmi_cmd}: 构建ipmi命令,例如: ipmitool -H 127.0.0.1 -U Administrator -P Admin@90000 -p 10623 -C 17 raw 0x06 0x01
Log: 打印日志
Run And Return Rc And Output: robot framework封装的关键字,用于运行命令,命令执行成功返回0,否则返回非0
${rc}: 用于标记命令运行与否:命令执行成功返回0,否则返回非0
${output}: 运行ipmi命令的返回内容
RETURN: 函数输出

*** Settings ***
Documentation               通过ipmi接口测试openUBMC的设备id
Resource                    ../../test_function/ipmi/ipmi.robot
Library                     OperatingSystem
Library                     BuiltIn

Test Tags                   Ipmi_Device_Id

*** Variables ***
${input}                    raw 0x06 0x01
${expected_rc}              ${0}
${expected_output}          00 00 01


*** Test Cases ***
Get IPMI Device ID
    [Documentation]    带认证的IPMI设备ID测试
    [Tags]  Get_Device_Id
    ${rc}    ${output}=  Run External Ipmi Command    ${input}
    Log    Command Output: ${output}
    Should Be Equal    ${rc}    ${expected_rc}    msg=${output}
    Should Contain    ${output}    ${expected_output}

一个.robot文件就是一个测试套件,然后
Settings:一般用来描述整个测试套件的依赖项

  1. Documentation: 主要是用来描述这个测试套件的用途
  2. Resource: 资源文件,文件类型为.robot或.resource,包括可复用的关键字、变量定义和测试用例
  3. Library: 测试库,文件类型为.py文件或Java库,提供底层实现的函数/类方法
  4. Test Tags: 套件级标签,可以和单个测试用例的标签结合起来一起定义某个测试用例

Variables:变量区
一般存放该测试套件所需要的变量,如果很多套件都需要使用某个变量,例如openubmc的账号和密码,建议存放在test_function/resource.robot中,减少参数的使用】
${input}: ipmi命令的输入
${expected_rc}: 是否运行ipmi命令成功的标签,0:表示成功运行,非0:表示运行失败
${expected_output}: 运行ipmi命令成功后的返回值

Test Cases:测试用例区
一个.robot文件就是一个测试套件,一个测试套件可以存放多个测试用例,测试用例区用于存放测试用例的
Get IPMI Device ID:测试用例名称
[Documentation]:用来描述测试用例的名称
[Tags]: 这个测试用例的标签
Run External Ipmi Command:就是ipmi.robot里面的关键字,详细见上面

断言判断(重要):
Should Be Equal:判断${rc}和${expected_rc}是否相同,例如:如果${rc}=0和${expected_rc}=0,则相同
Should Contain:判断输出${output}是否包含${expected_output},如果${output} = db 07 00 00 00 01,${expected_output} = 00 00 01,则包含

更加详细的描述可见:docs/robotframework的测试框架.md和docs/断言判断的种类.md

冒烟测试流程

在qemu组件仓的test/smoke_test中主要存放了冒烟测试的代码:

  1. qemu/test/smoke_test/execute.py主要用来存放判断qemu是否连接web成功的代码
def try_web_access(port):
    url = "https://127.0.0.1:{}/UI/Rest/Login".format(port)
    retcode = -1
    session = requests.Session()
    session.trust_env = False
    try:
        with warnings.catch_warnings():
            warnings.simplefilter(
                "ignore", category=requests.packages.urllib3.exceptions.InsecureRequestWarning)
            response = session.get(url, timeout=10, proxies={}, verify=False)
            retcode = response.status_code
    except requests.exceptions.RequestException as e:
        pass
    return retcode == 200

2.qemu/test/smoke_test/install_dependency.py 用来存放安装robot framework依赖项的代码,若您这边采用其他冒烟测试框架,可以直接替换test/requirements.txt即可

def install_dependency():
    # 安装requirements里面的依赖项
    try:
        subprocess.run(
            ["pip", "install", "-r", "requirements.txt"],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True,
        )
        print("✅ 依赖安装成功!")
    except subprocess.CalledProcessError as e:
        print(f"❌ 依赖安装失败!错误信息:\n{e.stderr}")
        close_qemu()
        sys.exit(1)
  1. qemu/test/smoke_test/testing.py存放冒烟测试代码

在这里,我们采用两种方式:

  • OPENUBMC_HOST=xx.xx.xx.xx SSH_PORT= HTTPS_PORT= robot -A test_lists/QEMU_CI redfish/ ipmi/
    这种方式巧妙利用robot framework的标签特性,只需要在test_lists/QEMU_CI的文件中放入需要测试用例的标签,运行的时候会去自动从测试用例文件中筛选对应的测试用例
# 验证cli命令
--include Get_Maca_Status_Via_cli
--include Get_BCU_HW_Info_Via_cli
--include Get_Network_Adapter_Via_cli
--include Get_DeviceLocator_Info_Via_cli
--include Get_BMC_Version_Via_cli
...
  • robot -v OPENUBMC_HOST:xx.xx.xx.xx redfish ipmi
    这种方式是运行 redfish ipmi这两个测试用例文件夹下所有的测试用例

当然,robot framework测试运行方式是多种多样的,具体可以参考qemu/test/README.md

流水线冒烟测试

整体流程

用于manifest仓冒烟测试的流水线示意图

  1. 开发者向manifest仓提交pr
  2. ci门禁会自动将pr和远程的openUBMC的manifest仓合并,生成具有开发者修改的manifest仓
  3. 基于manifest仓采用bingo build -sc qemu构建出qemu仿真镜像包
  4. 结合远程qemu二进制工具拉起在manifest仓拉起qemu
  5. 通过判断web是否连接成功来判断qemu是否启动成功
  6. 若web连接成功,拉起远程测试代码仓,进行冒烟测试
  7. 无论是否成功,都会返回测试报告和关闭qemu

核心代码(更详细代码可以参考ci-repos/manifest/scripts/smoke_test.sh):

# 1.prepare env
echo "======start to prepare env======"
cur_path=$(pwd)

chmod +x /root/repo/ci-repos/.common_scripts/common.sh
source /root/repo/ci-repos/.common_scripts/common.sh
prepare_git $1 $2
prepare_conan $3 $4
prepare_bingo
prepare_sdk

# 2. 下载conan缓存
echo "======conan cache====="
prepare_qemu_cache

# 3. 构建仿真镜像包
echo "======Start build bmc simulation mirror package====="
cd $cur_path
bingo build -sc qemu

# 4.运行qemu(后台运行+日志记录)
echo "======Start running qemu===="
running_qemu

# 5.下载测试代码
# 扩展性:未来社区开发者可以替换为自己的自动测试代码仓并在里面执行冒烟测试脚本
echo "======Download test code===="
download_testing_code

# 6.进行冒烟测试
# 冒烟测试脚本是存放在自动测试代码仓的
echo "======Start smoke testing===="
smoke_testing

流水线效果

本地冒烟测试

若需要本地运行冒烟测试,您只需要做两件事:

  1. 在manifest仓运行qemu:具体可以见Qem使用指南
  2. 拉取qemu组件仓代码,直接执行如下命令:
sh test/smoke_test.sh
3 个赞

想确认下:这个robot framework冒烟测试是不是不仅基于 Qemu,而是覆盖整个 openUBMC 的看护?它并不是转测阶段的 SIT 测试吧?在整体流程中它属于哪个环节?我们这边要部署的话是基于版本构建后到转测阶段,还是算到转测前

openUBMC社区的robot framework测试框架不仅仅局限于冒烟测试,还可以用于自动化测试等等,但是目前测试用例偏少,还不能覆盖整个openUBMC的看护,需要补充用例。再者,robot framework不仅仅是可以用在qemu环境,也可以用在真实物理服务器。现阶段的冒烟测试用例只是用于合入manifest的门禁,看护openUBMC社区的基础功能。您这边如果想部署的话,基于当前用例最好是转测前。当然我们这边很欢迎各位小伙伴能够往里面添加更多的用例,使其能够灵活用在转测前、转测中、转测后,自动化测试等等各个阶级,业界的robot framework框架是支持上述能力的!欢迎一起探讨!

1 个赞

好,我们学习使用下。

在执行冒烟测试的时候报下载qemu_drivers失败


手动执行下载也是报

想问一下老师,社区上现在是只有索引没有包吗

当初qemu_drivers的下载链接是阿里云的,存在下载缓慢,现在我们设置了使用华为openUBMC基础设施的,可以看这个pr,因为看到你们的远程仓是自己的,不是openubmc_dev,可以看看是不是这个问题哈

好的,我们的仓库是虚拟仓,已经整合了社区仓库了,不知道为什么会报这个问题,那我这边从社区上下载下来再上传到本地仓库试一下

好的,咨询构建的同事,他们说从qemu_drivers里面看没有看到连接你们虚拟仓的的过程,也有可能是这个问题

这个如果作为转测前,以及转测后的冒烟测试还是可以做下,但是如果做成转测后的特性测试感觉就不太适合了,工作量会比较大,和itestsmart那边用例会有很大冲突,真要做也是可以,就是工作量是重复性的,如果后面1000多个itestsmart扩展到1万多个,两边压力确实会大一些。社区有达尔文平台是兼容itestsmart的用例的,达尔文是服务平台,itestsmart是客户端平台,客户端平台是需要手动,落到本地还是robot_framework会更轻松,可以基于jenkins实施,我先尝试下把robot_framework作为转测后冒烟测试集成到我们平台,后面再看看特性测试有没有必要搞全自动化的。

无论是转测前、转测后的冒烟测试,还是特性测试,其实更多的是取决于测试用例。不过您也提到了很关键的一点:目前社区测试平台:达尔文、itestsmart还有robot framework的定位和各自优缺点是需要进一步探索的,目前robot framework的冒烟测试用例已经迁移至QA的test code,后续我们也将会在那里进行演进,欢迎你继续为我们提供宝贵的建议。

老师,你好,现在冒烟测试已经到了启动QEMU之后的状态了,但是一直是卡在这里

warning: state file /var/lib/logrotate.status is world-readable and thus can be locked from other unprivileged users. Skipping lock acquisition...
[e[0;32m  OK  e[0m] Finished e[0;1;39mPermit User Sessionse[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mGetty on ttyS0e[0m.
[e[0;32m  OK  e[0m] Reached target e[0;1;39mLogin Promptse[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mRsyslog Logging Servicee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mibmc tpcm modulee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mibmc file transfer modulee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mA server which sup…active communication protocole[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mD-Bus System Message Buse[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mUser Login Managemente[0m.
         Starting e[0;1;39mframework servicee[0m...
rm: can't remove '/dev/shm/MDBUS_SHM_LOCK_MANAGER': No such file or directory
[e[0;32m  OK  e[0m] Started e[0;1;39mframework servicee[0m.
         Starting e[0;1;39malarm servicee[0m...
         Starting e[0;1;39mbmc_core servicee[0m...
         Starting e[0;1;39menergy servicee[0m...
         Starting e[0;1;39mfault_diagnosis servicee[0m...
         Starting e[0;1;39msecurity servicee[0m...
[e[0;32m  OK  e[0m] Started e[0;1;39mfault_diagnosis servicee[0m.
e[re[He[3J

Authorized uses only. All activity may be monitored and reported.
localhost login: pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand

使用python3 build/works/packet/qemu_shells/vemake_1711.py >qemu_stdout.log 2>qemu_stderr.log,然后把qemu_stdout.log的日志粘贴出来

e[K[e[0;31m*e[0;1;31m*e[0me[0;31m*   e[0m] (1 of 2) A start job is running for…cal Compatibility (43s / no limit)
eM
e[K[e[0;1;31m*e[0me[0;31m*    e[0m] (2 of 2) A start job is running for…r Login Management (44s / 4min 1s)
eM
e[K[e[0me[0;31m*     e[0m] (2 of 2) A start job is running for…r Login Management (44s / 4min 1s)
eM
e[K[e[0;1;31m*e[0me[0;31m*    e[0m] (2 of 2) A start job is running for…r Login Management (45s / 4min 1s)
eM
e[K[e[0;31m*e[0;1;31m*e[0me[0;31m*   e[0m] (1 of 2) A start job is running for…cal Compatibility (45s / no limit)
eM
e[K[ e[0;31m*e[0;1;31m*e[0me[0;31m*  e[0m] (1 of 2) A start job is running for…cal Compatibility (46s / no limit)
eM
e[K[  e[0;31m*e[0;1;31m*e[0me[0;31m* e[0m] (1 of 2) A start job is running for…cal Compatibility (46s / no limit)
eM
e[K[   e[0;31m*e[0;1;31m*e[0me[0;31m*e[0m] (2 of 2) A start job is running for…r Login Management (47s / 4min 1s)
eM
e[K[    e[0;31m*e[0;1;31m*e[0m] (2 of 2) A start job is running for…r Login Management (47s / 4min 1s)
eM
e[K[     e[0;31m*e[0m] (2 of 2) A start job is running for…r Login Management (48s / 4min 1s)
eM
e[K[    e[0;31m*e[0;1;31m*e[0m] (1 of 2) A start job is running for…cal Compatibility (48s / no limit)
eM
e[K[   e[0;31m*e[0;1;31m*e[0me[0;31m*e[0m] (1 of 2) A start job is running for…cal Compatibility (49s / no limit)
eM
e[K[  e[0;31m*e[0;1;31m*e[0me[0;31m* e[0m] (1 of 2) A start job is running for…cal Compatibility (49s / no limit)
eM
e[K[ e[0;31m*e[0;1;31m*e[0me[0;31m*  e[0m] (2 of 2) A start job is running for…r Login Management (50s / 4min 1s)
eM
e[K[e[0;31m*e[0;1;31m*e[0me[0;31m*   e[0m] (2 of 2) A start job is running for…r Login Management (50s / 4min 1s)
eM
e[K[e[0;1;31m*e[0me[0;31m*    e[0m] (2 of 2) A start job is running for…r Login Management (51s / 4min 1s)
eM
e[K[e[0me[0;31m*     e[0m] (1 of 2) A start job is running for…cal Compatibility (51s / no limit)
eM
e[K[e[0;1;31m*e[0me[0;31m*    e[0m] (1 of 2) A start job is running for…cal Compatibility (52s / no limit)
eM
e[K[e[0;31m*e[0;1;31m*e[0me[0;31m*   e[0m] (1 of 2) A start job is running for…cal Compatibility (52s / no limit)
eM
e[K[ e[0;31m*e[0;1;31m*e[0me[0;31m*  e[0m] (2 of 2) A start job is running for…r Login Management (53s / 4min 1s)
eM
e[K[  e[0;31m*e[0;1;31m*e[0me[0;31m* e[0m] (2 of 2) A start job is running for…r Login Management (53s / 4min 1s)
eM
e[K[   e[0;31m*e[0;1;31m*e[0me[0;31m*e[0m] (2 of 2) A start job is running for…r Login Management (54s / 4min 1s)
eM
e[K[    e[0;31m*e[0;1;31m*e[0m] (1 of 2) A start job is running for…cal Compatibility (54s / no limit)
eM
e[K[     e[0;31m*e[0m] (1 of 2) A start job is running for…cal Compatibility (55s / no limit)
eM
e[K[    e[0;31m*e[0;1;31m*e[0m] (1 of 2) A start job is running for…cal Compatibility (55s / no limit)
eM
e[K[   e[0;31m*e[0;1;31m*e[0me[0;31m*e[0m] (2 of 2) A start job is running for…r Login Management (56s / 4min 1s)
eM
e[K[  e[0;31m*e[0;1;31m*e[0me[0;31m* e[0m] (2 of 2) A start job is running for…r Login Management (56s / 4min 1s)
eM
e[K[ e[0;31m*e[0;1;31m*e[0me[0;31m*  e[0m] (2 of 2) A start job is running for…r Login Management (57s / 4min 1s)
eM
e[K[e[0;31m*e[0;1;31m*e[0me[0;31m*   e[0m] (1 of 2) A start job is running for…cal Compatibility (57s / no limit)
eM
e[K[e[0;1;31m*e[0me[0;31m*    e[0m] (1 of 2) A start job is running for…cal Compatibility (58s / no limit)
eM
e[K[e[0me[0;31m*     e[0m] (1 of 2) A start job is running for…cal Compatibility (58s / no limit)
[   64.674842] hisport_cdev: 1322, ioremap:0x40000000
[   64.720895] 73,1970-01-01 00:01:04,2008,jlc_ram_init,980,jlc 0x0 ram init timeout!
[   64.721320] 74,1970-01-01 00:01:04,2008,cpld_probe,1035,jlc[0x0]_map_addr ioremap error!
[   64.838300] 75,1970-01-01 00:01:04,2008,jlc_ram_init,980,jlc 0x0 ram init timeout!
[   64.838613] 76,1970-01-01 00:01:04,2008,cpld_probe,1035,jlc[0x0]_map_addr ioremap error!
eM
e[K[e[0;1;31m*e[0me[0;31m*    e[0m] (2 of 2) A start job is running for…r Login Management (59s / 4min 1s)
[   65.415513] FS-Cache: Loaded
[   65.464559] CacheFiles: Loaded
[   65.576113] RPC: Registered named UNIX socket transport module.
[   65.576324] RPC: Registered udp transport module.
[   65.576429] RPC: Registered tcp transport module.
[   65.576525] RPC: Registered tcp NFSv4.1 backchannel transport module.
eM
e[K[e[0;31m*e[0;1;31m*e[0me[0;31m*   e[0m] (2 of 2) A start job is running for…r Login Management (59s / 4min 1s)
[   65.724006] FS-Cache: Netfs 'nfs' registered for caching
[   65.934924] FS-Cache: Netfs 'cifs' registered for caching
[   65.937366] Key type cifs.idmap registered
[   66.021027] device-mapper: ioctl: 4.43.0-ioctl (2020-10-01) initialised: dm-devel@redhat.com
eM
e[K[ e[0;31m*e[0;1;31m*e[0me[0;31m*  e[0m] (2 of 2) A start job is running for… Login Management (1min / 4min 1s)
[   66.328947] cryptd: max_cpu_qlen set to 1000
eM
e[K[  e[0;31m*e[0;1;31m*e[0me[0;31m* e[0m] (1 of 2) A start job is running for…al Compatibility (1min / no limit)
eM
e[K[e[0;32m  OK  e[0m] Started e[0;1;39m/etc/rc.local Compatibilitye[0m.
e[K[e[0;32m  OK  e[0m] Started e[0;1;39mstart logrotate timere[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mstart partition usage monitor timere[0m.
[e[0;32m  OK  e[0m] Reached target e[0;1;39mTimer Unitse[0m.
         Starting e[0;1;39mD-Bus System Message Buse[0m...
[e[0;32m  OK  e[0m] Started e[0;1;39mstart logrotate servicee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39msystem memory monitore[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mstart partition usage monitor servicee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39msystem process memory monitore[0m.
warning: state file /var/lib/logrotate.status is world-readable and thus can be locked from other unprivileged users. Skipping lock acquisition...
[   67.072199] memory_monitor. (2125): drop_caches: 4
         Starting e[0;1;39mRsyslog Logging Servicee[0m...
         Starting e[0;1;39mPermit User Sessionse[0m...
[e[0;32m  OK  e[0m] Finished e[0;1;39mPermit User Sessionse[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mGetty on ttyS0e[0m.
[e[0;32m  OK  e[0m] Reached target e[0;1;39mLogin Promptse[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mRsyslog Logging Servicee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mibmc tpcm modulee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mibmc file transfer modulee[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mA server which sup…active communication protocole[0m.
[e[0;32m  OK  e[0m] Started e[0;1;39mD-Bus System Message Buse[0m.
         Starting e[0;1;39mframework servicee[0m...
[e[0;32m  OK  e[0m] Started e[0;1;39mUser Login Managemente[0m.
rm: can't remove '/dev/shm/MDBUS_SHM_LOCK_MANAGER': No such file or directory
[e[0;32m  OK  e[0m] Started e[0;1;39mframework servicee[0m.
         Starting e[0;1;39malarm servicee[0m...
         Starting e[0;1;39mbmc_core servicee[0m...
         Starting e[0;1;39menergy servicee[0m...
         Starting e[0;1;39mfault_diagnosis servicee[0m...
         Starting e[0;1;39msecurity servicee[0m...
[e[0;32m  OK  e[0m] Started e[0;1;39mfault_diagnosis servicee[0m.
e[re[He[3J

Authorized uses only. All activity may be monitored and reported.
localhost login: pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand
pcie_card.json change...
bash: The: unknown operand

目前看起来是由于登录卡主了,能不能给一下manifest的commit节点给我看看呢?git log,有可能是当初某个节点导致没有适配的问题


只截了前7个commit,都是我们基于930发布版本做开发的提交记录

这是930发布版本的commit

目前看已经带上了这个修改,有可能是开发代码导致的问题,请问能不能先不带自己修改出一次qemu看看有没有问题呢?

qemu_stdout.txt (68.2 KB)

老师,你好,之前的问题已经解决了,现在出现的问题是BMC不能正常连接,无论是CI还是在本地都是无法正常连接BMC

连接BMC是需要一定时间的哈,这个时间还和电脑性能相关。可以先在本地运行qemu,然后使用这个文档来看看能不能跑一遍流程:【教学培训篇】体验openUBMC - CICD SIG - openUBMC 论坛或这个wiki:Qemu使用指南 - CICD SIG - openUBMC 论坛,然后先排查是不是这个问题。然后在本地运行的日志可以提供一下哈,我们一起看看

这边看到还是之前连接不来的问题:在login的时候卡住了,估计是代码修改了哪里导致卡住了,我这边晚点也回退到那个节点,构建和运行qemu,看看有没有这个问题哈。不过概率比较低哈因为9月30发布的时候,我们有充分验证过