You are on page 1of 78

CLOUD COMPUTING

Yohan PARENT, Maxime LEMAUX Cyprien FORTINA, Hyacinthe CARTIAUX

LP ASRALL Anne universitaire 2010-2011

Universit Nancy 2 IUT Nancy-Charlemagne

Nous remercions Lucas Nussbaum, notre tuteur, et Sbastien Badia.


Yohan pour les cafs et sa connexion Internet et Hyacinthe pour les croissants. Ainsi que Maxime et Cyprien pour leur bonne humeur...

Table des matires


1. Introduction
1.1. Le Cloud Computing . . . . . . . 1.2. Grid 5000 . . . . . . . . . . . . . 1.2.1. Infrastructure des sites . . 1.2.2. Environnement logiciel . . 1.2.3. Rseau . . . . . . . . . . . 1.3. Objectifs et rpartition du travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 6 . 6 . 8 . 9 . 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2. Eucalyptus

2.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Composants d'Eucalyptus . . . . . . . . . . . . . . . . 2.1.2. Un fonctionnement modulaire . . . . . . . . . . . . . . 2.1.3. Interface Web . . . . . . . . . . . . . . . . . . . . . . . 2.2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1. La conguration matrielle recommande . . . . . . . 2.2.2. Installation fonde sur Ubuntu Enterprise Cloud . . . 2.2.3. Installation partir des paquets . . . . . . . . . . . . 2.2.4. Installation partir des sources . . . . . . . . . . . . . 2.3. Problmes rencontrs lors de l'installation et la conguration 3.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Aperu des partenaires d'OpenStack . . . . . . . . . . 3.1.2. Composants d'OpenStack . . . . . . . . . . . . . . . . 3.2. OpenStack Nova Compute . . . . . . . . . . . . . . . . . . . . 3.2.1. Prrequis . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2. Version actuelle et versions venir de Nova Compute 3.2.3. Installation de Nova Compute sur un seul serveur . . . 3.2.4. Installation sur plusieurs serveurs manuellement . . . 3.2.5. Installation scripte sur plusieurs serveurs . . . . . . . 3.3. Problmes rencontrs . . . . . . . . . . . . . . . . . . . . . . .

12

12 12 14 15 16 16 16 20 21 22

3. OpenStack

24

24 25 25 26 26 27 27 28 32 32 34 35 38 38 39 39 40 40 41 41 42 42 43 43 43 43 43 44 44

4. OpenNebula

4.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1. Installation du Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2. Conguration du Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3. Installation d'un nud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.4. Conguration d'un nud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.5. Problmes rencontrs pour l'installation et la conguration des environnements 4.4. Cration de machines virtuelles et chiers de dnition . . . . . . . . . . . . . . . . . . 4.4.1. Image disque de machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2. Fichier de dnition de machine virtuelle . . . . . . . . . . . . . . . . . . . . . 4.4.3. Fichier de dnition de rseau virtuel . . . . . . . . . . . . . . . . . . . . . . . 4.5. Dploiement automatis sur Grid 5000 . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1. oargridsubON.sh : rservation de nuds sur plusieurs sites . . . . . . . . . . . 4.5.2. kadeployON.sh : dploiement avec kadeploy3 sur les machines rserves . . . . 4.5.3. pingON.sh : vrication de la connexion rseau des machines dployes . . . . . 4.5.4. congureON.sh : conguration automatique du frontend OpenNebula . . . . . 4.5.5. creationvmON.rb : cration des chiers de base pour une VM . . . . . . . . . . 4.5.6. deployvmON.sh : dploiement des machines virtuelles . . . . . . . . . . . . . .

34

5. Comparatif
3

45

6. Conclusion 7. Bibliographie A. Annexe : Diagramme de Gantt B. Annexe : Commandes de base pour la soumission de job
B.1. B.2. B.3. B.4. B.5. B.6. tat des cluster . . . . . . . . . . . . . Informations sur les nuds . . . . . . Information sur les jobs . . . . . . . . Soumission de job . . . . . . . . . . . Autres commandes . . . . . . . . . . . Utiliser plusieurs clusters (oargridsub) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47 48 49 50
50 50 50 50 51 51 52 52 52 52

C. Annexe : Dployer et enregistrer un environnement avec kadeploy3


C.1. C.2. C.3. C.4.

Rserver des noeuds pour le dploiement . . . . . . . . . . . . . . . . . . . . . . . . kaenv3 : gestion des environnements kadeploy . . . . . . . . . . . . . . . . . . . . . kadeploy3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . kaenv3 : Crer un nouvel environnement partir d'un environnement personnalis

52

D. Annexe : Scripts de synchronisation pour Grid 5000

D.1. sendsshkeys.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 D.2. synctosite.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

54

E. Annexe : Conguration des environnements OpenNebula

E.1. Conguration rseau : /etc/rc.local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 E.2. /etc/rc.bindhome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 F.1. F.2. F.3. F.4. F.5. F.6. F.7. oargridsubON.sh kadeployON.sh . pingON.sh . . . . congureON.sh . creationvmON.rb init.sh . . . . . . deployvmON.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

F. Annexe : Scripts de dploiement automatis pour OpenNebula

57

57 57 57 58 58 59 60

G. Annexe : Scripts d'installation de Nova

G.1. Script d'installation sur un seul serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 G.2. Script d'installation du contrleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 G.3. Script d'installation du nud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

61

1. Introduction
Le Cloud Computing (informatique dans le nuage) est une technique permettant de grer des ressources (serveurs) et d'adapter trs rapidement une infrastructure des variations de charge de manire totalement transparente pour l'administrateur et les utilisateurs. Dans le nuage, le client n'a pas connaissance de la complexit de la gestion matrielle derrire son environnement logiciel.

Figure 1.1.: Un nuage, source Wikimedia Commons.


Notre projet vise dployer des solutions de Cloud Computing sur plusieurs sites de Grid 5000.

1.1. Le Cloud Computing


Le Cloud Computing est un concept :  dporter sur une infrastructure distante les applications et les donnes ;  abstraire la gestion de l'infrastructure et des ressources matrielles aux clients. Il existe plusieurs types de cloud computing classs selon leur utilisation :  SaaS : Software as a Service, le fournisseur maintient des applications que le client utilis de manire totalement transparente. Par exemple, les applications Google (doc, reader, gmail, etc).  PaaS : Platform as a Service, le client maintient uniquement ses applications alors que le fournisseur maintient les serveurs et l'infrastructure logicielle (bases de donnes, scurit, stockage). Par exemple : Microsoft Azure.  IaaS : Infrastructure as a Service. On met disposition des ressources composes par une infrastructure virtualise, dont la plus grande partie est localise distance dans des Datacenters. Notre projet tuteur porte sur cette dernire forme de cloud : l'IaaS. Un cloud (ou nuage) dsigne un ensemble de serveurs de virtualisation interconnects. L'apport des solutions de cloud provient de l' lasticit , il s'agit de simplier la gestion d'un parc de serveurs de virtualisation orant des ressources matrielles, et de permettre d'installer, de congurer et de migrer les machines virtuelles la vole en fonction des besoins. Nous allons comparer plusieurs solutions de cloud sous GNU/Linux :  Eucalyptus  Open Nebula  Open Stack

Ces solutions n'ont d'intrt que pour une infrastructure de taille importante (plusieurs dizaines de serveurs). Nous avons ralis nos exprimentations sur Grid 5000.

1.2. Grid 5000


Pour raliser notre projet tuteur, nous utilisons la plate-forme Grid 5000 1 . Grid 5000 est une infrastructure distribue sur 9 sites en France, pour la recherche dans les systmes parallliss grande chelle et les systmes distribus. Grid 5000 vise a runir 5000 processeurs sur 9 sites en France. Cette plate-forme est utilise dans le cadre de projets exprimentaux, dans le domaine de la recherche dans les systmes informatiques distribus et grande chelle.

Figure 1.2.: Architecture de Grid 5000, source grid5000.fr

1.2.1. Infrastructure des sites


Chaque site hberge :  un frontend, serveur permettant d'accder aux clusters disponibles ;  un serveur de donnes, pour centraliser les donnes utilisateurs ;  plusieurs clusters, c'est--dire des grappes de machines homognes, appeles nuds (nodes).

1. Site de grid5000, prsentation, documentation, tutoriels, etc

Figure 1.3.: Vue trs simplie de Grid 5000


L'utilisateur de Grid 5000 accde chaque site par son frontend en utilisant SSH. Sur tous les serveurs du site, un rpertoire home, local chaque site, est mont avec NFS 2 . A partir du frontend, il est possible d'accder aux machines des clusters en eectuant des rservations. Nous avons pu visiter la salle serveurs du site de Nancy situe au Loria. Notre tuteur, M. Lucas Nussbaum et M. Sbatien Badia, nous ont fait une prsentation de la plate-forme (matriel utilis, connexions rseau, administration). Une description dtaille du site de Nancy est disponible sur le site de Grid 5000.

2. NFS : systme de chiers en rseau permettant de partager des donnes principalement entre systmes UNIX.

Figure 1.4.: Armoires de serveurs de Nancy

Figure 1.5.: Quelques serveurs du site de Nancy

1.2.2. Environnement logiciel


Tous les serveurs de Grid 5000 fonctionnent sous Debian GNU/Linux. A partir du frontend, l'utilisateur peut rserver des machines en utilisant la suite de logiciels OAR ddie la gestion de ressources de clusters, et dployer ses propres images de systmes l'aide des outils kadeploy. Il y a deux types de rservation :  par dfaut, pour des besoins de calcul avec OpenMPI ;  pour le dploiement d'environnements (deploy ). Dans le cadre de notre projet, nous eectuons uniquement des rservations de type deploy. La commande oarsub nous permet de rserver des nuds sur un site (en crant un job). Voici un exemple d'utilisation d'oarsub, pour rserver 10 nuds pendant 3 heures en dploiement.
$ oarsub I t deploy l nodes =5, w a l l t i m e=3

Aprs rservation, oarsub ouvre un shell dans lequel des variables d'environnements sont dnies comme $OAR_FILE_NODE, qui est le nom d'un chier avec la liste des nuds rservs, ou $OAR_JOB_ID.
$ c a t $OAR_FILE_NODES | s o r t u paramount 24. r e n n e s . g r i d 5 0 0 0 . f r paramount 8. r e n n e s . g r i d 5 0 0 0 . f r paramount 9. r e n n e s . g r i d 5 0 0 0 . f r p a r a p l u i e 19. r e n n e s . g r i d 5 0 0 0 . f r p a r a p l u i e 26. r e n n e s . g r i d 5 0 0 0 . f r $ echo $OAR_JOB_ID 380540

Pour supprimer le job et librer les nuds, on utilise la commande oardel.


$ o a r d e l 380540

Kadeploy permet de dployer des environnements personnaliss sur les noeuds rservs l'aide d'une commande simple. Lorsque la rservation est termine, le noeud est automatiquement restaur avec un environnement Debian. Pour dployer un environnement sur tous les noeuds rservs, il faut utiliser la commande kadeploy3
$ kadeploy3 e lenny x64base f $OAR_FILE_NODES

1.2.3. Rseau
Les sites et toutes les machines qu'ils comprennent sont interconnects par RENATER 3 en 10Gbits/s. De plus, chaque site peut disposer de plusieurs rseaux locaux 4 :  rseau en ethernet, 1 Gb/s  rseaux hautes performances (Inniband 20 Gb/s ou 10 Gb/s, et Myrinet 20 Gb/s)

Table 1.1.: Rseau de production de chaque site


Site Bordeaux Grenoble Lille Lyon Nancy Orsay Rennes Toulouse Sophia DAS-3 Reims Luxembourg Porto Alegre Orlans Rseau de production 172.16.0.0/20 172.16.16.0/20 172.16.32.0/20 172.16.48.0/20 172.16.64.0/20 172.16.80.0/20 172.16.96.0/20 172.16.112.0/20 172.16.128.0/20 172.16.144.0/20 172.16.160.0/20 172.16.176.0/20 172.16.192.0/20 172.16.208.0/20

Selon le site, le serveur dhcp accessible par l'interface rseau de production attribuera une adresse comprise dans les rseaux ci-dessus.

Table 1.2.: Rseau pour les machines virtuelles sur chaque site
Site Bordeaux VPN nets Lille Lyon Nancy Orsay I Orsay II Rennes Toulouse Sophia DAS-3 Luxembourg Porto Alegre Grenoble Rseau 10.128.0.0/14 10.132.0.0/14 10.136.0.0/14 10.140.0.0/14 10.144.0.0/14 10.148.0.0/14 10.152.0.0/14 10.156.0.0/14 10.160.0.0/14 10.164.0.0/14 10.168.0.0/14 10.172.0.0/14 10.176.0.0/14 10.180.0.0/14 Passerelle 10.131.255.254 n/a 10.139.255.254 10.143.255.254 10.147.255.254 10.151.255.254 10.155.255.254 10.159.255.254 10.163.255.254 10.167.255.254 10.171.255.254 10.175.255.254 10.179.255.254 10.183.255.254 DHCP 10.131.255.253 n/a 10.139.255.253 10.143.255.253 10.147.255.253 10.151.255.253 10.155.255.253 10.159.255.253 10.163.255.253 10.167.255.253 10.171.255.253 10.175.255.253 10.179.255.253 10.183.255.253

Chaque site dispose donc de classes d'adresses IP rserves aux machines virtuelles, celles ci sont routables sur le rseau de grid 5000. De plus, chaque site dispose d'une passerelle avec le nom d'hte virtual-gw et d'un serveur dhcp.
3. grid5000.fr : Network 4. grid5000.fr : Network interlink

Pour vrier que les IP de machines virtuelles sont bien routes, il est possible de tester uniquement les passerelles. Le script suivant eectue ce test pour tous les sites.
1 #! / bin / bash 2 3 f o r i i n ` c a t l i s t e s _ d e s _ s i t e s ` ; do 4 ping c 1 v i r t u a l gw . $ i > / dev / n u l l 5 i f [ $ ? == 0 ] ; then 6 echo $ i >> s i t e s v i r t u a l gw 7 echo $ i : OK 8 else 9 echo $ i : KO 10 fi 11 done

Pour utiliser le serveur DHCP 5 et obtenir automatiquement une IP pour une machine virtuelle, il faut que l'adresse mac de l'interface rseau soit prxe par 00 :16 :3e. A l'avenir, grid5000.fr : KaVLAN, outil de gestion de VLAN sur Grid 5000 sera disponible sur tous les sites de Grid 5000 pour permettre de rserver des IP et d'utiliser simplement des VLAN. Cette solution sera alors privilgier pour simplier la conguration rseau et le dploiement d'un cloud.

1.3. Objectifs et rpartition du travail


Les objectifs l'issue du projet sont de produire :  des images d'environnements, des scripts et documentations pour dployer rapidement des solutions de cloud sur Grid 5000 ;  des expriences grande chelle  des retours d'expriences An de travailler plus ecacement, nous avons mis en place de nouveaux outils en combinant les outils Google Code et Google Groups :  un dpt SVN ;  un wiki ;  une mailing list ;  un rpertoire partag via Dropbox. A Nous avons galement appris L TEXpour rdiger notre rapport.

Figure 1.6.: Notre projet sur Google Code

5. grid5000.fr : Virtual Network Conguration (DHCP)

10

Figure 1.7.: Diagramme de Gantt de l'organisation de notre projet


Lors de la premire semaine, nous avons mis en place nos outils de travail collaboratif, et commenc dcouvrir l'environnement oert par Grid 5000 en suivant des tutoriels. Nous avons galement congur nos machines (SSH) pour tre plus ecace. Pour cette tche, nous avons crit quelques scripts, un premier pour copier nos cls ssh d'un site vers tous les autres, et un deuxime pour synchroniser le rpertoire personne (/home/user/) vers d'autres sites. Ces scripts sont en annexe. Arriv la deuxime semaine, nous nous sommes partags le travail quitablement : Cyprien et Yohan se sont occups de Eucalyptus et OpenStack, Maxime et Hyacinthe se sont concentrs sur OpenNebula. Les premiers tests de Eucalyptus ont t eectus sur des machines en salle 501, et un environnement minimal Ubuntu Lucid a t cr sur le site de Nancy de Grid 5000. Cet environnement a servi de base pour le dploiement de Eucalyptus et OpenNebula. Pendant la 3me semaine, nous avons cr une image disque contenant une installation de Debian Squeeze l'aide de qemu, ainsi que les environnements pour dployer Eucalyptus et OpenNebula sur Grid 5000. Nous dployons pour la premire fois des machines virtuelles ttylinux sur un cloud OpenNebula, mais nous rencontrons des problmes de conguration rseau. De plus, les environnements ne sont pas encore totalement fonctionnels. Dans la 4me semaine, Yohan et Cyprien ont recr une image de Ubuntu Lucid Enterprise Cloud depuis un accs physique aux machines du site de Nancy en esprant rsoudre leurs problmes. Du cot de OpenNebula, le travail se concentre sur la conguration rseau (bridge et DHCP pour les machines virtuelles) et l'amlioration des environnements (problme d'espace disque disponible dans la partition racine des nuds pour les images de machines virtuelles). La 5me semaine est celle des vacances, Yohan et Cyprien arrtent de travailler sur Eucalyptus et se lancent sur OpenStack. Nous commenons le rapport dans ses grands axes pour se faire une ide du contenu de ce dernier. Pendant la 6me semaine, Yohan et Cyprien travaillent toujours corriger les problmes de conguration rseau pour les machines virtuelles sous OpenStack. L'autre groupe nalise les environnements pour OpenNebula, et commence crire des scripts pour automatiser le dploiement d'un cloud sur plusieurs sites de Grid 5000 et la conguration rseau des machines virtuelles. Lors de la 7me semaine, les problmes concernant OpenStack ne sont toujours pas rgls (apparemment lis la conguration rseau) et nous nalisons notre travail sur OpenNebula. Les principaux problmes viennent de notre manque de prvision par rapport l'htrognit de Grid 5000. En eet, OpenNebula se base par dfaut sur la technologie KVM qui ncessite un support matriel de la virtualisation, or le support n'est pas activ sur tous les clusters. La 8me semaine a t essentiellement ddie l'criture du rapport et la ralisation de la prsentation.

11

2. Eucalyptus

2.1. Introduction
Eucalyptus est un ensemble d'outil disponible sous Licence BSD 1 qui permet de mettre en place une infrastructure de type cloud computing sur une grappe de serveurs. Cet outil est donc open source et a t dvelopp par une quipe de chercheurs de l'universit de Californie partir de 2007. Son nom fait rfrence l'acronyme  Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems  qui peut se traduire en  Utilitaire d'Architecture informatique lastique pour relier vos programmes des systmes fonctionnels . Depuis 2009, il est intgr dans la distribution GNU/Linux Ubuntu 9.04 Jaunty Jackalope. Eucalyptus est devenu trs populaire et est considr comme l'une des principales solutions open-source pour la mise en place de systmes de type cloud. Cependant, il est un peu dlaiss actuellement au prot de la solution OpenStack. Il existe galement un packaging appel Ubuntu Enterprise Cloud, UEC en abrg, ralis par Canonical et fourni avec Ubuntu Server Edition. UEC comprend Eucalyptus avec un certain nombre d'autres logiciels open source pour faciliter l'installation et la conguration de ce genre d'architecture.

2.1.1. Composants d'Eucalyptus


Une conguration de cloud fonde sur Eucalyptus se compose de cinq types de composants principaux. chines virtuelles qui sont dployes. Les machines virtuelles fonctionnant sur l'hyperviseur sont appeles des instances. Eucalyptus permet aussi d'utiliser d'autres types d'hyperviseurs comme XEN 3 , mais Canonical a fait le choix de privilgier KVM. Le contrleur de nud fonctionne sur chaque nud et est charg de vrier le cycle de vie des instances en cours d'excution sur le nud. Il interagit avec le systme d'exploitation et l'hyperviseur en cours d'excution sur le nud d'un ct et le contrleur de cluster (CC) de l'autre ct. Le contrleur interroge le systme d'exploitation s'excutant sur le nud de an de dcouvrir les ressources physiques du nud (le nombre de curs, la taille de la mmoire, l'espace disque disponible et aussi de s'informer sur l'tat des instances VM en cours d'excution sur le nud et propage ces donnes au contrleur de cluster.)
1. La licence BSD est une licence libre utilise pour la distribution de logiciels.http://www.freebsd.org/copyright/license.

Contrleur de nud (NC) Le rle du nud est d'hberger KVM 2 , il sert ainsi d'hyperviseur pour les ma-

2. KVM (Kernel-based Virtual Machine) est une solution de virtualisation libre pour Linux. Elle fonctionne sur les architectures x86 disposant des technologies Intel VT ou AMD SVM (AMD-V). 3. Xen est un logiciel libre de virtualisation, plus prcisment un hyperviseur de machine virtuelle. Son dveloppement a dbut sous la forme d'un projet de recherche de l'universit de Cambridge au Royaume-Uni. La socit XenSource a par la suite t cre et en a poursuivi le dveloppement. Xen permet de faire fonctionner plusieurs systmes d'exploitation virtuels (invits) sur une seule machine hte.

html/

12

Contrleur de cluster (CC) Ce contrleur sert dployer et grer les dirents contrleurs de nuds. Il sert
galement grer la mise en place du rseau entre les instances des dirents nuds. C'est lui qui communique l'ensemble des informations au contrleur du cloud. Il a 4 fonctions principales :  Il reoit les requtes de dploiement des instances du contrleur de cloud .  Il dcide sur quel contrleur de nud les instances seront dployes.  Il contrle le rseau virtuel entre les instances.  Il collecte les informations des contrleurs de nuds enregistrs et les rapporte au contrleur de cluster.

