GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
CHYVES(8) FreeBSD System Manager's Manual CHYVES(8)

chyves - bhyve(8) front end manager -- version 0.2.0

  • chyves dataset <pool> {install|upgrade}
  • chyves dev
  • chyves {firmware|iso} list
  • chyves {firmware|iso} import {http-URL|ftp-URL|local-path}
  • chyves {firmware|iso} rename <resource> <new-resource-name>
  • chyves {firmware|iso} delete <resource>
  • chyves <guest> clone <clonenames>|MG [-ce|-cu|-ie|-iu] [<pool>]
  • chyves <guest> console
  • chyves <guest>|MG|all console {reset|tmux|vnc}
  • chyves <guest>|MG create [<size>] [<pool>]
  • chyves <guest>|MG|all delete [force|keepnet]
  • chyves <guest> disk add [<size>]
  • chyves <guest> disk disk{n} {description|notes} <annotation>
  • chyves <guest> disk delete disk{n}
  • chyves <guest> disk resize disk{n} <new-size>
  • chyves <guest> disk list
  • chyves <guest> get {<property>|all}
  • chyves <guest>|MG|all reclaim
  • chyves <guest> rename <new-guest-name>
  • chyves <guest>|MG|global|defaults|all set <prop1>=<value>...
  • chyves <guest> snapshot [<@snapshotname>]
  • chyves <guest> snapshot list
  • chyves <guest> snapshot delete <@snapshotname>
  • chyves <guest> snapshot rollback [<@snapshotname>]
  • chyves <guest>|MG|all start [<iso>]
  • chyves <guest>|MG|all stop [force]
  • chyves <guest>|MG|all upgrade
  • chyves <guest>|MG|all unset <property>
  • chyves help
  • chyves info [-zbprvstcudnakwl|-h]
  • chyves list [bridges|clones|defaults|disks|firmware|iso|pools|\ properties|<property>]
  • chyves list global [<pool>|primary]
  • chyves list {processes|snapshots} [<guest>]
  • chyves list tap active
  • chyves network <guest> add {tap|tap{n}|vale{n}}
  • chyves network <guest> add {tap|tap{n}} [bridge{n}]
  • chyves network <guest> remove {tap{n}|vale{n}}
  • chyves network bridge{n} attach {vlan-iface{n}|physical-iface{n}}
  • chyves network bridge{n} {default|private}
  • chyves network bridge{n} {join|unjoin} tap{n}
  • chyves network bridge{n} migrate bridge{n}
  • chyves upgrade [master|dev|check]
  • chyves version

The following syntax nomenclature is used throughout this page:
  • subcommand - Required text, exactly as shown.
  • [subcommand] - Optional text, exactly as shown.
  • <user-input> - User supplied input field. Required when not contain in [ ].
  • {n} - A whole number. Context determines valid range.
  • ... - Repeating as many iterations as desired, follows the same preceding syntax pattern.
  • | - Separates options in a list.
  • [optional|list] - An optional field, list of valid options. "" meaning literally no input is also an option with these lists.
  • {require|list} - A required field, list of valid options.
  • $null - ´´, meaning literally no input.
  • [-abcdefg] - An optional flag field but must start with a ´-´ and followed by any combination, in any order. Eg. ´-gca´
  • <guest> - chyves guest name
  • <pool> - ZFS pool. The word "primary" can be used to specify the primary pool.
  • <size> - Whole number with a size suffix in kilobytes (K), megabytes (M), gigabytes (G), or terabytes (T).
  • <resource> - ISO or UEFI firmware resource name
  • MG - Multiple guests can be given using commas. The word "all" can be used to indicate all guests for these commands.

chyves(8) relies on the FreeBSD hypervisor bhyve(8), zfs(8), nmdm(4), Bourne shell sh(1), and cu(1) to start and manage type 2 virtualized guests. Optionally grub2-bhyve and tmux(1) can be used to expand the capabilities of chyves. chyves uses configuration files, ZFS filesystem datasets and volumes to store guest, chyves settings, and chyves resources in an organized hierarchy. bhyve uses virtio drivers built into the GENERIC kernel for network virtualization. The virtio drivers are used to paravirtualize I/O for disk and network access.

For networking, a guest is presented a PCI Ethernet device through the use of virtio(4). On FreeBSD guests this means the vtnet(4) driver is used. After a certain commit, Intel e1000 emulation was added as an alternative to virtio-net. See guest property ´bhyve_net_type´ for details. In either case, host network communication is through a tap(3) or vale(4) interface to the guest.

For storage, guests are provided block storage device(s) via ZFS volumes from the host by default. ZFS datasets are used to organize these block devices and other resources in a hierarchical structure. See ZFS section for more information.

Multi-guest [MG] support is the ability to specify multiple guest names that are comma separate for a sub-command. Not all sub-commands have this functionality but the ones that do, allow for rapid execution of the same command over many guests, this can be incredibly helpful for a fleet of VMs. Commands in the synopsis above with the "guest|MG" syntax indicate compatibility with multi-guest. Using the word ´all´ instead of guest will specify all active guests on the system for supported commands.

bhyve(8) and chyves(8) will run on a base FreeBSD installation. However the required kernel modules are not loaded by default on FreeBSD. By default chyves will attempt to load the required kernel modules when needed. There are also certain non-FreeBSD-base binaries that enhance chyves capabilities. These binaries are checked for and in certain cases, exits if the required component is not detected.

At least one ZFS pool is required. All data is stored on one or many ZFS pools and depends on ZFS volumes for guest´s disks backing. chyves capitalizes on multi-pool configurations. Multiple pool configurations are common in FreeNAS deployments, separated storage types (eg: SSD, HD, NVMe), and OS plus storage configurations.

  • vmm - Required to run the guests as this allocates the resources.
  • nmdm(4) - Required for serial console access to the guests.
  • if_tap(4) - Required for network access to the guests.
  • if_bridge(4) - Required for network access to the guests.
  • bridgestp - Required by if_bridge.
  • netmap(4) - Required for VALE support. Not compiled into GENERIC on 10.3.

  • bhyve Custom variants required for VALE or UEFI SUPPORT for pre-11.0-ALPHA* builds. Manually compile from /usr/src.
  • BHYVE_UEFI_20151002.fd UEFI firmware required to boot UEFI guests. In Peter Grehan´s public FreeBSD file directory.
  • BHYVE_UEFI_20160526.fd UEFI firmware required to boot UEFI guests with VNC support. In Peter Grehan´s public FreeBSD file directory.
  • grub2-bhyve Required for booting non-FreeBSD or non-UEFI guests. In ports and pkg.
  • tmux Required when using the command chyves <guest> console tmux. In ports and pkg.
  • vale-ctl Required for VALE networking support. In ´/usr/src´.

bhyve(8) is dependent on hardware virtualization CPU features. One feature is called Second Level Address Translation (SLAT), also known as nested paging. Intel´s implementation is called Extended Page Tables (EPT) and AMD´s implementation is called Rapid Virtualization Indexing (RVI). This CPU feature is referenced as ´POPCNT´ in dmesg(8) under ´Features2:´ line.

There is an early series of CPUs from Intel (Xeon 5500) that has most of the necessary virtualization capabilities but lack a feature Intel later implemented called unrestricted guest (´UG´ in dmesg(8) under "VT-x:"). Without this feature bhyve is limited to FreeBSD guests with only one CPU core. AMD has the ´UG´ functionality in all of it´s RVI implementations.

PCI Pass-through support is also provided through another sub-set of hardware virtualization CPU features called I/O MMU virtualization. Intel calls their implementation ´VT-d´ and AMD calls their implementation ´AMD-Vi´. See the pcidev_{n} property under Guest Properties section for instructions on attaching PCI pass-through devices. A check is ran before starting a guest that has PCI pass-through devices configured and will not start the guest if the host does not have the necessary CPU feature.

As mentioned in the DEPENDENCIES section above, there is a hard dependency on ZFS and as such requires at least one ZFS pool. There are many features that rely on ZFS, such as cloning. The ISO, UEFI firmware, and guest resources and properties are stored within ZFS datasets.

Single and multiple ZFS pools are supported, there is no loss in functionality for either. chyves datasets get mounted to ´/chyves/pool´. The ´/chyves´ directory itself is stored on ´/´ and does not belong to any of the chyves datasets. The first pool is assigned the primary pool role but this can be changed afterwards. The primary pool is the only pool containing the UEFI Firmware resources, ISO resources, the global properties, and the comprehensive logs. The primary pool can be changed with chyves dataset <new-prim-pool> promote which moves the resources and global configuration to <new-prim-pool> from the current primary pool.

