# VAGRANT: Référentiel de box privé
{{INLINETOC}}
Pour diverses raisons, il peut arriver que le référentiel public Vagrant ne puissent pas être utilisé, cet article présente les méthodes pour:
* Créer un dépôt local de box sur le réseau interne
* Gérer les versions des box hébergées.
#Prérequis
* Serveur Nginx installé
* de box disponibles et opérationneles
# Configuration du dépôt local
## Configuration de NGINX
### Créer le fichier vagrantbox.conf
$ vi /etc/nginx/conf.d/vagrantbox.conf
////
server {
listen 8089;
server_name vagrantbox;i
root /var/www/html/vagrant/;
# resolve vagrant json file(s)
location ~ ^/(.*)/(.*)/$ {
index $2.json;
try_files $uri $uri/ $2.json =404;
autoindex off;
}
# enable auto indexing for boxes
location ~ ^/boxes/$ {
try_files $uri $uri/ =404;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}
# serve json with specific header
location ~ \.json$ {
add_header Content-Type application/json;
}
# serve box(s) with specific header
location ~ \.box$ {
add_header Content-Type application/octet-stream;
}
}
### configurer le demarrage automatique de nginx au boot
$ /sbin/chkconfig nginx on
### contrôler la configuration de nginx
$ nginx -t
### Démarrer nginx
$ service nginx start
### configurer le mode permissif
$ setenforce 0
## Création de l'entrepôt vagrant
### Créer les dossiers
$ mkdir -p /var/www/html/vagrant/boxes/
$ chmod 755 -R /var/www/html/vagrant/
### Charger les fichiers d'indexation
Par défaut le root du serveur nginx est /var/www/html/, pour permettre à celui-ci de fonctionner dans un auter répertoire copier les fichiers html dans le nouveau répertoire racine.
$ cp /usr/share/nginx/html/*.html /var/www/html/vagrant/
### Charger les box
$ cp ~/VagrantBoxes/dgfipbase/dgfipbase_1.0.0.box /var/www/html/repo/pub/boxes/vagrant/boxes/
### Créer le catalogue JSON
$ mkdir -p /var/www/html/vagrant/dgfip/centos6
$ touch /var/www/html/repo/pub/boxes/vagrant/centos6.json
Le nom du répertoire doit être identique au nom de l'entrée du catalogue (sans le .JSON)
### Afficher le tree de l'entrepôt
$ tree /var/www/html/vagrant/
////
├── vagrant
│ ├── boxes
│ │ ├── catalog
│ │ ├── dgfipbase_1.0.0.box
│ │ └── dgfip-rhel7-0.4.0.box
│ ├── dgfip
│ │ ├── centos6
│ │ │ └── centos6.json
│ │ └── centos7
│ │ └── centos7.json
│ ├── prod
│ └── sandbox
│ └── Vagrantfile
## Création du catalogue
Afin de servir plusieurs versions d'une boîte vagrant et d'activer les notifications de mise à jour, il faut configurer un catalogue de box. Ce catalogue est écrit en code JSON dans un seul fichier.
### Recupérer le checksum sha1 de la box
$ sha1sum /var/www/html/repo/pub/boxes/vagrant/boxes/dgfipbase_1.0.0.box
////
2fc11dcd75505e483a6ba1d1501216434e0e9d1b /var/www/html/repo/pub/boxes/vagrant/boxes/dgfipbase_1.0.0.box
### Editer le fichier JSON
```
$ vi /var/www/html/repo/pub/boxes/vagrant/centos.json
```
```
{
"name": "demo/centos6",
"description": "socle 2012 dgfip CentOS 6 64-bit.",
"versions": [{
"version": "1.0.0",
"providers": [{
"name": "libvirt",
"url": "http://xx.xx.xxx.xxx:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box",
"checksum_type": "sha1",
"checksum": "2fc11dcd75505e483a6ba1d1501216434e0e9d1b"
}]
}]
}
```
Description des informations du fichier ainsi créé:
////
* Définition du nom de la box dgfipbase. Toutes les versions seront regroupées sous ce nom.
* Ajout d'une description littérale de ce qui est dans la box.
* définition de la première version 1.0.0
* Indication du fournisseur : libvirt sous
* Indication de l'URL de la box: ~/VagrantBoxes/dgfipbase/dgfipbase_1.0.0.box
* Indication de la somme de contrôle sha1 à vérifier lors de l'importation de la box.
### Redémarrer nginx
$ service nginx restart
#Utilisation par les Clients
Sur un navigateur, vérifier les URL suivantes avant de continuer:
http://serveurlocal:8089/boxes/vagrant/centos.json
http://serveurlocal:8089/boxes/vagrant/boxes/
## Ajouter le repertoire base box
$ vagrant box add demo/centos6 http://127.0.0.1:8089/boxes/vagrant/centos.json
////
==> box: Loading metadata for box 'http://127.0.0.1:8089/boxes/vagrant/centos.json'
==> box: Adding box 'demo/centos6' (v1.0.0) for provider: libvirt
box: Downloading: http://127.0.0.1:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box
box: Calculating and comparing box checksum...
==> box: Successfully added box 'demo/centos6' (v1.0.0) for 'libvirt'!
On remarquera le changement dans la ligne des métadonnées pour la box 'http://127.0.0.1:8089/snsbox/vagrant/centos.json' qui confirme la lecture du catalogue. Et la ligne demo/centos6' (v1.0.0) for provider: libvirt qui confirme que la version 1.0.0 est ajoutée à Libvirt. Les deux dernières lignes confirment que notre somme de contrôle dans le fichier centos.json était correcte.
## Lister les box
$ vagrant box list
////
centos (libvirt, 0)
demo/centos6 (libvirt, 1.0.0)
## Créer le projet Vagrant
dans le repertoire du projet
$ cd ~/VagrantTest
$ vagrant init demo/centos6
////
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.
## Démarrer la box
$ vagrant up
Vérifier à nouveau par ssh si tout est de nouveau opérationnel, en lisant le message d'accueil et en listant le contenu de /vagrant sur l'invité.
# Gestion des versions dans l'entrepôt local
## Editer le fichier JSON
$ vi /var/www/html/boxes/vagrant/centos.json
On utilise pour cette démonstration la même box!
{
"name": "demo/centos6",
"description": "socle 2012 dgfip CentOS 6 64-bit.",
"versions": [{
"version": "1.0.0",
"providers": [{
"name": "libvirt",
"url": "http://127.0.0.1:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box",
"checksum_type": "sha1",
"checksum": "2fc11dcd75505e483a6ba1d1501216434e0e9d1b"
}]
},{
"version": "1.0.1",
"providers": [{
"name": "libvirt",
"url": "http://127.0.0.1:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box",
"checksum_type": "sha1",
"checksum": "2fc11dcd75505e483a6ba1d1501216434e0e9d1b"
}]
}]
}
## Contrôler sur le client la version de la box
$ vagrant box outdated
Checking if box 'demo/centos6' is up to date...
A newer version of the box 'demo/centos6' for provider 'libvirt' is
available! You currently have version '1.0.0'. The latest is version
'1.0.1'. Run `vagrant box update` to update.
On peut ajouter maintenant plus de box avec différents fichiers JSON!