【问题标题】:Using vagrant to run virtual machines with desktop environment使用 vagrant 在桌面环境下运行虚拟机
【发布时间】:2013-09-23 13:26:45
【问题描述】:

我公司的开发环境是基于虚拟机的,运行在VirtualBox上。我们想更进一步,使用 Vagrant 的功能将机器描述保存在文本文件中,然后能够基于该文本文件“提升”该机器。结合puppet,这将解决我们每个人在VM中安装的软件版本不同的问题。

然而,Vagrant 似乎非常专注于在主机上开发,让机器在后台。我们需要在机器中拥有我们的开发环境,因此我们需要一个完整的 GUI,因此当键入“vagrant up”时,应该会出现一台具有完整桌面环境(XFCE、KDE...)的机器。

到目前为止,我已经成功地从 Xubuntu 发行版创建了一个“基础”盒子。但是当我输入“vagrant up”时,虽然桌面出现了,并且我能够正确登录,但 Vagrant 冻结在消息“等待机器启动。这可能需要几分钟......”。一段时间后,Vagrant 由于超时而崩溃。因此不会创建共享文件夹,也不会执行包配置程序 -puppet-。

如何使用 vagrant 创建具有完整 GUI 的虚拟机?

【问题讨论】:

  • 我从来没有遇到过使用这些boxes 的问题。当您打包基础盒时,可能出了点问题。
  • 从幼稚的角度来看,如果您可以在主机上而不是在 VM 上开发,为什么还要费心在 Vagrant VM 上安装 GUI 功能?为什么不在主机上开发?
  • 当开发团队维护 VM/Vagrant 规范以与其应用程序的目标环境同步时,在 VM 上进行开发可以减少问题。您将获得更少的爬行依赖和行为,这是您的开发人员所独有的。目标环境/安装中不存在(或不相同)的环境。
  • 其实你的结论并不完全正确。 Vagrant 并不是要让开发环境开箱即用。 linux上的很多人都是在终端中开发的。你可以用 ssh-only vagrant box 做到这一点。

标签: virtual-machine desktop virtualbox vagrant


【解决方案1】:

我只是通过三个步骤完成了这项工作。 askubuntu.com 的建议对我来说不太奏效,所以试试这个简化版:

  1. 让基本的 Ubuntu 映像正常工作。你应该可以启动它并vagrant ssh
  2. 接下来,启用默认关闭的 VirtualBox 显示。停止 VM 并取消注释 Vagrantfile:
     中的这些行
    config.vm.provider :virtualbox 做 |vb|
      vb.gui = 真
    结束
  3. 启动 VM 并观察新的显示窗口。现在您只需要安装并启动xfce4。使用vagrant ssh 和:
    sudo apt-get install xfce4
    sudo startxfce4&
    

如果这是你第一次运行这个 Ubuntu 环境,你需要在安装 xfce4 之前运行以下命令:

sudo apt-get 更新

就是这样,您应该进入xfce4 会话。

更新:为了获得更好的体验,我建议进行以下改进:

  1. 不要以 root 身份启动 GUI。您真的想保留vagrant 用户。为此,您需要允许任何人启动 GUI:sudo vim /etc/X11/Xwrapper.config 并将其编辑为 allowed_users=anybody
  2. 接下来,启动 GUI 之前安装 VirtualBox 来宾工具。这将为您提供健康的屏幕分辨率、集成鼠标等。
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. 现在您才应该以vagrant 用户的身份使用$ startxfce4& 启动GUI。

更新 2: 今天试过了,VBoxClient-all 脚本并不总是安装。如果缺少,您可以替换为等价物:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient --display
sudo VBoxClient --checkhostversion
sudo VBoxClient --seamless

【讨论】:

  • 只是想顺便说一下,在尝试让 xfce 在 Fedora 19 vagrant box 中工作大约 5 小时后,解决方案是安装 virtualbox 来宾软件包(yum install VirtualBox-guest. x86_64)。如果没有该软件包,xorg 出于某种原因无法访问我的主机监视器。所以...谢谢伙计!
  • 我在尝试这个时发现第 3 步的代码需要包含在 Vagrantfile 的 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... done 方法中。
  • 您可以通过在 Vagrantfile 中包含以下内容从 Vagrant 配置 Xwindows 等:#Provision X Windows、VirtualBox Guest、curl 和其他 apt 包 config.vm.provision :shell, :inline => " sudo apt-get install -y curl xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11" config.vm.provision :shell, :inline => "sudo VBoxClient-all"
  • 提醒一下,Ubuntu 16.04 似乎不允许以这种方式以非 root 身份启动 XFCE:bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
  • 看起来startxfce4 可以在安装xserver-xorg-legacy 后在Ubuntu 16.04 (xenial) 上以非root 身份运行
