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:

vm config disk file:foo.qcow2

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:

0:LoadFile,browse_slashdot.vnc
10000000000:LoadFile,/home/john/recordings/reboot_windows.vnc

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.