See DATASET SUB-COMMANDS section below for managing the chyves datasets.

Example of a multi-pool folder structure:

/chyves/prim_pool/guests/
                 /guests/<guest1>/.config/.cfg              # File
                 /guests/<guest1>/disk{n}                   # Volumes
                 /guests/<guest1>/img                       # Dataset(s)
                 /guests/<guest1>/log                       # Dataset
                 /guests/<guest1>/log/YYYYMM.log            # Files
                 /guests/<guest2>/.config/.cfg              # File
                 /guests/<guest2>/disk{n}                   # Datasets
                 /guests/<guest2>/img                       # Dataset(s)
                 /guests/<guest2>/log                       # Dataset
                 /guests/<guest2>/log/YYYYMM.log            # Files
                 /guests/.defaults                          # File
                 /.config                                   # Dataset
                 /.config/global.cfg                        # File
                 /.config/pool.cfg                          # File
                                  pool_role=primary         # Pool property
                 /logs                                      # Dataset
                 /logs/YYYYMM.log                           # Files
                 /ISO                                       # Datasets
                 /Firmware                                  # Datasets
/chyves/secd_pool/guests
                 /guests/<guest3>/.config/.cfg              # File
                 /guests/<guest3>/disk{n}                   # Volumes
                 /guests/<guest3>/img                       # Dataset(s)
                 /guests/<guest3>/log                       # Dataset
                 /guests/<guest3>/log/YYYYMM.log            # Files
                 /.config                                   # Dataset
                 /.config/pool.cfg                          # File
                                  pool_role=secondary       # Pool property
/chyves/anther_pl/guests
                 /guests/<guest4>/.config/.cfg              # File
                 /guests/<guest4>/disk{n}                   # Volumes
                 /guests/<guest4>/img                       # Dataset(s)
                 /guests/<guest4>/log                       # Dataset
                 /guests/<guest4>/log/YYYYMM.log            # Files
                 /.config                                   # Dataset
                 /.config/pool.cfg                          # File
                                  pool_role=secondary       # Pool property
    

Offline dataset:

offlinePL/chyves_offline                                    # Datasets
offlinePL/chyves_offline/.config/pool.cfg                   # File
                                         pool_role=offline  # Pool property
    

Example of a single pool dataset hierarchy:

  /chyves/zroot/guests
               /guests/<guest1>/.config/.cfg                # File
               /guests/<guest1>/disk{n}                     # Volumes
               /guests/<guest1>/img                         # Dataset(s)
               /guests/<guest1>/log                         # Dataset
               /guests/.defaults                            # File
               /.config                                     # Dataset
               /.config/global.cfg                          # File
               /.config/pool.cfg                            # File
                                pool_role=primary           # Pool property
               /logs                                        # Dataset
               /ISO                                         # Datasets
               /Firmware                                    # Datasets
    

By default, chyves uses ZFS volumes as guest storage backing. Each volume is named disk{n} and is attached to the guest via an emulated AHCI controller. On all hosts, 8 ahci-hd devices are supported per PCI slot. On certain hosts, up to 32 ahci devices can be attached per PCI slot. See global property ´consolidate_bhyve_pci_devices´ for details.

There is limited support for raw file backed guest storage. This is a manual process and there are not any chyves commands that create, modify, or delete these raw image files. All files in the ´img/´ folder and child folders are attached to the guest on start. To have independent snapshots for each raw image, create a child datasets under <pool>/chyves/guests/<guest>/img, this has an advantage over ZFS volumes as there is no refreservation cost associated with the snapshots. The command chyves info reports the raw image files and size. To create a sparse raw image run:

truncate -s 16G /chyves/<pool>/guests/<guest>/img/<image-name>.

All logs entries are stored on the primary pool under /chyves/<primary-pool>/chyves/logs with the dataset´s compression turned on. The file are separated on a monthly basis using a YYYYMM.log file name. The log entries use the ISO 8601 date format for monitoring tools. There is a separate log file on a per guest basis, however at this time not all guest events are recorded to this file, however these events are recorded in the global logs regardless.
2016-07-09T21:27:00+0000 - [2] - Mimicking tap50 interface for g10.
    

The logs are dash delimited with leading and trailing single spaces. The first field indicates the time in ISO 8601 format, ´2016-07-09T21:27:00+0000´ in the example above. The second field is the ´stdout_level´, ´2´ in the example above. The third field is the log event, ´Mimicking tap50 interface for g10.´ in the example above. See the Global Configuration Properties section below for more information on what ´stdout_level´ does.

The network mode is set by the global setting ´network_design_mode´ and determines how chyves handles network devices for the guests. The two modes are ´auto´ and ´system´, both modes are discussed below.

VALE support is experimentally provided as a proof of concept. VALE support is not widely implemented and is feature limited at it´s current development stage. To use VALE requires that ´device netmap´ be compiled into the kernel and that ´vale-ctl´ be compiled from ´/usr/src/tools/tools/netmap´ and moved to $PATH directory. VALE natively support em(4), igb(4), ixgbe(4), and re(4). Other NICs must use emulation which may reduce performance. See netmap(4) for more information. VALE interfaces are added to a guest the same way a tap interface is added using: ´chyves network add vale{n}[:{p}]´ where {n} is the vale switch you want to use and optionally :{p} specifies the port on that switch. Specifying a port is not recommended. VALE interfaces are clever in that the interface is commonly shared between other guests connecting to that ´virtual´ VALE switch. Two guests using ´vale0´ will be connected to the same virtual switch.

Hosts after a certain commit support Intel e1000 emulation as an alternative to using virtio-net. This can be utilized by setting ´bhyve_net_type´ to ´e1000´, see guest property for details.

By default, chyves is configured to manage the complete network design layout. chyves keeps track of which physical, tap, and vlan interfaces are associated with which bridges, and which tap and VALE interfaces are associated with which guests. Upon starting a guest these designs are checked, verified, and then created if not existing. To manage the network design using this method, use the ´chyves network´ commands to create the associations and ´chyves list bridges´ for an overview.

On a fresh simple installation, the only command needed is ´chyves network bridge0 attach em0´. This tells chyves to associate the interface ´em0´ with the default bridge. To change the default bridge, the command would be ´chyves network bridge64 default´ to set ´bridge64´ as the default. All tap interfaces created for guests are then associated with the bridge set in defaults.

As indicated above, tap interfaces are attached to a bridge, which optionally can be attached to a physical or vlan interface. If the bridge is not associated with a physical or vlan interface, the bridge must be put into ´private´ mode. This is done by running ´chyves network bridge64 private´. A private bridge allows sensitive traffic to transverse the bridge without the possibility of traffic being monitored from an outside network. A private bridge can also use pf(4) for NAT capabilities but this is not built into chyves.

The ´system´ mode assumes the user will correctly create and configure all devices on the host system, including the tap devices. No checks are ran to test connectivity and chyves simply attaches tap or VALE interfaces to the guest as configured in the ´net_ifaces´ property.

Converting from ´system´ to ´auto´ will not automatically start to work. Each device will need to be manually associated with each other.

There are four types of chyves properties: global configuration properties, pool properties, per-guest properties, and default guest properties. Each is stored in a file in the chyves dataset hierarchy. It is not recommended to directly edit the ´*.cfg´ files, this is because there are no filters to stop typos, warn for incorrect property names, or invalid values. The filter is only applied when running the ´chyves guest set´ command and not rechecked when pulling the values from the files.

Also certain actions are triggered when setting certain properties. For example, setting the ´template´ guest property will set or unset the readonly flag on the ZFS dataset.

The pool configuration is stored in a file at ´/chyves/pool/.config/pool.cfg´. On the primary pool there is also a file in the same directory called ´global.cfg´, this contains the global settings for chyves.

The ´dataset_role´ setting is used to store the role of that pool containing the chyves datasets. Valid values are primary, secondary, and offline. Only one ´primary´ dataset can be configured per system. The primary dataset is the only dataset that contains the ISO and firmware resources. Only the primary pool has guest defaults configuration file. These defaults are referenced when setting properties for new guests. The primary pool is also where new guests are created when the [pool] argument is not declared with ´chyves create´ command. All other active pools are set to the "secondary" role. Pools set to the ´offline´ role are left untouched and is a good role to put a local replicated backup. The primary pool is critical to the operation of chyves, without a primary pool set, only the ´dataset´ sub-command are permitted to run. The first pool setup on the system is the primary pool. This can be changed later with ´chyves dataset pool promote´.

