Vagrant box export and import
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.
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.