Verwenden von Vagrant zum Ausführen virtueller Maschinen mit Desktop-Umgebung


148

Die Entwicklungsumgebung meines Unternehmens basiert auf virtuellen Maschinen, die auf VirtualBox ausgeführt werden. Wir möchten noch einen Schritt weiter gehen und die Funktionen von Vagrant nutzen, um die Beschreibung der Maschine in einer Textdatei zu haben und diese Maschine dann basierend auf dieser Textdatei "anheben" zu können. In Kombination mit Puppet würde dies das Problem lösen, dass auf jedem Benutzer unterschiedliche Softwareversionen in der VM installiert sind.

Vagrant scheint sich jedoch sehr darauf zu konzentrieren, sich auf dem Host zu entwickeln und die Maschine im Hintergrund zu lassen. Wir müssten unsere Entwicklungsumgebung auf dem Computer haben, daher benötigen wir eine vollständige GUI. Wenn Sie also "vagrant up" eingeben, sollte ein Computer mit einer vollständigen Desktop-Umgebung (XFCE, KDE ...) angezeigt werden.

Bisher habe ich es geschafft, eine "Basis" -Box aus einer Xubuntu-Distribution zu erstellen. Wenn ich jedoch "vagrant up" eingebe, obwohl der Desktop angezeigt wird und ich mich ordnungsgemäß anmelden kann, friert Vagrant bei der Meldung "Warten auf den Start des Computers. Dies kann einige Minuten dauern ..." ein. Nach einer Weile stürzt Vagrant aufgrund eines Timeouts ab. Daher werden keine freigegebenen Ordner erstellt und der Paket-Provisioner -puppet- wird nicht ausgeführt.

Wie erstelle ich eine virtuelle Maschine mit einer vollständigen Benutzeroberfläche unter Verwendung von Vagrant?


1
Ich hatte noch nie ein Problem mit diesen Boxen . Vielleicht ist etwas schief gelaufen, als Sie Ihre Basisbox verpackt haben.
Bfitzpatrick

1
Wenn Sie aus naiver Sicht auf dem Host und nicht auf der VM entwickeln können, warum müssen Sie dann GUI-Funktionen auf der Vagrant-VM installieren? Warum nicht auf dem Host entwickeln?
Alexander Mills

Das Entwickeln auf der VM kann zu weniger Problemen führen, wenn die VM / Vagrant-Spezifikationen vom Entwicklungsteam so verwaltet werden, dass sie mit der Zielumgebung ihrer Anwendung synchronisiert sind. Sie erhalten weniger schleichende Abhängigkeiten und Verhaltensweisen, die für Ihren Entwickler einzigartig sind. Umgebung, während sie in der Zielumgebung / Installation nicht vorhanden (oder nicht identisch) ist.
Jim Dennis

Eigentlich ist Ihre Schlussfolgerung nicht ganz richtig. Bei Vagrant geht es nicht darum, die Entwicklungsumgebung außerhalb des Rahmens zu haben. Viele Leute unter Linux entwickeln sich in einem Terminal. Und das können Sie ganz gut mit ssh-only vagrant boxen.
Erikbwork

Antworten:


150

Ich habe das gerade mit drei Schritten zum Laufen gebracht. Der Rat von askubuntu.comhat bei mir nicht ganz funktioniert. Probieren Sie diese vereinfachte Version aus:

  1. Holen Sie sich ein einfaches Ubuntu-Image zum Laufen. Sie sollten in der Lage sein, es zu booten und vagrant ssh.
  2. Aktivieren Sie als Nächstes die VirtualBox-Anzeige, die standardmäßig deaktiviert ist. Halten Sie die VM an und kommentieren Sie diese Zeilen aus Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = true
    Ende
  3. Starten Sie die VM und beobachten Sie das neue Anzeigefenster. Jetzt müssen Sie nur noch installieren und starten xfce4. Verwenden Sie vagrant sshund:
    sudo apt-get installiere xfce4
    sudo startxfce4 &
    

Wenn Sie diese Ubuntu-Umgebung zum ersten Mal ausführen, müssen Sie vor der Installation von xfce4 den folgenden Befehl ausführen:

sudo apt-get update