【解决方案2】:

这是 Air 以Vagrantfile 形式提供的出色答案

Vagrant.configure(2) do |config|
  # Ubuntu 15.10
  config.vm.box = "ubuntu/wily64"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # Install xfce and virtualbox additions
  config.vm.provision "shell", inline: "sudo apt-get update"
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"
end

启动虚拟机

vagrant up

通过 virtualbox GUI 上的登录提示使用用户名:vagrant,密码:vagrant 登录。

启动 xfce

startx

【讨论】:

  • 这对我有两个小的调整。首先,我在寻找“ubuntu/vivid64”框时得到了 404,所以我将其更改为在 vagrantcloud 上找到的“larryli/vivid64”。其次,我必须添加安装 vagrant-proxyconf 插件来管理代理设置。
  • 它尖叫-> startx 当前没有安装??
  • 我的错,在 virtualbox 中没有配置 Internet 来下载 xfce4。它现在可以工作了,但有没有一种方法可以让我跳过登录并默认启动xfce4
  • @prayagupd 有点老了,但是你能详细说明一下“在 virtualbox 中没有配置 Internet 来下载 xfce4”吗?在vagrant ssh 之后运行 startx 时我遇到了同样的错误
  • 我遇到了一些麻烦,我的虚拟框显示“startx: command not found”。有人可以帮我诊断一下吗?
【解决方案3】:

这里是 Ubuntu 18.04 LTS / bionic 的稍微改编的 Vagrantfile - 感谢 AirNik 的回答,以及 this post 解释如何在使用 VirtualBox 时增加磁盘大小(默认 = 10 GB )。

VM 包含一个 LightDM 登录屏幕。

更新:我从这个例子中创建了一个GitHub repo,并添加了许多用于前端+后端开发的软件包。

# Optional - enlarge disk:
#vagrant plugin install vagrant-disksize
vagrant up
vagrant reload
# After reboot, the VM screen should show the LightDM login screen.
# Log in as user "vagrant", password "vagrant".
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/bionic64"
  # Optional - enlarge disk (will also convert the format from VMDK to VDI):
  #config.disksize.size = "50GB"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # https://askubuntu.com/questions/1067929/on-18-04-package-virtualbox-guest-utils-does-not-exist
  config.vm.provision "shell", inline: "sudo apt-add-repository multiverse && sudo apt-get update"

  # Install xfce and virtualbox additions.
  # (Not sure if these packages could be helpful as well: virtualbox-guest-utils-hwe virtualbox-guest-x11-hwe)
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"

  # Optional: Use LightDM login screen (-> not required to run "startx")
  config.vm.provision "shell", inline: "sudo apt-get install -y lightdm lightdm-gtk-greeter"
  # Optional: Install a more feature-rich applications menu
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4-whiskermenu-plugin"
end

【讨论】:

  • 在 Ubuntu 16.04 上,我必须安装 xserver-xorg-legacy 才能使 XWrapper.config 文件存在/被使用。
  • 进一步测试表明,根据链接的 github repo 中的评论,可能不需要 sed 行。
  • @mh8020 感谢您创建 github 存储库。非常干净且易于理解,正是我所需要的。只有一个问题:我无法在来宾 Ubuntu 系统上正常工作!知道什么可以在您当前的设置中启用此功能吗?
  • 谢谢,我在其他任何地方都找不到用户名和密码
【解决方案4】:

我的 2 美分

  • 确保您正在运行最新的 vagrant(现在为 1.3.3)+ VirtualBox(4.2.18)以避免错误。

  • 您可以使用 shell 脚本或内联命令来安装桌面环境或轻量级窗口管理器

    例如,在vagrantbox.es 的 Ubuntu 12.04 Precise base box 上安装 LXDE

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "shell" do |s|
    s.inline = "apt-get install lubuntu-desktop -y"
  end
end
  • 如果您构建自己的 vagrant base box,请确保遵循 base box 打包说明或考虑使用像 packer(或 veewee)这样的工具来自动化构建。