Contrleur de stockage Walrus (WS3) Il est appel : Walrus Storage Controller (WS3). WS3 fournit un service de stockage persistant simple l'aide des API REST 4 et SOAP 5 et compatible avec les API S3. 6 Il assure 3 fonctions principales :  Le stockage des images de machines virtuelles.  Le stockage des images prises en fonctionnement un instant prcis.  Stocker des chiers et les service en utilisant l'API S3. En fait, WS3 peut tre considr comme un simple systme de stockage de chiers. Contrleur de stockage (SC) Ce contrleur fournit un service de stockage persistant pour les instances. C'est similaire au service Elastic Block Storage (EBS) 7  d'Amazon. Il a donc 3 fonctions essentielles :  La cration de dispositifs EBS persistants.  Fournir le systme de stockage de blocs aux instances.  Autoriser la cration d'images des volumes pour permettre leurs sauvegardes. Contrleur du cloud (CLC) C'est un programme Java qui sert de Frontend l'infrastructure. Il ore, d'un ct une interface de gestion et de contrle conforme aux services ec2/s3, une vritable bote outils complte, et de l'autre ct, permet d'interagir avec les autres composants de l'infrastructure. Il est galement possible d'avoir une interface web qui permet aux utilisateurs de grer certains aspects de l'infrastructure. Il a 3 rles principaux :  Surveiller la disponibilit des ressources sur les direntes composantes de l'infrastructure du cloud.  L'arbitrage des ressources - C'est dire dcider quel cluster sera utilis pour la virtualisation des instances.  Monitorer les instances en cours d'excution. En rsum, le CLC a une connaissance approfondie de la disponibilit et l'utilisation des ressources dans le nuage et permet de surveiller son tat.
L'exemple d'une architecture avec l'ensemble des composants d'Eucalyptus :

4. REST (Representational State Transfer) est une manire de construire une application pour les systmes distribus comme le World Wide Web. Le terme a t invent par Roy Fielding en 2000. REST n'est pas un protocole ou un format, c'est un style d'architecture, c'est le style architectural original du Web. 5. SOAP (ancien acronyme de Simple Object Access Protocol) est un protocole de RPC orient objet bti sur XML. Il permet la transmission de messages entre objets distants, ce qui veut dire qu'il autorise un objet invoquer des mthodes d'objets physiquement situs sur un autre serveur. Le transfert se fait le plus souvent l'aide du protocole HTTP, mais peut galement se faire par un autre protocole, comme SMTP. 6. Simple Storage Service, un service de stockage via service web d'Amazon. Amazon S3 est un service de stockage pour Internet. Il est pens pour simplier l'accs l'informatique l'chelle du web, pour les dveloppeurs. Amazon S3 ore une simple interface de services web utiliser pour stocker et rcuprer n'importe quelle quantit de donnes, tout moment, de n'importe o sur le web. Il permet aux dveloppeurs d'accder la mme infrastructure hautement volutive, able, sre, rapide, et peu coteuse qu'Amazon utilise pour faire fonctionner son propre rseau mondial de sites. Le service vise maximiser les avantages d'chelle et les transmettre aux dveloppeurs. 7. Le stockage extensible (Amazon EBS) fournit des volumes de stockage en mode bloc utiliser avec les instances AmazonEC2. Les volumes EBS Amazon sont des stockages hors instances qui persistent indpendamment de la vie d'une instance. Amazon Elastic Block Store fournit des volumes de stockage hautement disponible et able qui peuvent tre annexs une instance Amazon EC2 en cours d'excution et exposs comme un priphrique au sein de l'instance. EBS Amazon est spcialement adapt aux applications qui ncessitent une base de donnes, un systme de chier ou un accs un stockage brut en mode bloc.

13

Figure 2.1.: Composants Eucalyptus, Eucalyptus Beginner's Guide - UEC Edition.

2.1.2. Un fonctionnement modulaire


Ce qui fait la force d'une architecture fonde sur Eucalyptus est sa grande modularit. En eet, les composants Eucalyptus ont des interfaces bien dnies (via WSDL 8 , car se sont des services web) et peuvent donc tre facilement changs pour des composants personnaliss. Eucalyptus est exible et peut tre install sur une conguration trs minime. Pourtant, il peut tre install sur des milliers de curs et des traoctets de stockage. Et il peut le faire comme une superposition une infrastructure existante. Le fonctionnement en sous-ensemble qui forme chacun un cluster distinct permet de faciliter son dploiement sur une infrastructure multi-sites comme c'est le cas pour le Grid5000. L'ensemble tant ensuite gr au niveau du contrleur du cloud, le Walrus assurant la communication avec les contrleurs de stockages. Ce fonctionnement est parfaitement illustr sur le schma ci-dessous.

8. Le WSDL dcrit une Interface publique d'accs un Service Web, notamment dans le cadre d'architectures de type SOA (Service Oriented Architecture). C'est une description fonde sur le XML qui indique  comment communiquer pour utiliser le service 

14

Figure 2.2.: Architecture Eucalyptus, Documentation ociel Eucalyptus.


Sur le schma, on constate que le contrleur de cloud (CLC) et le Walrus sont des composants de haut niveau, avec un de chaque dans une installation de cloud computing. Ensuite les autres composants sont rparties sur les dirents clusters que l'on veut utiliser. Il existe 3 faons principales de dployer Eucalyptus :  Installation partir des sources.  Installation partir des paquets.  Installation l'aide de la distribution Ubuntu Enterprise Cloud. Nous avons test ces 3 types d'installation et nous allons vous les dtailler dans la partie suivante.

2.1.3. Interface Web


Un des gros point fort d'Eucalyptus, c'est qu'il inclut une interface web pour la gestion des utilisateurs, du cloud et des machines virtuelles. Cette interface est trs simple d'utilisation et intuitive et nous avons pu la tester en salle ASRALL. Sur Grid5000 nous n'avons pas pu l'utiliser car elle est hberge sur le contrleur de cloud, que nous n'arrivons pas contacter comme prcis plus loin dans la partie "Problme rencontrs", mais le service web est pourtant fonctionnel car nous avons install le navigateur Lynx pour nous connecter l'interface web et cela fonctionne.

15

Figure 2.3.: Source :UEC PackageInstallhttps://help.ubuntu.com/community/UEC/PackageInstall

2.2. Installation
2.2.1. La conguration matrielle recommande
L'installation des composants suivants :  le contrleur de cloud (clc)  le contrleur de cluster (cc)  le walrus  le contrleur de stockage (sc) demande au minimum la conguration matrielle suivante :  CPU 1GHz  RAM 2GB  Disque Dur 5400rpm IDE  Espace Disque 40GB  Rseau 100Mbps Les nuds demandent quant eux, la conguration minimum suivante :  CPU VT extensions  RAM 1GB  Disque Dur 5400rpm IDE  Espace Disque 40GB  Rseau 100Mbps Le point cl est surtout le support de la virtualisation puisque ce sont eux qui accueilleront les instances des machines virtuelles.

2.2.2. Installation fonde sur Ubuntu Enterprise Cloud


La faon la plus simple d'installer Eucalyptus est d'utiliser la distribution Ubuntu Server qui intgre de base une srie d'outils dont Eucalyptus et qui porte le nom : Ubuntu Enterprise Cloud (UEC). La socit de Mark Shuttleworth, Canonical LTD, a dvelopp une srie de services destination des professionnels an que ces derniers dveloppent leur solution d'informatique distribue. Baptis Ubuntu Enterprise Cloud (UEC), cette solution se base sur la technologie open source d'Eucalyptus qui permet aux entreprises de dployer leur propre solution de cloud computing tout en communicant avec l'interface de programmation

16

d'Amazon Elastic Compute Cloud (EC2). En intgrant UEC directement au sein d'Ubuntu Server Edition, Canonical devient le premier diteur proposer une solution de Linux professionnelle qui s'ouvre sur la programmation sur nuages de serveur. UEC se complte d'outils permettant de contrler, de dployer et de grer ces serveurs, l'objectif principal de Canonical est de faciliter au maximum le dploiement des solutions de cloud computing. Nous avons en eet constat la facilit d'installation d'Eucalyptus grce cette distribution. La premire tape consiste simplement tlcharger l'image ISO 9 de Ubuntu Server sur le site ociel Ubuntu. Ensuite, il sut de se laisser guider par l'interface d'installation. L'installation est illustre par les captures d'cran suivantes, elle se rsume en 5 tapes :  Slection "Installation Ubuntu Enterprise Cloud".  Choix de l'adresse IP du contrleur de cloud.  Choix des dirents composants installer sur la mme machine. (Pour le test, nous n'avons utilis que 2 machines).  Choix du nom du cluster pour le contrleur de cluster.  Choix d'une plage d'adresses IP pour le rseau des instances.

Figure 2.4.: Installation UEC - cran d'accueil, Documentation ociel Eucalyptus.

9. Une image ISO est une image d'un disque (CD, DVD ou disque dur) sous forme de chier, crer avec un logiciel de gravure.

17

Figure 2.5.: Installation UEC - tape 1, Documentation ociel Eucalyptus.

Figure 2.6.: Installation UEC - tape 2, Documentation ociel Eucalyptus.

18

Figure 2.7.: Installation UEC - tape 3, Documentation ociel Eucalyptus.

Figure 2.8.: Installation UEC - tape 4, Documentation ociel Eucalyptus.


Aprs avoir install le contrleur de cloud, il sut de refaire la mme installation d'Ubuntu server sur chaque contrleur de nud. A l'exception, qu'il sura l'tape 2, de choisir "Node Controller". L'installation a t teste sur deux machines en salle ASRALL et fonctionnait parfaitement, ce qui montre qu'Eucalyptus est utilisable tant que nous ne sommes pas sur une architecture particulire et que nous suivons la lettre l'installation classique. Les choses se sont nettement compliques quand nous sommes passs la phase d'exprimentation sur Grid 5000. Nous ne dtaillerons pas ici la conguration puisque ce sera la mme mthode que sur Grid 5000, sur laquelle nous allons revenir plus en dtail an de prciser les dicults rencontres.

19

2.2.3. Installation partir des paquets


Cette installation consiste partir de l'environnement Ubuntu Server 10.04 LTS Ludic Lynx d'installer les dirents paquets qui permettent l'installation et l'utilisation d'Eucalyptus. Nous avons galement test cette installation en local de la mme manire que prcdemment mais nous ne dtaillerons que l'installation sur Grid 5000, ce qui tait l'objectif principal du projet. Nous commenons par dployer l'environnement Ubuntu Server. Puis, nous mettons jour le systme pour partir de la version la plus rcente sur l'ensemble des machines que nous voulons utiliser pour constituer notre cloud. La premire chose penser est que si le noyau est mis jour et que nous voulons utiliser la dernire version, il faut redmarrer l'environnement, le soucis, c'est que le chier de description de ce dernier contient en dur le nom du noyau charger, pour remdier cela, nous avons utilis un lien symbolique, ainsi nous pouvions facilement utiliser et donc booter sur le noyau mis jour.
$ sudo apt g e t update $ sudo apt g e t d i s t upgrade

Sur le Front end Installation des paquets ncessaires eucalyptus-cc et eucalyptus-cloud :


$ sudo apt g e t i n s t a l l e u c a l y p t u s cloud e u c a l y p t u s cc e u c a l y p t u s walrus e u c a l y p t u s s c

Au cours de cette tape, nous rpondons quelques questions lors de l'installation des dirents paquets, comme le nom du cluster et la plage d'adresse Ip du rseau.

Sur les nuds Le paquet eucalyptus-nc est ncessaire.


$ sudo apt g e t i n s t a l l e u c a l y p t u s nc

C'est la seule tape d'installation pour les nuds. Il convient alors d'eectuer la conguration du bridge l'aide du script suivant :
1 2 3 4 5 6 7 8 9 10 11 i n t e r f a c e=eth0 b r i d g e=br0 sudo sed i " s /^ i f a c e $ i n t e r f a c e i n e t \ ( . \ ) $/ i f a c e $ i n t e r f a c e i n e t manual\n\ nauto br0 \ n i f a c e $ b r i d g e i n e t \1/" / e t c / network / i n t e r f a c e s sudo t e e a / e t c / network / i n t e r f a c e s <<EOF bridge_ports $ i n t e r f a c e bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp o f f EOF sudo / e t c / i n i t . d/ networking r e s t a r t

Enn, par dfaut, un utilisateur eucalyptus est cr sans mot de passe, il faut donc lui changer celui-ci de la manire suivante :
$ sudo passwd e u c a l y p t u s

Cela va permettre de s'y connecter du Front end pour y installer les cls SSH.
$ sudo u e u c a l y p t u s ssh copy i d i ~ e u c a l y p t u s / . s s h / id_rsa . pub eucalyptus@<IP_OF_NODE >

Le mot de passe de l'utilisateur eucalyptus n'tant plus ncessaire, nous pouvons le supprimer pour des questions de scurit.
$ sudo passwd d e u c a l y p t u s

La conguration des services L'utilisateur eucalyptus du contrleur de cloud doit avoir accs en SSH au

Walrus, au contrleur de stockage et au contrleur de cluster. Il faut donc envoyer la cl SSH publique sur les dirents contrleurs de la manire suivante. Dans un premier temps, crer un mot de passe temporaire pour l'utilisateur eucalyptus sur la cible :
$ sudo passwd e u c a l y p t u s

Ensuite, publier la cl SSH publique du contrleur de cloud :


$ sudo u e u c a l y p t u s ssh copy i d i / var / l i b / e u c a l y p t u s / . s s h / id_rsa . pub eucalyptus@<IP_OF_NODE >

20

Enn, supprimer le mot de passe pour des questions de scurit :


$ sudo passwd d e u c a l y p t u s

Il est donc dsormais possible de se connecter sur l'ensemble des contrleurs en SSH. Nous avons test que cela fonctionnait bien. Il s'agit ensuite de vrier que la conguration des dirents services est correcte en ditant les chiers de conguration suivants : /etc/eucalyptus/eucalyptus-cc.conf et /etc/eucalyptus/eucalyptus-ipaddr.conf Le principal ici est de vrier les noms des contrleurs et leurs adresses IP.

La publication des services Cette tape consiste simplement dmarrer l'ensemble des services du cloud.
 Walrus :
$ sudo s t a r t e u c a l y p t u s walrus p u b l i c a t i o n

 Contrleur de Cluster :
$ sudo s t a r t e u c a l y p t u s cc p u b l i c a t i o n

 Contrleur de stockage :
$ sudo s t a r t e u c a l y p t u s sc p u b l i c a t i o n

 Contrleur de nud :
$ sudo s t a r t e u c a l y p t u s nc p u b l i c a t i o n

Enn, sur le contrleur de cluster et le contrleur de cloud, on lance l'coute pour dcouvrir les nuds :
$ sudo s t a r t uec component l i s t e n e r

Puis, on vrie que l'ensemble fonctionne, en observant le chier de log, si la dcouverte se fait correctement, nous obtenons le rsultat suivant :
1 2 3 4 5 6 7 8 9 c a t / var / l o g / e u c a l y p t u s / r e g i s t r a t i o n . l o g 2010 04 08 15 : 46 : 3 6 0 5: 0 0 | 24243 > C a l l i n g node c l u s t e r 1 node 1 0 . 1 . 1 . 7 5 2010 04 08 15 : 46 : 3 6 0 5: 0 0 | 24243 > euca_conf r e g i s t e r nodes r e t u r n e d 0 2010 04 08 15 : 48 : 4 7 0 5: 0 0 | 25858 > C a l l i n g walrus Walrus 1 0 . 1 . 1 . 7 1 2010 04 08 15 : 48 : 5 1 0 5: 0 0 | 25858 > euca_conf r e g i s t e r walrus r e t u r n e d 0 2010 04 08 15 : 49 : 0 4 0 5: 0 0 | 26237 > C a l l i n g c l u s t e r c l u s t e r 1 1 0 . 1 . 1 . 7 1 2010 04 08 15 : 49 : 0 8 0 5: 0 0 | 26237 > euca_conf r e g i s t e r c l u s t e r r e t u r n e d 0 2010 04 08 15 : 49 : 1 7 0 5: 0 0 | 26644 > C a l l i n g s t o r a g e c l u s t e r 1 s t o r a g e 1 0 . 1 . 1 . 7 1 2010 04 08 15 : 49 : 1 8 0 5: 0 0 | 26644 > euca_conf r e g i s t e r s c r e t u r n e d 0

Sur le grid5000, nous n'avons jamais russi avoir cela, pourtant en local, lors de nos tests en salle ASRALL, nous n'avons pas rencontr de dicults particulires.

2.2.4. Installation partir des sources


Il est galement possible d'installer directement Eucalyptus partir des sources disponibles sur le site ociel. Eucalyptus est compatible avec les distributions suivantes :  CentOS 5  Debian squeeze  OpenSUSE 11  Fedora 12 Nous avons test cette manire de l'installer sur l'environnement Debian pour essayer de rgler le problme de non reconnaissance du contrleur de cloud qui est dtaill dans la partie suivante. Cette installation partir des sources ne prsente aucun aspect particulier mais ncessite les pr-requis suivants pour se drouler correctement :  Compilateurs C  Java Developer Kit (SDK) version 1.6 ou suprieur  Apache 1.6.5  Fichiers de dveloppement libc  Fichiers de dveloppement pthreads  Fichiers de dveloppement libvirt  Fichiers de dveloppement Axis2C et rampart (inclus dans l'archive Eucalyptus obtenu sur le site ociel)  Fichiers de dveloppement Curl  Fichiers de dveloppement openssl  Fichiers de dveloppement zlib Malheureusement, cette installation n'a pas non plus rgl le problme. 21

2.3. Problmes rencontrs lors de l'installation et la conguration


L'ensemble des outils ne sont pas installs par dfaut Lors de l'installation des paquets et de la publication des cls SSH, nous avons eu des messages d'erreur qui expliquait un problme de synchronisation, conrms lors du test de la commande :
$ sudo euca_conf d i s c o v e r nodes

En tudiant, les logs du contrleur de cloud, nous constatons rapidement qu'il manque certains paquets : rsync et wget. Un simple :
$ sudo apt g e t i n s t a l l r s y n c wget

a rsolu ce petit soucis.

Aucun nom pour le contrleur de cloud Un autre problme qui nous a occup une bonne semaine est le fait

que peu importe la manire dont on entrait le nom d'hte du contrleur de cloud, il reprenait toujours le nom localhost.localdomain. Nous avons donc essay de refaire notre environnement de dpart en vriant l'ensemble des paramtres de conguration et en utilisant kaconsole3, qui permet d'obtenir une console et d'observer le boot de son environnement. Nous avons tudi dirents chiers de logs lors de l'installation et la conguration, et nous avons constat un bug d'Eucalyptus : il arrive parfois que les chiers de logs ne soient pas gnrs correctement durant l'installation. En recherchant sur le site ociel, et plus prcisment sur le bug tracker, nous observons que c'est un bug encore non corrig. Il est donc assez dicile de dbuguer un outil sans log ! ! Nous nous sommes alors connect sur le salon IRC de eucalyptus hberg sur le serveur Freenode, mais nous n'obtenons pas plus d'informations. Enn, nous sollicitons l'aide de Sbastien Badia, et il constate que le problme est en fait un bug sur le site de Nancy. Comme son habitude, trs ecace, il le rsout ds le lendemain et nous pouvons donc reprendre nos tests. Le soucis des logs n'est quant lui toujours pas rgl.

Le contrleur de cloud est introuvable Le principal problme rencontr et qui nous a empch de poursuivre
avec Eucalyptus est qu'une fois les direntes tapes d'installation et de conguration ralises, au moment d'utiliser le cloud et de dployer des images, le contrleur de cloud est introuvable ! En eet, nous obtenons l'erreur suivante :
ERROR: you need to be on the CLC h o s t and the CLC needs to be running .

Nous avons d'abord pens que les services taient mal lancs. Nous avons donc test de les redmarrer, et nous n'avons constat aucun problme, ceux-ci fonctionnant bien. Mais en observant de plus prs et en particulier les logs de dmarrage des services... quand ils existent (cf. le problme prcdent), nous constatons qu'il arrive que le contrleur de cloud s'arrte brutalement sans raison apparente. Nous constatons galement une erreur lors de l'installation des paquets lorsqu'il dmarre les instances, il y a le message suivant :
Unknow i n s t a n c e :

Cette erreur vient du fait qu'il lance les services de la mauvaises faon, puisque Ubuntu utilise dsormais upstart 10 . Aprs avoir parcouru la documentation, le bug tracker et fait de nombreux tests, nous arrivons la dduction que cela pourrait tre un problme li la version de Java installe. Nous avons donc test d'installer le paquet ociel de Java : Sun-Java6-jre et mme la version OpenSource : openjdk-6-jre mais cela n'a rien chang. Nous avons galement essay de recrer un environnement Ubuntu Server partir de l'accs physique au cluster du Grid5000 dans les locaux du LORIA 11 , grce Sebastien Badia...mais en vain, cela n'a pas rgl le soucis. Nous avons poursuivi les exprimentations et les analyses pour essayer d'isoler au mieux le problme. Je tiens prciser que nous avons essay d'obtenir de l'aide de la communaut Eucalyptus et la seule rponse concrte que nous avons eu est que c'est sans doute le fait de notre plate forme particulire et que l'on peut toujours essayer de dbugger le code source en Java. En essayant plusieurs manipulations, nous nous confrontons constamment ce type d'erreur :
10. Upstart est un remplaant du daemon init qui se base sur les vnements. Il a t crit par Scott James Remnant, un employ de Canonical Ltd. Upstart fonctionne de manire asynchrone. De la mme manire qu'il gre le lancement des tches et daemons au dmarrage et leur arrt l'arrt de la machine, il les supervise pendant que le systme tourne. 11. Laboratoire Lorrain de Recherche en Informatique et ses Applications

