我目前有小型虚拟机来进行某些测试(它有多种好处 - 例如在另一个发行版 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客户端来连接端口更方便。