VagrantLa virtualisation facilite considérablement la tâche lorsqu’on a besoin d’une ou plusieurs machines de test pour les travaux pratiques lors d’une formation. Il n’en demeure pas moins que l’installation et la configuration post-installation dune machine virtuelle reste une activité relativement chronophage. Pour installer une machine virtuelle basée sur une distribution Linux minimale, il faut à chaque fois récupérer le fichier ISO de l’installateur, créer et configurer une machine virtuelle et suivre toutes les étapes du programme d’installation.

C’est là où Vagrant entre en jeu. Vagrant est une surcouche en ligne de commande à toute une panoplie d’hyperviseurs comme VirtualBox, VMWare, HyperV, Parallels et KVM. Le grand avantage de Vagrant, c’est qu’il permet la mise en place d’une machine virtuelle « jetable » en moins de deux minutes chrono.

AstuceEn temps normal, Vagrant s’utilise plutôt avec VirtualBox, mais il est tout à fait possible de remplacer cet hyperviseur par KVM. C’est d’ailleurs ce que nous allons faire, étant donné que les performances seront bien meilleures et que nous nous affranchissons des idiosyncrasies et autres limitations de VirtualBox.

Prérequis

  • L’hyperviseur KVM doit être installé. C’est ce que nous avons abordé en détail dans notre précédent article.
  • L’utilisateur « commun mortel » doit faire partie du groupe système libvirt.

Installation de Vagrant

Vagrant est fourni par le dépôt tiers de Hashicorp. Créez le fichier /etc/yum.repos.d/hashicorp.repo comme ceci :

# /etc/yum.repos.d/hashicorp.repo

[hashicorp]
name=Hashicorp
baseurl=https://rpm.releases.hashicorp.com/RHEL/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://rpm.releases.hashicorp.com/gpg

Si vous avez installé Rocky Linux en utilisant mon script de configuration automatique, le dépôt Hashicorp est déjà préconfiguré et prêt à l’emploi. Malheureusement, la dernière version en date de Vagrant ne fonctionne pas, étant donné qu’elle ne permet pas de construire le plugin vagrant-libvirt. La solution la plus viable consiste ici à installer la dernière version de la branche 2.2 :

# dnf --showduplicates list vagrant
...
Available Packages
vagrant.x86_64   2.2.9-1    hashicorp
vagrant.x86_64   2.2.10-1   hashicorp
vagrant.x86_64   2.2.10-2   hashicorp
vagrant.x86_64   2.2.10-3   hashicorp
vagrant.x86_64   2.2.10-4   hashicorp
vagrant.x86_64   2.2.11-1   hashicorp
vagrant.x86_64   2.2.12-1   hashicorp
vagrant.x86_64   2.2.13-1   hashicorp
vagrant.x86_64   2.2.14-1   hashicorp
vagrant.x86_64   2.2.15-1   hashicorp
vagrant.x86_64   2.2.16-1   hashicorp
vagrant.x86_64   2.2.17-1   hashicorp
vagrant.x86_64   2.2.18-1   hashicorp
vagrant.x86_64   2.2.19-1   hashicorp
vagrant.x86_64   2.3.0-1    hashicorp
vagrant.x86_64   2.3.1-1    hashicorp
vagrant.x86_64   2.3.2-1    hashicorp
vagrant.x86_64   2.3.3-1    hashicorp
vagrant.x86_64   2.3.4-1    hashicorp
vagrant.x86_64   2.3.6-1    hashicorp
# dnf install -y vagrant-2.2.19-1

Il faudra également songer à empêcher la mise à jour automatique du paquet vagrant dans la configuration du gestionnaire de paquets :

# /etc/yum.conf
...
exclude=vagrant

Installation du plug-in pour KVM

À partir de là, les choses se compliquent un tout petit peu, étant donné qu’il y a un souci d’incompatibilité entre les bibliothèques embarquées dans Vagrant et celles du système. La solution (décrite en détail dans le blog d’Oracle Linux) consiste ici à mettre à jour les deux bibliothèques embarquées qui posent problème pour ensuite installer le plug-in.

AstuceLe blog d’Oracle Linux propose un script shell pour automatiser la reconstruction des bibliothèques. Il contient quelques incohérences et ne fonctionne pas en l’état. À mon humble avis, il vaut mieux faire fi de l’automatisation et procéder manuellement en vérifiant systématiquement le retour de chaque étape.

