- Introduction
- Launch Interactively
- Launch Daemon
- minimega Attach
- minimega -e
- Command Port
- Bash Script
- Stopping minimega
Introduction
minimega can now be started. KVM requires special permissions and minimega must be run as root unless permissions are modified.
Launch Interactively
You can start minimega in your current session, but if the connection fails, minimega will close
# minimega minimega$
Launch Daemon
It is recommended to instead run minimega as a daemon
# minimega -nostdin &
There are multiple ways to interact with the daemon
minimega Attach
You can attach to the daemon and execute multiple commands using minimega’s attach flag
# minimega -attach minimega$
minimega -e
You can execute a single command with the -e flag
# minimega -e host name foo
Command Port
There is also a Unix domain socket that accepts JSON encoded commands located at <base>/minimega. The JSON encoded commands and responses use the following schema.
{ "name": "Command", "properties": { "Original": { "type": "string", "description": "string form of command, with arguments separated by whitespace", "required": true }, } } { "name": "localResponse", "properties": { "Resp": { "type": "array", "items": { "type": "Response" } "description": "array if responses to a single command" }, "Rendered": { "type": "string", "description": "pre-rendered output of the Resp object according to output rendering rules" }, "More": { "type": "bool", "description": "true if additional responses to the command are incoming" }, } } { "name": "Response", "properties": { "Host": { "type": "string", "description": "host this response was created on" }, "Response": { "type": "string", "description": "simple string response (exclusive to Header/Tabular) }, "Header": { "type": "array", "items": { "type": "string" }, "description": "column headers for tabular data" }, "Tabular": { "type": "array", "items": { "type": "array", "items": { "type": "string" } }, "description": "tabular data, each column is an array of strings" }, "Error": { "type": "string", "description": "Error, if any" } } }
Bash Script
Here is a bash script that helps with various tasks such as logging as well as launching minimega. You may find it useful when launching minimega.
#!/bin/sh #Run as root #Delete old logs: rm -f /var/log/mini.log #SSD Maintenance: #USE IF SSD fstrim -v / #Sync time. ntpdate time.nist.gov; #minimega starts its own dnsmasq process having the service running can cause issues service dnsmasq stop; #clean up potential things that were left by orphaned minimega instances: rm -rf /tmp/mini.log rm -rf /tmp/minimega/ mkdir -p /tmp/; mkdir -p /tmp/files; # Make sure certain kernel functions exist # These two will fail if you attempt to put minimega in a VM without nesting support modprobe kvm_intel; modprobe kvm; # Needed networking components modprobe openvswitch; modprobe 8021q; # Define the max number of partitions so nbd-mount won't error modprobe nbd max_part=8; # Finally launch minimega in a tmux process that will keep running even if networking fails. tmux kill-session -t minimega 2>/dev/null tmux new -s minimega -d tmux send-keys -t minimega "cd /home/ubuntu/minimega" C-m tmux send-keys -t minimega "bin/minimega -degree 4 -nostdin -filepath="/data/mmfiles" -context ${1} -logfile="/var/log/mini.log" -console -v=false" C-m # Start a web interface to interact with minimega on port 9001 tmux kill-session -t miniweb 2>/dev/null tmux new -s miniweb -d tmux send-keys -t miniweb "cd /home/ubuntu/minimega && sleep 5" C-m tmux send-keys -t miniweb "bin/miniweb" C-m
Which you can then make executable with:
chmod +x launchme.sh
And run with:
./launchme.sh mynamespace
Stopping minimega
There are a number of ways to stop minimega. Let’s go over some of the ways.
Gracefully
The most graceful way is to run the quit command twice
root@ubuntu:~# minimega -attach CAUTION: calling 'quit' will cause the minimega daemon to exit use 'disconnect' or ^d to exit just the minimega command line minimega:/tmp/minimega/minimega$ quit CAUTION: calling 'quit' will cause the minimega daemon to exit If you really want to stop the minimega daemon, enter 'quit' again minimega:/tmp/minimega/minimega$ quit 2016/08/25 14:07:04 FATAL client.go:90: server disconnected
Nuke
Sometimes quit
doesn’t always work. The minimega api documents a nuke
command.
After a crash, the VM state on the machine can be difficult to recover from.
Nuke attempts to kill all instances of QEMU, remove all taps and bridges, and removes the temporary minimega state on the harddisk. This should be run with caution.
root@ubuntu:~# minimega -nostdin & [1] 31597 root@ubuntu:~# minimega, Copyright (2014) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. root@ubuntu:~# minimega -attach CAUTION: calling 'quit' will cause the minimega daemon to exit use 'disconnect' or ^d to exit just the minimega command line minimega:/tmp/minimega/minimega$ nuke 2016/08/25 14:11:08 ERROR container.go:1507: cgroup_root unmount: no such file or directory 2016/08/25 14:11:09 FATAL client.go:90: server disconnected [1]+ Done minimega -nostdin
Pkill
There may be times where there is no minimega console to attach to in those cases you can use pkill
. Note this will not clean up networking taps, bridges, clean up state, or delete logs.
root@ubuntu:~# minimega -nostdin & [1] 31617 root@ubuntu:~# minimega, Copyright (2014) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. root@ubuntu:~# ps aux | grep mini root 31617 0.4 0.9 229824 19640 pts/1 Sl 14:13 0:00 minimega -nostdin root 31630 0.0 0.0 14224 1088 pts/1 S+ 14:13 0:00 grep --color=auto mini root@ubuntu:~# pkill mini [1]+ Done minimega -nostdin root@ubuntu:~# pkill qemu root@ubuntu:~# ps aux | grep mini root 31636 0.0 0.0 14224 1084 pts/1 S+ 14:13 0:00 grep --color=auto mini
Reboot
Use caution before doing a reboot.
If minimega reconfigured networking upon reboot there is a chance dhcp won’t work, and you will have to manually connect with a keyboard and mouse to fix networking.
Make sure PXE boot is not enabled in the bios by default, or you could delete everything upon reboot.
Depending on your hardware a reboot can take 30s-15min
With that said a reboot usually fixes a number of things.
reboot
Authors
The minimega authors
30 May 2017