Utilisation de vagrant pour exécuter des machines virtuelles avec un environnement de bureau


148

L'environnement de développement de mon entreprise est basé sur des machines virtuelles, fonctionnant sur VirtualBox. Nous aimerions aller plus loin et utiliser les capacités de Vagrant pour avoir la description de la machine dans un fichier texte et pouvoir ensuite "élever" cette machine en fonction de ce fichier texte. Combiné à la marionnette, cela nous résoudrait le problème que tout le monde a différentes versions de logiciels installées dans la VM.

Cependant, Vagrant semble très concentré pour se développer sur l'hôte, laissant la machine en arrière-plan. Nous aurions besoin d'avoir notre environnement de développement dans la machine, donc nous aurions besoin d'une interface graphique complète, donc lorsque vous tapez "vagrant up", une machine avec un environnement de bureau complet (XFCE, KDE ...) devrait apparaître.

Jusqu'à présent, j'ai réussi à créer une boîte "de base" à partir d'une distribution Xubuntu. Mais quand je tape "vagrant up", bien que le bureau apparaisse et que je puisse me connecter correctement, Vagrant se fige au message "En attente du démarrage de la machine. Cela peut prendre quelques minutes ...". Après un certain temps, Vagrant plante en raison du délai d'attente. Ainsi, les dossiers partagés ne sont pas créés, ni le fournisseur de packages -puppet- n'est exécuté.

Comment créer une machine virtuelle avec une interface graphique complète en utilisant vagrant?


1
Je n'ai jamais eu de problème avec ces boîtes . Une erreur s'est peut-être produite lors de l'emballage de votre boîte de base.
bfitzpatrick

1
D'un point de vue naïf, si vous pouvez développer sur l'hôte et non sur la VM, pourquoi vous embêtez-vous à installer des capacités d'interface graphique sur la VM Vagrant? pourquoi ne pas développer sur l'hôte?
Alexander Mills

Le développement sur la VM peut entraîner moins de problèmes lorsque les spécifications de VM / Vagrant sont maintenues par l'équipe de développement pour être synchronisées avec l'environnement cible de leur application. Vous obtiendrez moins de dépendances et de comportements rampants propres à votre développeur. l'environnement tout en n'étant pas présent (ou non identique) dans l'environnement / l'installation cible.
Jim Dennis

En fait, votre conclusion n'est pas tout à fait juste. Vagrant ne consiste pas à avoir l'environnement de développement en dehors de la boîte. De nombreuses personnes sous Linux se développent dans un terminal. Et vous pouvez le faire très bien avec les boîtes vagabondes uniquement ssh.
erikbwork

Réponses:


150

Je viens de faire fonctionner cela en trois étapes. Les conseils de askubuntu.comne fonctionnaient pas tout à fait pour moi, alors essayez cette version simplifiée:

  1. Faites fonctionner une image Ubuntu de base. Vous devriez pouvoir le démarrer et vagrant ssh.
  2. Ensuite, activez l'affichage de VirtualBox, qui est désactivé par défaut. Arrêtez la machine virtuelle et supprimez les commentaires de ces lignes dans Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = vrai
    fin
  3. Démarrez la VM et observez la nouvelle fenêtre d'affichage. Il ne vous reste plus qu'à installer et démarrer xfce4. Utilisez vagrant sshet:
    sudo apt-get installer xfce4
    sudo startxfce4 &
    

Si c'est la première fois que vous exécutez cet environnement Ubuntu, vous devrez exécuter la commande suivante avant d'installer xfce4:

sudo apt-get mise à jour

Voilà, vous devriez être débarqué dans une xfce4session.

Mise à jour: pour une meilleure expérience, je recommande ces améliorations:

  1. Ne démarrez pas l'interface graphique en tant que root. Vous voulez vraiment rester l' vagrantutilisateur. Pour ce faire, vous devez autoriser n'importe qui à démarrer l'interface graphique: sudo vim /etc/X11/Xwrapper.configet à la modifier allowed_users=anybody.
  2. Ensuite, installez les outils invités de VirtualBox avant de démarrer l'interface graphique. Cela vous donnera une résolution d'écran saine, une souris intégrée, etc.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-tout
  3. Ce n'est que maintenant que vous devez démarrer l'interface graphique en tant vagrantqu'utilisateur, avec $ startxfce4&.

Mise à jour 2: essayé aujourd'hui et le VBoxClient-allscript n'est pas toujours installé. S'il manque, vous pouvez le remplacer par l'équivalent:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient - affichage
sudo VBoxClient --checkhostversion
sudo VBoxClient - sans soudure

2
Je voulais juste passer et dire qu'après environ 5 heures à essayer de faire fonctionner xfce dans une boîte fedora 19 vagrant, la solution était d'installer le package invité virtualbox (yum install VirtualBox-guest.x86_64). Sans ce package, xorg ne pourrait pas accéder à mon moniteur de machine hôte pour une raison quelconque. Alors ... Merci mec!
billmalarky

J'ai découvert en essayant cela que le code de l'étape 3 doit être contenu dans la Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... doneméthode du Vagrantfile.
neontapir

1
Vous pouvez provisionner Xwindows etc. à partir de Vagrant en incluant les éléments suivants dans votre fichier Vagrant: #Provision X Windows, VirtualBox Guest, curl et autres packages 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
Juste un avertissement qu'Ubuntu 16.04 ne semble pas permettre de démarrer XFCE en tant que non-root de cette manière: bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
Air

