# Vagrant sur Raspberry pi
{{INLINETOC}}
**Vagrant** est un logiciel libre et open-source pour la création et la configuration des environnements de développement virtuel.
Depuis la version 1.63,4, **Vagrant** fournit un support natif des conteneurs Docker à l'exécution, au lieu d'un système d'exploitation entièrement virtualisé. Cela permet de réduire les frais généraux puisque Docker utilise des conteneurs Linux légers.
Depuis la version 1.1, **Vagrant** n'impose plus VirtualBox, mais fonctionne également avec d'autres logiciels de virtualisation tels que KVM/libvirt.
Afin de permettre à **Vagrant** de contrôler et de pourvoir les machines à l'aide de Libvirt il faut installer :
- Le fournisseur de service cloud: **fog**
- Le greffon ajoutant un fournisseur Libvirt à Vagrant: **Vagrant-libvirt**
# Préparation de Raspbian
Télécharger puis graver une image **Raspbian** sur une carte SD en utilisant l'une des méthodes décrites [[prive:rpi-patch|ici]] pour graver l'image sur la carte SD.
Afin de permettre la construction (build) de **fog** installer **libxml2-devel** et **libcurl-devel**
```
apt-get install libxml2-dev libcurl-dev ruby -y
```
# Installation de FOG
**Fog** est la bibliothèque de services cloud de Ruby.
* Les collections fournissent une interface simplifiée, permettant le travail et la manipulation dans le cloud.
* Les requêtes permettent aux utilisateurs expérimentés de tirer le meilleur parti des fonctionnalités de chaque cloud.
* Les mocks (objets simulés qui reproduisent le comportement d'objets réels) permettent de tester le comportement d'objets réel.
Pour une intégration avec **chef**, l'installation doit être opérée dans l'environnement **ruby** embarqué dans **chef**. Pour cela basculer l'environnement de ruby, avec la commande suivante:\\ \\ `eval "$(chef shell-init bash)"`
## Installer fog-core
**Fog-core** nécessite Ruby 2.0.0 ou une version ultérieure.
La prise en charge de **Ruby 1.8** et **1.9** a été abandonnée dans **fog-v2.0.0** en tant que modification rétrocompatible. Il faut utiliser les dernières versions de **fog 1.x** lorsqu'on a besoin du support **1.8.7** ou **1.9.x**.
Afin de satisfaire les dépendances installer les versions 2.1 e 1.45.0 de fog-core
```
gem install fog-core -v 2.1
gem install fog-core -v 1.45.0
```
## Installer fog
```
gem install fog
```
# Installation et configuration de vagrant
Les plugins **Vagrant** sont configurés en fonction de l'environnement **Ruby** actuel. Si les plugins sont installés à l'aide de **Vagrant** à partir de la source, ils ne fonctionneront pas à partir de l'installation de **Vagrant** basée sur le package.
## Installation de vagrant depuis les dépôts
```
apt install vagrant
```
## Installation de Vagrant à partir de la source
Il faut avoir un Ruby moderne pour développer et construire **Vagrant**. La version spécifique de Ruby est documentée dans la gemspec de Vagrant.
Il est conseillé de ne pas utiliser le **Ruby** du système - utiliser un gestionnaire de version **Ruby** comme **rvm** ou **chruby**.
Cloner le référentiel de **Vagrant** de GitHub dans un répertoire spécifique:
```
git clone https://github.com/hashicorp/vagrant.git
```
Ensuite, cd dans ce chemin. Toutes les commandes seront exécutées à partir de ce chemin :
```
cd /chemin/vers/vagrant/clone
```
Exécuter la commande **bundle** pour installer la configuration requise :
```
bundle install
```
On peut maintenant exécuter **Vagrant** en exécutant `bundle exec vagrant` depuis ce répertoire.
Pour utiliser la version de **Vagrant** installée localement dans d'autres projets, il faut créer un **binstub** et l'ajouter au PATH.\\ \\ Tout d'abord, exécuter la commande suivante à partir du dossier **Vagrant** : `bundle --binstubs exec`\\ \\ Cela générera des fichiers dans `exec/`, y compris **vagrant**. On peut désormais spécifier le chemin complet vers `exec/vagrant` n'importe où sur le système d'exploitation : `/chemin/vers/vagrant/exec/vagrant init -m hashicorp/bionic64`\\ \\ Il y aura des avertissements indiquant que l'exécution de Vagrant comme celle-ci n'est pas prise en charge.\\ \\ Afin de na pas spécifier le chemin complet vers **Vagrant** (pour simplement exécuter **vagrant**), créer un lien symbolique vers l'exec :\\ \\ ` ln -sf /chemin/vers/vagrant/exec/vagrant /usr/local/bin/vagrant`
## Installer les plugins
### Installation de vagrant-libvirt
```
vagrant plugin install vagrant-libvirt --plugin-version="0.0.42"
```
### Installation de knife-solo
Installation avec ruby gem standard:
```
gem install knife-solo
# ou si on utilise ChefDK
chef gem install knife-solo
```
Les commandes de knife intégrées pour travailler avec des sacs de données ne fonctionnent pas bien sans un serveur Chef, il est donc recommandé d'utiliser la gem `knife-solo_data_bag`, pour fournir des versions "solo" de toutes les commandes de sac de données typiques. La structure par défaut générée par **knife solo init** doit être compatible avec toutes les opérations répertoriées dans la documentation de cette gem.
Installation à partir de la source git:
```
bundle && bundle exec rake install
```