Использование vagrant для запуска виртуальных машин в среде рабочего стола


148

Среда разработки моей компании основана на виртуальных машинах, работающих на VirtualBox. Мы хотели бы продвинуться еще на один шаг и использовать возможности Vagrant, чтобы описать машину в текстовом файле, а затем иметь возможность «поднять» эту машину на основе этого текстового файла. В сочетании с марионеткой, это решило бы нам проблему того, что у всех установлены разные версии программного обеспечения в ВМ.

Тем не менее, Вагрант, кажется, очень сосредоточен на разработке на хосте, оставляя машину на заднем плане. Нам нужно, чтобы наша среда разработки находилась внутри компьютера, поэтому нам нужен полный графический интерфейс пользователя, поэтому при вводе команды «vagrant up» должна появиться машина с полной средой рабочего стола (XFCE, KDE ...).

До сих пор мне удалось создать «базовую» коробку из дистрибутива Xubuntu. Но когда я набираю «vagrant up», хотя появляется рабочий стол и я могу правильно войти в систему, Vagrant останавливается при появлении сообщения «Ожидание загрузки машины. Это может занять несколько минут ...». Через некоторое время Vagrant вылетает из-за тайм-аута. Таким образом, общие папки не создаются, и поставщик пакета -puppet- не выполняется.

Как создать виртуальную машину с полным графическим интерфейсом, используя vagrant?


1
У меня никогда не было проблем с использованием этих коробок . Возможно, что-то пошло не так, когда вы упаковали свою базовую коробку.
bfitzpatrick

1
с наивной точки зрения, если вы можете разрабатывать на хосте, а не на виртуальной машине, почему вы пытаетесь установить возможности графического интерфейса на Vagrant VM? почему не развиваются на хосте?
Александр Миллс

Разработка на виртуальной машине может привести к меньшему количеству проблем, если команды разработки поддерживают спецификации VM / Vagrant синхронизированными с целевой средой приложения. Вы получите меньше ползучих зависимостей и поведений, которые являются уникальными для вашего разработчика. среда, в то время как не присутствует (или не идентична) в целевой среде / установке.
Джим Деннис

На самом деле ваш вывод не совсем верен. Vagrant - это не окружение разработчика вне коробки. Многие люди на Linux развиваются в терминале. И вы можете сделать это просто отлично с ssh-only vagrant boxes.
erikbwork

Ответы:


150

Я только получил это, работая в основном с тремя шагами. Совет от askubuntu.comменя не совсем сработал, поэтому попробуйте эту упрощенную версию:

  1. Получить базовый рабочий образ Ubuntu. Вы должны быть в состоянии загрузить его и vagrant ssh.
  2. Затем включите отображение VirtualBox, которое по умолчанию отключено. Остановите виртуальную машину и раскомментируйте эти строки в Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = правда
    конец
  3. Загрузите виртуальную машину и посмотрите новое окно дисплея. Теперь вам просто нужно установить и запустить xfce4. Используйте vagrant sshи:
    sudo apt-get установить xfce4
    sudo startxfce4 &
    

Если вы запускаете эту среду Ubuntu впервые, перед установкой xfce4 вам нужно будет выполнить следующую команду:

sudo apt-get update

Вот и все, вы должны быть на xfce4сессии.

Обновление: для лучшего опыта я рекомендую следующие улучшения:

  1. Не запускайте графический интерфейс от имени пользователя root. Вы действительно хотите остаться vagrantпользователем. Для этого вам нужно разрешить кому-либо запускать графический интерфейс: sudo vim /etc/X11/Xwrapper.configи редактировать его allowed_users=anybody.
  2. Затем установите гостевые инструменты VirtualBox перед запуском графического интерфейса. Это даст вам здоровое разрешение экрана, встроенную мышь и т. Д.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. Только сейчас вы должны запустить графический интерфейс как vagrantпользователь, с $ startxfce4&.

Обновление 2: пробовал сегодня, и VBoxClient-allскрипт не всегда устанавливается. Если он отсутствует, вы можете заменить на эквивалент:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient --display
sudo VBoxClient --checkhostversion
sudo VBoxClient - бесшовный

2
Просто хотел заскочить и сказать, что после 5 часов попыток заставить xfce работать в бродячей коробке fedora 19, решение было установить гостевой пакет virtualbox (yum install VirtualBox-guest.x86_64). Без этого пакета xorg по какой-то причине не мог получить доступ к монитору моего компьютера. Итак ... Спасибо, мужик!
billmalarky

Когда я попробовал это, я обнаружил, что код шага 3 должен содержаться в Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... doneметоде Vagrantfile.
Неонтапир

1
Вы можете подготовить Xwindows и т. Д. Из Vagrant, включив в ваш Vagrantfile следующее: #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 "</ code>
Фаррух Наджми,

2
Просто напомнить, что Ubuntu 16.04, похоже, не позволяет запускать XFCE без полномочий root таким образом: bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
Air