These properties keeps track of the version of the dataset and the role. With multiple pools, defined per-pool roles are necessary. This is defined through the use of a dataset called ´pool/chyves/.config´ where the pool specific properties (pool.cfg) are stored.
dataset_role={primary|secondary|offline}
Managed through ´chyves dataset´ commands.
Vital in multi-pool configurations, each role type has different characteristics as explained below:
primary - Pools in this role are utilized exclusively for the following purposes: Store ISO and Firmware resources. Reference point for global properties. New guest are defaulted to be created on this pool unless otherwise specified as a property for ´chyves create´. Only one ZFS pool can be in the primary role per system and is the only role for single zpool configurations.
secondary - Pools in this role are utilized for storing other active guests not stored on the primary ZFS pool.
offline - Pools in this role are not utilized, this role is intended for backup. Guests on these pools are omitted from all subcommands. To further prevent action on ´offline´ pools, the dataset is renamed to ´chyves_offline´ which chyves will completely ignore.
pool_version={dataset-version}
Managed through ´chyves dataset´ commands.
This property indicates the current version of the chyves pool. This an upgrade mechanism to ensure the dataset and it´s child datasets contain the correct architecture. The command ´chyves dataset pool upgrade´ brings a dataset incrementally to the latest version when there is a discrepancy between the dataset version and the chyves version. A check is ran before execution to ensure the version of the pool is compatible with the version of chyves.

These properties control the behavior of chyves.

Many of these properties are not recommended to be changed directly unless the scope of their impact is understood or when managed through subcommands such as ´chyves network´. The preferred management method is given on the first line after each property in bold text.

Usage:

chyves global set <property>=<value>

chyves list global [<pool>]

Properties:

auto_load_kernel_mods={yes|no}
User managed and settable.
When set to "yes", chyves will load the kernel modules necessary for guests. When set to ´no´, chyves will simply check if the modules are loaded and exit with a message if not loaded.
bridge{n}_phy_attach={interface|private}
Managed through ´chyves network´ commands.
This property contains a physical or vlan interface name for a bridge to belong. When set to ´private´ the bridge is not joined with a outside network.
Example values:
bridge0_attach=em0
bridge10_phy_attach=vlan52
bridge512_phy_attach=private
Usage:
chyves network bridge{n} attach {<interface>|private}
bridge{n}_tap_members={tap{n}[,tap{n},tap{n}]}
Managed through ´chyves network´ commands.
This property is a comma separated list of the tap members for bridge{n}, where {n} is the interface number. Valid values for {n} are 0 to 32768. Guests are automatically added to this property using the bridge{n} that is set in ´defaults´ under the ´bridge´ property.
Examples values:
bridge0_tap_members=t0
bridge70_tap_members=t20,t30
A tap can be moved to another bridge by first removing the tap from the original bridge and adding to the desired bridge. Use the following command syntax to do this:
chyves network bridge{n} unjoin tap{n}
chyves network bridge{n} join tap{n}
check_for_updates={daily|weekly|monthly|always}
User managed and settable.
This determines how often to check for updates for chyves on the GitHub repository. The keyword ´always´ means to check every time chyves is ran.
check_for_updates_last_check=YYYYMMDD
Managed internally.
This contain the date of last check.
check_for_updates_last_check_status={1|0}
Managed internally.
When set to ´1´ an update is available.
check_for_updates_timeout_seconds={n}
User managed and settable.
This number is used to set the network timeout for fetch(1) before giving up.
check_for_updates_unique_id=UUID
Managed internally.
This contains a UUID used for identification. It is set when the primary pool was created.
console_start_offset={integer}
User managed and settable.
This is a compatibility mechanism used to offset the first chyves null console modem number so that a collision are less likely with another application or bhyve front end manager. The initial default is set to ´50´. After the first guests are created, then the next highest console number is used to create the next guest.
consolidate_bhyve_pci_devices={no|yes}
User managed and settable.
The default is set to ´no´ as it may have performance implications, however this may be necessary if more than 26 PCI devices are connect to a guest. This property signals the bhyve string generators to use all PCI functions for similar devices.
On all hosts, 8 PCI functions can be used per PCI slot. However, up to 32 ahci-hd devices can be attached to a single PCI slot for hosts running 12-CURRENT after commit r302459, 11-STABLE after commit r304422, or hosts running 10-STABLE after commit r304420. Meaning in ideal conditions up to 208 PCI devices can be attached on any host or up to 832 devices on supported hosts.
default_clone_flag
User managed and settable.
Flag to use when cloning a guest and the clone type flag is omitted. See clone command under GUEST CLONE SUB-SUB-COMMAND section.
default_info_flags
User managed and settable.
Flags set here are passed to ´chyves info´ when no flags are used. See command ´chyves info´ for valid flags.
default_list_flags
User managed and settable.
Flags set here are passed to ´chyves info´ WHEN the command ´chyves list´ is used. Both commands use the same backend function and ´chyves list´ is kept around for legacy reasons. See command ´chyves info´ for valid flags.
dev_mode={off|on|-xvn}
User managed and settable, advanced feature.
Setting to ´on´ allows for functions to be called direct from the command line using chyves dev. Using the -xvn flags instead of the word on will use Bourne´s set command to turn on special option flags during chyves dev execution. These flags can be used individually (-x|-v|-n) or combined (-xv). See sh(1).
eject_iso_on_n_reboot={n}
User managed and settable.
See same property name under the Guest Properties section below for description of functionality.
log_mode={host|guest|dual}
User managed and settable.
Determines the source of information to save in the log files when ´log_to_file´ is set to ´yes´. When set to ´guest´ only guest actions are recorded. When set to ´host´ only actions not involving guests are recorded. When set to dual, both are recorded.
log_to_file={yes|no}
User managed and settable.
Turns on logging to a file. For general logging the file is saved at ´/chyves/logs/YYYYMM.log´ and for guests the file is saved at ´/chyves/guests/guest/log/YYYYMM.log´ or at ´/chyves/poolguests/guest/ log/YYYYMM.log´.
network_design_mode={auto|system}
User managed and settable.
The default is ´auto´, which means chyves manages everything above the physical or vlan Ethernet interface, all the way to the guest. This is managed through ´chyves network´ commands. When set to ´system´, chyves only attaches the tap or VALE interfaces to the guest and leaves it to the user to have configured everything else (correctly). See NETWORK section above.
restrict_new_property_names=[off|on]
User managed and settable, advanced feature.
Setting to "on" allows for new properties to be created with ´chyves set´. The default is set to "off" to prevent creating new properties due to typos. Even when set to ´on´ this will not allow a creation of new global or defaults properties.
stdout_level={0-3}
User managed and settable.
Determines the amount of output to send to the terminal. The four numeric settings do the following. This does not impact the log files.
0 - off - No output
1 - minimal Sub command action shown
2 - regular + Each step in the sub command shown
3 - verbose ++ Outputs bhyve and loader command used.
4 -- Never print to screen. Used in __return* functions that would break even with the value set to ´0´.
tap_start_offset={integer}
User managed and settable.
This is a compatibility mechanism used to offset the first chyves tap interface so that a collision is less likely with another application or bhyve front end manager. The initial default is set to "50", valid values are from 0 to 32767.
tap_up_by_default={off|on}
User managed and settable.
When set to "yes", the sysctl: net.link.tap.up_on_open is set to "1" when running script. Default is "on" but it is recommended to set to "off" and update your /boot/loader.conf to set this sysctl.
vlan_iface_base_name=vlan_base_name
User managed and settable.
When using a non-standard vlan naming nomenclature this needs to reflect the change. The default is "vlan" when using the standard "vlan{n}" naming nomenclature.
uefi_vnc_port_start_offset={integer}
User managed and settable.
This is a compatibility mechanism used to offset the first VNC port used by UEFI guests. The initial default is set to "5900", valid values are from 1 to 65536.

These are properties used by chyves to specify the properties to pass to bhyve, grub-bhyve, and chyves itself when starting a guest. Changing these values on a running guest will not yield any change until the guest is completely stop and then started again.

Usage:

