如何使用同一终端窗口与主机外壳和qemu guest虚拟机的控制台进行交互?

时间:2019-02-26 20:44:08

标签: qemu

在qemu提供的大量选项中,我无法确定最适合我的用例的方法。

这就是我想要做的:

  • 一切都由主机上的bash脚本控制。
  • 有一个运行FreeBSD的qemu来宾VM。
    显然,涵盖更多客户机操作系统的答案更有价值,但现在我只需要FreeBSD。
  • 具有启动来宾VM的shell命令,捕获终端输出,直到出现登录提示,然后终止。
    命令终止后,VM必须继续运行。
    如果引导过程未到达登录提示,则shell命令必须返回错误代码。
    并发症:Unixoid引导加载程序倾向于显示引导菜单,并带有一个计时器,该计时器会自动选择要引导的默认内核。我将留给每个人如何最好地处理该问题的答案-也许是单个命令,也可能是将命令分成两个。最好不要仅等待启动菜单,因为这样可以加快操作速度。
  • 具有一个shell命令,该命令输入用户名和密码,等到命令提示符出现并终止。
  • 具有一个进入命令行的shell命令,捕获所有输出,直到出现下一个命令提示符,然后终止。

除在命令行上向guest虚拟机发送关闭命令外,任何命令都不应终止VM。

我还需要一些命令进行交互使用:

  • 将全屏命令输入给来宾,将键盘输入传递给来宾控制台,然后将所有来宾控制台输出传递给主机终端的操作。这样,我可以使用终端与控制台进行交互。
    这可以帮助我运行脚本,然后检查来宾日志文件等。
  • 用于强制关闭VM的命令。

我已经确定了许多看起来可以提供帮助的工具,但是我不太确定它们是否真的是最适合工作的工具,甚至根本不适合:

  • 使用后缀&显然很容易在后台启动VM。
  • 我可能可以使用expect来监视输出流并检测填充行“我看到命令提示符”和“我看到登录提示符”。
  • 有很多选项可以将qemu的模拟虚拟控制台重定向到终端。我的主要问题是我不知道哪个选项真正适用。
  • 我知道qemu提供了一种称为“监视器”的东西,但是我真的不知道它的作用以及它是否适用。我怀疑它最适合交互式使用,但是我不确定它是否真的是最佳选择。
  • 调整端子大小似乎无法正常进行。但是,如果交互式命令在启动guest命令之前只是设置适当的环境变量,我会感到高兴。

请随时在评论中进行澄清;我仍然在问什么问题。

0 个答案:

没有答案