22

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

[ error :0215] j a v a . l a n g . NoClassDefFoundError : groovy / l a n g / GroovyObject at j a v a . l a n g . ClassLoader . d e f i n e C l a s s 1 ( Native Method ) at j a v a . l a n g . ClassLoader . d e f i n e C l a s s ( ClassLoader . j a v a : 6 3 4 ) at j a v a . s e c u r i t y . S e c u r e C l a s s L o a d e r . d e f i n e C l a s s ( S e c u r e C l a s s L o a d e r . j a v a : 1 4 2 ) at j a v a . net . URLClassLoader . d e f i n e C l a s s ( URLClassLoader . j a v a : 2 7 7 ) at j a v a . net . URLClassLoader . a c c e s s $ 0 0 0 ( URLClassLoader . j a v a : 7 3 ) at j a v a . net . URLClassLoader$1 . run ( URLClassLoader . j a v a : 2 1 2 ) at j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( Native Method ) at j a v a . net . URLClassLoader . f i n d C l a s s ( URLClassLoader . j a v a : 2 0 5 ) at j a v a . l a n g . ClassLoader . l o a d C l a s s ( ClassLoader . j a v a : 3 2 1 ) at sun . misc . Launcher$AppClassLoader . l o a d C l a s s ( Launcher . j a v a : 2 9 4 ) at j a v a . l a n g . ClassLoader . l o a d C l a s s ( ClassLoader . j a v a : 2 6 6 ) at com . e u c a l y p t u s . b o o t s t r a p . SystemBootstrapper . i n i t ( SystemBootstrapper . j a v a : 1 2 8 ) Caused by : j a v a . l a n g . ClassNotFoundException : groovy . l a n g . GroovyObject at j a v a . net . URLClassLoader$1 . run ( URLClassLoader . j a v a : 2 1 7 ) at j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( Native Method ) at j a v a . net . URLClassLoader . f i n d C l a s s ( URLClassLoader . j a v a : 2 0 5 ) at j a v a . l a n g . ClassLoader . l o a d C l a s s ( ClassLoader . j a v a : 3 2 1 ) at sun . misc . Launcher$AppClassLoader . l o a d C l a s s ( Launcher . j a v a : 2 9 4 ) at j a v a . l a n g . ClassLoader . l o a d C l a s s ( ClassLoader . j a v a : 2 6 6 ) . . . 12 more [ e r r o r : 0 3 9 0 ] S e r v i c e e x i t with a r e t u r n v a l u e o f 1

Eucalyptus est cens fonctionner et tre intgr la distribution Ubuntu Server, mais son dploiement sur Grid 5000 est tonnamment dicile. Au nal, nous n'avons pas russi nous sortir de ce problme, Lucas Nussbaum nous a donc conseill de passer l'tude d'OpenStack.

23

3. OpenStack

3.1. Introduction
OpenStack est un projet de cloud computing priv et public sous licence Apache 1 . Initialement dvelopp par la NASA, l'agence gouvernementale qui a en charge la majeure partie du programme spatial civil des tatsUnis 2 . et Rackspace Cloud, un fournisseur de plate-forme de cloud computing 3 partir de juillet 2010, ces deux socits ont ensuite t rejointes par Cloud.com, Citrix Systems, Dell, enStratus, NTT Data, PEER 1, RightScale, Cloudkick, Zenoss, Limelight, Scalr, AMD, Intel, Spiceworks, Canonical et Cisco pour le dveloppement d'OpenStack. L'objectif d'OpenStack est de rendre le Cloud simple mettre en uvre et trs extensible. Ubuntu, l'une des distributions Linux les plus populaires, a annonc que sa version 11.04, baptise Natty Narwhal, supportera nativement OpenStack.

1. La licence Apache est une licence de logiciel libre et open source.http://www.apache.org/licenses/LICENSE-2.0.html 2. La National Aeronautics and Space Administration.http://www.nasa.gov/ 3. Rackspace Cloud :http://www.rackspace.com/cloud/

24

3.1.1. Aperu des partenaires d'OpenStack

Figure 3.1.: Source

openstack-compute/admin/content/

OpenStack

Compute

Administration

Guide

http://docs.openstack.org/

3.1.2. Composants d'OpenStack


OpenStack Swift OpenStack Swift permet de crer un service de stockage dans une architecture de cloud computing. Il permet de grer une large capacit de stockage volutive avec une redondance ainsi que le basculement entre les dirents objets de stockage. OpenStack Nova Compute OpenStack Compute permet d'administrer un contrleur pour une application
IaaS. Cela permet de grer des machines virtuelles pour des utilisateurs ou des groupes. On peut l'utiliser pour congurer le rseau des machines virtuelles d'un projet. ages de machines virtuelles.

OpenStack Imaging Service OpenStack Imaging Service est un systme de rcupration et de recherche d'im-

Exemple de l'utilisation des trois applications :

25

Figure 3.2.: Source

openstack-compute/admin/content/

OpenStack

Compute

Administration

Guide

http://docs.openstack.org/

Pour notre projet nous utilisons OpenStack Nova Compute.

3.2. OpenStack Nova Compute


3.2.1. Prrequis
Hardware : Les composants d'OpenStack sont destins fonctionner sur du matriel standard. Systme d'exploitation : OpenStack tourne actuellement sur Ubuntu, la version utiliser pour les grands

dploiements est, de prfrence, la 10.04 LTS. Les membres de la communaut OpenStack ont test d'installer Nova sur CentOS et RHEL, ils ont document leurs dmarches sur le wiki d'OpenStack. Pour ces autres distribution GNU/Linux, une installation sur CentOS 6 semble la solution la plus viable car elle ne soure pas de problmes de dpendances.

Rseaux : Un dbit de 1000 Mbps est suggr. Pour OpenStack Compute, le rseau est congur sur des
installations multi-noeuds entre les machines physiques sur un seul sous-rseau.

Base de donnes : Pour OpenStack Compute, nous pouvons installer soit PostgreSQL ou MySQL comme
base de donnes lors du processus d'installation d'OpenStack Compute.

26

3.2.2. Version actuelle et versions venir de Nova Compute


OpenStack est un projet trs rcent, la dernire version baptise "Bexar" est sortie le 3 Fvrier 2011, la prochaine baptise "Cactus" est prvu pour le 15 Avril 2011.

Figure 3.3.: Source

openstack-compute/admin/content/

OpenStack

Compute

Administration

Guide

http://docs.openstack.org/

3.2.3. Installation de Nova Compute sur un seul serveur


Installation scripte
Pour nos premiers pas sur Nova Compute nous nous sommes bass sur le wiki d'OpenStack 4 . Nous avons donc essay la premire installation que le wiki nous propose : une installation via un script sur un seul serveur. Nous avons d'abord lu la documentation technique qui prsente ce script construit en trois tapes principales, en fonction de l'argument que l'on donne au script :  "branch" cre un accs au Bazaar d'OpenStack 5 . Si par exemple nous excutons la commande suivante :
# . / nova . sh branch l p : nova / bexar

Nous obtenons un accs au Bazaar de Bexar 6 .  "install" Installe les paquets pour l'installation d'une base, la cration des utilisateurs et la cration d'un chier de conguration prt tre utilis pour faciliter l'installation d'OpenStack.  "run" Dmarre le rseau utilis par Nova. Le but de ce script est de crer une architecture de Nova de ce type :

4. http://wiki.openstack.org/InstallInstructions 5. Bazaar (bzr en ligne de commande) est un systme de gestion de versions libre sponsoris par Canonical Ltd. Il appartient la catgorie des systmes de gestion de version dcentraliss http://fr.wikipedia.org/wiki/Bazaar_%28logiciel%29 6. Bexar est la version d'OpenStack sortie le 3 Fvrier 2011

27

Figure 3.4.: Source : OpenStack Tutorial IEEE CloudCom http://salsahpc.indiana.edu/CloudCom2010/


slides/PDF/tutorials/OpenStackTutorialIEEECloudCom.pdf

Nous avons donc test cette installation qui s'est bien droule, mais pour pouvoir dployer des machines virtuelles aprs l'utilisation du script, nous devons congurer le rseaux utilis par nos machines virtuelles. Nous avons ensuite abandonn l'installation d'OpenStack Compute car nous voulions utilis une architecture avec un contrleur et un nud. Nous pouvons toutefois conclure que l'installation sur un seul serveur nous permet de tester rapidement l'installation d'OpenStack Compute.

3.2.4. Installation sur plusieurs serveurs manuellement


Installation du contrleur Obtention des paquets
OpenStack est crit en Python, il faut donc installer au pralable les python-software-properties. Nous utilisons Ubuntu 10.04 Lucid Lynx pour l'installation d'Openstack. Ubuntu ne supporte pas encore nativement Openstack, il faut donc que l'on rajoute le PPA 7 de Nova : https://launchpad.net/~nova-core/
+archive/trunk

On rentre donc les commandes suivantes :

# apt g e t i n s t a l l python s o f t w a r e p r o p e r t i e s # addapt r e p o s i t o r y ppa : nova c o r e / trunk # apt g e t update

On installe les principaux paquets de Nova :

$ sudo apt g e t i n s t a l l python g r e e n l e t python mysqldb python nova novacommon novadoc nova a p i novanetwork nova o b j e c t s t o r e nova s c h e d u l e r novacompute e u c a 2 o o l s unzip

7. Les Personal Package Archives (abrgs PPA) sont des dpts de paquets logiciels oerts aux individus et aux quipes de dveloppeurs dsireux de proposer facilement leurs logiciels pour les utilisateurs d'Ubuntu..http://doc.ubuntu-fr.org/ppa

28

Conguration du chier nova.conf


Le chier principal de conguration de Nova se nomme nova.conf, il se situe dans /etc/nova/ Aperu de nova.conf :
1 2 3 4 5 6 7 8
s q l _ c o n n e c t i o n=mysql : / / r o o t : nova@<CC_ADDR >/nova s3_host=<CC_ADDR > rabbit_host=<CC_ADDR > ec2_host=<CC_ADDR > ec2_url=http :// <CC_ADDR>:8773/ s e r v i c e s / Cloud network_manager=nova . network . manager . VlanManager fixed_range=<network / p r e f i x > network_size= <# o f addrs>

<CC_ADDR> correspond l'adresse IP du contrleur sql_connection : L ou se situe la base de donnes s3_host : L ou se situe le service qui contient les images des machines virtuelles rabbit_host : L ou se situe le serveur de messagerie rabbit AMQP ec2_url : L ou se situe l'interface nova-api network_manager : Correspond au type de communication qu'utilise le contrleur pour parler aux machines virtuels. Il en existe 3.  nova.network.manager.FlatManager  FlatDHCPManager  nova.network.manager.VlanManager  xed_range=<network/prex> : Correspond au rseaux des machines virtuelles  network_size=<# of addrs> : Correspond au nombre d'adresses IP utilises pour hberger nos machines virtuelles On cre le groupe et l'utilisateur nova pour ne pas avoir de problmes de droits :
# addgroup nova # chown R r o o t : nova / e t c / nova # chmod 644 / e t c / nova / nova . c o n f

     

Installation et conguration de MySql


# # # # # # # bash MYSQL_PASS=nova c a t <<MYSQL_PRESEED | debconf s e t s e l e c t i o n s mysql s e r v e r 5.1 mysql s e r v e r / root_password password $MYSQL_PASS mysql s e r v e r 5.1 mysql s e r v e r / root_password_again password $MYSQL_PASS mysql s e r v e r 5.1 mysql s e r v e r / start_on_boot boolean t r u e MYSQL_PRESEED

On installe le serveur MySql :


apt g e t i n s t a l l y mysql s e r v e r \end{ l i s t i n g } \\ On m o d i f i e l e f i c h i e r / e t c / mysql /my. c n f : \ begin { l s t l i s t i n g } sed i ' s / 1 2 7 . 0 . 0 . 1 / 0 . 0 . 0 . 0 / g ' / e t c / mysql /my. c n f s e r v i c e mysql r e s t a r t

On cre la base de donnes NOVA avec les droits :


# mysql uroot p $MYSQL_PASS e 'CREATE DATABASE nova ; ' # mysql uroot p $MYSQL_PASS e "GRANT ALL PRIVILEGES ON . TO ' root '@'% ' WITH GRANT OPTION ;" # mysql uroot p $MYSQL_PASS e "SET PASSWORD FOR ' root '@'% ' = PASSWORD( '$MYSQL_PASS' ) ; "

Installation du Nud Installation de l'environnement du Nud Pour installer l'environnement du Nud on rpte les deux premires tapes de l'installation du contrleur savoir :

29

 L'obtention des paquets  La conguration du chier nova.conf

Conguration du rseau On doit crer un pont entre le rseau de Grid5000 (sur eth0) et notre rseau de machines virtuelles sur le nud, pour cela on doit installer le paquet bridge-utils et diter le chier "interfaces" situ dans /etc/network/
1 # The loopback network 2 auto l o 3 i f a c e l o i n e t loopback 4 5 # Networking f o r NOVA 6 auto br100 7 8 i f a c e br100 i n e t dhcp 9 bridge_ports 10 bridge_stp 11 bridge_maxwait 12 bridge_fd interface

eth0 off 0 0

On redmarre le service networking pour que nos modications soient prises en compte.

Mise en place de l'environnement pour Nova Ici, on va crer l'environnement dont Nova a besoin pour fonctionner :  On va synchroniser la base de donne  On va dnir l'utilisateur principale de Nova  On va crer le projet de l'utilisateur  On termine par crer le rseau utilis par Nova
# # # # / u s r / bin / python / u s r / bin /novamanage / u s r / bin / python / u s r / bin /novamanage / u s r / bin / python / u s r / bin /novamanage / u s r / bin / python / u s r / bin /novamanage p r o j e c t > <IPs i n p r o j e c t > db sync u s e r admin <user_name> p r o j e c t c r e a t e <project_name> <user_name> network c r e a t e <p r o j e c t network> <numberof networks in

Cration des certications de Nova Pour que l'on puisse crer des machines virtuelles, nous avons besoin des
certications de Nova :
# mkdir p / r o o t / c r e d s # / u s r / bin / python / u s r / bin /novamanage p r o j e c t z i p f i l e \$NOVA_PROJECT \$NOVA_PROJECT_USER / r o o t / c r e d s / novacreds . z i p

On extrait les certications et on les ajoute notre environnement :


# unzip / r o o t / c r e d s / novacreds . z i p d / r o o t / c r e d s / # c a t / r o o t / c r e d s / novarc >> ~/. bashrc # s o u r c e ~/. bashrc

lui sont associs :

On redmarre les services Pour que Nova utilise notre conguration, nous devons redmarrer les services qui
l i b v i r t d r e s t a r t ; s e r v i c e novanetwork r e s t a r t ; s e r v i c e novacompute r e s t a r t ; s e r v i c e novaa p i r e s t a r t ; s e r v i c e nova o b j e c t s t o r e r e s t a r t ; s e r v i c e nova s c h e d u l e r r e s t a r t

Accs aux machines virtuelles depuis le Nud Pour pouvoir communiquer avec nos machines virtuelles depuis le nud, on doit autoriser certains protocoles sur nos machines virtuelles (dans notre cas, nous allons autoriser le protocole SSH et le ping). SSH est bas sur le protocole TCP connect sur le port 22. Le ping est une requte icmp. On congure ces accs avec ces commandes :

30

# euca a u t h o r i z e P icmp t 1: 1 d e f a u l t # euca a u t h o r i z e P tcp p 22 d e f a u l t

Dmarrage des machines virtuelles Prparation au dploiement Pour cette partie, nous avons prpar une image d'Ubuntu 10.10 sous forme
d'archive sur le nud qui nous servira d'image de dploiement pour nos machines virtuelles. Le lancement et la gestion des machines virtuelles se fait via les outils Euca2ools. 8 Pour pouvoir utiliser cette image, nous devons rentrer la commande suivante :

# uec p u b l i s h t a r b a l l ubuntu1010 UEC l o c a l u s e r image . t a r . gz VM1 x86_64

Les deux arguments correspondent respectivement au nom de notre machine virtuelle et l'architecture qu'elle va utiliser. Cette commande nous retourne trois rfrences : emi, eri et eki, il faut utiliser la valeur de emi pour les prochaines tapes de dploiements. Nous voulons communiquer en ssh avec nos machines virtuelles donc il faut crer une paire de cl :
# euca addk e y p a i r mykey > mykey . p r i v # chmod 0600 mykey . p r i v

Dploiement des machines virtuelles Maintenant que toutes les tapes ont t ralises, nous pouvons dployer nos machines virtuelles bases sur l'image d'Ubuntu prcdemment cite :
# euca d e s c r i b e images # euca run i n s t a n c e s $emi k mykey t m1 . t i n y

8. http://open.eucalyptus.com/wiki/Euca2oolsGuide_v1.1

31

3.2.5. Installation scripte sur plusieurs serveurs


Prsentation des scripts Les dveloppeurs d'OpenStack ont prvu des scripts d'installation pour le contrleur
et le nud. Le principal soucis des scripts est que cela ne nous explique pas l'installation et la conguration de Nova en dtail. Pour l'installation par scripts, on doit lancer le script du contrleur, en annexe. Celui-ci installe les paquets de Nova et congure le chier nova.conf ainsi que l'environnement euca2ools. Ensuite, on doit copier le nova.conf sur le nud et on peut lancer le script d'installation de l'environement du nud, en annexe.

3.3. Problmes rencontrs


Choisir le type d'installation d'OpenStack Le site d'Openstack nous propose plusieurs types d'installation
pour Nova :  installer Nova sur une seule machine  installer Nova sur plusieurs machines avec les outils de dploiements d'OpenStack  installer Nova sur plusieurs machines manuellement  installer Nova sur plusieurs machines par des scripts Un des premiers problmes que nous avons rencontr tait de choisir le type d'installation de Nova. Notre but tait de crer un systme du mme type que Eucalyptus : c'est dire un contrleur et un nud, mais au vu des problmes que nous a pos ce type de solution pour Eucalyptus, nous avons voulu essayer une installation sur une seule machine. Le problme est que OpenStack propose plusieurs types d'installation sur une seule machine :  installation via des scripts  installation via les packages  installation via l'utilitaire Bexar Ces direntes installations prsentent l'avantage de pouvoir installer Nova rapidement mais il n'y a aucune explication sur ce que les scripts installent et sur la conguration de Nova. Pour mieux comprendre l'installation de Nova, nous avons donc choisi une installation manuelle sur plusieurs serveurs.

Problmes de PPA et de cration de bridge Lors de l'installation de Nova Compute, nous avons rencontr plusieurs problmes. L'ajout du PPA nous renvoyait un message d'erreur de ce type :
# addapt r e p o s i t o r y ppa : nova c o r e / trunk Error r e a d i n g h t t p s : / / launchpad . net / a p i /1.0/~ nova c o r e/+a r c h i v e / trunk : <u r l o p e n e r r o r [ Errno 1 1 0 ] Connection timed out>

Nous avons essay d'ajouter le PPA sur une autre image et il n'y avait pas ce message. Aprs avoir compar les chiers de conguration d'APT sur les deux environnements, nous nous sommes rendu compte que le PPA avait bien t ajout : mme avec ce message d'erreur, le PPA est ajout. Le second problme que nous avons rencontr se situe lors de la cration du brigde. Aprs avoir dit le chier /etc/network/interfaces, nous devions redmarrer le service networking mais nous avons eu le message d'erreur suivant :
1 # / e t c / i n i t . d/ networking r e s t a r t 2 R e c o n f i g u r i n g network i n t e r f a c e s . . . unknown i n t e r f a c e eth0=eth0 . 3 I n t e r n e t Systems Consortium DHCP C l i e n t V3 . 1 . 3 4 Copyright 2004 2009 I n t e r n e t Systems Consortium . 5 All rights reserved . 6 For i n f o , p l e a s e v i s i t h t t p s : / /www. i s c . org / s o f t w a r e /dhcp/ 7 8 SIOCSIFADDR : No such d e v i c e 9 br100 : ERROR w h i l e g e t t i n g i n t e r f a c e f l a g s : No such d e v i c e 10 br100 : ERROR w h i l e g e t t i n g i n t e r f a c e f l a g s : No such d e v i c e 11 Bind s o c k e t to i n t e r f a c e : No such d e v i c e 12 F a i l e d to b r i n g up br100 . Ignoring

32

Notre bridge nous permet de relier une interface rseau physique une interface rseau virtuelle, pour pouvoir le crer nous avons install le paquet bridge-utils qui permet de crer et grer des bridges. Mme avec ce paquet notre bridge n'tait pas cr... Nous avons tudi les journaux du systme avec les commandes syslog 9 et modprobe 10 qui nous ont indiqu qu'il manquait un module 11 intitul "bridge-module" au niveau du noyau. Un petit schma pour mieux comprendre :

Figure 3.5.: Source

modules_linux

: Les modules Linux http://doc.ubuntu-fr.org/tutoriel/tout_savoir_sur_les_

Vu que nous tions en retard au niveau de notre planning, nous n'avons pas essay de corriger cette erreur et nous avons donc essay de crer un bridge sur un autre environnement, ce qui a fonctionn. En fait le principal problme tait de crer un environnement Kadeploy Ubuntu sous lequel nous pouvions crer un bridge et ajouter le PPA.

La mise en rseau des machines virtuelles Lorsque nous dployons nos machines virtuelles sur Grid 5000, elles n'ont pas d'adresse IP. Si nous xcutons la commande suivante :
# euca d e s c r i b e i n s t a n c e s

Nous obtenons le rsultat suivant :


