使用 vagrant 在桌面环境下运行虚拟机
Posted
技术标签:
【中文标题】使用 vagrant 在桌面环境下运行虚拟机【英文标题】:Using vagrant to run virtual machines with desktop environment 【发布时间】: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 做到这一点。 【参考方案1】:我只是通过三个步骤完成了这项工作。 askubuntu.com
的建议对我来说不太奏效,所以试试这个简化版:
-
让基本的 Ubuntu 映像正常工作。你应该可以启动它并
vagrant ssh
。
接下来,启用默认关闭的 VirtualBox 显示。停止 VM 并取消注释 Vagrantfile
:中的这些行 config.vm.provider :virtualbox 做 |vb| vb.gui = 真 结束启动 VM 并观察新的显示窗口。现在您只需要安装并启动
xfce4
。使用vagrant ssh
和:sudo apt-get install xfce4 sudo startxfce4&
如果这是你第一次运行这个 Ubuntu 环境,你需要在安装 xfce4 之前运行以下命令:
sudo apt-get 更新就是这样,您应该进入xfce4
会话。
更新:为了获得更好的体验,我建议进行以下改进:
-
不要以 root 身份启动 GUI。您真的想保留
vagrant
用户。为此,您需要允许任何人启动 GUI:sudo vim /etc/X11/Xwrapper.config
并将其编辑为 allowed_users=anybody
。
接下来,在启动 GUI 之前安装 VirtualBox 来宾工具。这将为您提供健康的屏幕分辨率、集成鼠标等。$ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11 $ sudo VBoxClient-all现在您才应该以
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 - 感谢 Air 和 Nik 的回答,以及 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。耐心点,去喝杯咖啡。检查原始控制台窗口以查看正在发生的情况,尤其是在配置完成后。
【讨论】:
以上是关于使用 vagrant 在桌面环境下运行虚拟机的主要内容,如果未能解决你的问题,请参考以下文章
使用 Vagrant + VirtualBox 快速构建 CentOS 下的 Docker 环境