Das war's, du solltest in einer xfce4Sitzung gelandet sein .

Update: Für eine bessere Erfahrung empfehle ich diese Verbesserungen:

  1. Starten Sie die GUI nicht als root. Sie wollen wirklich der vagrantBenutzer bleiben . Dazu müssen Sie jedem erlauben, die GUI zu starten: sudo vim /etc/X11/Xwrapper.configund sie zu bearbeiten allowed_users=anybody.
  2. Installieren Sie als Nächstes die VirtualBox-Gasttools, bevor Sie die GUI starten. Dies gibt Ihnen eine gesunde Bildschirmauflösung, eine integrierte Maus usw.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. Erst jetzt sollten Sie die GUI als vagrantBenutzer mit starten $ startxfce4&.

Update 2: Versuchte dies heute und das VBoxClient-allSkript ist nicht immer installiert. Wenn es fehlt, können Sie es durch das Äquivalent ersetzen:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient - Anzeige
sudo VBoxClient --checkhostversion
sudo VBoxClient - nahtlos

2
Ich wollte nur vorbeischauen und sagen, dass nach etwa 5 Stunden Versuch, xfce in einer Fedora 19-Vagabundbox zum Laufen zu bringen, die Lösung darin bestand, das Virtualbox-Gastpaket zu installieren (yum install VirtualBox-guest.x86_64). Ohne dieses Paket könnte xorg aus irgendeinem Grund keinen Zugriff auf meinen Host-Computer-Monitor erhalten. Also ... Danke Mann!
Billmalarky

Als ich dies versuchte, stellte ich fest, dass der Code von Schritt 3 in der Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... doneMethode der Vagrant-Datei enthalten sein muss.
Neontapir

1
Sie können Xwindows usw. von Vagrant aus bereitstellen, indem Sie Folgendes in Ihre Vagrant-Datei aufnehmen: #Provision X Windows, VirtualBox Guest, Curl und andere apt-Pakete 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>
Farrukh Najmi

2
Nur ein Hinweis, dass Ubuntu 16.04 das Starten von XFCE als Nicht-Root auf diese Weise nicht zuzulassen scheint: bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
Air

1
Es sieht startxfce4so aus, als ob es nach der Installation unter Ubuntu 16.04 (xenial) als Nicht-Root ausgeführt werden kannxserver-xorg-legacy
Laurence Billingham

74

Hier ist die ausgezeichnete Antwort von Air in Form eines 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

So starten Sie die VM

vagrant up

Login mit Benutzername : vagrant, Passwort: vagrantüber die Login-Eingabeaufforderung auf der Virtualbox-GUI.

Starten Sie xfce

startx

Dies funktionierte bei mir mit zwei kleinen Anpassungen. Zuerst bekam ich eine 404, als ich nach der "ubuntu / vivid64" -Box suchte, also änderte ich sie in "larryli / vivid64", die ich auf vagrantcloud fand. Zweitens musste ich das vagrant-proxyconf-Plugin installieren, um die Proxy-Einstellungen zu verwalten.
Daniel Watrous

2
Es schreit -> startx ist momentan nicht installiert ??
Prayagupd

1
Mein schlechtes Internet wurde in der Virtualbox nicht zum Herunterladen des konfiguriert xfce4. Es funktioniert jetzt, aber gibt es eine Möglichkeit, das Login zu überspringen und das xfce4standardmäßig zu starten ?
Prayagupd

@prayagupd etwas alt, aber können Sie näher auf "Internet wurde nicht in Virtualbox zum Herunterladen der konfiguriert xfce4"? Ich bekomme den gleichen Fehler, wenn ich startx nachvagrant ssh
Joshua Zastrow

1
Ich habe einige Probleme, bei denen in meiner virtuellen Box "startx: Befehl nicht gefunden" angezeigt wird. Könnte mir jemand helfen, dies zu diagnostizieren?
OOProg

11