# euca d e s c r i b e i n s t a n c e s RESERVATION r kow5gx5o t o t o d e f a u l t INSTANCE i 00000001 ami 7b006df8 . t i n y 2011 03 25T09 : 2 1 : 0 8 Z nova

networking

mykey ( toto , l o c a l h o s t . l o c a l d o m a i n ) 0

m1

Sur Grid5000, les machines virtuelles sont sur un rseau rserv exclusivement pour la virtualisation. Ce rseau utilise un DHCP qui attribue des addresses IP aux machines virtuelles si elles comportent une adresse mac avec un prxe valide. Pour rsoudre notre problme nous supposons que nous devons crer nos propres images de machines virtuelles en local pour leur attribuer un prxe mac. Vu le manque de temps ce problme n'a pas t rsolu pour l'instant.

org/wiki/Syslog

9. Syslog est un protocole dnissant un service de journaux d'vnements d'un systme informatique.http://fr.wikipedia.

savoir_sur_les_modules_linux

10. modprobe permet de charger des modules du noyau Linux dynamiquementhttp://doc.ubuntu-fr.org/tutoriel/tout_

11. Un module est un morceau de code permettant d'ajouter des fonctionnalits au noyau : pilotes de priphriques matriels, protocoles rseaux, etc. . . http://doc.ubuntu-fr.org/tutoriel/tout_savoir_sur_les_modules_linux

33

4. OpenNebula

4.1. Introduction
OpenNebula est un projet Open Source de cloud computing de type IaaS. Le projet a t lanc en 2005, la premire version stable est sortie en 2008. Le projet est sous licence Apache 2 1 . Le projet a pour but la gestion de machines virtuelles grande chelle sur des infrastructures distribues ou de cluster, et supporte plusieurs technologies d'hyperviseur : Xen, KVM et VMware. OpenNebula permet aussi de combiner les infrastructures locales et publiques, ce qui ore une grande modularit aux environnements hbergs. OpenNebula est intgr dans Debian Sid, Ubuntu Natty et OpenSuse. OpenNebula 2.2 Bta 1 est sortie le 02/06/2011. Dans le cadre du projet, nous avons utilis la dernire version stable disponible, la 2.0 parue le 24/10/2010. La documentation, assez fournie, mais parfois assez brute de fonderie, est disponible sur le site ociel :  documentation gnrale : http://opennebula.org/documentation:documentation  rfrence : http://opennebula.org/documentation:references

Figure 4.1.: Aperu des dirents partenaires, utilisateurs et projets vedettes de OpenNebula

1. La licence Apache est une licence de logiciel libre et open source.http://www.apache.org/licenses/LICENSE-2.0.html

34

4.2. Fonctionnement
Dans le cadre du projet, nous utilisons OpenNebula pour crer un cloud priv. Pour dployer ce type de cloud, OpenNebula adopte une architecture classique de type cluster-like avec un frontend et un ou plusieurs nuds qui excutent et hbergent les machines virtuelles, avec un rseau physique reliant le frontend aux nuds.

Frontend
Le frontend est la machine qui gre toutes les autres : les nuds ou les VM. Toute la gestion du cloud se fait sur cette machine.

Figure 4.2.: Illustration du frontend


Le frontend permet de grer tous les service du cloud, notamment celui qui gre le cycle de vie des VM ou encore les sous-systme comme les rseaux virtuels, le stockage et les nuds. L'administration du cloud se fait avec le compte utilisateur oneadmin. Pour la cration d'une VM, il faut au minimum un chier .one de dnition de cette VM. Dans ce chier on trouve notamment le chemin de l'image(chier img, qcow2...), la spcication des interfaces rseaux, les informations de contextualisation, etc.

Nuds
Les nuds sont les machines qui hbergent les machines virtuelles, c'est dire des serveurs htes de virtualisation.

Figure 4.3.: Illustration d'un nud


Chaque nud dispose des trois lments suivants :  un hyperviseur, c'est l'hyperviseur qui permet la virtualisation de plusieurs machines virtuelles sur une seule machine physique. Les hyperviseurs utiliss par OpenNebula sont Xen, KVM et VMware ;  un bridge, le bridge permet de relier les interfaces rseaux virtuelles des VM au l'interface rseaux physique de la node ;  un serveur ssh, OpenNebula utilise ssh notamment pour copier les images des machines virtuelles.

35

Fonctionnement
Dans un premier temps, on doit renseigner le frontend en lui indiquant les nuds qu'il va pourvoir utiliser. Pour la gestion des nuds on utilise la commande onehost. Cette commande permet d'ajouter des nuds au cloud, de les lister ou de les supprimer. Ajouter un nud au cloud :
$ onehost add node01 im_kvm vmm_kvm tm_ssh

Cette commande permet d'ajouter le nud node01 au cloud, im_kvm et vmm_kvm prcise que l'on utilise kvm comme hyperviseur et tm_ssh indique que l'on copie les images des VM par ssh. Ces trois paramtres sont en fait le nom des drivers que l'ont souhaitent utiliser. Lister les nodes :
$ onehost l i s t

Supprimer une node.


$ onehost d e l e t e node01

Figure 4.4.: Une structure compose d'un frontend et de nuds


Aprs avoir pris connaissance des nuds, on peut alors dployer des VM. Pour la gestion des VM, on utilise la commande onevm. Cette commande permet de crer des VM, de les lister, de donner des informations complmentaires ou de les supprimer. Cration d'une VM :
$ onevm c r e a t e m a c h i n e _ v i r t u e l l e . one

La rpartition des VM sur les nuds se fait de manire automatique, OpenNebula va dployer la VM sur un nud disposant de susamment de ressources pour l'hberger. machine_virtuelle.one est un chier descriptif de la VM, vous trouverez plus d'information sur ce chier dans l'annexe  "Cration de machines virtuelles et chiers de dnition" . Lister les VM :
$ onevm l i s t

Rcuperer des information sur une VM :


$ onevm show ID_VM

36

L'ID de la VM est donn par la commande onevm list. Supprimer une VM :


$ onehost d e l e t e ID_VM

Figure 4.5.: Dploiement de VMs par SSH sur les nuds


Pendant le dploiement d'une VM sur une node, une image disque est copie du frontend vers un nud, une interface rseau virtuelle est cre et attache au bridge puis la VM est dmarre.

37

Figure 4.6.: Dploiement nalis


Pour aller plus loin, d'autres commandes sont disponibles :  oneimage : permet d'enregistrer des images de machines virtuelles avec leur conguration ;  onevnet : permet d'administrer des rseaux virtuels ;  onecluster : permet de regrouper des machines pour former des clusters.

4.3. Installation
Pour dployer OpenNebula 2 nous avons dcid d'utiliser comme support une Ubuntu Lucid Lynx 10.04 LTS. Pour cela nous sommes parti d'une image de Ubuntu Karmic disponible sur le Grid que nous avons mise jour et fait passer en Lucid. Nous avons dcid d'utiliser cette distribution car elle supportait plus facilement Eucalyptus et permettait galement d'installer OpenNebula via un PPA. Les deux groupes sont donc parti de cette image mise jour comme support.

4.3.1. Installation du Frontend


Il existe plusieurs faons d'installer OpenNebula : par une archive disponible sur le site ociel ou par les paquets disponibles pour Ubuntu. Dans le cadre du projet nous avons donc dcid de passer par les paquets, ce qui nous a rendu la tche d'installation beaucoup plus aise (aucun problme de dpendances, pr et postconguration automatique, etc.) Les chiers README inclus aux paquets Debian opennebula 2 et opennebula-node Fichier README du paquet Debian opennebula-node nous ont t d'une trs grande aide pour l'installation. Premirement, OpenNebula 2 est packag dans un PPA pour Ubuntu Lucid, nous avons donc ajout le PPA dans le chier /etc/apt/sources.list :
deb http : / / ppa . launchpad . net / opennebula ubuntu/ppa/ ubuntu i n t r e p i d main

Puis nous avons install le paquet opennebula :


#apt g e t i n s t a l l opennebula 2. Fichier README du paquet Debian opennebula

38

Voici la liste des dpendance du paquet opennebula : libruby1.8 libsqlite3-ruby libsqlite3-ruby1.8 libxmlrpc-c3 libxmlrpc-core-c3 opennebula-common ruby ruby1.8 Attention, il se peut qu'une dpendance ncessaire pour contextualiser les machines virtuelles soit manquante : mkisofs

4.3.2. Conguration du Frontend


Lors de l'installation, un compte utilisateur oneadmin est cr. C'est depuis ce compte que toutes les commandes pour grer le Cloud sont lances. Il nous faut maintenant le congurer en ditant le chier /var/lib/one/one_auth.
# su oneadmin $ v i $HOME/ . one /one_auth

Dans ce chier, entrez la ligne suivante en changeant le mot de passe :


oneadmin:< password>

Dans un premier temps, nous avions oubli de crer ce chier, ce qui occasionnait l'erreur suivante :
/ u s r / l i b / one / ruby /OpenNebula . rb : 7 7 : i n ` i n i t i a l i z e ' : ONE_AUTH f i l e not p r e s e n t ( RuntimeError ) from / u s r / l i b / one / ruby / c l i e n t _ u t i l i t i e s . rb : 2 3 9 : i n ` new ' from / u s r / l i b / one / ruby / c l i e n t _ u t i l i t i e s . rb : 2 3 9 : i n ` get_one_client ' from / u s r / bin / onehost : 3 4 3

Par dfaut, le service opennebula ne dmarre pas automatiquement. Nous avons donc fait les actions suivantes. Rendre excutable le script /etc/init.d/opennebula :
# chmod +x / e t c / i n i t . d/ opennebula

Ajouter le service en dmarrage automatique pour tous les runlevels :


update r c . d opennebula d e f a u l t s

Nous avons par la suite congur le serveur SSH pour dsactiver la vrication strictes des cls des serveurs prsentes dans le chier $HOME/.ssh/known_hosts. Par dfaut, SSH est en mode "ask", ce qui demande une interaction de la part de l'utilisateur, causant problme pour l'excution de scripts automatiss. Dans le chier $HOME/.ssh/cong
Host StrictHostKeyChecking no

Par dfaut, lors de la copie via scp d'une image disque de machine virtuelle du frontend vers un nud, OpenNebula tente de se connecter son serveur SSH local et demande le mot de passe. Pour supprimer cette interaction, il faut ajouter la cl publique du compte oneadmin au chier authorized_keys.
# su oneadmin $ cd $HOME/ . s s h / $ c a t id_rsa . pub >> authorized_keys

Aprs avoir suivi toute ces tapes, nous avons enregistr un environnement sous le nom lucid-opennebulafrontend pour pouvoir la redployer avec kadeploy3 et travailler sur le Grid.

4.3.3. Installation d'un nud


Comme pour le contrleur, nous avons ajout le dpot PPA correspondant :
deb http : / / ppa . launchpad . net / opennebula ubuntu/ppa/ ubuntu i n t r e p i d main

Puis nous avons install le paquet opennebula-node


# a p t i t u d e i n s t a l l opennebula node

Il faut aussi installer les paquets pour le serveur ssh et la manipulation de bridge si ncessaire (bridge-utils ).
#a p t i t u d e i n s t a l l l i b v i r t 0 openssh s e r v e r

39

4.3.4. Conguration d'un nud


Vrications
Chaque nud est un serveur de virtualisation, devant disposer d'un hyperviseur. Il nous faut vrier que l'hyperviseur choisi fonctionne correctement sur les nuds, dans notre cas nous utilisons KVM 3 . Pour cela, il faut que le processeur supporte la virtualisation (vmx pour Intel, svm pour AMD, normalement disponible sur tous les nuds de grid5000).
# egrep ' (vmx | svm ) ' / proc / c p u i n f o

Il faut vrier que les modules noyau kvm et kvm-intel ou kvm-amd sont bien chargs :
# lsmod | grep "kvm \ ( . \ ) "

Conguration SSH
Pour autoriser les connexions SSH du contrleur vers la node, il faut copier la cl publique SSH du compte oneadmin du frontend dans le chier authorized_keys du compte oneadmin de la node. La documentation Debian nous indique les commandes suivantes :
r o o t @ c o n t r o l l e r > su oneadmin oneadmin@controller > c a t $HOME/ . s s h / id_rsa . pub <COPY YOUR CONTROLLER SSH PUBKEY > root@node01> su oneadmin oneadmin@node01> v i $HOME/ . s s h / authorized_keys <PAST YOUR CONTROLLER SSH PUBKEY >

Arriv ce point, un nud est correctement congur. Nous avons enregistr l'environnement sous le nom lucid-opennebula-node. Il reste cependant crer un bridge, et y attacher l'interface rseau ethernet principale. OpenNebula reliera les interfaces rseaux virtuelles de chaque machine virtuelle ce bridge, leur permettant de communiquer avec le rseau.

4.3.5. Problmes rencontrs pour l'installation et la conguration des environnements


Il nous a t dicile de crer un environnement fonctionnant bien sur tous les sites de Grid 5000 cause de quelques particularits, nous allons les expliquer ici.

Accs au dpt PPA


Nous avons rencontr des problmes lors de l'ajout des PPA, en eet un problme de proxy nous empchait de tlcharger les paquets de OpenNebula. Nous avons donc ouvert un bug dans le Bugzilla pour demander son ouverture.

Dpt PPA Ubuntu obsolte, passage Debian SID


Lors de nos tests, nous avons rencontrs des bugs de OpenNebula. Aprs recherche, ceux-ci taient dj corrigs dans une version plus rcente de OpenNebula. Nous sommes alors passs Debian SID et nous avons enregistr deux nouveaux environnements naliss et fonctionnels : sid-opennebula-frontend et sid-opennebula-node.

Conguration rseau des nuds : cration du bridge et interface rseau


L'interface utilise pour le rseau de production change d'un site l'autre. Une des solutions est d'ajouter un chier de conguration rseau dans la postinstall 4 de notre environnement. Il est alors possible d'utiliser la variable NET_DEV (interface rseau principale) an de crer une conguration rseau universelle incluant un bridge. Cependant, cette solution tait en cours de dploiement 5 . Nous alors avons choisi une solution de contournement, congurer le rseau dans le chier /etc/rc.local (cf. Annexes). Ce script est excut aprs tous les autres scripts dans tous les runlevel. Il dtecte l'interface rseau principale utilise, puis crer un bridge nomm br0 et y attache cette interface avec la commande brctl.

3. KVM : Kernel-based Virtual Machine, technologie de virtualisation intgre au noyau Linux. 4. grid5000.fr : Prepost 5. Rapport de bug sur le bugzilla concernant la variable NET_DEV

40

Problmes d'espace disque disponible


L'espace disque disponible la racine de chaque serveur est uniquement de quelques Go, ce qui occasionne rapidement des problmes d'espace disque lors du dploiement de multiples machines virtuelles volumineuses sur le mme nud. Nous avons rsolu le problme rapidement en ajoutant un script /etc/rc.bindhome (cf. Annexes) pour contourner ce problme. Celui-ci monte avec l'option bind le rpertoire /tmp/one dans le rpertoire o sont places les images disques (/var/lib/one). Ce script doit obligatoirement tre excut avant celui lanant le service opennebula dans le runlevel 2.

4.4. Cration de machines virtuelles et chiers de dnition


Pour la cration de VM (commande onevm create ) et de rseaux (commande onevnet create ), il faut crer avant tout une image disque avec un systme install et des chiers de dnitions.

4.4.1. Image disque de machine virtuelle


Cration d'une image disque
Nous avons utilis deux solutions, la premire, faire une installation classique avec qemu, et la deuxime, utiliser vmbuilder.

Qemu Avec qemu-img, on cre une image de 4Go au format qcow2. Le format qcow2 apporte des avantages sur le format raw dont la compression.
qemuimg c r e a t e debian_squeeze . qcow2 4G

On lance ensuite qemu, avec cette image disque et l'iso du CD d'installation de Debian pour faire une installation standard.
qemusystem x86_64 hda debian_squeeze . img cdrom debian 6.0.0 amd64 . i s o boot once=d m 512

VM Builder VMBuilder 6 est un utilitaire crit en Python permettant de crer rapidement des images mini-

males de machines virtuelles. Il gre Debian et Ubuntu, cependant le support de Debian ne semble pas jour et son utilisation est beaucoup plus simple pour Ubuntu. Pour nos essais, nous avons donc cr une image de Ubuntu Lucid de cette faon :
ubuntuvm b u i l d e r kvm l u c i d arch amd64 addpkg=openssh s e r v e r r o o t p a s s=g r i d 5 0 0 0

Les premiers paramtres sont l'hyperviseur cible (kvm), puis la distribution (ubuntu lucid). Nous ajoutons ensuite un paquet : le serveur openssh. L'option rootpass permet de spcier un mot de passe root.

Conguration
En premier lieu, il faut supprimer les chiers de rgles udev concernant les interfaces rseaux (situes dans /etc/udev/rules.d ). Celles-ci xent les interfaces rseaux en fonction des adresses MAC, ce qui est problmatique pour une image de machine virtuelle gnrique. Il faut ensuite permettre la contextualisation de la machine virtuelle pour OpenNebula. Il s'agit d'une fonctionnalit permettant de personnaliser les machines virtuelles, en leur attachant un nouveau disque disposant d'un systme de chiers au format ISO 9660. Celui-ci contient un script init.sh pour paramtrer la machine virtuelle et des chiers complmentaires (chier de variables context.sh, cls SSH) Attention, quelque soit le priphrique cible donn par OpenNebula pour l'iso de contexte, le systme dtecte un lecteur optique cause du systme de chier, et le nomme sr0 (/dev/sr0).
1 2 3 4 5 6 7 mount t i s o 9 6 6 0 / dev / s r 0 /mnt i f [ f /mnt/ c o n t e x t . sh ] ; then . /mnt/ i n i t . sh fi umount /mnt 6. SitedeVMBuilder:https://launchpad.net/vmbuilder

41

4.4.2. Fichier de dnition de machine virtuelle


Ce chier permet de dnir une machine virtuelle. On peut ensuite l'instancier avec la commande onevm create chier.one. Il contient des variables gnrales. Celles-ci sont listes dans la documentation de OpenNebula 7 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 NAME = myUbuntu CPU = 0.5 MEMORY = 400 DISK = [ source = "/ var / l i b / one / l u c i d /ubuntu l u c i d . qcow2 " , target = " sda " , r e a d o n l y = "no " , d r i v e r = "qcow2" ] OS = [ ARCH = "x86_64" ] NIC = [ BRIDGE = " br0 " ] FEATURES = [ a c p i="no" ] CONTEXT = [ f i l e s = "/ var / l i b / one / l u c i d / i n i t . sh / var / l i b / one / . s s h / id_rsa . pub " , i d = "$VMID" , t a r g e t = "hdc " , root_pubkey = " id_rsa . pub " , username = " oneadmin " , user_pubkey = " id_rsa . pub" ]

NAME : nom de la VM CPU : nombre de processeurs, 0.5 correspond 50% d'un processeur MEMORY : mmoire alloue en Mo DISK : dnition de l'image disque du systme, du nom du priphrique dans /dev, etc. Il faut aussi spcier une variable driver pour utiliser un autre format d'image (comme qcow2).  NIC : dnition du rseau, possibilit d'utiliser un rseau virtuel existant de OpenNebula (NETWORK), ou de dnir uniquement une interface avec un bridge auquel relier l'interface de la VM.  OS : information sur l'OS contenu dans l'image disque, il est ncessaire de prciser l'architecture.  CONTEXT : section permettant la contextualisation de la machine virtuelle. La contextualisation de la machine virtuelle est une fonction essentielle de conguration. Elle permet de spcier un script excuter au lancement de la VM, et de lui passer des paramtres. Pour ce faire, les chiers contenus dans la variable les sont archivs dans un chier iso. Ce chier iso est mont au lancement de la VM, et le script init.sh est appel. Ce script dispose en variable d'environnement de toutes les variables dnies dans le chier de dnition de la VM. Il va alors xer lui mme l'adresse IP et la conguration rseau, les cls SSH, etc.

   

4.4.3. Fichier de dnition de rseau virtuel


Il est possible (et facultatif), de crer un rseau virtuel dans OpenNebula, pour lui dlguer la gestion de la conguration et rseau et l'attribution automatique d'IP chaque VM. La commande utiliser pour crer le rseau est onevnet create mon_reseau.net
1 2 3 4 5 NAME = TYPE = BRIDGE = NETWORK_SIZE = NETWORK_ADDRESS= " BigNetwork " "RANGED" " br0 " 250 "10.144.0.0"

Ce chier de dnition est trs court et dnit une conguration rseau pour un groupe de VM.  NAME nomme le rseau.  TYPE peut avoir deux valeurs : RANGED et FIXED. RANGED permet de dnir un bloc d'IP et les deux variables suivantes en dpendent. La valeur FIXED permet de dnir une liste d'adresses IP.  NETWORK_SIZE, nombre de machines dans le rseau  NETWORK_ADDRESS, adresse du rseau utiliser Avec cette conguration, OpenNebula va attribuer une IP dans le rseau 10.144.O.0 chaque VM utilisant le rseau BigNetwork. Voici un exemple pour un rseau de type FIXED.
7. opennebula.org : Virtual Machine Denition File 2.0

42

1 NAME = " Small network " 2 TYPE = FIXED 3 4 BRIDGE = br0 5 LEASES = [ IP = " 1 9 2 . 1 6 8 . 0 . 5 " ] 6 LEASES = [ IP = " 1 9 2 . 1 6 8 . 0 . 6 " ] 7 LEASES = [ IP = " 1 9 2 . 1 6 8 . 0 . 7 " ]

Les IP disponibles sont listes dans LEASES.

