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.
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.
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
disk API splits this and adds new capabilities such as creating
new images and injecting with special mount options.
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.
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
See the cc tutorial for more information.
cc process API has been added to inspect and kill processes started
See the cc tutorial for more information.
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.
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.
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
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.
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.
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
vm config tag API. This allows setting tags during VM description
and launching multiple VMs with the same starting tags.
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.
vmetter can now produce rootfs filesystems suitable for building container
images. See the
vmbetter help for more information.
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`, ...).
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.
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
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.
minimega is available in several ways, both as pre-built distributions and source. See the installing guide for more information.
minimega is available as an x86-64 debian package, available here. It is known to work in debian 7 (wheezy) and 8 (testing/jessie).
A pre-built, x86-64 distribution is available in a single distributable tarball
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
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.