VirtualBox Windows VM to Vagrant Base Box - vagrant

I have created a Windows 8 VM in VirtualBox, and have customized settings, and installed software on it.
Now I would like to turn it into a Vagrant Base Box, so that I can share with team, and also spawn many other VMs based on my cutomized windows.
It is possible to do, I have seen Windows Base boxes in vagrantcloud. Except that there is no documentation on packaging an existing windows virtualbox VM.
Please help me with instructions, or link to instructions to create a Vagrant Base Box from my existing windows VM. creating a base box documentation does not help me, as it is for linux.
Thank you in advance SO community!

You can probably do that by using the --base argument to vagrant package.
First, locate the name of the VM on VirtualBox's GUI. Say it's called "Windows", you issue:
vagrant package --base Windows --output /path/to/windows.box
That .box file will be your base box. You can install it locally by using
vagrant box install /path/to/windows.box
Alternatively you can make it available on a server and put its URL on the config.box_url parameter in your Vagrantfile.

Related

Installing Laravel homestead on a virtual machine in windows 10 - after I created a VM box do I need to install virtualbox again within this box?

Trying to install laravel homestead in windows but inside a virtualbox. So first I installed VirtualBox which then allows me to install a VM which I called LaravelBox (so this is an empty machine) - which means I need to install ubuntu 16.04, then vagrant (as the documents on the laravel homestead site (https://laravel.com/docs/5.5/homestead#installation-and-setup) - which instruct me to install the homestead vagrant box, then configure, etc. When I get to he final step to run vagrant up, I get the error:
**Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.
Vagrant uses the VBoxManage binary that ships with VirtualBox, and requires
this to be available on the PATH. If VirtualBox is installed, please find the
VBoxManage binary and add it to the PATH environmental variable.**
Does this mean then I now need to install virtualbox inside the VM I just created called LaravelBox? - so it's the case of a VM that contains the laravel homestead vagrant box is inside a a VM? Any help is appreciated, thanks.
The first question why you try to install homestead in a VM instead of installing it in Windows directly?
Yes, the problem is that your VM can't find any Virtualbox installation, then you have to install it there and it will be working.
Homestead was meant to provide a Unix like dev environment so that it would be easier to work with symlinks and permissions, it uses Ubuntu vagrant box by default.
So you can either install homestead directly on your host machine i.e windows or as you already have a Ubuntu VM you can setup a basic dev server manually.
It does not make sense to run a VM inside a VM

How to remove cached non-existing Virtualbox machines, using Hyper-V as provider?

I was using Vagrant under Windows 10 Pro first with Virtualbox provider and created a few boxes. Then because I wanted to test Docker for Win, I had to switch to Hyper V and uninstall Virtualbox. After some time I manually deleted some Virtualbox machines or re-purposed the folders so they don't have Vagrantfile anymore in them.
When I try to run either
vagrant global-status --prune
or
vagrant destroy -f XXXYYYZZZ
I get this error:
The provider 'virtualbox' that was requested to back the machine 'default' is reporting that it isn't usable on this system. The reason is shown below:
Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed. Vagrant uses the VBoxManage binary that ships with VirtualBox, and requires this to be available on the PATH. If VirtualBox is installed, please find the VBoxManage binary and add it to the PATH environmental variable.
I understand what Vagrant is trying to say: Install virtualbox binary so it can manage the boxes. But actually there are no VMs to begin with so it should be enough to delete it from registry and for that no Virtualbox is necessary. Is there a way how to remove cached boxes from registry in my case?
vagrant is keeping the list of machines it manages under the following location (that is for Mac, you would need to find for windows as I am not fully sure about the path)
~/.vagrant.d/data/machine-index
and under this folder, you'll find a index file that will list all machines it has in cache. its a JSon file and the provider for the machine is listed so you can remove anything that is not VirtualBox
I got the similar situation when I try to install Docker on my Windows 10 machine with vagrant + virtual box.
I have uninstalled virtual box, but the same error continues every time I try to run "vagrant up"
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The reason
is shown below:
Vagrant could not detect VirtualBox! Make sure VirtualBox is properly
installed. Vagrant uses the VBoxManage binary that ships with
VirtualBox, and requires this to be available on the PATH. If
VirtualBox is installed, please find the VBoxManage binary and add
it to the PATH environmental variable.
So below process saved me from it.
step 1: Add below line in vagrantfile below line "config.vm.box"
config.vm.define "hyperv"
Step 2: start your vagrant box calling like below from powershell or cmd
vagrant up --provider=hyperv
It should work. I got the vagrant running after these steps.
It must be the provider which is saved as virtual box somewhere in cache or registry.enter code here
source: https://willmurphyscode.net/2017/01/16/a-very-simple-vagrant-deployment/

Running virtualbox/vagrant in a cloud instance

I've tried two things:
First, I tried to install virtualbox on a EC2 machine, which proved to be impossible.
Second, I was able to install both vagrant and virtualbox on a Digital Ocean droplet, but when I tried to run vagrant up, it got stuck on Booting VM.
Several sources on Internet say that it is not possible to run a VM inside a virtualized environment (both Amazon and Digital Ocean provide this).
Is there any way I can solve this with another provider, or is there a way to run vagrant/virtualbox in Amazon or Digital Ocean?
Install VirtualBox and Vagrant on a physical machine such as your desktop
Run the 3 commands from the command line:
vagrant init somenameyoumakeup file://urlToYour.box
vagrant up
vagrant halt
Open the VirtualBox UI
Export the Virtual machine to OVA format using the File -> Export menu
Follow the guide here for importing an OVA: https://aws.amazon.com/ec2/vm-import/

Adding new VM's to VirtualBox via Mac terminal / usage with Vagrant

I'm just getting started with using VirtualBox. I'm trying to do all my work GUI free, i.e. only using iTerm2, and want to work with different VM's command terminal's via Vagrant. So my questions are:
How or what is the process/command to add different VM's to my VirtualBox that are each using the vagrant feature?
When starting vagrant using the command: vagrant up, how do i specify which VM i want to use?
I have looked at different explanations, e.g. the vagrant and virtualbox websites, but they seem a bit too specific to a certain case. My employer already setup Debian successfully and it is compatible with vagrant but I am not exactly sure how that was done or what the folder locations mean.

How do share the same VM between Windows and Linux when using Vagrant?

I have two hosts, one Windows and one Linux, both with Vagrant and VMware Workstation installed and everything works perfectly fine in their own environment. However, when I create an guest VM in Linux and I do vagrant up in Windows, then Vagrant will delete(!) everything in the .vagrant directory and attempt to fetch the base image. The same thing happens if I do a vagrant init and vagrant up in Windows and then a vagrant up in Linux. How do I prevent this from happening? Is there anyway to share the same VMs between Windows and Linux using Vagrant?
I'm running Windows 7, Ubuntu 14.04, Vagrant 1.6.5, VMware Workstation 10.0.3. This problem occurs for all guest operating systems.
The content of the .vagrant directory can be OS specific, and the internal state of VMware for sure.
I don't think there is easy way to share the same VM instance between the two hosts. The Vagrant way is to provision the VM so you only share the base box and then each user/OS spins up their own instance.
Another option would be to use vagrant package and vagrant box add to transfer the configured box, but that doesn't work with the VMware provider.
Yet another approach would be to use a cloud provider like AWS or Digital Ocean and just ssh into the box. Or maybe even use the vagrant-managed-servers plugin. Your question didn't hint what you use the Vagrant VM for, so it's difficult to tell what would be the best solution.
The following has been tested using the VirtualBox Vagrant provider with Windows 10 and Ubuntu 18.04 in a dual boot setup with a shared NTFS drive where D:\ in Windows is accesible as /mnt/d/ in Linux.
First (but not indispensable if I'm not wrong), set the VAGRANT_HOME environment variable in both Windows and Linux to the same place, e.g.:
Windows, D:\.vagrant.d
Linux, /mnt/d/.vagrant.d
Then create a new machine from one of the OSes, from Linux in the following example:
$ cd /mnt/d/vagrant_machines/machine1
$ vagrant init
$ vagrant up
Then boot in Windows and first backup D:\vagrant_machines\machine1\.vagrant just in case case its contents get accidentally deleted.
Then register from VirtualBox the existing VM, e.g. D:\virtualbox_machines\machine1_default_1587262647987_91775\machine1_default_1587262647987_91775.vbox.
Then run the following:
>vagrant.exe status
The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.
The UID used to create the VM was: 1000
Your UID is: 0
And update D:\vagrant_machines\machine1\.vagrant\machines\default\virtualbox\creator_uid to your current UID (0 in this example).
Then start the machine:
>vagrant status
>vagrant up
Finally, note that you will require to update the creator_uid each time that you switch OSes, which you might want to automate.

Resources