Utilizzo di vagrant per eseguire macchine virtuali con ambiente desktop


148

L'ambiente di sviluppo della mia azienda si basa su macchine virtuali, in esecuzione su VirtualBox. Vorremmo fare un ulteriore passo avanti e utilizzare le capacità di Vagrant per avere la descrizione della macchina in un file di testo e quindi essere in grado di "sollevare" quella macchina in base a quel file di testo. Combinato al burattino, questo ci risolverebbe il problema che tutti hanno diverse versioni del software installate nella VM.

Tuttavia, Vagrant sembra molto concentrato sullo sviluppo sull'host, lasciando la macchina in background. Dovremmo avere il nostro ambiente di sviluppo all'interno della macchina, quindi avremmo bisogno di una GUI completa, quindi quando si digita "vagabondaggio" dovrebbe apparire una macchina con un ambiente desktop completo (XFCE, KDE ...).

Finora sono riuscito a creare un box "base" da una distribuzione Xubuntu. Ma quando scrivo "vagrant up", anche se appare il desktop, e sono in grado di accedere correttamente, Vagrant si blocca al messaggio "In attesa dell'avvio del computer. Potrebbero essere necessari alcuni minuti ...". Dopo un po 'Vagrant si blocca a causa del timeout. Pertanto non vengono create cartelle condivise, né viene eseguito il provisioning del pacchetto -puppet-.

Come creare una macchina virtuale con una GUI completa usando Vagrant?


1
Non ho mai avuto problemi ad usare queste scatole . Forse qualcosa è andato storto quando hai impacchettato la tua scatola base.
bfitzpatrick,

1
dal punto di vista ingenuo, se riesci a svilupparti sull'host e non sulla VM, perché ti preoccupi di installare le capacità della GUI sulla VM Vagrant? perché non sviluppare sull'host?
Alexander Mills,

Lo sviluppo sulla VM può comportare un minor numero di problemi quando le specifiche VM / Vagrant sono gestite dal team di sviluppo per essere sincronizzate con l'ambiente di destinazione della loro applicazione. Avrai meno dipendenze e comportamenti striscianti che sono unici per il tuo sviluppatore. ambiente pur non essendo presente (o non identico) nell'ambiente / installazione di destinazione.
Jim Dennis,

In realtà la tua conclusione non è del tutto corretta. Vagrant non ha a che fare con l'ambiente di sviluppo fuori dagli schemi. Molte persone su Linux si sviluppano in un terminale. E puoi farlo bene con le scatole vagabonde solo ssh.
erikbwork,

Risposte:


150

Ho appena funzionato con sostanzialmente tre passaggi. Il consiglio di askubuntu.comnon ha funzionato abbastanza per me, quindi prova questa versione semplificata:

  1. Ottieni un'immagine di base di Ubuntu funzionante. Dovresti essere in grado di avviarlo e vagrant ssh.
  2. Quindi, abilitare il display VirtualBox, che è disattivato per impostazione predefinita. Arrestare la VM e rimuovere il commento da queste righe in Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = true
    fine
  3. Avviare la VM e osservare la nuova finestra di visualizzazione. Ora devi solo installare e avviare xfce4. Usa vagrant sshe:
    sudo apt-get install xfce4
    sudo startxfce4 &
    

Se è la prima volta che si esegue questo ambiente Ubuntu, è necessario eseguire il comando seguente prima di installare xfce4:

sudo apt-get update

Questo è tutto, dovresti essere atterrato in una xfce4sessione.

Aggiornamento: per un'esperienza migliore, raccomando questi miglioramenti:

  1. Non avviare la GUI come root. Vuoi davvero rimanere l' vagrantutente. Per fare ciò è necessario consentire a chiunque di avviare la GUI: sudo vim /etc/X11/Xwrapper.confige modificarla in allowed_users=anybody.
  2. Quindi, installare gli strumenti guest VirtualBox prima di avviare la GUI. Questo ti darà una buona risoluzione dello schermo, mouse integrato, ecc.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. Solo ora dovresti avviare la GUI come vagrantutente, con $ startxfce4&.

Aggiornamento 2:VBoxClient-all ho provato oggi e lo script non è sempre installato. Se manca, puoi sostituirlo con l'equivalente:

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

2
Volevo solo entrare e dire che dopo circa 5 ore di tentativi di far funzionare xfce in un box vagrant di fedora 19, la soluzione era installare il pacchetto guest virtualbox (yum install VirtualBox-guest.x86_64). Senza quel pacchetto, xorg non poteva accedere al mio monitor della macchina host per qualche motivo. Quindi ... Grazie amico!
billmalarky,

Quando ho provato questo, ho scoperto che il codice del passaggio 3 deve essere contenuto nel Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... donemetodo del Vagrantfile.
neontapir,

1
Puoi effettuare il provisioning di Xwindows ecc. Da Vagrant includendo quanto segue nel tuo Vagrantfile: #Provision X Windows, VirtualBox Guest, curl e altri pacchetti 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>
Farrukh Najmi

2
Solo un avvertimento che Ubuntu 16.04 non sembra consentire l'avvio di XFCE come non root in questo modo: bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
Air

