#!/bin/sh1#2# Copyright (c) 2014 Craig Rodrigues3# All rights reserved.4#5# Redistribution and use in source and binary forms, with or without6# modification, are permitted provided that the following conditions7# are met:8# 1. Redistributions of source code must retain the above copyright9# notice, this list of conditions and the following disclaimer.10# 2. Redistributions in binary form must reproduce the above copyright11# notice, this list of conditions and the following disclaimer in the12# documentation and/or other materials provided with the distribution.13#14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF24# SUCH DAMAGE.25#2627usage()28{29echo ""30echo "$0 CONF=[configuration file]"31echo ""32}3334# Allow users to pass in from the command line35# $0 A=VAL1 B=VAL236#37# which will set the A and B variables38for f in $@;39do40if [ "$f" != ${f%%=*} ]; then41eval $f42shift43fi44done4546if [ -z "${CONF}" -o ! -f "${CONF}" ]; then47usage48exit 149fi5051. ${CONF}5253PIDFILE=/var/run/vmm/${VM}.pid54if [ -f ${PIDFILE} ]; then55PID=$(pgrep -F $PIDFILE bhyve 2> /dev/null)56if [ -n "$PID" ]; then57echo ""58echo "${PIDFILE} exists. Not starting ${VM}"59echo ""60exit 161else62rm -f ${PIDFILE}63fi64fi6566if [ -e /dev/vmm/${VM} ]; then67/usr/sbin/bhyvectl --vm=${VM} --destroy68fi6970mkdir -p /var/run/vmm71(72while true73do74CONS_A=/dev/nmdm${VM}A75CONS_B=${CONS_A%%A}B76touch ${CONS_A}77echo "Starting BHyve virtual machine named '${VM}'. Use 'cu -l ${CONS_B}' to access console"78cmd="/usr/sbin/bhyveload -m ${MEM} -d ${IMG} -c ${CONS_A} ${VM}"79$cmd80ret=$?81if [ $ret -ne 0 ]; then82echo "[FAILED]: $cmd"83exit $ret84fi85ifconfig ${BRIDGE} up86touch ${CONS_A}87pidfile="/var/run/vmm/${VM}.pid"88cmd="/usr/sbin/bhyve -c ${CPU} -m ${MEM} -A -H -P -g 0 -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,${TAP},mac=${MAC} -s 3:0,virtio-blk,${IMG} -l com1,${CONS_A} ${VM}"89$cmd &90cmd_pid="$!"91echo -n $cmd_pid > ${pidfile}92wait %193bhyve_status=$?94rm -f ${pidfile}95if [ $bhyve_status -ne 0 ]; then96break97fi98done99) &100101102