1
Похоже, что startxfce4после установки вы можете запускать без полномочий root в Ubuntu 16.04 (xenial)xserver-xorg-legacy
Laurence Billingham,

74

Вот отличный ответ 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через приглашение для входа в GUI Virtualbox.

Запустить xfce

startx

Это сработало для меня с двумя небольшими изменениями. Сначала я получил 404 при поиске коробки «ubuntu / vivid64», поэтому я изменил ее на «larryli / vivid64», которую я нашел в vagrantcloud. Во-вторых, мне пришлось добавить установку плагина vagrant-proxyconf для управления настройками прокси.
Даниэль Уотроус

2
Кричит -> startx на данный момент не установлен ??
praagagupd

1
Мой плохой, Интернет не был настроен в Virtualbox для загрузки xfce4. Это работает сейчас, но есть ли способ пропустить вход в систему и запустить xfce4по умолчанию?
prayagupd

@prayagupd немного староват, но можете ли вы уточнить, что «Интернет не был настроен в Virtualbox для загрузки xfce4»? Я получаю ту же ошибку при запуске startx послеvagrant ssh
Joshua Zastrow

1
У меня возникли проблемы, когда мой виртуальный ящик говорит «startx: команда не найдена». Может ли кто-нибудь помочь мне диагностировать это?
ООПрог

11

Мои 2 цента

  • Убедитесь, что вы используете последнюю версию vagrant (сейчас 1.3.3) + VirtualBox (4.2.18), чтобы избежать ошибок.

  • Вы можете использовать сценарий оболочки или встроенную команду для установки рабочего стола или облегченного оконного менеджера

    Например, установите LXDE поверх Ubuntu 12.04 Precise base box с vagrantbox.es

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

  config.vm.provision "shell" do |s|
    s.inline = "apt-get install lubuntu-desktop -y"
  end
end
  • Если вы строите свои собственные бродячие базовые блоки, убедитесь, что вы следуете инструкциям по упаковке базового блока или рассмотрите инструменты, такие как упаковщик (или veewee), для автоматизации сборки.

9

Вот слегка адаптированный Vagrantfile для Ubuntu 18.04 LTS / bionic - благодаря ответам Air и Nik , и этот пост объясняет, как увеличить размер диска при использовании VirtualBox (по умолчанию = 10 ГБ).

ВМ включает в себя экран входа LightDM.

Обновление: я создал репозиторий GitHub из этого примера и добавил множество программных пакетов для разработки frontend + backend.

# 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

  # /ubuntu/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 существовал / использовался.
MZB

Дальнейшее тестирование показывает, что Sed Line может не понадобиться согласно комментарию в связанном репозитории github.
MZB

@ mh8020 Спасибо за создание репозитория github. Очень чисто и легко следовать, как раз то, что мне нужно. Только одна проблема: я не могу заставить работать звук в гостевой системе Ubuntu! Любая идея, что может включить это в вашей текущей настройке?
timmwagener

7

Я использую образ рабочего стола Ubuntu, он прекрасно работает с двумя мониторами на окнах с провайдером виртуальных ящиков.

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

3
vb.customize ["modifyvm", :id, '--audio', 'dsound', '--audiocontroller', 'ac97']чтобы получить звук от
виртуальной машины

Box-Cutter больше не предоставляет готовые изображения.
Крок

5

Вы также можете рассмотреть возможность использования Packer для создания образов VirtualBox для разработчиков.

Вместо того, чтобы делиться Vagrantfile, который каждый из разработчиков использует для создания и запуска своей виртуальной машины, у вас будет шаблон упаковщика (json), который используется для создания образа виртуальной машины. Разработчики скачивают или копируют образ и запускают его локально, прямо в VB, без необходимости создавать его самостоятельно.

Многие из общедоступных базовых блоков Vagrant создаются с помощью Packer.


2

/ubuntu/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

1
... или более легкий xdm
geekQ

1

Я немного исправил ответ Ника, чтобы избежать 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

0

В добавление к комментарию billmalarky выше, на fedora 20 перед запуском xfce было необходимо следующее:

  • Установите VirtualBox-guest.rpm (доступно из репозиториев rpmfusion)
  • группы yum помечают установить 'графическое окружение'
  • 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

0

Понравилось xfce4решение от @Air. Когда-то у меня был успех, но сегодня я потерпел неудачу с Ubuntu16.04. Я получил эту ошибку:

xrdb can't open display 1

Но, к счастью, я нашел это работает:

startx

0

Я вижу, что у некоторых людей возникают проблемы с "startx: команда не найдена". У меня это тоже было, и это было потому, что я пробовал войти в систему и запустить startx до того, как первая инициализация была завершена. Будьте терпеливы, иди, возьмите кофе. Проверьте исходное окно консоли, чтобы увидеть, что происходит, особенно после завершения подготовки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.