web-dev-qa-db-fra.com

Exécution de Vagrant Inside VMWare VM

Je réalise que c'est essentiellement OSCeption (Operating System Inception), mais je pense que cela pourrait avoir le plus de sens pour moi (veuillez me dire s'il y a une meilleure option, cela semble vraiment horrible).

Voici la situation: J'ai une machine Windows 8. Je l'aime - cela fonctionne très bien pour tout sauf pour le développement. Pour le développement, j'utilise une machine virtuelle VMWare exécutant Ubuntu. J'ai tâté d'utiliser Cygwin, mais cela ne me semblait pas juste.

Je rejoins maintenant un projet où ils ont utilisé Vagrant pour gérer les environnements de développement, je dois donc pouvoir utiliser Vagrant. Mais, d'après ce que j'ai vu, Vagrant est principalement utilisé pour exécuter du code dans un environnement cohérent, mais pas nécessairement pour l'écrire. Et si je voulais écrire du code en SSH dans mes boîtes vagabondes, je devrais reconfigurer mes préférences comme mon fichier .vimrc et ce qui ne l'est pas pour chaque machine.

Est-il alors judicieux d'installer Vagrant dans mon Ubuntu VirtualMachine? J'ai l'impression qu'à un moment donné, les machines virtuelles au sein des machines virtuelles deviendront incontrôlables et causeront des problèmes. Existe-t-il une meilleure façon de procéder?

Edit: J'ai donc essayé - comme je m'y attendais, j'ai rencontré quelques erreurs. Lorsque j'essaie de démarrer la machine, j'obtiens le message d'erreur suivant:

Failed to open a session for the virtual machine vagranttest_1371583212.

VT-x is not available. (VERR_VMX_NO_VMX).

Result Code: NS_ERROR_FAILURE (0x80004005)
Component: Console
Interface: IConsole {db7ab4ca-2a3f-4183-9243-c1208da92392}

Il semble que ma machine virtuelle vmware ne puisse pas exécuter une autre machine virtuelle. Avez-vous des idées sur la meilleure façon de procéder?

44
Josh

J'ai rencontré le même problème aujourd'hui. La solution est assez simple.

  1. Éteignez la machine vitrual vmware.
  2. Allez dans "modifier les paramètres de la machine virtuelle"
  3. Allez aux processeurs. Il y a trois cases à cocher.
  4. Cochez la deuxième case (activez VT-x/AMD-V)
  5. Mettez la machine sous tension.

Après cette virtualbox devrait fonctionner dans vmware.

53
Andrew Orsich

Pour répondre à la question d'origine ainsi qu'au message du forum Vagrant de @ blong, voici ce que j'ai fait pour que cela fonctionne.

J'essayais de faire quelque chose de similaire moi-même (en fait, Vagrant/VMware hébergeant Vagrant/Vbox) et j'ai effectué toutes les optimisations auxquelles je peux penser, donnant à mon "hôte" VM une grande quantité de = RAM (24 Go) et 6 cœurs, désactivant l'échange de machines virtuelles sur le disque (cela TUE des choses sur Windows quand cela se produit) en définissant "Fit all VM mémoire dans l'hôte réservé) mémoire ", et autoriser par VM (sinon ils vivent dans le fichier de pages système qui limite le nombre de machines virtuelles que vous pouvez exécuter simultanément).

Ce que je fais a parfaitement fonctionné, les problèmes de réseau que j'ai rencontrés étaient dus au proxy d'entreprise que je suis derrière. Une fois que j'ai configuré que mon VM avait accès à Internet et tout allait bien avec le monde.

J'ai dû définir manuellement --natbindip1 et --natnet1 via le Vagrantfile en plus des natdnsproxy1 et naddnshostresolver1 qui étaient déjà définis dans mon exemple (Virtualbox) Vagrantfile. Ces paramètres peuvent être trouvés dans la documentation de Virtualbox pour une utilisation correcte.

Pour résumer, utilisez l'option passthrough VT-x/"virtualiser" dans vos paramètres CPU VM, donnez à VM une mémoire adéquate, ne laissez pas cette mémoire à échanger sur la machine hôte "racine", et essayez de vous assurer que vos plages réseau ne se chevauchent pas ou vous aurez des problèmes de routage.