4.5. Dploiement automatis sur Grid 5000


Nous avons crit des scripts pour automatiser chaque tape du dploiement d'un cloud OpenNebula. Le prrequis est d'avoir transfr deux environnements et les enregistr avec kaenv3 sur tous les sites. Ces deux environnements se nomment :  sid-opennebula-frontend : frontend OpenNebula  sid-opennebula-node : nud OpenNebula Tous les scripts suivants sont fournis dans les annexes. L'idal est de les enregistrer et de les excuter dans un rpertoire identique.

4.5.1. oargridsubON.sh : rservation de nuds sur plusieurs sites


Ce script permet de rserver des noeuds sur plusieurs sites et dirents cluster. Il lit le chier cluster-test dans le rpertoire courant pour avoir la liste des cluster et le nombre de nuds souhaits par cluster. Voici un exemple de ce chier :
sagittaire ;1 griffon ;3 paradent ; 1 0 pastel ;5 violette ;3

Chaque ligne est un couple associant le nom d'un cluster ou d'un site un nombre de nuds. Il est possible de changer la valeur de la variable DURATION En rsultat, il lance la commande oargridstat. Celle-ci retourne un GRID_JOB_ID en cas de russite. Notez qu'il est possible de prciser des proprits ncessaires aux nuds souhaits. Il est ainsi possible de spcier que nous souhaitons uniquement des nuds supportant la virtualisation. La syntaxe de la commande oargridsub ressemblerait donc ceci :
o a r g r i d s u b w \ ' 0 2 : 0 0 : 0 0 \ ' v i o l e t t e : r d e f =/nodes =3: prop=v i r t u a l ='amdv ' OR v i r t u a l =' i v t ' , p a s t e l : r d e f =/nodes =5: prop=v i r t u a l ='amdv ' OR v i r t u a l =' i v t ' , paradent : r d e f =/nodes =10: prop=v i r t u a l ='amdv ' OR v i r t u a l =' i v t ' , g r i f f o n : r d e f =/nodes =3: prop=v i r t u a l ='amdv ' OR v i r t u a l =' i v t ' , s a g i t t a i r e : r d e f =/nodes =1: prop=v i r t u a l ='amdv ' OR v i r t u a l =' i v t ' t deploy

Cependant, nous n'avons pas pu tester cette fonctionnalit.

4.5.2. kadeployON.sh : dploiement avec kadeploy3 sur les machines rserves


Ce script prend en unique paramtre le GRID_JOB_ID. Il tablit une liste des machines rserves dans le chier tmp_gridstat. Il dploie ensuite avec kadeploy3 un environnement pour le frontend OpenNebula sur une machine, et un environnement pour les noeuds sur toutes les autres. Toutes les commandes sont lances par SSH sur les sites auxquels appartiennent les nuds viss.

4.5.3. pingON.sh : vrication de la connexion rseau des machines dployes


Ce script ache une liste des nuds dploys et leur tat. Il est trs souvent ncessaire d'attendre plusieurs minutes pour que tous les nuds rcuprent une adresse IP par DHCP.

4.5.4. congureON.sh : conguration automatique du frontend OpenNebula


Ce script se contente d'ajouter tous les nuds OpenNebula au cloud, en excutant sur le frontend une srie de commandes "textitonehost create node im_kvm vmm_kvm tm_ssh. Il est ncessaire de modier la valeur de la variable sshpubkey par le chemin de votre cl publique SSH. Lors de la premire connexion SSH au frontend en root, il sera ncessaire de taper le mot de passe : grid5000

43

4.5.5. creationvmON.rb : cration des chiers de base pour une VM


Ce script permet de crer une archive contenant l'image de la VM, le chier de description de la VM et le script init.sh.

Contextualisation et init.sh La dicult est la conguration rseau qui n'est pas xe sur tous les sites (rseaux

pour les machines virtuelles et passerelles) ce qui pose problme pour un dploiement sur plusieurs sites. Auparavant, nous utilisions les capacits de gestion de rseau intgres OpenNebula pour l'attribution automatique des IP (vnet), et nous dnissions la passerelle dans le script de contexte (init.sh). Mais chaque site possde sa propre conguration rseau spcique, et OpenNebula n'est pas assez souple pour grer le cas d'un Cloud distribu sur plusieurs sites htrognes. La solution que nous avons trouv est d'utiliser le DHCP de chaque site. Le DHCP attribue une IP automatiquement aux machines virtuelles, et donnent galement le reste de la conguration rseau comme la passerelle par dfaut. Pour cela nous avons modi le script init.sh pour spcier une adresse mac correspondant l'ID de la machine virtuelle et pour qu'il fasse une requte DHCP sur le rseau de production.

4.5.6. deployvmON.sh : dploiement des machines virtuelles


Ce script interactif copie l'archive gnre par le script creationvmON.rb sur le frontend et dploie les VM en excutant sur une srie de commandes onevm create cher.one.

44

5. Comparatif
Stockage Eucalyptus Trs bien : un contrleur principal walrus et des contrleurs de stockage sur chaque nud. OpenStack Bien : juste l'essentiel, espace de stockage partag. OpenNebula Neutre : par dfaut, copie des machines virtuelles par SSH, gestion d'un rpertoire partag via NFS et possibilit d'utiliser une solution complmentaire comme un systme de chiers distribu. Xen, KVM, VMware Avantages et inconvnients, automatis pour un rseau simple, manuel via contextualisation sur un rseau complexe. Cloud priv Neutre, prvu pour des utilisateurs de conance (besoin d'accs au frontend pour l'administration via libvirt ou les commandes one*) Manuelle, installation facile sur les distributions supportes (dont Debian et Ubuntu). Avance, deuxime version stable, solution supporte par Debian. Complte, documentations, rfrences de tous les chiers de conguration, exemples. Manque d'aide sur un environnement complexe. Sympathique, de nombreuses prsentations disponibles, et aide sur le canal IRC #opennebula@freenode. Excellente, OpenNebula est crit en Ruby de faon lgante, et facilement extensible via une architecture base de drivers. Excellente, au prix d'une conception trs pure en n'intgrant que le minimum. OpenNebula s'avre trs exible et donne beaucoup de possibilits l'utilisateur en lui laissant des possibilits de congurations trs proches de celles des hyperviseurs supports.

Hyperviseur Rseau

Xen, KVM Limit, non prvu pour un dploiement sur un rseau complexe. Cloud public et priv Bien, chaque contrleur est authenti par cl SSH et chiers de permission pour authentier toutes les transactions. Problmatique, dpend de l'environnement rseau et matriel, dicult en environnement htrogne. Aboutie, solution intgre Ubuntu Server, produit complet avec une interface de gestion web fonctionnelle.

Xen, KVM Sans opinion, nos tests ne nous ont pas permis d'mettre un avis. Cloud public et priv Trs bien, authentication utilisateur par cl, utilisation des Euca2ools. Facile, installation automatise et documente. Jeune, mais prometteur. Soutenu par de grands acteurs de dirents secteurs (informatique, aronautique, etc). Excellente, site bien fourni et facile d'accs avec la fois un wiki contenant l'essentiel et une documentation ocielle disponible et trs dtaille. Accueillante, la communaut ne cesse de grandir et est toujours prte rpondre aux questions. Sans opinion, OpenStack est crit en Python et est premire vue simple d'accs. Bonne, OpenStack se dcline en deux versions : une version oriente stockage et une version oriente applications, ce qui permet d'adapter le cloud ses besoins.

Orientation Scurit

Installation

Maturit

Documentation Correcte, complte mais pas toujours jour.

Communaut

Extensibilit

Flexibilit

Ferme et peu accueillante, quipe de chercheurs peu disponible pour rpondre aux problmes. Dicile, Eucalyptus s'appuie sur le SDK Java et le code est peu accessible. La solution est compatible avec les API Amazon EC2. Trs bonne, tant que l'on reste dans une architecture classique, sa grande modularit est un atout qui permet de facilement le dployer sur une architecture multi-sites et permet galement de l'tendre la demande.

45

Simplicit

Mitig, lorsque l'on reste dans un cadre d'utilisation classique, la solution est simple mettre en uvre, en revanche, sur une architecture complexe, le dploiement devient un casse-tte.

Bonne, en eet, grce la documentation et les scripts d'installation fortement comments, tout se passe bien en suivant le pas--pas du wiki.

Moyenne, les fonctions de base sont simples utiliser, le passage un environnement complexe l'est moins.

Eucalyptus est une solution mature et qui permet l'installation d'une infrastructure de type cloud assez facilement tant que l'on reste dans les clous de son fonctionnement. Cependant, le but du cloud computing est de faciliter l'volution ce qu'Eucalyptus ne permet pas. C'est donc pour cela qu'il est actuellement dlaiss pour d'autres solutions. OpenNebula est une autre solution de cloud, exible et mature. Sa conception est trs pure, et laisse une grande libert l'administrateur qui souhaiterait dployer cette solution au prix d'un eort d'intgration pouss au rseau et d'autres solutions complmentaires pour le stockage. Dans cette optique, OpenNebula est une solution adapte Grid 5000. OpenStack est une solution encore jeune, mais qui a un potentiel trs important par rapport son architecture et sa communaut ainsi que le support de ses partenaires. Il s'agit donc d'une solution surveiller car nous pensons qu'elle peut devenir la rfrence des solutions de cloud computing libre.

46

6. Conclusion
L'objectif de ce projet tait de dployer et d'valuer les direntes solutions libre permettant de mettre en place un cloud priv sur la plateforme Grid 5000. Cet objectif est partiellement atteint. En eet, nous avons pu tester trois solutions de cloud : Eucalyptus, OpenNebula et OpenStack. Ce projet tant trs ambitieux, nous nous sommes vite heurts de nombreux problmes, que ce soit d aux solutions de cloud ou leur intgration sur le Grid 5000, notamment en ce qui concerne le rseau. Tous ces problmes nous ont montr la complexit d'utiliser une telle plate-forme, et leurs rsolutions nous a souvent retard mais nous ont appris investiguer. Ce projet nous a galement apport une exprience de travail en quipe sur un projet de longue dure, en le dcoupant en tches et en rpartissant le travail, ce qui nous a prpar au travail dans le monde professionnel et notre stage. Ce projet a t pour nous une chance de dcouvrir un environnement aussi complexe que Grid 5000, ce qui nous a permis d'acqurir de l'exprience en administration systmes et rseaux et d'approfondir nos connaissances dans le domaine de la virtualisation et du cloud computing.

47

7. Bibliographie
L'ensemble des dnitions ont t trouvs principalement sur le site Wikipdia : http://fr.wikipedia.org/ Les documentations ocielles des solutions testes :  Eucalyptus : http://open.eucalyptus.com/  UEC : https://help.ubuntu.com/community/UEC  OpenStack : http://www.openstack.org/  OpenNebula : http://opennebula.org/ Le livre "book eucalyptus beginners guide uec edition 1" rdig par Johnson D., Kiran Murari, Murthy Raju, Suseendran RB., Yogesh Girikumar, le 25 mai 2010 disponible au format pdf en tlchargement sur les sites de distributions d'ebooks comme celui-ci : http://ebookbrowse.com/search/eucalyptus-beginners-guide-uec-edition1 Les sites ociels suivants :  Debian http://www.debian.org/  Ubuntu-fr http://ubuntu-fr.org/  Ubuntu http://www.ubuntu.com Le site de Grid 5000 en particulier pour ses nombreux tutoriels : https://www.grid5000.fr/ Le site personnel de Pierre Riteau, thsard a l'universit de Rennes qui a test le dploiement de Nimbus sur Grid 5000 http://perso.univ-rennes1.fr/pierre.riteau/ et les slides techniques de sa participation au challenge Grid 5000 de l'anne 2010 : https://www.grid5000.fr/school2010/slides/Challenge_Riteau.pdf

Presse :  ISGTW http://www.thedigitalscientist.org/feature/feature-reading-sky-computing  ERCIM News Octobre 2010http://ercim-news.ercim.eu/en83/special/large-scale-cloud-computing-researchUtilisation de launchpad 1 : launchpad.net/vmbuilder OpenNebula Installation and Conguration Guide, fait par Marian Mihailescu, thsard au dpartement de sciences de l'universit de Singapour, rdig le 11 aot 2010 http://marianmi.comp.nus.edu.sg/2010/08/
opennebula-installation-and-configuration-guide.php

1. Launchpad est la plate-forme de dveloppement logiciel de Canonical.

48

A. Annexe : Diagramme de Gantt

Figure A.1.: Diagramme de Gantt de l'organisation de notre projet

49

B. Annexe : Commandes de base pour la soumission de job


Cet annexe est un mmos que nous avons crit en suivant les tutoriels sur le site de Grid 5000, il en est par consquent inspir et moins complet. Il s'agit d'un rsum non exhaustif des commandes de base pour rserver des nuds sur Grid 5000.

B.1. tat des cluster


Voir les ressources et nuds occups et disponibles :
f r o n t e n d : d i s c o nancy

B.2. Informations sur les nuds


oarnodes est aussi un outil en ligne de commande. Il permet d'acher les proprits des nuds.

B.3. Information sur les jobs


Pour tout ce qui concerne les jobs en cours, il faut utiliser la commande oarstat. Voir tous les jobs (soumissions) :
frontend : oarstat

Voir un job spcique :


f r o n t e n d : o a r s t a t f j $OAR_JOB_ID

Voir tous les jobs d'un utilisateur :


f r o n t e n d : o a r s t a t u l o g i n

B.4. Soumission de job


Pour tout ce qui concerne la soumission de job, il faut utiliser la commande oarsub. Pour soumettre un job :
f r o n t e n d : oarsub I

Le serveur vous ache le job correspondant votre demande. Pour soumettre un job sur deux nud :
f r o n t e n d : oarsub I l nodes=2

Par dfaut, vous serez connect sur le premier nud, mais vous pouvez toujours utiliser cette commande pour vous connecter un autre nud.
f r o n t e n d : oarsub C $OAR_JOB_ID

Pour rserver des nuds partir d'une date pour une dure limite :
f r o n t e n d : oarsub r '2010 03 24 1 7 : 3 0 : 0 0 ' l nodes =2, w a l l t i m e =0:10:00

Pour terminer un job :


f on t e nd : o a r d e l $OAR_JOB_ID

50

B.5. Autres commandes


Pour voir les nuds :
node | f r o n t e n d : s o r t u $OAR_NODEFILE

Pour se connecter un notre nud :


node : oarsh another hostname

Pour se dconnecter et nir le job :


node : e x i t f r o n t e n d : o a r d e l $OAR_JOB_ID \end Pour l i r e l a s o r t i e s t d o u t ( ou s t d e r r d ' un noeud ) : \ begin { l s t l i s t i n g } f r o n t e n d : t a i l f OAR.OAR_JOB_ID. s t d o u t f r o n t e n d : t a i l f OAR.OAR_JOB_ID. s t d e r r

B.6. Utiliser plusieurs clusters (oargridsub)


Pour rserver plusieurs nuds sur des clusters dirents :
f r o n t e n d : o a r g r i d s u b c l u s t e r 1 : r d e f ="/nodes =2" , c l u s t e r 2 : r d e f ="/nodes =1" , c l u s t e r 3 : r d e f ="nodes=1"

Pour visualiser un job :


f r o n t e n d : o a r g r i d s t a t w l g r i d J o b I d

Pour terminer un job :


frontend : oargriddel gridJobId

51

C. Annexe : Dployer et enregistrer un environnement avec kadeploy3


Cet annexe est un mmos que nous avons crit en suivant les tutoriels sur le site de Grid 5000, il en est par consquent inspir et moins complet. Nous allons rsumer ici l'enregistrement et le dploiement d'environnements sur Grid 5000.

C.1. Rserver des noeuds pour le dploiement


Rserver un noeud, en interactif pour 3 heures :
f r o n t e n d : oarsub I t deploy l nodes =1, w a l l t i m e=3

Lister les noeuds rservs :


f r o n t e n d : c a t $OAR_FILE_NODES

C.2. kaenv3 : gestion des environnements kadeploy


Lister tous les environnements disponibles :
f r o n t e n d : kaenv3 l

Lister les environnements partags par un utilisateur :


f r o n t e n d : kaenv3 l u u s e r

Acher les informations d'un environnement :


f r o n t e n d : kaenv3 p lenny x64base u deploy

C.3. kadeploy3
Dployer un environnement sur les nuds rservs :
f r o n t e n d : kadeploy3 e lenny x64base f $OAR_FILE_NODES

Pour copier le chier /.ssh/authorized_keys (dfaut) dans /root sur les environnements dploys, utiliser l'option -k Obtenir une console sur un nud :
f r o n t e n d : k a c o n s o l e 3 m node . s i t e . g r i d 5 0 0 0 . f r

Se loguer sur un nud en SSH (mot de passe par dfaut : grid5000)


f r o n t e n d : s s h root@node . s i t e . g r i d 5 0 0 0 . f r

C.4. kaenv3 : Crer un nouvel environnement partir d'un environnement personnalis


Cration de l'archive depuis le frontend ou sur le noeud : Attention, avant d'enregistrer un environnement, vous devez supprimer le chier de rgles udev xant les adresses mac des interfaces rseau.
node : rm / e t c / udev / r u l e s . d/ _ p e r s i s t e n t net . r u l e s

1re mthode : 52

f r o n t e n d : s s h root@node tgz g5k > path_to_myimage . t g z

2me mthode :
node : tgz g5k l o g i n @ f r o n t e n d : path_to_myimage . t g z

Cration de l'environnement :
f r o n t e n d : kaenv3 p lenny x64base u deploy > mon_environnement . env

Puis on modie le chier mon_environnement.env


name : mylenny version : 4 d e s c r i p t i o n : my lenny author : maxime . lemaux@gmail . com t a r b a l l : /home/mlemaux/ a r c h i v e . t g z | t g z p o s t i n s t a l l : / g r i d 5 0 0 0 / p o s t i n s t a l l s / etch x64base 2.0 p o s t . t g z | t g z | t r a i t e m e n t . ash / rambin k e r n e l : / boot / vmlinuz 2.6.26 2 amd64 i n i t r d : / boot / i n i t r d . img 2.6.26 2 amd64 f d i s k t y p e : 83 f i l e s y s t e m : ext3 environment_kind : l i n u x demolishing_env : 0

On enregistre notre environnement pour pouvoir le dployer avec kadeploy3 et le partager avec les autres utilisateurs.
f r o n t e n d : kaenv3 a mon_environnement . env

53

D. Annexe : Scripts de synchronisation pour Grid 5000


D.1. sendsshkeys.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #! / bin / bash # # # # A u t o m a t i c a l l y send i n t e r n a l keys to a l l s i t e s Execute " ssh keygen " on one s i t e , add the new g e n e r a t e d p u b l i c key to known h o s t Then , use t h i s s c r i p t , f i r s t arg i s your u s e r name , second i s the p r e c e d e n t s i t e Example : . / s e n d s s h k e y s . sh h c a r t i a u x l i l l e

u s e r=$1 h o s t=$2 s i t e s=" bordeaux g r e n o b l e l i l l e lyon o r s a y r e n n e s s o p h i a t o u l o u s e " pubkey=" id_rsa . pub" p r i v k e y=" id_rsa " echo R e t r i e v i n g authorized_keys f i l e scp $user@$host . g5k : / home/ $ u s e r / . s s h / authorized_keys . scp $user@$host . g5k : / home/ $ u s e r / . s s h / $pubkey . scp $user@$host . g5k : / home/ $ u s e r / . s s h / $ p r i v k e y . i f [ [ "$ ? " != "0" ] ] then echo F ai le d , e x i t i n g exit 1 fi for s i t e in $ s i t e s do i f [ [ " $host " == " $ s i t e " ] ] then echo Skipping s i t e $ s i t e continue fi echo Sending f i l e s to $ s i t e scp authorized_keys $pubkey $ p r i v k e y $ u s e r @ $ s i t e . g5k : / home/ $ u s e r / . s s h / i f [ [ "$ ? " != "0" ] ] then echo " $ s i t e : FAILED" else echo " $ s i t e : DONE" fi done

54

D.2. synctosite.sh
1 #! / bin / bash 2 3 s i t e=$1 4 u s e r =`whoami ` 5 6 i f [ [ " $ s i t e " == "" ] ] 7 then 8 echo " s y n c t o s i t e s y n c h r o n i z e your home d i r e c t o r y with r s y n c to the s i t e o f your c h o i c e " 9 echo " Usage : s y n c t o s i t e . sh { bordeaux , g r e n o b l e , l i l l e , lyon , orsay , rennes , sophia , t o u l o u s e }" 10 f i 11 12 echo "Some f i l e s might be d e l e t e d on $1 . Are you s u r e ? [ n ] " 13 14 read check 15 16 i f [ [ " $check " == "y" ] ] 17 then 18 19 cd ~ 20 r s y n c d e l e t e avz e x c l u d e . s s h /known_hosts /home/ $ u s e r / $ s i t e . g r i d 5 0 0 0 . f r : / home/ $ u s e r / 21 22 f i

55

E. Annexe : Conguration des environnements OpenNebula


E.1. Conguration rseau : /etc/rc.local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #! / bin / sh # # rc . l o c a l # # This s c r i p t i s executed at the end o f each m u l t i u s e r r u n l e v e l . # Make s u r e t h a t the s c r i p t w i l l " e x i t 0" on s u c c e s s or any o t h e r # v a l u e on e r r o r . # # In o r d e r to e n a b l e or d i s a b l e t h i s s c r i p t j u s t change the e x e c u t i o n # bits . # # By d e f a u l t t h i s s c r i p t does nothing . i f c o n f i g br0 i f [ "x$ ? " != "x0" ] ; then e x p o r t NET_DEV=` n e t s t a t rn | grep ^ 0 . 0 . 0 . 0 | awk '{ p r i n t $8 } ' ` / e t c / i n i t . d/ networking s t o p # / s b i n / d h c l i e n t r $NET_DEV p f / var / run / d h c l i e n t .$NET_DEV. pid / u s r / s b i n / b r c t l addbr br0 / u s r / s b i n / b r c t l a d d i f br0 $NET_DEV / s b i n / i f c o n f i g $NET_DEV up / s b i n / d h c l i e n t br0 fi exit 0

E.2. /etc/rc.bindhome
1 #! / bin / bash 2 3 mv / var / l i b / one /tmp 4 mkdir / var / l i b / one 5 mount bind /tmp/ one / var / l i b / one

56

F. Annexe : Scripts de dploiement automatis pour OpenNebula


F.1. oargridsubON.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #! / bin / bash # s e t x ARGS="" DURATION=" 0 2 : 0 0 : 0 0 " f o r l i n e i n ` c a t c l u s t e r t e s t ` do SITE=` echo $ l i n e | awk 'BEGIN {FS=" ; "} ; { p r i n t $1 } ' ` NBR=` echo $ l i n e | awk 'BEGIN {FS=" ; "} ; { p r i n t $2 } ' ` echo SITE $SITE echo NBR $NBR # ARGS=$SITE : r d e f ="/nodes=$NBR: prop=v i r t u a l ='amdv ' OR v i r t u a l =' i v t ' " ,$ARGS ARGS=$SITE : r d e f="/ nodes=$NBR" ,$ARGS done s e t x o a r g r i d s u b w \ '$DURATION\ ' $ARGS t deploy

F.2. kadeployON.sh
1 #! / bin / bash 2 3 # s e t x 4 5 JID=$1 6 USER=`whoami ` 7 8 o a r g r i d s t a t w l $JID | sed '/^ $/d ' | s o r t u > tmp_gridstat 9 10 f r o n t e n d =` c a t tmp_gridstat | head n 1 ` 11 s i t e _ f r o n t e n d =` echo $ f r o n t e n d | awk 'BEGIN { FS=" . " } ; { p r i n t $2 } ' ` 12 13 echo "== Dploiement du f r o n t e n d ==" 14 echo f r o n t e n d $ f r o n t e n d 15 s s h $USER@$site_frontend " kadeploy3 e s i d opennebula f r o n t e n d u h c a r t i a u x m $ f r o n t e n d " & > / dev / n u l l 2> / dev / n u l l 16 17 18 echo "== Dploiement des nodes ==" 19 f o r machine i n ` t a i l n +2 tmp_gridstat | uniq ` 20 do 21 s i t e =` echo $machine | awk 'BEGIN { FS=" . " } ; { p r i n t $2 } ' ` 22 echo node $machine 23 s s h $USER@$site " kadeploy3 e s i d opennebula node u h c a r t i a u x m $machine " & > / dev / n u l l 2> / dev / n u l l 24 25 done

F.3. pingON.sh
1 #! / bin / bash 2 3 f o r i i n ` c a t tmp_gridstat ` ; do

57

4 5 6 7 8 9 10 11 12

ping c 1 $ i 2> / dev / n u l l > / dev / n u l l i f [ "x$ ? " == "x0" ] ; then echo $ i : OK else echo $ i : KO fi done

F.4. congureON.sh
1 #! / bin / bash 2 3 s e t x 4 5 f r o n t e n d =` c a t tmp_gridstat | head n 1 ` 6 7 sshpubkey="/home/ h c a r t i a u x / . s s h / id_dsa . pub" 8 9 scp $sshpubkey root@$frontend : / r o o t / . s s h / authorized_keys 10 scp root@$frontend : / var / l i b / one / . s s h / authorized_keys . 11 c a t $sshpubkey >> authorized_keys 12 13 scp authorized_keys root@$frontend : / var / l i b / one / . s s h / authorized_keys 14 15 f o r machine i n ` t a i l n +2 tmp_gridstat | uniq ` 16 do 17 18 s s h oneadmin@$frontend " onehost add $machine im_kvm vmm_kvm tm_ssh" 19 20 done

F.5. creationvmON.rb
1 #! / u s r / bin / ruby 2 3 puts "Ce s c r i p t permet de g n r e r une a r c h i v e c o n t e a n t l ' image de l a vm, l e f i c h i e r de d f i n i t i o n e t l e s c r i p t i n i t . sh . \ nAttention l e nom c h o i s i pour l e s vm s e r a l e nom de l ' a r c h i v e . \ n\n" 4 5 6 puts "Chemin de l ' image d e p l o i e r ( Format de l ' image . img , qcow2 , r a r ) : " 7 image = g e t s . s t r i p 8 9 puts "Nom des machines v i r t u e l l e s : " 10 nom = g e t s . s t r i p 11 12 puts " U t i l i s a t i o n CPU : " 13 cpu = g e t s . s t r i p 14 15 puts " U t i l i s a t i o n mmoire : " 16 memoire = g e t s . s t r i p 17 18 puts " Machine v i r t u e l 32 b i t ou 64 b i t ? ( 3 2 / 6 4 ) " 19 format = g e t s . s t r i p 20 21 puts "Chemin du s c r i p t i n i t . sh " 22 i n i t = g e t s . s t r i p 23 24 ` mkdir #{nom} ` 25 26 F i l e . new ( "#{nom}/#{nom } . one " , "w+" ) 27 template = F i l e . open ( "#{nom}/#{nom } . one " , "w" ) 28 template . w r i t e ( "NAME = #{nom}$VMID 29 CPU = #{cpu} 30 MEMORY = #{memoire }\n 31 DISK = [ 32 s o u r c e = \"#{image }\" , 33 t a r g e t = \" sda \" ,\ n" )

58

34 nomImage=`basename #{ image } ` 35 nomImage =~ / \ . ( . ) $/ 36 i f $1 != "img" 37 template . w r i t e ( " r e a d o n l y = \" no \" ,\ n d r i v e r = \"#{$1 } \ " ] \ n" ) 38 e l s e 39 template . w r i t e ( " r e a d o n l y = \" no \ " ] \ n" ) 40 end 41 42 i f format == " 64 " 43 template . w r i t e ( "OS = [ ARCH = \"x86_64\" ] \ n" ) 44 end 45 46 template . w r i t e ( "NIC = [ BRIDGE = \" br0 \" ] \ n 47 FEATURES = [ a c p i =\"no \" ] \ n 48 CONTEXT = [ 49 hostname = \"$NAME\" , 50 f i l e s = \"/ var / l i b / one/#{nom}/ i n i t . sh / var / l i b / one / . s s h / id_rsa . pub \" , 51 t a r g e t = \" hdc \" , 52 root_pubkey = \" id_rsa . pub \" , 53 username = \" oneadmin \" , 54 user_pubkey = \" id_rsa . pub\" 55 ] " ) 56 57 ` cp #{ i n i t } #{nom } ; cp #{image } #{nom} ` 58 ` t a r c f v z #{nom } . t a r . gz #{nom } ; rm R #{nom} `

