Objectif
On souhaite créer une VM Linux sous Windows 10 Pro. On va donc passer directement par l’outil Hyper-V (fourni avec Windows 10 Pro), et installer une VM Ubuntu par exemple. Mais cela impose pas mal de taches manuelles interactives, donc on va essayer de l’automatiser.
Pour cela on va utiliser un outil d’Infrastructure as Code, en l’occurrence Vagrant. D’autres existent comme Terraform, Ansible, Chef, Puppet…
Pourquoi Hyper-V ? En effet parfois on n’a pas la possibilité d’utiliser WSL 2 par exemple, ou ce dernier ne répond pas au besoin. Si on ne dispose pas de Windows 10 Pro et Hyper-V, on pourrait aussi simplement utiliser VirtualBox, compatible avec Vagrant.
Pour information, Vagrant est plutôt destiné à des environnement hors production, comme pour du développement ou des tests.
Installer Vagrant
Tout d’abord il faudra installer Vagrant pour votre OS, et en l’occurrence, pour Windows dans notre cas.
Activer Hyper-V
Bien sûr il faut s’assurer que Hyper-V est activé dans Windows. On pourra utiliser la commande suivante avec PowerShell :
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Sinon on peut aussi l’activer via le menu Programmes et fonctionnalités, comme suit :
Fichier Vagrantfile
Le fichier Vagrantfile va permettre de décrire en lignes de code la machine que l’on veut créer, en essayant de garder une certaine portabilité entre les différentes plateformes.
On trouvera notamment le paramètre config.vm.box, indiquant à partir de quelle box ou image on veut créer notre VM. Un catalogue de box est disponible ici : https://app.vagrantup.com/boxes/search.
Dans notre cas, on va choisir generic/ubuntu2004, qui est compatible Hyper-V.
Exemple de script Vagrantfile :
Partage de fichiers
Cela pourra être pratique de mettre en place un partage de fichier entre l’hôte et la VM invitée, bien que ce ne soit pas obligatoire. C’est l’objet de la propriété :
config.vm.synced_folder "../data-test", "/vagrant_data"
Dans ce cas il faudra s’authentifier pour mettre en place le partage SMB.
Une fois dans la VM, on pourra voir ce dossier partagé dans la liste des mounts, et accéder au chemin /vagrant_data.
Exécution du script
On va maintenant demander à Vagrant de créer une VM correspondant au Vagrantfile. Pour ce faire, se placer dans le répertoire contenant le fichier Vagrantfile et lancer :
vagrant up --provider hyperv
Attention, si on ne spécifie pas le provider, par défaut Vagrant va essayer de créer une VM avec VirtualBox. Voir : https://www.vagrantup.com/docs/providers/default.
Lister les box Vagrant
Si la VM a bien été créée, une box a normalement été téléchargée. On peut vérifier çà avec cette commande :
vagrant box list
Vérification
On peut vérifier le statut de la VM (running si tout va bien) avec la commande suivante :
vagrant status
Il existe une commande globale pour lister toutes les VMs, que l’on peut exécuter de n’importe quel endroit :
vagrant global-status
Accéder à la VM
Il est maintenant possible d’accéder à la VM via SSH. Vous pouvez par exemple utiliser PuTTY. Vagrant propose aussi une commande pour cela :
vagrant ssh
A la création de la VM, Vagrant a créé une configuration SSH. On peut consulter ces infos (adresse IP, username, clé privée) avec la commande :
vagrant ssh-config
Arrêter la VM
On peut suspendre la VM avec la commande :
vagrant suspend
Détruire la VM
Si vous n’en avez plus besoin, vous pouvez aussi supprimer une VM :
vagrant destroy
Besoin de configurer un proxy ?
Allez voir cette réponse à la question How to use vagrant in a proxy environment?
C’est le plugin vagrant-proxyconf qui sera utilisé dans ce cas, et qui devra auparavant avoir été installé comme suit :
vagrant plugin install vagrant-proxyconf
Il faudra simplement penser à définir les variables d’environnement VAGRANT_HTTP_PROXY, VAGRANT_HTTPS_PROXY, voire VAGRANT_NO_PROXY. Comme précisé dans la réponse plus haut, les variables http_proxy et https_proxy sont nécessaires pour pouvoir télécharger la box sur internet.
La bonne nouvelle c’est que ce plugin permet non seulement de télécharger la box Vagrant nécessaire pour initialiser la VM, mais aussi de configurer le proxy de différents programmes.
Par exemple pour Apt c’est ce plugin qui va configurer le fichier /etc/apt/apt.conf.d/01proxy. Donc plus besoin de suivre cette manip : Configure proxy for APT.
Références externes
- Vagrant Documentation
- Vagrant Get Started + tutorials
- Quelques plugins Vagrant
- 10 Best Infrastructure as Code (IaC) Tools to Boost Your Productivity
- Learning to Use Vagrant on Windows 10 (docs.microsoft.com) ⭐
- Infrastructure as code 🇫🇷