VagrantDans 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

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

ImportantDans 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.

 

Vagrant

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é.

InfoL’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.

    $ vagrant ssh
    

    Pas de mot de passe.

Les commentaires sont fermés.