Horoa – La voie est libreLa voie est libre

Xen/convirt: management facile de votre architecture virtualisée

Convirt est un  projet libre dont le but est de fournir une interface graphique pour faciliter le management des machines virtuelles: lifecycle.

Convirt est issue de Xenman, et dans sa version 1.0, il en avait hérité son interface GTK. Bien que GTK soit portable sur de nombreuses architecture, il est loin d’être répandu sur les plate-formes windows et OSX! Pour sa version 2.0, la société  qui propulse convirt: Conviture a donc ré-orienté le développement pour proposer un environnement Web2.0 (ouais trop classe!) là encore avec un moteur python. Résultats:  une interface opensource, au look franchement fancy et aux possibilités vraiment complètes.

Templates, provisionning, management de tâches, monitoring, reporting et lifecyling… tout y est! On trouve même un catalogue de machines virtuelles issues des repository de convirture ou d’autres sociétés impliquées dans convirt. A noter que convirt propose dans son  catalogue une image pour installer convirt 🙂 l’installation récursive… il fallait y penser (en fait il s’agit de permettre aux utilisateur de Xenman ou de convirt 1.x d’installer facilement convirt 2.0).

Convirt2.0 apporte au libre la brique graphique rassurante qui, pour certains, faisait jusqu’alors défaut. Un soft qui tiend la dragée haute à ses équivalents propriétaires tels que XenCenter ou VSphere  respectivement destinés aux environnements XenCitrix et VMWare.

Dans ce tuto nous verrons comment installer convirt sur un dom0 Xen basé sur debian Squeeze. On mettra aussi l’accent sur la sécurité en utilisant SSL pour crypter les échanges entre le serveur qui manage les VM (convirt) et les dom0 Xen. On fera aussi tournerl’applucation avec son propre user de façon à séparer au maximum les privilèges.

Debian 6.0 débarque de base avec Xen 4.0.1 qui est une version tout à fait récente qui propose notamment un kernel pvops, même si certaines fonctionnalités telles que pvusb ne sont pas implémentées. Partons du principe que la Debian est déjà correctement instalé ;)… L’install pdoit être faite en tant que root ou sudoer.

Préparation de l’environnement


On créé tout d’abord un utilisateur qui servira à installer et faire tourner l’application convirt:
root@dom0:~$ addgroup --system convirt
root@dom0:~# adduser --system --ingroup convirt --disabled-password --home /var/cache/convirt convirt

Dans le fichier /etc/sudoers nous ajoutons la ligne suivante afin de nous faciliter la vie:
Defaults>convirt set_home

root@dom0:~# mkdir /var/lib/convirt
root@dom0:~# chown convirt:convirt /var/lib/convirt
root@dom0:~$ cd /var/cache/convirt convirt
root@dom0:~# sudo -u convirt -s

Nous sommes maintenant un utilisateur non privilégié. Verifions que nous sommes bien là où nous devons être:
convirt@dom0:~$ pwd
/var/cache/convirt

On est dans notre home directory (si ce n’est pas le cas, faites un cd vers le répertoire /var/cache/convirt), on va donc créer une paire de clé SSH pour nous identifier auprès des serveurs managés.
ssh-keygen -t rsa -b 2048

Ces clés nous servirons plus tard.

Installation de convirt


Récupérons d’abord le packages. Il est disponible sur le sites de convirture mais il faut chercher un peu.

wget --no-cache http://www.convirture.com/downloads/convirt/2.0.1/convirt-install-2.0.1.tar.gz
on décompresse l’archive puis on redevient root (ou sudoer).
convirt@dom0:~$ tar zxvf convirt-install-2.0.1.tar.gz
convirt@dom0:~$ exit

Une fois dans le répertoire on va lancer l’installation des dépendances via le script install_dependencies. ATTENTION, ceci installera MySQL, si ce n’est pas déjà le cas, sachez que le process d’install change le moteur de bases de données au profit d’innoDB! De plus si vous êtes dans ce cas il vous faudra tweaker un peu la procédure. De même ce script installe des packages python sans passer par le système de packaging de debian.
root@dom0:~# cd /var/cache/convirt/convirt-install
root@dom0:~# ./install/cms/scripts/install_dependencies

