Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running Vagrant Inside VMWare VM

I realize this is essentially OSCeption (Operating System Inception), but I think it might make the most sense for me (please tell me if there's a better option, this seems really awful).

Here's the situation: I have a windows 8 machine. I like it - it works great for everything but development. For development, I've been using a VMWare virtual machine running Ubuntu. I've dabbled with using Cygwin, but it just didn't feel right.

I'm now joining a project where they've been using Vagrant to manage development environments so I need to be able to use Vagrant. But, from what I've seen, Vagrant is mainly used to run code within a consistent environment, but not necessarily to write it. And if I wanted to write code by SSH'ing into my vagrant boxes, then I would have to re-configure my preferences like my .vimrc file and what not for every machine.

Does it then make sense to install Vagrant within my Ubuntu VirtualMachine? I feel like at some point VMs within VMs will get out of hand and cause problems. Is there any better way to do this?

Edit: So I tried it out - as I expected I hit some errors. When I try and boot the machine, I get the following error message:

Failed to open a session for the virtual machine vagranttest_1371583212.  VT-x is not available. (VERR_VMX_NO_VMX).  Result Code: NS_ERROR_FAILURE (0x80004005) Component: Console Interface: IConsole {db7ab4ca-2a3f-4183-9243-c1208da92392} 

Looks like my vmware virtual machine can't run another virtual machine. Any ideas on the best way to go about doing this?

like image 223
Josh Avatar asked Jun 18 '13 17:06

Josh


People also ask

Can Vagrant be used with VMware?

The Vagrant VMware Desktop plugin now supports both VMware Workstation and VMware Fusion.

Can you run Vagrant on virtual machine?

Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.

Can Vagrant work without VirtualBox?

Solutions that work with Vagrant include VirtualBox, VMware, Docker, Hyper-V, and custom solutions.


2 Answers

I've run into the same issue today. The solution is quite simple.

  1. Power off vmware vitrual machine.
  2. Go to "edit virtual machine settings"
  3. Go to processors. There are three checkboxes there.
  4. Check second checkbox (enable VT-x/AMD-V)
  5. Power on machine.

After this virtualbox should work inside vmware.

like image 106
Andrew Orsich Avatar answered Sep 21 '22 14:09

Andrew Orsich


To answer the original question as well as @blong's Vagrant forum post, this is what I've done to make this work.

I was trying to do something similar myself (actually Vagrant/VMware hosting Vagrant/Vbox) and I have performed all the optimizations I can think of, giving my "host" VM a large amount of RAM (24GB) and 6 cores, disabling swapping VMs to disk (this KILLS things on Windows when it happens) by setting "Fit all VM memory into reserved host memory", and allowing per VM page files (otherwise they live in the system page file which limits how many VMs you can run at once).

What I am doing has been working perfectly, the networking issues I've had were due to the corporate proxy I'm behind. Once I configured that my VM got internet access and all was right with the world.

I did have to manually set --natbindip1 and --natnet1 via the Vagrantfile in addition to the natdnsproxy1 and naddnshostresolver1 that were already set in my example (Virtualbox) Vagrantfile. These settings can be found in the Virtualbox documentation for the correct usage.

To sum it up, use the VT-x passthrough/"virtualize" option in your VM CPU settings, give the VM adequate memory, don't allow that memory to be swapped on the "root" host machine, and try to make sure your network ranges don't overlap or you'll have routing trouble.

Here is the Vagrantfile I was working from, it is based almost entirely on andreptb's gist for the modern.ie vagrant setup. https://gist.github.com/andreptb/57e388df5e881937e62a

# -*- mode: ruby -*- # vi: set ft=ruby :  # box name into env var, same script can be used with different boxes. Defaults to win7-ie11. box_name = box_name = ENV['box_name'] != nil ? ENV['box_name'].strip : 'win7-ie11' # box repo into env var, so private repos/cache can be used. Defaults to http://aka.ms box_repo = ENV['box_repo'] != nil ? ENV['box_repo'].strip : 'http://aka.ms'  Vagrant.configure("2") do |config|   # If the box is win7-ie11, the convention for the box name is modern.ie/win7-ie11   config.vm.box = "modern.ie/" + box_name   # If the box is win7-ie11, the convention for the box url is http://aka.ms/vagrant-win7-ie11   config.vm.box_url = box_repo + "/vagrant-" + box_name   # big timeout since windows boot is very slow   config.vm.boot_timeout = 500    # rdp forward   config.vm.network "forwarded_port", guest: 3389, host: 3389, id: "rdp", auto_correct: true    # winrm config, uses modern.ie default user/password. If other credentials are used must be changed here   config.vm.communicator = "winrm"   config.winrm.username = "IEUser"   config.winrm.password = "Passw0rd!"    config.vm.provider "virtualbox" do |vb|     # first setup requires gui to be enabled so scripts can be executed in virtualbox guest screen     #vb.gui = true     vb.customize ["modifyvm", :id, "--memory", "1024"]     vb.customize ["modifyvm", :id, "--vram", "128"]     vb.customize ["modifyvm", :id,  "--cpus", "2"]     vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]     vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]     vb.customize ["guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 10000]   end end 

My additional changes:

# Need the WinRM gem for managing from Linux $ sudo gem install winrm      config.vm.communicator = "winrm" +  config.winrm.host = "localhost"     config.winrm.username = "IEUser"     config.winrm.password = "Passw0rd!" # This one may not be necessary, I added it for completeness +  config.vm.guest = :windows  # In order to USE the two CPUs you need the ioapic # Virtualbox gives an error in the GUI and only shows 1 CPU in the VM otherwise       vb.customize ["modifyvm", :id, "--cpus", "2"] +    vb.customize ["modifyvm", :id, "--ioapic", "on"] # We had to modify the network range because we are running Virtualbox inside VMware +    vb.customize ["modifyvm", :id, "--natnet1", "192.168.199.0/24"] 

Remove the + signs and add those lines into the Vagrantfile above and you should have an equivalent working system to what I've been using.

like image 44
dragon788 Avatar answered Sep 22 '22 14:09

dragon788