脚本Virtualbox创建网络
Scripting Virtualbox to create networks
我知道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。
我希望这对你有帮助!
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 我的神经网络不起作用 [XOR 问题]
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- OpenCV 无法从树莓创建的 gstreamer 打开网络流
- 根据网络消息c++创建列表
- 使用创建文件打开网络文件失败,并显示FILE_NOT_FOUND
- 在qt中创建另一个网络线程
- 在 omnet++ 中创建 n(n 取自用户)节点的网络
- Qt创建一个等待网络事件的对话框
- 正在创建针对WinXP x64的WDM网络驱动程序-从何处启动
- 网络数据包创建/解析库
- 尝试在c++中创建一个神经网络
- 脚本Virtualbox创建网络
- 用c++创建高性能网络服务器
- 如何使用Python或c++创建通用网络代理
- 网络编程-如何在C++中创建UDP套接字的示例
- 优化网络图创建
- 通过网络创建文件
- 创建一个网络虚拟硬盘/文件系统