minimega 2.2 release notes¶
Introduction¶
The minimega development team is pleased to announce the release of minimega 2.2. This release includes several key new features, including support for full system containers, and numerous bugfixes. In addition, several changes to the existing API have been for improved user experience and programmability.
What's new¶
Major changes and milestones¶
containers¶
The most notable feature of this release is support for full system containers
as a new VM type. minimega can boot a mixture KVM and container based VMs.
Describing container based VMs is identical to KVM type (with some additional
configuration parameters), and all VM lifecycle commands and behaviors are the
same (start, stop, launch, kill, networking, ...). minimega uses a custom
container implementation that is very fast and can scale to several thousand
containers on a single node (more than 8000 in our testing).
More information can be found in the VM types article.
disk API¶
The vm inject API has been replaced by the new disk API. Previously, the
vm inject API allowed you to fork disk images and inject files in a single
command. The disk API splits this and adds new capabilities such as creating
new images and injecting with special mount options.
file: prefix¶
To make it easier to reference files stored in iomeshage, the meshage-based
file transfer layer provided by minimega, we have added a file: prefix that
can be used anywhere minimega expected a file. For example, if a remote node
has a file foo.qcow2, and you want to use it locally as a disk image:
This will cause minimega to automatically fetch foo.qcow2 from the remote
node before executing the command. See the file
guide for more information.
Additional new features¶
cc on by default¶
The command and control layer, cc, is now enabled by default over both TCP
and the networkless backchannel options. When booting KVM based VMs, a
virtio-serial device is created by default in \\.\Global\cc, and on container
based VMs a UNIX domain socket is created in /cc.
See the cc tutorial for more information.
Process control in miniccc¶
A new cc process API has been added to inspect and kill processes started
with cc background.
See the cc tutorial for more information.
dnsmasq runtime configuration¶
A new dnsmasq configure API has been added to support adding static IP,
hostname to IP DNS entries, and DHCP options to running dnsmasq instances.
See the dnsmasq API for more information.
log filter API¶
minimega can generate quite a bit of logging information, especially when
debug logging is enabled. The log filter API now lets you discard log entries
based on a simple string search.
minitest improvements¶
minitest, the minimega test framework, has been improved to add support for
prologs and epilogs. These files are run before and after all test files,
respectively, and run commands that prepare minimega for tests and clean up
afterwards. Additionally, we have added several new tests to test newer
features.
Unified vm info view¶
minimega 2.1 introduced a suffix for displaying VM info by VM type. This has
been replaced with a unified view. KVM or container specific fields are simlpy
left blank when displaying vm info of a VM of the other type. This enables
simpler parsing and automation of vm info data.
vm config cpu API¶
By default, minimega uses the -host option when specifying the CPU type for
KVM type VMs. You can now override this with the vm config cpu flag.
vm config tag API¶
Users can provide arbitrary key-value pairs to any running VM using the
vm tag API. To extend this, users can now assign tags before launching VMs
using the vm config tag API. This allows setting tags during VM description
and launching multiple VMs with the same starting tags.
New protonuke flags¶
Along with several bugfixes, protonuke can now be configured to use a user provided TLS cert instead of the runtime-generated (and invalid) certificate. Additionally, users can specify the size of the served image in the built-in HTTP and HTTPS servers.
See the protonuke article for more information.
rootfs support in vmbetter¶
vmetter can now produce rootfs filesystems suitable for building container
images. See the vmbetter help for more information.
Scripted multi-file VNC playback¶
minimega supports a new action in stored vnc kb files: LoadFile. When a vnc
playback is in process and it encounters this action, playback will continue
with all the actions in the loaded file, returning to the original file after
all actions have been completed. Users may want to use this to discretize the
actions in their playback files (e.g. unlock screen, open browser, ...).
For example:
Improved tab completion¶
In 2.1, we added tab completion for minimega commands. In 2.2, we've made a small improvement to the tab completion so that the longest common prefix of the remaining completions is automatically added to the line when you strike the TAB key.
Leveraging the new file: API described above, we are also able to complete
filenames across the mesh. Simply strike the TAB key for a filename prefixed by
file: to see the list of possible completions.
Version checking in minimega, miniccc¶
minimega and miniccc have both been updated to include checks for the
remote client versions during their handshakes. This may affect users in two
ways. If a cluster is running multiple versions of minimega, minimega will
warn the user. Likewise, minimega will warn the user if it connects to
miniccc running in a VM whose version does not match minimega's.
These changes will alert the user much sooner about a version mismatch and prevent subtle bugs in experiments due to version mismatches.
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).
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.