chyves <guest> get <property>

chyves <guest> get all

chyves list properties

chyves list <property>

chyves <guest>|MG|all set <property1>=<value> [<property2>=<value>] [<property3>=<value>]

chyves <guest>|MG|all set <property1>=<value> [<property2>=<value>] [<property3>=<value>] [<guest2> [<property1>=<value>] [<property2>=<value>]]

bargs
For advanced users to pass additional flags directly to bhyve. See bhyve(8) for complete list of flag options. To find out which flags are used when starting a specific guest, turn on global configuration ´stdout_level´ to ´3´ or check the global log file.
bhyveload_flags
For advanced users to pass additional flags directly to bhyveload. This is primarily intended to pass ´-e´ flags for environment variables. See bhyveload(8) for a complete list of flag options. To find out which flags are used when starting a specific guest, turn on global configuration ´stdout_level´ to ´3´ or check the global log file.
bhyve_disk_type={virtio-blk|ahci-hd}
Sets the method to attach ZFS volumes and disk images to the guest. Most guests do not support Virt-IO block devices without installing drivers at installation.
bhyve_net_type={virtio-net|e1000}
Sets the method to attach tap interfaces to the guest. Intel e1000 emulation is available on hosts on 12-CURRENT after commit r302504, 11-STABLE after commit r304424, and on 10-STABLE after commit r304425.
cpu={n}
Assigns {n} number of CPU cores to a guest, up to 16.
chyves_guest_version=MMmm
Managed through ´chyves guest upgrade´ command.
Used to ensure the guest contains latest properties when moved between hosts on different versions of chyves. "MM" signifies the major version as an integer and "mm" as the minor version as an integer. Changes to the major version require an upgrade via ´chyves guest upgrade´ because a guest property value format has changed or a new required property was added. Differences in the minor version do no require an upgrade but may not have full functionality.
description="INSERT BRIEF DESCRIPTION"
Used to describe guest. Use double quotes when description contains spaces.
eject_iso_on_n_reboot={n}
This property determines if and when to eject the optical media when installing an OS. By default this is set to ´1´ because most *nix systems install on the first boot. Live CD should be turned to ´0´ and Windows systems should be set to ´2´ or greater.
There is a global property which shares the same name has has the same functionality. The global property is used if not set on the guest.
loader={bhyveload|uefi|grub-bhyve}
Tells which loader to use to boot guest. bhyveload is for FreeBSD based guests, uefi is used for UEFI based guests, and grub-bhyve is used for all other guests.
When setting a guest to use the uefi loader, some uefi_* properties are populated. One of these properties is uefi_firmware which is required for guests to start.
net_ifaces=tap{n}|vale{n}[:{p}]
Managed through ´chyves network´ commands when ´network_design_mode´ is set to ´auto´.
User settable when ´network_design_mode´ is set to ´system´.
Stores which tap and VALE interfaces are assigned to a guest. Where {n} is a unique interface number. Taps are process locked and can not be shared simultaneously by multiple guests. Multiple devices are stored using commas as delimiters.
VALE interface names must be vale{n}[:{p}] where {n} can be alpha-numeric up to 9 characters long. Optionally a port can be specified where :{p} starts with a separating colon and either a single alphabetical character or a number 0-9999.
Usage:
chyves network <guest> add {tap|tap{n}|vale{s}[:{p}]}
chyves network <guest> add {tap|tap{n}} bridge{n}
chyves network <guest> remove {tap{n}|vale{s}[:{p}]}
See NETWORK SUB-COMMANDS section for complete list of commands to manage this property.
notes="INSERT FURTHER NOTES"
Used to further describe guests. Use double quotes when description contains spaces.
os=operating-system
Used to determine the properties to use for the grub.cfg and device.map files when the loader property is set to grub-bhyve.
Supported values are openbsd60, openbsd59, openbsd58, openbsd57, netbsd, debian, d8lvm, centos6, centos7, arch, gentoo, coreos, coreossecure, default, or custom. Any other values are invalid. default is the generic catch-all value.
When ´coreos´ is used, the flag ´coreos.autologin´ is used to bypass authentication for the console. When ´coreossecure´ is used, the console requires a username and password.
Using custom relies on the user to manually create the grub.cfg and device.map files in the guest directory /chyves/<pool>/guests/<guest>.
Example:
For an OpenBSD guest "obsd59" located in /chyves/kubota/obsd59/ and an install ISO in /chyves/dozer/ISO/install59.iso/, your files will look like this:
device.map file:
(hd0) /dev/zvol/kubota/chyves/obsd59/disk0
(cd0) /chyves/dozer/ISO/install59.iso/install59.iso
    
grub.cfg file for installation:
kopenbsd -h com0 (cd0)/5.9/amd64/bsd.rd
boot
    
grub.cfg file after installation is complete:
kopenbsd -h com0 -r sd0a (hd0,openbsd1)/bsd
boot
    
The chyves project welcomes any OS submissions to help other users from re-discovering leg work done by others.
pcidev_{n}={bhyve-pci-dev}
This is an advance feature and assumes you have read bhyve(8) AND understood it. This property does NOT have a complete input verification suite or complete host support verification.
This property attaches a bhyve PCI device to the guest. The ´{n}´ is completely arbitrary number and is only a matter of the order of attachment. ´{bhyve-pci-dev}´ is the bhyve PCI device to attach. See bhyve(8) for a complete list or below for common uses.
chyves attaches each custom PCI device alone on the PCI bus, except for pass-through devices.
To create a virtio RNG, the command would be
chyves <guest> set pcidev_0=virtio-rnd
To create a permanently attached optical media device using a chyves ISO resource where "cd.iso" is the ISO name, the command would be:
chyves <guest> set pcidev_1=ahci-cd,/chyves/<primary-pool>/ISO/cd.iso/cd.iso
To create a sparse 16G disk and attach, the commands would be:
truncate -s 16G /chyves/<pool>/guests/<guest>/01.img
chyves <guest> set pcidev_2=ahci-hd,/chyves/<pool>/guests/<guest>/01.img[,block-options]
Although not recommended, a tap interface can be manually attached using this command:
chyves <guest> set pcidev_3=virtio-net,tap10
...using Intel e1000 emulation (only 12-CURRENT hosts):
chyves <guest> set pcidev_5=e1000,tap10
...with an associated mac address:
chyves <guest> set pcidev_4=virtio-net,tap10,mac=58:9C:FC:00:00:00
PCI pass-through devices which share the same physical PCI slot number on the host also will share the same virtual physical slot number in the guest. This is due to the potential for kernel panics on certain devices such as Fiber Channel PCI cards. Keep in mind, only eight PCI functions can be assigned to a virtual physical slot in bhyve, additional devices are ignored. To set a PCI pass-through device use the follow commands, where ´6´ and ´7´ are arbitrary values and ´9/0/0´ and ´9/0/1´ is the PCI bus/slot/function device triplet.
chyves <guest> set pcidev_6=passthru,9/0/0
chyves <guest> set pcidev_7=passthru,9/0/1
To get the PCI triplet on the host, run:
root@bhost:~ # pciconf -lv | grep -A4 -E ´^ppt´
ppt0@pci0:9:0:0: class=0x0c0400 card=0x01461077 chip=0x24321077 rev=0x02 hdr=0x00
vendor     = ´QLogic Corp.´
device     = ´ISP2432-based 4Gb Fibre Channel to PCI Express HBA´
class      = serial bus
subclass   = Fibre Channel
ppt1@pci0:9:0:1: class=0x0c0400 card=0x01461077 chip=0x24321077 rev=0x02 hdr=0x00
vendor     = ´QLogic Corp.´
device     = ´ISP2432-based 4Gb Fibre Channel to PCI Express HBA´
class      = serial bus
subclass   = Fibre Channel
    
Normally the device in the example above would use the isp(4) drivers. However, the devices need to be using the ppt drivers. In this context, the ppt drivers tell the host to ignore the device as it will be pass-through to a virtualized guest. To get a PCI device to load the ppt drivers instead of it´s normal drivers, edit the /boot/loader.conf file to contain the PCI triplet of each device in the pptdevs directive. The following is consistent with our examples above:
pptdevs="9/0/0 9/0/1"
    
