====== Création de Buildroot sous environnement Vagrant ====== ===== Introduction ===== * Buildroot est un outil permettant la création d'un système d'exploitation Linux complet adapté pour l'embarqué, incluant le “boot-loader”, le noyau, le “devicetree” et le système de fichiers “rootfs”. * Vagrant est un logiciel libre permettant la création et la configuration d'environnements de développement virtuels. Ainsi, l'environnement de Buildroot est portable et reproductible. Cet aspect nous intéresse particulièrement pour les développements pour des produits qui évoluent vites, tels que les produits réalisés sur la base des Zynq et les versions de Buildroot. ==== À propos de Vagrant ==== Avec [[https://www.vagrantup.com/|Vagrant]], pour définir un système d'exploitation avec une configuration et ses paquets particuliers, il suffit d'un simple fichier, d'un ensemble de commandes et des paquets disponibles. Le système est chargé dans une machine virtuelle. Celle ci n'est pas installée définitivement sur la machine hôte, car elle se re-installe à chaque appel du fichier de configuration. L'image du système peut être détruit localement. Elle sera reconstruite au prochain appel.\\ Le contenu du système peut être mis dans une boite, appelée //box//. Les principaux avantages de cet outil sont la simplicité, la portabilité des machines virtuelles, la légèreté (comparée à une machine virtuelle installée) et la facilité que l’on a à reproduire un même environnement plusieurs fois((Vous trouverez une bonne explication et un exemple sur le site de [[https://www.synbioz.com/blog/vagrant_et_la_virtualisation_pour_faciliter_le_developpement|symbioz]] )). ===== Installations ===== Le système sur lequel je travaille : Linux Mint LMDE 2 Betsy. \\ Via le gestionnaire de paquets, j'ai installé : * vagrant : création et la configuration d'environnements virtuels. * curl : interface en ligne de commande pour télécharger du contenu par le réseau. * ruby-dev : paquet contenant les fichiers d'entêtes et la librairie mkmf nécessaires pour construire des paquets "gems" (RubyGems est le " gestionnaire de paquets de Ruby "). * virtualbox : logiciel de virtualisation de systèmes d'exploitation. ==== Pluggin de configuration du proxy pour Vagrant ==== Etant derrière une protection par proxy, une solution est d'utiliser le pluggin adapté de Vagran.\\ Installation : $ vagrant plugin install vagrant-proxyconf Pour un configuration globale, on peut créer le fichier //Vagrantfile// dans le répertoire //~/.vagrant.d/ //ou pour une configuration locale, dans le répertoire spécifique du projet. \\ Exemple : $ nano ~/.vagrant.d/Vagrantfile Vagrant.configure("2") do |config| if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = "http://proxy.serveur:port/" config.proxy.https = "http://proxy.serveur:port/" config.proxy.ftp = "ftp://proxy.serveur:port/" config.proxy.no_proxy = "localhost,127.0.0.1,.example.com" end # ... autres trucs end Plus d'information [[http://tmatilai.github.io/vagrant-proxyconf/|ici]] ===== Tests ===== ==== Premier test ==== $ curl -O https://buildroot.org/downloads/Vagrantfile $ vagrant up $ vagrant ssh vagrant@vagrant-ubuntu-trusty-64:~$ exit $ vagrant destroy === Mise à jour === Après quelques jours ... $ vagrant up Un message que la "box" a subit une mise à jour. $ vagrant destroy $ vagrant box update $ vagrant up $ vagrant ssh vagrant@vagrant-ubuntu-trusty-64:~$ cd buildroot-2016.08 vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ make menuconfig Là, on peut choisir de charger une configuration pour la carte microzed, en utilisant le choix //load// et en indiquant le choix ///home/vagrant/buildroot-2016.08/configs/zynq_microzed_defconfig//, puis //exit// vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ make zynq_microzed_defconfig vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ make ... In file included from tools/aisimage.c:10:0: include/image.h:923:27: fatal error: openssl/evp.h: No such file or directory # include ... Une erreur apparaît avec un fichier evp.h manquant. Il faut installer un paquet //libssl// ==== Résolution de l'erreur ==== vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ sudo apt-get update vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ sudo apt-get upgrade vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ sudo apt-get install libssl-dev vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08$ make À partir de là, la méthode travail sur //buildroot// reste la même que ce soit sur la machine virtuelle ainsi créée que sur un système proprement configuré avec le paquet buildroot installé. Vous pouvez vous référer à la [[wiki:linux_pour_zynq_de_xilinx:installation_buildroot#utilisation | page sur l'utilisation de builroot]]. ===== Utilisation ===== Voici quelques commandes et commentaires pour l'utilisation du système virtuel ainsi créé. Une fois dans le répertoire où le fichier Vagrant se situe, on pourra utiliser les commandes de gestion de la machine virtuelle. === Mise en route === Le système virtuel crée une image sur le disque dur et se charge en mémoire. $ vagran up === Utiliser le système virtuel === Afin de rentrer des commandes dans le système virtuel, il faut s'y connecter $ vagrant ssh === Sortir du système virtuel === Pour sortir du système virtuel $ exit === Éteindre le système virtuel === Le système virtuel se décharge de la mémoire. Trois possibilités : * Mise en veille : $ vagrant suspend L'état du système est sauvegardé et son image reste sur le disque dur. Il n'est plus en mémoire vive. Au prochain chargement, la machine virtuelle se retrouvera dans l'état tel qu'il était avant la mise en veille. * Arrêt : $ vagrant halt Le système est arrêté par l'équivalent d'une commande //shutdown//. Son image reste sur le disque dur avec toutes les modifications qui lui ont été apportées localement. Il n'est plus en mémoire vive. Au prochain chargement, la machine virtuelle se retrouvera dans l'état tel qu'il était avant l'arrêt. * Destruction : $ vagrant destroy Le système est arrêté par l'équivalent d'une commande //shutdown//. Son image est supprimée du disque dur. Toutes les modifications qui lui ont été apportées localement sont perdues. Il n'est plus en mémoire vive. Au prochain chargement, la machine virtuelle se retrouvera dans l'état d'une nouvelle machine virtuelle telle que définie par la "box" et le fichier Vagrant d'origine. === Échanges avec le système hôte === Le répertoire ///vagrant// sert de zone d'échanges. Tous les fichier qui s'y trouvent restent sur le disque dur du système hôte, dans le répertoire où le ficher de configuration //Vagrant// se trouve. Par exemple : * dans le système virtuel : vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08/$ echo "Bonjour tout le monde" > /vagrant/fichier.test vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08/$ cd /vagrant/ vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08/$ ls fichier.test Vagrantfile vagrant@vagrant-ubuntu-trusty-64:~/buildroot-2016.08/$ cat fichier.test Bonjour tout le monde * dans le système hôte : $ ls fichier.test Vagrantfile $ cat fichier.test Bonjour tout le monde C'est bien le même fichier //fichier.test//