The Open Virtualisation Format
(Wikipedia page)
describes a standard packaging format for distributing virtual
machines, particularly virtual appliances. (OVF 1.1 was adopted
as an ANSI standard in
2010.)
The basic OVF package is a directory containing multiple files.
VMWare have an OVF tool
for working with OVF in a VMWare ESXi/Fusion/Workstation environment.
An .ova
file (an Open Virtual
Appliance)
is effectively a tar archive of an OVF package, which is
easier to distribute.
As part of my continuing effort not to install Oracle VirtualBox, I found VMWare's description of importing Oracle VirtualBox virtual machines into VMWare Fusion, when attempting to deal with SDNCon's distribution of a MiniNet environment as an Oracle VirtualBox 1.3GB OVA file. (This bloated distribution format seems to be encouraged by MiniNet, even though MiniNet definitions are just small Python classes that use a small Python module, both much smaller than 1.3GB.)
Once the .ova
file is created and downloaded, the normal .ova
import process into VMware
Fusion
is simple:
Launch VMWare Fusion
Choose File -> Import...
Click on the "Choose File..." button and locate the
.ova
file, then click on "Continue"Enter a Virtual Machine name and destination to store the virtual machine, then click on "Save"
In the case of the SDNCon MiniNet environment, the OVF specification conformance or virtual hardware compliance checks failed, and a dialogue was displayed offering to cancel, or retry with relaxed checks -- so I told it to try again with relaxed checks. It created an Ubuntu 64-bit VM, with 1GB of RAM, an 8GB hard drive, and Private-to-host networking. I chose to pre-generate a MAC address for that network interface, in order to get a stable IP from DHCP. It appears the VM tried to connect to a CD-ROM drive on my machine, which does not exist (zero-spindle laptop), so I told it to start the VM without that device. (Possibly that was the hardware compliance check that failed.)
That SDNCon Mininet environment is an Ubuntu 13.04 ("Raring Ringtail")
VM (with about 700 packages installed), which appears to have had
MiniNet's install-mininet-vm.sh
run on it. The ~mininet/mininet
directory contains a git clone of the MiniNet GitHub
directory. Beyond that, there
is a ~mininet/RF.py
MiniNet network class (using an external
controller with a hard coded IP), and a ~/mininet/simple_switch_13.py
Ryu application, and Ryu 3.11 installed under /usr/local
somehow.
It does have Wireshark installed, but it is an old version (1.8.2),
apparently with an older OpenFlow dissector (I am not sure which one; there
are two in ~/mininet
: ~/mininet/ofdissector
is for
OF 1.1/1.2 and marked as deprecated, and the other, in ~minnet/of-dissector
seems to be from a year old version from
Bitbucket). The latest
Wireshark release -- 1.12 -- ships with a built in OpenFlow 1.3 dissector,
but that does not seem to be the one installed.
According to the SDNCon MiniNet release announcement it is intended to be compatible with the Vandervecken ISO (itself based on a still older version of Ubuntu Linux -- 12.04 LTS). Following my earlier notes on installing the Vandervecken image to a harddrive allowed me to adjust both virtual machines to have a compatible network environment so they would talk to each other.
I found that I had to explicitly specify a compatible dpid, viz:
s1 = net.addSwitch('s1', dpid='0000000000000099', cls=OVSKernelSwitch)
in my copy of RF.py
before Vandervecken's controller would actually
route traffic, but otherwise it did seem to work. At least with the
Vandervecken controller from 2014-07-16 (the ISO image seems to
have changed since I last downloaded it; I'm unclear how it has changed).
Other than the MiniNet-created switch defaulting to OpenFlow 1.3, there does not appear to be much that is significantly different to the MiniNet environment I built myself, based on Ubuntu 14.04 LTS. And the MiniNet/Vandervecken hookup worked basically the same as I found previously.