Introduction
The minimega team is pleased to announce the release of minimega 2.6. This release includes many new features, improvements, and bug fixes. This release contains changes to the existing API which will improve user experience and programmability.
What’s new
Major changes and milestones
tap mirror API
Allows users to create mirrors between VM taps so that VMs can monitor the traffic of other VMs.
PR #1221.
vm config colocate API
To support tap mirror which needs VMs to be scheduled on the same host, we added the vm config colocate API to specify that the new VM should be scheduled on the same host as an existing VM.
PR #1222.
Disk snapshots
Remove the -snapshot flag from the qemu args and instead create snapshots of the disks when the VM first launches. These are saved in the VM instance directory and can be saved in the future. minimega now warns if you configure a VM with more than 4 IDE disks.
GRE meshes for namespace
Automatically creates GRE or VXLAN tunnels on a separate bridge for a namespace. Very experimental and subject to change.
PR #1263.
Additional new features
minicli improvements
Reduce the overhead for minicli to parse commands.
PR #1184.
miniclient redial
Too many minimega -e’s can cause minimega’s listen queue to fill up and start rejecting new miniclients. Add redial/backoff when we detect a temporary error.
PR #1185.
optimize API
Make the optimize API mostly work with namespaces. hugepages and affinity can be set per namespace. ksm is set globally.
PR #1199.
file stream API
Add API to stream a file from the iomeshage directory. This is used by miniweb to serve files from this directory back to users via the browser. Note that due to the way minimega processes commands, this works for small files but large files will cause minimega to wait until the file is fully downloaded before continuing.
PR #1126.
vm config vga, vm config sockets, vm config threads APIs
Add new APIs to set additional QEMU parameters.
PR #1240.
ns dry-run API
Dry run of the scheduler that prints out VM placement. User can then edit the placement as needed before running it. Rename ns schedules to ns schedule status. Fix bug in schedule status where launched VMs weren’t being counted properly.
PR #1247.
vnc API
Many improvements to the underlying code. Add WaitForIt and ClickIt events to vnc playback. Uses a template image to wait for a something to appear on the screen (WaitForIt) and then click the center of it (ClickIt).
Instance symlinks
minimega now creates symlinks so that users can reference VMs in the minimega directory by namespace and UUID.
vm cdrom API
Add “force” option to the eject API.
PR #1272.
vm config virtio-ports API
Users can now specify a list of named virtio ports or a number of virtio ports to automatically generate names for (old behavior).
PR #1296.
VM names
minimega now sanitizes VM names since it creates directories and argument strings using them.
deploy API
Add subcommands to specify files to write stdout and stderr to.
PR #1263.
bridge API
Add subcommand to configure bridge. Add key option to differentiate tunnels.
PR #1263.
mesh API and host completion
mesh size is one when there is only a single node. Add completion for mesh send, mesh hangup, vm config schedule, ns add-hosts and ns del-hosts. Add mesh list peers and mesh list all subcommands. Resolve localhost for vm config schedule.
PR #1319.
cc tunnel API
Allow tunnels to be specified based on VM name or UUID.
PR #1342.
vm launch API
Add option to specify a saved VM config name to launch.
PR #1326.
Output coalescing
minimega now coalescing repeated patterns in output strings as opposed to just prefixes. For example, foo1.bar and foo2.bar would coalesce to foo[1-2].bar.
PR #1327.
cc APIs
Shove the command ID into the Data field of responses so that scripts can easily determine which command they issued.
PR #1346.
Dependencies checks
minimega now warns if it does not detect the kvm kernel module.
PR #1348.
vm flush API
Allow flushes to occur in parallel, speeding up flushing large experiments.
PR #1353.
Documentation updates
Updated several articles. The layout for articles was updated to include the header and sidebar.
Auxiliary Tools
minitest
Sort errors to make tests more reliable.
PR #1250.
igor
Many new features and improvements. igor will likely be migrated to a separate repo with separate release notes during the next release cycle.
minirouter
Add support for basic BGP routing.
PR #1206.
vmbetter
Add build constraints to control what gets built in different contexts. Add option to specify target name. Change -qcow to -disk and add the option to specify the disk format (currently allows qcow, qcow2, raw, and vmdk). Rename -qcowsize to -size. Change the default mbr location so that it matches debian.
Python bindings
Improve performance using readline. Drop timeout option since we cannot use readline in non-blocking mode. Add as_dict helper.
miniweb
Revert noVNC back to previous version due to problems with v1.0.0. Change -console flag to string to allow specifying a path to minimega’s domain socket. Add new VM page to launch a VM from a saved config.
Bug fixes
vm volume API
Automatically create the volume source if it does not exist.
PR #1208.
Filesystem does not exist
If a container filesystem does not exist, minimega will now print a more useful error message.
PR #1244.
Clogged containers
Fix issues with container filesystems failing to unmount.
PR #1245.
Quoting with minimega -e
Fix an issue with quoted commands.
PR #1294.
vm qmp API
The API now attempts to unmarshal the JSON object before sending it to QMP to prevent malformed JSON from borking the connection.
PR #1273.
vm config schedule API
minimega will now return an error if the host is not in the namespace at the time vm config schedule is called.
PR #1303.
Properly handle connection errors
Fix a rare crash in minimega due to connection errors.
PR #1325.
cc response API
Fix missing responses when using prefixes.
PR #1341.
vm config cpu API
Fix bug where we ignored the first line of output in versions where QEMU does not include a header.
PR #1328.
vm info API
Fix a bug where the VM PID was not copied to the head node.
PR #1352.
.alias API
Fix double expansion and only replace the first full word on a line.
PR #1362.
Availability
minimega is available in several ways, both as pre-built distributions and source. See the installing guide for more information.
Debian package
minimega is available as an x86-64 debian package, available here. It is known to work in debian 9 (stretch) and ubuntu 16.04. It is known not to work on debian 10 (buster).
tarball
A pre-built, x86-64 distribution is available in a single distributable tarball here. It should be sufficient to simply unpack the tarball and run tools from the bin/ directory directly. Most default paths in minimega, vmbetter, and other tools are built to be used in this way (i.e. bin/minimega, which will then look for the web directory in misc/web).
Building from source
Source of the entire distribution is available on Github. Follow the directions for cloning or forking minimega on github.com. In order to build minimega, you will need a Go 1.10+ compiler and libpcap headers.