在qemu提供的大量选项中,我无法确定最适合我的用例的方法。
这就是我想要做的:
- 一切都由主机上的bash脚本控制。
- 有一个运行FreeBSD的qemu来宾VM。
显然,涵盖更多客户机操作系统的答案更有价值,但现在我只需要FreeBSD。
- 具有启动来宾VM的shell命令,捕获终端输出,直到出现登录提示,然后终止。
命令终止后,VM必须继续运行。
如果引导过程未到达登录提示,则shell命令必须返回错误代码。
并发症:Unixoid引导加载程序倾向于显示引导菜单,并带有一个计时器,该计时器会自动选择要引导的默认内核。我将留给每个人如何最好地处理该问题的答案-也许是单个命令,也可能是将命令分成两个。最好不要仅等待启动菜单,因为这样可以加快操作速度。
- 具有一个shell命令,该命令输入用户名和密码,等到命令提示符出现并终止。
- 具有一个进入命令行的shell命令,捕获所有输出,直到出现下一个命令提示符,然后终止。
除在命令行上向guest虚拟机发送关闭命令外,任何命令都不应终止VM。
我还需要一些命令进行交互使用:
- 将全屏命令输入给来宾,将键盘输入传递给来宾控制台,然后将所有来宾控制台输出传递给主机终端的操作。这样,我可以使用终端与控制台进行交互。
这可以帮助我运行脚本,然后检查来宾日志文件等。
- 用于强制关闭VM的命令。
我已经确定了许多看起来可以提供帮助的工具,但是我不太确定它们是否真的是最适合工作的工具,甚至根本不适合:
- 使用后缀
&
显然很容易在后台启动VM。
- 我可能可以使用
expect
来监视输出流并检测填充行“我看到命令提示符”和“我看到登录提示符”。
- 有很多选项可以将qemu的模拟虚拟控制台重定向到终端。我的主要问题是我不知道哪个选项真正适用。
- 我知道qemu提供了一种称为“监视器”的东西,但是我真的不知道它的作用以及它是否适用。我怀疑它最适合交互式使用,但是我不确定它是否真的是最佳选择。
- 调整端子大小似乎无法正常进行。但是,如果交互式命令在启动guest命令之前只是设置适当的环境变量,我会感到高兴。
请随时在评论中进行澄清;我仍然在问什么问题。