Meine 2 Cent

  • Stellen Sie sicher, dass Sie den neuesten Vagrant (1.3.3 jetzt) ​​+ VirtualBox (4.2.18) ausführen, um Fehler zu vermeiden.

  • Sie können ein Shell-Skript oder einen Inline-Befehl verwenden, um eine Desktop-Umgebung oder einen leichten Fenstermanager zu installieren

    Installieren Sie beispielsweise LXDE auf Ubuntu 12.04 Precise Base Box von 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
  • Wenn Sie Ihre eigene vagrant Grundboxen bauen, stellen Sie sicher , dass Sie die folgen Fußschachtel Verpackungsanweisungen oder zu prüfen , Werkzeuge wie Packer (oder veewee) den Build zu automatisieren.

9

Hier ist eine leicht angepasste Vagrant-Datei für Ubuntu 18.04 LTS / bionic - dank der Antworten von Air und Nik. In diesem Beitrag wird erläutert, wie die Festplattengröße bei Verwendung von VirtualBox erhöht werden kann (Standard = 10 GB).

Die VM enthält einen LightDM-Anmeldebildschirm.

Update: Ich habe aus diesem Beispiel ein GitHub-Repo erstellt und viele Softwarepakete für die Frontend + Backend-Entwicklung hinzugefügt.

# 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

Unter Ubuntu 16.04 musste ich xserver-xorg-Legacy installieren, damit die Datei XWrapper.config existiert / verwendet werden kann.
MZB

Weitere Tests legen nahe, dass die sed-Linie gemäß dem Kommentar im verknüpften Github-Repo möglicherweise nicht benötigt wird.
MZB

@ mh8020 Danke, dass du das Github-Repo erstellt hast. Sehr sauber und leicht zu folgen, genau das, was ich brauchte. Nur ein Problem: Ich kann keinen Sound auf dem Gast-Ubuntu-System zum Laufen bringen! Irgendeine Idee, was dies in Ihrem aktuellen Setup ermöglichen könnte?
Timmwagener

7

Ich verwende Ubuntu Desktop Image, es funktioniert gut mit zwei Monitoren unter Windows mit Virtual Box Provider.

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']um den Ton von der VM zu bekommen (falls erforderlich)
Igonato

Box-Cutter liefert keine vorgefertigten Bilder mehr.
Rock

5

Sie können auch Packer verwenden , um VirtualBox-Images für Entwickler zu erstellen.

Anstatt die Vagrant-Datei freizugeben, mit der Entwickler ihre VM erstellen und ausführen, hätten Sie eine Packer-Vorlage (json), mit der ein VM-Image erstellt wird. Entwickler laden das Image herunter oder kopieren es und führen es lokal direkt in VB aus, ohne es selbst erstellen zu müssen.

Viele der öffentlich freigegebenen Vagrant-Basisboxen werden mit Packer erstellt.


2

/ubuntu/300799/does-ubuntu-12-04-lts-32-bit-have-graphic-user-interface/300805#300805

Nach der Installation des Desktops möchten Sie auch GDM installieren, mit dem Sie direkt in eine grafische Umgebung booten können. Sie möchten es auch konfigurieren.

Also vielleicht hinzufügen?

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
... oder das leichtere xdm
geekQ

0

Zusätzlich zu dem obigen Kommentar von billmalarky war auf fedora 20 vor dem Start von xfce Folgendes erforderlich:

  • Installieren Sie VirtualBox-guest.rpm (erhältlich bei rpmfusion repos)
  • yum groups markieren install 'graphical_environment'
  • yum groupinstall "Xfce"
  • yum installiere xorg-x11-Treiber

Hier ist der Code:

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

Wie die xfce4Lösung von @Air. Früher hatte ich Erfolg, aber heute habe ich mit ubuntu16.04 versagt. Ich habe diesen Fehler erhalten:

xrdb can't open display 1

Aber zum Glück fand ich das funktioniert:

startx

0

Ich habe Niks Antwort ein wenig gepatcht, um HTTP 404 zu vermeiden:

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

Ich sehe, dass einige Leute Probleme mit "startx: Befehl nicht gefunden" haben. Ich hatte dies auch und es war, weil ich Login und Startx versuchte, bevor die erste Bereitstellung abgeschlossen war. Sei geduldig, hol dir einen Kaffee. Überprüfen Sie das ursprüngliche Konsolenfenster, um festzustellen, was gerade passiert, wenn die Bereitstellung abgeschlossen ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.