在 VMWare 虚拟机中运行 Vagrant

Posted

技术标签:

【中文标题】在 VMWare 虚拟机中运行 Vagrant【英文标题】:Running Vagrant Inside VMWare VM 【发布时间】:2013-06-15 01:40:57 【问题描述】:

我意识到这本质上是 OSCeption(操作系统启动),但我认为这对我来说可能最有意义(请告诉我是否有更好的选择,这看起来真的很糟糕)。

情况如下: 我有一台 Windows 8 机器。我喜欢它——它适用于除开发之外的一切。对于开发,我一直在使用运行 Ubuntu 的 VMWare 虚拟机。我曾尝试过使用 Cygwin,但感觉不太对。

我现在加入了一个项目,他们一直在使用 Vagrant 来管理开发环境,所以我需要能够使用 Vagrant。但是,据我所见,Vagrant 主要用于在一致的环境中运行代码,但不一定是编写它。而且,如果我想通过 SSH 将代码写入我的 vagrant box,那么我将不得不重新配置我的首选项,例如我的 .vimrc 文件,而不是针对每台机器。

那么在我的 Ubuntu VirtualMachine 中安装 Vagrant 有意义吗?我觉得在某些时候,虚拟机中的虚拟机会失控并导致问题。有没有更好的方法来做到这一点?

编辑:所以我试了一下——正如我所料,我遇到了一些错误。当我尝试启动机器时,我收到以下错误消息:

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

看起来我的 vmware 虚拟机无法运行其他虚拟机。有关执行此操作的最佳方法的任何想法?

【问题讨论】:

看起来您正在尝试运行嵌入式类型 2 管理程序。首先,并非所有的管理程序都支持在其中运行另一个管理程序(相同或不同)。 2、你是否真的在VM的设置-CPU-Visualize Intel VT-x or AMD-V中启用了该选项? 顺便说一句:只要启用 VT-x/AMD-V 加速,VirtualBox 内的 VirtualBox 是可能的。 我可以确认 Terry 的评论 - 在我之前的地方,我们在 vSphere 虚拟机中运行 Vagrant 虚拟机,以便构建和测试新的核心​​ Vagrant 盒映像 :) @MatthewSkelton 您是否在 VMWare Fusion VM 中尝试过 VirtualBox?有什么陷阱吗?我正在尝试配置在 VMWare 中运行的 CentOS 主机以在其中快速运行 Vagrant/VirtualBox,并在此处发布到邮件列表:groups.google.com/d/msg/vagrant-up/6YHdRupCKuI/2h2B4encffQJ 同样的问题@TerryWang 【参考方案1】:

我今天遇到了同样的问题。解决方法很简单。

    关闭 vmware 虚拟机。 转到“编辑虚拟机设置” 转到处理器。那里有三个复选框。 选中第二个复选框(启用 VT-x/AMD-V) 打开机器电源。

这个 virtualbox 应该可以在 vmware 中工作。

【讨论】:

@b.long:不,实际上听起来并不粗鲁。我希望我的解决方案能帮到你:) 您在使用安装在 VMWare 虚拟机上的 CentOS 并在 CentOS 中使用 VirtualBox 时遇到过任何问题吗?无论我做什么,我的内部虚拟机运行缓慢。我没想到会这样,因为我为 CentOS VM 提供了 7140MB 内存,以及来自我的 2.7GHz Core i7 的 2 个内核。当我尝试启动我的内部虚拟机(有或没有 Vagrant)时,它们运行缓慢,并且似乎没有分配太多内存。当 VM 启动时,我看到 CPU 1 和 2 有点尖峰,然后最终下降,但内存使用量从未超过 1GB。尝试启动 VM 时,超时如下:gist.github.com/b-long/3ef3a726f9f4d28f4d59 我也将我的问题发布到 Vagrant 的邮件列表:groups.google.com/forum/#!topic/vagrant-up/6YHdRupCKuI 对于任何拥有 ESXi 免费版本的人来说,这是不可能的。除非您将虚拟机的硬件升级到 v9+。一旦发生这种情况,您将无法从 vSphere Client 编辑 VM 详细信息. 感谢您的简单解决方案,它就像一个魅力【参考方案2】:

