Vagrant box export and import

June 1, 2016

I’ve been a VirtualBox user for a few years but I started working with Vagrant only recently. Vagrant provides an easy-to-use portable environment on top of virtual machine providers like VirtualBox, VMware, AWS etc; at least that is what is written everywhere.

While the internet abounds with articles and «expert» answers about how to work with Vagrant, I stumble upon a lot of blurry advice in needy times. The last resort, though not very tempting, is the official documentation. I say not very tempting because of the amount of reading required for just one set of command options.

Vagrant box export and import

Hashicorp, the company that funds the full-time development of Vagrant, hosts a catalog of Vagrant boxes for the different virtual machine providers, which is called Atlas. Let’s look at the command that is used to add a box to Vagrant from Atlas.

vagrant box add opensuse/openSUSE-42.1-x86_64

In the above command opensuse is a user of Atlas and openSUSE-42.1-x86_64 is the name of the box. You might need the –provider option if you’re not using VirtualBox. Once the box has been added, it can be initialized as follows:

vagrant init opensuse/opensuse-42.1-x86_64

The command creates a Vagrantfile in the current directory with a lot of commented lines which you can uncomment to specify needed options with your Vagrant box (e.g shared folders, set memory etc). The following line in the file tells vagrant which base to use when provisioning the virtual machine the first time:

config.vm.box = “opensuse/opensuse-42.1-x86_64”

To start up the Vagrant box we’ll do vagrant up and a bunch of messages depending on the Vagrantfile parameters will show up (e.g SSH port forwarding). Next we do vagrant ssh to jump inside the Vagrant box. The first time the Vagrant box is started, a virtual machine is provisioned in VirtualBox (since that is what I am using as provider). At next boot the VM will jump to normal startup unless «provisioning» options are specified.

As Vagrant users enjoy easy portability of the boxes, the same can be exported following this quick procedure:

vagrant package –output opensuse-devel.box

Say you have set up a development environment on the openSUSE box and you need to share the same with other developers. The above command packages the virtual machine in one file, in our case it’s called opensuse-devel.box. Next each developer needs to add the box as follows:

vagrant box add openSUSE-devel opensuse-devel.box

I am naming the project openSUSE-devel for easy reference.

Sure, if not executed from the directory containing opensuse-devel.box then the full path to the file should be used. It makes the box available to Vagrant and a machine can then be initialized.

vagrant init openSUSE-devel; vagrant up

This creates the Vagrantfile and fires up the box. When one needs to destroy the box, just execute vagrant destroy and the virtual machine will be gone.