Introduction
Vagrant est un outil d’automatisation de déploiement de machines virtuelles. Il permet de déployer des environnements complets de manière automatisé en créant des machines virtuelles (sur Virtualbox par exemple).
Pour déployer des machines virtuelles, Vagrant utilise des Box à savoir des modèles de machines virtuelles. Une multitude de Box sont disponibles en ligne mais nous sommes nombreux à être méfiant quant à l’utilisation de « boîte noire » comme modèle pour nos déploiements. Je vous propose donc ici de voir, comment en 5 minutes nous allons pouvoir exploiter la puissance de Vagrant en partant d’une machine virtuelle installée à la main par nos soins.
Prérequis
Pour commencer, vous allez avoir besoin de Vagrant (https://www.vagrantup.com/downloads.html) et d’un hyperviseur, dans notre cas, nous utiliserons Virtualbox, vous devez donc l’installer (https://www.virtualbox.org/).
Vous devez ensuite créer une machine virtuelle et installer Debian 10 dessus.(https://www.debian.org/distrib/). Je ne détaille pas ici les étapes d’installation car il y a plusieurs manières de procéder et l’idée de l’article est que vous fassiez un modèle spécifique à vos besoins.
Préparation de la VM de base
Afin de créer sa propre Box, il convient de faire quelques adaptations à notre VM pour l’interfacer avec les commandes Vagrant.
Avant de démarrer la VM, vous pouvez désactiver les contrôleurs que vous n’utiliserez pas dans vos déploiements comme le contrôleur USB et le son.
Le reste des adaptations se fait en SSH sur la VM.
Installation des Additions invité VirtualBox
Dans l’interface de Virtualbox, ajouter le CD pour l’installation des Additions invité, dans le menu du haut : Périphériques > Insérer l’image CD des Additions invité..
Puis dans la machine virtuelle :
sudo apt-get install linux-headers-$(uname -r) build-essential dkms
sudo mount /dev/cdrom /media/cdrom
sudo sh /media/cdrom/VBoxLinuxAdditions.run
Contexte utilisateur
Créer un user vagrant :
useradd -m -s /bin/bash vagrant
passwd vagrant
Par convention, il convient de mettre le mot de passe vagrant
pour le user vagrant
et pour root
.
Afin d’utiliser la commande vagrant ssh
, il convient de mettre la clé publique de Vagrant dans les clés autorisées:
mkdir /home/vagrant/.ssh
wget -O /home/vagrant/.ssh/authorized_keys https://github.com/hashicorp/vagrant/raw/master/keys/vagrant.pub
chown -R vagrant:vagrant /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
chmod 600 /home/vagrant/.ssh/authorized_keys
Comme la VM n’aura pas forcément une configuration réseau lui permettant d’accéder à Internet, il convient de désactiver l’usage du DNS dans l’agent SSH pour éviter une lenteur à la connexion :
sudo sed -i '/UseDNS/c\UseDNS no' /etc/ssh/sshd_config
Dans la pratique avec Vagrant, il faut pouvoir se connecter avec l’utilisateur vagrant
et passer des commandes `root` sans saisir de mot de passe, nous installons donc sudo
apt install sudo
visudo
# ajouter la ligne : vagrant ALL=(ALL) NOPASSWD: ALL
Vous pouvez ici en profiter pour glisser vos outils préférés ;
apt install htop vim ccze
Arrêt de la machine
Vider le cache `APT` (pour gagner quelques Mo) et l’historique, et arrêter la machine proprement :
apt clean
history -c
halt
Une fois que l’écran est noir, vous pouvez fermer la fenêtre Virtualbox.
Packaging de la Box Vagrant
Maintenant que notre machine virtuelle est prête à être déployée, nous pouvons la packager avec les commandes Vagrant
:
vagrant package --base Debian10ForVagrant --output Debian10VagrantBox.box
La box est maintenant prête et nous pouvons utiliser le .box
pour rendre notre nouvelle Box utilisable sur l’installation Vagrant que l’on veut.
Importer la box pour l’utiliser :
vagrant box add --name Debian10 Debian10VagrantBox.box
Utilisation de notre box Vagrant
La box est maintenant disponible et nous pouvons créer des machines virtuelles avec cette nouvelle base :
mkdir testdebianbox
cd testdebianbox
vagrant init Debian10
vagrant up
Note : La commande vagrant init
prend en argument le nom de la box à utiliser. Le nom de la machine virtuelle sera déterminé par le nom du répertoire où se situe le fichier `Vagrantfile` (ici « testdebianbox »).
Testons ensuite l’accès SSH, aucun mot de passe ne doit nous être demandé et nous pouvons passer des commandes sudo
et toujours sans mot de passe :
vagrant ssh
Conclusion
Les Box Vagrant proposées sur Internet sont très pratique mais au final, mieux vaut prendre 30 minutes pour se faire sa propre Box et ainsi garder la maîtrise sur ses environnements. Même si cette Box peut s’avérer un peu plus grosse, elle sera probablement plus proche de vos environnements de production.
Sources