Archives quotidiennes :

Cloudstack : Paquets Ubuntu et support VMware

Le Contexte

Dans le cadre d’un projet professionel, je désire fournir à mes clients une interface de gestion de machines virtuelles, leur permettant de créer et démarrer des VM à la demande. J’ai, par le passé, déjà eu l’occasion de fournir ce genre d’interface. Que ce soit une solution complètement développée en interne, ou achetée très cher chez un éditeur (VMware vCloud Director).

Cette fois-ci, pas question de réinventer la roue (nous sommes en 2014!), ni de payer des sommes folles (nous ne sommes plus en 2000!).

Mon choix, qui reste personnel, s’est tourné vers Cloudstack. De part son coté agnostique dans le choix de l’hyperviseur, sa communauté et les retours que j’en ai eu à travers les rencontres lors des journées Build A Cloud.

Le Problème

Je suis parti sur une infra full Ubuntu 12.04.3 LTS pour Cloudstack.
Jusque là rien d’anormale, sauf que je veux pouvoir gérer aussi bien des clusters KVM que des clusters VMware ESXi.

Les paquets Ubuntu ne sont pas construits avec le support de VMware. En effet une restriction de la licence Apache font que les librairies java nécessaires à la prise en charge de certains modules ne sont pas fournies dans les sources de Cloudstack, et donc encore moins compilées dans les paquets.

La Solution

Rien de plus simple *khof*, créer ses propres paquets.

Installer Maven3

sudo -i
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:natecarlson/maven3
apt-get update
apt-get install ant debhelper openjdk-6-jdk tomcat6 libws-commons-util-java genisoimage python-mysqldb libcommons-codec-java libcommons-httpclient-java liblog4j1.2-java maven3
ln -s /usr/bin/mvn3 /usr/bin/mvn

Récupération des sources

wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.asc
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.md5
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.sha

Vérifier les sources

wget http://www.eu.apache.org/dist/cloudstack/KEYS
gpg --import KEYS
gpg --verify apache-cloudstack-4.2.1-src.tar.bz2.asc
gpg --print-md MD5 apache-cloudstack-4.2.1-src.tar.bz2 | diff - apache-cloudstack-4.2.1-src.tar.bz2.md5
gpg --print-md SHA512 apache-cloudstack-4.2.1-src.tar.bz2 | diff - apache-cloudstack-4.2.1-src.tar.bz2.sha

Extraire les sources

tar -jxvf apache-cloudstack-4.2.1-src.tar.bz2

Résoudre les dépendances

cd apache-cloudstack-4.2.1-src/
mvn3 -P deps

Installer les dépendances non librement disponibles ou avec une licence incompatible (avec celle d’Apache)

Heureusement elles sont pour la plus part dans le repository Github vogxn/cloudstack-nonoss ou sur le site http://zooi.widodh.nl/cloudstack/build-dep/

cd deps
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-iControl.jar -O cloud-iControl.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-manageontap.jar -O manageontap.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-vim.jar -O vim.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-vim25.jar -O vim25_51.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-apputils.jar -O apputils.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-netscaler-sdx.jar -O cloud-netscaler-sdx.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-netscaler.jar -O cloud-netscaler.jar
./install-non-oss.sh

Nota Bene
Vous pouvez devez récupérer les jar Netscaler et VMware chez leur éditeur respectif.

  • Vmware 5.1 SDK : https://my.vmware.com/group/vmware/get-download?downloadGroup=VSP510-WEBSDK-510
  • Citrix Netscaler : http://community.citrix.com/download/attachments/37847122/cloud-netscaler-jars.zip

Construction du paquet

mvn3 clean install -P deps -Dnonoss; export ACS_BUILD_OPTS="-Dnonoss"; dpkg-buildpackage -us -uc

El là ça plante.

[INFO] Apache CloudStack Console Proxy Plugin ............ SUCCESS [1.490s]
[INFO] Apache CloudStack AWS API Bridge .................. FAILURE [3:22.968s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9:14.630s
[INFO] Finished at: Mon Jan 06 20:08:40 CET 2014
[INFO] Final Memory: 57M/269M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project cloud-awsapi: Compilation failure: Compilation failure:
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/axis2/mex/1.5.4/mex-1.5.4-impl.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/ws/commons/axiom/axiom-dom/1.2.10/axiom-dom-1.2.10.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/opensaml/opensaml1/1.1/opensaml1-1.1.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/commons-lang/commons-lang/2.3/commons-lang-2.3.jar; error in opening zip file
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :cloud-awsapi
make: *** [build-indep-stamp] Error 1
dpkg-buildpackage: error: debian/rules build gave error exit status 2

En effet certaines dépendances pour la compilation de l’AWSAPI sont corrompues.
Une tentative de « unzip -l » d’un jar nous le montre.

unzip -l /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar
Archive:  /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar or
        /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar.zip, and cannot find /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.
5.4.jar.ZIP, period.

Pour résoudre ce problème, voici un script bash.

cd ${HOME}/.m2/repository/org/apache/axis2/mex/1.5.4/ && \
wget http://repo1.maven.org/maven2/org/apache/axis2/mex/1.5.4/mex-1.5.4-impl.jar -O mex-1.5.4-impl.jar

cd ${HOME}/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/ && \
wget http://repo1.maven.org/maven2/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar -O axis2-mtompolicy-1.5.4.jar

cd ${HOME}/.m2/repository/org/apache/ws/commons/axiom/axiom-dom/1.2.10 && \
wget http://repo1.maven.org/maven2/org/apache/ws/commons/axiom/axiom-dom/1.2.10/axiom-dom-1.2.10.jar -O axiom-dom-1.2.10.jar

cd ${HOME}/.m2/repository/org/opensaml/opensaml1/1.1 && \
wget http://repo1.maven.org/maven2/org/opensaml/opensaml/1.1/opensaml-1.1.jar -O opensaml1-1.1.jar

cd ${HOME}/.m2/repository/commons-lang/commons-lang/2.3 && \
wget http://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.jar -O commons-lang-2.3.jar

cd ${HOME}/.m2/repository/bouncycastle/bcprov-jdk14/140 && \
wget http://repo1.maven.org/maven2/bouncycastle/bcprov-jdk14/140/bcprov-jdk14-140.jar -O bcprov-jdk14-140.jar

Ensuite il est important de lancer la commande « dpkg-buildpackage » comme ceci :

mvn3 clean install -P deps -Dnonoss; export ACS_BUILD_OPTS="-Dnonoss"; dpkg-buildpackage -uc -us

Cela nous évite de modifier le fichier debian/rules.
C’est aussi pour cette raison que je crée un lien symbolique « ln -s /usr/bin/mvn3 /usr/bin/mvn ».

Le Finale

Quelques jolis paquets Cloudstack

ls -l *.deb
-rw-r--r-- 1 hugues hugues  40439660 Jan  7 09:43 cloudstack-agent_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  78176924 Jan  7 09:43 cloudstack-awsapi_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues     51964 Jan  7 09:43 cloudstack-cli_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  45586934 Jan  7 09:42 cloudstack-common_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues     51948 Jan  7 09:43 cloudstack-docs_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues 158098852 Jan  7 09:43 cloudstack-management_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  40896288 Jan  7 09:43 cloudstack-usage_4.2.1-snapshot_all.deb