1
On dirait que startxfce4peut être exécuté en tant que non-root sur Ubuntu 16.04 (xenial) après l'installationxserver-xorg-legacy
Laurence Billingham

74

Voici l'excellente réponse d'Air sous la forme d'un 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

Pour démarrer le vm

vagrant up

Connexion avec nom d'utilisateur :, vagrantmot de passe: vagrantvia l'invite de connexion sur l'interface graphique de virtualbox.

Démarrer xfce

startx

Cela a fonctionné pour moi avec deux petits ajustements. J'ai d'abord eu un 404 en cherchant la boîte "ubuntu / vivid64", donc je l'ai changé en "larryli / vivid64" que j'ai trouvé sur vagrantcloud. Deuxièmement, j'ai dû ajouter l'installation du plugin vagrant-proxyconf pour gérer les paramètres du proxy.
Daniel Watrous

2
Il hurle -> startx n'est actuellement pas installé ??
prière du

1
Mon mauvais, Internet n'a pas été configuré dans virtualbox pour télécharger le fichier xfce4. Cela fonctionne maintenant, mais y a-t-il un moyen de sauter la connexion et de démarrer le xfce4par défaut?
prière du

@prayagupd peu ancien, mais pouvez-vous préciser "Internet n'a pas été configuré dans virtualbox pour télécharger le xfce4"? J'obtiens la même erreur lors de l'exécution de startx aprèsvagrant ssh
Joshua Zastrow

1
J'ai quelques problèmes, où ma boîte virtuelle dit "startx: command not found". Quelqu'un pourrait-il m'aider à diagnostiquer cela?
OOProg

11

Mes 2 cents

  • Assurez-vous que vous utilisez le dernier vagrant (1.3.3 maintenant) + VirtualBox (4.2.18) pour éviter les bogues.

  • Vous pouvez utiliser un script shell ou une commande en ligne pour installer un environnement de bureau ou un gestionnaire de fenêtres léger

    Par exemple, installez LXDE sur Ubuntu 12.04 Precise base box de 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
  • Si vous construisez vos propres boîtes de base vagabondes, assurez-vous de suivre les instructions d'emballage de la boîte de base ou envisagez des outils comme packer (ou veewee) pour automatiser la construction.

9

Voici un Vagrantfile légèrement adapté pour Ubuntu 18.04 LTS / bionic - grâce aux réponses d' Air et de Nik , et ce post expliquant comment augmenter la taille du disque lors de l'utilisation de VirtualBox (par défaut = 10 Go).

La VM comprend un écran de connexion LightDM.

Mise à jour: j'ai créé un repo GitHub à partir de cet exemple et ajouté de nombreux packages logiciels pour le développement 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

Sur Ubuntu 16.04, j'ai dû installer xserver-xorg-legacy pour que le fichier XWrapper.config existe / soit utilisé.
MZB

Des tests supplémentaires suggèrent que la ligne sed n'est peut-être pas nécessaire, comme indiqué dans le commentaire dans le dépôt github lié.
MZB

@ mh8020 Merci d'avoir créé le dépôt github. Très propre et facile à suivre, exactement ce dont j'avais besoin. Juste un problème: je ne parviens pas à faire fonctionner le son sur le système invité Ubuntu! Une idée de ce qui pourrait l'activer sur votre configuration actuelle?
timmwagener

7

J'utilise l'image de bureau ubuntu, cela fonctionne bien avec deux moniteurs sur Windows avec un fournisseur de boîte virtuelle.

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']pour obtenir le son de la vm (si nécessaire)
Igonato

box-cutter ne fournit plus les images pré-construites.
krock

5

Vous pouvez également envisager d'utiliser Packer pour créer des images VirtualBox que les développeurs pourront utiliser.

Plutôt que de partager le Vagrantfile que les développeurs utilisent chacun pour créer et exécuter leur VM, vous auriez un modèle de packer (json) qui est utilisé pour créer une image de VM. Les développeurs téléchargent ou copient l'image et l'exécutent localement, directement dans VB, sans avoir à la construire eux-mêmes.

La plupart des boîtes de base Vagrant partagées publiquement sont créées avec Packer.


2

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

Après avoir installé le bureau, vous voudrez également installer GDM qui vous permettra de démarrer directement dans un environnement graphique. Vous voudrez également le configurer.

Alors peut-être ajouter ceci?

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
... ou le plus léger xdm
geekQ

1

J'ai un peu corrigé la réponse de Nik pour éviter 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

En ajoutant au commentaire de billmalarky ci-dessus, sur fedora 20, ce qui suit était nécessaire avant de démarrer xfce:

  • Installez VirtualBox-guest.rpm (disponible à partir des dépôts rpmfusion)
  • yum groups mark install 'graphical_environment'
  • yum groupinstall "Xfce"
  • yum installer les pilotes xorg-x11

Voici le 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

Comme la xfce4solution de @Air. Une fois, j'ai eu du succès, mais aujourd'hui j'ai échoué avec ubuntu16.04. J'ai eu cette erreur:

xrdb can't open display 1

Mais heureusement, j'ai trouvé cela fonctionne:

startx

0

Je vois que quelques personnes ont des problèmes avec "startx: command not found". J'avais cela aussi et c'était parce que j'essayais de me connecter et de startx avant la fin du premier approvisionnement. Soyez patient, allez prendre un café. Consultez la fenêtre de la console d'origine pour voir ce qui se passe, en particulier lorsque l'approvisionnement est terminé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.