A reboot is necessary after editing the /boot/loader.conf.
The ´-S´ flag must be appended to the current ´bargs´ guest property to wire the guest memory for PCI pass-through to work.
To remove a pcidev_{n} from a guest run: chyves <guest>|MG|all unset <pcidev_{n}>.
VGA/GPU Passthrough has not been reported to work. chyves issue #3 on GitHub was opened to document success and failures of bhyve passthrough of VGA/GPU devices. Check there for the latest status.
ram={n}[S]
{n} is the number of bytes and [S] is the size denomination in "K" kilobytes, "M" megabytes, "G" gigabytes, or "T" terabytes. Megabytes are assumed if no suffix is given.
rcboot={n}
Any non-zero number tells chyves to start the guest upon host boot when the ´chyves_enable=YES´ directive is used in ´/etc/rc.conf´. The integer represents the boot priority where the highest numbered guest is started first. Using ´0´ disables starting on host boot. If multiple guest share the same priority number, then those guests are started alphabetically.
revert_to_snapshot=@snapshot-name
Describes the snapshot to revert to based on the handling method specified in ´revert_to_snapshot_method´. If this property is blank but a method is specified, then the latest snapshot is used.
revert_to_snapshot_method={both|off|reboot|start}
Prior to starting and/or rebooting, a guest can be reverted to a previous snapshot state. This is helpful for guests that get modified outside of specification such as frequently compromised web server or VDI instances. Setting to ´start´ only reverts the guest when starting the guest, ´reboot´ only on reboots, ´both´ for both starts and restarts, and ´off´ to disable this feature on the guest.
The snapshot rollback impacts the entire dataset including guest properties. The guest properties are reloaded after the rollback to ensure there is a consistent guest state. See the snapshot rollback command under the GUEST SNAPSHOT SUB-SUB-COMMANDS section for details on what actions are taken during a rollback.
serial=nmdm{n}
Attaches null modem console. {n} must be a unique number and can not be shared between started guests. A unique number is given on creation. Not recommended to be changed and can never be changed while guest is running.
tap{n}_mac={xx:xx:xx:yy:yy:yy}
Where {n} is the tap interface number to assign the specified MAC address to be attached to the network adapter inside the guest OS. The MAC address is an ASCII string in ethers(5) format.
Usage:
chyves <guest> set tap10_mac=58:9C:FC:00:00:00
template={yes|no}
When set to ´yes´ chyves will not start the guest. The guest´s datasets are set to readonly so no changes can be made until set back to ´no´.
uefi_console_output={vnc|serial}
When set to "serial", a UEFI guest will use the standard serial interface. Guests set to "vnc" will use a VNC connection on supported hosts. VNC output is experimental and introduced to bhyve in May 2016. VNC support requires at least 11-CURRENT (r300097) or later, a modified bhyve binary with graphics support, and the UEFI firmware "BHYVE_UEFI_20160526.fd".
uefi_firmware=firmware-resource-name
UEFI firmware bootrom file used to boot UEFI guests. These are available in Peter Grehan´s public FreeBSD file directory or sysutils/uefi-edk2-bhyve. The value must be the exact name as displayed in ´chyves list firmware´.
uefi_vnc_client={print|freerdp|custom}
This stores the preferred VNC client used to start a session with the guest properties pre-populated.
uefi_vnc_client_custom_cmd
This contains the command to start the VNC client when ´uefi_vnc_client´ is set to ´custom´.
uefi_vnc_ip=x.x.x.x
Specifies the IP for the host to bind-to for VNC connections for the guest. The default is "0.0.0.0" which binds to all IPs on the host.
uefi_vnc_mouse_type=ps2|usb3
This property is only used when the property "uefi_console_output" is set to "vnc". When set to "ps2" a PS/2 mouse is connected to the guest. When set "usb3" a USB 3.0 tablet is emulated which provides much better mouse performance but is only supported on newer guest OSes.
uefi_vnc_pause_until_client_connect={on|off}
When set to "on" the guest will wait to boot until a VNC client connects. This is helpful for installations requiring a key press within a short timing window.
uefi_vnc_port={n}
Specifies the port for the host to listen on for VNC connections for the guest. Valid values are from 1 to 65536.
uefi_vnc_res=widthxheight
Specifies the resolution the VNC client will connect with. The following resolutions are supported:
1920x1200
1920x1080
1600x1200
1600x900
1280x1024
1280x720
1024x768
800x600
640x480
uuid=uuid
Sets UUID for bhyve instance. Set by /bin/uuidgen at creation.
virtio_block_options_disk{n}=[nocache[,direct][,ro][,sectorsize=logical[/physical]]]
This is an advance feature and assumes you have read zfs(8) man page AND completely understood it. This property does NOT have a complete input verification suite.
This is a per disk setting used to append bhyve virtio-block options to a disk. While there is a very limited use case of these options, they can be utilized but it is not recommended. See bhyve(8) for what these options do.
Keep in mind that the logical sectorsize is already used by chyves and pulled from the zvol´s ´volblocksize´ ZFS property when the virtio_block_options is not set. When the property "virtio_block_options_disk{n}" exists, the sectorsize is no longer automatically populated to prevent collision.
To set this property for disk0 to have read only with a 512 sector size and a 4096 physical size:
chyves <guest> set virtio_block_options_disk0=ro,sectorsize=512/4096

These properties are referenced when creating new guests. The guest section of properties have the same purpose as described in Guest Properties section above, unless otherwise noted. Below are the initial default values on a fresh installation of chyves for reference.

The some UEFI properties are not assigned until the ´loader´ value is set to ´uefi´. This is to prevent assigning properties to guests which can not utilize those features.

The UEFI VNC properties are not assigned until the ´uefi_console_output´ value is set to ´vnc´. This is to prevent unused VNC port numbers from being assigned to guests which can not utilize those features.

Usage:

chyves defaults set <property>=<value>

chyves list defaults

Defaults and initial values:

bargs
"-A -H -P" - default for guests running on FreeBSD less than 10.3.
"-A -H -P -S" - default for guests running on FreeBSD 10.3 or later.
  • bhyve_net_type=virtio-net
  • bridge=bridge0
Used to set the bridge to join tap interfaces to for new guests.
  • cpu=1
  • loader=bhyveload
  • os=default
  • ram=256M
  • rcboot=0
  • revert_to_snapshot=""
  • revert_to_snapshot_method=off
  • size=8G
Used during guest and disk creation when the size property is omitted. No longer a guest property. The ZFS property ´used´ is used to show the size in ´chyves info -z´.
  • template=no
  • uefi_console_output=serial
  • uefi_firmware="-"
  • uefi_vnc_client=print
  • uefi_vnc_ip=0.0.0.0
  • uefi_vnc_mouse_type=ps2
  • uefi_vnc_pause_until_client_connect=no
  • uefi_vnc_res=800x600

These default disk properties are direct ZFS values used when creating disks for the guest. These properties are not recommended to be changed, a person is liable to chainsaw a foot off and then massacre a nearby litter of kitten and or puppies in the process. Heed this warning! The value "inherit" will inherit the value set by the ZFS (*grand)parents. See zfs(8) on settable values but remember, think of the kittens and puppies. The initial default values are:

  • disk_volmode=dev
  • disk_volblocksize=512
  • disk_dedup=inherit
  • disk_compression=inherit
  • disk_primarycache=inherit
  • disk_secondarycache=inherit

Utilization of tmux is provided under the command ´chyves guest console tmux´.

chyves utilizes tmux by creating a session called "chyves", then creates a window named after the guest, then splits that window into two panes. The left pane is used to manage the guest and the right pane is the serial console for the guest. If a window named after the guest already exists, then the command is inserted into the active pane for that guest window and then the session is joined or rather ´attached´ in tmux´s parlance. Each additional guest has a window created under the same ´chyves´ named session. See tmux(1) for full details on use.

To use a command for tmux, enter: ´Ctrl + b (release-keys) command´. Where Ctrl + b is the modifier, (release-keys) is literally releasing the Ctrl and b keys, and command is the case sensitive letter or command to type in. Sometimes this is written as ´C-m´ where ´m´ means modifier. In this man page, the abbreviated syntax used is ´C-b´. Below are necessary tmux commands for basic use with chyves:

