脚本Virtualbox创建网络

Scripting Virtualbox to create networks

本文关键字:网络 创建 Virtualbox 脚本      更新时间:2023-10-16

我知道VB提供了很多东西来控制它:SDK, API, COM, web服务器等

我想做的是有一个GUI来简单地创建通过网络连接的VM,但我必须知道:使用前端[1],web服务器,COM*或API的最佳解决方案是什么?

一个用例的例子可能是:我在GUI上放置3个VM,选择它们各自的操作系统,为每个VM创建1个或多个网络连接,并将这些VM连接起来创建网络。

Python、c++等,实现语言不重要。

[1] http://www.virtualbox.org/manual/ch01.html前端

回答这个问题的资格是我自2010年初创建并维护了Vagrant。以下是我对每个可用的VirtualBox脚本前端的总体看法:

  • vboxwebsrv是VirtualBox web服务,它提供了一个API来控制VirtualBox。这样做的好处是,现在的web服务很容易编程。主要的缺点是,您必须手动处理启动和停止此web服务(或检查以确保它已经运行)。从历史上看,web服务并没有完全与每个版本的VirtualBox中可用的最新api同步,但我不确定今天的状态是什么。

  • COM or C API。VirtualBox在非Windows平台上提供基于XPCOM的API,在Windows平台上提供基于MSCOM的API。如果你不能使用c++,你也可以使用Linux上的C API(但它在Windows上不可用/导出)。我使用这个API一年多了。优点:快速和完整。因为它是一个C API,所以它非常快,可以直接与VirtualBox进程通信。它也是完整的,因为这是相同的API, VirtualBox GUI正在使用以及内部使用。主要的缺点是XPCOM并不容易,而C API在Windows上不可用,这意味着你要么必须痛苦地使用XPCOM,要么需要同时处理C和MSCOM。我选择了后者,结果却是一场兼容性的噩梦。几乎VirtualBox的每个小版本(3.1、3.2等)都会以向后不兼容的方式(轻微)改变API,而一个主要版本,你可以完全忘记(3.0、4.0等)。这使得处理旧版本的VirtualBox…棘手。这绝对是高级用例。

  • VBoxManage是VirtualBox基于CLI的前端。在表层之下,VBoxManage当然只是使用基于com的API,但在它之上提供了一个更加用户友好的表层。我发现对于99%的用例,VBoxManage可以覆盖它。VBoxManage还处理所有错误处理,执行适当的退出状态(0表示成功,非零表示其他一切),等等。在使用了1.5年的C API之后,我又回到了VBoxManage,因为它更容易使用,而且可以做我需要做的事情。缺点是您必须使用子进程来与VBoxManage对话。优点是VBoxManage的更改相对较少,因此它可以很容易地支持多个版本的VirtualBox。

我希望这对你有帮助!