167

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

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

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

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

4

11 回答 11

168

我只是通过三个步骤完成了这项工作。来自的建议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-全部
  3. 只有现在您才应该以用户身份启动 GUI vagrant,使用$ startxfce4&.

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

sudo VBoxClient --剪贴板
sudo VBoxClient --draganddrop
sudo VBoxClient --display
sudo VBoxClient --checkhostversion
sudo VBoxClient --seamless
于 2013-11-16T22:22:31.110 回答
79

这是 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

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

启动 xfce

startx
于 2015-10-15T02:05:37.363 回答
13

这是针对 Ubuntu 18.04 LTS / bionic 稍作修改的 Vagrantfile - 感谢AirNik的回答,这篇文章解释了如何在使用 VirtualBox 时增加磁盘大小(默认 = 10 GB)。

VM 包括一个 LightDM 登录屏幕。

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

# 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
于 2018-11-18T17:25:13.353 回答
11

我的 2 美分

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)之类的工具来自动化构建。
于 2013-09-18T22:28:40.997 回答
7

我正在使用 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
于 2016-03-25T10:44:13.773 回答
5

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

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

许多公开共享的 Vagrant 基本盒子都是用 Packer 创建的。

于 2014-02-13T07:56:07.670 回答
2

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
于 2013-11-05T04:06:10.313 回答
2

我已经修补了 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
于 2019-08-15T16:55:27.067 回答
0

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

于 2020-01-03T23:21:33.133 回答
0

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

  • 安装 VirtualBox-guest.rpm(可从 rpmfusion repos 获得)
  • 百胜集团标记安装'graphical_environment'
  • 百胜组安装“Xfce”
  • 百胜安装 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
于 2015-08-06T13:31:40.547 回答
0

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

xrdb can't open display 1

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

startx
于 2018-02-27T08:37:27.937 回答