Voici le Vagrantfile sur lequel je travaillais, il est basé presque entièrement sur Gist d'andreptb pour la configuration de vagabond modern.ie. https://Gist.github.com/andreptb/57e388df5e881937e62a

# -*- mode: Ruby -*-
# vi: set ft=Ruby :

# box name into env var, same script can be used with different boxes. Defaults to win7-ie11.
box_name = box_name = ENV['box_name'] != nil ? ENV['box_name'].strip : 'win7-ie11'
# box repo into env var, so private repos/cache can be used. Defaults to http://aka.ms
box_repo = ENV['box_repo'] != nil ? ENV['box_repo'].strip : 'http://aka.ms'

Vagrant.configure("2") do |config|
  # If the box is win7-ie11, the convention for the box name is modern.ie/win7-ie11
  config.vm.box = "modern.ie/" + box_name
  # If the box is win7-ie11, the convention for the box url is http://aka.ms/vagrant-win7-ie11
  config.vm.box_url = box_repo + "/vagrant-" + box_name
  # big timeout since windows boot is very slow
  config.vm.boot_timeout = 500

  # rdp forward
  config.vm.network "forwarded_port", guest: 3389, Host: 3389, id: "rdp", auto_correct: true

  # winrm config, uses modern.ie default user/password. If other credentials are used must be changed here
  config.vm.communicator = "winrm"
  config.winrm.username = "IEUser"
  config.winrm.password = "Passw0rd!"

  config.vm.provider "virtualbox" do |vb|
    # first setup requires gui to be enabled so scripts can be executed in virtualbox guest screen
    #vb.gui = true
    vb.customize ["modifyvm", :id, "--memory", "1024"]
    vb.customize ["modifyvm", :id, "--vram", "128"]
    vb.customize ["modifyvm", :id,  "--cpus", "2"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 10000]
  end
end

Mes modifications supplémentaires:

# Need the WinRM gem for managing from Linux
$ Sudo gem install winrm

    config.vm.communicator = "winrm"
+  config.winrm.Host = "localhost"
    config.winrm.username = "IEUser"
    config.winrm.password = "Passw0rd!"
# This one may not be necessary, I added it for completeness
+  config.vm.guest = :windows

# In order to USE the two CPUs you need the ioapic
# Virtualbox gives an error in the GUI and only shows 1 CPU in the VM otherwise
      vb.customize ["modifyvm", :id, "--cpus", "2"]
+    vb.customize ["modifyvm", :id, "--ioapic", "on"]
# We had to modify the network range because we are running Virtualbox inside VMware
+    vb.customize ["modifyvm", :id, "--natnet1", "192.168.199.0/24"]

Supprimez les signes + et ajoutez ces lignes dans le fichier Vagrant ci-dessus et vous devriez avoir un système de travail équivalent à ce que j'ai utilisé.

4
dragon788

Si vous exécutez virualbox dans un VM dans vsphere, vous devez vous connecter à ESXi pour mettre à jour une configuration.

Pas:

  1. ssh vers le serveur ESXi.
  2. recherchez le fichier vmx qui appartient à votre VM find / -name *.vmx
  3. éteignez votre machine virtuelle (très important, sinon votre modification sera écrasée)
  4. éditez ce vmx, ajoutez une nouvelle configuration au bas du fichier: vhv.enable = "TRUE"
  5. allumez votre VM
  6. profitez du Vagrant. :)
2
Matthewgao

J'ai essayé cela dans deux produits VMware. Faites un clic droit sur la VM:

  • Dans vCloud Director 5.5 VM propriétés sous l'onglet Matériel, il y a une case à cocher "Exposer la virtualisation CPU assistée par le matériel à l'OS invité", mais elle est grisée pour moi. YMMV.
  • Dans vSphere version 5.5.0 Modifier les paramètres> Matériel virtuel> CPU, la case à cocher est intitulée "Exposer la virtualisation assistée par matériel au système d'exploitation invité", et cela a fonctionné pour moi.
1
tbc0