VM Linux sur Windows 10 : Vagrant & Ansible
Maj: nouvelle version en utilisant vagrant en lieu et place multipass
Après des heures de tests avec la version 2 de WSL, j’ai failli renoncer à garder ma machine sous Windows 10 et à la passer sous Linux. Mais voilà, je me suis souvenu du projet Multipass de Canonical et là tout est redevenu simple.
Canonical ne se limite pas à délivrer Ubuntu, mais propose aussi tout un écosystème complet d’outils. Parmi eux on trouve Multipass qui facilite la gestion de VM Ubuntu depuis n’importe quelle plateforme Linux, MacOs et Windows.
Je vous propose dans ce tutoriel de mettre en place un environnement de Dévoleppoment avec Multipass hébergé dans l’hyperviseur hyperv de Microsoft. Cet VM de Dev doit pouvoir héberger des VM provisionner avec Vagrant et Ansible, mais aussi des containers Docker. Pour des raisons de performances j’ai choisi de prendre kvm comme hyperviseur dans ma VM.
Cet environnement doit être simple à mettre en œuvre et surtout rapide.
Installation des produits nécessaires : hyperv, cifs et multipass
J’ai fait le choix d’hyperv car il est tout intégré dans Windows 10, mais vous pouvez également utiliser VirtualBox.
Prérequis :
- Windows 10 Entreprise, Professionnel ou Éducation
- Processeur 64 bits avec traduction d’adresse de second niveau (SLAT).
- Processeur prenant en charge les extensions de mode du moniteur de machine virtuelle (VT-c sur les processeurs Intel).
- Au minimum 4 Go de mémoire.
Activation d’hyper-v et SMB/CIFS
Dans un premier temps il faut activer hyper-v et le partage SMB/CIFS sur votre poste Windows. Dans une fenêtre Powershell ouverte en tant qu’administrateur, taper les commandes suivantes
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -AllEnable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
Installation de Multipass
Vous pouvez télécharger la dernière version de Multipass sur la page du projet github de multipass
Création de la première VM
Normalement Multipass devrait avoir provisionner une VM répondant au nom de primary. On va de suite la détruire car trop petite. Dans une fenêtre de commande :
multipass delete primarymultipass purgemultipass set client.primary-name=dev
La dernière commande permet de définir le nom de la vm par défaut de multipass.
Pour créer ma VM de dev je vais utiliser cloud-init pour la configurer rapidement. Cela permettra aussi de la détruire et la reconstruire en peu de temps.
Il faut avant génerer une clé SSH qui servira à se connecter à la machine rapidement depuis visual studio code. Toujours dans votre fenêtre de commande tapez :
ssh-keygen -t ed25519
Acceptez les valeurs par défaut. Afficher le contenu du fichier .ssh/id_ed25519.pub il va vous servir à l’étape suivante. Maintenant, créez dans votre répertoire de travail un fichier yaml se nommant cloud-init.yaml et déposez y le contenu suivant et remplacer la 3ème ligne avec le contenu du fichier précédent (gardez bien le tiret):
# cloud configssh_authorized_keys: - ssh-ed25519 AASSS ... ffdfdfdf steph@Steph-pc
package_update: trueapt_upgrade: true
packages: - git - vim - wget - curl - jq - vagrant - python3-pip - build-essential - make - software-properties-common - htop - libsqlite3-dev - libc6-dev - libgdbm-dev - libssl-dev - libreadline-dev - libncursesw5-dev - libmysqlclient-dev - python3-pip - python3-virtualenv - libvirt-dev - ruby-all-dev - apparmor-utils - qemu - libvirt-daemon-system - libvirt-clients - libxslt-dev - libxml2-dev - libvirt-dev - zlib1g-dev - ruby-dev - ruby-libvirt - ebtables - dnsmasq-base - docker.ioruncmd: - [apt, dist-upgrade, -yy] - [apt, clean, -yy] - [apt, autoremove, -yy] - [pip3, install, ansible==2.9.15, ansible-lint] - [vagrant, plugin, install, vagrant-kvm] - [usermod, -a, -g, docker, ubuntu] - [usermod, -a, -g, libvirt, ubuntu]
Ce fichier permet de :
- mettre à jour la vm Linux;
- d’installer plein de produits dont python, docker, vagrant et tout ce qu’il faut pour le développement d’applications en Python. A vous de le compléter à vos besoins.
- de lancer des commandes de configuration pour installer ansible, le plugin libvirt pour vagrant et de donner les droits au user ubuntu de lancer des commandes docker.
Maintenant lançons le provisionnement de la VM en modifiant le chemin du fichier cloud-init.yaml :
multipass launch groovy -n dev -c 4 -m 10G -d 20G --cloud-init c:\Projets\cloud-init.yaml
Patience … Cela dure quelques minutes le temps de tout installer et configurer.
Cette VM possède :
- une distribution Ubuntu groovy (vous pouvez en prendre une autre: multipass list)
- 4 CPU (-c)
- 10G de mémoire (-m)
- un disque de 20G (-d)
Activation de la virtualisation imbrigué sur notre VM
La virtualisation imbriquée est une fonctionnalité qui vous permet d’exécuter de créer des VMS dans une VM.
Pour cela il faut dans un premier temps arrêter la VM :
multipass stop dev
Dans une fenêtre PowerSell ouverte en tant qu’administrateur :
Set-VMProcessor -VMName dev -ExposeVirtualizationExtensions $True
Maintenant redémarrer votre VM et connectez vous y :
multipass start devmultipass shell dev
Vous devriez obtenir une invit de commande ubuntu@dev. Vérifions que kvm fonctionne :
root@dev:/home/ubuntu# kvm-ok
Vous devriez obtenir ceci :
INFO: /dev/kvm existsKVM acceleration can be used
Création de VM avec vagrant
Toujours dans votre VM dev tapez les commandes suivantes, au moment du choix d’hyperviseur prenez bien libvirt :
vagrant box add centos/7vagrant init centos/7vagrant up --provider libvirt
Au bout de quelques minutes vous devriez pouvoir vous connecter à votre VM dans la VM:
vagrant sshyum update
Et voila.
Accès à votre VM depuis visual code (installé sur Windows)
On va tout simplement utiliser l’extension Remote SSH. Installer la. Pour configurer l’accès il faut juste récupérer le nom de la vm dans le fichier C:\Windows\System32\drivers\etc\hosts.ics Moi j’avais dev.mshome.net Je vous conseille bien de mettre ce nom que plutôt ce nom qu’une adresse IP. Et oui si vous détruisez et reconstruisez votre VM elle n’aura pas la même adresse IP.
Je vous laisse lire ce tuto pour utiliser cette extension.
Et voila un vrai bonheur. Finis les galères avec WSL.