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.