Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Aug 2014 21:00:18 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r269397 - stable/10/share/examples/bhyve
Message-ID:  <201408012100.s71L0I2D006524@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Fri Aug  1 21:00:18 2014
New Revision: 269397
URL: http://svnweb.freebsd.org/changeset/base/269397

Log:
  MFC 256657,257423,264837,267559:
  Sync vmrun.sh with HEAD:
  - Add -e option to vmrun.sh passed to bhyveload(8) to set loader
    environment variables.
  - Stop passing unused -I option to bhyve(8).
  - Reformat the usage to fit in 80 colums and other cleanups.
  - Add -C option to specify the console device.
  - Add -H option to pass a host path to bhyveload(8).
  - Support for multiple disk and tap devices.

Modified:
  stable/10/share/examples/bhyve/vmrun.sh
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/share/examples/bhyve/vmrun.sh
==============================================================================
--- stable/10/share/examples/bhyve/vmrun.sh	Fri Aug  1 20:49:27 2014	(r269396)
+++ stable/10/share/examples/bhyve/vmrun.sh	Fri Aug  1 21:00:18 2014	(r269397)
@@ -34,17 +34,25 @@ FBSDRUN=/usr/sbin/bhyve
 DEFAULT_MEMSIZE=512M
 DEFAULT_CPUS=2
 DEFAULT_TAPDEV=tap0
+DEFAULT_CONSOLE=stdio
 
 DEFAULT_VIRTIO_DISK="./diskdev"
 DEFAULT_ISOFILE="./release.iso"
 
 usage() {
-	echo "Usage: vmrun.sh [-hai][-g <gdbport>][-m <memsize>][-d <disk file>][-I <location of installation iso>][-t <tapdev>] <vmname>"
+	echo "Usage: vmrun.sh [-ahi] [-c <CPUs>] [-C <console>] [-d <disk file>]"
+	echo "                [-e <name=value>] [-g <gdbport> ] [-H <directory>]"
+	echo "                [-I <location of installation iso>] [-m <memsize>]"
+	echo "                [-t <tapdev>] <vmname>"
+	echo ""
 	echo "       -h: display this help message"
-	echo "       -a: force memory mapped local apic access"
+	echo "       -a: force memory mapped local APIC access"
 	echo "       -c: number of virtual cpus (default is ${DEFAULT_CPUS})"
+	echo "       -C: console device (default is ${DEFAULT_CONSOLE})"
 	echo "       -d: virtio diskdev file (default is ${DEFAULT_VIRTIO_DISK})"
+	echo "       -e: set FreeBSD loader environment variable"
 	echo "       -g: listen for connection from kgdb at <gdbport>"
+	echo "       -H: host filesystem to export to the loader"
 	echo "       -i: force boot of the Installation CDROM image"
 	echo "       -I: Installation CDROM image location (default is ${DEFAULT_ISOFILE})"
 	echo "       -m: memory size (default is ${DEFAULT_MEMSIZE})"
@@ -68,24 +76,37 @@ fi
 force_install=0
 isofile=${DEFAULT_ISOFILE}
 memsize=${DEFAULT_MEMSIZE}
+console=${DEFAULT_CONSOLE}
 cpus=${DEFAULT_CPUS}
-virtio_diskdev=${DEFAULT_VIRTIO_DISK}
-tapdev=${DEFAULT_TAPDEV}
+tap_total=0
+disk_total=0
 apic_opt=""
 gdbport=0
+loader_opt=""
 
-while getopts haic:g:I:m:d:t: c ; do
+while getopts ac:C:d:e:g:hH:iI:m:t: c ; do
 	case $c in
-	h)
-		usage
-		;;
 	a)
 		apic_opt="-a"
 		;;
+	c)
+		cpus=${OPTARG}
+		;;
+	C)
+		console=${OPTARG}
+		;;
 	d)
-		virtio_diskdev=${OPTARG}
+		eval "disk_dev${disk_total}=\"${OPTARG}\""
+		disk_total=$(($disk_total + 1))
 		;;
-	g)	gdbport=${OPTARG}
+	e)
+		loader_opt="${loader_opt} -e ${OPTARG}"
+		;;
+	g)	
+		gdbport=${OPTARG}
+		;;
+	H)
+		host_base=`realpath ${OPTARG}`
 		;;
 	i)
 		force_install=1
@@ -93,21 +114,29 @@ while getopts haic:g:I:m:d:t: c ; do
 	I)
 		isofile=${OPTARG}
 		;;
-	c)
-		cpus=${OPTARG}
-		;;
 	m)
 		memsize=${OPTARG}
 		;;
 	t)
