minimega

a distributed VM management tool

The minimega repository includes more than just minimega. It also contains several supporting programs for building VM images, managing clusters, and generating traffic.

miniweb: web interface for minimega

miniweb is a standalone websever for minimega. See miniweb's documentation for more information.

vmbetter: Create Virtual Machine Images

vmbetter is a tool that takes a configuration file and outputs a minimega-bootable, Debian-based VM. It can create custom initrd images, CD ISOs, or QEMU-compatible hard disk images. You can specify a list of Debian packages to install, insert any additional files you wish, and give a list of commands to run after the filesystem has been built (to perform any last-minute configuration).

igor: Cluster Reservations

igor lets you make reservations and, on properly-configured clusters, set up reserved nodes to boot from user-specified kernel+initrd files. See igor's documentation for more information.

powerbot: Networked PDU Control

powerbot allows you to control outlets on networked Power Distribution Units. It currently supports TrippLite and Server Tech PDUs, and it's easy to add support for additonal devices! powerbot's documentation describes how to set up and use it.

rfbplay: Playback for VNC recordings

rfbplay plays vnc recordings created by minimega using `vnc fb record` in the browser or transcribes them using ffmpeg. See the VNC documentation for more information.

vncdrone: automated VNC replayer

vncdrone takes VNC kb/mouse recordings and replays them on compatible VMs. It looks at the recording filename, finds VMs using a disk with a matching filename (modulo the file extension), and start the vnc replay on all matching VMs.

nfcat: read minimega binary netflows

minimega's `capture` API can write netflow records in a binary format which can be read with nfcat. nfcat dumps the records to stdout in ASCII format.

minitest: runtime testing

minitest is a testing tool for minimega -- it uses a corpus of tests to determine whether minimega gets the expected response for a series of commands. See the minitest documentation for more information.

minifuzzer: simple fuzzer for minimega

minifuzzer generates random minimega commands and runs them on a minimega instance to find crashes.

passwordify: modify credentials for ramdisk images

This utility installs a root password or root SSH keys in a ramdisk image. It is intended to help prevent interference between users on a cluster by implementing login controls on the bootable image. Running `sudo passwordify SOURCE NEW` will unpack the *source* ramdisk image, prompt for a root password, and re-pack it into the specified *new* file, leaving the source unchanged. The `-keys` flag allows you to specify an authorized_keys formatted file (one public key per line) to be installed in the ramdisk's `/root/.ssh/authorized_keys`; this can be used to allow key-based root login. Specifying the `-passwordless` flag will configure the image such that its own RSA keys are in its authorized_keys file, which will allow multiple nodes booted from the same image to ssh to each other without needing password input.

rond: standalone command-and-control server

minimega includes a `ron` server to provide command-and-control for VMs. rond is a standalone command-and-control server with its own CLI to control physical machines running miniccc.

vmconfiger: code generation

vmconfiger generates the `vm config` APIs automatically for minimega. Only developers that are changing the VMConfig structs will need to use this. It runs automatically with `go generate`.