You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Github Actions中正确向QEMU CLI传入参数?

问题分析与解决方案

核心问题

你拆分的三个GitHub Actions步骤是完全独立的shell会话:

  • 第一个步骤启动QEMU后,进程会阻塞在QEMU的交互式终端,直到QEMU退出;
  • 第二个步骤的sleep 10是在主机的shell里执行,和QEMU进程无关;
  • 第三个步骤的root、1234等命令,也是直接在主机shell里运行,根本没有发送到QEMU的控制台输入,自然无法完成登录。

解决方案

要向QEMU的交互式终端传入命令,必须在同一个进程会话里完成QEMU启动和命令输入,推荐用以下两种方式:

方式一:用expect脚本实现自动化交互(最可靠)

expect可以模拟交互式终端的输入输出,精准匹配登录提示符并发送命令。

修改后的GitHub Actions步骤:

- name: 启动QEMU并自动完成登录测试
  run: |
    sudo --user user1 --shell << EOF
      # 先加载Yocto的bitbake环境(替换为你实际的环境脚本路径)
      source /path/to/oe-init-build-env your-build-dir
      
      # 编写expect自动化脚本
      cat > qemu_auto_test.exp << 'END_SCRIPT'
        spawn runqemu nographic slirp qemuarm64
        # 等待登录提示符出现
        expect "login:"
        # 输入用户名root
        send "root\r"
        # 等待密码提示符
        expect "Password:"
        # 输入密码1234
        send "1234\r"
        # 等待命令行提示符(#)
        expect "#"
        # 执行测试命令
        send "echo \"已进入QEMU系统\"\r"
        # 关闭QEMU
        send "poweroff\r"
        # 等待进程结束
        expect eof
      END_SCRIPT
      
      # 执行expect脚本
      expect qemu_auto_test.exp
    EOF

方式二:用管道+延迟传递命令(简单但不稳定)

如果你的环境没有expect,可以通过管道把命令序列传给QEMU,靠sleep等待提示符出现(但依赖启动速度,可能需要调整延迟时间):

- name: 启动QEMU并通过管道传入命令
  run: |
    sudo --user user1 --shell << EOF
      source /path/to/oe-init-build-env your-build-dir
      # 按顺序发送命令,每个命令前加延迟确保QEMU已准备好
      (
        sleep 15;  # 等待QEMU启动到登录界面
        echo "root";
        sleep 3;   # 等待密码提示符
        echo "1234";
        sleep 2;
        echo "echo \"In qemu\"";
        sleep 2;
        echo "poweroff"
      ) | runqemu nographic slirp qemuarm64
    EOF

额外注意事项

  1. 必须确保在启动runqemu前加载了Yocto的环境变量(source oe-init-build-env),否则runqemu无法找到镜像文件;
  2. GitHub Actions虚拟机资源有限,QEMU启动可能比本地慢,需要适当延长sleep的等待时间;
  3. 确认Yocto镜像的实际配置:有些镜像可能默认禁用root登录、不需要密码,或者用户名不是root,提前检查镜像的/etc/passwd和/etc/shadow配置。

内容的提问来源于stack exchange,提问作者Matthew Putra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:22:44