-		tapdev=${OPTARG}
+		eval "tap_dev${tap_total}=\"${OPTARG}\""
+		tap_total=$(($tap_total + 1))
 		;;
-	\?)
+	*)
 		usage
 		;;
 	esac
 done
 
+if [ $tap_total -eq 0 ] ; then
+    tap_total=1
+    tap_dev0="${DEFAULT_TAPDEV}"
+fi
+if [ $disk_total -eq 0 ] ; then
+    disk_total=1
+    disk_dev0="${DEFAULT_VIRTIO_DISK}"
+
+fi
+
 shift $((${OPTIND} - 1))
 
 if [ $# -ne 1 ]; then
@@ -115,26 +144,35 @@ if [ $# -ne 1 ]; then
 fi
 
 vmname="$1"
-
-# Create the virtio diskdev file if needed
-if [ ! -f ${virtio_diskdev} ]; then
-	echo "virtio disk device file \"${virtio_diskdev}\" does not exist."
-	echo "Creating it ..."
-	truncate -s 8G ${virtio_diskdev} > /dev/null
-fi
-
-if [ ! -r ${virtio_diskdev} ]; then
-	echo "virtio disk device file \"${virtio_diskdev}\" is not readable"
-	exit 1
+if [ -n "${host_base}" ]; then
+	loader_opt="${loader_opt} -h ${host_base}"
 fi
 
-if [ ! -w ${virtio_diskdev} ]; then
-	echo "virtio disk device file \"${virtio_diskdev}\" is not writable"
-	exit 1
-fi
+make_and_check_diskdev()
+{
+    local virtio_diskdev="$1"
+    # Create the virtio diskdev file if needed
+    if [ ! -f ${virtio_diskdev} ]; then
+	    echo "virtio disk device file \"${virtio_diskdev}\" does not exist."
+	    echo "Creating it ..."
+	    truncate -s 8G ${virtio_diskdev} > /dev/null
+    fi
+
+    if [ ! -r ${virtio_diskdev} ]; then
+	    echo "virtio disk device file \"${virtio_diskdev}\" is not readable"
+	    exit 1
+    fi
+
+    if [ ! -w ${virtio_diskdev} ]; then
+	    echo "virtio disk device file \"${virtio_diskdev}\" is not writable"
+	    exit 1
+    fi
+}
 
 echo "Launching virtual machine \"$vmname\" ..."
 
+virtio_diskdev="$disk_dev0"
+
 while [ 1 ]; do
 	${BHYVECTL} --vm=${vmname} --destroy > /dev/null 2>&1
 
@@ -163,18 +201,40 @@ while [ 1 ]; do
 		installer_opt=""
 	fi
 
-	${LOADER} -m ${memsize} -d ${BOOTDISK} ${vmname}
+	${LOADER} -c ${console} -m ${memsize} -d ${BOOTDISK} ${loader_opt} \
+		${vmname}
 	if [ $? -ne 0 ]; then
 		break
 	fi
 
-	${FBSDRUN} -c ${cpus} -m ${memsize} ${apic_opt} -AI -H -P	\
+	#
+	# Build up args for additional tap and disk devices now.
+	#
+	nextslot=2  # slot 0 is hostbridge, slot 1 is lpc
+	devargs=""  # accumulate disk/tap args here
+	i=0
+	while [ $i -lt $tap_total ] ; do
+	    eval "tapname=\$tap_dev${i}"
+	    devargs="$devargs -s $nextslot:0,virtio-net,${tapname} "
+	    nextslot=$(($nextslot + 1))
+	    i=$(($i + 1))
+	done
+
+	i=0
+	while [ $i -lt $disk_total ] ; do
+	    eval "disk=\$disk_dev${i}"
+	    make_and_check_diskdev "${disk}"
+	    devargs="$devargs -s $nextslot:0,virtio-blk,${disk} "
+	    nextslot=$(($nextslot + 1))
+	    i=$(($i + 1))
+	done
+
+	${FBSDRUN} -c ${cpus} -m ${memsize} ${apic_opt} -A -H -P	\
 		-g ${gdbport}						\
 		-s 0:0,hostbridge					\
 		-s 1:0,lpc						\
-		-s 2:0,virtio-net,${tapdev}				\
-		-s 3:0,virtio-blk,${virtio_diskdev}			\
-		-l com1,stdio						\
+		${devargs}						\
+		-l com1,${console}					\
 		${installer_opt}					\
 		${vmname}
 	if [ $? -ne 0 ]; then



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408012100.s71L0I2D006524>