A ce stade il est possible que le script ne s’éxecute paset renvoie l’erreur suivante (c’est le cas lors d’une upgrade ou d’une réinstallation):
Setuptools version 0.6c11 or greater has been installed.
(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)
sudo: easy_install: command not found
ERROR: Failed installing virtualenv.

Dans ce cas, installez le package python-setuptools:
root@dom0:~# apt-get install python-setuptools

Lorsque le process vous demande un mot de passe pour l’admin MySQL entrez « convirt »… On le changera par la suite.
Assurez vous d’avoir les paramètres suivants dans /etc/mysql/my.cnf une fois l’install terminée:
root@dom0:~# cat /etc/mysql/conf.d/convirt.cnf
[mysqld]
default-storage-engine=innodb
innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M

Puis on relance mysqld:
root@dom0:~# /etc/init.d/mysql restart

Les dépendances sont maintenant résolues nous pouvons passer à l’install de convirt proprement dite. Pour cela nous allons redevenir un utilisateur non privilégié:

root@dom0:~# sudo -u convirt -s
convirt@dom0: ~$ cd
convirt@dom0: ~$vi convirt-install/install/cms/scripts/install_config

On édite le fichier de configuration du script d’install de façon à lui spécifier l’emplacement où l’on souhaite installer convirt.
En ce qui me concerne, je trouve que /var/lib/convirt est un très bon endroit. Je vais donc setter le prefix comme suit:
CONVIRT_BASE=/var/lib

En plus du package d’installation il nous faut télécharger l’application proprement dite,
convirt@dom0:~$ wget --no-cache http://www.convirture.com/downloads/convirt/2.0.1/convirt-2.0.1.tar.gz

avant de lancer l’install:
convirt@dom0:~$ source convirt-install/install/cms/scripts/install_config
convirt@dom0:~$ tar -xzf ./convirt-2.0.1.tar.gz -C $CONVIRT_BASE
convirt@dom0:~$ ./convirt-install/install/cms/scripts/setup_tg2

Durant l’install il est possible que vous voyez le message d’erreur suivant:
ls: impossible d'accéder à /var/lib/convirt/tg2env/lib/python2.4/site-packages/Beaker-*py2.4.egg/beaker/ext/google.py: Aucun fichier ou dossier de ce type
Cela n’empêche pas l’appli de fonctionner sans problème… n’en tenez pas compte.

Configuration de convirt


L’installation étant terminée on va configurer l’application.
Principalement, nous allons changer le mot de passe utiliser par l’appli por se connecter à la base de donnée. On édite donc le fichier /var/lib/convirt/src/convirt/web/convirt/development.ini:
sqlalchemy.url=mysql://convirt:somepass@localhost:3306/convirt?charset=utf8

Au niveau de MySQL, on va évidement changer le mot de passe de l’appli mais aussi celui de l’administrateur de base de données car celui ci a été setter à « convirt » lors du process d’install:
convirt@dom0:~$ mysqladmin -u root -p password newrootpwd
convirt@dom0:~$ history -c
convirt@dom0:~$ mysql -u root -p
mysql> grant all privileges on convirt.* to 'convirt'@'localhost' identified by 'somepass';
mysql> flush privileges ;
mysql> exit

On lance ensuite le script suivant:
convirt@dom0:~$ ./convirt-install/install/cms/scripts/setup_convirt

Le script vous demande une passphrase… laissez vide et validez.
Démarrez convirt:
convirt@dom0:~$ cd /var/lib/convirt
convirt@dom0:~$ ./convirt-ctl start

Si vous constatez le message d’erreur suivant:
No module named xen.xend.XendClient

Votre environnement python n’arrive pas à trouver le module Xen. Pour y remédier, un simple lien symbolique « do the trick » (attention à être root pour les créer):
root@dom0:~# ln -s /usr/lib/xen-4.0/lib/python/xen /usr/lib/python2.6/
root@dom0:~# ln -s /usr/lib/xen-4.0/lib/python/grub /usr/lib/python2.6/

Vous pouvez alors vous loggez qur l’appli via un navigateur web http://hostname:8081 (admin/admin)