While in a tmux session:

  • C-b n Go to next guest window.
  • C-b p Go to previous guest window.
  • C-b l Go to last guest window.
  • C-b w List all available guest windows and select which to go to.
  • C-b (left-arrow) Move cursor to the pane to the left
  • C-b (right-arrow) Move cursor to the pane to the right
  • C-b (up-arrow) Move cursor to the pane above
  • C-b (down-arrow) Move cursor to the pane below
  • C-b c Create a new window
  • C-b % Split the current pane vertically
  • C-b " Split the current pane horizontally
  • C-b x Kill current window
  • C-b d Detach from tmux session, remains opened in background.
  • C-b D Detach other connections from session. Good if a session is opened from a smaller resolution client in one location. Disconnecting it will maximum the screen use on the local connection.

When not in a tmux session:

tmux attach -t chyves
Reattach to the tmux session named ´chyves´.
tmux at
Reattach to the last tmux session

Support to boot guests via UEFI is provided through the use of a bootrom firmware set with the ´uefi_firmware´ property. This boot method is set by changing the ´loader´ property to ´uefi´. When this is done for the first time on a guest, many other guest UEFI properties are populated.

Graphical console support is provided via UEFI GOP as of May 2016, this replaces the serial interface. Support is provided as a technical preview as there are still sharp edges. Know issues: partial VNC client support and mouse mapping issues when ´uefi_vnc_mouse_type´ property set to ´ps2´. The following is required for graphical console use: the property ´uefi_console_output´ must be set to ´vnc´ on the guest, a host on 11-BETA1, and the UEFI firmware ´BHYVE_UEFI_20160526.fd´, and a VNC client.

See Guest Properties section for complete list of related uefi_* properties.

Support for VNC client launching is utilized with chyves <guest> console vnc. This either prints the VNC settings or starts a VNC session. Currently FreeRDP is preconfigured or a custom VNC client can be configured with the ´uefi_vnc_client_custom_cmd´ property.

dataset
See DATASET SUB-COMMANDS section.
firmware
See FIRMWARE SUB-COMMANDS section.
<guest>
See GUEST SUB-COMMANDS sections.
help
Prints version information, command valid syntax.
dev
chyves dev [<function>|<command>] "param1" ... "param7"
Allows for a function to be called direct from command line when developing for chyves. Requires dev_mode to be set with something other than ´off´. This is globally set on the primary pool on. See Global Configuration Properties section above.
The properties are function indexed and only seven parameters are possible due to the way Bourne indexes parameters. Double quotes are required for parameters with strings, such as commands.
info
See INFO COMMAND section.
iso
See ISO SUB-COMMANDS section.
list
See LIST SUB-COMMANDS section.
upgrade
chyves upgrade [master|dev|check]
Downloads and installs the latest version from the current running branch on GitHub. Optionally the branch can be specified to change branches. Changing from dev to master may render an unusable system if the ´chyves_guest_version´ or ´dataset_version´ has changed in those branches and those changes have not made it to ´master´ yet.
To run only a version check, use the keyword ´check´.
version
Prints the current running chyves version, dataset version, guest version, and branch.

install
chyves dataset <pool> install
Creates ZFS datasets and properties on the specified pool. The first pool is always setup as the primary pool. This is the first step to getting chyves running.
upgrade
chyves dataset <pool> upgrade
Upgrades dataset version from an old version to the newest version incrementally. This is done by adding, removing, and updating properties which are required by the latest version of chyves. It is recommended to upgrade the primary pool first in case their are new defaults, otherwise the ´chyves guest upgrade´ will need to be manually ran against the guests on secondary pools.

These sub-commands manage UEFI firmware resources.
import
chyves firmware import {URL|<local-path-to-firmware>}
Imports a firmware resource into chyves. Either a local or remote source can be given. Remote sources can be from http or ftp sources.
rename
chyves firmware rename {firmware-name} <desired-name>
Rename an firmware resource.
delete
chyves firmware delete {firmware-name}
Delete an firmware resource.
list
chyve firmware list
List available firmware resources.

clone
See GUEST CLONE SUB-SUB-COMMAND section below.
console
See GUEST CONSOLE SUB-SUB-COMMANDS section below.
create
chyves <guest> create [<size>] [<pool>]
Where guest is a uniquely identifying name used to reference the guest, optionally [size] is the size of the block device, and optionally [pool] is the pool to create the guest on in multi-pool configurations. If [size] is not supplied, then ´size´ in defaults is used. If [pool] is not supplied, then the primary pool is used. A tap interface is added and associated with the bridge set in defaults. Support for multi-guest.
delete
chyves <guest>|MG delete [force|keepnet]
Permanently delete a guest from the host. If the ´force´ keyword is used, then dependent clones are deleted as well. The ´keepnet´ keyword is used to keep the network associations, this is useful for clones that share the exact properties.
disk
See GUEST DISK SUB-SUB-COMMANDS section below.
get
chyves <guest> get {<property>|all}
Gets property for guests. See PROPERTIES section above for more detail. Use ´chyves list global´ or ´chyves list defaults´ for respective property types.
reclaim
chyves <guest>|MG reclaim
Reclaims a guest´s VMM resources. This does not delete a guest from the host, it destroys the guest´s VMM resources (bhyvectl vernacular).
rename
chyves <guest> rename <new-guest-name>
Renames the guest
set
chyves <guest>|MG|global|defaults set [<prop1>=<value>]...
Sets ZFS properties for guests. Using the guest name of ´defaults´ sets the default values for newly created guests. Using the guest name of ´global´ sets global properties.
snapshot
See GUEST SNAPSHOT SUB-SUB-COMMANDS section below.
start
chyves <guest>|MG start [<iso>]
Where iso is optionally the name of an ISO resource, this media is ejected after x amounts of boots as set by global or guest property ´eject_iso_on_n_reboot´. This command starts bhyveload, grub-bhyve, and UEFI guests.
For grub-bhyve guests if a ISO is supplied, it is assumed to be the installation ISO for whichever OS is set by the ´os´ property. This means the device.map and the grub.cfg files generated reflect booting from the installation CD. If a non-booting CD is needed to be attached to a guest using grub-bhyve, then manually adding a custom PCIDEV device is suggested. See the pcidev{n}_ property under Guest Properties section for instructions.
stop
chyves <guest>|MG stop [force]
Attempts to gracefully stop a guest. This is effectively like pressing the power button on a computer tower, this means the guest OS determines how to respond. Running ´poweroff´ (or the equivalent) will shutdown a guest and the VMM resources are reclaimed. Using the [force] option forces the guest to stop by running ´kill -9´ and then reclaiming the guest´s VMM resources. USE EXTREME CAUTION WITH ´force´ AND ONLY AS A LAST RESORT, THIS CAN CAUSE A CORRUPT OS.
upgrade
chyves <guest>|MG upgrade
Upgrades a guest to the latest chyves guest version. This add, removes, and modifies guest properties to be compatible with the the current version of chyves. See ´chyves_guest_version´ guest property for details.
unset
chyves <guest>|MG|all unset <property>
Only the following properties may be removed from guests:
  • eject_iso_on_n_reboot
  • pcidev_{n}
  • virtio_block_options_disk{n}

chyves <guest> clone <clonename>|MG [-ce|-cu|-ie|-iu] [<pool>]

This clones a guest, there are four cloning methods that chyves uses. The cloning method is determined by the clone flag after the clone name(s). The first letter of the flag indicates the clone´s dependency on the parent´s datasets, the second letter indicates whether new unique properties are created for the clone. If the cloning method flag is omitted, the default is used as defined in global property ´default_clone_flag´, this is initially set to ´-iu´ as it is the safest and more performant.

The [pool] property is used to clone the guest to a different pool than where the guest currently resides. This can only be done for independent clones.

Dataset dependency:

-c
Creates a ZFS clone of the guest´s disks. Initially the clone shares the same blocks as the parent and only a few KB are consumed to point the clone dataset to the parent´s dataset. This also means, the clones must be deleted before the parent guest is deleted. See ´chyves list clones´ to display the clone hierarchy. The [pool] property is ignored as the clone must reside on the same pool as it´s parent.
-i
Creates an independent clone which is not dependent on the parent´s datasets. Using the [pool] property will clone the guest to the specified pool, otherwise the guest´s pool is used.

Guest properties:

-e
Copies the guest properties exactly as the parent´s. This means the parent can not start while the clone is running, or vise-versa due to the overlapping serial and tap interfaces. Use the ´keepnet´ option when deleting these guests to prevent removing the network association.
-u
Sets new a unique: serial interface, a new tap is created for each interface of the parent under the same bridge, VALE interfaces are copied over and ports removed, a new unique port is used for uefi_vnc_port, and a new UUID is generated.
If the guest´s property ´template´ is set to ´yes´, then the property is temporarily set to ´no´ to create unique properties, then after cloning the guests and clones have their property ´template´ set to ´yes´.

