Files
vm-bhyve/vm.8

1094 lines
35 KiB
Groff
Raw Normal View History

2016-05-27 13:56:36 +01:00
.Dd May 27, 2016
.Dt VM-BHYVE 8
.Os
.Sh NAME
.Nm vm
.Nd "utility to manage bhyve virtual machines"
.Sh SYNOPSIS
.Nm
.Cm version
.Nm
.Cm init
.Pp
.Nm
.Cm switch list
.Nm
.Cm switch info
.Op Ar name
.Nm
.Cm switch create
.Ar name
.Nm
.Cm switch import
.Ar name bridge
.Nm
.Cm switch vlan
.Ar name vlan-id
.Nm
.Cm switch nat
.Ar name on|off
.Nm
.Cm switch add
.Ar name interface
.Nm
.Cm switch remove
.Ar name interface
.Nm
.Cm switch destroy
.Ar name
.Pp
.Nm
2016-04-19 11:47:52 +01:00
.Cm datastore list
.Nm
.Cm datastore add
.Ar name spec
.Nm
.Cm datastore remove
.Ar name
.Pp
.Nm
.Cm create
2016-04-19 11:47:52 +01:00
.Op Fl d Ar datastore
.Op Fl t Ar template
.Op Fl s Ar size
.Ar name
.Nm
2015-08-04 16:21:17 +01:00
.Cm destroy
.Ar name
.Nm
.Cm list
.Nm
.Cm info
.Op Ar name
.Nm
.Cm install
.Ar name iso
.Nm
.Cm start
.Ar name
.Nm
.Cm stop
.Ar name
.Ar ...
.Nm
.Cm console
.Ar name
.Op Ar com1|com2
.Nm
.Cm rename
.Ar name
.Ar new-name
.Nm
.Cm add
.Op Fl d Ar device
.Op Fl t Ar type
.Op Fl s Ar size|switch
.Ar name
.Nm
.Cm reset
.Ar name
.Nm
.Cm poweroff
.Ar name
.Nm
.Cm startall
.Nm
.Cm stopall
.Nm
.Cm configure
.Ar name
.Nm
.Cm passthru
.Nm
.Cm clone
.Ar name[@snapshot]
.Ar new-name
.Nm
.Cm snapshot
.Op Fl f
.Ar name|name@snapshot
.Nm
.Cm rollback
.Op Fl r
.Ar name@snapshot
.Pp
.Nm
.Cm iso
.Op Ar url
.Pp
.Nm
.Cm image list
.Nm
.Cm image create
.Op Fl d Ar description
.Op Fl u
.Ar name
.Nm
.Cm image provision
.Op Fl d Ar datastore
.Ar uuid
.Ar new-name
.Nm
.Cm image destroy
.Ar uuid
.\" ============ DESCRIPTION =============
.Sh DESCRIPTION
The
.Nm
utility is used to provide simplified management of
.Xr bhyve 8
virtual machines,
including networking and console access.
.Pp
Networking is handled by creating one or more virtual switches. Each switch
has a simple name which is referenced in the virtual machine configuration file.
The
.Nm
utility automatically creates a
.Xr bridge 4
device for each virtual switch and assigns virtual machine
.Xr tap 4
interfaces dynamically.
.Pp
All configuration for virtual machines is stored in a simple rc style configuration
file. When virtual machines are first created, the configuration file is copied from
a template which can be specified by the user. Multiple templates can be created providing
an easy way to provision guests with specific configurations.
.Pp
.Nm
gracefully handles reboot and shutdown commands from inside the guests, whilst providing
full management of the virtual machine from the host system.
.\" ============ BASIC SETUP ============
.Sh BASIC SETUP
Once
.Nm
is installed, create the directory which will store your virtual machine configuration and data.
This directory will be referred to as
.Pa $vm_dir
throughput this man page.
.Pp
Add the following into
.Pa /etc/rc.conf
.Bd -literal -offset indent
2015-10-18 20:09:20 +01:00
vm_enable="YES"
vm_dir="/your/vm/path"
vm_list=""
vm_delay="5"
.Ed
.Pp
The first and second lines are required to enable the
.Nm
utility. Please see the
.Cm startall
command description for more information on the third and fourth settings.
.Pp
Now run the
.Nm vm
.Cm init
command to finish initialisation. This will create subdirectories inside
.Pa $vm_dir
to hold configuration and templates. It will also load any required kernel modules.
This command needs to be run on each boot, which is normally handled by the rc.d script.
.Pp
Sample templates are installed to
.Pa /usr/local/share/examples/vm-bhyve/ .
You can make use of these by copying them into your
.Pa $vm_dir/.templates/
directory.
You can create and edit the templates as required. It is recommended to keep a template called
.Pa default.conf ,
as this will be used when no template is manually specified.
.\" ============ ZFS =============
.Sh ZFS
If you are using a ZFS dataset to store your virtual machines, and want a new child dataset created
for each one, specify the dataset to use in
.Pa /etc/rc.conf
as follows:
.Bd -literal -offset indent
$vm_dir="zfs:pool/dataset"
.Ed
.Pp
In contrast to earlier versions, if
.Pa $vm_dir
is a normal path, a standard subdirectory will be created for each virtual machine, regardless
of the file system type. However,
.Nm
is now able to handle situations where the dataset mountpoint does not match the dataset name.
.\" ============ QUICKSTART =============
.Sh QUICKSTART
Create a virtual switch called
.Sy public
(which is the switch name specified in the default templates) and attach it to a real interface.
Use your own interface in place of
.Sy em0
as required.
.Bd -literal -offset ident
# vm switch create public
# vm switch add public em0
.Ed
.Pp
Download an ISO file to use for installation:
.Bd -literal -offset ident
# vm iso ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-disc1.iso
.Ed
.Pp
Create a new guest using the default template and disk size, then start the installation. The
.Ar install
subcommand will immediately return you to your shell. Once started, use the
.Ar console
command to connect to the guest and complete the installation.
.Bd -literal -offset ident
# vm create my-guest
# vm install my-guest FreeBSD-10.1-RELEASE-amd64-disc1.iso
# vm console my-guest
.Ed
2015-07-01 11:10:50 +01:00
.Pp
Please note that Linux guests currently require the
.Sy sysutils/grub2-bhyve
package to be installed. This is used in place of
2015-07-01 11:10:50 +01:00
.Xr bhyveload 8
to load the guest kernel into memory.
.\" ============== WINDOWS ===============
.Sh WINDOWS SUPPORT
Windows guests are supported on versions of FreeBSD that have UEFI
support in
.Xr bhyve 8 .
2016-04-07 17:52:43 +01:00
As of April 2016, UEFI support should be available in FreeBSD 10.3+ and
11-CURRENT.
.Pp
You will also need a copy of the UEFI firmware (see URL below), which needs to be placed in
.Pa $vm_dir/.config/BHYVE_UEFI.fd .
.Pp
As there is no VGA console in
.Xr bhyve 8 ,
an unattended installation ISO is required which allows Windows to install and
boot without any user interaction. Instructions for creating a suitable ISO can
be found at the URL below.
.Pp
Once the installation ISO is ready, has been placed in the
.Pa $vm_dir/.iso
directory, and you have the UEFI firmware, installation can be performed as normal.
.Bd -literal -offset indent
# vm create -t windows -s 30G winguest
# vm install winguest win_repack.iso
.Ed
.Pp
Windows installation has been tested with 2012r2 and takes around 20-25 minutes.
During install, the guest will reboot twice (three runs in total). You can see
the guest reboot by watching the log file
.Pa $vm_dir/guestname/vm-bhyve.log .
The third run should boot fully into Windows. The
2015-10-11 17:48:55 +01:00
.Sy virtio
network adapter will request an IP address using DHCP. Connect to the guest console
and press
2015-10-11 17:48:55 +01:00
.Sy i
to see the IP address that has been assigned. The default unattended installation files
should make RDP available, using Administrator and Test123 as the default login details.
.Pp
The UEFI firmware (BHYVE_UEFI_20151002.fd), as well as instructions for creating an
unattended installation ISO can currently be obtained from
.Pa https://people.freebsd.org/~grehan/bhyve_uefi/
.\" ============ GLOBAL OPTIONS =============
.Sh GLOBAL OPTIONS
There are some options that can be specified after
.Sy vm ,
but before any subcommand. These are global options that affect the way
.Nm
functions.
.Bl -tag -width 12n
.It Fl f
Run
.Nm
in the foreground. This option is primarily useful with the
.Nm Cm start
command and runs the guest on stdio.
.El
.\" ============ SUBCOMMANDS =============
.Sh SUBCOMMANDS
.Bl -tag -width indent
.It Cm version
Show the version number of vm-bhyve installed.
.It Cm init
.br
This should be run once after each host reboot before running any other
.Nm
commands. The main function of the
.Cm init
command is as follows:
.Pp
o Load all necessary kernel modules if not already loaded
.br
o Set tap devices to come up automatically when opened
.br
o Create any configured virtual switches
.It Cm switch list
List virtual switches. This reads all configured virtual switches from the
.Pa $vm_dir/.config/switch
file and displays them. If the virtual switches are loaded, it also tries
to display the
.Xr bridge 4
interface that has been assigned to each one.
.It Cm switch info Op Ar name
This command shows detailed information about the specified virtual switch.
If no switch name is provided, information is output for all configured switches.
Information displayed includes the following:
.Pp
o Basic switch settings
.br
o Overall bytes sent and received via this switch
.br
o Physical ports connected
.br
o Virtual ports, including the associated virtual machine
.br
.It Cm switch create Ar name
Create a new virtual switch. The name must be supplied and may only contain
letters, numbers and dashes. However, it may not contain a dash at the beginning
or end.
.Pp
When a new virtual switch is created, the persistent configuration file is updated
and a new
.Xr bridge 4
interface is provisioned.
.It Cm switch import Ar name Ar bridge
This command allows you to import an existing bridge interface that has been created
manually and use it for virtual machines. Once a bridge is imported, you can use
the switch
.Pa name
in guest configuration. Ideally the manual bridge should be configured in
.Pa /etc/rc.conf ,
so that it is available on each host boot.
.Pp
Please note that this creates a 'manual' switch and is designed to allow you to configure your
own bridge. None of the
.Pa add ,
.Pa remove ,
.Pa vlan
or
.Pa nat
commands are supported on manual switches.
.Pp
If a manual switch is destroyed using the
.Pa destroy
command, we remove all vm-bhvye configuration, but leave the
.Xr bridge 4
interface intact.
.It Cm switch vlan Ar name Ar vlan-id
Assign a VLAN number to a virtual switch. The VLAN number must be between 0-4094.
.Pp
When adding an interface to a VLAN enabled virtual switch, a new
.Xr vlan 4
interface is created. This interface has the relevent parent interface and VLAN tag
configured. This vlan interface is then added to the virtual switch. As such, all
traffic between guests on the same switch is untagged and travels freely. However,
all traffic exiting via physical interfaces is tagged.
.Pp
If the virtual switch already has physical interfaces assigned, they are all removed
from the bridge, reconfigured, then re-added.
.Pp
To remove the VLAN configuration from a virtual switch, specify a
.Ar vlan-id
of 0.
.It Cm switch nat Ar name Ar on|off
Enable or disable NAT functionality on the specified switch. Please note that
.Xr pf
is required for this functionality and must be enabled in
.Pa /etc/rc.conf .
If DHCP is desired, please install the
.Xr dnsmasq
pacakge. vm-bhyve will generate a sample dnsmasq configuration in
.Pa /usr/local/etc/dnsmasq.conf.bhyve ,
but it is up to the user to either use this configuration directly, or merge with
any existing dnsmasq settings you have configured.
.Pp
The switch should have no host ports assigned, as these will end up on the private side
of the NAT network.
.Nm
automatically detects the hosts default gateway, which is used as the forwarding interface
for NAT connections.
.Pp
Once enabled, a 172.16.X.0/24 network is assigned to the switch (bridge) interface.
.Ar X
is chosen based on the ID of the bridge interface. For example, if the switch is using
bridge10, the network will be 172.16.10.0/24.
.Xr dnsmasq
can be used to provide DHCP to the guests, and
.Xr pf
rules are inserted to provide the NAT translation.
.Pp
.Pa /etc/pf.conf
is created if it doesn't exist, and a single include statement is added. This
include statement can be moved within the file if required.
.It Cm switch add Ar name Ar interface
Add the specified interface to the named virtual switch.
.Pp
The interface will immediately be added to the relevant bridge if possible, and
stored in the persistent switch configuration file. If a
.Ar vlan-id
is specified on the virtual switch, this will cause a new
.Xr vlan 4
interface to be created.
.It Cm switch remove Ar name Ar interface
Removes the specified interface from the named virtual switch and updates the
persistent configuration file.
.It Cm switch destroy Ar name
Completely remove the named virtual switch and all configuration. The associated
.Xr bridge 4
interface will be removed, as well as any
.Xr vlan 4
interfaces if they are not in use by other virtual switches.
2016-04-19 11:47:52 +01:00
.It Cm datastore list
List the configured datastores. Normally
.Sy vm-bhyve
will store all guests under the directory specified in
.Pa /etc/rc.conf .
This is the
.Sy default
datastore. Additional datastores can be added, providing the
ability to store guests in multiple locations on your system.
.It Cm datastore add Ar name spec
Add a new datastore to the system. The datastore name can only contain letters,
numbers and _. characters. The
.Pa spec
should use the same format as
.Sy $vm_dir .
A standard directory can be specified by just providing the path, whereas a ZFS
storage location should be specified in
.Sy zfs:pool/dataset
format.
.Pp
Please note that the dircetory or dataset should already exist. We do not try to
create it.
.It Cm datastore remove Ar name
Remove the specified datastore from the list. This does not destroy the directory
or dataset, leaving all files intact.
.It Xo
.Cm create
2016-04-19 11:47:52 +01:00
.Op Fl d Ar datastore
.Op Fl t Ar template
.Op Fl s Ar size
.Ar name
.Xc
Create a new virtual machine.
.Pp
Unless specified, the
.Pa default.conf
template will be used and a 20GB virtual disk image is created. This command will
created the virtual machine directory
.Pa $vm_dir/$name ,
and create the configuration file and empty disk image within.
.Bl -tag -width 12n
2016-04-19 11:47:52 +01:00
.It Fl d Ar datastore
Specify the datastore to create this virtual machine under. If not specified, the
.Sy default
dataset will be used, which is the location specified in
.Pa /etc/rc.conf .
.It Fl t Ar template
Specifies the template to use from within the
.Pa $vm_dir/.templates
directory. The
.Sy .conf
suffix is not required.
.It Fl s Ar size
The size of disk image to create in GB. Unless specified, the guest image will
be a sparse file 20GB in size.
.El
2015-08-04 16:21:17 +01:00
.It Cm destroy Ar name
Removes the specified virtual machine from the system, deleting all associated
disk images & configuration.
.It Cm list
.br
List all the virtual machines in the
2015-10-24 20:27:24 +01:00
.Pa $vm_dir
directory. This will show the basic configuration for each virtual machine, and whether
they are currently running.
.It Cm info Op Ar name
Shows detailed information about the specified virtual machine. If no name is given,
information for all virtual machines is displayed.
.Pp
This output includes detailed information about network and disk devices, including
the space usage for all virtual disks (exluding custom disk devices). If the guest
is running, the output also shows the amount of host memory curently in use,
and additional network details including bytes sent/received for each virtual interface.
.It Cm install Ar name Ar iso
Start a guest installation for the named virtual machine, using the specified ISO file.
The
.Ar iso
argument should be the filename of an ISO file already downloaded into the
.Pa $vm_dir/.iso
directory. ISO files in this directory can be managed using the
.Ar iso
subcommand described below.
.Pp
Once started, the guest loader will be booted in the foreground. This allows you to choose
the
.Sy Install
boot option for guests that require it. Once the loader has completed, you will be returned
to the shell and bhyve will continue running in the background. Use the
.Ar console
subcommand to connect to the guest and complete installation.
.Pp
After installation, the guest can be rebooted and will restart using its own disk image to boot.
At this point the installation ISO file is still attached, allowing you to use the CD/DVD image
for any post installation tasks. The ISO file will remain attached after each reboot until the
guest is fully stopped.
.It Cm start Ar name
Start the named virtual machine. The guest will boot and run completely in the background. Use
the
.Ar console
subcommand to connect to it if required.
.Pp
For each network adapter specified in the guest configuration, a
.Xr tap 4
interface will be created. If possible, the tap interface will be attached the relevent
.Xr bridge 4
interface, based on the virtual switch specified in the guest configuration.
.It Cm stop Ar name Ar ...
Stop a named virtual machine. All
.Xr tap 4
and
.Xr nmdm 4
devices will be automatically cleaned up once the guest has exited.
.Pp
If a guest is stuck in the bootloader stage, you are given the option to forcibly stop it.
.Pp
Multiple guests can be specified to this command at the same time. Each one will be sent a
poweroff event.
.It Cm console Ar name Op Ar com1|com2
Connect to the console of the named virtual machine. Without network access, this is the primary
way of connecting to the guest once it is running.
.Pp
By default this will connect to the first com port specified in the client configuration, which
is usually com1. Alternatively you can specify the com port to connect to.
.Pp
This looks for the
.Xr nmdm 4
device associated with the virtual machine, and connects to it with
.Xr cu 1 .
Use ~+Ctrl-D to exit the console and return to the host.
.It Cm rename Ar name Ar new-name
Renames the specified virtual machine. The guest must be stopped to use this function.
.It Xo
.Cm add
.Op Fl d Ar device
.Op Fl t Ar type
.Op Fl s Ar size|switch
.Ar name
.Xc
Add a new network or disk device to the named virtual machine. The options depend on
the type of device that is being added:
.Bl -tag -width 15n
.It Fl d Ar device
The type of device to add. Currently this can either be
.Pa disk
or
.Pa network
.It Fl t Ar type
For disk devices, this specifies the type of disk device to create.
Valid options for this are
.Pa zvol ,
.Pa sparse-zvol
and
.Pa file .
If not specified, this defaults to
.Pa file .
.It Fl s Ar size|switch
For disk devices, this is used to specify the size of the disk image to create. For
network devices, use this option to specify the virtual switch to connect the network interface to.
.El
.Pp
For both types of device, the emulation type will be chosen automatically based on the
emulation used for the existing guest devices.
.It Cm reset Ar name
Forcefully reset the named virtual machine. This can cause corruption to the guest file system just
as with real hardware and should only be used if necessary.
.It Cm poweroff Ar name
Forcefully power off the named virtual machine. As with
.Ar reset
above, this does not inform the guest to shutdown gracefully and should only be used if the guest
can not be shut down using normal methods.
.It Cm startall
Start all virtual machines configured for auto-start. This is the command used by the rc.d scripts
to start all machines on boot.
.Pp
The list of virtual machines should be specified using the
.Pa $vm_list
variable in
.Pa /etc/rc.conf .
This allows you to use shared storage for virtual machine data, whilst making sure that the correct
guests are started automatically on each host. (Or to just make sure your required guests start on boot
whilst leaving test/un-needed guests alone)
.Pp
The delay between starting guests can be set using the
.Pa $vm_delay
2015-10-11 17:48:55 +01:00
variable, which defaults to 5 seconds. Too small a delay can cause problems, as each guest doesn't
have enough time to claim a null modem device before the next guest starts. Increasing this value
can be useful if you have disk-intensive guests and want to give each guest a chance to fully
boot before the next starts.
.It Cm stopall
Stop all running virtual machines. This sends a stop command to all
.Xr bhyve 8
instances, regardless of whether they were starting using
.Nm
or not.
.It Cm configure Ar name
The
.Cm configure
command simply opens the virtual machine configuration file in your default editor,
allowing you to easily make changes. Please note, changes do not take effect until
the virtual machine is fully shutdown and restarted.
.It Cm passthru
The
.Cm passthru
command lists all PCI devices in the system, the device ID required for bhyve, and
whether the device is currently ready to be used by a guest. In order to make a
device ready, it needs to be reserved on boot by adding the device ID to the
.Sy pptdevs
variable in
.Pa /boot/loader.conf .
.Pp
Once a device is ready, it can be assigned to a guest by adding
.Sy passthruX="{ID}"
to the guest's configuration file.
.Sy X
should be an integer starting at 0 for the first passthrough device.
.Pp
More details can be found in the bhyve wiki.
.It Cm clone Ar name[@snapshot] Ar new-name
Create a clone of the virtual machine
.Pa name ,
as long as it is currently powered off. The new machine will be called
.Pa new-name ,
and will be ready to boot with a newly assigned UUID and empty log file.
.Pp
If no snapshot name is given, a new snapshot will be taken of the guest and any descendent
datasets or ZVOLs. If you wish to use an existing snapshot as the source for the clone,
please make sure the snapshot exists for the guest and any child ZVOLs, otherwise the clone
will fail.
.Pp
Please note that this function requires ZFS.
.It Xo
.Cm snapshot
.Op Fl f
.Ar name|name@snapshot
.Xc
Create a snapshot of the names virtual machine. This command is only supported with ZFS
and will take a snapshot of the guest dataset and any descendent ZVOL devices.
.Pp
The guest and snapshot name can be specified in the normal
.Pa name@snapshot
way familiar to ZFS users. If no snapshot name is given, the snapshot is based on the current timestamp in
.Pa Y-m-d-H:M:S
format.
.Pp
By default the guest must be stopped to use this command, although you can force a snapshot
of a running guest by using the
.Fl f
option.
.It Xo
.Cm rollback
.Op Fl r
.Ar name@snapshot
.Xc
Rollback the guest to the specified snapshot. This will roll back the guest dataset and all
descendent ZVOL devices.
.Pp
Normally, ZFS will only allow you to roll back to the most recent snapshot.
If the snapshot given is not the most recent, ZFS will produce a warning detailing that you
need to use the
.Fl r
option to remove the more recent snapshots. It will also produce a list of the snapshots that
will be destroyed if you use this option. The
.Fl r
option can be passed directly into
.Nm
.Cm rollback
.Pp
The guest must always be stopped to use this command.
.It Cm iso Op Ar url
List all the ISO files currently stored in the
.Pa $vm_dir/.iso
directory. This is often useful during guest installation, allowing you to copy and paste the ISO
filename.
.Pp
If a
.Sy url
is specified, instead of listing ISO files, it attempts to download the given file using
.Xr fetch 1 .
.It Cm image list
List available images. Any virtual machine can be packaged into an image, which can then be
used to create additional machines. All images have a globally unique ID (UUID) which is
used to identify them. The list command shows the UUID, the original machine name, the
date it was created and a short description of the image.
.Pp
Please note that these commands rely on using ZFS featured to package/unpackage the images,
and as such are only available when using a ZFS dataset as the storage location.
.It Xo
.Cm image create
.Op Fl d Ar description
.Op Fl u
.Ar name
.Xc
Create a new image from the named virtual machine. This will create a compressed copy of
the original guest dataset, which is stored in the
.Pa $vm_dir/images
directory. It also creates a
.Pa UUID.manifest
file which contains details about the image.
.Pp
Once complete, it will display the UUID which has been assigned to this image.
.Pp
If you do not want the image to be compressed, specify the
.Sy -u
option.
.It Xo
.Cm image provision
.Op Fl d Ar datastore
.Ar uuid Ar new-name
.Xc
Create a new virtual machine, named
.Pa new-name ,
from the specified image UUID. This will be created on the
.Sy default
datastore unless specified otherwise.
.It Cm image destroy Ar uuid
Destroy the specified image.
.El
2015-07-01 11:10:50 +01:00
.\" ============ CONFIGURATION FORMAT ===========
.Sh CONFIGURATION FORMAT
Each virtual machine has a configuration file that specifies the hardware configuration. This
uses a similar format to the
.Sy rc
files, making them easy to edit by hand. The settings for each guest are stored in
.Pa $vm_dir/$vm_name/$vm_name.conf .
An overview of the available configuration options is listed below.
.Bl -tag -width 17n
.It loader
Windows, Linux & FreeBSD guests will use the correct loader by default. For other
guests that require a loader to be used, this can set to
.Sy bhyveload
or
.Sy grub .
As an example, NetBSD & OpenBSD can be supported by using the
.Sy generic
guest type, and specifying the
.Sy grub
loader.
.It loader_timeout
By default the
.Sy bhyveload
and
.Sy grub
loaders will wait for 3 seconds before booting the default option. If access
to the grub console is needed, this can be increased to give more time to connect
to the console. If access to the grub console is not required, it can also be
reduced to speed up overall boot.
2015-10-09 15:42:11 +01:00
.It uefi
Set this (any non-empty value) for guests that need UEFI firmware. If set to
.Sy csm ,
the BIOS compatibility UEFI-CSM firmware will be used.
2015-07-01 11:10:50 +01:00
.It cpu
A numeric value specifying the number of virtual CPU cores to assign to the guest.
.It memory
The amount of memory to assign to the guest. This can be specified in megabytes or
gigabytes using the
.Sy M
and
.Sy G
suffixes.
2015-10-24 20:27:24 +01:00
.It hostbridge
This option allows you to specify the type of hostbridge used for the guest hardware.
Normally you can leave this as default, which is to use a standard bhyve hostbridge.
.Pp
There are two other options.
.Sy amd ,
which is almost identical to the standard hostbridge, but advertises itself with a
vendor ID of AMD. There are also some special cases where you may require no
hostbridge at all, which can be achieved using the
.Sy none
value.
.It comports
This option allows you to specify which com ports to create for the guest. The default
is to create a single
.Sy com1
port. Valid values for this are
.Sy com1
and
.Sy com2 .
You can also connect two com ports by specifying both, separated by a space.
2015-10-21 13:14:15 +01:00
.It utctime
Set this option to
.Sy yes
if the guest RTC should keep UTC time.
.It debug
If this is set to
.Sy yes ,
all output from the
.Xr bhyve 8
process will be written to
.Sy ${vm_dir}/guest/bhyve.log .
This is useful for debugging purposes as it allows you to see any error messages
that are being produced by
.Xr bhyve 8
itself.
2015-07-01 11:10:50 +01:00
.It network0_type
The emulation to use for the first network adapter. This option can be unspecified
if no guest networking is required. The recommended value for this is
.Sy virtio-net .
Additional network interfaces can be configured by adding additional
.Sy networkX_type
and
.Sy networkX_switch
values, replacing
.Sy X
with the next available integer.
.It network0_switch
The virtual switch to connect interface
.Sy 0
to. This should correspond to a virtual switch created using the
.Pa vm switch create
subcommand. If the virtual switch is not found, an interface will still be assigned,
but not connected to any bridge.
.Pp
Note that this field is no longer strictly required. If you are using a custom device
for the networking that is already configured, you may not need the interface connected
to a virtual switch. See the
.Sy network0_device
configuration option.
.It network0_device
Normally vm-bhyve will create a
.Xr tap 4
device at run-time for each virtual network interface. This may be an issue in more advanced
configurations where you want to pre-configure the networking manually in a way unsupported by
vm-bhyve. This option allows you to instruct vm-bhyve to use an existing network device for
this virtual interface, rather than creating one dynamically.
.It network0_mac
This option allows you to specify a mac address to use for this interface. If not
provided,
.Xr bhyve 8
will generate a mac address.
2015-07-01 11:10:50 +01:00
.It disk0_type
The emulation type for the first virtual disk. At least one virtual disk is required.
Valid options for this are currently
.Sy virtio-blk
and
.Sy ahci-hd .
Additional disks can be added by adding additional
.Sy diskX_type
and
2015-08-05 14:32:44 +01:00
.Sy diskX_name
2015-07-01 11:10:50 +01:00
values, replacing
.Sy X
with the next available integer.
.It disk0_name
The filename for the first virtual disk. The first disk is created automatically when
provisioning a new virtual machine. If additional disks are added manually, the image will need
to be created, usually done using the
.Xr truncate 1
or
.Xr zfs 8
commands. Alternatively, you can use the
.Pa vm add
command, which will create the disk image for you.
.Pp
Normally disk images or zvols are stored directly inside the guest. To use a disk
image that is stored anywhere else, you can specify the full path in this option,
and configure the device as
.Sy custom
.It disk0_dev
The type of device to use for the disk. If not specified, this will default to
.Sy file ,
and a sparse file, located in the guest directory, will be used as the disk image.
Other options include
.Sy zvol
&
.Sy sparse-zvol ,
which will used a ZVOL as the disk image, created directly under the guest dataset.
Alternatively you can specify
.Sy custom ,
in which case
.Pa diskX_name
should be the full path to the image file or device.
2015-11-01 10:43:00 +00:00
.It disk0_opts
Any additional options to use for this disk device. Multiple options can be specified,
separated by a comma. Please see the
.Xr bhyve 8
man page for more details on supported options.
.It disk0_size
This setting can be specified in templates to set the size of this disk.
When creating a guest,
.Nm
will default to creating a 20G image for each disk, unless an alternative size is
specified using this option. The size of the first disk can be overridden using
the
.Sy -s
command line option.
.Pp
NOTE: This setting is only supported in templates. It has no function in
real guest configuration, and is not copied over when a new machine is provisioned
2015-10-14 12:35:13 +01:00
.It uuid
This option allows you to specify a fixed UUID for the guests SMBIOS. Normally, the
UUID is generated by
.Xr bhyve 8
based on the hostname and guest name. Because this may change if guests are moved
between systems, the
.Pa vm create
command automatically assigns a UUID to all newly created guests.
.It grub_installX
This option allows you to specify grub commands needed to boot the install media for
this guest.
.Sy X
should be an integer starting at 0, with additional grub commands using the next numbers
in sequence.
.Pp
If no install commands are specified,
.Sy grub-bhyve
will be run on the guests console, so you can use the standard
.Pa vm console
command to access the bootloader if needed.
.It grub_run_partition
Specify the partition that grub should look in for the grub configuration files.
By default, vm-bhyve will specify partition 1, which is correct in most standard cases.
.It grub_runX
The option allows you to specify the grub commands needed to boot the guest from disk.
.Sy X
should be an integer starting at 0, with additional grub commands using the next numbers
in sequence.
.Pp
If no boot commands are specified,
.Sy grub-bhyve
will be run on the guests console, so you can use the standard
.Pa vm console
command to access the bootloader if needed.
.Pp
The sample templates contain examples of how the grub configuration variables can be used.
.It grub_run_dir
By default
.Sy grub-bhyve
will look in the dircetory
.Sy /boot/grub
for the grub configuration file. This option allows you to specify an alternate path
to use when starting a guest.
.It grub_run_file
Allows you to specify the grub configuration file that
.Sy grub-bhyve
will look for inside the guest, rather than the
default of
.Sy grub.cfg .
.It passthruX
Specify a device to pass through to the guest. You will need to reserve the device first
so that is it claimed by the ppt driver on boot.
.Pp
Once the device is successfully reserved, you can add it to the guest by adding
.Sy passthruX="1/2/3"
to the guest configuration file, where
.Sy X
is an integer starting at 0, and
.Sy 1/2/3
is the Base/Slot/Function of the device. If you are passing through multiple functions on
the same device, make sure they are specified together in the configuration file in the
same sequence as the original device.
.Pp
Please see https://wiki.freebsd.org/bhyve/pci_passthru for more details on how this works.
2015-11-01 10:43:00 +00:00
.It virt_random
Set this option to
.Sy yes
if you want to create a
.Sy virtio-rnd
device for this guest.
.It graphics
If set to you, a frame buffer is added to the guest. This provides a graphical
console that is accessible using VNC. By default the console is 800x600, and will
listen on
.Sy 0.0.0.0:5900 .
If port 5900 is not available, the next available port will be used. The active address and
port can be viewed in
.Sy vm list
and
.Sy vm info
output.
.It graphics_port
This option allows you to specific a fixed port that the VNC service should listen on.
Please remember that all guests should ideally use a unique port to avoid any problems.
.It graphics_listen
By default the graphical VNC console will listen on
.Sy 0.0.0.0 ,
so is accessible by connecting to any IP address assigned to the bhyve host. Use this
option to specify a specific IP address that the VNC service should bind to.
.It graphics_res
Specify the resolution of the graphical console in
.Pa WxH
format. Please note that only a certain range of resolutions are currently supported.
Please set
.Pa config.sample
for a full up-to-date list.
.It graphics_wait
Set this to yes in order to make guest boot wait for the VNC console
to be opened. This can help when installing operating systems
that require immediate keyboard input (such as a timed 'enter setup'
screen).
.It xhci_mouse
Set this option to
.Sy yes
in order to provide an XHCI mouse device to the guest. This tracks much better than
the default PS2 mouse in VNC settings, although this mouse may not supported by older
guests.
.It zfs_dataset_opts
This allows you to specify one or more ZFS properties to set on the dataset when a
guest is created. Because properties are assigned as the dataset is created, this option
is most useful when specified inside a template. As a guest is created, all properties
listed in this option will be applied to the guest dataset.
.Pp
Multiple properties can be specified, separated by a space. Please note that spaces
are not currently supported in the property values.
.It zfs_zvol_opts
Allows you to specify ZFS properties that should be assigned to any ZVOLs that are
created for a guest. As with
.Pa zfs_dataset_opts ,
this makes most sense when entered into a template, as the properties can be assigned
while a guest is being created. Some ZVOL options, such as
.Pa volblocksize
can only be set at creation time.
.Pp
Multiple properties can be specified, separated by a space. For example, the following
will configure the ZVOL block size to 128k, and turn compression off.
.Pp
zfs_zvol_opts="volblocksize=128k compress=off"
2016-04-07 16:05:40 +01:00
.It limit_pcpu
Limit the bhyve process to the specified cpu percentage.
.Pp
Please note this, as with all
.Sy limit
settings, requires
.Xr rctl 8
to be enabled in your kernel.
.It limit_rbps
Limit guest disk read throughput to the specified bits per second.
.It limit_wbps
Limit guest disk write throughput to the specified bits per second.
.It limit_riops
Limit guest disk read iops to the specified number of operations per second.
.It limit_wiops
Limit guest disk write iops to the specified number of operations per second.
2015-07-01 11:10:50 +01:00
.El
.\" ============ SEE ALSO =============
.Sh SEE ALSO
.Xr bhyve 8 ,
.Xr bhyveload 8 ,
.Xr tap 4 ,
.Xr bridge 4 ,
.Xr vlan 4 ,
.Xr nmdm 4 ,
.Xr cu 1 ,
.Xr fetch 1 ,
.Xr truncate 1 ,
2016-04-07 16:05:40 +01:00
.Xr zfs 8 ,
.Xr rctl 8
.\" ============ BUGS =============
.Sh BUGS
Please report all bugs/issues/feature requests to the github project at
https://github.com/churchers/vm-bhyve
2015-07-01 11:10:50 +01:00
.\" ============ AUTHOR =============
.Sh AUTHOR
.An Matt Churchyard Aq Mt churchers@gmail.com