F.6. init.sh
1 #! / bin / bash 2 3 #S c r i p t bas s u r l ' exemple f o u r n i par l e paquet OpenNebula 4 5 #Fonction qui gnre une a d r e s s e Mac en f o n c t i o n de L ' ID de l a VM que f o u r n i OpenNebula 6 7 i f [ f /mnt/ c o n t e x t . sh ] 8 then 9 . /mnt/ c o n t e x t . sh 10 f i 11 12 Hexa=` p r i n t f "%x\n" $ID ` 13 TailHexa =` expr l e n g t h $Hexa ` 14 15 i f [ $ID l t 256 ] 16 then 17 i f [ $TailHexa eq 1 ] 18 then 19 Mac=00:16:3 e : 0 0 : 0 0 : 0 $Hexa 20 else 21 Mac=00:16:3 e : 0 0 : 0 0 : $Hexa 22 fi 23 e l s e 24 i f [ $TailHexa eq 3 ] 25 then 26 HexaFin=${Hexa : 1 } 27 HexaDeb=${Hexa : 0 : 1 } 28 Mac=00:16:3 e : 0 0 : 0 $HexaDeb : $HexaFin 29 else 30 HexaFin=${Hexa : 2 } 31 HexaDeb=${Hexa : 0 : 2 } 32 Mac=00:16:3 e : 0 0 : $HexaDeb : $HexaFin 33 fi 34 f i 35 36 i f c o n f i g eth0 up 37 i f c o n f i g eth0 hw e t h e r $Mac 38 i f c o n f i g eth0 up 39 d h c l i e n t eth0 40 41 i f [ f /mnt/$ROOT_PUBKEY ] ; then 42 mkdir p / r o o t / . s s h 43 c a t /mnt/$ROOT_PUBKEY >> / r o o t / . s s h / authorized_keys 44 chmod R 600 / r o o t / . s s h / 45 f i

59

46 47 48 49 50 51 52 53 54 55

i f [ n "$USERNAME" ] ; then useradd s / bin / bash m $USERNAME i f [ f /mnt/$USER_PUBKEY ] ; then mkdir p /home/$USERNAME/ . s s h / c a t /mnt/$USER_PUBKEY >> /home/$USERNAME/ . s s h / authorized_keys chown R $USERNAME:$USERNAME /home/$USERNAME/ . s s h chmod R 600 /home/$USERNAME/ . s s h / authorized_keys fi fi

F.7. deployvmON.sh
1 #! / bin / bash 2 3 echo " A t t e n t i o n ce s c r i p t e s t f a i t pour d p l o y e r l a a r c h i v e gnr par l e s c r i p t creationvmON . rb . \ nLe nom de l ' a r c h i v e , du d o s s i e r e t du f i c h i e r d e s c r i p t i f de l a VM d o i v e n t a v o i r l e mme nom . \ nExemple : Ubntu . t a r . gz c o n t i e n t l e r p e r t o i r e Ubuntu e t dans ce r p e r t o i r e i l y a l e f i c h i e r Ubuntu . one \n" 4 5 echo "Chemin de l ' a r c h i v e : " 6 read a r c h i v e 7 f r o n t e n d =` c a t tmp_gridstat | head n 1 ` 8 r s y n c avz p r o g r e s s p a r t i a l $ a r c h i v e oneadmin@$frontend : . 9 s s h oneadmin@$frontend " t a r xvf / var / l i b / one / $1 " 10 11 nomVM=`basename $ a r c h i v e | cut d" . " f1 ` 12 13 echo "Combien de machine v i r t u e l l e voulez vous ? " 14 read nombreVM 15 f o r i i n ` seq 1 $nombreVM ` ; 16 do 17 s s h oneadmin@$frontend "onevm c r e a t e / var / l i b / one /$nomVM/$nomVM. one " 18 done

60

G. Annexe : Scripts d'installation de Nova


G.1. Script d'installation sur un seul serveur
Source : https://github.com/vishvananda/novascript/raw/master/nova.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #! / u s r / bin / env bash DIR=`pwd ` CMD =$1 i f [ "$CMD" = " branch " ] ; then SOURCE_BRANCH=${2: l p : nova } DIRNAME=${3: nova } else DIRNAME=${2: nova } fi NOVA_DIR=$DIR/$DIRNAME i f [ ! n "$HOST_IP" ] ; then # NOTE( v i s h ) : This w i l l j u s t g e t the f i r s t i p i n the l i s t , so i f you # have more than one eth d e v i c e s e t up , t h i s w i l l f a i l , and # you should e x p l i c i t l y s e t HOST_IP i n your environment HOST_IP=`LC_ALL=C i f c o n f i g | grep m 1 ' i n e t addr : ' | cut d : f 2 | awk '{ p r i n t $1 } ' ` fi INTERFACE=${INTERFACE: eth0 } FLOATING_RANGE=${FLOATING_RANGE: 1 0 . 6 . 0 . 0 / 2 7 } FIXED_RANGE=${FIXED_RANGE: 1 0 . 0 . 0 . 0 / 2 4 } USE_LDAP=${USE_E_MYSQL: 0} MYSQL_PASS=${MYSQL_PASS: nova } TEST=${TEST: 0} USE_LDAP=${USE_LDAP: 0} # Use OpenDJ i n s t e a d o f OpenLDAP when u s i n g LDAP USE_OPENDJ=${USE_OPENDJ: 0} # Use IPv6 USE_IPV6=${USE_IPV6: 0} LIBVIRT_TYPE=${LIBVIRT_TYPE: qemu} NET_MAN =${NET_MAN: VlanManager} # NOTE( v i s h ) : I f you a r e u s i n g FlatDHCP on m u l t i p l e hosts , s e t the i n t e r f a c e # below but make s u r e t h a t the i n t e r f a c e doesn ' t a l r e a d y have an # i p or you r i s k b r e a k i n g t h i n g s . # FLAT_INTERFACE=eth0 i f [ "$USE_MYSQL" == 1 ] ; then SQL_CONN=mysql : / / r o o t : $MYSQL_PASS@localhost/ nova else SQL_CONN=s q l i t e : / / /$NOVA_DIR/ nova . s q l i t e fi i f [ "$USE_LDAP" == 1 ] ; then AUTH=l d a p d r i v e r . LdapDriver else AUTH=d b d r i v e r . DbDriver fi i f [ "$CMD" == " branch " ] ; then sudo apt g e t i n s t a l l y bzr i f [ ! e "$DIR / . bzr " ] ; then bzr i n i t repo $DIR fi rm r f $NOVA_DIR bzr branch $SOURCE_BRANCH $NOVA_DIR cd $NOVA_DIR mkdir p $NOVA_DIR/ i n s t a n c e s mkdir p $NOVA_DIR/ networks exit fi # You should only have to run t h i s once

61

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

i f [ "$CMD" == " i n s t a l l " ] ; then sudo apt g e t i n s t a l l y python s o f t w a r e p r o p e r t i e s sudo addapt r e p o s i t o r y ppa : nova c o r e / trunk sudo apt g e t update sudo apt g e t i n s t a l l y dnsmasqbase kpartx kvm gawk i p t a b l e s e b t a b l e s sudo apt g e t i n s t a l l y user mode l i n u x kvm l i b v i r t bin sudo apt g e t i n s t a l l y s c r e e n e u c a 2 o o l s vlan c u r l rabbitmq s e r v e r sudo apt g e t i n s t a l l y lvm2 i s c s i t a r g e t open i s c s i sudo apt g e t i n s t a l l y s o c a t unzip echo "ISCSITARGET_ENABLE=t r u e " | sudo t e e / e t c / d e f a u l t / i s c s i t a r g e t sudo / e t c / i n i t . d/ i s c s i t a r g e t r e s t a r t sudo modprobe kvm sudo / e t c / i n i t . d/ l i b v i r t bin r e s t a r t sudo modprobe nbd sudo apt g e t i n s t a l l y python t w i s t e d python mox python ipy python p a s t e sudo apt g e t i n s t a l l y python migrate python g f l a g s python g r e e n l e t sudo apt g e t i n s t a l l y python l i b v i r t python l i b x m l 2 python r o u t e s sudo apt g e t i n s t a l l y python netaddr python p a s t e d e p l o y python e v e n t l e t sudo apt g e t i n s t a l l y python n o v a c l i e n t python g l a n c e python cheetah sudo apt g e t i n s t a l l y python c a r r o t python tempita python sqlalchemy i f [ "$USE_IPV6" sudo apt g e t sudo bash c sudo bash c fi == 1 ] ; install " echo 1 " echo 0 then

y radvd

> / proc / s y s / net / ipv6 / c o n f / a l l / f o r w a r d i n g " > / proc / s y s / net / ipv6 / c o n f / a l l / accept_ra "

i f [ "$USE_MYSQL" == 1 ] ; then c a t <<MYSQL_PRESEED | debconf s e t s e l e c t i o n s mysql s e r v e r 5.1 mysql s e r v e r / root_password password $MYSQL_PASS mysql s e r v e r 5.1 mysql s e r v e r / root_password_again password $MYSQL_PASS mysql s e r v e r 5.1 mysql s e r v e r / start_on_boot boolean t r u e MYSQL_PRESEED apt g e t i n s t a l l y mysql s e r v e r python mysqldb fi mkdir p $DIR/ images wget c http : / / images . a n s o l a b s . com/ t t y . t g z t a r C $DIR/ images z x f t t y . t g z exit fi NL=` echo ne ' \ 0 1 5 ' ` function screen_it { s c r e e n S nova X s c r e e n t $1 s c r e e n S nova p $1 X s t u f f "$2$NL" } i f [ "$CMD" == " run " ] | | [ "$CMD" == " run_detached " ] ; then
v e r b o s e nodaemon d h c p b r i d g e _ f l a g f i l e=$NOVA_DIR/ bin / nova . c o n f network_manager=nova . network . manager .$NET_MAN my_ip=$HOST_IP p u b l i c _ i n t e r f a c e=$INTERFACE v l a n _ i n t e r f a c e=$INTERFACE s q l _ c o n n e c t i o n=$SQL_CONN auth_driver=nova . auth .$AUTH l i b v i r t _ t y p e=$LIBVIRT_TYPE

c a t >$NOVA_DIR/ bin / nova . c o n f << NOVA_CONF_EOF

NOVA_CONF_EOF

i f [ n "$FLAT_INTERFACE" ] ; then echo " f l a t _ i n t e r f a c e=$FLAT_INTERFACE" >>$NOVA_DIR/ bin / nova . c o n f fi i f [ "$USE_IPV6" == 1 ] ; then echo "use_ipv6 " >>$NOVA_DIR/ bin / nova . c o n f fi k i l l a l l dnsmasq i f [ "$USE_IPV6" == 1 ] ; then k i l l a l l radvd fi

62

140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

s c r e e n d m S nova t nova sleep 1 i f [ "$USE_MYSQL" == 1 ] ; then mysql p$MYSQL_PASS e 'DROP DATABASE nova ; ' mysql p$MYSQL_PASS e 'CREATE DATABASE nova ; ' else rm $NOVA_DIR/ nova . s q l i t e fi i f [ "$USE_LDAP" == 1 ] ; then i f [ "$USE_OPENDJ" == 1 ] ; then echo ' ldap_user_dn=cn=D i r e c t o r y Manager ' >> \ / e t c / nova /novamanage . c o n f sudo $NOVA_DIR/ nova / auth / opendj . sh else sudo $NOVA_DIR/ nova / auth / s l a p . sh fi fi rm r f $NOVA_DIR/ i n s t a n c e s mkdir p $NOVA_DIR/ i n s t a n c e s rm r f $NOVA_DIR/ networks mkdir p $NOVA_DIR/ networks i f [ ! d "$NOVA_DIR/ images " ] ; then l n s $DIR/ images $NOVA_DIR/ images fi i f [ "$TEST" == 1 ] ; then cd $NOVA_DIR python $NOVA_DIR/ run_tests . py cd $DIR fi # c r e a t e the database $NOVA_DIR/ bin /novamanage db sync # c r e a t e an admin u s e r c a l l e d ' admin ' $NOVA_DIR/ bin /novamanage u s e r admin admin admin admin # c r e a t e a p r o j e c t c a l l e d ' admin ' with p r o j e c t manager o f ' admin ' $NOVA_DIR/ bin /novamanage p r o j e c t c r e a t e admin admin # c r e a t e a s m a l l network $NOVA_DIR/ bin /novamanage network c r e a t e $FIXED_RANGE 1 32 # c r e a t e some f l o a t i n g i p s $NOVA_DIR/ bin /novamanage f l o a t i n g c r e a t e ` hostname ` $FLOATING_RANGE # c o n v e r t o l d images $NOVA_DIR/ bin /novamanage image c o n v e r t $DIR/ images # nova a p i c r a s h e s i f we s t a r t i t with a r e g u l a r s c r e e n command , # so send the s t a r t command by f o r c i n g t e x t i n t o the window . s c r e e n _ i t a p i "$NOVA_DIR/ bin /novaa p i " s c r e e n _ i t o b j e c t s t o r e "$NOVA_DIR/ bin /nova o b j e c t s t o r e " s c r e e n _ i t compute "$NOVA_DIR/ bin /novacompute" s c r e e n _ i t network "$NOVA_DIR/ bin /novanetwork " s c r e e n _ i t s c h e d u l e r "$NOVA_DIR/ bin /nova s c h e d u l e r " s c r e e n _ i t volume "$NOVA_DIR/ bin /novavolume " s c r e e n _ i t ajax_console_proxy "$NOVA_DIR/ bin /novaajax c o n s o l e proxy " sleep 2 # e x p o r t environment v a r i a b l e s f o r p r o j e c t ' admin ' and u s e r ' admin ' $NOVA_DIR/ bin /novamanage p r o j e c t z i p f i l e admin admin $NOVA_DIR/ nova . z i p unzip o $NOVA_DIR/ nova . z i p d $NOVA_DIR/ s c r e e n _ i t t e s t " e x p o r t PATH=$NOVA_DIR/ bin :$PATH ; . $NOVA_DIR/ novarc " i f [ "$CMD" != " run_detached " ] ; then s c r e e n S nova x fi

fi

i f [ "$CMD" == " run " ] | | [ "$CMD" == " t e r m i n a t e " ] ; then # shutdown i n s t a n c e s . $NOVA_DIR/ novarc ; euca d e s c r i b e i n s t a n c e s | grep i | cut f 2 | x a r g s euca terminate instances sleep 2 # d e l e t e volumes . $NOVA_DIR/ novarc ; euca d e s c r i b e volumes | grep vol | cut f 2 | x a r g s n1 euca d e l e t e volume sleep 2 fi

63

214 215 216 217 218 219 220 221 222 223 224 225 226 227