Manage a guest through a console using various methods described below. The primary method for managing guests is through a serial interface. On supported hosts and UEFI guests, video emulation is possible through an internal VNC server attached to a frame buffer. See UEFI SUPPORT above. All other guests need to be administered via a serial communication device.
$null
chyves <guest> console
Establishes a serial connection to a guest using cu(1) via the nmdm(4) device as configure in the ´serial´ property. To escape the cu connection, press tilde (~) twice, then period (.), sometimes hitting ENTER before that sequence is required. If that fails to exit the console, try pressing tilde (~), then press Control + d (^d). If all else fails then use ´chyves guest console reset´.
reset
chyves <guest>|MG console reset
Resets the serial connection for a guest by using ´kill´ against the cu processes associated with the guest as set by the ´serial´ property.
tmux
chyves <guest>|MG console tmux
Creates a tmux session named chyves, then creates a window named after the guest, and then creates a vertically splits the window with two panes. The right pane is intended for guest management and the left pane contains the serial interface which is started with ´chyves guest console´. See TMUX SUPPORT section above.
vnc
chyves <guest>|MG console vnc
Requires a UEFI guest that is configured for VNC use on a host that supports UEFI graphics support. See UEFI SUPPORT above. Opens a X11 VNC client to the guest using the uefi_vnc_client_* global properties. See VNC CLIENT SUPPORT section above.

These sub-commands deal with a guest´s disk, multi-guest is not supported.
add
chyves <guest> disk add [<size>]
Adds a new disk to the guest. The [size] field is optional and will use the guest defaults when not specified.
description
chyves <guest> disk disk{n} description <description>
Sets a description property for a disk.
list
chyves <guest> disk list
Lists the disks attached to a guest and each size, description, and notes for each disk.
notes
chyves <guest> disk disk{n} notes <note>
Sets a notes property for a disk.
remove
chyves <guest> disk remove disk{n}
Removes a disk from the guest.
resize
chyves <guest> disk resize disk{n} <new-size>
Resizes a disk. THIS CAN BREAK THINGS ON THE GUEST IF THE SIZE IS REDUCED.

Keep in mind that due to the way ZFS volumes work, when taking a snapshot all the bits must be able to be rewritten. This means if you have a 8GB chyves disk with 6GB written to it and you take a snapshot, there will be 14GB reserved for the disk until the snapshot is deleted. If another 2GB is written and another snapshot is taken, then 16GB will be consumed and so forth.
$null
chyves <guest> snapshot [@snapshot]
Takes a snapshot of a guest and it´s child datasets. Auto generates a name when no name is given. Must start with an ´@´ sign. Appends ´-LIVE-SYSTEM´ to the snapshot name when the guest is running to both auto-generate and user supplied names.
delete
chyves <guest> delete [@snapshot]
chyves <guest> delete [@snapshot%[snapshot]]
Deletes a snapshot or a range of snapshots. Use the ´%´ symbol to indicate a range of snapshots to be deleted. If a second name is not specified then then all snapshots are deleted up to the specified snapshot name. If a first name is not specified, then the latest top level guest snapshot is destroyed. Before deletion the amount of of space that will be recovered is displayed.
rollback
chyves <guest> snapshot rollback [@snapshot]
Rolls back a guest and it´s datasets to a previous snapshot state including guest properties. When no name is given, the latest snapshot is the rollback point. If there are multiple snapshots in-between the given snapshot and current snapshot(s), those are displayed before deletion. A guest can not be rollback past a clone snapshot point until those clones are deleted.
When the ´network_design_mode´ is set to ´auto´ and there is a discrepancy in the network configuration, the conflicting tap interfaces are added and removed from host configuration. When a tap interface only exists on the current configuration, the tap is removed. When a tap interface only exists in the snapshot state, the tap is added. Added tap interfaces are joined to the default bridge device as the historic bridge associations are not tracked.