Installez tout d’abord quelques outils de développement :

# dnf group install -y "Development Tools"
# dnf install -y libxslt-devel libxml2-devel libvirt-devel \
  libguestfs-tools-c ruby-devel cmake

Les dépôts source de Rocky Linux doivent être activés :

# /etc/yum.repos.d/Rocky-Sources.repo

[baseos-source]
name=BaseOS Source
baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/source/tree/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

[appstream-source]
name=AppStream Source
baseurl=http://dl.rockylinux.org/$contentdir/$releasever/AppStream/source/tree/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

Créez un répertoire ~/vagrant-build qui sera utilisé pour la compilation des bibliothèques :

$ mkdir ~/vagrant-build
$ cd ~/vagrant-build/

Téléchargez les sources des paquets krb5-libs et libssh :

$ dnf download --source krb5-libs libssh
...
(1/2): libssh-0.9.6-3.el8.src.rpm  3.3 MB/s | 1.0 MB     00:00    
(2/2): krb5-1.18.2-21.el8.src.rpm  2.0 MB/s | 9.8 MB     00:04
$ ls
krb5-1.18.2-21.el8.src.rpm  libssh-0.9.6-3.el8.src.rpm

Dans un premier temps, compilez et remplacez la bibliothèque krb5 :

$ rpm2cpio krb5-*.src.rpm | cpio -idmv krb5-*.tar.gz
$ tar -xzf krb5-*.tar.gz
$ pushd krb5-*/src/
$ ./configure
$ make
$ sudo cp -a lib/crypto/libk5crypto.so.3* /opt/vagrant/embedded/lib64/
$ popd

Procédez de même pour libssh :

$ rpm2cpio libssh-*.src.rpm | cpio -imdv  libssh-*.tar.xz
$ tar -xJf libssh-*.tar.xz
$ mkdir build
$ pushd build/
$ cmake ../libssh-*  -DOPENSSL_ROOT_DIR=/opt/vagrant/embedded
$ make
$ sudo cp lib/libssh* /opt/vagrant/embedded/lib64/
$ popd

Maintenant que les bibliothèques embarquées de Vagrant sont à jour, nous pouvons installer le plug-in vagrant-libvirt pour permettre à Vagrant d’interagir avec l’hyperviseur KVM :

$ vagrant plugin install vagrant-libvirt
Installing the 'vagrant-libvirt' plugin. This can take a few minutes...
Fetching ruby-libvirt-0.8.0.gem
Building native extensions. This could take a while...
Fetching nokogiri-1.13.9-x86_64-linux.gem
Fetching formatador-1.1.0.gem
Fetching fog-core-2.3.0.gem
Fetching fog-xml-0.1.4.gem
Fetching fog-json-1.2.0.gem
Fetching fog-libvirt-0.9.0.gem
Fetching xml-simple-1.1.9.gem
Fetching diffy-3.4.2.gem
Fetching vagrant-libvirt-0.10.8.gem
Installed the plugin 'vagrant-libvirt (0.10.8)'!

Vérifiez si le plug-in s’affiche bien :

$ vagrant plugin list
vagrant-libvirt (0.10.8, global)

Avant d’aller plus loin, faites un brin de ménage :

$ cd
$ rm -rf vagrant-build/

Configuration initiale

Comme nous l’avons dit un peu plus haut, Vagrant gère toute une panoplie d’hyperviseurs divers et variés. Nous pouvons lui indiquer que c’est KVM (libvirt) que nous souhaitons utiliser. Pour ce faire, nous pouvons renseigner la variable VAGRANT_DEFAULT_PROVIDER dans ~/.bashrc :

VAGRANT_DEFAULT_PROVIDER=libvirt
export VAGRANT_DEFAULT_PROVIDER

Si vous êtes un adepte de la complétion automatique, vous pourrez l’utiliser avec Vagrant. Il suffit de l’activer en ajoutant la ligne suivante à ~/.bashrc :

source $(find /opt/vagrant -name completion.sh)

Et maintenant ?

La prise en main de Vagrant et son utilisation au quotidien feront l’objet de notre prochain article.


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.

 


0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *