【问题标题】:Scripting Virtualbox to create networks编写 Virtualbox 脚本以创建网络
【发布时间】:2011-11-08 14:39:25
【问题描述】:

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

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

一个用例可能是:我在我的 GUI 上放置了 3 个虚拟机,选择它们各自的操作系统,为每个虚拟机创建 1 个或多个网络连接,然后连接这些虚拟机以创建网络。

Python、C++等,实现语言无所谓。

[1]http://www.virtualbox.org/manual/ch01.html#frontends

【问题讨论】:

  • 好吧,我想我已经等够了,看到 Mitchell 你的答案正是我需要知道的,我认为无法给出更好的答案。

标签: c++ python networking virtualbox


【解决方案1】:

我回答这个问题的资格是我自 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 进程通信。它也是完整的,因为这与 VirtualBox GUI 使用以及内部使用的 API 相同。主要缺点是 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 版本。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2011-01-31
    • 2013-02-07
    • 2019-06-03
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2013-02-12
    • 2019-08-23
    相关资源
    最近更新 更多