i f [ "$CMD" == " run " ] | | [ "$CMD" == " c l e a n " ] ; then s c r e e n S nova X q u i t rm . pid fi i f [ "$CMD" == " scrub " ] ; then $NOVA_DIR/ t o o l s / clean v l a n s i f [ "$LIBVIRT_TYPE" == "uml" ] ; then v i r s h c uml : / / / system l i s t | grep i | awk '{ p r i n t \ $1 } ' | x a r g s n1 v i r s h c uml : / / / system d e s t r o y else v i r s h l i s t | grep i | awk '{ p r i n t \ $1 } ' | x a r g s n1 v i r s h d e s t r o y fi fi

G.2. Script d'installation du contrleur


1.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # # # # # # # # #

Source : https://github.com/dubsquared/OpenStack-NOVA-Installer-Script/raw/master/nova-CC-install-v1.

#! / bin / bash Copyright ( c ) 2010 OpenStack , LLC . L i c e n s e d under the Apache L i c e n s e , Version 2 . 0 ( the " L i c e n s e ") ; you may not use t h i s f i l e e x c e p t i n compliance with the L i c e n s e . You may o b t a i n a copy o f the L i c e n s e at http : / /www. apache . org / l i c e n s e s /LICENSE 2.0 U n l e s s r e q u i r e d by a p p l i c a b l e law or agreed to i n w r i t i n g , s o f t w a r e d i s t r i b u t e d under the L i c e n s e i s d i s t r i b u t e d on an "AS IS " BASIS , WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, e i t h e r e x p r e s s or implied .

# See the L i c e n s e f o r the s p e c i f i c language g o v e r n i n g p e r m i s s i o n s and # l i m i t a t i o n s under the L i c e n s e .

# Written by Wayne A. Walls ( dubsquared ) with the amazing h e l p o f Jordan Rinke ( JordanRinke ) , Vish Ishaya ( v i s h y ) , 19 # and a l o t o f input from the f i n e f o l k s i n #openstack on i r c . f r e e n o d e . net ! 20 21 # P l e a s e c o n t a c t s c r i p t m a i n t a i n e r s f o r q u e s t i o n s , comments , or c o n c e r n s : 22 # Wayne > wayne@openstack . org 23 # Jordan > jordan@openstack . org 24 25 # This s c r i p t i s i n t e n d e d to be ran on a f r e s h i n s t a l l on Ubuntu 1 0 . 0 4 64 b i t . Once ran with 26 # the a p p r o p i a t e v a r i b l e s , w i l l produce a f u l l y f u n c t i o n i n g Nova Cloud C o n t o l l e r . I am working on 27 # g e t t i n g t h i s working on a l l f l a v o r s o f Ubuntu , and e v e n t u a l l y RPM based d i s t r o s . P l e a s e feel free 28 # to reach out to s c r i p t m a i n t a i n e r s f o r anything t h a t can be done b e t t e r . I 'm p r e t t y new to this scripting business 29 # so I 'm s u r e t h e r e i s room f o r improvement ! 30 31 #Usage : bash novaCC i n s t a l l e r . sh 32 33 #This i s a Linux check 34 i f [ ` uname a | grep i l i n u x | wc l ` l t 1 ] ; then 35 echo "Not Linux , not compatible . " 36 exit 1 37 f i 38 39 #Compatible OS Check 40 DEB_OS=` c a t / e t c / i s s u e | grep i ' ubuntu ' ` 41 RH_OS=` c a t / e t c / i s s u e | grep i ' centos ' ` 42 i f [ [ ${#DEB_OS} gt 0 ] ] ; then 43 echo " Valid OS, c o n t i n u i n g . . . " 44 CUR_OS="Ubuntu" 45 e l i f [ [ ${#RH_OS} gt 0 ] ] ; then 46 echo " Unsupported OS, s o r r y ! " 47 CUR_OS="CentOS" 48 exit 1 49 else

64

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

fi echo $CUR_OS d e t e c t e d !

echo " Unsupported OS, s o r r y ! " CUR_OS="Unknown" exit 1

#Set up l o g f i l e f o r debugging LOGFILE=/var / l o g / nova /nova i n s t a l l . l o g mkdir / var / l o g / nova touch / var / l o g / nova /nova i n s t a l l . l o g echo "Nova Cloud C o n t r o l l e r i n s t a l l s c r i p t v1 . 0 " echo echo " S e t t i n g up the Nova cloud c o n t r o l l e r i s a multi s t e p p r o c e s s . A f t e r you s e e d i n f o r m a t i o n , the s c r i p t w i l l take over and f i n i s h o f f the i n s t a l l f o r you . F u l l l o g o f commands w i l l be a v a i l i b l e at / var / l o g / nova /nova i n s t a l l . l o g " echo read p " P r e s s any key to c o n t i n u e . . . " n1 s echo #S e t t i n g up s a n i t y check f u n c t i o n valid_ipv4 ( ) { newmember=$ ( echo $1 | egrep ' ^ [ 0 9 ] { 1 , 3 } \ . [ 0 9 ] { 1 , 3 } \ . [ 0 9 ] { 1 , 3 } \ . [ 0 9 ] { 1 , 3 } $ ' ) ; members=$ ( echo $newmember | t r " . " "\n" ) ; memcount=$ ( echo $newmember | t r " . " "\n" | wc l ) ; i f [ $memcount ne 4 ] ; then echo " f a i l " ; exit ; fi f o r i i n $members ; do i f [ $ i l t 0 ] | | [ $ i gt 255 ] ; then echo " f a i l " ; exit ; fi ; done ; echo " s u c c e s s " ; } #E n f o r c i n g r o o t u s e r to e x e c u t e the s c r i p t USER=r o o t USER2=`whoami ` i f [ $USER != $USER2 ] ; then echo " P l e a s e run t h i s as the user , ' root ' ! " ; e x i t 1 else echo

fi echo

echo echo " Step 1 : S e t t i n g up the database . " #mySQL only f o r now , w i l l update to i n c l u d e o t h e r s i n next r e l e a s e echo echo "mySQL User Config " echo "#################" echo #S e t t i n g up while true ; read echo read echo mySQL r o o t password , and v e r i f y do s p " D e s i r e d mySQL Password : " MYSQL_PASS "" ; s p " V e r i f y password : " MYSQL_PASS2 "" ;

done

i f [ $MYSQL_PASS != $MYSQL_PASS2 ] then echo " Passwords do not match . . . t r y again . " ; continue ; fi break ;

c a t <<MYSQL_PRESEED | debconf s e t s e l e c t i o n s

65

124 mysql s e r v e r 5.1 mysql s e r v e r / root_password password $MYSQL_PASS 125 mysql s e r v e r 5.1 mysql s e r v e r / root_password_again password $MYSQL_PASS 126 mysql s e r v e r 5.1 mysql s e r v e r / start_on_boot boolean t r u e 127 MYSQL_PRESEED 128 echo 129 130 echo " Step 2 : S e t t i n g up the c o n t r o l l e r c o n f i g u r a t i o n . " 131 echo " This i n c l u d e s s e t t i n g the S3 IP , RabbitMQ IP , Cloud C o n t r o l l e r IP , and mySQL h o s t IP" 132 133 echo "Nova Cloud C o n t r o l l e r C o n f i g u r a t i o n " 134 echo "# # # # # # # # # # # # # # # # # #" ################# 135 s l e e p 1 136 137 #C o n f i g u r i n g S3 Host IP 138 s e t o nounset 139 echo 140 141 debug=" : " 142 debug=" echo " 143 144 echo 145 146 #Grabs the f i r s t r e a l IP o f i f c o n f i g , and s e t i t as the d e f a u l t e n t r y 147 d e f a u l t =`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 /g ' | t r d " " ` 148 149 w h i l e t r u e ; do 150 read p "S3 Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 151 i f [ n " $t1 " ] 152 then 153 S3_HOST_IP=" $t1 " 154 e l s e 155 S3_HOST_IP=" $ d e f a u l t " 156 f i 157 i f [ $ ( val id_ipv4 $S3_HOST_IP) == " f a i l " ] ; then 158 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 159 continue 160 f i 161 break ; 162 done ; 163 164 echo 165 echo " S3 Host IP s e t as \"$S3_HOST_IP\"" 166 167 #C o n f i g u r i n g RabbitMQ IP 168 s e t o nounset 169 echo 170 171 debug=" : " 172 debug=" echo " 173 174 echo 175 176 #d e f a u l t =`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 / g ' | t r d " " ` 177 w h i l e t r u e ; do 178 read p "RabbitMQ Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 179 i f [ n " $t1 " ] 180 then 181 RABBIT_IP=" $t1 " 182 e l s e 183 RABBIT_IP=" $ d e f a u l t " 184 f i 185 186 i f [ $ ( val id_ipv4 $RABBIT_IP) == " f a i l " ] ; then 187 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 188 continue 189 f i 190 break ; 191 done ; 192 193 echo 194 echo " RabbitMQ Host IP s e t as \"$RABBIT_IP\"" 195 echo 196 echo " There i s an i s s u e b y p a s s i n g the r a b b i t package s p l a s h s c r e e n , so i n s t a l l i n g h e r e and a l l o w i n g you to proceed . There i s c u r r e n l y no \

66

197 way to background / p r e s e e d t h i s , so i t w i l l output to t e r m i n a l . . . " 198 199 echo 200 s l e e p 5 201 apt g e t y i n s t a l l rabbitmq s e r v e r 202 echo 203 204 #C o n f i g u r i n g Cloud C o n t r o l l e r Host IP 205 s e t o nounset 206 echo 207 208 debug=" : " 209 debug=" echo " 210 211 echo 212 213 #d e f a u l t =`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 / g ' | t r d " " ` 214 w h i l e t r u e ; do 215 read p " Cloud C o n t r o l l e r Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 216 i f [ n " $t1 " ] 217 then 218 CC_HOST_IP=" $t1 " 219 e l s e 220 CC_HOST_IP=" $ d e f a u l t " 221 f i 222 223 i f [ $ ( val id_ipv4 $CC_HOST_IP) == " f a i l " ] ; then 224 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 225 continue 226 f i 227 break ; 228 done ; 229 230 echo 231 echo " Cloud C o n t r o l l e r Host IP s e t as \"$CC_HOST_IP\"" 232 233 #C o n f i g u r i n g mySQL Host IP 234 s e t o nounset 235 echo 236 237 debug=" : " 238 debug=" echo " 239 240 241 echo 242 243 #d e f a u l t =`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 / g ' | t r d " " ` 244 w h i l e t r u e ; do 245 read p "mySQL Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 246 i f [ n " $t1 " ] 247 then 248 MYSQL_HOST_IP=" $t1 " 249 e l s e 250 MYSQL_HOST_IP=" $ d e f a u l t " 251 f i 252 253 i f [ $ ( val id_ipv4 $MYSQL_HOST_IP) == " f a i l " ] ; then 254 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 255 continue 256 f i 257 break ; 258 done ; 259 260 echo 261 echo "mySQL Host IP s e t as \"$MYSQL_HOST_IP\"" 262 263 echo 264 265 echo " Step 3 : B u i l d i n g the network f o r your c o n t r o l l e r . " 266 267 echo " Here you w i l l s e t the network range t h a t ALL your p r o j e c t s w i l l r e s i d e i n . This i s typically \ 268 a l a r g e b l o c k such as a / 1 2 . You w i l l a l s o choose how many IPs i n t h i s b l o c k a r e a v a i l i b l e f o r use . "

67

269 270 echo 271 272 echo "Nova Network Setup " 273 echo "##################" 274 echo 275 276 #Set network range and s a n i t y check 277 278 w h i l e t r u e ; do 279 read p " C o n t r o l l e r network range f o r ALL p r o j e c t s ( normally x . x . x . x /12) : " FIXED_RANGE 280 IP=$ ( echo $FIXED_RANGE | awk F/ '{ p r i n t $1 } ' ) ; 281 CIDR=$ ( echo $FIXED_RANGE | awk F/ '{ p r i n t $2 } ' | p e r l pe ' i f ( ! ( $_>=1 && $_<=32) ) { undef $_ ;} ') ; 282 i f [ $ ( val id_ipv4 $IP ) == " f a i l " ] | | [ z "$CIDR" ] 283 then 284 echo "You f a i l e d at e n t e r i n g a c o r r e c t range , t r y again " 285 continue 286 f i ; 287 288 break ; 289 done ; 290 291 w h i l e t r u e ; do 292 read p " Total amount o f u s a b l e IPs f o r ALL p r o j e c t s : " NETWORK_SIZE 293 i f [ ! "$ ( echo $NETWORK_SIZE | egrep '^[0 9]{1 ,9} $ ' ) " ] ; 294 then echo "Not a v a l i d entry , p l e a s e t r y again " 295 continue 296 f i 297 break ; 298 done ; 299 300 echo 301 302 echo " Step 4 : C r e a t i n g a p r o j e c t f o r Nova" 303 304 echo "You w i l l choose an admin f o r the p r o j e c t , and a l s o name the p r o j e c t h e r e . \ 305 Also , you w i l l b u i l d out the network c o n f i g u r a t i o n f o r the p r o j e c t . " 306 s l e e p 1 307 echo 308 309 read p "Nova p r o j e c t u s e r name : " NOVA_PROJECT_USER 310 read p "Nova p r o j e c t name : " NOVA_PROJECT 311 312 w h i l e t r u e ; do 313 read p " D e s i r e d network + CIDR f o r p r o j e c t ( normally x . x . x . x /24) : " PROJECT_CIDR 314 i f [ ! "$ ( echo $PROJECT_CIDR | egrep '^[0 9]{1 ,3}\.[0 9]{1 ,3}\.[0 9]{1 ,3}\.[0 9]{1 ,3}\/[0 9]{1 ,2}$ ' )" ] ; 315 then echo "You f a i l e d at e n t e r i n g a c o r r e c t range , t r y again " 316 continue 317 f i 318 break ; 319 done ; 320 321 w h i l e t r u e ; do 322 read p "How many networks f o r p r o j e c t : " NOVA_NETWORK_NUMBER 323 i f [ ! "$ ( echo $NOVA_NETWORK_NUMBER | egrep '^[0 9]{1 ,3} $ ' ) " ] ; 324 then echo "You have not e n t e r e d a v a l i d network number , t r y again " 325 continue 326 f i 327 break ; 328 done ; 329 330 w h i l e t r u e ; do 331 read p "How many a v a i l i b l e IPs per p r o j e c t network : " IPS_PER_NETWORK 332 i f [ ! "$ ( echo $IPS_PER_NETWORK | egrep '^[0 9]{1 ,9} $ ' ) " ] ; 333 then echo "You have not e n t e r e d amount o f IPs " 334 continue 335 f i 336 break ; 337 done ; 338 339 echo 340 341 echo " Preparing setup o f br100 " 342 echo "# # # # # # # # # # # # # # # # # # # # # # # #"

68

343 echo 344 345 #Backup o r i g i n a l network f i l e 346 cp / e t c / network / i n t e r f a c e s / r o o t / i n t e r f a c e s .ORIG 347 348 LOCALIP=`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 /g ' | t r d " " ` 349 350 w h i l e t r u e ; do 351 read p " P l e a s e e n t e r your l o c a l s e r v e r IP ( D e f a u l t i s $LOCALIP ENTER to a c c e p t ) : " e t1 352 i f [ n " $t1 " ] 353 then 354 LOCALIP=" $t1 " 355 e l s e 356 LOCALIP="$LOCALIP" 357 f i 358 i f [ $ ( val id_ipv4 $LOCALIP) == " f a i l " ] ; then 359 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 360 continue 361 f i 362 break ; 363 done ; 364 365 echo 366 BROADCAST=` i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . Bcast : ( . + ) . Mask . / $1 /g ' | t r d " " ` 367 368 w h i l e t r u e ; do 369 read p " P l e a s e e n t e r your b r o a d c a s t IP ( D e f a u l t i s $BROADCAST ENTER to a c c e p t ) : " e t1 370 i f [ n " $t1 " ] 371 then 372 BROADCAST=" $t1 " 373 e l s e 374 BROADCAST="$BROADCAST" 375 f i 376 i f [ $ ( val id_ipv4 $BROADCAST) == " f a i l " ] ; then 377 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 378 continue 379 f i 380 break ; 381 done ; 382 383 echo 384 385 NETMASK=` i f c o n f i g a | egrep ' i n e t ' | head n 1 | p e r l pe ' s / . Mask : / $1 /g ' | t r d " " ` 386 387 w h i l e t r u e ; do 388 read p " P l e a s e e n t e r your netmask ( D e f a u l t i s $NETMASK ENTER to a c c e p t ) : " e t1 389 i f [ n " $t1 " ] 390 then 391 NETMASK=" $t1 " 392 e l s e 393 NETMASK="$NETMASK" 394 f i 395 i f [ $ ( val id_ipv4 $NETMASK) == " f a i l " ] ; then 396 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 397 continue 398 f i 399 break ; 400 done ; 401 402 echo 403 404 GATEWAY=` i p r o u t e | awk '/ d e f a u l t /{ p r i n t $3 } ' ` 405 406 w h i l e t r u e ; do 407 read p " P l e a s e e n t e r your gateway ( D e f a u l t i s $GATEWAY ENTER to a c c e p t ) : " e t1 408 i f [ n " $t1 " ] 409 then 410 GATEWAY $t1 " =" 411 e l s e 412 GATEWAY ="$GATEWAY" 413 f i 414 i f [ $ ( val id_ipv4 $GATEWAY) == " f a i l " ] ; then 415 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 416 continue

69

417 f i 418 break ; 419 done ; 420 421 echo 422 423 NAMESERVER=` c a t / e t c / r e s o l v . c o n f | awk '/ nameserver /{ p r i n t $2 } ' ` 424 425 w h i l e t r u e ; do 426 read p " P l e a s e e n t e r your d e f a u l t nameserver ( D e f a u l t i s $NAMESERVER ENTER to a c c e p t ) : " e t1 427 i f [ n " $t1 " ] 428 then 429 NAMESERVER=" $t1 " 430 e l s e 431 NAMESERVER="$NAMESERVER" 432 f i 433 i f [ $ ( val id_ipv4 $NAMESERVER) == " f a i l " ] ; then 434 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 435 continue 436 f i 437 break ; 438 done ; 439 440 echo "At t h i s point , you ' ve e n t e r e d a l l the i n f o r m a t i o n needed to f i n i s h deployment o f your controller !" 441 echo 442 echo " F e e l f r e e to g e t some c o f f e e , you have earned i t ! " 443 s l e e p 5 444 445 echo 446 echo " E n t e r i n g auto p i l o t mode . . . " 447 echo 448 449 #Package i n s t a l l a t i o n f u n c t i o n , and s a n i t y check 450 451 echo " I n s t a l l i n g packages " 452 echo "###################" 453 454 i n s t a l l _ p a c k a g e ( ) { 455 f o r packages i n $@ 456 do 457 p r i n t f "%40s " " I n s t a l l i n g package ' $packages ' . . . " 458 i f dpkg l | egrep "^ i i . $packages " &>> $LOGFILE 459 then 460 echo " Already i n s t a l l e d " ; 461 continue ; 462 fi 463 apt g e t i n s t a l l y $packages &>> $LOGFILE 464 i f dpkg l | egrep "^ i i . $packages " &>> $LOGFILE 465 then 466 echo "ok" ; 467 else 468 echo " F a i l e d " ; 469 #e x i t 1 470 fi 471 done 472 # r e t u r n 0 ; 473 } 474 475 REQUIRED_PACKAGES=" python s o f t w a r e p r o p e r t i e s " 476 i n s t a l l _ p a c k a g e ${REQUIRED_PACKAGES} 477 #addapt r e p o s i t o r y ppa : nova c o r e /ppa &>> $LOGFILE 478 addapt r e p o s i t o r y ppa : nova c o r e / r e l e a s e &>> $LOGFILE 479 apt g e t update &>> $LOGFILE 480 REQUIRED_PACKAGES=" python mysqldb mysql s e r v e r novaa p i novanetwork nova o b j e c t s t o r e nova s c h e d u l e r novacompute unzip vim e u c a 2 o o l s " 481 #REQUIRED_PACKAGES="mysql s e r v e r bzr novacommon novadoc python mysqldb python g r e e n l e t python nova novaa p i novanetwork nova o b j e c t s t o r e nova s c h e d u l e r novacompute unzip vim e u c a 2 o o l s dnsmasq open i s c s i kpartx kvm gawk i p t a b l e s e b t a b l e s user mode l i n u x kvm l i b v i r t bin s c r e e n i s c s i t a r g e t e u c a 2 o o l s vlan c u r l python t w i s t e d python sqlalchemy python mox python g r e e n l e t python c a r r o t python daemon python e v e n t l e t python g f l a g s python l i b v i r t python l i b x m l 2 python r o u t e s " 482 i n s t a l l _ p a c k a g e ${REQUIRED_PACKAGES} 483 484 echo " F i n a l i z i n g mySQL setup "

70

485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533

