### Gwendal Margely
# TP n°1 – Premier pas avec Vagrant
## Table des matières
1. Vérification de l’environnement
2. Un premier exemple
3. Configuration des ressources
4. Préconfigurer la VM : le provisionnement
4.1. Provisionnement simple
4.2. Un peu plus complexe
4.3. Accès aux fichiers locaux
5. Nettoyage
## 1. Vérification de l’environnement
Avant de pouvoir utiliser Vagrant, vous devez vérifier que l’environnement est correctement configuré pour le fonctionnement sur les machines de l’IUT (de TP ou dattier)
Observer la valeur des variables d’environnement VAGRANT_DEFAULT_PROVIDER et VAGRANT_HOME
``` bash
echo $VAGRANT_DEFAULT_PROVIDER
echo $VAGRANT_HOME
```
Vérifier que ces valeurs sont, respectivement, virtualbox et /usr/local/virtual_machine/infoetu/VOTRE_LOGIN/vagrant_home
Si ce n’est pas le cas, assurez vous de charger le fichier /home/public/vm/vagrant.env dans votre .bashrc (à l’aide de la commande source) et rechargez votre fichier .bashrc (avec la commande source ou en redémarrant votre terminal)
## 2. Un premier exemple
Maintenant que l’environnement Vagrant est configuré, nous allons créer une première machine virtuelle avec vagrant.
À l’aide de la documentation de la commande vagrant trouver les lignes de commande permettant :
* d’initialiser le répertoire courant avec un fichier Vagrantfile qui utilise la box debian/bookworm64 ;
``` bash
vagrant init debian/bookworm64
```
* de créer, et démarrer, la machine virtuelle décrite dans le fichier Vagrantfile ;
``` bash
vagrant up
```
* de se connecter à cette dernière ;
``` bash
vagrant ssh
```
* de la détruire.
``` bash
vagrant destroy
```
## 3. Configuration des ressources
À l’aide de la documentation de référence effectuer les modifications du fichier Vagrantfile de façon à ce que votre machine virtuelle :
* ait 2048M de mémoire vive
* ait 2 processeurs virtuels
``` ruby
# déduit de tous les commentaires autogénérés dans le Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
end
```
## 4. Préconfigurer la VM : le provisionnement
### 4.1. Provisionnement simple
Le provisonnement (provisioning) consiste à effectuer de façon automatique des étapes d’installation ou de configuration de la machine virtuelle avant son utilisation.
Vagrant permet de décrire ce provisionnement sous la forme de copie de fichier locaux vers la VM ou d’exécution de lignes de commande.
Toujours à l’aide de la documentation de référence, modifier votre Vagrantfile de façon à installer les paquets: *vim*, *net-tools* et *dnsutils*
``` ruby
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y vim net-tools dnsutils
SHELL
```
### 4.2. Un peu plus complexe
Nous voulons maintenant créer une machine virtuelle permettant l’utilisation de docker.
Dans Debian bookworm (la version stable de 2023), le paquet docker.io permet d’installer une version raisonnablement à jour de docker. De même, le paquet docker-compose permet d’installer la commande docker-compose.
Écrire un Vagrantfile qui permet la création d’une machine virtuelle permettant l’utilisation de docker. Vous devrez modifier le provisionnement de la VM pour :
* Installer docker.io et docker-compose
* ajouter l’utilisateur vagrant au groupe docker
* configurer le daemon docker de façon à ce qu’il utilise le miroir de l’IUT du registre docker et que les réseaux docker n’entrent pas en conflit avec les réseaux de l’IUT.
Les informations nécessaires vous avaient été données dans le module r4.08, mais les voici à nouveau. Vous devez créer un fichier /etc/docker/daemon.json contenant:
``` json
{
"registry-mirrors": ["http://172.18.48.9:5000"],
"default-address-pools":
[
{"base":"172.20.0.0/16","size":24}
]
}
```
### 4.3. Accès aux fichiers locaux
Modifier enfin votre Vagrantfile pour que votre dossier $HOME soit disponible dans la VM dans le répertoire /iut_home
### Fichiers finaux :
*Vagrantfile*
``` ruby
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
config.vm.provision "shell", path: "provision.sh"
config.vm.synced_folder "~/", "/iut_home"
end
```
*provision.sh*
``` bash
#!/usr/bin/env bash
apt-get update
apt-get install -y docker.io docker-compose
usermod -aG docker vagrant
mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["http://172.18.48.9:5000"],
"default-address-pools":
[
{"base":"172.20.0.0/16","size":24}
]
}
EOF
systemctl restart docker
```
## 5. Nettoyage
À la fin du TP, n’oubliez pas d’arrêter vos machines virtuelles (vagrant halt), voire de les supprimer (vagrant destroy)
``` bash
vagrant halt
```
``` bash
vagrant destroy
```