# 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!