minimega 2.3 release notes¶
Introduction¶
The minimega development team is pleased to announce the release of minimega 2.3. This release includes several key new features designed to make experiments more portable and numerous bug fixes. This release contains many changes to the existing API which will improve user experience and programmability.
What's new¶
Major changes and milestones¶
namespaces¶
The largest change is the addition of namespaces which is described in a separate article. In short, namespaces allows experimenters to build more portable environments that are automatically scheduled across a cluster by minimega.
minirouter¶
The second largest change is the addition of minirouter. minirouter also has a separate article describing its use and features. In short, minirouter allows for the configuration of router functionalities such as DHCP, DNS, IPv4/IPv6 assignments and, of course, routing, from the minimega command line.
VLAN aliases¶
In order to better support experiment portability, minimega now supports VLAN aliases. Instead of manually specifying VLAN numbers, users may now supply an alias which minimega will map to a VLAN. This mapping is per-namespace so the same alias can exist in multiple namespaces. For more information, see the VLAN article.
qos API¶
We have added a new API, qos, that allows users to add quality-of-service
constraints on network interfaces. Currently, we support limiting traffic rates,
delaying packets, and dropping packets at different rates. See help qos for
more information.
vnc API¶
The vnc API has been majorly rewritten to add new capabilities and ensure
compatibility with experiments built using namespaces. See the updated
VNC article for details.
miniccc refactoring¶
We have made improvements to miniccc that include changes to the wire format
between miniccc and minimega. As a result, VM images that include previous
versions of miniccc will need to be updated.
Python bindings¶
We have removed the python bindings from this release.
Additional new features¶
.filter API¶
There are now four patterns for filters:
minimega$ .filter host=ccc1 vm info
minimega$ .filter host!=ccc1 vm info
minimega$ .filter host~ccc vm info
minimega$ .filter host!~ccc vm info
The latter two being substring matching.
.alias/.unalias APIs¶
There are two new APIs to create and delete aliases. Aliases allow you to
create shorthands for frequently typed commands. For example:
Note that aliases are not broadcast out to mesh peers -- you must create the alias everywhere you wish to use it.
vm save API¶
minimega's typical usage makes this API unnecessary so we have removed it.
vm info API¶
Since the addition of containers, many new columns have been added to vm info
which can make it hard to read without nesting it in a .columns command. We
have added a new flag, vm info summary, that includes a useful subset of the
vm info columns.
host API¶
Added vms and vmsall columns for the number of running VMs on the host in
the current namespace and across namespaces, respectively. Added uptime
column for uptime of the host.
read API¶
There is a new flag on the read API to check whether all the commands in the
file are syntactically valid.
disk API¶
Added a new subcommand, disk info, to inspect a disk image.
debug API¶
Added memory and CPU profiling to the debug API. This is mostly useful for
minimega developers trying to understand and improve the underlying performance
of minimega.
log syslog API¶
minimega can now write logs to the syslog daemon running locally or remotely.
cc process API¶
In 2.2, we added the cc process API to inspect and kill processes started with
cc background. We have extended the cc process kill API to add wildcard
support to kill all processes. We also added a cc process killall <name> API
to kill processes matching <name> rather than providing a PID.
cc filter tag=... API¶
cc commands can now additionally filter on VM tags. For example:
If users wish, they may drop the tag= prefix and key=value pairs will be
treated as tags:
minicli improvements¶
minicli now truncates history to 10,000 entries to avoid an out-of-memory crash. There is currently no API to change this limit.
minicli is smarter about sorting integer columns -- it now compares them as integers rather than strings so the values will be in numerical order.
minicli now handles escaped quotes embedded within quoted strings:
minimega$ vm config tag foo "foo bar"
minimega$ vm config tag
{"foo":"foo bar"}
minimega$ vm config tag foo "foo \"bar\""
minimega$ vm config tag
{"foo":"foo \"bar\""}
It also now supports empty strings as arguments:
And a few new escape sequences:
minimega$ vm config tag foo "test\ntest"
minimega$ vm config tag
{"foo":"test\ntest"}
minimega$ vm config tag foo "test\r\ntest"
minimega$ vm config tag
{"foo":"test\r\ntest"}
minimega$ vm config tag foo \#
minimega$ vm config tag
{"foo":"#"}
nfcat¶
minimega has been able to record raw netflow from the capture API since the 1.0 release but there was no tool to actually read the raw data and produce an ASCII output. nfcat does just that -- it can read one or more raw netflow files and produce an ASCII output.
minifuzzer¶
We have added a new tool to test minimega via fuzzing. minifuzzer generates minimega commands with random arguments and executes them until minimega exits.
protonuke improvements¶
The largest protonuke improvement is client and server support for a new
protocol: DNS. Support for http/https has been improved in several ways: there
is a new flag, -httpgzip, to enable gzip'd responses; -httpimagesize now
supports different suffixes including B, KB, and MB; and on a POST request, the
server now responds with a 202 Accepted response. Finally, there is a new flag,
-tlsversion, which allows you to control what version of TLS you want to use.
New CLI prefixes¶
Last release, we added the file: prefix to reference files stored in
iomeshage. In this release, we add three new prefix. The http:// and
https:// prefixes can be used to reference remote resources hosted on an HTTP
or HTTPs server. These resources will be fetched and stored in iomeshage. We
have also added an env prefix ($) that replaces strings with the value of the
corresponding environment variable. If the environment variable is not set, an
error is returned.
-context flag¶
We renamed the -namespace flag to -context to avoid confusion with the
concept of namespaces. The functionality is still the same.
miniccc tag upstreaming¶
VMs can now control their own destiny -- by pushing tags up to minimega.
Specifically, VMs can now invoke miniccc -tag <key> <value> to push a tag to
the command and control server which will then be recorded in the VM's tags.
Ctrl-C like bash¶
We now mostly replicate bash's Ctrl-C behavior in minimega. The only thing that is different is that the reverse history line gets cleared when searching is aborted by Ctrl-C.
Web interface improvements¶
We have updated the web interface to include some new features and visual changes. The sections of the web interface have been broken into separate pages, so that users can open different and/or multiple views in different browser tabs or windows. The columns displayed in the VMs list have been expanded with additional information, and can be individually toggled for display. The search functionality has been fixed and will now search the full text of all the columns in a table as expcted. There are additional visual indication improvements for VMs without screenshots, high host resource utilization, etc. Note that the auto-refresh behavior of the tables will automatically disable when there are more than 500 VMs, to prevent browser performance degradation.
Web console for containers and VNC changes¶
To make it easier to interact with containers, we have added a javascript-based console. In the current implementation, only one user can connect to the console at a time.
Additionally, to make it more seamless to interact with containers and VMs through the web interface, we have consolidated access to a single URL with a single parameter -- the name of the container or VM.
Bug fixes¶
bandwidth on taps¶
A bug was fixed that was causing minimega to report the wrong bandwidth for taps. The reported bandwidth should be much more accurate now.
Deprecation¶
The following functionality is deprecated in this release and will be removed in a future release:
vyatta API¶
This API has been superseded by minirouter.
Addressing VMs by ID¶
In a namespace environment, it is dangerous to reference VMs by ID. IDs are only unique per-host and, therefore, there may be more than one VM with the same ID in a namespace. VM names are unique across a namespace and are now the preferred way of listing VMs to start, kill, etc.
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 7 (wheezy) and 8 (testing/jessie) and ubuntu 16.04.
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.6+ compiler, libreadline, and libpcap headers.