libvirt 可以检查虚拟机是否完全启动吗?可以用别的工具吗?

libvirt 可以检查虚拟机是否完全启动吗?可以用别的工具吗?

我目前有小型虚拟机来进行某些测试(它有多种好处 - 例如在另一个发行版 Fedora 15 上进行测试,以及运行时make distcheck不会出现污染问题/)。

不过,我想自动化测试,并且希望能够以编程方式(例如,使用 sh、python、c...)执行以下操作:

  • qemu从本地映像无头启动 VM ( )
  • 等到虚拟机完全启动(这是最难的部分 - 最初我想到了魔法睡眠)
  • 在主机和来宾之间同步存储库(此时不需要)
  • ./autogen && make && sudo make install && sudo make distcheck在机器上执行
  • 从机器下载生成的 tarball

我开始阅读相关内容libvirt,它可能允许我使用 API 来实现这一点。虽然这需要来宾支持并且我找不到相关文档,但这种能力似乎是libvirt.

是否可以检查机器是否完全启动?有现成的工具可以做到这一点吗?

编辑:完全启动是指系统 rc 脚本已完成执行/所有应该启动的 systemd 服务已启动。我知道 qemu 无法知道它何时发生,但我假设客户方提供支持。

答案1

Afaik,libvirt 不知道“完全启动”是什么意思(我也不知道)。您可以创建一个在启动期间连接到您的主机(或另一台机器)的服务。或者您可以尝试循环连接到您的访客,例如使用 ssh。

另一种解决方案是依赖与主机通信的现有服务,例如 vdagent。您可以轻松编写一个spice-gtk python脚本,该脚本将等待Spice代理通道连接(参见spicy.c示例,状态栏指示代理的存在)

注意,测试“make distcheck”不应该污染 / 并且不需要 sudo。如果确实如此,则看起来像是您的 makefile 中存在问题。

答案2

为什么不直接制作一个在其他脚本之后运行并记录“完全启动”消息的 rc 脚本呢?然后将 syslog 转发到 vm 主机,并等待该消息出现在主机上的日志文件中。

无论如何,这就是我会做的。

答案3

您可以在虚拟机中安装此工具: http://wiki.libvirt.org/page/Qemu_guest_agent Qemu_guest_agent 会告诉你虚拟机何时完全启动。

您还可以在vm中安装spice guest代理。如果spice guest代理已启动,则vm已完全启动。

答案4

这可能与 libvirt 无关。对于完全启动的客户机,可能会侦听某些端口,对于 Linux,可能是 22,对于 Windows,可能是列出的某个端口这里。您可以用来nc测试访客是否侦听该端口。

有些时候nc并不是最好的选择(超时选项nc不起作用),写一个简单的TCP客户端来连接端口更方便。

相关内容