systemx

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - vagrant

Fil des billets - Fil des commentaires

mardi, juillet 9 2013

ruby et rvm comment gérer les versions de ruby (avec vagrant et veewee)


En essayant d'installer veewee sur différentes machines, je suis tombé sur divers problemes de compatibilité de librairies ruby.
En lisant différentes docs, j'ai été séduit par l'utilitaire rvm qui permet de créer des environnement cloisonnés ruby.
J'ai décidé dans le cadre d'une install multiboot de créer un répertoire contenant ruby + vagrant + veewee et de gérer les versions manuellement, le tout dans un répertoire défini /data/apps/rvm.
Le but de la manip est d'installer des applications ruby et de partager ces installations entre les différents OS installés sur la machine en s'affranchissant des dépendances de package et de pouvoir gérer les gems manuellement.
Tout d'abord avant les opérations j'ai un ruby là :
[pierre@fedora pierre]$ which ruby 
/usr/bin/ruby
Je suis donc le tuto d'installation en veillant bien chaques étapes :
curl -L https://get.rvm.io > rvminstall

Editer rvminstall et changer avec /data/apps/rvm (qui est le repertoire d'installation partagé entre les différents OS) où il y a "rvm_prefix=".
Si on est derrière un proxy, modifier /etc/visudo :
Defaults env_keep +="http_proxy"
Defaults env_keep +="https_proxy"
Puis comme spécifié dans la doc utiliser sudo pour ne rien créer dans la home user ou root.
Afin d'etre complétement indépendant du système j'installe tout en local (dont ruby en derniere version) :
$ export rvm_path=/data/apps/rvm 
$ sudo ./rvminstall version latest --ruby
$ rvm list rubies
rvm rubies
=* ruby-2.0.0-p247 [ x86_64 ]
# => - current
# =* - current && default
#  * - default
Ensuite on crée l'enveloppe pour vagrant :
[pierre@fedora apps]$ rvm gemset create vagrant
gemset created vagrant  => /data/apps//rvm/gems/ruby-2.0.0-p247@vagrant
Et on installe :
root@fedora apps # gem install vagrant
Fetching: archive-tar-minitar-0.5.2.gem (100%)
Successfully installed archive-tar-minitar-0.5.2
Fetching: ffi-1.9.0.gem (100%)
OOPS problème :
root@fedora apps # gem install veewee 
ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: fog requires net-scp (~> 1.1)
On corrige :
root@fedora apps # gem install net-scp
Fetching: net-ssh-2.6.7.gem (100%)
Successfully installed net-ssh-2.6.7
..
2 gems installed

root@fedora apps # gem install fog -v 1.8
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.5.10
Fetching: ruby-hmac-0.4.0.gem (100%)
..
3 gems installed
root@fedora apps #  gem install veewee
Fetching: Platform-0.4.0.gem (100%)
Successfully installed Platform-0.4.0
...
22 gems installed
Pour finir j'install le plugin salt pour vagrant.
root@fedora apps # gem install vagrant-salt
Fetching: vagrant-salt-0.4.0.gem (100%)
...
Installing ri documentation for vagrant-salt-0.4.0

A noter que la création de rvm à créé les fichiers /etc/bash.bashrc et /etc/profile.d/rvm.sh
Je les enlève et créé un environement dans mon .bashrc :
export rvm_bin_path=/data/apps/rvm/bin
export rvm_path=/data/apps/rvm
export rvm_prefix=/data/apps
export rvm_script_path=/data/apps/rvm
. $rvm_script_path/scripts/rvm
Ensuite on peut y aller (lancer un nouveau bash) :
$ which vagrant 
/data/apps/rvm/gems/ruby-2.0.0-p247/bin/vagrant
$ which veewee 
/data/apps/rvm/gems/ruby-2.0.0-p247/bin/veewee

Sous gentoo j'ai ces erreurs :
@gentoox64 /data/apps/rvm $ gem install veewee
Error loading RubyGems plugin "/data/apps/rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.1/lib/rubygems_plugin.rb": libcrypto.so.10: cannot open shared object file: No such file or directory - /data/apps/rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/x86_64-linux/openssl.so (LoadError)
J'ai patché /usr/lib64 en faisant des liens
ln -s /usr/lib64/libssl.so.1.0.0  /usr/lib64/libssl.so.10
ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.1.0

lundi, juillet 8 2013

vagrant veewee


Vagrant est un outil sympa pour se créer des VM à la volée, en quelque sorte se faire un mini cloud.
J'utilise virtualbox mais cela fonctionne sous kvm et même VMware quelquechose. Il y a une bonne page de présentation sur ce blog. Cependant il y a deux inconvenients majeurs.
  1. vagrant home
  2. Par default vagrant créé tout dans la home directory ce qui rends cette home extremement volumineuse et ne devrait pas être inclus dans les backups de la home.
    Pour résoudre le probleme, il faut (à partir de la version 1.1.x je crois) utiliser :
    export VAGRANT_HOME=/data/virt/Vagrant/
    La doc parle aussi de VAGRANT_CWD dans le doute je met les 2.
  3. Les bases box
  4. Ce sont des machines pré profilées que l'on peut recupérer directement du WEB, mais on ne maitrise pas trop ce qu'il y a dedans.
    Créer une base box à partir des iso OS est un process un peu lourd (decrit ici). Afin de pallier à cet inconvenient l'utilitaire veewee permet d'automatiser ce processus et surtout fonctionne avec les standards d'installation serveur.
    On peut en effet lancer son kickstart comme pour toute installation de server, parfait pour les admins systemes (ou preseed pour les debian).
    Je vais donc créer avec veewee des modèle de VM qui seront ensuite importés et packagés par vagrant pour créer (deployer) des VM.

On initialise vagrant (pour l'installation utiliser la dernière version de l'auteur, les package OS étant souvent obsolètes (sauf gentoo testing)).
$ cd $VAGRANT_HOME
$ vagrant init 
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.

Le fichier Vagrantfile décrit la ou les machines gérées par vagrant.
Parfait maintenant on peut commencer à travailler.
Pour les tests ci dessous, j'utilise une centos 6.4.
Je télécharge en prévision des installations l'iso source et le guest addition et les place dans le repertoire $VAGRANT_HOME/iso :
  • vboxaddition (en fonction de la version installée)
  • http://download.virtualbox.org/virtualbox/4.1.14/VBoxGuestAdditions_4.1.14.iso
  • centos
  • http://mirror.ovh.net/ftp.centos.org/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso
On créé l'enveloppe de notre nouvelle box :
vagrant basebox define centos64 CentOS-6.3-x86_64-minimal
Le template 6.4 n'existant pas je pars d'une version 6.3 qui sera downloadée d'internet.
Cela créé un repertoire dans definitions/centos64 très intéressant avec entre un ks.cfg bien connu des admin redhat.
Afin de passer en 6.4 je modifie le fichier definition.rb :
  :os_type_id => 'RedHat_64',
  :iso_file => "CentOS-6.4-x86_64-minimal.iso",
  :iso_src => "",
  :iso_md5 => "4a5fa01c81cc300f4729136e28ebe600",
On retrouve le fichier que j'ai downloadé précédemment (et son md5sum).
Ensuite après avoir adapté les scripts je change cette partie :
:postinstall_files => [
      "top.sh"
  ],
Le fichier sera copié sur le nouveau modèle et executé au moment de la création.
Puis je modifie les fichiers de config qui sont en 2 type :
  1. ks.cfg
  2. Ajout de clavier francais, partitionnement ...
  3. top.sh
  4. il contient en gros les opérations d'installation du modèle (voir le lien de création manuelle de modèle vagrant).
    Ainsi que l'installation des salt-minion (à la place de puppet) pour permettre le provionning au boot à la création de la VM.
On lance la creation de la box :
% veewee vbox build centos64 --debug --redirectconsole
Creating vm centos64 : 480M - 1 CPU - RedHat_64
Creating new harddrive of size 10140, format vdi, variant Standard 
Attaching disk: /data/virt/centos64/centos64.vdi
Mounting cdrom: /data/virt/Vagrant/iso/CentOS-6.4-x86_64-minimal.iso
Mounting guest additions: /data/virt/Vagrant/iso/VBoxGuestAdditions_4.2.14.iso
Received port hint - 7222
Found port 7222 available
Received port hint - 7222
Found port 7222 available
Changing ssh port from 22 to 7222
Waiting 10 seconds for the machine to boot
Received port hint - 7122
Found port 7122 available

C'est assez sympa de voir la vbox créée de zéro et surtout le kickstart est vraiment cool.
On peut le voir sur le screenshot ci dessous où veewee passe les paramètres de boot kickstart au moment du boot de l'iso : veewee-vbox1.png
Veewee est même assez sympa pour créer un server web local qui va répondre à la demande de kickstart.
On suite aussi dans les logs veewee (en mode debug) :
Typing:[1]:  text ks=http://10.0.2.2:7122/ks.cfg
Done typing.
Une fois que cela est terminé, on valide la box :
veewee vbox validate 'centos64'
Je suis un peu dubitatif quand à l'utilité de cette étape car les vérifications sont pas forcement appropriées. Puis on exporte :
veewee vbox export 'centos64'   


Ensuite on peut utiliser cette box dans vagrant avec le provisionning type salt/puppet.
vagrant package --base centos64 
mv /data/virt/Vagrant/package.box /data/virt/Vagrant/centos64.box
On l'ajoute dans notre repository de box :
vagrant box add centOS-6.4 centos6.4.box
Cela va créer dans VAGRANT_HOME un repertoire boxes qui contient les infos pour utiliser ces box. Modifier le fichier Vagrantfile :
  config.vm.box = "centOS-6.4"
On démarre la machine :
pierre@gentoox64 /data/virt/Vagrant $ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'centOS-6.4'
...
On se loggue :
pierre@gentoox64 /data/virt/Vagrant $ vagrant ssh 
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ id 
uid=501(vagrant) gid=501(vagrant) groups=501(vagrant),10(wheel)
[vagrant@localhost ~]$ sudo su - 
[root@localhost ~]#
Pour que Salt soit accessible au provisionnement de virtualbox, il faut ajouter le plugin vagrant/salt qui s'installe très facilement avec l'option plugin de vagrant des dernières versions.
Ces solutions sont vraiments très bien pour créer des environements de tests et de les distribuer.
Il suffira ensuite de donner la box à une personne disponsant de vagrant et la création est un jeu d'enfant.
Par contre le gros point noir est l'installation des composants vagrant/veewee et ruby, très capricieux sur les versions et en général la version de Vagrant est périmée sur les distros (ubuntu par exemple).
De plus l'auteur de vagrant ne propose plus des gems mais des packages.
A notre que le package deb fonctionne sur debian/ubuntu. Ca simplifie pour vagrant mais ne resouds rien pour veewee.
La méthode rvm pour veewee est pour moi la seule qui fonctionne avec des packages de l'auteur (ou gentoo en testing).
Pour un utilisateur simple de box vagrant le package s'est révélé très efficace. PS : J'ai installé sans probleme avec le package de chez vagrant avec ensuite veewee en gem (en temps que user local) avec :
gem install net-scp  # Peut être pas nécessaire car inclus avec fog (à verifier)
gem install fog --version 1.8
gem install veewee
Mettre dans ~/.gemrc pour ne pas installer la partie doc :
install: --no-document
update: --no-document
gem: --no-ri --no-rdoc

mardi, avril 16 2013

Fedora grrr Redhat

RedHat étant un acteur important de l'écosystem linux voir le géniteur de l'opensource dans les datacenter, je suis régulièrement ce qui se passe sous fedora qui est leur bouillon de culture et qui permet de découvrir pas mal de nouvelles choses.
Cependant cette distro est vraiment pas confortable au quotidien car les softs non redhat sont très mal supportés et on doit invariablement passer par l'ajout de repos ou bien la chasse aux rpms sur internet.
Dans mon aventure sur Kokora j'avais une fois de plus noté l'inflation des repos (entre autre pour les produits google) et les problèmes de cohérence de l'ensemble du système.
Travaillant avec vagrant pour faire des usines de test Redhat, j'ai fait un tour sur fedora ou bien évidement le package n'existait pas (alors qu'il est dispo sur ubuntu/gentoo par exemple).
Ensuite l'intégration a vraiment confirmé cette impression de pas fini et du peu de considération de redhat pour les pauvres péquins comme moi.
En gros pour creer un modele de box vagrant il faut packager une virtualbox avec la command vagrant package qui sous fedora créé un fichier temporaire dans /tmp.
Or depuis F18 /tmp est un filesystem tempfs qui fait par defaut la taille de la moitié de la mémoire.
[@fedora .vagrant.d]$ df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           968M   28K  968M   1% /tmp
La creation de la box plante lamentablement et plombe /tmp, il faut en général quelques GB pour creer les package.
De plus virtualbox est pas packagé, il faut ajouter les repos, tout reconstruire à la mimine.
Il y a bien de moyens de changer ce comportement mais au final travailler sous fedora avec virtualbox/vagrant c'est un cauchemar.
Je retourne sous gentoo, sabayon ou même ubuntu où tout est très bien packagé et fonctionne sans problème.
Il reste à mon avis une belle place pour une distro basée sur fedora qui intégrerait bien tous ces composants (et d'autres) suite à la mort fuduntu (encore du aux abus de pouvoir de RH entre gnome/sytemd). car quoi qu'on en dise RH reste le plus gros acteur Linux en entreprise.
Toutes ces reflections me font d'ailleurs penser à la belle place que peuvent trouver Ubuntu ou Opensuse qui font des distributions à la fois orientées enteprises et end user qui sont plus souples et intégrées que le trio boiteux RHEL/CentOS/Fedora.