web-dev-qa-db-fra.com

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

L'environnement de développement de ma société est basé sur des machines virtuelles s'exécutant sur VirtualBox. Nous voudrions aller un peu 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 sur la base de ce fichier texte. Combiné à marionnettes, cela résoudrait le problème posé par le fait que toutes les versions du logiciel sont installées sur la machine virtuelle. 

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

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

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

135
PRiera

Je viens de travailler avec essentiellement trois étapes. Les conseils de askubuntu.com ne fonctionnant pas très bien pour moi, essayez cette version simplifiée:

  1. Obtenez une image de base d'Ubuntu. 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 VM et décommentez ces lignes dans Vagrantfile:
     config.vm.provider: virtualbox do | vb | 
     vb.gui = true 
     end
  3. Démarrez le VM et observez la nouvelle fenêtre d’affichage. Maintenant, il vous suffit d'installer et de démarrer xfce4. Utilisez vagrant ssh et:
     Sudo apt-get install xfce4 
     Sudo startxfce4 & 
    

Ça y est, vous devriez être débarqué dans une session xfce4.

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'utilisateur vagrant. Pour ce faire, vous devez permettre à quiconque de démarrer l'interface graphique: Sudo vim /etc/X11/Xwrapper.config et de le modifier en allowed_users=anybody.
  2. Ensuite, installez les outils invités VirtualBox avant le démarrage de 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-all
  3. C'est seulement maintenant que vous devez démarrer l'interface graphique en tant qu'utilisateur vagrant, avec $ startxfce4&.

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

Sudo VBoxClient --clipboard 
 Sudo VBoxClient --draganddrop 
 Sudo VBoxClient --display 
 Sudo VBoxClient --checkhostversion 
 Sudo VBoxClient --sempire
136
Air

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

Connectez-vous avec le nom d'utilisateur: vagrant, mot de passe: vagrant via l'invite de connexion sur l'interface graphique de la virtualbox.

Démarrer xfce

startx
68
Nik

Mes 2 centimes

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

  • Vous pouvez utiliser un script shell ou une commande intégrée 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 de vagabond, veillez à suivre les instructions boîte de base packaging ou envisagez d'utiliser des outils tels que packer (ou Veewee) pour automatiser la construction.
9
Terry Wang

J'utilise ubuntu desktop image, cela fonctionne bien avec deux moniteurs sous 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
6
Andrzej Rehmann

Vous pouvez également envisager d’utiliser Packer pour créer des images VirtualBox à l’usage des développeurs. 

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

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

5
Kief

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

Le VM comprend un écran de connexion LightDM.

Update: J'ai créé un GitHub repo à partir de cet exemple et ajouté de nombreux packages logiciels pour le développement front-end + back-end.

# 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
3
mh8020

https://askubuntu.com/questions/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, lequel vous permettra de démarrer directement dans un environnement graphique. Vous aurez aussi vouloir 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
2
Anthony Roberts

Pour ajouter au commentaire de billmalarky ci-dessus, sur Fedora 20, il était nécessaire de prendre les mesures suivantes avant de lancer xfce:

  • Installez VirtualBox-guest.rpm (disponible à partir du dépôt rpmfusion)
  • les groupes yum marquent install 'graphical_environment'
  • yum groupinstall "Xfce"
  • miam installer xorg-x11-drivers

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
Izak Marais

Comme la solution xfce4 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é ceci fonctionne:

startx
0
scil

J'ai corrigé un peu 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
Stepan Yakovenko