1
Sembra che startxfce4possa essere eseguito come non root su Ubuntu 16.04 (xenial) dopo l'installazionexserver-xorg-legacy
Laurence Billingham,

74

Ecco la risposta eccellente di Air sotto forma di a 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

Per avviare il vm

vagrant up

Accesso con nome utente:, vagrantpassword: vagranttramite il prompt di accesso nella GUI di virtualbox.

Avvia xfce

startx

Questo ha funzionato per me con due piccoli aggiustamenti. Per prima cosa ho trovato un 404 mentre cercavo la casella "ubuntu / vivid64", quindi l'ho cambiata in "larryli / vivid64" che ho trovato su vagrantcloud. In secondo luogo ho dovuto aggiungere installare il plug-in vagrant-proxyconf per gestire le impostazioni del proxy.
Daniel Watrous

2
Urla -> startx non è attualmente installato ??
prayagupd,

1
Mio male, Internet non è stato configurato in virtualbox per scaricare il xfce4. Funziona ora ma c'è un modo per saltare il login e avviarlo xfce4di default?
prayagupd,

@prayagupd è un po 'vecchio, ma puoi approfondire "Internet non è stato configurato in virtualbox per scaricare xfce4"? Ricevo lo stesso errore quando eseguo startx dopovagrant ssh
Joshua Zastrow,

1
Sto riscontrando dei problemi, in cui la mia scatola virtuale dice "startx: comando non trovato". Qualcuno potrebbe aiutarmi a diagnosticare questo?
OOProg

11

I miei 2 centesimi

  • Assicurati di eseguire l'ultima versione di Vagrant (1.3.3 ora) + VirtualBox (4.2.18) per evitare bug.

  • È possibile utilizzare lo script della shell o il comando inline per installare un ambiente desktop o un gestore di finestre leggero

    Ad esempio, installare LXDE su Ubuntu 12.04 Precise base box da 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
  • Se costruisci le tue scatole di base vagabonde, assicurati di seguire le istruzioni di imballaggio della scatola di base o di prendere in considerazione strumenti come packer (o veewee) per automatizzare la build.

9

Ecco un Vagrantfile leggermente adattato per Ubuntu 18.04 LTS / bionic, grazie alle risposte di Air e Nik , e questo post spiega come aumentare le dimensioni del disco quando si utilizza VirtualBox (impostazione predefinita = 10 GB).

La VM include una schermata di accesso a LightDM.

Aggiornamento: da questo esempio ho creato un repository GitHub e ho aggiunto molti pacchetti software per lo sviluppo 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

Su Ubuntu 16.04 ho dovuto installare xserver-xorg-legacy per far esistere / essere usato il file XWrapper.config.
MZB

Ulteriori test suggeriscono che la linea sed potrebbe non essere necessaria come da commento nel repository github collegato.
MZB

@ mh8020 Grazie per aver creato il repository github. Molto pulito e facile da seguire, proprio quello di cui avevo bisogno. Solo un problema: non riesco a far funzionare l'audio sul sistema Ubuntu guest! Hai idea di cosa potrebbe abilitarlo nella tua configurazione attuale?
timmwagener,

7

Sto usando l'immagine desktop di Ubuntu, funziona bene con due monitor su Windows con provider di scatole virtuali.

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']per ottenere il suono dal vm (se necessario)
Igonato

il decespugliatore non fornisce più le immagini predefinite.
Krock,

5

Potresti anche considerare di usare Packer per creare immagini di VirtualBox che gli sviluppatori possano usare.

Invece di condividere il file Vagrant utilizzato dagli sviluppatori per creare ed eseguire la propria macchina virtuale, si avrebbe un modello di packer (json) che viene utilizzato per creare un'immagine della macchina virtuale. Gli sviluppatori scaricano o copiano l'immagine ed eseguono localmente, direttamente in VB, senza doverlo costruire da soli.

Molte delle scatole base Vagrant condivise pubblicamente vengono create con Packer.


2

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

Dopo aver installato il desktop, ti consigliamo di installare GDM che ti permetterà di avviare direttamente in un ambiente grafico. Ti consigliamo anche di configurarlo.

Quindi forse aggiungi questo?

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
... o il più leggero xdm
geekQ

1

Ho corretto un po 'la risposta di Nik per evitare 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

Aggiungendo al commento di billmalarky sopra, su fedora 20 era necessario quanto segue prima di iniziare xfce:

  • Installa VirtualBox-guest.rpm (disponibile dai repository rpmfusion)
  • i gruppi yum contrassegnano l'installazione 'graphical_environment'
  • yum groupinstall "Xfce"
  • yum installa xorg-x11-drivers

Ecco il codice:

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

Come la xfce4soluzione di @Air. Una volta ho avuto successo, ma oggi ho fallito con ubuntu16.04. Ho ricevuto questo errore:

xrdb can't open display 1

Ma per fortuna, ho scoperto che funziona:

startx

0

Vedo che alcune persone hanno problemi con "startx: comando non trovato". Anch'io avevo questo ed era perché stavo provando login e startx prima che il provisioning iniziale fosse completato. Sii paziente, vai a prendere un caffè. Controlla la finestra della console originale per vedere cosa sta succedendo soprattutto al termine del provisioning.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.