VirtualBox™ is an actively developed, complete virtualization package, that is available for most operating systems including Windows®, Mac OS®, Linux® and FreeBSD. It is equally capable of running Windows® or UNIX®-like guests. It is released as open source software, but with closed-source components available in a separate extension pack. These components include support for USB 2.0 devices. More information may be found on the “Downloads” page of the VirtualBox™ wiki. Currently, these extensions are not available for FreeBSD.
VirtualBox™ is available as a FreeBSD package or port in emulators/virtualbox-ose. The port can be installed using these commands:
One useful option in the port's configuration menu is the
GuestAdditions
suite of programs. These
provide a number of useful features in guest operating
systems, like mouse pointer integration (allowing the mouse to
be shared between host and guest without the need to press a
special keyboard shortcut to switch) and faster video
rendering, especially in Windows® guests. The guest
additions are available in the
menu, after the installation of the guest is finished.
A few configuration changes are needed before
VirtualBox™ is started for the
first time. The port installs a kernel module in
/boot/modules
which
must be loaded into the running kernel:
To ensure the module always gets loaded after a reboot,
add the following line to
/boot/loader.conf
:
To use the kernel modules that allow bridged or host-only
networking, add the following to
/etc/rc.conf
and reboot the
computer:
The vboxusers
group is created
during installation of
VirtualBox™. All users that need
access to VirtualBox™ will have to
be added as members of this group. pw
can be used to add new members:
The default permissions for /dev/vboxnetctl
are
restrictive and need to be changed for bridged
networking:
To make this permissions change permanent, add these
lines to /etc/devfs.conf
:
To launch VirtualBox™, type from a Xorg session:
For more information on configuring and using VirtualBox™, refer to the official website. For FreeBSD-specific information and troubleshooting instructions, refer to the relevant page in the FreeBSD wiki.
In order to be able to read and write to USB devices,
users need to be members of
operator
:
Then, add the following to
/etc/devfs.rules
, or create this file if
it does not exist yet:
To load these new rules, add the following to
/etc/rc.conf
:
Then, restart devfs:
USB can now be enabled in the guest operating system. USB devices should be visible in the VirtualBox™ preferences.
Access to the host DVD/CD drives from guests is achieved
through the sharing of the physical drives. Within
VirtualBox™, this is set up from the Storage window in the
Settings of the virtual machine. If needed, create an empty
IDE CD/DVD device first. Then choose the Host Drive from the
popup menu for the virtual CD/DVD drive selection. A checkbox
labeled Passthrough
will appear. This
allows the virtual machine to use the hardware directly. For
example, audio CDs or the burner will only function if this
option is selected.
HAL needs to run for
VirtualBox™ DVD/CD functions to
work, so enable it in /etc/rc.conf
and
start it if it is not already running:
In order for users to be able to use
VirtualBox™ DVD/CD functions, they
need access to /dev/xpt0
, /dev/cdN
,
and /dev/passN
.
This is usually achieved by making the user a member of
operator
. Permissions to these devices
have to be corrected by adding the following lines to
/etc/devfs.conf
:
Starting with FreeBSD 10.0-RELEASE the BSD licensed
hypervisor bhyve is part of the base system. Bhyve supports
a number of guests including FreeBSD, OpenBSD, and many flavors
of Linux. Bhyve currently only supports a serial console and
does not emulate a graphical console. Bhyve is a legacy-free
hypervisor, meaning that instead of translating instructions,
and manually managing memory mappings, it relies on the
virtualization offload features of newer
CPUs. Bhyve also avoids emulating
compatible hardware for the guest, and instead relies on the
paravirtualization drivers, called
VirtIO
.
The first step to creating a virtual machine in bhyve is
configuring the host system. Load the bhyve kernel module
called vmm. Create a tap
interface for
the network device in the virtual machine to attach to.
Optionally create a bridge interface and add the tap
interface as well as the physical interface as members to
allow the virtual machine to have access to the
network.
Create a file to use as the virtual disk for the guest machine.
Download an installation image of FreeBSD to install.
FreeBSD comes with an example script for running a virtual
machine in bhyve. The script will start the virtual machine
and run it in a loop, so it will automatically restart if it
crashes. The script takes a number of options to control
the configuration of the machine. -c
controls the number of virtual CPUs. -m
limits the amount of memory available to the guest.
-t
defines which tap
device to use. -d
indicates which disk
image to use. -i
tells bhyve to boot from
the CD image instead of the disk, and -I
defines which CD image to use. Finally the last parameter
is the name of the virtual machine, used to track the
running machines. Start the virtual machine in installation
mode:
The system will boot and start the installer. After
installing a system in the virtual machine, when the system
asks about dropping in to a shell at the end of the
installation, choose /etc/ttys
and
replace the existing console
line
with:
Reboot the virtual machine. In bhyve, a reboot causes
bhyve to exit. However the vmrun.sh
script runs bhyve in a loop and will automatically restart
it. When this happens, choose the reboot option from the
boot loader menu, and this will escape the loop. Now the
guest can be started from the virtual disk:
Bhyve requires sysutils/grub2-bhyve in order to boot operating systems other than FreeBSD.
Create a file to use as the virtual disk for the guest machine.
Starting a virtual machine with bhyve is a two step
process. First a kernel must be loaded, then the guest can
be started. sysutils/grub2-bhyve is used
to load the Linux® kernel. Create a
device.map
that
grub will use to map the virtual
devices to the files on the host system:
Use sysutils/grub2-bhyve to load the Linux® kernel from the ISO image:
This will start grub. If the installation CD contains
a grub.cfg
then a menu will be
displayed. If not, the location of the
vmlinuz
and initrd
files must be manually entered:
Now that the Linux® kernel is loaded, the guest can be started:
The system will boot and start the installer. After installing a system in the virtual machine, reboot the virtual machine. This will cause bhyve to exit. The instance of the virtual machine needs to be destroyed before it can be started again:
Now the guest can be started directly from the virtual disk:
Linux® will now boot in the virtual machine and eventually present you with the login prompt. Login and use the virtual machine, when you are finished, reboot the virtual machine to exit bhyve. Destroy the virtual machine instance:
It is advantageous to wrap the bhyve console in a
session management tool such as
sysutils/tmux or
sysutils/screen in order to detach and
reattach to the console. It is also possible to have the
console of bhyve be a null modem device that can be accessed
with cu
. Load the
nmdm
kernel module, and replace
-l com1,stdio
with
-l com1,/dev/nmdm0A
. The
/dev/nmdm
devices are created
automatically as needed, each is a pair,
/dev/nmdm1A
and
/dev/nmdm1B
corresponding to the two
ends of the null modem cable. See nmdm(4) for more
information.
A device node is created in /dev/vmm
for each virtual
machine. This allows the administrator to easily see a list
of the running virtual machines:
Virtual machines can be destroyed using
bhyvectl
:
In order to make the system able to start bhyve guests at boot time, the following configurations must be made in the specified files:
/etc/sysctl.conf
/boot/loader.conf
/etc/rc.conf
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.