【讨论】:

    【解决方案5】:

    我正在使用 ubuntu 桌面映像,它可以很好地与带有虚拟框提供程序的 Windows 上的两个显示器配合使用。

    Vagrant.configure(2) do |config|
      config.vm.box = "box-cutter/ubuntu1404-desktop"
    
      config.ssh.forward_agent = true
    
      config.vm.network "forwarded_port", guest: 8080, host: 8080
      config.vm.network "forwarded_port", guest: 3000, host: 3000
    
    
      config.vm.synced_folder "../../git", "/home/vagrant/git"
    
      config.vm.provider "virtualbox" do |vb|
        vb.gui = true
        vb.customize ["modifyvm", :id, "--monitorcount", "2"]
        vb.memory = "2048"
      end
    end
    

    【讨论】:

    • vb.customize ["modifyvm", :id, '--audio', 'dsound', '--audiocontroller', 'ac97'] 从虚拟机获取声音(如果需要)
    • box-cutter 不再提供预先构建的图像。
    【解决方案6】:

    您也可以考虑使用Packer 创建VirtualBox 映像供开发人员使用。

    与其共享每个开发人员用于构建和运行他们的 VM 的 Vagrantfile,您将拥有一个用于创建 VM 映像的打包程序模板 (json)。开发人员下载或复制图像并在本地直接在 VB 中运行,无需自己构建。

    许多公开共享的 Vagrant base box 都是使用 Packer 创建的。

    【讨论】:

      【解决方案7】:

      https://askubuntu.com/questions/300799/does-ubuntu-12-04-lts-32-bit-have-graphic-user-interface/300805#300805

      安装桌面后,您还需要安装 GDM 将让您直接启动到图形环境。你也会 想要配置它。

      所以也许添加这个?

      Vagrant::Config.run do |config|
          config.vm.provision :shell, :inline => "sudo apt-get install gdm"
          config.vm.provision :shell, :inline => "sudo dpkg-reconfigure gdm"
      end
      

      【讨论】:

      • ...或更轻量级的xdm
      【解决方案8】:

      我对 Nik 的回答做了一些修改以避免 HTTP 404:

      Vagrant.configure(2) do |config|
        # Ubuntu 15.10
        config.vm.box = "bento/ubuntu-18.04"
      
        config.vm.provider "virtualbox" do |vb|
          # Display the VirtualBox GUI when booting the machine
          vb.gui = true
        end
      
        # Install xfce and virtualbox additions
        config.vm.provision "shell", inline: "sudo apt-get update"
        config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
        # Permit anyone to start the GUI
        config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"
      end
      

      【讨论】:

        【解决方案9】:

        除了上面 billmalarky 的评论之外,在 Fedora 20 上,在启动 xfce 之前需要执行以下操作:

        • 安装 VirtualBox-guest.rpm(可从 rpmfusion 存储库获得)
        • yum groups mark install 'graphical_environment'
        • yum groupinstall "Xfce"
        • yum install xorg-x11-drivers

        代码如下:

        config.vm.provision "shell", inline: <<-SHELL        
            #Install Virtual Box guest additions from rpmfusion repos
            cd /vagrant
            yum install -y rpmfusion-free-release-20.noarch.rpm 
            yum install -y rpmfusion-nonfree-release-20.noarch.rpm
            yum update -y
            yum install -y VirtualBox-guest
        
            #Add XFCE desktop to fedora server
            yum groups mark install 'graphical_environment'
            yum groupinstall -y "Xfce"
            yum install -y xorg-x11-drivers   
        SHELL
        

        【讨论】:

          【解决方案10】:

          就像@Air 的xfce4 解决方案一样。曾经我成功了,但今天我用 ubuntu16.04 失败了。我收到了这个错误:

          xrdb can't open display 1
          

          但幸运的是,我发现这是可行的:

          startx
          

          【讨论】:

            【解决方案11】:

            我看到一些人遇到“startx: command not found”的问题。我也有这个,这是因为我在首次配置完成之前尝试登录和 startx。耐心点,去喝杯咖啡。检查原始控制台窗口以查看正在发生的情况,尤其是在配置完成后。

            【讨论】:

              猜你喜欢
              • 2018-03-28
              • 2013-06-15
              • 2017-09-17
              • 2018-06-05
              • 1970-01-01
              • 1970-01-01
              • 2021-02-27
              • 2018-11-29
              • 1970-01-01
              相关资源
              最近更新 更多