Table of Contents

VAGRANT: Référentiel de box privé

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:

Prérequis

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éé:

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!