Management des serveurs


Afin de manager un serveur celui doit être préalablement configurer pour que convirt puisse y accéder:
Tout d’abord il faut installer les clés SSH que nous avons générées au début de ce tuto. On copie donc la clée publique du serveur convirt vers le serveur managé.
scp /var/cache/convirt/.ssh/id_rsa.pub user@managed_server:/tmp
Puis on la place dans le homedir de root sur le serveur managé
root@managed:~# [ -d /root/.ssh ] || mkdir /root/.ssh && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys

Les étapes suivantes sont normalement complétés automatiquement si vous installez les convirt-tools sur le dom0. Ici on n’installe pas cet outils,et on paramètre manuellement Xen de façon à bien comprendre les services mis en jeu.

.Assurez vous que les packages suivants sont bien installés sur le dom0 à manager:
root@managed:~# apt-get -y install socat dnsmasq uml-utilities lvm2 expect python-pexpect kpartx python-openssl

Je vous conseilles de désactiver dnsmasq, à plus forte raison si vous utilisez un modèle réseau de type bridge (dans /etc/default/dnsmasq).

On créé un fichier d’information sur le serveur à manager, ce fichier n’est pas crucial pour le fonctionnement de l’application mais permet d’obtenir des statistiques sur la plate-forme managée par convirt:
root@managed:~# cat /var/cache/convirt/server_info
DISTRO="Debian"
CODE_NAME="6.0"
VER="6.0"
KERNEL="2.6.32-5-xen-amd64"
ARCH="x86_64"
V_PLATFORM="XEN"
V_PLATFORM_VER="4.0.1"
DEFAULT_BRIDGE="xenbr0"

Configuration de Xen

On va paramétrer Xen de façon à ce qu’il utilise les services XMLRPC. Habituellement je préfère utiliser XMLRPC over SSL mais convirt semble avoir un problème avec SSL dans la version 4.0.1 de Xen.  Dans le fichier /etc/xen/xen-config.sxp, on règle les paramètres suivants (chacun peut ajuster selon ces besoins/lubies) :
(xend-tcp-xmlrpc-server yes)
(xend-relocation-server yes)
(dom0-min-mem 512)
(xend-tcp-xmlrpc-server-address '0.0.0.0')
(xend-tcp-xmlrpc-server-port 8006)
#(xend-tcp-xmlrpc-server-ssl-key-file xmlrpc.key)
#(xend-tcp-xmlrpc-server-ssl-cert-file xmlrpc.crt)
(xend-relocation-port 8002)

Si toutefois vous souhaitez utilisez l’encryption SSL (Par exemple avec Xen 3.x), il vous faudra dé-commenter les lignes en commentaires et génèrer  les clés et certificats adéquats:
root@managed:~# openssl genrsa -out /etc/xen/xmlrpc.key 2048
root@managed:~# chmod 600 /etc/xen/xmlrpc.key
root@managed:~# openssl req -new -key /etc/xen/xmlrpc.key -out /etc/xen/xmlrpc.csr
root@managed:~# openssl x509 -req -in /etc/xen/xmlrpc.csr -signkey /etc/xen/xmlrpc.key -days 999 -out /etc/xen/xmlrpc.crt
root@managed:~# /etc/init.d/xend restart

Lors de la création de la demande de certificat, un password est demandé en plus des autres informations: laissez vide!

Pour tester que les clés sont correctement installées, essayez de vous connecter avec le user convirt depuis le serveur convirt:
convirt@dom0:~$ ssh -i /var/cache/convirt/.ssh/id_rsa root@managed_server

Acceptez la clé. Si vous vous connectez sans problème c’est gagné!
Déconnectez vous… faites un peu de nettoyage:
convirt@dom0:~$ rm ~/.ssh/cms_id_rsa*
convirt@dom0:~$ cd /var/lib/convirt
convirt@dom0:~$ ./convirtctl stop
convirt@dom0:~$ ./convirtctl start

Vous pouvez maintenant ajoutez le serveur Xen managed dans convirt en utilisant XML-RPC!

Tags: , , , , ,

