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