Dans mon quotidien de formateur, j’ai besoin assez régulièrement de machines de test pour mes travaux pratiques. Dans le bon vieux temps, mes stagiaires installaient Slackware ou Debian sur un vieux coucou relégué à la casse. Par la suite, VirtualBox nous a considérablement facilité la tâche. Les étudiants avaient tous une quantité de machines virtuelles sur leurs portables, et je n’étais plus obligé de me trimballer avec des serveurs déstockés sous le bras. La seule difficulté qui restait, c’était de récupérer les ISO et d’installer les systèmes respectifs pour les cloner ensuite, ce qui prenait quand-même pas mal de temps.
- Présentation
- Prérequis
- Installation
- Configuration
- Premier test
- Installer trois OS en deux minutes
- Trouver des machines
- Gérer les répertoires partagés
- Conclusion
Présentation
Vagrant est un outil qui va plus loin dans la simplification de toutes ces tâches. C’est une surcouche en ligne de commande à toute une panoplie de virtualiseurs comme HyperV, Libvirt, Parallels, VMWare et VirtualBox. Concrètement, si j’ai besoin rapidement de trois machines virtuelles « jetables » tournant respectivement sous CentOS, Debian et Ubuntu, Vagrant me permet de les mettre en place en moins de deux minutes montre en main. C’est d’ailleurs ce que je me propose de vous montrer ici.
Prérequis
Ma station de travail et mon vieux MacBook tournent sous OpenSUSE Leap 15.1. Avant d’installer Vagrant à proprement parler, il me faut choisir un système de virtualisation. J’opte pour VirtualBox, parce que c’est ce que mes stagiaires utilisent sur leurs portables tournant sous Windows 10 ou Mac OS.
Installation
La version de Vagrant fournie par les dépôts officiels de la distribution n’est pas à jour et comporte quelques incohérences. La solution à ce problème consiste à configurer le dépôt tiers qui fournit la dernière version de Vagrant.
# zypper install --no-recommends vagrant
Dans ma configuration, le dépôt tiers est configuré de façon prioritaire par rapport aux dépôts officiels. Le cas échéant, il faudra utiliser l’option --allow-vendor-change
.
Configuration
En temps normal, Vagrant est immédiatement utilisable sans la moindre configuration initiale. Dans certains cas de figure – par exemple si l’on dispose de plusieurs virtualiseurs sur la même machine – il faut explicitement définir celui par lequel on souhaite passer. Il suffit alors de définir une variable d’environnement VAGRANT_DEFAULT_PROVIDER
dans ~/.bashrc
ou ~/.alias
comme ceci.
# ~/.alias ... # Vagrant VAGRANT_DEFAULT_PROVIDER=virtualbox export VAGRANT_DEFAULT_PROVIDER
Premier test
Je ne dispose pas encore de systèmes installables sur ma machine.
$ vagrant box list There are no installed boxes! Use `vagrant box add` to add some.
Pour commencer, je vais installer une image d’Alpine Linux, un système léger dont la taille réduite permet un téléchargement rapide.
$ vagrant box add generic/alpine38 ==> box: Loading metadata for box 'generic/alpine38' box: URL: https://vagrantcloud.com/generic/alpine38
Les images diffèrent selon le système de virtualisation utilisé. Je récupère l’image pour VirtualBox.
This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) hyperv 2) libvirt 3) parallels 4) virtualbox 5) vmware_desktop Enter your choice: 4
Je crée une arborescence de test dans mon répertoire utilisateur.
$ mkdir -p ~/Vagrant/Alpine $ cd ~/Vagrant/Alpine
J’initialise mon système Alpine Linux.
$ vagrant init generic/alpine38 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
La dernière commande a généré un fichier Vagrantfile
dans mon répertoire ~/Vagrant/Alpine
. Pour l’instant, ce fichier est constitué majoritairement d’options commentées. Je peux l’éditer et le simplifier comme ceci.
Vagrant.configure("2") do |config| config.vm.box = "generic/alpine38" end
Je lance ma machine virtuelle.
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'generic/alpine38'...
==> default: Matching MAC address for NAT networking...
...
Une fois qu’elle a démarré, je peux ouvrir une session SSH comme ceci.
[kikinovak@macbook:Alpine] $ vagrant ssh alpine38:~$
Dans cette machine virtuelle, je suis l’utilisateur vagrant
.
alpine38:~$ whoami vagrant
À partir de là, je peux invoquer sudo
pour les tâches administratives courantes.
alpine38:~$ sudo passwd root Changing password for root New password: Retype password: passwd: password for root changed by root
Je quitte ma machine virtuelle comme n’importe quelle session SSH.
alpine38:~$ exit logout Connection to 127.0.0.1 closed.
Il ne me reste plus qu’à arrêter la machine virtuelle.
$ vagrant halt ==> default: Attempting graceful shutdown of VM...
Si je n’ai plus besoin de cette machine, je peux la supprimer.
$ vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Destroying VM and associated drives...
Et si je n’ai pas l’intention de travailler avec Alpine Linux, je peux même supprimer l’image correspondante de mon système.
$ vagrant box remove generic/alpine38 Removing box 'generic/alpine38' (v1.9.38) with provider 'virtualbox'...
Installer trois OS en deux minutes
Voici un exemple concret de mon quotidien de formateur. J’ai besoin de montrer le fonctionnement d’une commande sous CentOS, Debian et Ubuntu. Pour commencer, je récupère les images des trois systèmes.
$ vagrant box add generic/centos7 $ vagrant box add generic/debian10 $ vagrant box add generic/ubuntu1804
Je crée un répertoire pour chacun des systèmes virtualisés.
$ mkdir ~/Vagrant/{CentOS,Debian,Ubuntu}
J’initialise CentOS.
$ cd ~/Vagrant/CentOS/ $ vagrant init generic/centos7
J’édite éventuellement le fichier Vagrantfile
pour le rendre plus lisible.
Vagrant.configure("2") do |config| config.vm.box = "generic/centos7" end
Je procède de même pour les machines virtuelles sous Debian et Ubuntu. Et c’est tout.
Trouver des machines
Le site de Vagrant permet de rechercher et d’essayer un nombre assez conséquent de machines virtuelles. Cliquez sur le bouton Find Boxes sur la page d’accueil du projet et cherchez le ou les systèmes dont vous avez besoin pour vos tests.
Gérer les répertoires partagés
Dans la configuration par défaut, le système hôte et le système invité partagent un répertoire à la manière d’un vase communicant.
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ... ==> default: Mounting shared folders... default: /vagrant => /home/kikinovak/Vagrant/bash ... $ vagrant ssh Last login: Sun Nov 3 02:20:27 2019 from 10.0.2.2 $ echo "Ceci est un fichier partagé." > /vagrant/partage $ exit déconnexion Connection to 127.0.0.1 closed. $ cat partage Ceci est un fichier partagé.
L’accès à cette fonctionnalité est affiché au démarrage de la machine virtuelle. Elle dépend de la configuration correcte des Additions Invité (Guest Additions) de VirtualBox.
Conclusion
J’ai découvert Vagrant il y a quelques mois, et je l’ai définitivement adopté pour mon travail au quotidien. Je commence tout juste à découvrir ses fonctionnalités plus poussées, mais même avec une poignée de commandes de base, on se facilite considérablement le maniement des machines virtuelles au quotidien.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
2 commentaires
Thévin · 11 août 2020 à 14 h 31 min
Merci pour tous ces partages !
Juste une remarque, lors de la connexion en ssh, il faut saisir un mot de passe qui est vagrant par défaut.
kikinovak · 11 août 2020 à 15 h 05 min
Oui mais non.
Pas de mot de passe.
Les commentaires sont fermés.