Vagrant is an application that manages virtualized environments (boxes) allowing to control the creation and provisionning of virtual machines, which may share some resources (folders) with the host.

Vagrant supports different virtualization engines (providers), among which VirtualBox is historically the most popular.

Installation

Installation with libvirt

Libvirt is a good provider for Vagrant because it's faster than VirtualBox and it's in the main repository. Install it as follow:

sudo apt install vagrant-libvirt libvirt-daemon-system

Ensure your user is a member of the libvirt group (this is needed to manage libvirt via the qemu:///system uri, which is the default for vagrant-libvirt)

sudo usermod --append --groups libvirt $USER

logout and login so that your group membership applies

# should return libvirt
groups | grep -o libvirt

start your first vagrant environment

vagrant init debian/buster64
vagrant up --provider=libvirt
vagrant ssh

Debian Vagrant base box

There is an ongoing effort to provide official Teams/Cloud/VagrantBaseBoxes, hosted in Atlas, Vagrant's cloud product, created by Debian Developers.

Creating Debian vagrant boxes

You also may wish to create your own Debian boxes, Debian currently users Packer to build the boxes hosted on the Vagrant cloud.

Troubleshooting

On vagrant up various errors can happen:

Errors on NFS mount on Debian GNU/Linux jessie and stretch boxes

During the vagrant up process you can get this error on Debian Debian GNU/Linux jessie as well as in stretch:

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -o vers=4 192.168.121.1:/home/jhon/projects/foo /vagrant
result=$?
if test $result -eq 0; then
if test -x /sbin/initctl && command -v /sbin/init && /sbin/init 2>/dev/null --version | grep upstart; then
/sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=/vagrant
fi
else
exit $result
fi

Stdout from the command:

Stderr from the command:

mount.nfs: access denied by server while mounting 192.168.121.1:/home/jhon/projects/foo

First of all ensure that your NFS daemon is running:

sudo systemctl status nfs-common
sudo systemctl status nfs-kernel-server

Then copy from the above error the mount command and try running it on yourself, but downgrading the NFS version (the vers):

vagrant ssh
sudo mount -o vers=3 192.168.121.1:/home/jhon/projects/foo /vagrant

If it works manually, than you can fix it adding this line into your Vagrantfile:

config.vm.synced_folder ".", "/vagrant", nfs_version: "3"