Displays active guests and their disks on the system when no flags are used. The global property ´default_info_flags´ is used when no flags are given, this property is populated with end user´s preferred flags. The following flags are used in combination to display information about the guests and disks. These flags are used in combination, meaning the correct syntax is "-rvs" rather than "-r -v -s". See below for a description of what each flag does:
  • -z [size] Displays size, for guests this show what is being used by the dataset. For disks the size displays the volume size.
  • -b [basic] CPU core count, and RAM allocation.
  • -p [pool] Display the pool for the guest.
  • -r [role] Display what role the pool is set to.
  • -v [verbose] Display OS, loader, chyves guest version, net interfaces, and console port.
  • -s [status] Display status of VMM , bhyve instance, and the rcboot value.
  • -t [template] Displays if guest is a template.
  • -c [clone] Displays clone relationship, if any.
  • -u [uefi] Print UEFI console output type, firmware, VNC IP and port, mouse type, pause boot until VNC connect, and VNC resolution.`
  • -d [description] Displays description property.
  • -n [notes] Dispays notes property.
  • -a [all] Display all fields above.
  • -k [no-disks] Do not display guests´ disks.
  • -h [help] Display this message.
  • -w [truncate-to-width] Truncate output to the width of the terminal
  • -l [less] Pipes the output to less.

These sub-commands manage ISO resources.
import
chyves iso import {URL|<local-path-to-iso>}
Imports an ISO resource into chyves. Either a local or remote source can be give. Remote sources can be from http or ftp. The user is prompted for a file hash when a remote source is given. After the download completes the file hash is compared with what is actually hashed. MD5, SHA1, SHA256, and SHA512 are currently supported. If the hashes mis-match then the user is prompted to optionally delete the file. If no hash is supplied, the user is heckled.
Supplied ISO resources can be compressed with current support for files ending in .xz and .gz. Upon import these files are extracted.
rename
chyves iso rename {ISO-name} <desired-name>
Rename an ISO resource.
delete
chyves iso delete {ISO-name}
Delete an ISO resource.
list
chyves iso list
List available ISO resources.

Displays information about various components for chyves.
$null
Lists properties about the guests and their disks. User configurable, uses same backend as chyves info and can be configured by setting ´default_info_flags´.
bridges
List bridges configured for with ´chyves network´ and the attached physical or vlan interfaces.
clones
List dependent clones in a hierarchical tree.
defaults
List default values newly created guests.
disks
List disks.
firmware
Lists the UEFI firmware resources.
global
Lists all the global properties for all the chyves pools.
global [<pool>|primary]
Lists all the global properties for a chyves pools. The word "primary" can be used instead of the primary pool´s name.
iso
Lists the ISO resources. More ISO resource commands under ISO SUB-COMMANDS section.
pools
Lists all the pools and their roles. Helpful when no guests have been created.
processes
Lists all the processes *hyve processes.
processes [<guest>]
Lists all the processes *hyve processes for a guest.
properties
List all properties on system.
<property>
List the property given for all the guests. See Guest Properties section above for a list
snapshots
Lists all of the top level snapshots for all the guests. Does not show snapshots of disks (they are there, though).
snapshots <guest>
Lists all of the snapshots for a guest. Does show snapshots of disks and other child datasets.
tap active
List all the tap interfaces from /dev/tap*

When global property ´network_design_mode´ is set to ´auto´, these commands are used to create and manage network design by storing properties about associate network devices and creates bridge and tap interfaces. The sub-commands below store properties that are referenced and later used to verify and (re)created the network design when starting a guest. The host still requires a user set configuration of the vlan and physical interfaces. chyves will handle creating and associating the tap interfaces with the appropriate bridge interfaces and also attaching those configured vlan and physical interfaces to the bridges while starting a guest. Multiple bridges and taps per guest is supported. See NETWORK section above.
add
chyves network <guest> add {tap|tap{n}|vale{s}[:{p}]}
chyves network <guest> add {tap|tap{n}} bridge{n}
Used to add a tap or VALE interface to a guest, this also adds the tap interface to the default bridge as set in defaults. When the ´tap´ keyword is used, the next available tap interface is used. {n} is the tap number, {s} is the VALE switch number, and optionally {p} is the port on the VALE switch.
attach
chyves network bridge{n} attach iface{n}
Used to associate a vlan or physical interface with a bridge. Keep in mind that a physical or vlan interface can only be on one bridge group. See ifconfig(8) for details.
default
chyves network bridge{n} default
Used to set the default bridge to use for newly created guests.
join
chyves network bridge{n} join tap{n}
Used to add a tap to a bridge interface.
migrate
chyves network bridge{n} migrate bridge{n}
Used to migrate a set of interfaces from an existing to another bridge interface. If migrating to an existing bridge the external interface is overwritten with the interface from the bridge being migrated from and the tap interface lists are combined.
private
chyves network bridge{n} private
Used to set the bridge to private mode. This means there is not an external network connected. This can be useful when sensitive data is being exchanged over a network but not necessarily needing outside access such as a SQL database. This could also be used with NAT. However NAT support is not build into chyves.
remove
chyves network <guest> remove {tap{n}|vale{s}[:{p}]}
Used to remove a tap or vale interface from a guest, this also removes tap devices from the bridge configuration.
unjoin
chyves network bridge{n} remove tap{n}
Used to remove a tap from a bridge interface.

Install chyves on zpool named zroot:
chyves dataset zroot install
    

Configure bridge0 to use em0 as the outside interface:

chyves network bridge0 attach em0
    

Fetch FreeBSD install ISO for later:

chyves iso import ftp://ftp.example.org/FreeBSD-10.2-RELEASE-amd64.iso
    

Create a new guest named bguest with the default size HDD:

chyves bguest create
    

Create three new guests named "gst1", "gst2", and "gst3" each with a 6 gigabyte HDD on a pool called "dev-pool":

chyves gst1,gst2,gst3 create 6G dev-pool
    

List ISO and UEFI firmware resources:

chyves list iso
chyves list firmware
    

or

chyves iso list
chyves firmware list
    

Install the FreeBSD guest bguest:

chyves bguest install FreeBSD-10.2-RELEASE-amd64.iso
    

Console into the installation:

chyves bguest console
    

Once installation is done, exit console (~~.), and stop the guest (to prevent it from attempting to boot from the installation media):

chyves bguest stop
    

Reclaim the VMM resources, sometimes necessary:

chyves bguest reclaim
    

Now that the guest is installed, it can be started like usual:

chyves bguest start
    

Some guest OS´s can be gracefully stopped using:

chyves bguest stop
    

However some guest OS´s need coercing:

chyves bguest stop force
    

List all guests:

chyves list
    

Start all guests:

chyves all start
    

Stop all guests:

chyves all stop
    

Change guest properties by using set:

chyves bguest set ram=512M
chyves bguest set cpu=1
chyves bguest set os=netbsd
    

Set a description or notes to help identify bguest:

chyves bguest set description="FreeBSD chyves guest"
chyves bguest set description="Runs internal webserver using nginx."
    

You can also change multiple properties for one guest in one command by:

chyves bguest set ram=512M cpu=1 os=netbsd loader=grub-bhyve
    

Or change multiple guests property in one command by:

chyves bguest,bguest2,bguest3 set ram=512M description="b cluster"
    

Or change multiple guests and multiple properties in one command by:

chyves bguest,bguest2,bguest3 set cpu=1 ram=512M bguest4 rcboot=50
    

In the above example this changes the ram to ´512M´ and cpu to ´1´ for bguest, bguest2, and bguest3. Then on bguest4, rcboot priority is set to ´50´.

Change all current guests properties in one command by using the ´all´ keyword:

chyves all set cpu=6 ram=4G
    

Change the default properties for future created guests:

chyves defaults set cpu=4 ram=4G
    

List the default guest properties:

chyves list defaults
    

Get a specific guest property for bguest:

chyves bguest get ram
    

Get all bguest properties:

chyves bguest get all
    

Display a lot of information about guests and their disks:

chyves info -a
    

Get a list of available flags for chyves info:

chyves info -h
    

Set your preferred flags for chyves info:

chyves global set default_info_flags="-zps"
    

Set your preferred flags for chyves list:

chyves global set default_list_flags="-zps"
    

List global properties:

chyves list global
    

Snapshot snapshot actions:

chyves bguest snapshot @beforeupdate
chyves list snapshots
chyves list snapshots bguest
chyves bguest snapshot rollback @beforeupdate
    

To delete the default disk0 ZFS volume, create a sparse 16G disk image, and attach to bguest as a custom bhyve PCI device:

chyves bguest disk delete disk0
truncate -s 16G /chyves/dozer/guests/bguest/01.img
chyves bguest set pcidev_0=ahci-hd,/chyves/dozer/guests/bguest/01.img
    

Create a true ZFS clone of ´bguest´ with unique properties:

chyves bguest clone -cu bguest2
    

Create two true ZFS clones of ´bguest´ with same exact properties:

chyves bguest clone -ce exactCL1,exactCL2
    

Create two independent clones of ´bguest´ with unique properties:

chyves bguest clone -iu bguest2,bguest3
    

Create independent clone of ´bguest´ with same exact properties:

chyves bguest clone -ie exactCL1
    

Delete ´bguest2´ from system:

chyves ´`bguest2`´ delete
    

Delete ´bguest´ and dependent clones from system:

chyves ´`bguest`´ delete force
    

Delete ´exactCL1´ from system but keep network associations:

chyves ´`exactCL1`´ delete keepnet
    

Install and run a Debian guest (note LVM installs require "os" be set to "d8lvm") Seems to work with installation disks version 8.0 through 8.2, however something was changed in 8.3 that breaks the installation disk from working.:

chyves debianvm create 8G
chyves debianvm set loader=grub-bhyve os=debian
chyves debianvm start debian-8.2.0-amd64-i386-netinst.iso
chyves debianvm console
    

Install and run a Arch Linux guest :

chyves archguest create
chyves archguest set loader=grub-bhyve os=arch
chyves archguest start archguest archlinux-2015.10.01-dual.iso
chyves archguest console
    

Install and run a CentOS or RHEL guest, (note version 6 would use os=centos6):

chyves centosguest create
chyves centosguest set loader=grub-bhyve os=centos7 ram=392M
chyves centosguest start CentOS-7-x86_64-Everything-1511.iso
chyves centosguest console
    

Install and run a Gentoo guest:

chyves gentooguest create
chyves gentooguest set loader=grub-bhyve os=gentoo
chyves gentooguest start install-amd64-minimal-20160414.iso
chyves gentooguest console
    

Install and run an unlisted custom grub-bhyve guest, see os property for details:

chyves customgst create
chyves customgst set loader=grub-bhyve os=custom
<Edit grub.cfg and device.map>
chyves customgst start install.iso
chyves customgst console
<Installation completed>
chyves customgst stop             # This is done to edit grub.cfg
<Edit grub.cfg and device.map>
chyves customgst start
    

Install and run a Windows guest (On a host running FreeBSD 11.0-RC2 or later):

chyves windowsguest create 32g
chyves windowsguest set ram=2G
chyves windowsguest set bhyve_net_type=e1000
chyves windowsguest set loader=uefi
chyves windowsguest set uefi_firmware=<firmware>
chyves windowsguest set uefi_console_output=vnc
chyves windowsguest set uefi_vnc_pause_until_client_connect=yes
chyves windowsguest set eject_iso_on_n_reboot=3
chyves windowsguest start <reg_windows_installation.iso>
chyves windowsguest get uefi_vnc_ip
chyves windowsguest get uefi_vnc_port
<Connect using a VNC client from the above values.>
<Install OS and shutdown when completed.>
chyves windowsguest set uefi_vnc_pause_until_client_connect=no
chyves windowsguest unset eject_iso_on_n_reboot
<Install the virtio-net drivers for better performance or on old hosts.>
chyves iso import https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win-0.1.96.iso
chyves windowsguest start virtio-win-0.1.96.iso
<Install virtio-net drivers. Reboot.>
    

Install and run a CoreOS guest:

chyves coreos create 32g
chyves coreos set ram=1G loader=grub-bhyve os=coreos
chyves coreos start coreos_production_iso_image.iso
chyves coreos console
<After installation, set a user name and password.>
chyves coreos set os=coreossecure
    

Justin D Holcomb -- justinholcomb.me

bhyve(8), bhyveload(8), bridge(4), cu(1), dmesg(8), ethers(5), ifconfig(8), netmap(4), nmdm(4), pf(4), sh(1), tap(3), tmux(1), vale(4), virtio(4), vtnet(4), zfs(8)
September 11 2016 chyves

Search for    or go to Top of page |  Section 8 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.