9 comments

  • you probably forgot to:

    aptitude install python-setuptools

    otherwise you got an error like this:

    /var/cache/convirt# ./convirt-install/install/cms/scripts/setup_convirt
    install common functions sourced.
    DISTRO Debian
    VER 6.0.1
    CODENAME 6.0.1
    KERNEL 2.6.32-5-686
    ARCH i686
    Info: Sourcing /var/cache/convirt/convirt-install/install/cms/scripts/../../../common/scripts/Debian_functions
    Info: Sourcing /var/cache/convirt/convirt-install/install/cms/scripts/../common/Debian_functions
    Traceback (most recent call last):
    File « setup.py », line 57, in
    «  » »,
    File « /usr/lib/python2.6/distutils/core.py », line 138, in setup
    ok = dist.parse_command_line()

    File « /usr/lib/python2.6/dist-packages/pkg_resources.py », line 552, in resolve
    raise DistributionNotFound(req)
    pkg_resources.DistributionNotFound: distribute
    ERROR: Running python setup.py develop.
    ERROR: Failed setting up convirt package.

    • I have check on my servers and the package python-setuptools is not installed as

      dpkg --get-selections | grep python-setuptools

      Returns no output.
      I also tried re-run the setup scripts in case i missed some rror in the output but I could not find any… let’s check the
      output

      It is quite weired as you seem to be running the very same version of debian I do… where did you get the tarball of convirt?

  • the package name is python-setuptools

    anyway, more info about my server:

    root@server:~# cat /etc/debian_version
    6.0.1

    root@server:~# uname -a
    Linux server 2.6.32-5-686 #1 SMP Wed May 18 07:08:50 UTC 2011 i686 GNU/Linux

    root@server:~# dpkg -l |grep -i python|grep -i setup
    ii python-setuptools 0.6.14-4 Python Distutils Enhancements (setuptools compatibility)

  • If you get the following errors in your xend-debug.log

    File « /usr/lib/xen-4.0/lib/python/xen/xend/server/SSLXMLRPCServer.py », line 56, in close
    self.shutdown()
    File « /usr/lib/xen-4.0/lib/python/xen/xend/server/SSLXMLRPCServer.py », line 66, in shutdown
    self.__dict__[« conn »].shutdown()
    Error: []

    You are certainly trying to make convirt work with XEN4.x using XMLRPC over SSL. For some reason this do not work at the moment. Either use XEN3.x or use non-encrypted XMLRPC.

  • […] convirt 2 actualités Aucun commentaire EngFr Dans un précédent article je présentais l’installation et la configuration de convirt dans un environnement Debian. Au […]

  • root@eddy-Aspire-5517:/usr/share/convirt/install/cms/scripts# ./setup_convirt
    install common functions sourced.
    DISTRO Ubuntu
    VER 11.10
    CODENAME oneiric
    KERNEL 3.0.0-22-generic
    ARCH x86_64
    Info: Sourcing /usr/share/convirt/install/cms/scripts/../../../common/scripts/Ubuntu_functions
    Info: Sourcing /usr/share/convirt/install/cms/scripts/../common/Ubuntu_functions
    /usr/share/convirt/install/cms/scripts/../common/functions: ligne 277 : cd: /var/lib/convirt/src/convirt/web/convirt: Aucun fichier ou dossier de ce type
    python: can’t open file ‘setup.py’: [Errno 2] No such file or directory
    ERROR: Running python setup.py develop.
    ERROR: Failed setting up convirt package.

  • que faire pour resoudre cette erreur

    • Alexandre Chapellon

      Difficile à dire comme ça d’autant plus que tu ne semble pas avoir suivi à la lettre le tuto (chacun est libre 😉 ).
      As tu bien créé le répertorie de destination de convirt /var/lib/convirt (dans ce tuto) et paramétré le CONVIRT_BASE=/var/lib.
      Assure toi aussi que le user qui lance le script d’installation possède bien les droits d’écriture dans /var/lib/convirt.

      Une chose à laquelle je pense… ce tuto est fait pour la version 2.0.1 de convirt, or depuis le mois de mai 2012 la version opensource est passée en 2.1. Or je n’ai pas eu le temps de la tester, et je suis pas sûr du tout que ces infos soient valables pour la dernière version.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.