为了回答最初的问题以及@blong 的 Vagrant 论坛帖子,这就是我为完成这项工作所做的工作。

我自己也在尝试做类似的事情(实际上是 Vagrant/VMware 托管 Vagrant/Vbox),并且我已经执行了我能想到的所有优化,为我的“主机”VM 提供大量 RAM(24GB)和 6 个内核,通过设置“将所有 VM 内存放入保留的主机内存”,并允许每个 VM 页面文件(否则它们存在于系统页面文件中,这限制了您的虚拟机数量可以立即运行)。

我所做的工作一直很完美,我遇到的网络问题是由于我落后的公司代理。一旦我配置了我的虚拟机可以访问互联网并且一切正常。

除了在我的示例(Virtualbox)Vagrantfile 中已经设置的 natdnsproxy1 和 naddnshostresolver1 之外,我还必须通过 Vagrantfile 手动设置 --natbindip1 和 --natnet1。这些设置可以在 Virtualbox 文档中找到,以便正确使用。

总结一下,在你的 VM CPU 设置中使用 VT-x passthrough/“virtualize”选项,给 VM 足够的内存,不要让内存在“root”主机上被交换,然后尝试确保您的网络范围不重叠,否则您将遇到路由问题。

这是我使用的 Vagrantfile,它几乎完全基于 andreptb 的modern.ie vagrant 设置要点。 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

我的其他更改:

# 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"]

删除 + 符号并将这些行添加到上面的 Vagrantfile 中,您应该有一个与我一直在使用的系统等效的工作系统。

【讨论】:

我必须添加 v.customize ["modifyvm", :id, "--cpus", "2"] v.customize ["modifyvm", :id, "--hwvirtex", “在”] 。 @dragon788 你是怎么设置IP地址的? @vodich 我做了很多与其他参数相同的事情。 ["modifyvm", :id , "--natbindip1", "true"]。我会仔细检查语法,但基本上它需要修改命令、VM ID、要更改的参数以及要设置的值。 谢谢,我想我会在一个新线程中问一个关于配置的问题,而不是我们在这里讨论的问题,因为我花了 6 个小时试图弄清楚但没有成功:( 你能从你的 vagrantfile 中粘贴其他设置让我试试吗?【参考方案3】:

如果您在 vsphere 中的虚拟机中运行 virualbox,则必须通过 ssh 连接到 ESXi 以更新配置。

步骤:

    SSH 到 ESXi 服务器。 找到属于你的VM的vmx文件find / -name *.vmx 关闭您的 VM。(非常重要,否则您的更改将被覆盖) 编辑该 vmx,在文件底部附加一个新配置:vhv.enable = "TRUE" 打开虚拟机电源 享受流浪者。 :)

【讨论】:

使用 ESXi 客户端 5.5 和 Ubuntu 16.04 作为客户机为我工作【参考方案4】:

我已经在两个 VMware 产品中尝试过这一点。右键单击虚拟机:

在硬件选项卡上的 vCloud Director 5.5 VM 属性中,有一个“向来宾操作系统公开硬件辅助 CPU 虚拟化”复选框,但它对我来说是灰色的。 YMMV。 在 vSphere 版本 5.5.0 编辑设置 > 虚拟硬件 > CPU 中,该复选框名为“向来宾操作系统公开硬件辅助虚拟化”,这对我有用。

【讨论】:

以上是关于在 VMWare 虚拟机中运行 Vagrant的主要内容,如果未能解决你的问题,请参考以下文章

轻易解决VMware 虚拟机中被提示“请不要在虚拟机中运行此程序“

vmware中装tools偏偏说要在虚拟机中运行

VMware Tools 启动脚本未能在虚拟机中成功运行...

从已有的vagrant虚拟机中打包镜像

如何卸载虚拟机中VMware tools

解决问题:VMware Tools 启动脚本未能在虚拟机中成功运行。