echo "# # # # # # # # # # # # # # # # # # # # # #" echo sed i ' s / 1 2 7 . 0 . 0 . 1 / 0 . 0 . 0 . 0 / g ' / e t c / mysql /my. c n f s e r v i c e mysql r e s t a r t &>> $LOGFILE echo mysql uroot p$MYSQL_PASS e "CREATE DATABASE nova ; " mysql uroot p$MYSQL_PASS e "GRANT ALL PRIVILEGES ON . TO ' root '@'% ' WITH GRANT OPTION; " mysql uroot p$MYSQL_PASS e "SET PASSWORD FOR ' root '@'% ' = PASSWORD( '$MYSQL_PASS' ) ; " echo " . . . done . . . " echo echo " S e t t i n g up Nova c o n f i g u r a t i o n f i l e s " echo "# # # # # # # # # # # # # # # # # #" ################# # Passing i n f o into conf ig f i l e s c a t >> / e t c / nova / nova . c o n f << NOVA_CONF_EOF s3_host=$S3_HOST_IP rabbit_host=$RABBIT_IP cc_host=$CC_HOST_IP ec2_url=http : / /$S3_HOST_IP: 8 7 7 3 / s e r v i c e s / Cloud fixed_range=$FIXED_RANGE network_size=$NETWORK_SIZE FAKE_subdomain=ec2 routing_source_ip=$CC_HOST_IP v e r b o s e s q l _ c o n n e c t i o n=mysql : / / r o o t :$MYSQL_PASS@$MYSQL_HOST_IP/ nova network_manager=nova . network . manager . FlatManager NOVA_CONF_EOF echo " I n i t i a l i z i n g database " novamanage db sync &>> $LOGFILE sleep 1 echo " . . . done . . . " echo / u s r / bin / python / u s r / bin /novamanage u s e r admin $NOVA_PROJECT_USER &>> $LOGFILE / u s r / bin / python / u s r / bin /novamanage p r o j e c t c r e a t e $NOVA_PROJECT $NOVA_PROJECT_USER &>> $LOGFILE / u s r / bin / python / u s r / bin /novamanage network c r e a t e $PROJECT_CIDR $NOVA_NETWORK_NUMBER $IPS_PER_NETWORK &>> $LOGFILE echo " . . . done . . . " echo echo " Generating Nova c r e d e n t i a l s " echo "# # # # # # # # # # # # # #" ############# mkdir p / r o o t / c r e d s / u s r / bin / python / u s r / bin /novamanage p r o j e c t z i p f i l e $NOVA_PROJECT $NOVA_PROJECT_USER / r o o t / c r e d s / novacreds . z i p &>> $LOGFILE sleep 3 unzip d / r o o t / c r e d s / r o o t / c r e d s / novacreds . z i p &>> $LOGFILE . / r o o t / c r e d s / novarc c a t / r o o t / c r e d s / novarc >> ~/. bashrc sed i . bak " s / 1 2 7 . 0 . 0 . 1 /$CC_HOST_IP/g" / r o o t / c r e d s / novarc echo " . . . done . . . " echo

534 535 536 537 538 539 540 541 542 echo " C r e a t i n g br100 b r i d g e d e v i c e " 543 echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # #" 544 echo 545 546 c a t > / e t c / network / i n t e r f a c e s << NOVA_BR100_CONFIG_EOF 547 # The loopback network i n t e r f a c e 548 auto l o 549 i f a c e l o i n e t loopback 550 551 auto br100 552 i f a c e br100 i n e t s t a t i c 553 b r i d g e _ p o r t s eth0 554 bridge_stp o f f 555 bridge_maxwait 0 556 bridge_fd 0 557 a d d r e s s $LOCALIP

71

558 netmask $NETMASK 559 b r o a d c a s t $BROADCAST 560 gateway $GATEWAY 561 dnsnameservers $NAMESERVER 562 NOVA_BR100_CONFIG_EOF 563 echo " . . . done . . . " 564 echo 565 566 echo " R e s t a r t i n g networking " 567 / e t c / i n i t . d/ networking r e s t a r t 568 echo " . . . done . . . " 569 echo 570 571 echo "################# NOTE ##### NOTE ##### NOTE ##### NOTE ##### NOTE ##### NOTE #################" 572 echo "#Be s u r e to s o u r c e your c r e d e n t i a l f i l e i n t o your environment a f t e r c o n f i g changes#" 573 echo "# # # # # # # # # # # # # #e . g . s o u r c e / r o o t / c r e d s / novarc# # # # # # # # # # # # # ############# # # # # # # # # # # # # #" 574 s l e e p 1 575 echo 576 577 #S o u r c i n g c r e d s f i l e and r e s t a r t i n g a l l Nova s e r v i c e s 578 . / r o o t / c r e d s / novarc 579 s l e e p 1 580 #21 Jan2011 I n i t s c r i p t s updated to use u p s t a r t 581 r e s t a r t l i b v i r t bin &>> $LOGFILE ; r e s t a r t novanetwork &>> $LOGFILE ; r e s t a r t novacompute &>> $LOGFILE ; r e s t a r t novaa p i &>> $LOGFILE ; r e s t a r t nova o b j e c t s t o r e &>> $LOGFILE ; r e s t a r t nova s c h e d u l e r &>> $LOGFILE 582 #r e s t a r t l i b v i r t bin &>> $LOGFILE ; s e r v i c e novaa p i r e s t a r t &>> $LOGFILE ; s e r v i c e nova s c h e d u l e r r e s t a r t &>> $LOGFILE ; s e r v i c e novanetwork r e s t a r t &>> $LOGFILE ; s e r v i c e nova o b j e c t s t o r e r e s t a r t &>> $LOGFILE ; s e r v i c e novacompute r e s t a r t &>> $LOGFILE 583 584 echo " Ensure a l l f i v e Nova s e r v i c e s a r e running " 585 echo "# # # # # # # # # # # # # # # # # # # # #" #################### 586 ps aux | grep i nova 587 s l e e p 5 588 589 echo " Setup d e f a u l t ICMP and SSH a c c e s s to your f u t u r e VMs" 590 echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" 591 592 echo " Allowing ping and SSH to your running i n s t a n c e s " 593 euca a u t h o r i z e P icmp t 1: 1 d e f a u l t &>> $LOGFILE 594 euca a u t h o r i z e P tcp p 22 d e f a u l t &>> $LOGFILE 595 echo " . . . done . . . " 596 597 echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" 598 echo "#You /MUST/ re s o u r c e your ' novarc ' to use the API commands s i n c e the#" 599 echo "##s c r i p t cannot pass the s o u r c e i n f o r m a t i o n out o f i t ' s own p r o c e s s###" 600 echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" 601 echo 602 603 #Only one dnsmasq p r o c e s s s t a r t s , supposed to two running at d i f f e r e n t p r i o r i t i e s . This f i x e s t h a t . . . p o s s i b l e bug . 604 k i l l a l l dnsmasq 605 s e r v i c e novanetwork r e s t a r t &>> $LOGFILE 606 607 #Needed f o r KVM to i n i t i a l i z e , VMs run i n qemu mode o t h e r w i s e and i s very slow 608 chgrp kvm / dev /kvm 609 chmod g+rwx / dev /kvm 610 echo 611 echo ' The next t h i n g you a r e going to want to do i t g e t a VM to t e s t with . You can f i n d a t e s t VM howto , and read more about custom image c r e a t i o n at " http : / / nova . openstack . org / adminguide / multi . node . i n s t a l l . html " and " http : / / w i k i . openstack . org / GettingImages ' 612 echo 613 echo ' Enjoy your new p r i v a t e cloud ! ' 614 615 616 #I f you run i n t o any problems , p l e a s e f e e l f r e e to c o n t a c t the s c r i p t m a i n t a i n e r s . 617 #You can a l s o g e t a s s i s t a n c e by s t o p p i n g by i r c . f r e e n o d e . net #openstack , s e n d i n g a message to the OpenStack Users m a i l l i s t #o p e n s t a c k @ l i s t s . launchpad . net , or p o s t i n g at " h t t p s : / / answers . launchpad . net / openstack "

G.3. Script d'installation du nud


Source : https://github.com/dubsquared/OpenStack-NOVA-Installer-Script/.

72

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

#! / bin / sh # # # # # # # # # Copyright ( c ) 2011 OpenStack , LLC . L i c e n s e d under the Apache L i c e n s e , Version 2 . 0 ( the " L i c e n s e ") ; you may not use t h i s f i l e e x c e p t i n compliance with the L i c e n s e . You may o b t a i n a copy o f the L i c e n s e at http : / /www. apache . org / l i c e n s e s /LICENSE 2.0 U n l e s s r e q u i r e d by a p p l i c a b l e law or agreed to i n w r i t i n g , s o f t w a r e d i s t r i b u t e d under the L i c e n s e i s d i s t r i b u t e d on an "AS IS " BASIS , WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, e i t h e r e x p r e s s or implied .

# See the L i c e n s e f o r the s p e c i f i c language g o v e r n i n g p e r m i s s i o n s and # l i m i t a t i o n s under the L i c e n s e .

# Written by Wayne A. Walls ( dubsquared ) with the amazing h e l p o f Jordan Rinke ( JordanRinke ) , Vish Ishaya ( v i s h y ) , 19 # and a l o t o f input from the f i n e f o l k s i n #openstack on i r c . f r e e n o d e . net ! 20 21 # P l e a s e c o n t a c t s c r i p t m a i n t a i n e r s f o r q u e s t i o n s , comments , or c o n c e r n s : 22 # Wayne > wayne@openstack . org 23 # Jordan > jordan@openstack . org 24 25 # This s c r i p t i s i n t e n d e d to be ran on a f r e s h i n s t a l l on Ubuntu 1 0 . 0 4 64 b i t . Once ran with 26 # the a p p r o p i a t e v a r i b l e s , w i l l produce a f u l l y f u n c t i o n i n g Nova Cloud C o n t o l l e r . I am working on 27 # g e t t i n g t h i s working on a l l f l a v o r s o f Ubuntu , and e v e n t u a l l y RPM based d i s t r o s . P l e a s e feel free 28 # to reach out to s c r i p t m a i n t a i n e r s f o r anything t h a t can be done b e t t e r . I 'm p r e t t y new to this scripting business 29 # so I 'm s u r e t h e r e i s room f o r improvement ! 30 31 #Usage : bash novaNODE i n s t a l l e r . sh 32 33 #This i s a Linux check 34 i f [ ` uname a | grep i l i n u x | wc l ` l t 1 ] ; then 35 echo "Not Linux , not compatible . " 36 exit 1 37 f i 38 39 #Compatible OS Check 40 DEB_OS=` c a t / e t c / i s s u e | grep i ' ubuntu ' ` 41 RH_OS=` c a t / e t c / i s s u e | grep i ' centos ' ` 42 i f [ [ ${#DEB_OS} gt 0 ] ] ; then 43 echo " Valid OS, c o n t i n u i n g . . . " 44 CUR_OS="Ubuntu" 45 e l i f [ [ ${#RH_OS} gt 0 ] ] ; then 46 echo " Unsupported OS, s o r r y ! " 47 CUR_OS="CentOS" 48 exit 1 49 else 50 echo " Unsupported OS, s o r r y ! " 51 CUR_OS="Unknown" 52 exit 1 53 fi 54 echo $CUR_OS d e t e c t e d ! 55 56 #Set up l o g f i l e f o r debugging 57 LOGFILE=/var / l o g / nova /novanode i n s t a l l . l o g 58 mkdir / var / l o g / nova 59 touch / var / l o g / nova /novanode i n s t a l l . l o g 60 61 #S e t t i n g up s a n i t y check f u n c t i o n 62 valid_ipv4 ( ) { 63 newmember=$ ( echo $1 | egrep ' ^ [ 0 9 ] { 1 , 3 } \ . [ 0 9 ] { 1 , 3 } \ . [ 0 9 ] { 1 , 3 } \ . [ 0 9 ] { 1 , 3 } $ ' ) ; 64 members=$ ( echo $newmember | t r " . " "\n" ) ; 65 memcount=$ ( echo $newmember | t r " . " "\n" | wc l ) ; 66 i f [ $memcount ne 4 ] ; then 67 echo " f a i l " ; 68 exit ; 69 fi 70 f o r i i n $members ; do 71 i f [ $ i l t 0 ] | | [ $ i gt 255 ] ; then 72 echo " f a i l " ;

73

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147

exit ; fi ; done ; echo " s u c c e s s " ;

echo " I n s t a l l i n g r e q u i r e d packages " echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # #" apt g e t i n s t a l l y python s o f t w a r e p r o p e r t i e s addapt r e p o s i t o r y ppa : nova c o r e / r e l e a s e #addapt r e p o s i t o r y ppa : nova c o r e / trunk apt g e t update apt g e t i n s t a l l y novacompute python mysqldb #C o n f i g u r i n g S3 Host IP s e t o nounset echo debug=" : " debug=" echo " echo #Grabs the f i r s t r e a l IP o f i f c o n f i g , and s e t i t as the d e f a u l t e n t r y #read p "What i s the IP a d d r e s s o f your NOVA CONTROLLER? " d e f a u l t #echo #C o n f i g u r i n g Cloud C o n t r o l l e r Host IP read p "What i s the IP a d d r e s s o f your NOVA CONTROLLER? " d e f a u l t s e t o nounset echo debug=" : " debug=" echo " echo w h i l e t r u e ; do read p "NOVA C o n t r o l l e r IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 i f [ n " $t1 " ] then CC_HOST_IP=" $t1 " else CC_HOST_IP=" $ d e f a u l t " fi i f [ $ ( val id_ipv4 $CC_HOST_IP) == " f a i l " ] ; then echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " continue fi break ; done ; echo echo " Cloud C o n t r o l l e r Host IP s e t as \"$CC_HOST_IP\"" #d e f a u l t =`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 / g ' | t r d " " ` w h i l e t r u e ; do read p "S3 Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 i f [ n " $t1 " ] then S3_HOST_IP=" $t1 " else S3_HOST_IP=" $ d e f a u l t " fi i f [ $ ( val id_ipv4 $S3_HOST_IP) == " f a i l " ] ; then echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " continue fi break ; done ;

74

148 echo 149 echo " S3 Host IP s e t as \"$S3_HOST_IP\"" 150 151 #C o n f i g u r i n g RabbitMQ IP 152 s e t o nounset 153 echo 154 155 debug=" : " 156 debug=" echo " 157 158 echo 159 160 w h i l e t r u e ; do 161 read p "RabbitMQ Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 162 i f [ n " $t1 " ] 163 then 164 RABBIT_IP=" $t1 " 165 e l s e 166 RABBIT_IP=" $ d e f a u l t " 167 f i 168 169 i f [ $ ( val id_ipv4 $RABBIT_IP) == " f a i l " ] ; then 170 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 171 continue 172 f i 173 break ; 174 done ; 175 176 echo 177 echo " RabbitMQ Host IP s e t as \"$RABBIT_IP\"" 178 echo 179 180 #C o n f i g u r i n g mySQL Host IP 181 s e t o nounset 182 echo 183 184 debug=" : " 185 debug=" echo " 186 187 188 echo 189 190 w h i l e t r u e ; do 191 read p "mySQL Host IP ( D e f a u l t i s $ d e f a u l t ENTER to a c c e p t ) : " e t1 192 i f [ n " $t1 " ] 193 then 194 MYSQL_HOST_IP=" $t1 " 195 e l s e 196 MYSQL_HOST_IP=" $ d e f a u l t " 197 f i 198 199 i f [ $ ( val id_ipv4 $MYSQL_HOST_IP) == " f a i l " ] ; then 200 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 201 continue 202 f i 203 break ; 204 done ; 205 206 echo 207 echo "mySQL Host IP s e t as \"$MYSQL_HOST_IP\"" 208 209 echo 210 211 echo "mySQL User Config " 212 echo "#################" 213 echo 214 215 #S e t t i n g up mySQL r o o t password , and v e r i f y 216 w h i l e t r u e ; do 217 read s p " Enter mySQL password on c o n t r o l l e r node : " MYSQL_PASS 218 echo "" ; 219 read s p " V e r i f y password : " MYSQL_PASS2 220 echo "" ; 221 222 i f [ $MYSQL_PASS != $MYSQL_PASS2 ] 223 then

75

224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250

echo " Passwords do not match . . . t r y again . " ; continue ; fi break ; done echo " S e t t i n g up Nova c o n f i g u r a t i o n f i l e s " echo "# # # # # # # # # # # # # # # # # #" ################# echo #I n f o to be passed i n t o / e t c / nova / nova . c o n f
s3_host=$S3_HOST_IP rabbit_host=$RABBIT_IP cc_host=$CC_HOST_IP ec2_url=http : / /$S3_HOST_IP: 8 7 7 3 / s e r v i c e s / Cloud s q l _ c o n n e c t i o n=mysql : / / r o o t :$MYSQL_PASS@$MYSQL_HOST_IP/ nova network_manager=nova . network . manager . FlatManager

c a t >> / e t c / nova / nova . c o n f << NOVA_CONF_EOF

NOVA_CONF_EOF echo " . . . done . . . " echo

251 252 253 w h i l e t r u e ; do 254 read p " P l e a s e e n t e r your l o c a l s e r v e r IP ( D e f a u l t i s $LOCALIP ENTER to a c c e p t ) : " e t1 255 i f [ n " $t1 " ] 256 then 257 LOCALIP=" $t1 " 258 e l s e 259 LOCALIP="$LOCALIP" 260 f i 261 i f [ $ ( val id_ipv4 $LOCALIP) == " f a i l " ] ; then 262 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 263 continue 264 f i 265 break ; 266 done ; 267 268 echo 269 BROADCAST=` i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . Bcast : ( . + ) . Mask . / $1 /g ' | t r d " " ` 270 271 w h i l e t r u e ; do 272 read p " P l e a s e e n t e r your b r o a d c a s t IP ( D e f a u l t i s $BROADCAST ENTER to a c c e p t ) : " e t1 273 i f [ n " $t1 " ] 274 then 275 BROADCAST=" $t1 " 276 e l s e 277 BROADCAST="$BROADCAST" 278 f i 279 i f [ $ ( val id_ipv4 $BROADCAST) == " f a i l " ] ; then 280 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 281 continue 282 f i 283 break ; 284 done ; 285 286 echo 287 288 NETMASK=` i f c o n f i g a | egrep ' i n e t ' | head n 1 | p e r l pe ' s / . Mask : / $1 /g ' | t r d " " ` 289 290 w h i l e t r u e ; do 291 read p " P l e a s e e n t e r your netmask ( D e f a u l t i s $NETMASK ENTER to a c c e p t ) : " e t1 292 i f [ n " $t1 " ] 293 then 294 NETMASK=" $t1 " 295 e l s e 296 NETMASK="$NETMASK" 297 f i

echo " S e t t i n g up br100 " echo "################" echo LOCALIP=`/ s b i n / i f c o n f i g a | egrep ' . i n e t ' | head n 1 | p e r l pe ' s / . addr : ( . + ) . Bcast . / $1 /g ' | t r d " " `

76

298 i f [ $ ( val id_ipv4 $NETMASK) == " f a i l " ] ; then 299 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 300 continue 301 f i 302 break ; 303 done ; 304 305 echo 306 307 GATEWAY=` i p r o u t e | awk '/ d e f a u l t /{ p r i n t $3 } ' ` 308 309 w h i l e t r u e ; do 310 read p " P l e a s e e n t e r your gateway ( D e f a u l t i s $GATEWAY ENTER to a c c e p t ) : " e t1 311 i f [ n " $t1 " ] 312 then 313 GATEWAY $t1 " =" 314 e l s e 315 GATEWAY ="$GATEWAY" 316 f i 317 i f [ $ ( val id_ipv4 $GATEWAY) == " f a i l " ] ; then 318 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 319 continue 320 f i 321 break ; 322 done ; 323 324 echo 325 326 NAMESERVER=` c a t / e t c / r e s o l v . c o n f | awk '/ nameserver /{ p r i n t $2 } ' ` 327 328 w h i l e t r u e ; do 329 read p " P l e a s e e n t e r your d e f a u l t nameserver ( D e f a u l t i s $NAMESERVER ENTER to a c c e p t ) : " e t1 330 i f [ n " $t1 " ] 331 then 332 NAMESERVER=" $t1 " 333 e l s e 334 NAMESERVER="$NAMESERVER" 335 f i 336 i f [ $ ( val id_ipv4 $NAMESERVER) == " f a i l " ] ; then 337 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 338 continue 339 f i 340 break ; 341 done ; 342 343 echo 344 w h i l e t r u e ; do 345 read p " P l e a s e e n t e r the IP where novaa p i l i v e s : " NOVA_API_IP 346 347 i f [ $ ( val id_ipv4 $NOVA_API_IP) == " f a i l " ] ; then 348 echo "You have e n t e r e d an i n v a l i d IP address , p l e a s e t r y again . " 349 continue 350 f i 351 break ; 352 done ; 353 354 c a t > / e t c / network / i n t e r f a c e s << NOVA_BR100_CONFIG_EOF 355 # The loopback network i n t e r f a c e 356 auto l o 357 i f a c e l o i n e t loopback 358 359 auto br100 360 i f a c e br100 i n e t s t a t i c 361 b r i d g e _ p o r t s eth0 362 bridge_stp o f f 363 bridge_maxwait 0 364 bridge_fd 0 365 a d d r e s s $LOCALIP 366 netmask $NETMASK 367 b r o a d c a s t $BROADCAST 368 gateway $GATEWAY 369 dnsnameservers $NAMESERVER 370 NOVA_BR100_CONFIG_EOF 371 372 echo

77

373 echo " Bouncing s e r v i c e s " 374 echo "#################" 375 / e t c / i n i t . d/ networking r e s t a r t ; r e s t a r t l i b v i r t bin ; s e r v i c e novacompute r e s t a r t 376 echo " . . . done . . . " 377 378 #Needed f o r KVM to i n i t i a l i z e , VMs run i n qemu mode o t h e r w i s e and i s very slow 379 chgrp kvm / dev /kvm 380 chmod g+rwx / dev /kvm 381 382 #Any s e r v e r t h a t does /NOT/ have novaa p i running on i t w i l l need t h i s r u l e f o r UEC images to g e t metadata i n f o 383 i p t a b l e s t nat A PREROUTING d 1 6 9 . 2 5 4 . 1 6 9 . 2 5 4 / 3 2 p tcp m tcp dport 80 j DNAT to d e s t i n a t i o n $NOVA_API_IP: 8 7 7 3

78