<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OCTO talks ! &#187; Infrastructure</title>
	<atom:link href="http://blog.octo.com/tag/infrastructure/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.octo.com</link>
	<description>Le blog d&#039;OCTO Technology, cabinet d&#039;architectes en systèmes d&#039;information</description>
	<lastBuildDate>Fri, 03 Feb 2012 13:46:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Datacenter as a Computer : une plongée dans les datacenters des acteurs du cloud</title>
		<link>http://blog.octo.com/datacenter-as-a-computer-une-plongee-dans-les-datacenters-des-acteurs-du-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=datacenter-as-a-computer-une-plongee-dans-les-datacenters-des-acteurs-du-cloud</link>
		<comments>http://blog.octo.com/datacenter-as-a-computer-une-plongee-dans-les-datacenters-des-acteurs-du-cloud/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 05:39:14 +0000</pubDate>
		<dc:creator>Olivier Mallassi</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[datacenter]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[recovery oriented architecture]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=23099</guid>
		<description><![CDATA[Dans ce papier (de 2009), Luiz André Barroso and Urs Hölzle (entre autres) de Google Inc. présente une introduction aux “Warehouse-Scale Computers” (abrégé WSC); une introduction aux grands datacenters du l’industrie du Web. Alors certes c’est assez loin de notre quotidien (à la fois en termes d’échelle mais également en termes de métier car on [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/introduction-a-la-programmation-orientee-acteurs/' rel='bookmark' title='Introduction à la Programmation Orientée Acteurs'>Introduction à la Programmation Orientée Acteurs</a></li>
<li><a href='http://blog.octo.com/socle-technique-des-applications-java-ee-dans-le-war-ou-dans-le-serveur/' rel='bookmark' title='Socle technique des applications Java EE : dans le WAR ou dans le serveur ?'>Socle technique des applications Java EE : dans le WAR ou dans le serveur ?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fdatacenter-as-a-computer-une-plongee-dans-les-datacenters-des-acteurs-du-cloud%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Datacenter%20as%20a%20Computer%20%3A%20une%20plong%C3%A9e%20dans%20les%20datacenters%20des%20acteurs%20du%20cloud%22%20%7D);"></div>
<p>Dans ce <a href="http://www.morganclaypool.com/doi/pdf/10.2200/S00193ED1V01Y200905CAC006">papier</a> (de 2009), Luiz André Barroso and Urs Hölzle (entre autres) de Google Inc. présente une introduction aux “Warehouse-Scale Computers” (abrégé WSC); <strong>une introduction aux grands datacenters du l’industrie du Web</strong>.</p>
<p>Alors certes c’est assez loin de notre quotidien (à la fois en termes d’échelle mais également en termes de métier car on ne construit pas tous les jours un nouveau datacenter) mais<strong> ce papier nous aide à nous projeter dans ce qu’est un datacenter chez les acteurs du Cloud d’aujourd’hui</strong>. Une merveille qui présente très certainement ce que seront nos datacenters traditionnels à terme, <strong>les impacts que cela aura sur les architectures applicatives</strong>.</p>
<p><strong>L’objectif ici</strong> n’est pas de reprendre l’exhaustivité de ce papier de 90 pages mais<strong> de vous faire part des éléments, à mon sens, les plus marquants et qui s’articule autour de plusieurs axes</strong> : </p>
<ul>
<li> <strong>Présentation des concepts généraux d’un datacenter</strong>, ses services, son organisation (Alimentation électrique, gestion de climatisation&#8230;)</li>
<li> <strong>Un zoom particulier sur les serveurs</strong> qui composent un datacenter</li>
<li> <strong>Une analyse très détaillée des enjeux énergétiques</strong> associés</li>
<li> <strong> Une discussion</strong> (et des études de cas) <strong>autour des TCO</strong></li>
<li> <strong>Un zoom particulier sur les pannes</strong> et leurs origines</li>
</ul>
<p><span id="more-23099"></span></p>
<h1>#1 &#8211; “Architectural Overview &#038; DataCenter Basics”</h1>
<p>Peut-être étiez-vous au courant mais les datacenters sont souvent classifiés en plusieurs types, offrant des niveaux de redondance (et donc au final de disponibilité) différents.</p>
<ul>
<li><strong>Tier I et II</strong>. Un seul acheminement de l&#8217;électricité et de climatisation. Offre une disponibilité < 99,7%
</li>
<li><strong>Tier III</strong>. Les circuits de distribution électrique et de climatisation sont redondés (Actif/Passif). Offre une disponibilité < 99,98%</li>
<li><strong>Tier IV</strong>. Le redondance est en actif/actif, la disponibilité grimpe à 99,995%</li>
</ul>
<p><strong>Un datacenter (et ceux décrits dans le papier) proposent également une offre de services </strong></p>
<ul>
<li><strong>Power. Alimenter le système de climatisation, les serveurs&#8230;</strong><br />
Ce papier est un trés bon moyen de comprendre le circuit de l’énergie électrique au sein d’un datacenter (et notamment les concepts de Uninterruptable Power Supply &#8211; UPS ou Power Distribution Unit &#8211; PDU).<br />
Nous en reparlerons ultérieurement mais c’est l’un des axes d’optimisation les plus importants</li>
<li><strong>Storage. Stocker les données</strong><br />
Plusieurs systèmes possibles :<br />
- <em>du NAS</em>. De mémoire, le papier ne s’attarde pas trop sur l’utilisation ou pas de SAN (Difficile donc de savoir s’ils en utilisent ou pas et si non, si cela est du à des coûts prohibitifs ou des fonctionnalités inadaptées à ces architectures distribuées)<br />
- <em>du <a href="http://en.wikipedia.org/wiki/Distributed_file_system">Distributed File Syste</a>m</em> s’appuyant sur des disques locaux. Ainsi la résilience est gérée par le Distributed File System (et la réplication au niveau applicatif des fichiers) et non par l’infrastructure “hardware” sous-jacente. A titre d’exemple, c’est un axe trés fort des solutions “NoSQL” ou même “in-memory datagrid”.<br />
En termes de disques, ce sont plutôt des “desktop-class” que des “enterprise-grade” principalement à cause de la différence de prix. Ce n’est pas sans rappeler l’étude de <a href="http://storagemojo.com/2007/02/19/googles-disk-failure-experience/">Google sur les taux de pannes des disques durs</a>.
</li>
<li><strong>Network. Transférer la donnée</strong><br />
Bien entendu, pour optimiser les coûts, différents types de switchs, réseaux sont utilisés suivant que l’on soit “à l’entrée du DC” ou bien à l’entrée d’un rack.<br />
Les réseaux type Ethernet sont privilégiés à de l’Infiniband par exemple principalement pour des raisons de compromis entre performance et coût.
</li>
</ul>
<p>Ce graphique donne quelques éléments de mesures sur des métriques classiques (Capacité de stockage, bande passante, latence).<br />
Ces métriques sont simplement agrégées du serveur (Local sur le graphe), au rack puis au datacenter (abrégé WSC dans la légende)<br />
<a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot001.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot001.png" alt="" title="ScreenShot001" width="351" height="280" class="aligncenter size-full wp-image-23111" /></a></p>
<h1>#2 &#8211; Hardware Building Blocks = Cost-efficient hardware</h1>
<p>Cette étude propose une comparaison du ratio coût/performance de 2 types de serveurs (qui a été basé sur les <a href="http://www.tpc.org/tpcc/">benchs du TPC-C</a>). Pour l’un, le <a href="http://www.tpc.org/results/FDR/TPCC/tpcc.hp.SD.fdr.082107.pdf" class="broken_link">Superdome  </a>(128 cores). Coût : 12 M€.<br />
Pour l’autre, le <a href="http://www.tpc.org/results/individual_results/HP/HP%20ML350G5_Oracle_070912_ES.pdf" class="broken_link">Proliant </a> (4 cores). Coût : 75 k€.<a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot002.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot002.png" alt="" title="ScreenShot002" width="548" height="330" class="aligncenter size-full wp-image-23114" /></a></p>
<p>En somme, <strong>ce tableau compare le coût de la scalabilité horizontale et de la scalabilité verticale. Ainsi, la ligne “TPC-C price / performance” montre que le Proliant est 3 fois plus efficace (selon le ratio défini préalablement) que le Superdome</strong>. Ce ratio est encore plus important d’après la ligne “price/performance (server HW only)” qui retire de l’équation le coût du stockage et donc compare des “capacités de traitement”. </p>
<p>C’est un élément de comparaison qui omet un point : absorber le même “throughtput” avec les deux types d’infrastructure n’induit pas la même architecture. Là où le “Superdome” permettra de centraliser, l”option “Proliant” imposera de distribuer&#8230; Et distribuer imposera des communications entre process.</p>
<p>Dans le cas du modèle centralisé, les process partagent la même mémoire et la communication entre process est de l’ordre de 100ns (la figure précédente 1.3 le montre). A l’inverse et dans le modèle distribué, les process devront communiquer sur LAN (avec un ordre de grandeur de 100µs). Cela a forcément un impact sur les performances globales, impact montré par ce graphe (lisez bien la légende qui définit l’axe des ordonnées) : <a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot003.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot003.png" alt="" title="ScreenShot003" width="551" height="331" class="aligncenter size-full wp-image-23115" /></a></p>
<p>Ainsi, un unique processeur 128 cores (représentant le Superdome) peut être de l’ordre de 10 fois plus performant qu’un cluster de 32 machines 4 cores (représentant un cluster de Proliant) si la communication entre process est élevé. C’est beaucoup moins vrai si la communication entre process est faible. J’avoue qu’il me manque une quantification de “communication élevée” et “faible” notamment pour pouvoir le transposer au <a href="http://en.wikipedia.org/wiki/Gossip_protocol">Gossip Protocol</a> que l’on utilise souvent dans des stockages distribués. </p>
<p>Ce papier va plus loin et compare ensuite la performance d’un cluster de Superdome avec un cluster de Proliant (toujours en fonction du niveau de communication inter-process qui du coup est distribuée) et démontre qu’à trés grande échelle (> 1500 cores) l’option Superdome ou “high-end server” n’offre plus de réels avantages de performance par rapport à l’option Proliant (quelque soit le niveau de communication inter-process). Rajouter à cela le coût : l’option Superdome ou “high-end server” n’est réellement plus intéressante. </p>
<h1>#3 &#8211; “Energy and Power Efficiency” : le réel challenge</h1>
<p>L’énergie est un sujet d’actualité, notamment à une époque où l’on parle d’énergie renouvelable. Cela traduit deux choses. La première est qu’il y a un enjeu fort autour de l’optimisation de l’utilisation qui est faite de l’électricité dans les datacenters. La seconde, conséquence du point précédent, une volonté voire une nécessité d’optimiser les coûts. </p>
<p>Un indicateur de cette efficience est donc défini ainsi (et adresse des domaines distincts de l’ingénierie) :</p>
<p><a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot004.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot004.png" alt="" title="ScreenShot004" width="688" height="101" class="aligncenter size-full wp-image-23116" /></a></p>
<h3>(a) PUE</h3>
<p>James Hamilton en parle dans<a href="http://www.mvdirona.com/jrh/TalksAndPapers/JamesHamilton_CEMS.pdf"> ce papier</a> mais <strong>le PUE mesure l’efficacité de l’utilisation de l’énergie électrique (en quelque sorte, cela mesure la perte d’énergie entre l’électricité qui rentre dans le datacenter (ce qui est facturé au final) et l’énergie qui arrive effectivement au niveau des serveurs)</strong>. </p>
<p>C’est donc une mesure de la qualité du bâtiment lui même et, en simplifiant un peu, la plupart des sources de surcoûts (et donc de dégradation du PUE) sont liées à l’énergie électrique consommée uniquement pour climatiser (entre 40% et 70% de l’énergie électrique). Il y a également des pertes d’énergie lors des conversions haut voltage (115kV) vers bas voltage (220V). </p>
<p>Ainsi, les meilleurs datacenters affichent aujourd’hui un PUE < 1.2 (la majorité étant vers 2 voire plus haut… Les axes d’amélioration sont alors doubles : </p>
<ul>
<li>améliorer l’efficience des transformateurs électriques types UPS (c’est assez loin de notre métier). </li>
<li>limiter l’utilisation qui est faite de la climatisation (électrique). Cela peut passer par l’utilisation de refroidissements mécaniques (cooling tower) ou à eau mais aussi (et là on touche à un mythe) par des salles machines plus chaudes. Ainsi, on pourrait monter les températures jusqu’à 27°C sans voir une augmentation des taux de pannes (cette idée est également reprise dans <a href="http://storagemojo.com/2007/02/19/googles-disk-failure-experience">cette étude de Google sur les pannes des disques durs</a>)
</li>
</ul>
<h3>(b) SPUE </h3>
<p><strong>Ce paramètre est finalement très proche du PUE mais au niveau d’une machine. SPUE pour Server PUE. L’idée est de mesurer l’énergie utile c’est à dire celle qui permet d’alimenter la carte mère, les disques, les CPU, RAM</strong>. On a ainsi une mesure de l’énergie perdue dans l’alimentation, le ventilateur etc&#8230;</p>
<p>La plupart des serveurs ont aujourd’hui des ratios entre 1,6 et 1,8 (autrement dit plus de 60% de perte)  alors qu’à l’état de l’art, on devrait être à 1,2.</p>
<p>Ainsi PUE * SPUE donne une mesure de la perte d’énergie électrique. Un datacenter standard annonce un total de 3,2… Autrement dit pour chaque 1W utile, il faut injecter 2,2W supplémentaires…</p>
<h3>(c) Measuring the efficiency of computing</h3>
<p><strong>On cherche à mesurer, sur l’énergie électrique qu’il reste pour alimenter carte mère, CPU, RAM, disques, la partie qui est effectivement transformée en travail : en somme la partie qui permet de répondre à des requêtes ou à exécuter des calculs</strong>…<br />
On mesure ainsi un “Performance to Power Ratio” (qui est forcément dépendant de l’architecture physique de la machine). James Hamilton dans <a href="http://www.mvdirona.com/jrh/TalksAndPapers/JamesHamilton_CEMS.pdf">ce papier</a>  en parlait déjà : <strong>l’objectif est d’optimiser le “work done by joule”</strong>.</p>
<p>Dans ce graphe la performance est définie comme le nombre de transactions par seconde.</p>
<p><a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot005.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot005.png" alt="" title="ScreenShot005" width="544" height="394" class="aligncenter size-full wp-image-23120" /></a></p>
<p><strong>En bref, le ratio n’est pas linéaire</strong>. Un serveur qui fonctionne à 100% ne consomme que 30% de plus qu’un serveur en standby (Active idle). C’est la courbe bleue. De fait, le ratio (en rouge) tombe fortement et globalement un serveur qui fonctionne en dessous de 50% de charge “consomme plus qu’il ne travaille”…</p>
<p>Alors ce comportement pourrait être acceptable sauf que les serveurs passent la plupart de leur temps entre 10 et 50%… (je vous invite à aller voir page 55 l’étude qui l’explique). <strong>Dès lors le rêve serait une consommation proportionnelle à l’utilisation que l’on fait de la machine (Energy-Proportional Computing)</strong>. En somme, si la machine est passive (idle), elle consommerait zéro Watt. On pourrait ainsi imaginer des serveurs proposant non pas une consommation linéaire en fonction de la charge mais des zones d’optimum. Typiquement, un optimum du ratio performance-to-power pour des charges entre 20 et 50%… exactement l’inverse de ce que l&#8217;on a aujourd’hui.</p>
<p>De façon plus proche, les prochains challenges autour de cette consommation énergétique touche au disque dur. Les CPUs ont beaucoup travaillé pour avoir une consommation proportionnelle à leur utilisation mais des composants comme la RAM ou le disque trés peu (page 59) </p>
<p><br/></p>
<table bgcolor="#cccccc">
<tr>
<td>
<em><strong>Consommation des CPUs&#8230;</strong></p>
<p>La consommation électrique d’un CPU est directement indexée sur sa puissance. Ainsi la consommation décroit en O(K²) lorsque la fréquence du CPU décroît de k.</p>
<p>De plus, pour un CPU donné, la consommation évolue en fonction de l’utilisation qui en est faite. Comme le montre ce schéma, ce n’est pas encore le cas de la RAM ou du disque<br />
<a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot006.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot006.png" alt="" title="ScreenShot006" width="554" height="220" class="aligncenter size-full wp-image-23121" /></a></p>
<p>Attention néanmoins au fait que ces choix de CPU auront un impact sur le code et demanderont des optimisations au niveau applicatif. Prenons par exemple un service qui met 1s de latence sur un CPU donné et dont la moitié de cette latence est passée dans le CPU.<br />
Si on utilise un CPU 3 fois plus lent, le temps de réponse passe à 2s… Il double…<br />
</em></td>
</tr>
</table>
<h1>#4 &#8211; “Modeling Costs” : à un moment, il faut bien…</h1>
<p>TCO, Capex, Opex… Autant de termes que l’on pourrait, de prime abord, considérer comme un sujet de financier ou de comptable mais qui, au final, sont bien des <a href="http://www.universite-du-si.com/fr/conferences/8-paris-usi-2011/sessions/985-l-architecture-orientee-sur-les-couts">sujets d’architecture</a>…</p>
<p>Cette section propose un modèle de TCO, des exemples de calculs mais surtout des éléments de métriques qui peuvent servir de base de comparaison avec d’autres solutions IaaS type AWS. </p>
<ul>
<li><strong>Capex</strong>. Le Capex s’exprime en dollar per “critical watt”, autrement dit par Watt utile à l’équipement IT. Rappelez-vous du PUE et vous verrez qu’il faut plus de Watts que ce qu’on imagine… <strong>A ce jeu, un Datacenter coûte entre 10 et 15$ le “critical Watt” et est rentabilisé sur une période de 10 à 15 ans. En somme autour des $0,10/W par mois</strong>.<br />
A ce titre également, <strong>un serveur (alors bien entendu cela dépend du type de serveur, de sa consommation, de son prix et de sa période de rentabilité (autour de 4 ans) ) coûte $0,20/W par mois</strong> (pour un serveur de 4000$ amorti sur 4 ans). </li>
</ul>
<table bgcolor="#cccccc">
<tr>
<td><a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot007.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot007.png" alt="" title="ScreenShot007" width="192" height="159" class="aligncenter size-full wp-image-23123" /></a>
</td>
<td><em><strong>Petit exercice de mathématiques</strong></p>
<p>Sachant qu’un serveur (2,7GHz, 4G de RAM)  est utilisé en moyenne à 30% dans le mois (et donc consomme 190W d’après le graphe 5.3) et permet de servir 10 requêtes / seconde, est-il préférable d’aller sur EC2 ? </p>
<p>La requête ramène une liste qui fait 30ko et le stockage n’est pas considéré.</em>
</td>
</table>
<ul>
<li><strong>Opex</strong>. L’Opex est plus complexe à modéliser car il prend en compte le personnel pour exploiter mais aussi la sécurité, l’emplacement géographique, le coût des licences, l’administration.</li>
</ul>
<h1>#5 &#8211; Dealing with failures and repairs</h1>
<p><strong>Définir le niveau de fiabilité d’un système est fondamentalement un compromis entre le coût d’une panne (avec de l’évident comme par exemple le CA perdu mais du plus subtile comme le coût de réparation…) et l’investissement nécessaire à sa prévention</strong>. </p>
<p>A ce titre, la stratégie traditionnelle est basée sur l’utilisation de  matériel fiable. C’est finalement souvent lié au fait que les applicatifs n’ont pas été architecturés pour être résilients à des pannes matérielles. C’est finalement plus simple. C’est également étrange car<strong><a href="http://qss.stanford.edu/~godfrey/vonNeumann/vN_Caltech_Lecture.pdf"> VonNeumann a démontré en 1956</a> que tous les systèmes fiables, ont été construits sur des composants non fiables</strong>.<br />
Ainsi, <strong>certains systèmes ont été conçus pour accepter ces pannes, pour fonctionner avec des composants non fiables</strong> : des “low-end servers”. Dès lors, ces systèmes plus complexes présentent des avantages de coûts d’infrastructure (nous en avons parlé précédemment) mais aussi des avantages opérationnels (plus de fenêtre de maintenance, de déploiement…)</p>
<h3>Principaux types de pannes et indicateurs</h3>
<p>Les fautes peuvent être catégorisées : </p>
<ul>
<li><strong>Corrupted</strong>. la donnée est perdue, impossible à regénérer</li>
<li><strong>Unreachable</strong>. Le service est down, impossible à accéder</li>
<li><strong>Degrader</strong>. Le service est disponible mais dans un mode dégradé</li>
<li><strong>Masked</strong>. Des fautes ont lieu mais elles sont transparentes pour l&#8217;utilisateur final (ce qui ne veut pas dire qu&#8217;elles doivent être transparentes pour l&#8217;IT en général&#8230;)
</li>
</ul>
<p>Au delà de la catégorisation, cela permet d’offrir différents indicateurs :<br />
- Le <strong>yield</strong> dans le <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.4274&#038;rep=rep1&#038;type=pdf">cas de Brewer</a>. <strong>Il s’agit du pourcentage de requêtes réalisées</strong>.<br />
- <strong><a href="http://en.wikipedia.org/wiki/Apdex">L’apdex </a></strong> dont parle le site <a href="http://www.apdex.org">apdex.org</a>. <strong>Il s’agit du pourcentage de requêtes ayant le temps de réponse attendu</strong>.</p>
<h3>Supervision de la performance</h3>
<p>Il existe quelques outils (certainement trés “cutting-edge” ou de niveau académique) qui visent à superviser, diagnostiquer les problématiques de performance sur des plateformes distribuées. </p>
<table border="1">
<tr>
<td>
</td>
<td>Outillage</td>
<td>pros/cons</td>
</tr>
<tr>
<td>
Monitoring &laquo;&nbsp;black box&nbsp;&raquo;
</td>
<td>
- <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.82.631&#038;rep=rep1&#038;type=pdf">WAP5</a><br />
- <a href="http://portal.acm.org/citation.cfm?id=1282383">sherlock systems</a>
</td>
<td>
pros :<br />
- fonctionne sans aucune connaissance de l’application</p>
<p>cons :<br />
- perte de précision. Les données sont analysées par stats
</td>
</tr>
<tr>
<td>
Instrumentation des applications/middleware
</td>
<td>
- <a href="http://issg.cs.duke.edu/pip/nsdi06preprint.pdf">Pip</a><br />
- <a href="http://research.microsoft.com/pubs/67364/magpiehotos03.pdf">Magpie</a><br />
- <a href="http://www.cs.berkeley.edu/~rfonseca/pubs/xtr-nsdi07.pdf">X-trace</a>
</td>
<td>
exactement l’inverse de l’autre :o)
</td>
</tr>
</table>
<p>Il sera intéressant de positionner tout cela par rapport au marché commercial (peut-être des solutions type <a href="http://www.dynatrace.com/en/">Dynatrace</a>). </p>
<h3>Principales causes de pannes</h3>
<p>Différentes études (dont certaines datent de 1990) ont démontré (et Google confirme)<a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot008.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot008.png" alt="" title="ScreenShot008" width="432" height="280" class="aligncenter size-full wp-image-23126" /></a></p>
<p><strong>que les principales pannes sont liées à des problèmes de configuration, de software ou même humain</strong>. Ce qu’à également montré cette étude issue de <a href="http://www.cs.berkeley.edu/~pattrsn/talks/HPCAkeynote.ppt">Recovery Oriented Computer project de Berkeley</a>, c’est que le taux d’erreurs liées au system management n’a fait qu’augmenter (et je ne pense pas que cette courbe se soit inversée depuis 1993, nos systèmes étant encore plus complexes, distribués…)<br />
<a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot009.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot009.png" alt="" title="ScreenShot009" width="578" height="252" class="aligncenter size-full wp-image-23127" /></a></p>
<p>Le lecteur averti aura noté que c’est un des axe d’amélioration dont parlent beaucoup les protagonistes de DevOps.</p>
<table bgcolor="#cccccc">
<tr>
<td>
<em><strong>Recovery Oriented Computing aborde un point rapport à la disponibilité</strong>. La disponibilité se mesure comme<br />
uptime = (MTBF – MTTR)/MTBF<br />
MTBF = Mean Time Between Failure<br />
MTTR = Mean Time To Repair</p>
<p>Une stratégie pour augmenter la disponibilité est donc soit d’augmenter le MTBF, soit de diminuer le MTTR.<br />
Le MTTR inclus plusieurs choses : le diagnostic, le fix, etc. Il peut également être amélioré en travaillant sur les temps de redémarrage des serveurs. Un ESB mettant 2h30 à démarrer (i.e. à déployer l’ensemble des services) n’a pas un bon temps de redémarrage). Et mécaniquement il a une disponibilité inférieure à un ESB mettant 6 minutes à démarrer. </p>
<p>Google présente un graphe intéressant : l’axe des x représente le temps de downtime &#8211; tout type d’arrêt confondu (donc avec maintenance..) et l’axe des y, le pourcentage de redémarrages qui atteint ce downtime .<br />
<a href="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot010.png"><img src="http://blog.octo.com/wp-content/uploads/2011/06/ScreenShot010.png" alt="" title="ScreenShot010" width="553" height="293" class="aligncenter size-full wp-image-23128" /></a></p>
<p>Un graphe intéressant à créer qui démontre que 55% des redémarrages (prévu ou non) durent moins de 6 minutes</em>
</td>
</tr>
</table>
<h1>Et de conclure&#8230;</h1>
<p>Difficile de conclure sur une telle densité d’information&#8230;Il est acquis que ces papiers permettent de satisfaire notre soif de curiosité.<br />
Mais il faut également y voir un moyen de comprendre les problématiques de ceux qui font les datacenters. Je ne parle pas spécialement des sysadmins dont les problématiques nous sont familières mais de ceux qui font les buildings, achètent les machines, gèrent la climatisation, etc.<br />
Il est vrai que cette échelle est rarement rencontrée. Il n’en reste pas moins vrai que l’enjeu énergétique est aujourd’hui réel dans nos datacenters et que ces datacenters sont trés certainement les images de ce que seront nos datacenters demain.<br />
N’oublions pas également que ces études sont faites par ceux qui “font le Cloud”. <strong>Ce sont donc les datacenters dans lesquels nos applications “cloudifiées” (ie. dont l’architecture a été adaptée) devront fonctionner</strong> :<br />
- <strong>le hardware choisit s’oriente vers du commodity server-class machines</strong> en partie car le ratio cout / performance est plus intéressant.<br />
- <strong>la résilience se doit d’être gérée au niveau applicatif </strong>(sur la base du hardware choisi précédemment) et doit permettre de garantir le fonctionnement du service. C’est une des grandes leçons de noSQL : gérer la résilience au niveau applicatif (réplication JVM) plutôt qu’au niveau infrastructure (réplication SAN)<br />
- <strong>l’écart de performance entre la RAM et le disque est réel </strong>(même avec des SSD). Dans le même temps, les capacités de RAM aujourd’hui sont proches du Tera. Enorme ! Il est fort probable que <a href="http://blog.octo.com/bigdata-la-fin-des-architectrures-basees-sur-les-processus-metiers/#more-22575">Big Data</a> nous emmène vers ce débat. </p>
<p>Maintenant, repensons à  tout cela ; les enjeux électriques, low-end server, le nombre de pannes associées à des erreurs humaines… Remettons-nous en mémoire les messages, les technologies ou pratiques autour de noSQL, DevOps… Reprenons nos architectures, nos systèmes d’information “traditionnels”… Ça change 2 ou 3 trucs non ? :o)</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=23099" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/introduction-a-la-programmation-orientee-acteurs/' rel='bookmark' title='Introduction à la Programmation Orientée Acteurs'>Introduction à la Programmation Orientée Acteurs</a></li>
<li><a href='http://blog.octo.com/socle-technique-des-applications-java-ee-dans-le-war-ou-dans-le-serveur/' rel='bookmark' title='Socle technique des applications Java EE : dans le WAR ou dans le serveur ?'>Socle technique des applications Java EE : dans le WAR ou dans le serveur ?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/datacenter-as-a-computer-une-plongee-dans-les-datacenters-des-acteurs-du-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ITIL v3: La gestion du cycle de vie de services</title>
		<link>http://blog.octo.com/itilv3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=itilv3</link>
		<comments>http://blog.octo.com/itilv3/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 10:04:07 +0000</pubDate>
		<dc:creator>Miguel Eduardo Mogollon</dc:creator>
				<category><![CDATA[Management de SI]]></category>
		<category><![CDATA[amélioration continue]]></category>
		<category><![CDATA[Gouvernance SI]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[ITIL]]></category>
		<category><![CDATA[Management du SI]]></category>
		<category><![CDATA[processus]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=21238</guid>
		<description><![CDATA[&#160; En 2007 ITIL (IT Infrastructure Library), a lancé sa version V3 en devenant le référentiel le plus répandu de bonnes pratiques pour le management de services informatiques (ITSM). Il se focalise sur le « comment » gérer chaque phase d’un service, en contraste par rapport à des autres référentiels qui se focalisent sur le « quoi », ce [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/itil/' rel='bookmark' title='ITIL : Information Technology Infrastructure Library'>ITIL : Information Technology Infrastructure Library</a></li>
<li><a href='http://blog.octo.com/la-gestion-des-processus-it/' rel='bookmark' title='La gestion des processus IT'>La gestion des processus IT</a></li>
<li><a href='http://blog.octo.com/autres-standards/' rel='bookmark' title='Autres standards de gestion des processus IT'>Autres standards de gestion des processus IT</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fitilv3%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22ITIL%20v3%3A%20La%20gestion%20du%20cycle%20de%20vie%20de%20services%22%20%7D);"></div>
<p>&nbsp;</p>
<p>En 2007 ITIL (IT Infrastructure Library), a lancé sa version V3 en devenant le référentiel le plus répandu de bonnes pratiques pour le management de services informatiques (ITSM). Il se focalise sur le <strong>« comment »</strong> gérer chaque phase d’un service, en contraste par rapport à des autres référentiels qui se focalisent sur le « quoi », ce qu’on doit gérer.</p>
<p>ITIL v3 élargit le périmètre en donnant une vue “cycle de vie” des services, par rapport à sa deuxième version (v2) qui se focalisait sur les processus pour <em>le Soutien de Services</em> (Service Support) et la <em>Fourniture de Services</em> (Service Delivery)<a href="#_edn1">[i]</a>,</p>
<p>Cet article vous présente d’une façon <em>globale</em> ITIL à l’égard de la version 3 en montrant son but, les bonnes pratiques proposées pour gérer chaque phase d’un service et ce dont il faut tenir compte pour l’adoption de ce référentiel.</p>
<p>&nbsp;</p>
<p><span id="more-21238"></span></p>
<h3><strong><em>Tout d’abord, qu’est-ce que c’est un service ?</em></strong></h3>
<p>ITIL entend par <strong><em>service </em></strong> « <em>l’ensemble des moyens mis en œuvre pour produire de la valeur pour un client, sans que celui-ci n’en supporte ni les coûts spécifiques et supplémentaires ni les risques associés </em>». En conséquence, une relation client-fournisseur est établie, le fournisseur du service pouvant être interne ou externe à l’entreprise. Pour illustrer l’idée d’un service, voici une liste de services :</p>
<ul>
<li>Services d’hébergement (applications, bases de données, sites internet, …)</li>
<li>Service de support et maintenance applicatif</li>
<li>Services de messagerie (Email, chat, …)</li>
<li>Service de connectivité (internet, vpn, …)</li>
<li>Service de vidéo conférence et de téléphonie</li>
<li>…</li>
</ul>
<p>&nbsp;</p>
<h3><strong><em>Pour quoi un référentiel sur le management de services informatiques ?</em></strong></h3>
<p>Les DSI et les fournisseurs de services externes doivent :</p>
<ul>
<li>Fournir des services à valeur ajoutée au métier</li>
<li>Rendre un service de qualité en respectant les contrats de service et les coûts</li>
<li>Augmenter la flexibilité et la rapidité du système pour intégrer les mises à jour des services existants et la mise en place de nouveaux services, tout en sécurisant l’existant</li>
</ul>
<p>Pour atteindre ces objectifs il faut mettre en place une <em>organisation</em> horizontale de collaboration entre les différents acteurs (clients, métier, conception, développement, exploitation, qualité,…).</p>
<p>ITILv3 cherche à vous aider à assurer ce rôle de fournisseur de services d’une façon efficace et il vous fourni de bonnes pratiques pour savoir:</p>
<ul>
<li>Comment créer et gérer un portefeuille de services ?</li>
<li>Comment concevoir des services qui donnent de la valeur (alignement métier-SI)?</li>
<li>Comment améliorer et sécuriser les mises en production de nouveaux projets et de changements tout en préservant l’existant ?</li>
<li>Comment traiter plus efficacement les incidents, événements et les problèmes dans le SI ?</li>
<li>Comment gérer les changements des actifs et les configurations?</li>
<li>Comment mettre en place des mesures et des indicateurs dans les processus de la DSI pour améliorer la gouvernance ?</li>
<li>Comment assurer la disponibilité, la continuité, la sécurité, la capacité et la fiabilité de services ?</li>
<li>Comment formaliser les compromis client-fournisseur et comment on définit des contrats de niveaux de service (SLA ou Service Level Agreements), contrats de niveaux d’exploitation (OLA ou Operational Level Agreements) et contrats de sous-traitance (UC ou Underpinning Contracts) ?</li>
<li>Comment mettre en place une amélioration continue des services ?</li>
<li>…</li>
</ul>
<p>&nbsp;</p>
<h3><strong><em>Alors ITILv3 vous propose :</em></strong></h3>
<ul>
<li>
<h4><span style="text-decoration: underline;">Un découpage du cycle de vie d’un service en 5 phases :</span>﻿</h4>
<p style="text-align: center;"><a rel="lightbox" href="http://blog.octo.com/wp-content/uploads/2011/03/itil.jpg"><img class="aligncenter size-full wp-image-21239" title="Cycle de vie de services" src="http://blog.octo.com/wp-content/uploads/2011/03/itil.jpg" alt="" width="248" height="214" /></a></p>
<p style="text-align: center; font-size: 10px;">Image 1.  Phases du cycle de vie</p>
<dl>
<dt><strong>Stratégie de services :</strong> </dt>
<dd>Transformer le SI en un actif stratégique de l’entreprise en identifiant les besoins des clients pour définir les services qui produisent de la valeur et que respect le coût de fourniture. Il se traduit par la construction d’un portefeuille de services.</dd>
<dt><strong>Conception de services :</strong> </dt>
<dd>Concevoir un service en prenant en compte tous les éléments liés au development et á l&#8217;exploitation. La solution doit réponde aux attentes du client, aux niveaux de service engagés et à ce qu’ils soient en phase avec la capacité de l’infrastructure et l’architecture du SI.</dd>
<dt><strong>Transition de services : </strong></dt>
<dd>Mettre en place de nouveaux services et de mises à jour dans un environnement de production d’une façon sécurisée et effective en préservant la bonne exploitation du système.</dd>
<dt><strong>Exploitation de services :</strong> </dt>
<dd>Assurer la bonne fourniture du service aux utilisateurs en respectant les niveaux de services engagés. Assurer le monitoring du service, la bon gestion des incidents et des problèmes ainsi que le traitement de demandes de services et d&#8217;accès.</dd>
<dt><strong>Amélioration continue de services :</strong> </dt>
<dd>Mesurer et suivre les différents processus de gestion de services pour aider à définir les actions correctives afin d’améliorer les services existants et son alignement avec les objectifs stratégiques.</dd>
</dl>
</li>
</ul>
<p>&nbsp;</p>
<ul>
<li>
<h4><span style="text-decoration: underline;">Une mise en place de processus standard pour chaque phase du cycle de vie et la création de 4 fonctions ou unités fonctionnelles:</span></h4>
</li>
</ul>
<p><span style="text-decoration: underline;"><br />
</span></p>
<p style="text-align: center;"><a rel="lightbox" href="http://blog.octo.com/wp-content/uploads/2011/03/Processus-et-fonctions-ITIL-v32.jpg"><img class="aligncenter size-full wp-image-21242" title="Processus et fonctions ITIL v3" src="http://blog.octo.com/wp-content/uploads/2011/03/Processus-et-fonctions-ITIL-v32.jpg" alt="" width="669" height="421" /></a></p>
<p style="text-align: center; font-size: 10px;">Image 2.  Processus et fonctions ITIL v3</p>
<p style="text-align: center;">&nbsp;</p>
<ul>
<li>
<h4><span style="text-decoration: underline;">Une définition des activités et interactions par processus</span></h4>
</li>
</ul>
<p>&nbsp;</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-21243" title="processus géstion des événements" src="http://blog.octo.com/wp-content/uploads/2011/03/processus-géstion-des-événements.png" alt="" width="489" height="305" /></p>
<p style="text-align: center; font-size: 10px;">Image 3. Activités du processus de gestion des événements.</p>
<address style="text-align: center; font-size: 10px;">Source: www.ITILFrance.com</address>
<address style="text-align: center; font-size: 10px;"> </address>
<address style="text-align: center; font-size: 10px;"> </address>
<p><span style="text-decoration: underline;"><br />
</span></p>
<ul>
<li>
<h4><span style="text-decoration: underline;">Une définition de rôles et responsabilités par processus (Matrice RACI)</span></h4>
</li>
</ul>
<p><span style="text-decoration: underline;"><br />
</span></p>
<p><span style="text-decoration: underline;"> </span></p>
<ul>
<li>
<h4><span style="text-decoration: underline;">Une définition de mesures et indicateurs par processus (KPI)</span></h4>
</li>
</ul>
<p>&nbsp;</p>
<h3><strong><em>Ne pas oublier !</em></strong></h3>
<p>Si vous voulez implémenter ITIL dans votre organisation n’oubliez pas :</p>
<ul>
<li>De définir les objectifs organisationnels. L’objectif ne peut pas être « mettre en place ITIL », cette démarche doit répondre à un besoin d’amélioration dans l’organisation.</li>
<li>De former et sensibiliser les acteurs pour que tout le monde soit familiarisé avec les termes, les objectifs et les gains qui emporte la démarche. ITIL implique un changement organisationnel et culturel au sein de l’entreprise donc il peut être difficile à implémenter si tout le monde ne partage pas la même vision.</li>
<li>D’analyser votre organisation actuelle et identifiez le GAP qu’il y a par rapport aux meilleures pratiques pour identifier où ITIL peut vous aider.</li>
<li>De définir une roadmap par phases en priorisant les processus qu’à la fois vous donne plus de valeur (pour atteindre les objectifs définis) et qui sont plus simples à mettre en place. Ne pas faire un « Big Bang ».</li>
<li>De mesurer dès le début! La seule façon de savoir si vous atteignez les objectifs est de définir des indicateurs et mesures qui vous indiquent le progrès et la performance de vos processus.</li>
<li>De mettre en place un cadre d’amélioration continue. Les processus ont besoin d’évoluer, d’être ajustés et d’être optimisés à travers le temps pour qu’ils soient bien adaptés spécifiquement à chaque organisation et qu’ils accompagnent les évolutions métier.<strong><em> </em></strong></li>
</ul>
<p><strong><em> </em></strong></p>
<p>&nbsp;</p>
<h3><strong><em>Complémenter ITIL</em></strong></h3>
<p>ITIL peut être complémenté et peut cohabiter avec des autres référentielles comme COBIT, ISO 27002, CMMI, etc. Des autres méthodologies comme le Lean peuvent encore améliorer les processus qui ont été mise en place (Lean-ITIL)<a href="#_edn2">[ii]</a>. Un seul référentiel ne fait pas tout et même si dans sa version 3, le périmètre d’ITIL a été élargi, il ne couvre pas tous les aspects de la gestion informatique.</p>
<p>&nbsp;</p>
<h3><strong><em>En conclusion</em></strong></h3>
<p><strong><em> </em></strong></p>
<p>ITILv3 propose de bonnes pratiques pour <em>comment </em>gérer chaque phase du cycle de vie de services et pour faire collaborer d’une façon organisée tous les acteurs en mettant en place de processus et de responsabilités. D’après des études<a href="#_edn3">[iii]</a> on a pu constater que cette démarche permet aux fournisseurs de services (internes ou externes) d’améliorer la qualité dans la fourniture de services et la satisfaction du client. Il permet aussi l’alignement métier avec l’identification et la mise en place de nouveaux services qui donnent de la valeur.</p>
<p>Le principal obstacle pour son adoption est qu’il doit faire face à la résistance aux changements organisationnels<a href="#_edn4">[iv]</a>. Risque majeur des échecs qui peut être maitrisé avec la formation, la sensibilisation ou la certification<a href="#_edn5">[v]</a> des acteurs au référentiel pour les aligner sur les buts et les bénéfices qu’ITIL peut apporter.</p>
<p>Il a été adopté par des entreprises comme NASA, HSBC, IBM, Telefonica, HP, BT entre autres et ses pratiques son le pilier pour acquérir la certification de l’organisation dans le standard ISO/IEC 20000<a href="#_edn6">[vi]</a>. Ils existent beaucoup des sites web<a href="#_edn7">[vii]</a> où on peut approfondir sur le contenu et le détaille de chaque phase et processus en plus des ouvrages officiels publiés par son organisme créateur l’office du commerce britannique (OGC).</p>
<p>&nbsp;</p>
<div>
<hr size="1" />
<div>
<p><a href="#_ednref1">[i]</a> <a href="http://blog.octo.com/itil/">Blog Octo ITIL v2</a></p>
</div>
<div>
<p><a href="#_ednref2">[ii]</a> <a href="http://www.itsmi.com/itil_lean.htm" class="broken_link">Lean ITIL</a></p>
</div>
<div>
<p><a href="#_ednref3">[iii]</a> <a href="http://www.rv-nrw.de/content/koop/workshops/20041206.arnw_workshop/The%20ITIL%20Experience%20-%20Hornbill.pdf">The ITIL Experience &#8211; Hornbill</a></p>
</div>
<div>
<p><a href="#_ednref4">[iv]</a> <a href="http://www.scribd.com/doc/10162335/Business-Value-ITIL-Survey-part-1">Business Value ITIL Survey part 1</a></p>
</div>
<div>
<p><a href="#_ednref5">[v]</a> <a href="http://www.itsmfi.org/files/ITILSMPV3QS%20rev1.pdf">ITIL v3 qualifications scheme</a></p>
</div>
<div>
<p><a href="#_ednref6">[vi]</a> <a href="http://www.itil-officialsite.com">ITIL Official Site</a></p>
</div>
<div>
<p><a href="#_ednref7">[vii]</a> <a href="&quot;http://www.itilfrance.com" class="broken_link"> Site Français d&#8217;ITIL</a></p>
</div>
</div>
<p>&nbsp;</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=21238" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/itil/' rel='bookmark' title='ITIL : Information Technology Infrastructure Library'>ITIL : Information Technology Infrastructure Library</a></li>
<li><a href='http://blog.octo.com/la-gestion-des-processus-it/' rel='bookmark' title='La gestion des processus IT'>La gestion des processus IT</a></li>
<li><a href='http://blog.octo.com/autres-standards/' rel='bookmark' title='Autres standards de gestion des processus IT'>Autres standards de gestion des processus IT</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/itilv3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment Puppet, Cfengine ou Chef peuvent aider études et production</title>
		<link>http://blog.octo.com/comment-puppet-cfengine-ou-chef-peuvent-aider-etudes-et-production/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comment-puppet-cfengine-ou-chef-peuvent-aider-etudes-et-production</link>
		<comments>http://blog.octo.com/comment-puppet-cfengine-ou-chef-peuvent-aider-etudes-et-production/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 10:31:42 +0000</pubDate>
		<dc:creator>Arnaud Mazin</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[CFengine]]></category>
		<category><![CDATA[chef]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[production]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=10217</guid>
		<description><![CDATA[Pour faire suite à l&#8217;article d&#8217;introduction sur le mouvement des DevOps, nous pressentons que, dans leur lourde tâche, nos héros vont devoir s&#8217;appuyer sur un certain outillage leur permettant de fluidifier la phase de Mise En Production ; qui dit fluidification dit appli déployée plus vite et le business traduit ça par : &#171;&#160;la fonctionnalité [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/passer-du-shell-a-puppet/' rel='bookmark' title='Passer du shell à Puppet'>Passer du shell à Puppet</a></li>
<li><a href='http://blog.octo.com/presentation-de-cfengine-3-le-812/' rel='bookmark' title='Présentation de CFengine 3 le 8/12'>Présentation de CFengine 3 le 8/12</a></li>
<li><a href='http://blog.octo.com/devops-ou-le-lean-applique-aux-activites-it-du-developpement-a-la-production/' rel='bookmark' title='DevOps ou le Lean appliqué aux activités IT du développement à la production'>DevOps ou le Lean appliqué aux activités IT du développement à la production</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fcomment-puppet-cfengine-ou-chef-peuvent-aider-etudes-et-production%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Comment%20Puppet%2C%20Cfengine%20ou%20Chef%20peuvent%20aider%20%C3%A9tudes%20et%20production%22%20%7D);"></div>
<div>
<p>Pour faire suite à l&#8217;article d&#8217;<a href="../devops-le-mouvement-qui-tend-a-%e2%80%9cagilifier%e2%80%9d-votre-dsi/" target="_blank">introduction</a> sur le mouvement des DevOps, nous pressentons que, dans leur lourde  tâche, nos héros vont devoir s&#8217;appuyer sur un certain outillage leur  permettant de fluidifier la phase de <strong>M</strong>ise <strong>E</strong>n <strong>P</strong>roduction  ; qui dit fluidification dit appli déployée plus vite et le business  traduit ça par : &laquo;&nbsp;la fonctionnalité va arriver bien plus vite au  client&nbsp;&raquo;. Et le business aime ça.</p>
<p>L&#8217;<a href="administrer-son-parc-avec-du-shell/" target="_blank">utilisation du shell</a> est une solution, mais qui montre ses limites. Il est temps de faire  appel à d&#8217;autres outils. Voici un rapide tour d&#8217;horizon de quelques  instruments de déploiement automatisé et de leurs principes.</p>
<p><span id="more-10217"></span></p>
</div>
<h1>Principes</h1>
<div>
<p>Les outils de type Cfengine, Puppet ou Chef reposent sur un certain nombre de concepts communs. Précisons à toutes fins utiles que le cœur de cible de ces outils est le monde des serveurs dits « ouverts » et qu&#8217;ils vont manipuler des terminologies proches d&#8217;UNIX (systèmes de fichiers,  points de montage, paquets, cron, permissions UNIX…). À noter que la version payante de Cfengine permet notamment de gérer les machines Windows.</p>
<p>Ces outils tendent à définir un état de configuration (système, applicative) dans lequel on  souhaite voir nos machines. On est donc assez proche de la gestion de parc mais pas très loin du déploiement automatisé. Les agents déployés sur les machines cibles vont prendre une configuration de référence sur un dépôt central et opérer les tâches d&#8217;administration pour atteindre cette cible. Cfengine, dans sa version 3, parle par exemple de <strong>promesse</strong> pour définir les actions qu&#8217;il va entreprendre (il s&#8217;engage à ce qu&#8217;un fichier soit présent, et avec les bons droits, à ce qu&#8217;un paquet soit installé&#8230;).</p>
<p style="text-align: center;"><a href="http://blog.octo.com/wp-content/uploads/2010/09/archi-1a.png"><img class="size-full wp-image-14883 aligncenter" src="http://blog.octo.com/wp-content/uploads/2010/09/archi-1a.png" alt="" width="321" height="456" /></a></p>
<p>Les agents vont donc avoir l&#8217;incessante mission de rendre une machine conforme à une cible. Malheur à l&#8217;édition manuelle d&#8217;un fichier localement sur une machine, le prochain déclenchement de l&#8217;agent ira consciencieusement l&#8217;écraser par la version de référence, si elle a été définie. Au contraire, si une machine n&#8217;a pas été modifiée depuis le dernier lancement de l&#8217;agent, celui-ci ne fera strictement rien.</p>
<p>La notion de référence, de dépôt central des configurations est un principe essentiel. Même si les outils n&#8217;imposent pas l&#8217;utilisation d&#8217;un gestionnaire de version, l&#8217;automatisme qu&#8217;ont les développeurs depuis plusieurs années doit devenir systématique dans le monde de la prod : qui dit « dépôt  de configuration », dit « gestion de version ». Bien entendu, pour améliorer la convergence des équipes de dev et de prod, on va préférer (ré-)utiliser un outil de gestion de version déjà maîtrisé par les équipes de dev, y appliquer les mêmes bonnes pratiques et standards en matière de gestion de branches, d&#8217;étiquetage.</p>
<p><em>Si c&#8217;est en prod&#8217;, c&#8217;est dans le gestionnaire de serveurs [Puppet,  Cfengine, Chef] (rayez les mentions inutiles). Si c&#8217;est dans le gestionnaire de serveur, c&#8217;est géré en version dans </em><em>[CSV, SVN,  Git, Mecurial] (rayez les mentions inutiles)</em><em>.<br />
</em></p>
</div>
<h1>Les actions possibles</h1>
<p>Un grand nombre d&#8217;actions sont ainsi possibles avec les outils de déploiement de configuration :</p>
<ul>
<li>Installer un paquet système (RPM, Deb, pkg&#8230;)</li>
<li>Installer un fichier à partir du référentiel, en utilisant éventuellement un système de gabarits pour y placer des données dépendantes de chaque machine (exemple : l&#8217;adresse IP d&#8217;écoute du service)</li>
<li> Mettre en place ou modifier une tâche planifiée</li>
<li> Créer un répertoire</li>
<li> Supprimer un répertoire/fichier</li>
<li> Tirer un lien symbolique</li>
<li> S&#8217;assurer que tel ou tel fichier/répertoire dispose de droits prévus</li>
<li> Changer le montage d&#8217;un système de fichiers (local ou réseau)</li>
<li> Et finalement, le saint Graal : lancer une commande quelconque. On comprend bien qu&#8217;il est simplement possible de faire tout et n&#8217;importe quoi
<ul>
<li> Reboot de la machine</li>
<li> Redémarrage d&#8217;un service</li>
<li> Déploiement d&#8217;un artefact</li>
<li> Initialisation d&#8217;une base</li>
<li> Import de données</li>
<li> Remise en marche d&#8217;une réplication</li>
<li>&#8230;</li>
</ul>
</li>
</ul>
<h1>Exemples</h1>
<div>
<p>Les  outils utilisent généralement une syntaxe particulière pour les fichiers de configuration. Là où Cfengine a redéfini un format de fichiers spécifiques, Puppet et chef héritent du langage dans lequel ils ont été écrits (Ruby) pour utiliser une syntaxe déjà existante.</p>
<p>Exemple ici avec le positionnement de droits particuliers à un fichier.</p>
<pre><code>À la Puppet :

file { "/etc/plop":
    owner =&gt; root,
    group =&gt; root,
    mode  =&gt; 644,
}</code></pre>
<p>À la CFEngine :</p>
<pre><code>[...]
files:
"/tmp/patapouf"
create    =&gt; "true",
perms   =&gt; m_u_g("644", "root", "root"); 

body perms m_u_g(m,u,g)
{
mode            =&gt;      "$(m)";
owners          =&gt;      { "$(u)" };
groups          =&gt;      { "$(g)" };
}
</code></pre>
<p>À la Chef :</p>
<pre><code>file </code><code>"/tmp/something"</code> <code>do
</code> owner "root"<code>
</code> group "root"<code>
</code> mode "644"<code>
 </code><code>action </code>:create<code>
end
</code></pre>
</div>
<h1>Utilisation</h1>
<div>
<p>Cela ne fait pas franchement de différence que l&#8217;on travaille au  niveau d&#8217;une machine physique ou d&#8217;une machine virtuelle. Dans les deux  cas, on pilote, on administre l&#8217;engin. Seul le cycle de vie peut  différer, en effet pour créer une nouvelle VM, on aura tendance à cloner une VM de base, alors que pour des machines physiques, il faut souvent  effectuer des manipulations plus compliquées, à grand coup d&#8217;installation, de ghost, de boot PXE,  j&#8217;en passe et des meilleures.</p>
<p>Les agents qui appliquent des modifications sur les machines ont beaucoup de droits. C&#8217;est normal, ils doivent pouvoir installer des paquets, changer des fichiers de configuration du système, redémarrer un service voire toute la machine. Il est important qu&#8217;une confiance se mette en place entre le serveur central et  l&#8217;agent. On a souvent recours à de la cryptographie asymétrique  (X.509,  RSA…) pour s&#8217;assurer mutuellement de l&#8217;identité de l&#8217;autre.</p>
<p>Les agents peuvent être invoqués sur tout ou partie du parc, soit manuellement à la demande, soit automatiquement à une fréquence configurable. Certains de ces outils vont apporter du contrôle d&#8217;accès de manière par exemple à ce que les déploiements sur un environnement de développement soient possibles pour tous, alors que les changements de configuration de production seront mieux contrôlés ou réservés à une certaine population.</p>
</div>
<h1>Modélisation de la configuration</h1>
<div>
<p>Une fois que l&#8217;on a vu le panel d&#8217;actions possibles sur nos systèmes, voyons comment les appliquer sélectivement sur nos machine.</p>
<p>Pour faire simple disons que l&#8217;on va être capable de filtrer des actions à des groupes/profiles/rôles/tags (j&#8217;emploierai par la suite le terme groupe uniquement pour des questions de simplicité). Exemple : installer Apache uniquement sur les systèmes identifiés comme des serveurs Web.</p>
<pre># extrait d'un fichier de configuration cfengine v2
# déclaration des groupes
groups:
    sql_servers = (db1 db2 dev1) # 3 machines dans ce groupe
    web_servers = (www1 www2 dev1) # idem, dev1 est dans les deux groupes
    san_users = ( ReturnsZero(/bin/grep -qi san /etc/mtab) ) # groupe dynamique

# installation automatique de paquets
packages:
    any::
        # tous les systèmes ont systématiquement NTP et SNMP installés
        openntpd       action=install
        snmpd          action=install

    web_servers::
        apache2        action=install
    san_users::
        san_diag_package action=install</pre>
<p>En fonction de l&#8217;organisation, on va donc travailler à définir des  groupes qui ont du sens, qui parlent aux gens, qu&#8217;ils soient des études ou de la prod&#8217;, car au final, tous vont s&#8217;y référer. Cette étape est essentielle dans la modélisation d&#8217;un outil de déploiement automatisé.</p>
<p>On se rend compte que l&#8217;on va généralement superposer au moins trois type de groupes aux machines:</p>
<ul>
<li>Des groupes techniques d&#8217;infrastructure ou de sécurité (Linux, DMZ, NoSAN, VLAN_203, DataRoom_01) =&gt; couche IaaS</li>
<li>Des groupes techniques de socle applicatifs (JBoss, Tomcat, PHP, MySQL, rails) =&gt; couche PaaS</li>
<li>Des groupes fonctionnels applicatifs (MaBanque, MaBanque_2_0, FrontOffice) =&gt; couche SaaS</li>
</ul>
</div>
<h1>Et pour les DevOps, hmm ?</h1>
<div>
<p>Les outils de déploiement automatisé dans une approche DevOps peuvent représenter une très bonne interface entre les dev et les infreux. Les deux équipes sont finalement amenées à contribuer à remplir les fichiers de configuration d&#8217;un même outil.</p>
<p style="text-align: center;"><a href="http://blog.octo.com/wp-content/uploads/2011/01/Présentation1.png"><img class="aligncenter size-medium wp-image-19185" title="Orga" src="http://blog.octo.com/wp-content/uploads/2011/01/Présentation1-285x300.png" alt="" width="285" height="300" /></a></p>
<p>Dans cette vision, les ops sont avant tout vue comme une équipe qui met en place les bases de l&#8217;outil et définit les actions techniques associées aux groupes, principalement de bas-niveau. En déclarant ces actions à leur convenance, elle s&#8217;assure que tous les systèmes seront installés à l&#8217;identique et conformément à ses us et coutumes (supervision, sauvegarde, journalisation…), bref aux petits oignons.</p>
<p>Les dev vont avoir avant tout un rôle de contributeur au sens éditorial : ils déclarent des objets, leur attribuent des profils en piochant dans les groupes techniques fournis par l&#8217;infra. Un vrai self-service. Ils contribuent également à améliorer les socles applicatifs</p>
<p>Dans le cas d&#8217;une infrastructure 100% virtualisée sur un socle déjà provisionné/dimensionné, une équipe de dev bien épaulé par ses ops est donc potentiellement capable de déployer automatiquement de nouveaux services (au sens fonctionnel), de l&#8217;OS à l&#8217;application, en production, avec toutes les briques d&#8217;infrastructure nécessaires à leur exploitation, à des vitesses impressionnantes.</p>
</div>
<h1>Conclusion</h1>
<p>Les outils de déploiement automatisé apportent une très forte capacité à fluidifier et industrialiser des mises en production. C&#8217;est une brique qui se justifie souvent pour des tailles de parcs serveurs conséquentes et pour laquelle un ticket d&#8217;entrée est toujours à évaluer (en terme de temps et de compétences à acquérir).</p>
<p>Par rapport à l&#8217;utilisation du shell, qui restait à l&#8217;initiative de l&#8217;exploit&#8217; et éventuellement à disposition des dev &#8211; et finit par former  un véritable serpent de mer au fur et à mesure de l&#8217;ajout de  fonctionnalités et de spécificités &#8211; nous avons ici de  véritables outils communs pour le déploiement des applications. Par  ailleurs, tout comme le shell, ces outils Open Source ont les défauts et  qualités inhérents à leur écosystème : rapides à mettre en œuvre, légers,  mais un peu spartiates dans l&#8217;utilisation ; et principalement cantonnés  aux *nix.</p>
<p>Comme bien souvent, c&#8217;est l&#8217;organisation à laquelle l&#8217;outil participe qui fera le succès d&#8217;une mise en prod et non l&#8217;outil en lui même. Le mariage entre l&#8217;approche organisationnelle DevOps et ces socles techniques semblent très prometteur.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=10217" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/passer-du-shell-a-puppet/' rel='bookmark' title='Passer du shell à Puppet'>Passer du shell à Puppet</a></li>
<li><a href='http://blog.octo.com/presentation-de-cfengine-3-le-812/' rel='bookmark' title='Présentation de CFengine 3 le 8/12'>Présentation de CFengine 3 le 8/12</a></li>
<li><a href='http://blog.octo.com/devops-ou-le-lean-applique-aux-activites-it-du-developpement-a-la-production/' rel='bookmark' title='DevOps ou le Lean appliqué aux activités IT du développement à la production'>DevOps ou le Lean appliqué aux activités IT du développement à la production</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/comment-puppet-cfengine-ou-chef-peuvent-aider-etudes-et-production/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Les 3 S de l’administrateur UNIX, saison 3</title>
		<link>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=les-3-s-de-ladministrateur-unix-saison-3</link>
		<comments>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/#comments</comments>
		<pubDate>Mon, 24 May 2010 09:27:09 +0000</pubDate>
		<dc:creator>Gabriel Guillon</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=9935</guid>
		<description><![CDATA[Nous avons vu dans les articles précédents comment ssh permettait à Bob de chiffrer ses connexions aux serveurs, comment sudo permettait de restreindre et de tracer qui fait quoi, et comment screen pouvait éviter à Bob de perdre du temps. Fort des ces outils, Bob a commencé à automatiser plusieurs tâches, mais se heurte à [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 1'>Les 3 S de l’administrateur UNIX, saison 1</a></li>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 2'>Les 3 S de l’administrateur UNIX, saison 2</a></li>
<li><a href='http://blog.octo.com/octo-recrute-admin-reseau/' rel='bookmark' title='OCTO recrute un(e) administrateur(trice) réseau, responsable help desk'>OCTO recrute un(e) administrateur(trice) réseau, responsable help desk</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fles-3-s-de-ladministrateur-unix-saison-3%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Les%203%20S%20de%20l%E2%80%99administrateur%20UNIX%2C%20saison%203%22%20%7D);"></div>
<p>Nous avons vu dans <a href="http://blog.octo.com/?p=9882">les articles</a> <a href="http://blog.octo.com/?p=9911">précédents</a> comment <strong>ssh</strong> permettait à Bob de chiffrer ses connexions aux serveurs, comment <strong>sudo</strong> permettait de restreindre et de tracer qui fait quoi, et comment <strong>screen</strong> pouvait éviter à Bob de perdre du temps.  Fort des ces outils, Bob a commencé à automatiser plusieurs tâches, mais se heurte à des problèmes d&#8217;échelle : taper une fois un mot de passe passe, mais cent fois trois mots de passe ne passe plus.  <span id="more-9935"></span>Nous allons voir dans cet article quelques utilisations avancées de ssh.  Bob, donc, n&#8217;a pas envie de taper plusieurs fois le mot de passe pour se connecter à un serveur. Il regarde la man page de ssh, et un grand sourire illumine son visage : il a trouvé. &laquo;&nbsp;Ils sont forts, très forts…&nbsp;&raquo;</p>
<h1>S03E01 : Socket</h1>
<p>Bob préfèrerait éviter de jouer avec les clés publiques / clés privées : il faut les déployer partout, et pour résoudre son problème (s&#8217;authentifier plusieurs fois par serveur) il faudrait les laisser en clair sur les serveurs, ce qu&#8217;il n&#8217;aime pas beaucoup faire. Ainsi le compromis « je tape mon mot de passe une fois au lieu de trois mais je ne laisse pas mes clés en clair » lui semble acceptable pour quelques serveurs.  La première option qu&#8217;il a envisagée est d&#8217;utiliser des clés privées protégées par un mot de passe et d&#8217;utiliser ssh-agent pour n&#8217;avoir à saisir qu&#8217;une fois le mot de passe pour dé-sceller la clé. Certes c&#8217;est efficace, mais Bob choisit une autre méthode&#8230;</p>
<p>Selon la man page, il a le choix entre modifier les commandes ssh de son script et modifier le fichier de configuration de ssh propre à l&#8217;utilisateur qui lance le script (.ssh/config depuis le répertoire home de l&#8217;utilisateur en question). Après réflexion il décide de modifier son script, car modifier le fichier de configuration impose ce dilemme :</p>
<ul>
<li>Faire une configuration globale, qui ne sera utile qu&#8217;un petit nombre de fois</li>
<li>Faire une configuration par hôte à contacter, ce qui peut s&#8217;avérer fastidieux en fonction du nombre de machines</li>
</ul>
<p>Il ajoute donc à la première occurrence de ssh &laquo;&nbsp;-MS /tmp/%l-%h-%p&nbsp;&raquo;, puis dans les suivantes &laquo;&nbsp;-S /tmp/%l-%h-%p&nbsp;&raquo; et dans la dernière &laquo;&nbsp;-S /tmp/%l-%h-%p -O exit&nbsp;&raquo;.  Il relance son script, et tape le mot de passe… Une seule fois par serveur.</p>
<p>Quel démon du jardin magique Bob a-t-il invoqué pour que les choses se passent ainsi ?</p>
<p><code>[seti@home]~$ ssh server -MS /tmp/%l-%h-%p -Nf<br />
Password:<br />
[seti@home]~$ ls -l /tmp<br />
0 <strong>s</strong>rw-------  1 gab      gab         0 avril 12 18:46 home-server-22<br />
[seti@home]~$ ssh server -S /tmp/%l-%h-%p 'ls -p'<br />
work/<br />
recup/<br />
[seti@home]~$ ssh server -S /tmp/%l-%h-%p -O exit<br />
Exit request sent.<br />
</code></p>
<p>L&#8217;option -S de ssh permet de définir un socket (nommé) de contrôle, -M de  dire que la commande ssh correspondante en est le maître, et &laquo;&nbsp;-O exit&nbsp;&raquo;  de fermer ce socket. En d&#8217;autres termes : la première commande permet à ssh de créer un socket de contrôle ; il tape son mot de passe pour se  connecter à la machine distante, mais ne lance par de shell dans un premier temps (options <em>-Nf</em>). Les invocations suivantes de ssh  utilisent ce socket et donc les informations d&#8217;authentification, et la  dernière permet de fermer ce socket.  La socket UNIX ainsi créée permet de piloter la session SSH qui reste résidente. Les droits associés à cette chaussette sont par défaut limités à l&#8217;utilisateur uniquement, ce qui est plutôt une bonne chose.</p>
<h1>S03E02 : Tunnels</h1>
<p>Baignant dans la satisfaction qui sied à tout inventeur fier de son œuvre , Bob se rappelle un épineux problème qui touche  l&#8217;architecture Web de son entreprise.  Architecture qui, basiquement,  peut se résumer ainsi :</p>
<p style="text-align: center;"><a href="http://blog.octo.com/wp-content/uploads/2010/04/Sans-titre.png"><img class="aligncenter" title="Sans titre" src="http://blog.octo.com/wp-content/uploads/2010/04/Sans-titre-300x79.png" alt="" width="300" height="79" /></a></p>
<p style="text-align: left;"><a href="http://blog.octo.com/wp-content/uploads/2010/04/Sans-titre.png"> </a>Il se trouve qu&#8217;il y a un problème sur le service Web, et soupçonne la couche HTTPS apportée par le mandataire inverse de contribuer au problème. Bob se dit que s&#8217;il pouvait, du navigateur de son poste, accéder en HTTP sans &#8216;S&#8217; au serveur Web directement, ça pourrait le faire avancer dans la  résolution de ce bug.</p>
<p style="text-align: left;">Bien sûr, il pourrait paramétrer le reverse proxy  pour qu&#8217;il accepte le HTTP ou faire de violents trous dans le pare-feu de l&#8217;entreprise. Que neni, faire des modifications dans la sacro-sainte DMZ sera vu d&#8217;un très mauvais œil, et moins il touche la configuration de l&#8217;ensemble du système, plus il a de  chances de trouver le bug et de tout remettre dans l&#8217;état dans lequel il l&#8217;a trouvé.</p>
<p style="text-align: left;">Encore tout  électrisé, et se rappelant de la <em>man page</em> de ssh, Bob retourne la  consulter ; il croit se rappeler que ssh avait quelques options qui lui  seraient bien utiles. Jusqu&#8217;à maintenant lesdites options (et surtout leur description) lui avaient parues du<a href="http://fr.wikipedia.org/wiki/Faux-texte"> <em>lorem ipsum</em></a>, mais après une seconde relecture, Bob finit par comprendre qu&#8217;il y a sans doute moyen de moyenner.</p>
<p style="text-align: left;">Il fait quelques essais sur un poste *nix (c&#8217;est tout de même plus facile), puis fait la même chose avec son PuTTY. Il retire la configuration du proxy de son navigateur, et hop ! Il accède au serveur Web, en clair, ou du moins, comme semble le penser son butineur jovial.</p>
<p style="text-align: left;">Allons bon&#8230; ssh serait donc si magique pour mettre en place un serveur Web sur le poste client ?</p>
<p style="text-align: left;">Presque pas, mais pas très loin.</p>
<p style="text-align: left;">Ssh permet, entre autres, de faire des <strong>tunnels TCP</strong> : l&#8217;option <em><strong>-L</strong></em> fait que ssh écoute sur un port sur la machine client, et transmet tout ce qui lui est adressé sur ce port à la machine à laquelle il est connecté, et de cette machine à une troisième machine qu&#8217;il est possible de spécifier.  Schématiquement :</p>
<p style="text-align: center;"><a href="http://blog.octo.com/wp-content/uploads/2010/04/tunnel-l.png"><img class="size-large wp-image-10936 aligncenter" title="tunnel-l" src="http://blog.octo.com/wp-content/uploads/2010/04/tunnel-l-1024x407.png" alt="" width="458" height="182" /></a></p>
<p>Et avec un exemple en ligne de commande, depuis &#8216;poste utilisateur&#8217; :</p>
<p><code>[seti@home]$ ssh bob@serveur1 -L 8080:serveur2:80 -Nf</code></p>
<p>Que l&#8217;on traduirait par : connecte-toi à serveur1 en tant que Bob, ouvre le port 8080 sur ma machine et transmets tout ce qu&#8217;on t&#8217;y adresse au serveur2 sur le port 80, n&#8217;exécute pas de commande distante, mets-toi en tâche de fond une fois que c&#8217;est fait. Notez que par défaut l&#8217;écoute sur le port 8080 se fait sur localhost, et que le trafic &#8216;poste utilisateur&#8217; -&gt; serveur1 est chiffré par ssh, alors que le trafic serveur1 -&gt; serveur2 est en &#8216;clair&#8217;. Pour accéder donc au serveur2 au travers de ce tunnel, Bob va donc taper dans son navigateur http://localhost:8080/.</p>
<p>Comble du raffinement et cauchemar des responsables sécurité, l&#8217;option <em><strong>-R</strong></em> propose exactement le même fonctionnement que l&#8217;option<em><strong> -L</strong></em>, mais en utilisant le tunnel SSH pour remonter un flux à rebrousse-poil. Cette fois-ci c&#8217;est la machine de destination (serveur1 dans notre exemple) qui se met à l&#8217;écoute de paquets entrants et qui les fait suivre au travers du tunnel SSH vers une machine accessible du poste utilisateur, ou le poste utilisateur lui-même bien entendu.</p>
<p style="text-align: center;"><a href="http://blog.octo.com/wp-content/uploads/2010/04/tunnel-r.png"><img class="size-large wp-image-10939 aligncenter" title="tunnel-r" src="http://blog.octo.com/wp-content/uploads/2010/04/tunnel-r-1024x426.png" alt="" width="524" height="218" /></a></p>
<p>Bob, qui est maintenant depuis plusieurs jour sous ibuprofène à forte dose pour tenter de percevoir avec calme et sérénité le potentiel de ces deux options, finit par acquis de conscience la page de <em>man</em> et reste finalement en arrêt sur l&#8217;option <em><strong>-w</strong></em>. Cette option ne se contente plus de monter des tunnels unidirectionnels entre deux machines, elle met en place sur des machines *nix de part et d&#8217;autre des interfaces réseau virtuelles de type <em><strong>tun</strong></em>. Tout le trafic qu&#8217;il souhaite aura tout loisir de passer d&#8217;une machine à l&#8217;autre et <em>vice-versa</em>, pour peu qu&#8217;il ait mis en place des routes réseau adéquates. Un VPN directement utilisable en SSH, sans avoir à ouvrir de ports supplémentaires, ni à installer d&#8217;applications en plus, c&#8217;en est trop, ses nerfs lâchent.</p>
<h1>Quizzz</h1>
<p>Réponse au quizzz du billet précédent : screen réagit à une certaine séquence d&#8217;échappement et permet de changer le titre d&#8217;une fenêtre non-interactivement. Et d&#8217;autres termes : faites le bon echo, et screen changera le titre de la fenêtre.<br />
<code>printf "\ekTitre\e\\"</code><br />
ou<br />
<code>echo -n -e "\ekTitre\e\\"</code><br />
Si vous placez cette commande dans votre fichier de profile, le titre sera mis à votre fenêtre screen dès que vous vous connectez.  Reste des problèmes :</p>
<ul>
<li>si vous ne vous connectez pas en screen le printf / echo affichera des choses pas belles,</li>
<li>si dans le screen local (machine1) vous vous connectez à une autre machine (machine2) sur laquelle vous avez implémentez cette astuce, votre titre de screen (sur machine1) ne rechangera pas une fois que vous vous serez déconnecté de machine2.</li>
</ul>
<p>Une solution est de tester la variable TERM de la session, d&#8217;agir en conséquence, et de mettre la séquence (\ekTitre\e\\) dans le prompt.  Voici un exemple en bash à mettre dans votre .bashrc :</p>
<p><code>[ "$TERM" == "screen" ] &amp;&amp; ST="\ek`hostname -s`\e\\" export PS1="[\u@\h]\w$ST "</code></p>
<p>Vous trouverez plus d&#8217;informations dans la <em>man page</em> de screen, section TITLES.</p>
<h1>Conclusion</h1>
<p><strong>ssh</strong>, <strong>sudo</strong> et <strong>screen</strong>, au delà de tout autre outil système, rendent chaque jour d&#8217;immenses services aux administrateurs système, et leur font gagner en temps, en sécurité et en sérénité, à tel point qu&#8217;il nous semble délicat d&#8217;administrer efficacement des machines *nix sans eux.  Un grand pouvoir  impliquant de grandes responsabilités, ces facilités d&#8217;administration sous-entendent que vous compreniez ce que ces commandes font afin de ne pas laisser ouvert des failles (ou gouffres) de sécurité.  Si vous ne connaissiez pas ces trois petits outils, nous espérons vous avoir mis l&#8217;eau à la bouche (et que, comme nous, vous ne pourrez plus vous en passer). Si vous les connaissiez, ce qui est plus probable, nous espérons vous avoir appris quelques astuces.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=9935" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 1'>Les 3 S de l’administrateur UNIX, saison 1</a></li>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 2'>Les 3 S de l’administrateur UNIX, saison 2</a></li>
<li><a href='http://blog.octo.com/octo-recrute-admin-reseau/' rel='bookmark' title='OCTO recrute un(e) administrateur(trice) réseau, responsable help desk'>OCTO recrute un(e) administrateur(trice) réseau, responsable help desk</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les 3 S de l’administrateur UNIX, saison 2</title>
		<link>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=les-3-s-de-ladministrateur-unix-saison-2</link>
		<comments>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 07:17:00 +0000</pubDate>
		<dc:creator>Gabriel Guillon</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=9911</guid>
		<description><![CDATA[Nous avons vu dans l&#8217;article précédent deux outils bien pratique : ssh et sudo. L&#8217;un permet de chiffrer une connexion à une machine, le second permet d&#8217;exécuter une commande sous le nom d&#8217;un autre utilisateur. Nous avons laissé Bob dans un état détresse insoutenable : un coup de pelleteuse a coupé ses précieuses connexions au [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 3'>Les 3 S de l’administrateur UNIX, saison 3</a></li>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 1'>Les 3 S de l’administrateur UNIX, saison 1</a></li>
<li><a href='http://blog.octo.com/octo-recrute-admin-reseau/' rel='bookmark' title='OCTO recrute un(e) administrateur(trice) réseau, responsable help desk'>OCTO recrute un(e) administrateur(trice) réseau, responsable help desk</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fles-3-s-de-ladministrateur-unix-saison-2%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Les%203%20S%20de%20l%E2%80%99administrateur%20UNIX%2C%20saison%202%22%20%7D);"></div>
<p>Nous avons vu dans <a href="http://blog.octo.com/?p=9882">l&#8217;article précédent</a> deux outils bien pratique : <strong>ssh</strong> et <strong>sudo</strong>. L&#8217;un permet de chiffrer une connexion à une machine, le second permet d&#8217;exécuter une commande sous le nom d&#8217;un autre utilisateur.</p>
<p>Nous avons laissé Bob dans un état détresse insoutenable : un coup de pelleteuse a coupé ses précieuses connexions au serveur distant, lui faisant perdre 1h de compilation, sa vérification des mauvais secteurs sur un disque de 1Tio, son environnement calé aux petits oignons et sans doutes un miroir. Bob aurait pu éviter tout cela s&#8217;il avait connu le 3ème S de l&#8217;administrateur Unix.</p>
<p><span id="more-9911"></span>Extrêmement utile et pourtant si peu connu, <strong>screen</strong> permet de multiplexer plusieurs de sessions shell dans un seul terminal.</p>
<h1>S02E01 : Screen</h1>
<p>&laquo;&nbsp;Aha&nbsp;&raquo;, me faites-vous, &laquo;&nbsp;mais moi je lance plusieurs onglets dans mon gnome-terminal et j&#8217;ai la même chose&nbsp;&raquo;.</p>
<div id="attachment_10689" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.octo.com/wp-content/uploads/2010/04/dump01-1.png"><img class="size-medium wp-image-10689" title="dump01-1" src="http://blog.octo.com/wp-content/uploads/2010/04/dump01-1-300x224.png" alt="gnome-terminal" width="300" height="224" /></a><p class="wp-caption-text">Gnome-terminal (sous icewm). Remarquez que l&#39;onglet de gauche porte le nom du serveur local, tandis que celui de droite celui du serveur distant</p></div>
<p>Bien entendu, ce serait trop simple.</p>
<p>Revenons à Bob. Après ce coup de pelleteuse en plein cœur, Bob, rentre chez lui et réfléchit à un moyen de ne plus perdre heures de compilations et environnements. Il passe un coup de fil à un collègue, qui, parce qu&#8217;il n&#8217;a pas que ça à faire, lui répond sèchement &laquo;&nbsp;man screen&nbsp;&raquo;.</p>
<p>Une fois chez lui, Bob saute sur son ordi et tape &laquo;&nbsp;man screen&nbsp;&raquo;. D&#8217;abord perplexe, Bob lit l&#8217;immeeeennnnse man page de screen, fait quelques essais et s&#8217;exclame &laquo;&nbsp;Ah OUAIS, quand même !&nbsp;&raquo;. Il se connecte ni une ni deux depuis chez lui à son poste de travail, de là se connecte au serveur distant malade, lance sa compilation, la reconstruction des miroirs et le badblocks (retrouver les commandes avec les bons paramètres : 3 minutes), refabrique son environnement de test (retrouver les valeurs à mettre dans les variables : 15 minutes) et&#8230; Tue violemment son gnome-terminal, éteint sa machine et va se coucher (le sommeil, ça n&#8217;a pas de prix).</p>
<p>Quelle mouche a donc piqué Bob ? Pourquoi a-t-il éteint sa machine alors que les tâches distantes n&#8217;étaient pas terminées ? Aurait-il perdu l&#8217;esprit au bénéfice, certes, de son sommeil, mais tout de même ?</p>
<div id="attachment_9922" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.octo.com/wp-content/uploads/2010/03/Capture-d’écran-2010-03-09-à-22.08.43.png"><img class="size-thumbnail wp-image-9922" title="screen" src="http://blog.octo.com/wp-content/uploads/2010/03/Capture-d’écran-2010-03-09-à-22.08.43-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Un screen sur une machine (jhary), duquel part deux connexions à deux serveurs (rhynn et corum)</p></div>
<p>Screen, donc, est un multiplexeur de sessions : vous vous connectez à une machine distante, vous tapez screen, et vous avez une nouvelle session. De cette session vous pouvez en créer d&#8217;autres (Ctrl+a c), beaucoup d&#8217;autres, <em>et ce sans avoir à vous connecter à nouveau à la machine</em>. Vous pouvez passer rapidement de l&#8217;une à l&#8217;autre (Ctrl+a &lt;espace&gt;), les renommer (Ctrl+a A), remonter dans l&#8217;historique (Ctrl+a &lt;escape&gt;), et bien sûr y lancer des commandes.</p>
<p>Jusqu&#8217;ici, rien de mieux que gnome-terminal.</p>
<p>Il se trouve que si la connexion au serveur distant vient à être coupée, le screen distant, lui, <em>vit toujours</em>. Et vous pouvez vous (re)connecter plus tard à la machine, éventuellement d&#8217;un autre poste, et reprendre votre screen (screen -r). Vous êtes ainsi à l&#8217;abri d&#8217;une coupure réseau (mais pas d&#8217;une extinction de serveur : si ce dernier est éteint, votre screen meurt). Étant à l&#8217;abri lui aussi, et sachant qu&#8217;il pourrait regarder le résultat le lendemain, Bob a pu aller se coucher sans avoir à attendre la fin de la compilation.</p>
<p>Un petit dessin permet de vite appréhender le concept.</p>
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.octo.com/wp-content/uploads/2010/03/avant.png"><img title="avant" src="http://blog.octo.com/wp-content/uploads/2010/03/avant-300x185.png" alt="" width="300" height="185" /></a><p class="wp-caption-text">Connexions classique à un serveur distant. Une connexion =&gt; un shell</p></div>
<div id="attachment_10091" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.octo.com/wp-content/uploads/2010/03/apres.png"><img class="size-medium wp-image-10091 " title="apres" src="http://blog.octo.com/wp-content/uploads/2010/03/apres-300x171.png" alt="" width="300" height="171" /></a><p class="wp-caption-text">Connexion à un serveur distant avec screen . Une connexion =&gt; plusieurs shell</p></div>
<p>Voici un arbre de processus pour essayer de comprendre ce qui se passe :</p>
<pre>root   ?        Ss   Feb28   0:00 /usr/sbin/sshd
root   ?        Ss   09:50   0:00  \_ sshd: arno [priv]
arno   ?        S    09:50   0:00      \_ sshd: arno@pts/1
arno   pts/1    Ss   09:50   0:00          \_ -bash
arno   pts/1    S+   09:51   0:00              \_ screen
root   ?        Ss   09:51   0:00                  \_ SCREEN
arno   pts/2    Ss   09:51   0:00                      \_ bash
root   pts/2    S+   09:51   0:00                      |   \_ tail -F /var/log/everything.log
arno   pts/4    Ss   09:51   0:00                      \_ bash
root   pts/4    S+   09:51   0:00                      |   \_ vim /etc/ssh/sshd_config
arno   pts/5    Ss   09:51   0:00                      \_ bash
arno   pts/5    R+   09:51   0:00                          \_ ps afxu</pre>
<p>La session SSH est dans le tty pts/1 et lance la partie client (<em>screen</em> en minuscules). Si la connexion ssh est coupée, c&#8217;est ce client qui va finir prématurément sa vie, mais la partie pur multiplexage (<em>SCREEN</em> en majuscules) n&#8217;est rattaché à aucun tty (fonctionne en mode démon) et va donc résister aux pannes réseau. C&#8217;est donc ce <em>SCREEN</em> qui va lancer d&#8217;autres commandes et shell (bash dans le cas présent, avec des tty différents) dans lesquelles on va alors pouvoir jongler avec sudo au besoin. Dans cet exemple, le tail -f et le vim sont lancés avec les droits de root, alors que le ps utilise un compte standard.</p>
<h1>S02E02 : screen, encore</h1>
<p>Le lendemain, fier, Bob se reconnecte à son serveur, reprend son screen et appelle un collègue.</p>
<p>Il lui fait part de sa découverte de la nuit. Son collègue est ébahit et teste screen sur le même serveur que Bob.</p>
<p>Vous pouvez avoir autant de screen en mémoire que le permet cette dernière, vous pouvez nommer les screen afin de ne pas prendre celui d&#8217;un collègue (screen -S &lt;nom&gt;, screen -rS &lt;nom&gt;), vous pouvez les imbriquer (d&#8217;un serveur vous connecter à un autre et y lancer screen, dans lequel vous pourrez lancer des commandes) (Ctrl+a a &lt;commande pour le screen imbriqué&gt;).</p>
<p>Après avoir mitonné un élégant .screenrc (fichier de configuration de screen propre à un utilisateur), Bob décide d&#8217;assener le coup fatal à son collègue : il lui dicte une commande à taper (screen -r bob/27518), et Bob et son collègue <em>se retrouvent dans le même screen.</em> Un screen, deux claviers, des milliers de possibilités. Tout ce que tape l&#8217;un, l&#8217;autre le voit et peux le corriger. Il y a évidemment possibilité de se marcher sur les doigts (l&#8217;un tape un caractère, l&#8217;autre tape &lt;del&gt;) mais surtout de montrer à l&#8217;autre ce que vous êtes en train de faire sans avoir à l&#8217;expliquer au téléphone, et ce même si vous êtes à 800km l&#8217;un de l&#8217;autre&#8230;</p>
<p>Raffinement suprême : vous pouvez ainsi taper un mot de passe pour votre collègue sans que celui-ci ne le voit &#8230;</p>
<p>Ce qu&#8217;a fait Bob est activer le mode multi-utilisateur de screen (&#8216;multiuser on&#8217;, dans son .screenrc) et autoriser son collègue à utiliser le même screen que lui (Ctrl+a : acladd &lt;collègue&gt;).</p>
<p>Fort de ces commandes, Bob décide de faire de la télégestion : il a un script (qu&#8217;il lance dans un screen pendant qu&#8217;il regarde les logs dans un autre) qui se connecte à ses serveurs pour y faire certaines choses (via sudo, notamment). Le problème est que son script doit se connecter 3 fois à chaque serveur. Bob, fainéant puisque Perliste, ne voit pas pourquoi il devrait le taper 3 fois son mot de passe alors qu&#8217;il se connecte à la même machine ; il voudrait ne le taper qu&#8217;une seule fois, voire pas du tout, mais sans toutefois laisser une clé ou un mot de passe en clair quelque part.</p>
<p>Nous verrons dans le dernier article comment aider Bob et lui indiquerons en prime comment faire passer tous les animaux de la savane par un trou de souris.</p>
<h1>Conclusion</h1>
<p>Screen est un multiplexeur de terminal. Il vous permet, avec un seul shell, d&#8217;avoir plusieurs sessions. &#8216;screen&#8217; est la première commande que je tape en arrivant sur n&#8217;importe quel serveur Unix. Malheureusement elle est trop rarement installée, ce qui est extrêmement dommage vu l&#8217;utilité qu&#8217;elle a et le temps qu&#8217;elle fait gagner (ou plutôt : évite de faire perdre).</p>
<h1>Quizzz</h1>
<p>Plutôt qu&#8217;un bête bash (ou ksh) sauriez-vous faire en sorte que le nom du shell dans votre screen soit le nom du serveur auquel vous vous connectez ? (oui, comme gnome-terminal)</p>
<p>En ce qui concerne la quizzz du billet précédent :</p>
<p>Bravo à mangouste06 ! En effet vim est un outil qui a la fâcheuse fonction de pouvoir lancer des commandes externes (et donc par exemple un shell) avec la commande &laquo;&nbsp;!&nbsp;&raquo;. Une fois un vim démarré, il suffit de taper &laquo;&nbsp;!bash&nbsp;&raquo;. Une première étape consiste à utiliser rvim plutôt que vim qui interdit l&#8217;exécution de commandes externes. Malheureusement, il n&#8217;empêchera pas l&#8217;ouverture d&#8217;un autre fichier, comme un script lancé au redémarrage, ce qui laisse une grande place à l&#8217;imagination. Pour ce genre de contrôle d&#8217;accès, préférer une gestion serrée des droits sur le système de fichiers, à base de groupes par exemple, ou des solutions à base de SELinux/grsecurity.</p>
<p>C&#8217;est pour cette raison qu&#8217;en paramétrant sudo il vaut mieux tout interdire et n&#8217;autoriser que certaines commandes plutôt que tout autoriser et interdire les commandes dangereuses.</p>
<p>Un tips pour la route, en ce qui concerne sudo : avoir un shell sous le nom d&#8217;un utilisateur qui n&#8217;est pas censé pouvoir en avoir (nobody, pour l&#8217;exemple) : sudo -u nobody bash.</p>
<p>Et pour finir cet article, un exemple de .screenrc (celui d&#8217;Arnaud, un des auteurs de l&#8217;article) :</p>
<pre>shell bash
caption always "%{=b}%?%F%:%45=%n*%f %t%?%?%F%{r}%:%{s kk}%?%H%?%F%{-}%? %L=%-Lw%45L&gt;%?%F%{g}%?%n*%f %t%?%F%{-}%?%+Lw%-17= %?%F%{y}%Y-%m-%d %c"
defscrollback 2000
scrollback 2000</pre>
<p>Ce qu&#8217;il donne dans la vraie vie :</p>
<div id="attachment_9941" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.octo.com/wp-content/uploads/2010/03/screen-amz.png"><img class="size-medium wp-image-9941 " title="screen-amz" src="http://blog.octo.com/wp-content/uploads/2010/03/screen-amz-300x193.png" alt="" width="300" height="193" /></a><p class="wp-caption-text">Voici l&#39;exemple d&#39;une sesssion screen. On se retrouve dans un terminal classique. Seule la barre d&#39;information en bas trahit de la présence de screen. Les onglets (ici au nombre de trois) ont été configurés pour avoir des titres explicites, l&#39;onglet actif est en vert. en rouge à gauche, la machine sur laquelle on se trouve, ce qui devient vite impératif quand on est en train de jongler entre les machines et les imbrications de screen.</p></div>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=9911" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 3'>Les 3 S de l’administrateur UNIX, saison 3</a></li>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 1'>Les 3 S de l’administrateur UNIX, saison 1</a></li>
<li><a href='http://blog.octo.com/octo-recrute-admin-reseau/' rel='bookmark' title='OCTO recrute un(e) administrateur(trice) réseau, responsable help desk'>OCTO recrute un(e) administrateur(trice) réseau, responsable help desk</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Les 3 S de l’administrateur UNIX, saison 1</title>
		<link>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=les-3-s-de-ladministrateur-unix-saison-1</link>
		<comments>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 07:00:04 +0000</pubDate>
		<dc:creator>Arnaud Mazin</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=9882</guid>
		<description><![CDATA[Ce billet est le premier d&#8217;une série de trois articles à propos d&#8217;outils que notre expérience nous pousse à considérer in-dis-pen-sable à tout administrateur *nix : S*, S* et S* (oui, nous gardons le suspens) Généralement, les gens connaissent le premier. Un peu plus rarement le second. Le troisième, quant à lui, est généralement mal [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 2'>Les 3 S de l’administrateur UNIX, saison 2</a></li>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 3'>Les 3 S de l’administrateur UNIX, saison 3</a></li>
<li><a href='http://blog.octo.com/octo-recrute-admin-reseau/' rel='bookmark' title='OCTO recrute un(e) administrateur(trice) réseau, responsable help desk'>OCTO recrute un(e) administrateur(trice) réseau, responsable help desk</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fles-3-s-de-ladministrateur-unix-saison-1%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Les%203%20S%20de%20l%E2%80%99administrateur%20UNIX%2C%20saison%201%22%20%7D);"></div>
<p>Ce billet est le premier d&#8217;une série de trois articles à propos d&#8217;outils que notre expérience nous pousse à considérer in-dis-pen-sable à tout administrateur *nix : S*, S* et S* (oui, nous gardons le suspens)</p>
<p>Généralement, les gens connaissent le premier. Un peu plus rarement le second. Le troisième, quant à lui, est généralement mal connu.</p>
<p>Loin de révolutionner les habitudes (quoique &#8230; ), voici une rétrospective des services rendus par ces trois outils et leurs cas  d&#8217;utilisation les plus courants.</p>
<p><span id="more-9882"></span></p>
<p>Voyons un cas classique d&#8217;utilisation des deux premiers outils. Pour ce faire, glissons-nous derrière notre ami Bob.</p>
<p>Bob investigue sur un incident de production qui vient d&#8217;arriver sur un serveur dans le centre de production situé sur un autre site. Il va devoir comparer différents fichiers de configuration, suivre des journaux en temps réel, arrêter/redémarrer des démons, peut-être faire une compilation, remonter un miroir RAID, bref la routine de l&#8217;admin.</p>
<p>Avant, Bob utilisait telnet. S&#8217;étant fait tiré les oreilles par son fils qui lui a démontré par A + WireShark que le mot de passe passait en clair, lui et ses collègues utilisent maintenant <strong>ssh</strong>.</p>
<h1>S01E01 : Ssh</h1>
<p>Ssh permet de se connecter à une machine en chiffrant la communication. Il est possible de s&#8217;authentifier à cette machine en login/mot de passe, clé publique/privée, ou d&#8217;autres méthodes plus ou moins fortes. Il peut faire bien bien plus que vous connecter à une machine mais pour l&#8217;instant cantonnons-nous à cette fonction : ssh permet de se connecter avec login/mot de passe.</p>
<p>Ssh est composé d&#8217;une partie serveur et d&#8217;une partie cliente. La partie cliente le plus connue sous *nix (et MacOS) est OpenSSH, implémentation du protocole ssh par l&#8217;équipe d&#8217;OpenBSD. Le client le plus connu sur Windows est PuTTY.</p>
<p>Bob se connecte donc en ssh sur le serveur. Avant il se connectait avec le compte root, maintenant aussi. Du moins essai-t-il parce qu&#8217;aujourd&#8217;hui ça ne fonctionne pas.</p>
<p>Il peste quelques minutes puis se rappel un mail envoyé par un des ses collègues. Il le retrouve et ce mail dit en substance que par mesure de sécurité le login en tant que root est désactivé (sage décision, soit dit en passant, car un éventuel attaquant devra ainsi deviner, pour se connecter, un login en plus d&#8217;un mot de passe, et même ainsi l&#8217;attaquant n&#8217;aura qu&#8217;un compte utilisateur standard) et qu&#8217;il faut maintenant se connecter avec son compte standard, et de préférence nominatif.</p>
<p>Bob se connecte donc avec son compte standard sur le serveur de destination et &#8230; s&#8217;aperçoit qu&#8217;il ne peut pas faire les tâches qu&#8217;il voulait (redémarrer des services, scruter les logs, &#8230; ) parce qu&#8217;il n&#8217;est pas root.</p>
<p>Un tantinet énervé par cette perte de temps, il appelle son collègue, lui hurle dessus pour lui demander comment faire pour se connecter en root. Pour toute réponse son collègue lui dit &laquo;&nbsp;man <strong>sudo</strong>&nbsp;&raquo; et raccroche.</p>
<h1>S01E02 : Sudo</h1>
<p>Ne connaissant pas sudo, il tente benoîtement &#8216;su&#8217;, qui ne fonctionne plus. &laquo;&nbsp;§$@&amp;!!! Le mot de passe root a été changé !&nbsp;&raquo; Il rappelle son collègue et atterrit directement sur son répondeur (il perçoit un rire sardonique mais peut-être n&#8217;est-ce que dans son imagination &#8230; )</p>
<p>Encore plus énervé, il se résigne à taper &#8216;man sudo&#8217;. Au fur et à mesure de sa lecture, les sourcils froncés de Bob s&#8217;écartent, se lèvent, et un sourire se dessine sur ses lèvres. A la fin de la man page il s&#8217;exclame &laquo;&nbsp;Ah ouais quand même !&nbsp;&raquo;, et exécute ses tâches d&#8217;administration &#8230; sans jamais devoir devenir root.</p>
<div id="attachment_9954" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.octo.com/wp-content/uploads/2010/03/sudo-1.png"><img class="size-medium wp-image-9954" title="sudo-1" src="http://blog.octo.com/wp-content/uploads/2010/03/sudo-1-300x72.png" alt="" width="300" height="72" /></a><p class="wp-caption-text">Exemple d&#39;utilisation de  sudo. Ici, la commande est autorisée et sudo est configuré, soit pour ne  pas demander le mot de passe pour cette commande et/ou cet utilisateur,  soit l&#39;utilisateur a déjà fourni son propre mot de passe il y a moins  de 5 minutes.</p></div>
<p>Comment ? Sudo permet d&#8217;exécuter une commande particulière sous un nom d&#8217;utilisateur particulier (sudo -u &lt;utilisateur&gt; &lt;commande&gt; ) (par défaut, cet utilisateur est root, et le mot de passe <em>de l&#8217;utilisateur qui lance sudo</em> est demandé avant l&#8217;exécution de la commande). Sudo inscrit dans les journaux système quelle commande a été exécutée par qui, et quand. Sudo pousse le raffinement jusqu&#8217;à permettre de préciser quelle commande avec quels arguments peut être utilisée par quelle personne en tant que quelle personne sur quelle machine. Il peut aussi ne pas être du tout raffiné et permettre à tout le monde d&#8217;exécuter n&#8217;importe quelle commande en tant que root et sans avoir à fournir de mot de passe.</p>
<p>Le collègue de Bob n&#8217;a fait que modifier le configuration de sudo pour que chacun puisse faire les tâches qui lui incombe, <em>et uniquement celles-ci</em>, et a enlevé le mot de passe de l&#8217;utilisateur root pour que personne ne puisse se connecter avec cet utilisateur, en console ou à distance (ce qui est le cas par défaut sur Ubuntu, par exemple). Il s&#8217;est également assuré que les ouvertures de session ssh directement sous root soient formellement proscrites en allant déclarer la ligne <em>PermitRootLogin no</em> dans le <em>/etc/ssh/sshd_config</em> et en redémarrant sshd. Le fichier de configuration par défaut de sudo (/etc/sudoers, a éditer <em>impérativement</em> avec visudo) propose en général des exemple de configuration très pratiques pour mettre le pied à l&#8217;étrier.</p>
<p>La journée passe, et une pelleteuse maladroite tranche le lien qui relie Bob au serveur distant (l&#8217;équipe réseau assure la main sur le cœur que pour cette fois ils n&#8217;y sont pour rien). C&#8217;est dommage : le problème sur le serveur était sérieux et Bob avait plusieurs connexions avec ce serveur : une dans laquelle tournait une longue compilation, une autre dans laquelle toutes les variables environnement étaient définis pour tester l&#8217;appli avec LA session qui la faisait crasher, une dans laquelle il y avait un badblocks qui tournait à la recherche de secteurs défectueux, et une dernière dans laquelle un RAID 1 se refaisait (une beauté dans) ses miroirs.</p>
<h1>Conclusion</h1>
<p><strong>Ssh</strong>, dans son utilisation de base, permet de se connecter à une machine en chiffrant la communication, tandis que <strong>sudo</strong> permet d&#8217;exécuter une commande avec le compte d&#8217;un autre utilisateur. L&#8217;utilisation de ces deux commandes permet de sécuriser les échanges de données, et a fortiori les échanges de mot de passe, et permet une grande traçabilité des actions exécutées sur une machine.</p>
<p>Cette première étape permet à Bob d&#8217;administrer ces serveurs UNIX de façon plus sécurisée et avec une meilleure traçabilité, mais nous verrons dans la prochaine saison comment aider Bob, grâce au troisième <strong>S</strong>, à ne plus être gêné par les coups de pelleteuse et accessoirement par des problèmes de connexions réseau qui bagottent.</p>
<h1>Le Quizzz</h1>
<p>D&#8217;humeur taquine (qui a dit &laquo;&nbsp;vengeresse&nbsp;&raquo; ?) Bob, têtu, cherche à lancer un vrai shell en tant que root. Il sait que via sudo il est autorisé, en tant que root, à démarrer Apache (en exécutant la commande apachectl ou apache2ctl) et à éditer des fichiers de configuration (la commande vim est permise). Il a déjà essayé <em>sudo su -</em> ou<em> sudo bash</em> et son administrateur ne lui a pas permis ces commandes. Après quelques recherches, il parvient tout de même à passer root. Sauriez-vous comment a-t-il pu faire, en supposant qu&#8217;il n&#8217;existe pas de faille de sécurité permettant une escalade de privilèges ?</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=9882" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-2/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 2'>Les 3 S de l’administrateur UNIX, saison 2</a></li>
<li><a href='http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-3/' rel='bookmark' title='Les 3 S de l’administrateur UNIX, saison 3'>Les 3 S de l’administrateur UNIX, saison 3</a></li>
<li><a href='http://blog.octo.com/octo-recrute-admin-reseau/' rel='bookmark' title='OCTO recrute un(e) administrateur(trice) réseau, responsable help desk'>OCTO recrute un(e) administrateur(trice) réseau, responsable help desk</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/les-3-s-de-ladministrateur-unix-saison-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PowerShell : le couteau suisse des administrateurs Windows ?</title>
		<link>http://blog.octo.com/powershell-le-couteau-suisse-des-administrateurs-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=powershell-le-couteau-suisse-des-administrateurs-windows</link>
		<comments>http://blog.octo.com/powershell-le-couteau-suisse-des-administrateurs-windows/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 14:46:45 +0000</pubDate>
		<dc:creator>Arnaud Mazin</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=9149</guid>
		<description><![CDATA[Contexte On avait jusqu&#8217;alors pour habitude de séparer le monde des administrateurs système en deux : celui du clic à la souris et celui de la ligne de commande. Les mondes Microsoft© et UNIX© s&#8217;opposaient fondamentalement. Les fondements de ces deux approches dans l&#8217;administration d&#8217;un serveur repose à la base sur une volonté de répondre à [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/mes-bonnes-pratiques-en-powershell/' rel='bookmark' title='Mes bonnes pratiques en PowerShell v2'>Mes bonnes pratiques en PowerShell v2</a></li>
<li><a href='http://blog.octo.com/n%e2%80%99oublions-pas-windows-mobile/' rel='bookmark' title='N’oublions pas Windows Mobile'>N’oublions pas Windows Mobile</a></li>
<li><a href='http://blog.octo.com/la-strategie-windows-phone-7/' rel='bookmark' title='La stratégie Windows Phone 7'>La stratégie Windows Phone 7</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fpowershell-le-couteau-suisse-des-administrateurs-windows%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22PowerShell%20%3A%20le%20couteau%20suisse%20des%20administrateurs%20Windows%20%3F%22%20%7D);"></div>
<h2>Contexte</h2>
<p>On avait jusqu&#8217;alors pour habitude de séparer le monde des administrateurs système en deux : celui du <strong>clic</strong> à la souris et celui de la <strong>ligne de commande</strong>. Les mondes Microsoft© et UNIX© s&#8217;opposaient fondamentalement.</p>
<p>Les fondements de ces deux approches dans l&#8217;administration d&#8217;un serveur repose à la base sur une volonté de répondre à des objectifs différents :</p>
<p><strong>clic</strong> : je veux une interface visuelle et intelligible pour toutes les opérations, surtout si je ne sais pas trop ce que je dois faire.</p>
<p><strong>ligne de commande</strong> : je veux des choses très unitaires que je puisse combiner et ainsi automatiser dans tous les sens.</p>
<p><span id="more-9149"></span></p>
<p>Malheur à l&#8217;administrateur UNIX© qui souhaitait des belles IHMs. À moins de développer des solutions Web ou de s&#8217;appuyer systématiquement sur des consoles éditeurs aussi gourmandes que surchargées de fonctions, il est difficile de proposer des écrans d&#8217;administration intuitif. En revanche, lorsqu&#8217;il s&#8217;agit d&#8217;automatiser des tâches, notre cher sysadmin (ou root dans le cas présent) dispose d&#8217;un large éventail de possibilités. Plusieurs décennies ont permis d&#8217;affiner des outils aux noms aussi légendaires que courts : cat, sed, awk, grep, cut, tr, ls, sh et bien entendu les deux solutions miracles à tous les problèmes que sont vim et Perl. L&#8217;usage du pipe «|» est un exercice de gymnastique classique lorsqu&#8217;il s&#8217;agit de chainer plusieurs commandes à la suite.</p>
<p>L&#8217;administrateur Windowsien est généralement plus malheureux lorsqu&#8217;il va chercher à trouver la même puissance et la même flexibilité. Il est soit contraint de se battre avec VBscript, soit obligé de se lancer dans un vrai développement .Net.</p>
<p>Il y a quelques années, une tentative de la part de Redmond est venue semer la zizanie dans cette guerre de tranchée depuis longtemps enlisée.</p>
<p>Son objectif est de proposer des serveurs plus sécurisés et qui s&#8217;administrent et s&#8217;utilisent un peu comme des serveurs UNIX. Deux briques sont ainsi présentées : un système d&#8217;exploitation sans interface graphique (<strong>Windows Server Core</strong>), et un shell avancé permettant de pratiquer toutes les opérations d&#8217;administration possibles et imaginables (<strong>PowerShell</strong>).</p>
<p>PowerShell se positionne donc comme une brique très stratégique et pleine de promesses. Voyons plus en détail ce que l&#8217;on trouve sous le capot de PowerShell et s&#8217;il est apte à tenir ces promesses.</p>
<p>Même si la version 2.0 est désormais disponible, je propose ici un retour d&#8217;expérience sur la version 1.0 sur laquelle nous disposons désormais de longs mois d&#8217;utilisation, de codage et de déploiement dans des conditions réelles de production.</p>
<p>Livré en standard dans les versions serveur du système d&#8217;exploitation aux fenêtres (il est un pré-requis à bon nombre de briques), vous avez également la possibilité de le déployer sur des postes clients équipés d&#8217;XP/Vista/7 sous forme d&#8217;un auto-installeur. Les sites de recueil de tutoriaux, d&#8217;exemples et autres bonnes astuces fleurissent sur la toile.</p>
<h2>Description</h2>
<h3>Le langage</h3>
<p>Pour décrire cet outil, disons simplement que c&#8217;est une volonté de reprendre ce qui se fait de mieux dans les langages de scripts actuels. On y retrouve donc des bribes de <strong>Perl</strong>, <strong>Python</strong>, <strong>sh</strong>, <strong>Ruby</strong>. La liste pourrait être longue.</p>
<p>Il implémente le sacrosaint pipe «|» dans le but de chainer des commandes. La subtilité réside ici dans le fait que ce sont bien des objets qui sont transmis au travers du tuyau et non de simples chaines de caractère comme dans un Shell ou une session DOS classique. Il est du coup possible de faire des manipulations relativement poussées, d&#8217;autant plus que beaucoup de commande acceptent des données soit au travers de paramètres, soit au travers de leur entrée (et donc via le pipe).</p>
<p>Le nom des commandes est généralement  composé de deux termes liés  par un tiret «-» : <strong>Action-Objet</strong>, ou  <em>Action</em> désigne  généralement un verbe et <em>Objet</em> définit le  type d&#8217;objet sur  lequel l&#8217;action va s&#8217;appliquer. On arrive rapidement à  devoir taper des  commandes relativement longues.</p>
<p>La mise en place d&#8217;alias permet d&#8217;utiliser des fonctions via   des noms courts. Et là, que l&#8217;on ne s&#8217;y trompe pas, on obtient un   mélange de DOS/sh des plus hétéroclites : <em>cat</em>, <em>cls</em>/<em>clear</em>,   <em>ls</em>, <em>ps</em>, <em>kill</em>, <em>rm</em>/<em>del</em>, <em>rmdir</em>,  <em>sleep</em>,  <em>sort</em>, <em>man</em> complétés par un ensemble de  nouvelles  fonctions propres à PowerShell.</p>
<h3>La plateforme</h3>
<p>Comme la plupart des langages de script, on a affaire à un langage interprété, ce qui prémunie des compilations explicites et permet des interprétations à la volée de code généré dynamiquement.</p>
<p>Un des points notable est que le langage est interprété dans la <strong>CLR</strong> (moteur d&#8217;exécution .Net, qui pourrait être plus ou moins comparé à la JVM), ce qui donne accès, presque mécaniquement à tout le fond de développement du monde .Net. Il est donc aisé de s&#8217;appuyer sur des briques classiques comme Log4Net pour gérer ses journaux, ou même de développer ses propres fonctions dans des langages .Net natifs (C# par exemple).</p>
<p>Pour illustrer cet atout, il est par exemple possible de produire en C# une HashTable d&#8217;objets .Net et la récupérer directement dans du code PS pour poursuivre le traitement, sans devoir passer par la case conversion/transformation.</p>
<p>En terme d&#8217;accès natifs, citons bien sûr les systèmes de fichiers, mais également la base de registres, les annuaires LDAP, les requêtes WMI, les objets COM.</p>
<p>Pour démarrer un PowerShell, soit on ouvre directement une console PowerShell, soit on lance d&#8217;abord une console DOS (<em>cmd</em>) dans laquelle on empile l&#8217;interpréteur PowerShell, comme on le ferait avec des Shell UNIX.</p>
<h3>Les bibliothèques</h3>
<p>Comme dit précédemment, il est possible d&#8217;utiliser n&#8217;importe quelle bibliothèque .Net préalablement produite dans n&#8217;importe quel langage de la suite .Net. Mais c&#8217;est dans l&#8217;intention que se trouve la nouveauté dans les bibliothèques proposées.</p>
<p>Un effort a été massivement consenti puisque les grosses briques d&#8217;infrastructure de MS fournissent systématiquement des extensions (appelées <strong>Snapins</strong>) pour PowerShell : Exchange, ActiveDirectory (<strong>Quest</strong> fournit d&#8217;ailleurs une bibliothèque très pratique à utiliser), IIS, SQL Server. Désormais, pour tout ce qui est faisable par une interface Graphique, une <strong>CommandLet</strong> (<strong>cmdlet</strong>) existe pour faire la même chose en ligne de commande ou par script.</p>
<p>On peut même aller plus loin en précisant que certaines fonctions avancées ne sont disponibles qu&#8217;en ligne de commande. On se retrouve donc dans un modèle qui se rapproche étonnement de celui d&#8217;UNIX.</p>
<p>Grande lacune de la version 1.0, citons le manque de méthodes d&#8217;accès à des interpréteurs PS de manière distante. On a toujours la possibilité de venir encapsuler des PS au travers de SSH/Cygwin/bash, au risque de se retrouver assez vite face à une situation des plus scabreuses en terme de gestion des droits, des interpréteurs, des environnements.</p>
<h2>Quelques exemples</h2>
<p>Voici quelques exemples de choses faisables. Je me place ici dans la position d&#8217;un UNIXien qui cherche à retrouver ses petits.</p>
<p>Commençons par le fameux «<a title="RTFM" href="http://en.wikipedia.org/wiki/RTFM">RTFM</a>». La commande <strong>Get-Help</strong> (ou get-help, car le langage n&#8217;est pas sensible à la casse) associée à n&#8217;importe quelle autre commande retournera la page d&#8217;aide. <strong>Get-Help Get-Help</strong> vous retournera un équivalent du <strong>man man</strong>. On retrouve dans les pages d&#8217;aide des sections comme <em>NAME</em>,<em> SYNOPSIS</em>, <em>SYNTAX</em>,<em> DETAILED DESCRIPTION</em>,<em> RELATED LINKS</em>,<em> REMARKS</em>.</p>
<p>Ensuite, on va pouvoir passer à la consultation des alias en place pour découvrir quel est le nom de la vraie commande qui se cache derrière un nom plus court ou plus <em>UNIX-aware</em>.</p>
<p>PS C:\Temp&gt; alias kill</p>
<pre>CommandType     Name       Definition
-----------     ----       ----------
Alias           kill       Stop-Process</pre>
<p>On le voit le formatage nous produit une sortie sous forme d&#8217;un tableau, ce qui laisse à penser que l&#8217;on a au moins 3 propriétés à l&#8217;objet retourné.</p>
<p>Passons à l&#8217;étape suivante avec l&#8217;utilisation du pipe qui va nous permettre d&#8217;appliquer ici un filtre.</p>
<pre>PS C:\Temp&gt; Get-Process | where { $_.ProcessName -eq "Powershell"}

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    530      44    80372       3884   633    47,19   7748 powershell
    730      51   240740     255976   658   400,84  40756 powershell</pre>
<p>Les puristes crieront que cette opération peut-être plus simplement écrite sous la forme <em>ps -name PowerShell</em>, mais l&#8217;objectif ici est d&#8217;introduire les notions de <em>where</em> et la variable automatique <em>$_</em>, qui ne surprendra aucun Perlist digne de ce nom.</p>
<p>Pour accéder au journal d&#8217;événements, là où un root ferait un <em>tail -20 /var/log/syslog</em>, un Administrator serait plutôt tenté de lancer la commande suivante :</p>
<pre>Get-EventLog -logname application | select -last 20</pre>
<p>Une fois le principe compris, nous allons pouvoir faire tourner des commandes directement utiles pour un administrateur.</p>
<pre>get-MailboxStatistics | `
   where {"IssueWarning","ProhibitSend","MailboxDisabled" -contains $_.StorageLimitStatus} | `
   format-Table DisplayName,TotalItemSize</pre>
<p>Dans cette commande, qui doit être exécutée sur un serveur Exchange, nous allons pouvoir collecter la liste des Boites aux lettres qui sont en dépassement de quota.</p>
<p>Voyons comment supprimer tous les contacts d&#8217;une organisation Exchange en une passe :</p>
<pre>Get-MailContact -ResultSize Unlimited | Remove-MailContact -Confirm:$False</pre>
<p>Ça y est, nous avons accès à des commandes dangereuses, puissantes, à donner des sueurs froides à tout responsable de production, le bonheur quoi.</p>
<p>Regardons plus en détail le langage en tant que tel. Rien de bien perturbant si ce n&#8217;est que l&#8217;on est souvent confronté à plusieurs approches pour effectuer une même opération. Exemple ici avec une simple somme des valeurs d&#8217;une liste.</p>
<pre><strong>$myList</strong> = <strong><span style="color: #000080;">$(</span></strong><span style="color: #ff9900;">8</span>, <span style="color: #ff9900;">2</span>, <span style="color: #ff9900;">5</span>, <span style="color: #ff9900;">4</span>, <span style="color: #ff9900;">10</span>, <span style="color: #ff9900;">9</span>, <span style="color: #ff9900;">34</span>, <span style="color: #ff9900;">244</span><strong><span style="color: #000080;">)</span></strong>
<strong>$sum</strong> = <span style="color: #ff9900;">0</span>
<strong><span style="color: #0000ff;">for</span></strong> <strong><span style="color: #000080;">(</span>$i</strong> = <span style="color: #ff9900;">0</span>; <strong>$i</strong> -lt <strong>$myList</strong>.length; <strong>$i</strong>++<strong><span style="color: #000080;">)</span></strong>
<strong><span style="color: #000080;">{</span></strong>
<span style="white-space: pre;">	</span><strong>$sum</strong> += <strong>$myList<span style="color: #000080;">[</span>$i<span style="color: #000080;">]</span></strong>
<strong><span style="color: #000080;">}</span></strong></pre>
<div id="_mcePaste">On préférera bien entendu une formule moins propice aux erreurs comme :</div>
<pre><strong>$sum</strong> = <span style="color: #ff9900;">0</span>
<span style="color: #ff9900;"><span style="color: #000000;"><strong><span style="color: #0000ff;">foreach</span></strong> <span style="color: #000080;"><strong>(</strong></span><strong>$i</strong> <strong><span style="color: #0000ff;">in</span></strong> <strong>$myList<span style="color: #000080;">)</span></strong></span></span>
<strong><span style="color: #000080;">{</span></strong>
<strong> </strong><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><span style="white-space: pre;">	</span><strong>$sum</strong> += <strong>$i</strong></span>
<span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><strong><span style="color: #000080;">}</span></strong></span></pre>
<div id="_mcePaste">Et pour les plus violents (attention à la lisibilité) :</div>
<pre><strong>$sum</strong> = <span style="color: #ff9900;">0
<span style="color: #000000;"><strong>$myList</strong> | <span style="color: #000080;">%</span> <strong><span style="color: #000080;">{</span></strong> <strong>$sum</strong> += <strong>$_</strong> <strong><span style="color: #000080;">}</span></strong></span></span></pre>
<p>Dernier petit exemple pour montrer les notations des fonctions, listes, dictionnaires et quelques-unes de leurs manipulations, sans autre intérêt que celui de la démonstration.</p>
<pre><strong><span style="color: #0000ff;">function</span></strong> TweakMyData<strong><span style="color: #000080;">([</span></strong>hashtable<strong><span style="color: #000080;">]</span>$aDict</strong>, <strong><span style="color: #000080;">[</span></strong>array<strong><span style="color: #000080;">]</span>$aList</strong>, <strong><span style="color: #000080;">[</span></strong>int<strong><span style="color: #000080;">]</span>$aValue<span style="color: #000080;">)</span></strong>
<strong><span style="color: #000080;">{</span></strong>
<span style="white-space: pre;">	</span><strong>$aList</strong> | <span style="color: #000080;">%</span> <strong><span style="color: #000080;">{</span></strong>
<span style="white-space: pre;">		</span><strong><span style="color: #0000ff;">if</span></strong> <strong><span style="color: #000080;">(</span>$myDict</strong>.containsKey<strong><span style="color: #000080;">(</span>$_<span style="color: #000080;">))</span></strong>
<span style="white-space: pre;">		</span><strong><span style="color: #000080;">{</span></strong>
<span style="white-space: pre;">			</span><strong>$myDict<span style="color: #000080;">[</span>$_<span style="color: #000080;">]</span></strong> += <strong>$aValue</strong>
<span style="white-space: pre;">		</span><span style="color: #000080;"><span style="color: #000080;"><strong>}</strong></span></span>
<span style="white-space: pre;">	</span><span style="color: #000080;"><strong><span style="color: #000080;">}</span></strong></span>
<strong><span style="color: #000080;">}</span></strong>

<strong>$myDict </strong>= <strong><span style="color: #000080;">@{</span></strong><span style="color: #999999;">"un"</span> = <span style="color: #ff9900;">1</span> ; <span style="color: #999999;">"deux"</span> = <strong><span style="color: #000080;">@(</span></strong><span style="color: #999999;">"item1"</span>, <span style="color: #999999;">"item2"</span><strong><span style="color: #000080;">)</span></strong>; <span style="color: #999999;">"trois"</span> = <span style="color: #999999;">"tagada"</span><strong><span style="color: #000080;">}</span></strong>
<strong>$myList </strong>= <strong><span style="color: #000080;">@(</span></strong><span style="color: #999999;">"un"</span>, <span style="color: #999999;">"deux"<span style="color: #000000;">, <span style="color: #ff9900;">38</span></span></span><strong><span style="color: #000080;">)</span></strong>

<span style="color: #33cccc;">write</span> <span style="color: #999999;">"avant:"</span>
<strong>$myDict</strong> | <span style="color: #33cccc;">ft</span>

TweakMyData <strong>$myDict</strong> <strong>$myList</strong> <span style="color: #ff9900;">3</span>

<span style="color: #33cccc;">write</span> <span style="color: #999999;">"après:"</span>
<strong>$myDict</strong> | <span style="color: #33cccc;">ft</span></pre>
<h2>Et dans la vraie vie, qu&#8217;est ce que ça donne ?</h2>
<h3>Effectivement on peut à peu près tout faire</h3>
<p>Dans le cadre de mise en place d&#8217;outils d&#8217;automatisation, d&#8217;alimentation automatique d&#8217;entrées comptes, de boites aux lettres de compte OCS, on arrive  à devoir chainer un ensemble conséquent d&#8217;opérations techniques. À ce jour, il a toujours été possible de le  faire en PowerShell. Parfois une commandlet fait tout en une passe, parfois il est nécessaire d&#8217;en chainer plusieurs, mais dans tous les cas on arrive à ses fins. On arrive assez vite à faire des scripts de plusieurs centaines de ligne de code pour traiter tous les cas de figure.</p>
<p>L&#8217;environnement naturellement distribué des infrastructures annuaire/messagerie conduit généralement à devoir gérer deux problématiques classiques : le manque d&#8217;atomicité des opérations globales (qui rend pénible les retours arrière) et les délais de réplication d&#8217;annuaire qui peuvent engendrer pas mal de surprises.</p>
<h3>La gestion des erreurs est perfectible</h3>
<p>En l&#8217;absence de structure de type try-catch-finalize, inutile de rêver, on s&#8217;arrache les cheveux avec des blocs <em>trap</em>.</p>
<p>Là où un shell UNIX n&#8217;offre que peu de solutions élégantes, on pouvait espérer d&#8217;un outil aussi récent une avancée plus impressionnante en termes de gestion des erreurs.</p>
<p>Si on le compare à d&#8217;autres langages de scripts/interprétés «modernes» (Python, Ruby), c&#8217;est selon moi un défaut majeur, qui semble-t-il a été comblé dans la version 2.0.</p>
<h3><strong>Le typage des objets est aléatoire</strong></h3>
<p>Comme la plupart des langages de scripts les variables ne sont pas vraiment typées et c&#8217;est dynamiquement que l&#8217;interpréteur essaye de comprendre les types d&#8217;objets à lire/produire. Là ou certains langages se sortent très bien de cette situation, PowerShell peine à rendre les choses simple. On arrive très fréquemment à devoir aider l&#8217;interpréteur à prendre les bonnes décisions à grands coups de <em>[string]</em>.</p>
<h3>Les performances sont mauvaises</h3>
<p>L&#8217;utilisation systématique d&#8217;objets dans toutes les parties du code entraine une sanction sans appel. On en arrive du coup à devoir proposer un script épaulé par une bibliothèque dynamique écrite en C# qui vient implémenter des routines qui seraient bien trop lentes en PS.</p>
<p>L&#8217;effet est immédiat, car on parvient à rendre certaines portions de code plusieurs centaines de fois plus rapides.</p>
<p>L&#8217;impact est de devoir maitriser deux langages, dont l&#8217;un nécessite un environnement de développement complet pour être compilé, dommage.</p>
<h3>La stabilité est discutable</h3>
<p>Au moment où le comportement d&#8217;un script devient non reproductible, il est grand temps de fermer et relancer sa console PowerShell. Ce jugement, certes peu flatteur est malheureusement constaté soit directement dans une console, soit lorsque l&#8217;on développe dans l&#8217;éditeur multi-usage/débogueur qu&#8217;est PowerGUI (lui-même écrit en PS).</p>
<p>Fort heureusement, lorsqu&#8217;il s&#8217;agit de lancer des tâches planifiées en PS, on démarre un interpréteur tout neuf qui fait tourner notre script favori et finit par se terminer, on n&#8217;est donc généralement pas dans un cas d&#8217;utilisation problématique.</p>
<h2>Conclusion</h2>
<p>Je m&#8217;interroge sur l&#8217;objectif profond de la mise en place de PowerShell. Je suis partagé entre plusieurs sentiments.</p>
<p>Faut-il y voir une tentative d&#8217;attirer les UNIXiens vers la plateforme aux fenêtres ? Est-ce finalement un aveu de la suprématie indiscutable du modèle des scripts ? Un relent de réalisme face à la grogne des <strong>Administrator</strong>s qui souffrent de ne pouvoir faire des traitements en masse ?</p>
<p>Quoi qu&#8217;il en soit, le fossé ne me semble que partiellement comblé. L&#8217;arrivée de PowerShell 2.0 apporte son lot d&#8217;améliorations, mais je me garderai bien des effets d&#8217;annonce sans avoir un réel retour d&#8217;expérience dans la durée, qui fera sans doute l&#8217;objet un nouveau billet.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=9149" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/mes-bonnes-pratiques-en-powershell/' rel='bookmark' title='Mes bonnes pratiques en PowerShell v2'>Mes bonnes pratiques en PowerShell v2</a></li>
<li><a href='http://blog.octo.com/n%e2%80%99oublions-pas-windows-mobile/' rel='bookmark' title='N’oublions pas Windows Mobile'>N’oublions pas Windows Mobile</a></li>
<li><a href='http://blog.octo.com/la-strategie-windows-phone-7/' rel='bookmark' title='La stratégie Windows Phone 7'>La stratégie Windows Phone 7</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/powershell-le-couteau-suisse-des-administrateurs-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You Are The Cloud</title>
		<link>http://blog.octo.com/you-are-the-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=you-are-the-cloud</link>
		<comments>http://blog.octo.com/you-are-the-cloud/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 12:38:41 +0000</pubDate>
		<dc:creator>Marc-Antoine Garrigue</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Brèves de consultants]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[développements]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[innovation]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=4866</guid>
		<description><![CDATA[J&#8217;ai eu la chance d&#8217;assister à une éclairante présentation de Philip Evans, Directeur Associé Senior, The Boston Consulting Group à l&#8217;Usi 2009 intitulée Stratégie 2.0. Cette session m&#8217;a inspiré cet article, dans lequel je vous propose une brève introduction à ce qu&#8217;est un contrat horizontal et comment il peut bouleverser son marché. Dans une seconde [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/petit-dejeuner-cloud-computing-le-10-decembre/' rel='bookmark' title='Petit-déjeuner Cloud Computing le 10 décembre'>Petit-déjeuner Cloud Computing le 10 décembre</a></li>
<li><a href='http://blog.octo.com/cloud-computing-risques-juridiques/' rel='bookmark' title='Les risques juridiques du Cloud Computing'>Les risques juridiques du Cloud Computing</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fyou-are-the-cloud%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22You%20Are%20The%20Cloud%22%20%7D);"></div>
<p>J&#8217;ai eu la chance d&#8217;assister à une <a id="dymy" title="éclairante présentation de Philip Evans, Directeur Associé Senior, The Boston Consulting Group à l&#039;Usi 2009 intitulée Stratégie 2.0" href="http://usi2009.universite-du-si.com/webcast-5-23-Philip.Evans.html" target="_blank" class="broken_link">éclairante présentation de Philip Evans, Directeur Associé Senior, The Boston Consulting Group à l&#8217;Usi 2009 intitulée Stratégie 2.0</a>.</p>
<p>Cette session m&#8217;a inspiré cet article, dans lequel je vous propose une brève introduction à ce qu&#8217;est un contrat horizontal et comment il peut bouleverser son marché. Dans une seconde partie je tente d&#8217;évaluer comment les offres de <a id="dtae" title="Cloud" href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud</a> peuvent être considérées comme un tel contrat. Enfin je terminerai en vous narrant un scénario fictif décrivant un tel bouleversement, qui appelle deux questions.<span id="more-4866"></span></p>
<h2>Le contrat horizontal et l&#8217;histoire de l&#8217;IBM 360.</h2>
<p>Le contrat horizontal désigne une norme (technique) qui facilite la coopération des acteurs de chaque coté de la norme. Phillip Evans estime que ces contrats, lorsqu&#8217;ils  sont transverses à un secteur d&#8217;activité, favorisent la réorganisation des acteurs du secteur par couche (l&#8217;auteur parle de &laquo;&nbsp;Stack&nbsp;&raquo;,<a href="http://usi2009.universite-du-si.com/webcast-5-23-Philip.Evans.html" target="_blank" class="broken_link"> à 1 minute 17</a>). Prenons le cas des téléphones portables, <a id="g33b" title="la création d'une norme de chargeu" href="http://www.zdnet.fr/actualites/telecoms/0,39040748,39700824,00.htm" target="_blank">la création d&#8217;une norme de chargeu</a>r pour mobile devrait permettre au marché de se réorganiser : les acteurs &laquo;&nbsp;fabriquant de chargeurs&nbsp;&raquo; vont pouvoir s&#8217;appuyer sur cette norme pour investir le marché.</p>
<p>Ce phénomène de réorganisation d&#8217;un secteur d&#8217;activité autour d&#8217;un contrat horizontal a pavé l&#8217;histoire de l&#8217;informatique, nous avons tous vécu au moins une révolution de cet ordre. L&#8217;exemple de <a id="puzs" title="la mise au point de l'architecture du système 360/370 chez IBM" href="http://portal.acm.org/citation.cfm?id=32233" target="_blank">la mise au point de l&#8217;architecture du système 360/370 chez IBM</a>, présenté dans cette session est fondateur. C&#8217;est effectivement la mise au point de contrats d&#8217;interfaces (deux dans le document, un étant le jeu d&#8217;instruction machine, l&#8217;autre étant la standardisation des canaux vers les périphériques électriques) qui aura permis à IBM d&#8217;assurer la compatibilité et la modularité de leur production logicielle et machine. C&#8217;est également la mise au point de ces contrats, ainsi que leur exploitation effective, qui a transformé définitivement le marché des technologies de l&#8217;information.</p>
<p>(Notez pour la petite histoire que c&#8217;est au cours du projet Poughkeepsie préparant l&#8217;arrivée du 360 que le mot architecture aurait été utilisé pour la première fois en informatique).</p>
<p>C&#8217;est ainsi par exemple que la normalisation du <a id="ax4o" title="jeu d'instruction X86" href="http://en.wikipedia.org/wiki/X86_architecture" target="_blank">jeu d&#8217;instruction X86</a> pour processeurs a permis a de nombreux constructeurs (<a title="Intel Corporation" href="http://en.wikipedia.org/wiki/Intel_Corporation" target="_blank">Intel</a>, <a title="Cyrix" href="http://en.wikipedia.org/wiki/Cyrix" target="_blank">Cyrix</a>, <a title="Advanced Micro Devices" href="http://en.wikipedia.org/wiki/Advanced_Micro_Devices" target="_blank">AMD</a>, <a title="VIA Technologies" href="http://en.wikipedia.org/wiki/VIA_Technologies" target="_blank">VIA</a>,&#8230;) de mener la compétition sur le marché désormais spécifique du processeur.</p>
<p>Mais bien d&#8217;autres exemples viennent rapidement à l&#8217;esprit avec les couches OSI et internet, JAVA puis les serveurs d&#8217;application, ou encore DirectX. A chaque fois une API, un contrat, qui galvanise le marché et lui offre l&#8217;opportunité de changer profondément d&#8217;une organisation verticale, avec quelques acteurs parallèles susceptibles d&#8217;adresser tout ou partie de la pile à une organisation horizontale, clairement segmentée avec les acteurs adressant un ou plusieurs étages de la pile. Cet effet d&#8217;empilement du marché favorise la concurrence par étage en permettant aux acteurs de se concentrer et d&#8217;échanger sur une base commune, en ayant la garantie que le sol ne va pas se dérober.<br />
La compétition s&#8217;organise donc par étage, et plus par silo. Philip Evans ajoute à ce sujet à la fin de sa présentation q<span style="background-color: #ffffff;">ue les règles de sélection économ</span>ique sont bien différentes selon qu&#8217;on est en bas ou en haut de la pile.</p>
<h2>Le contrat horizontal, aujourd&#8217;hui le Cloud</h2>
<p style="text-align: center;">
<p>Cette idée de réorganisation du marché par le contrat horizontal est éclairante dans le domaine du Cloud. En effet les offres de Cloud des trois grands acteurs (Amazon, Microsoft et Google) proposent chacune un contrat qui permet de découper le marché horizontalement entre des fournisseurs de plateformes et le reste du monde.</p>
<p>En réalité le contrat n&#8217;est pas encore uniforme, chaque acteur proposant ses spécificités, mais on observe cependant une grande uniformité dans les services et le niveau des contrats proposés (l&#8217;uniformité va jusqu&#8217;au prix de ces services).</p>
<p>Pour illustrer ce propos, voici une déclinaison du modèle prototypique d&#8217;une pile selon Philip Evans,</p>
<div id="attachment_4887" class="wp-caption aligncenter" style="width: 188px"><img class="size-full wp-image-4887" title="protoptypique stack" src="http://blog.octo.com/wp-content/uploads/2009/08/1.png" alt="protoptypique stack" width="178" height="161" /><p class="wp-caption-text">protoptypique stack</p></div>
<p>appliqué aux trois offres :</p>
<div id="tsks" style="text-align: left;">
<div id="q1vk" style="text-align: left;">
<div>
<table id="zf75" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td style="text-align: center;" width="50%"><strong>Fournisseur</strong></td>
<td style="text-align: center;" width="50%"><strong>Implémentation de la pile Cloud</strong></td>
</tr>
<tr>
<td width="50%"><img style="width: 150px; height: 150px;" src="https://docs.google.com/a/octo.com/File?id=dfr5d54h_3c47cmsd5_b" alt="" /></td>
<td style="text-align: center;" width="50%"><img class="aligncenter size-full wp-image-4893" title="google app engine cloud stack" src="http://blog.octo.com/wp-content/uploads/2009/08/21.png" alt="google app engine cloud stack" width="178" height="162" /></td>
</tr>
<tr>
<td width="50%">
<div id="bohg" style="text-align: left;"><img style="width: 166px; height: 166px;" src="https://docs.google.com/a/octo.com/File?id=dfr5d54h_6cchfhwck_b" alt="" /></div>
</td>
<td style="text-align: center;" width="50%"><img class="aligncenter size-full wp-image-4894" title="Azure cloud Stack" src="http://blog.octo.com/wp-content/uploads/2009/08/31.png" alt="Azure cloud Stack" width="178" height="161" /></td>
</tr>
<tr>
<td width="50%">
<div id="xjzb" style="text-align: left;"><img style="width: 215px; height: 78px;" src="https://docs.google.com/a/octo.com/File?id=dfr5d54h_7ghqwj8g4_b" alt="" /></div>
</td>
<td style="text-align: center;" width="50%"><img class="aligncenter size-full wp-image-4890" title="Amazon WS Cloud Stack" src="http://blog.octo.com/wp-content/uploads/2009/08/5.png" alt="Amazon WS Cloud Stack" width="178" height="161" /></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>On observe que les deux contrats AppEngine et Azure sont sensiblement équivalents, et pourraient se traduire par : &laquo;&nbsp;Développez une application selon notre contrat, on vous garantit en retour qu&#8217;elle pourra être hébergée sur notre infrastructure que nous vous louerons à l&#8217;usage&nbsp;&raquo;.<br />
Le contrat d&#8217;Amazon se situe un peu plus bas dans la pile, qui se traduit en remplaçant &laquo;&nbsp;Développez une application&nbsp;&raquo; par &laquo;&nbsp;Déployez votre Virtual Machine&nbsp;&raquo;.</p>
<p>Pour résumer, le contrat horizontal permet une transformation du marché, et les premières offres de Cloud définissent un contrat horizontal pour le développement et le déploiement d&#8217;applications. On peut donc s&#8217;attendre à ce que le marché de l&#8217;application ( construction, et exploitation ) se réorganise profondément. C&#8217;est un vaste sujet, qui fera l&#8217;objet d&#8217;un prochain article.</p>
<h2><strong>Le contrat horizontal et demain, YouAreTheCloud?</strong></h2>
<p>Fort de cette observation, et toujours au cours de cet USI 2009, j&#8217;ai été abreuvé de statistiques sur le marché de l&#8217;IT :<br />
<br style="font-family: Verdana; color: #000000;" /></p>
<ul style="font-family: Verdana; color: #000000;">
<li> 800 000 PC dans les datacenters Google</li>
<li> <a id="j_fd" title="270 millions de foyers ont un accès haut débit" href="http://www.internetworldstats.com/dsl.htm" target="_blank">270 millions de foyers ont un accès haut débit</a></li>
<li> <a id="w08x" title="Il y a plus d'1 milliard de pc dans le monde, deux en 2014" href="http://www.reuters.com/article/technologyNews/idUSL2324525420080623?feedType=RSS&amp;feedName=technologyNews" target="_blank">Il y a plus d&#8217;1 milliard de PC dans le monde, deux en 2014</a></li>
</ul>
<p>Les précédentes observations, ainsi que ces chiffres m&#8217;ont inspiré l&#8217;expérience d&#8217;esprit suivante (accrochez vous).</p>
<p>Une nouvelle compagnie  (qu&#8217;on appellera <a id="pk6h" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a>) loue aux particuliers leur machine et leur bande passante afin de proposer un service équivalent à celui d&#8217;AppEngine ou d&#8217;Azure.</p>
<p>Pour le particulier :<a id="gr7j" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a> vous demande de vous inscrire, d&#8217;installer un logiciel, et de laisser votre machine allumée et connectée. En échange, ce service vous paye, au pro rata de la bande passante, du CPU et de l&#8217;espace disque que le logiciel utilise. L&#8217;équivalent d&#8217;un <a id="asvu" title="SETI@home" href="http://setiathome.ssl.berkeley.edu/" target="_blank">SETI@home mais rémunéré</a>. <a id="ext2" title="Est ce que vous signez?" href="http://answers.polldaddy.com/poll/1859111/" target="_blank">Est-ce que vous signez?</a> (moi oui, sachant que je paye quoi qu&#8217;il arrive ma bande passante, et que je laisse parfois tourner ma machine à la maison, et si j&#8217;ai le choix de la bande passante, du cpu et du disque que je mets à disposition)</p>
<p>Pour le développeur :<a id="gfad" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a> vous propose d&#8217;utiliser l&#8217;infrastructure louée aux particuliers pour déployer à un prix défiant toute concurrence vos applications. Est-ce que vous signez? (moi oui pour toutes mes applications dont les données ne sont pas confidentielles)</p>
<p>Est-ce possible (techniquement)? vaste sujet, mais la plupart des briques nécessaires existent déjà en open source. On trouve déjà <a id="oqo8" title="des outils permettant de faire un systeme de fichier distribué, l'équivalent de la BigTable, et des implémentations de MapReduce." href="http://themindstorms.blogspot.com/2009/05/quick-reference-to-alternative-data.html" target="_blank">des outils permettant de faire un systeme de fichier distribué, l&#8217;équivalent de la BigTable, et des implémentations de MapReduce.</a> Les serveurs d&#8217;application sont légion, les load balanceurs également. En fait même le SDK <a id="m:7-" title="appEngine" href="http://code.google.com/p/googleappengine/" target="_blank">AppEngine</a> est open source&#8230; Reste à packager l&#8217;ensemble et à héberger les serveurs master, restent aussi tous les problèmes liés à la gestion du fail over sur ce type d&#8217;infrastructure. Rien d&#8217;impossible.</p>
<div>
<table id="e3eb" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td width="50%">
<div id="x236" style="text-align: left;"><img style="width: 319px; height: 67px;" src="https://docs.google.com/a/octo.com/File?id=dfr5d54h_10d72tdtfv_b" alt="" /></div>
</td>
<td width="50%">
<div style="text-align: center;"><img class="aligncenter size-full wp-image-4891" title="YouAreTheCloud Cloud stack" src="http://blog.octo.com/wp-content/uploads/2009/08/6.png" alt="YouAreTheCloud Cloud stack" width="178" height="161" /></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>Le résultat de cette expérience d&#8217;esprit, c&#8217;est que <a id="a4wf" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a> est capable de proposer un service équivalent à ceux d&#8217;Azure ou GoogleAppEngine en s&#8217;appuyant sur une infrastructure louée aux particuliers.</p>
<p>Imaginons que cette offre ait un petit succès en convainquant 5 possesseurs de haut débit sur mille. Cela représente 1,35 millions de PCs au bas mot.</p>
<p>Comme les bonnes histoires présentent des situations grises, les clients développeurs ne sont pas au rendez vous, la plupart étant un peu frileux concernant la viabilité ou la sécurité d&#8217;un tel système, il essayent mais ne payent pas.</p>
<p>Pendant ce temps chez  <a id="oaq3" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a> :</p>
<p>Les petits gars de  <a id="z_n." title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a> sont maintenant à la tête d&#8217;une infrastructure équivalente à celle de Google. Ils se demandent comment ils pourraient exploiter cette gigantesque infrastructure, ajoutée à l&#8217;étage de service, et à celui de plateforme, gracieusement mis à disposition. Qu&#8217;en faire?</p>
<p>C&#8217;est là que Joe lance un jour à la machine à café : &laquo;&nbsp;et si on montait un système équivalent à Google avec un moteur de recherche et des liens sponsorisés, où on reverserait une partie des bénéfices aux particuliers?&nbsp;&raquo;<br />
&laquo;&nbsp;Ouais!&nbsp;&raquo;, réponds Bill, &laquo;&nbsp;scannons le web, indexons l&#8217;ensemble, on a l&#8217;infra pour, ouvrons une place de marché du lien sponsorisé, et reversons une partie des bénéfices aux particuliers à qui on loue nos machines.&nbsp;&raquo;<br />
John, qui fait figure de chef, n&#8217;en perd pas une miette, et lance le projet, comme sa dernière bonne idée pour sauver la boutique.<br />
Ce revirement fait un buzz incroyable dans la communauté, si bien que ce nouveau moteur de recherche commence à représenter une part des requêtes conséquente. Les marques s&#8217;engouffrent voyant là une belle opportunité de surfer sur le buzz et de se refaire une image en publiant sur un média tendance, et disons le, assez funky. Le système est lancé.</p>
<h2>Demande d&#8217;aide</h2>
<p>Et la morale de cette histoire me direz-vous?<br />
Cette histoire m&#8217;inspire deux questions, pour lesquelles j&#8217;ai besoin d&#8217;aide, vos réponses m&#8217;intéressent pour élargir ma réflexion sur ces sujets.</p>
<p>Deux questions donc :</p>
<p>Le changement résultant de cette histoire à grande échelle sur lequel je reste dubitatif est le bilan écologique. Si il est probable que le bilan soit négatif en terme de consommation électrique dans la période de transition (à la consommation actuelle de Google s&#8217;ajoute celle des PC désormais utilisés par YouAreTheCloud.com), <a id="g8uu" title="je m'interroge sur le bilan après cette phase" href="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/60000/3000/300/63349/63349.strip.sunday.gif" target="_blank">je m&#8217;interroge sur le bilan après cette période</a>.</p>
<ul>
<li>Est-ce que le bilan écologique serait meilleur avec le search effectué par <a id="s2hq" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/">YouAreTheCloud.com</a> ou par <a id="wsjr" title="les datacenters des grands industriels de l'infrastructure" href="http://www.google.com/corporate/green/datacenters/" target="_blank">les datacenters des grands industriels de l&#8217;infrastructure</a>?</li>
</ul>
<p>La seconde question concerne la gouvernance de YouAreTheCloud.com.<br />
D&#8217;un point de vue financier, les acteurs du Cloud doivent fairent des investissements massifs en infrastructure, à l&#8217;achat (les machines et les locaux) et en fonctionnement (l&#8217;électricité et les réseaux) .<br />
Dans le cas de YouAreTheCloud.com, ces investissement<span style="color: #000000;">s</span> sont directement assumés par les particulier<span style="color: #000000;">s</span> qui louent leur propre infrastructure. C&#8217;est donc une sorte d&#8217;actionnariat en nature, qui donne droit à des dividendes en fonction de la performance de l&#8217;entreprise. Très classique finalement.</p>
<ul>
<li> Mais cet actionnariat en nature devrait-il donner accès aux mêmes <a id="fv7a" title="droits qu'un actionnaire à classiquement" href="http://www.boursilex.com/les_droits_et_pouvoirs_de_l%27actionnaire.htm" target="_blank">droits qu&#8217;un actionnaire a classiquement</a>?  À moins? À plus?</li>
</ul>
<p>C&#8217;est à vous!</p>
<p>MAG<br />
PS: <a id="zzdz" title="YouAreTheCloud.com" href="http://www.youarethecloud.com/" target="_blank">YouAreTheCloud.com</a> est une société fictive.</p>
<p>PPS: Pendant la rédaction de cet article, un acteur Majeur, <a id="jc2j" title="VMWare a fait l'acquisition de SpringSource" href="http://www.touilleur-express.fr/2009/08/11/springsource-rachete-par-vmware/" target="_blank">VMWare a fait l&#8217;acquisition de SpringSource</a>.</p>
<div>
<table id="kw4o" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td width="50%">
<div id="suyr" style="text-align: left;">
<div id="epz:" style="text-align: left;">
<div id="lym8" style="text-align: left;"><img src="https://docs.google.com/a/octo.com/File?id=dfr5d54h_11dt2j26qr_b" alt="" width="141" height="141" /><br />
<img src="https://docs.google.com/a/octo.com/File?id=dfr5d54h_12ctsws5fn_b" alt="" width="123" height="43" /></div>
</div>
</div>
</td>
<td width="50%">
<p style="text-align: center;"><img class="aligncenter size-full wp-image-4896" title="VMWare SpringSource Cloud Stack" src="http://blog.octo.com/wp-content/uploads/2009/08/springsourcevmware1.png" alt="VMWare SpringSource Cloud Stack" width="205" height="184" /></p>
</td>
</tr>
</tbody>
</table>
</div>
<p><img alt="" /></p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=4866" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/petit-dejeuner-cloud-computing-le-10-decembre/' rel='bookmark' title='Petit-déjeuner Cloud Computing le 10 décembre'>Petit-déjeuner Cloud Computing le 10 décembre</a></li>
<li><a href='http://blog.octo.com/cloud-computing-risques-juridiques/' rel='bookmark' title='Les risques juridiques du Cloud Computing'>Les risques juridiques du Cloud Computing</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/you-are-the-cloud/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Syn flood</title>
		<link>http://blog.octo.com/syn-flood/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=syn-flood</link>
		<comments>http://blog.octo.com/syn-flood/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 11:54:45 +0000</pubDate>
		<dc:creator>Gabriel Guillon</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[tech inside]]></category>

		<guid isPermaLink="false">http://new-blog.octo.com/?p=678</guid>
		<description><![CDATA[Vous aimez que l&#8217;on vous parle ? Vos serveurs aussi. Mais trop de conversations simultanées fait mal à la tête, surtout quand personne ne finit ses phrases ; et il en est de même avec vos serveurs. Présentation Le syn flood est une attaque réseau faisant partie de la classe des DDoS (Distributed Denial of [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fsyn-flood%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Syn%20flood%22%20%7D);"></div>
<p>Vous aimez que l&#8217;on vous parle ? Vos serveurs aussi. Mais trop de conversations simultanées fait mal à la tête, surtout quand personne ne finit ses phrases ; et il en est de même avec vos serveurs.<br />
<span id="more-678"></span></p>
<h3>Présentation</h3>
<p>Le <em>syn flood</em> est une attaque réseau faisant partie de la classe des DDoS (Distributed Denial of Service), qui elle-même fait partie de la classe des <a href="http://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service">DoS </a>(Denial of Service).</p>
<p>Comme tout DoS, l&#8217;attaque vise à saturer la machine (ou le réseau) attaqué afin qu&#8217;elle/il ne puisse plus rendre le service pour lequel elle/il est conçu-e.</p>
<p>Elle utilise la pile TCP, et elle consiste à ouvrir des connexions sans jamais les fermer.</p>
<p>Pour rappel: une ouverture de connexion TCP (TCP, hein, pas UDP) consiste en un <em>three way handshake</em> (poignée de main en trois étapes), dont voici le détail avec pour l&#8217;exemple les serveurs de nos stars mondiales, Alice et Bob.</p>
<p><strong>ServeurAlice, poliment</strong> : Salut, ServeurBob, je peux te parler?</p>
<p><strong>ServeurBob, s&#8217;il est disponible, et tout aussi poliment</strong>: Salut, ServeurAlice, oui bien sûr!</p>
<p><strong>ServeurAlice heureux</strong>: chouette!</p>
<p>Et le serveur d&#8217;Alice dit ce qu&#8217;il a à dire.</p>
<p>Dans le texte, et sans le sous-titrage, ça donne:</p>
<p><strong>A-&gt;B</strong>: paquet TCP avec flag <a href="http://en.wikipedia.org/wiki/SYN_(TCP)">SYN</a> levé, à destination d&#8217;un port supposé ouvert, disons 80</p>
<p><strong>B-&gt;A: </strong>paquet TCP avec flags <a href="http://en.wikipedia.org/wiki/SYN_(TCP)">SYN</a> et <a href="http://en.wikipedia.org/wiki/ACK_(TCP)">ACK</a> levés</p>
<p><strong>A-&gt;B</strong>: paquet TCP avec flag <a href="http://en.wikipedia.org/wiki/ACK_(TCP)">ACK</a> levé.</p>
<p>Quand le serveur de Bob reçoit le premier TCP SYN, il note dans un coin de sa têt &#8230; mémoire que c&#8217;est le serveur d&#8217;Alice (avec tel port source) qui lui parle, lui envoie un SYN ACK (là, la connexion est dans l&#8217;état <em>half-open</em>, semi-ouvert) et &#8230; attend la suite.</p>
<p>Suite, normalement, qui est soit un ACK signifiant que le serveur d&#8217;Alice désire réellement établir la connexion, soit un RST (reset, mettant fin à la connexion) signifiant que le serveur d&#8217;Alice, en fait, boude et ne veut pas/plus parler au serveur de Bob (et dans ce cas, le serveur de Bob libère la mémoire)</p>
<p>Le problème, c&#8217;est que bien souvent le nombre de connexions <em>half-open</em> est limité par le noyau de l&#8217;OS. Ça s&#8217;appelle la queue de backlog (à ne pas confondre avec le backlog que l&#8217;on utilse dans les méthodes agiles), et sur mon Linux (2.6.30) c&#8217;est le paramètre /proc/sys/net/ipv4/tcp_max_syn_backlog, et il est mis à 1024 (hé oui, mon Linux est une fille : il peut tenir 1024 conversations simultanées). Sur les Windows, il n&#8217;y a pas réellement de valeur par défaut mais il existe un mécanisme de backlog dynamique.</p>
<p>Supposons que le serveur d&#8217;Alice soit possédé par une malotrue jalouse, Eve, et envoie plein de paquets SYN au serveur de Bob, et ignore les réponses de Bob (ne renvoie pas le ACK correspondant). Dans ce cas, le serveur de Bob va allouer de la mémoire à ces connections <em>half-open</em>, envoyer les paquets SYN ACK adéquats, et attendre (que le caramel &#8230; )</p>
<p>Que se passe-t-il lorsque la taille de la queue du backlog est atteinte ? Si le serveur de Bob ne plante pas, il est en déni de service : il ne peut plus honorer les tentatives de connexion légitimes (d&#8217;Alice ou de ses autres ami-e-s)</p>
<p>Une attaque <em>syn flood</em> consiste à saturer le serveur de demandes de connexions pour justement provoquer ce déni de service.</p>
<h3>Protection</h3>
<p>Comme tout DoS, se protéger d&#8217;un <em>syn flood</em> n&#8217;est pas chose aisée, surtout quand l&#8217;attaque est en cours.</p>
<p>Mais cette technique étant relativement ancienne (mi 90) des mécanismes de <em>prévention</em> existent. Je vais décrire ici seulement les mécanismes que <em>vous</em> pouvez mettre en œuvre (il en existe que seul votre ISP peut implémenter).</p>
<h4>Quand vous êtes sous le feu de l&#8217;attaque</h4>
<p>Les écrans de monitoring de votre réseau vous indiquent que l&#8217;occupation mémoire de vos serveurs a grimpé en flèche, que le nombre de connexions simultanées est atteint, que le taux d&#8217;occupation de vos tuyaux crève le plafond, et votre pare-feu vous alerte qu&#8217;il y a bien trop de tentatives de connections ?</p>
<p>Si vous êtes chez vous, la led de votre box clignote comme une dingue et votre surf est lent (et accessoirement un <a href="http://fr.wikipedia.org/wiki/Tcpdump">tcpdump</a> est bien trop bavard à votre goût) ?</p>
<p>Bravo, vous êtes en train de vous faire noyer.</p>
<p>Que faire ?</p>
<p>En tant qu&#8217;entreprise, les attaques <em>syn flood</em> sont monnaie courante. Et ce d&#8217;autant plus que vous êtes connu. La cause peut aller d&#8217;un piratin du dimanche qui s&#8217;ennuie chez lui parce qu&#8217;il pleut (dans ce cas le <em>flood</em> ne dure pas bien longtemps et n&#8217;est pas bien méchant, peut-être même que vous ne l&#8217;avez pas remarqué) à un réseau de pirates qui veulent vous faire chanter, et dans ce cas le <em>flood</em> peut durer plusieurs jours avec les conséquences que je vous laisse imaginer sur votre chiffre d&#8217;affaire et votre image.</p>
<p>Si les connexions arrivent d&#8217;un lot identifié d&#8217;adresses IP, il suffit de <strong>recenser ces adresses et de les bloquer pendant un certain temps</strong> : hé oui, ces IP peuvent être les machines de vos clients, entreprises ou particuliers, et leur interdire l&#8217;accès <em>ad vitam aeternam</em> n&#8217;est pas une bonne idée.</p>
<p>Si ce nombre d&#8217;adresses IP est conséquent, ce qui arrive le plus souvent, il ne vous reste plus beaucoup de choix:</p>
<ul>
<li>Faire le gros dos et <strong>attendre que l&#8217;orage passe</strong>. Ce n&#8217;est clairement pas la meilleure solution mais c&#8217;est parfois la seule &#8230;</li>
<li>Vous pouvez essayer de <strong>trouver une sorte de logique dans les adresses qui vous attaquent</strong>. En effet il se peut que vous soyez attaqué par un <a href="http://en.wikipedia.org/wiki/Botnet"><em>botnet</em></a>. Celui-ci étant composé d&#8217;ordinateurs répartis dans le monde, vous pouvez essayer de vous couper de la partie du monde d&#8217;où proviennent les paquets : n&#8217;autorisez que les adresses dont le plan d&#8217;adressage est dans la partie du monde qui vous intéresse. Chaque pays ayant plus ou moins ses propres plages d&#8217;adresses (cf par <a title="Plages d'IP" href="http://www.iana.org/assignments/ipv4-address-space/">ici</a>). Néanmoins cette attaque est inefficace si les malotrus sont rusés au point d&#8217;usurper les adresses et les mettre dans le plan d&#8217;adressage qui vous intéresse.</li>
</ul>
<h4>Avant d&#8217;être sous le feu de l&#8217;attaque</h4>
<p>Le mieux est encore de mettre en place les mécanismes de protection <em>avant</em> de subir l&#8217;attaque.</p>
<p>Au niveau infrastructure :</p>
<ul>
<li>Il faut <strong>dimensionner votre infrastructure</strong> pour supporter ce genre d&#8217;attaque. Si vous pensez que votre brin d&#8217;entrée est suffisamment dimensionné pour supporter le trafic &laquo;&nbsp;régulier&nbsp;&raquo;, pas beaucoup plus, il y a de forte chances que vous soyez sensible à ces attaques.</li>
<li>De même si vos serveurs sont <strong>un peu justes en mémoire et cpu</strong>, et si vous n&#8217;avez aucun moyen de superviser ce qu&#8217;il s&#8217;y passe.</li>
<li>Avez-vous pensé <strong>aux processus à mettre en œuvre</strong> si cette attaque vous tombe dessus ?</li>
</ul>
<p>Plus bas niveau, et plus immédiatement actionnable, au niveau matériel :</p>
<ul>
<li>Le plus répandu, et le plus efficace, est de<strong> limiter le nombre de sessions <em>half-open</em> simultanées</strong>. Tous les systèmes d&#8217;exploitations ont cette possibilité. Mais surtout votre pare-feu cette capacité, sous un nom ou un autre, avec plus ou moins de raffinement dans le paramétrage. Vos routeurs ont sans doute aussi ces options.</li>
<li>Dans la même idée, vous pouvez <strong>jouer avec les paramètres de la pile IP de votre système d&#8217;exploitation</strong>, ou ce que propose votre pare-feu : durée de vie d&#8217;une session <em>half-open</em>, d&#8217;une session tcp, &#8230; Sous Linux, visitez du côté de chez Swa&#8230; du côté de /proc/sys/net/ipv4/. La documentation se trouve dans les sources du noyau (Documentation/networking/ip-sysctl.txt) ou du coup sur le net. Sur les <a href="http://fr.wikipedia.org/wiki/Berkeley_Software_Distribution">BSD</a> c&#8217;est dans les paramètres du pare-feu (pf.conf). Sur Windows, il faut visiter la base de registre.</li>
<li>Utiliser les <strong><em>cookies syn</em></strong> (non, ne téléphonez pas à votre (grand-)mère pour lui demander la recette &#8230; ) : l&#8217;idée est de ne pas allouer la mémoire nécessaire à la connexion dès le premier paquet SYN reçu, mais à la place renvoyer au client, dans le paquet SYN ACK, un numéro de séquence spécial (chiffrement des ports sources et destination, adresses IP sources et destination, et <em>timestamp</em>). Le serveur alloue la mémoire une fois la réponse ACK reçue, réponse qui doit contenir le bon numéro de séquence, bien sûr.</li>
</ul>
<h3>Conclusion</h3>
<p>J&#8217;espère que cet article vous a instruit sur ce type d&#8217;attaque et vous a fait prendre conscience de la menace.</p>
<p>Les moyens de s&#8217;en protéger sont multiples (et variés) et vont du <em>tuning</em> de système d&#8217;exploitation à l&#8217;adaptation de votre infrastructure.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=678" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/syn-flood/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mon salon &#8230; linux (1/2)</title>
		<link>http://blog.octo.com/mon-salon-linux-12/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mon-salon-linux-12</link>
		<comments>http://blog.octo.com/mon-salon-linux-12/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 15:33:15 +0000</pubDate>
		<dc:creator>Gabriel Guillon</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[compte-rendu]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[innovation]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=2410</guid>
		<description><![CDATA[Les 31 Mars, 1er et 2 Avril se tenait le salon Solution Linux OpenSource. J&#8217;y suis allé faire un tour non seulement pour voir d&#8217;anciens collègues et visiter les stands des associations, mais surtout pour assister à une table ronde et des tutoriels qui m&#8217;intéressaient ce jour: Comment gérer son infrastructure virtuelle (table ronde du [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/mon-salon-linux-22/' rel='bookmark' title='Mon salon &#8230; linux (2/2)'>Mon salon &#8230; linux (2/2)</a></li>
<li><a href='http://blog.octo.com/presentation-industrialisation-java-au-salon-solutions-linux/' rel='bookmark' title='Présentation industrialisation Java au salon Solutions Linux [MAJ 17/03]'>Présentation industrialisation Java au salon Solutions Linux [MAJ 17/03]</a></li>
<li><a href='http://blog.octo.com/performances-de-build-java-sous-linux/' rel='bookmark' title='Performances de build Java sous Linux ?'>Performances de build Java sous Linux ?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fmon-salon-linux-12%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Mon%20salon%20...%20linux%20%281%2F2%29%22%20%7D);"></div>
<p>Les 31 Mars, 1er et 2 Avril se tenait le salon Solution Linux OpenSource. J&#8217;y suis allé faire un tour non seulement pour voir d&#8217;anciens collègues et visiter les stands des associations, mais surtout pour assister à une table ronde et des tutoriels qui m&#8217;intéressaient ce jour: Comment gérer son infrastructure virtuelle (table ronde du matin), le framework AJAX OpenExt et les RIA industrialisés avec PHP (tutoriels de l&#8217;après-midi). Je voulais voir comment ces sujets industriels allaient être traités par le Monde Libre.</p>
<p>Je vais scinder en 2 billets, afin de rendre la lecture plus digeste, et commencer, partie 1, par&#8230;</p>
<h3><span id="more-2410"></span>Comment gérer son infrastructure virtuelle</h3>
<p>Table <span style="text-decoration: line-through;">carré</span> ronde avec comme intervenant: Oracle, Red Hat, Microsoft, Sun, Novell, Ikoula et Arkea.</p>
<p>Oui, il manque Citrix et surtout VMWare. On pourrait débattre longtemps sur leur absence et la présence de Microsoft, mais disons pour l&#8217;instant que ni l&#8217;un ni l&#8217;autre n&#8217;offre de solution open source et n&#8217;ont donc pas de raisons d&#8217;être présent à ce salon.</p>
<p>L&#8217;ambiance était assez étrange, ça m&#8217;a fait penser à un marché où chacun disait &laquo;&nbsp;ils sont beaux, mes poivrons!&nbsp;&raquo;: chacun cherchait clairement à défendre et vendre sa solution. Pour autant, chacun était respectueux des autres (il n&#8217;y a pas eu de lancé de troll)</p>
<p>D&#8217;Oracle, RedHat, Microsoft, Sun et Novell, chacun avait sa solution de virtualisation.</p>
<h4>Présentation des chevaliers et de leurs armes:</h4>
<ul>
<li><strong>Virtualisation de serveur pour Oracle</strong>. Avec haute disponibilité de la base de données (par exemple) J&#8217;avoue ne pas avoir vraiment compris à quel niveau et de quelle manière Oracle faisait de la virtualisation. Ils disent &#8216;paravirtualisation&#8217;, mais ils n&#8217;ont pas cité d&#8217;OS. Quid des autres applications, dans ce cas? Supporte-t-ils tous les OS? Beaucoup de questions sans réponses&#8230;</li>
<li><strong>KVM pour RedHat</strong>: Pour rappel, KVM est un module noyau Linux qui permet à ce dernier de faire de la virtualisation et d&#8217;utiliser les instructions de virtualisations fournies par Intel (Intel-VT) et AMD (AMD-V). RedHat supporte donc KVM, en plus de Xen.</li>
<li><strong>Microsoft a sa propre solution: Hyper-V</strong>. Téléchargeable gratuitement. Microsoft est surtout fier de son module d&#8217;administration: <strong>System Center Virtual Machine Manager</strong> (est-il possible des pendre des marketeux pour manque d&#8217;imagination dans le choix des noms de produit?)</li>
<li><strong>Sun propose xVM</strong>: une famille de 4 produits: xVM Server, xVM VirtualBox, xVM Ops Center et VDI software, qui n&#8217;est &laquo;&nbsp;pas sec&nbsp;&raquo; (sic!).</li>
<li><strong>Novell propose Xen plus des outils d&#8217;administration</strong>, obtenus lors de l&#8217;achat de PlateSpin. Notamment <strong>Orchestrate</strong>.</li>
<li><strong>Ikoula</strong>, qui est un hébergeur, jouait le rôle de contre-pouvoir: Ikoula est &laquo;&nbsp;utilisateur&nbsp;&raquo; de la virtualisation.</li>
<li><strong>Arkea</strong>, éditeur de solutions de sauvegarde.</li>
</ul>
<h4>Débats</h4>
<p>Une fois passé la présentation des éditeurs et de leurs solutions, plusieurs thèmes ont été abordés, dont voici quelques grandes idées:</p>
<p><em></em></p>
<ul>
<li>Ne pas tout virtualiser pour le plaisir (et surtout la base de données, en fait le seul mini troll de la table ronde),</li>
<li>Penser à sécuriser physiquement (l&#8217;alimentation, par exemple). Virtualiser, c&#8217;est bien, mais ça rend l&#8217;infrastructure d&#8217;autant plus sensible au matériel,</li>
<li>Problème de compétences internes. Virtualisation, donc nouvelle technologie. A-t-on les compétences en interne? Choix éditeur ou open source?</li>
<li>Problème de coût de licences vs. coût du matériel. A étudier de prêt,</li>
<li>Problème de stockage: les images disque prennent de la place&#8230;</li>
</ul>
<p>Un point intéressant a été soulevé: celui du <strong>cycle de vie</strong> des machines virtuelles.</p>
<p>Comment les sauvegarder, par exemple? Cette question explique la présence d&#8217;<strong>Arkea</strong>, qui propose une solution de sauvegarde. Il faut penser à sauvegarder l&#8217;image de la VM mais <strong>aussi les données des applis qu&#8217;elle héberge</strong>: une image disque n&#8217;est qu&#8217;un gros fichier; endommagé il ne sert plus à grand chose. Et un fichier s&#8217;endommage plus facilement qu&#8217;un disque dur&#8230;</p>
<p>Mais aussi <strong>comment gérer leur prolifération?</strong> la tendance est à la multiplication des VM puisque c&#8217;est facile à mettre en œuvre. Microsoft annonce que le nombre de licences commandé à augmenté (je n&#8217;ai plus le chiffre en tête)&nbsp;&raquo;grâce&nbsp;&raquo; à la virtualisation. J&#8217;y vois là un symptôme: où avant on s&#8217;arrangeait avec l&#8217;OS qu&#8217;on avait installé, maintenant on virtualise &#8230; quitte à racheter une licence (virtualisation = facilité? quitte à payer? on n&#8217;est pas censé être en crise économique, normalement? :) )</p>
<p><strong>Comment gérer un parc vieillissant? </strong>La virtualisation permet de garde en vie de vieilles applications, dispensant ainsi de les refactorer. Ça peut être un problème, ou pas, mais il faut avoir conscience que maintenir ainsi une vieille application sous perfusion virtuelle n&#8217;est pas forcément le meilleur moyen de la rendre pérenne, et n&#8217;est sans doutes que repousser l&#8217;échéance du refactoring&#8230; Et quid d&#8217;une VM qui n&#8217;a pas été allumée depuis des mois, de son patchage, de la mise à jour de ses applications et de l&#8217;OS? Cela ne va-t-il pas ouvrir une faille de sécurité dans votre SI, cet OS/appli non à jour?</p>
<p><strong>Les ressources particulières que nécessite la virtualisation</strong> (stockages, formations, prévisions, &#8230;) nécessitent un capacity planning que les entreprises effectuent bien trop rarement.</p>
<p>Ikoula, une fois de plus pragmatique, suggère d&#8217;y aller calmement, de faire une étude sur la nécessité de virtualiser, sur les capacités du matériel à encaisser des VM:  10 VM sur une machine réelle ne communiquent que par 1 câble réseau <strong>réel </strong>qui n&#8217;aboutit qu&#8217;à un seul switch <strong>réel</strong>, d&#8217;où possibilité d&#8217;engorgement et d&#8217;atteinte des limites du &#8230; câble! Je n&#8217;avais effectivement pas réfléchis à cet aspect: tout virtuel qu&#8217;il soit, l&#8217;OS est hébergé par du matériel réel, qui a ses limites en termes de bande passante (réseau, I/O), stockage, mémoire, &#8230;</p>
<h3><strong>Conclusion</strong></h3>
<p>Je m&#8217;attendais, plein d&#8217;illusions, à de vrais débâts, j&#8217;ai assisté à un concours de &laquo;&nbsp;moi aussi je sais le faire&nbsp;&raquo;. Seul Ikoula apportait du réalisme face aux sirènes des éditeurs. Mais dans un tel schéma (une table de 7 éditeurs sur une estrade face une salle, pendant 2h) pouvait-il en être autrement? Le débat pouvait-il vraiment naître?</p>
<p>Pour autant les points soulevés étaient intéressants, et m&#8217;ont appris quelques choses:</p>
<ul>
<li>La virtualisation est un domaine relativement mature pour lequel il y a de l&#8217;offre, du déploiement jusqu&#8217;à la sauvegarde en passant par l&#8217;administration,</li>
<li>Il faut se poser quelques questions de bon sens avant de virtualiser: coût (des licences OS et logiciel de virtualisation), compétences, matériel, nécessité, &#8230;</li>
</ul>
<p>Moralité, la virtualisation n&#8217;est pas la solution à tous les problèmes, comme on aurait tendance à le croire. Les offres sont séduisantes, et plus matures que ce que je le pensais, mais ce n&#8217;est pour autant qu&#8217;il faut se jetter dessus, ce que j&#8217;ai l&#8217;impression que tout le monde fait. Avant de penser &laquo;&nbsp;aller hop hop hop zou je virtualise!&nbsp;&raquo; il convient de se demander si ça en vaut vraiment le coup/coût et si vous avez les capacité de gérer sur le long terme cette technologie particulière.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2410" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/mon-salon-linux-22/' rel='bookmark' title='Mon salon &#8230; linux (2/2)'>Mon salon &#8230; linux (2/2)</a></li>
<li><a href='http://blog.octo.com/presentation-industrialisation-java-au-salon-solutions-linux/' rel='bookmark' title='Présentation industrialisation Java au salon Solutions Linux [MAJ 17/03]'>Présentation industrialisation Java au salon Solutions Linux [MAJ 17/03]</a></li>
<li><a href='http://blog.octo.com/performances-de-build-java-sous-linux/' rel='bookmark' title='Performances de build Java sous Linux ?'>Performances de build Java sous Linux ?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/mon-salon-linux-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

