<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Armetiz - Thomas Tourlourat - CV Ingénieur Informatique</title>
	
	<link>http://www.armetiz.info</link>
	<description>Ingénieur Informatique - Lyon</description>
	<lastBuildDate>Mon, 14 May 2012 12:17:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/armetiz" /><feedburner:info uri="armetiz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Installer l’extension intl</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/LKjgRk3ASWk/</link>
		<comments>http://www.armetiz.info/installer-lextension-intl/#comments</comments>
		<pubDate>Mon, 14 May 2012 12:17:58 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2429</guid>
		<description><![CDATA[Pour travailler dans de bonne condition avec Symfony2, il vous faut l&#8217;extension intl. Voici la démarche à suivre pour l&#8217;installer avec pear. installer un compilateur C++ &#038; les libraries libicu-devel libicu yum install gcc-c++ libicu libicu-devel pear channel-update pear.php.net pear upgrade PEAR pecl channel-update pecl.php.net pear install intl Créer le fichier /etc/php.d/intl.ini et ajouter extension=intl.so]]></description>
			<content:encoded><![CDATA[<p>Pour travailler dans de bonne condition avec Symfony2, il vous faut l&#8217;extension <strong>intl</strong>.</p>
<p>Voici la démarche à suivre pour l&#8217;installer avec <strong>pear</strong>.</p>
<p>installer un compilateur C++ &#038; les libraries libicu-devel libicu</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">yum install gcc-c++ libicu libicu-devel</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">pear channel-update pear.php.net
pear upgrade PEAR
pecl channel-update pecl.php.net
pear install intl</pre></div></div>

<p>Créer le fichier <strong>/etc/php.d/intl.ini</strong> et ajouter</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000099;">extension</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">intl.so</span></pre></div></div>


<p><a href="http://feedads.g.doubleclick.net/~a/t0EGKmxY-OdPKM9AHVHP-3cFnVQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/t0EGKmxY-OdPKM9AHVHP-3cFnVQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/t0EGKmxY-OdPKM9AHVHP-3cFnVQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/t0EGKmxY-OdPKM9AHVHP-3cFnVQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/LKjgRk3ASWk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/installer-lextension-intl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/installer-lextension-intl/</feedburner:origLink></item>
		<item>
		<title>CentOS 6, Apache &amp; NFS</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/Nbsp4LWCFBY/</link>
		<comments>http://www.armetiz.info/centos-6-apache-nfs/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 11:39:41 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[NFS]]></category>
		<category><![CDATA[Problème]]></category>
		<category><![CDATA[SELinux]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2197</guid>
		<description><![CDATA[SELinux est installé et activé par défaut sur les installations CentOS 6. Pour mettre en place une infrastructure Web éclatée, j&#8217;ai choisis de mettre en place un serveur NFS qui héberge les fichiers de mes applications PHP. Les serveurs Apache sont donc configurés comme des clients NFS, et le DocumentRoot point vers le point de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.centos.org/HowTos/SELinux">SELinux</a> est installé et activé par défaut sur les installations CentOS 6.</p>
<p>Pour mettre en place une infrastructure Web éclatée, j&#8217;ai choisis de mettre en place un serveur NFS qui héberge les fichiers de mes applications PHP.<br />
Les serveurs Apache sont donc configurés comme des clients NFS, et le DocumentRoot point vers le point de montage NFS.</p>
<p>Au démarrage d&#8217;Apache :<br />
<strong>Warning: DocumentRoot [/var/www/tld.domain/subdomains/foo/httpdocs] does not exist</strong></p>
<p>Ce problème peut-être causé par un défault de configuration de SELinux,<br />
Pour vérifier on désactive SELinux et on relance Apache.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">setenforce Permissive
service httpd restart</pre></div></div>

<p>Si Apache démarre correctement, c&#8217;est donc bien une configuration SELinux qui bloque.<br />
Il faut modifier un <a href="http://wiki.centos.org/TipsAndTricks/SelinuxBooleans">booléen SELinux</a> : <strong>httpd_use_nfs</strong> qui est à &laquo;&nbsp;off&nbsp;&raquo; par défaut.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">setsebool httpd_use_nfs on</pre></div></div>

<p>Cela fonctionnera aussi apres un reboot de votre serveur.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/EdKqaaZ3eCtqZXcss1Q9dtjnG3A/0/da"><img src="http://feedads.g.doubleclick.net/~a/EdKqaaZ3eCtqZXcss1Q9dtjnG3A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/EdKqaaZ3eCtqZXcss1Q9dtjnG3A/1/da"><img src="http://feedads.g.doubleclick.net/~a/EdKqaaZ3eCtqZXcss1Q9dtjnG3A/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/Nbsp4LWCFBY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/centos-6-apache-nfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/centos-6-apache-nfs/</feedburner:origLink></item>
		<item>
		<title>Comment pourrir la vie d’un utilisateur Windows</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/ZECPFwddgNk/</link>
		<comments>http://www.armetiz.info/comment-pourrir-la-vie-dun-utilisateur-windows/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 11:30:33 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Pirate]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=1533</guid>
		<description><![CDATA[L&#8217;objectif est simple, pourrir la vie d&#8217;un utilisateur Windows. En pré-requis Vous devez avoir accès à un compte local sur l&#8217;ordinateur de votre victime. Ce compte doit être membre du groupe Administrateurs local.]]></description>
			<content:encoded><![CDATA[<p>L&#8217;objectif est simple, pourrir la vie d&#8217;un utilisateur Windows.</p>
<h3>En pré-requis</h3>
<ul>
<li>Vous devez avoir accès à un compte local sur l&#8217;ordinateur de votre victime. Ce compte doit être membre du groupe <strong>Administrateurs</strong> local.</li>
<liIl est préférable d'avoir des connaissances sur la <strong>gestion des MMC</strong> en générale.</li>
<li>Comme nous allons travailler à distance, il vous faut connaitre l&#8217;adresse IP du pauvre malheureux.</li>
</ul>
<h3>Phase 0 : La prise de la bastille</h3>
<p>Alors que cela est un pré-requit pour l&#8217;article, voici quelques astuces pour avoir accès à la session administrateur de votre victime et ainsi créer un autre compte d&#8217;administration dont vous connaissez le mot de passe.</p>
<ul>
<li>Le plus simple est d&#8217;aller sur le PC de votre <del datetime="2010-01-08T17:08:33+00:00">pigeon</del> cible lorsque celui-ci ira faire un pipi et qu&#8217;il aura oublié de verrouiller sa session.</li>
<li>S&#8217;il dispose d&#8217;une authentification par reconnaissance faciale, <a href="http://www.armetiz.info/securite-systemes-reconnaissance-faciale/">prenez une photo</a> <img src='http://www.armetiz.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Si vous avez du temps, et que vous pouvez démarrer à partir d&#8217;un CD ou d&#8217;une clé USB, utiliser <a href="http://www.armetiz.info/tester-vos-mots-de-passe-windows-ophcrack/">OphCrack</a></li>
</ul>
<h3>Phase 1 : Le camouflage</h3>
<p>Nous allons commencer par <strong>nous rendre invisible</strong> ! Par défaut, Windows affiche la liste des utilisateurs locaux de la machine avant l&#8217;ouverture de session.<br />
Sous Windows XP et Vista, vous pouvez suivre le petit tutoriel sur <a href="http://www.generation-nt.com/comment-cacher-compte-utilisateur-panneau-de-configuration-astuce-24667-1.html">Generation-NT</a>. Sous Windows 7, il suffit de rajouter un <strong>$</strong> à la fin du compte utilisateur pour le camoufler.</p>
<h3>Phase 2 : Début des hostilités</h3>
<p>Ouvrir la MMC <strong>Editeur d&#8217;objets de stratégie de groupe</strong>..</p>
<p>Le mieux, c&#8217;est que vous cherchiez dans les options&#8230; C&#8217;est assez intuitif, et facilement modifiable.<br />
Voici quelques exemples :
<ul>
<li>Supprimer l&#8217;affichage des disques durs dans le poste de travail.</li>
<li>Bloquer le volume au minimum</li>
<li>Empêcher l&#8217;accès au panneaux de configuration</li>
<li>Changer le fond d&#8217;écran.</li>
</ul>
<h3>Phase 2 : Après avoir poser les pièges, on joue!</h3>
<p>Pour pouvoir appliquer les modifications sur les Stratégie de groupe, il faut que votre victime redémarre son ordinateur.<br />
Deux possibilités, soit vous êtes patient, soit vous ne l&#8217;êtes pas&#8230;<br />
Nous, on est des ouf ! Nous allons donc forcer le redémarrage de la machine. Pour cela, télécharger l&#8217;outil <a href="http://technet.microsoft.com/fr-fr/sysinternals/bb897553.aspx">PsExec</a> développé par Windows.<br />
<blockquote>PsExec est un substitut léger à Telnet qui vous permet d&#8217;exécuter des processus sur d&#8217;autres systèmes, avec une interactivité totale pour les applications de console, sans avoir à installer manuellement le logiciel client.</p></blockquote>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">psexec \\ip-victime <span style="color: #660033;">-u</span> compteAdmin <span style="color: #660033;">-p</span> passwordAdmin shutdown <span style="color: #660033;">-t</span> <span style="color: #000000;">30</span></pre></div></div>

<p>Là où vous achevez votre œuvre, commence les déboires pour votre victime. Celui-ce verra en effet une boite de dialogue avec un jolie message &laquo;&nbsp;Il vous reste 30 secondes avant extinction de votre ordinateur&nbsp;&raquo;.</p>
<h3>Phase 3 : Détournement</h3>
<p>Amusez-vous à supprimer ses nouveaux films dans le répertoire <strong>Film</strong>. Attention, il faut être prudent et le faire uniquement lorsque celui-ci dispose d&#8217;une bonne collection. Quelques films supplémentaires passeront bien plus discrètement. </p>
<p>Un conseil, pensez au série. Si vous le savez Fan de Lost, supprimer le dernier épisode alors qu&#8217;il ne l&#8217;a pas encore vu, et vous pouvez être sur qu&#8217;il voudra le voir dans la soirée ou le weekend :p</p>
<p>Si quand vous allez sur Google vous voyez une grosse vidéo bien dégueulasse ? Vous gueuleriez.. Alors qu&#8217;attendons nous ?<br />
Ouvrez le fichier host de votre victime.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">\\ip-victime\C$\Windows\System32\drivers\etc\hosts</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">url_salase     google.fr</pre></div></div>

<p>Lorsque nous avons testé cette technique, nous avons monter un serveur Apache sur une machine locale, et en page d&#8217;accueil nous avions une vidéo fullscreen assez underground.</p>
<h3>Sans accès</h3>
<p>Si vous ne disposez pas d&#8217;accès administrateur à la machine,</p>
<p>Vous pouvez jouer un peu. Lorsque l&#8217;utilisateur verrouille sa session, appuyez sur les touche &laquo;&nbsp;Alt + Shift&nbsp;&raquo;. Cela a pour effet de passer le clavier de &laquo;&nbsp;Fr&nbsp;&raquo; à &laquo;&nbsp;En&nbsp;&raquo;, et donc <strong>Azerty</strong> vers <strong>Qwerty</strong>.<br />
Lorsque l&#8217;utilisateur voudra se reconnecter, il mettra un peu plus de temps que d&#8217;habitude <img src='http://www.armetiz.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>PS : L&#8217;article était en brouillon sur mon blog depuis 2008. Excuse moi pour le style adolescent.</strong></p>

<p><a href="http://feedads.g.doubleclick.net/~a/2JmQfseKBYLbeFkG2AHArNqc7YE/0/da"><img src="http://feedads.g.doubleclick.net/~a/2JmQfseKBYLbeFkG2AHArNqc7YE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2JmQfseKBYLbeFkG2AHArNqc7YE/1/da"><img src="http://feedads.g.doubleclick.net/~a/2JmQfseKBYLbeFkG2AHArNqc7YE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/ZECPFwddgNk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/comment-pourrir-la-vie-dun-utilisateur-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/comment-pourrir-la-vie-dun-utilisateur-windows/</feedburner:origLink></item>
		<item>
		<title>Que faire à montréal – Application RIA</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/yGyZntqliMA/</link>
		<comments>http://www.armetiz.info/que-faire-a-montreal-application-ria/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 11:14:47 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Deezer]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Montreal]]></category>
		<category><![CDATA[Référencement]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=231</guid>
		<description><![CDATA[Made in Montréal Outil d&#8217;exploration basé sur une application RIA utilisant la technologie Flash d&#8217;Adobe. MadeinMTL.com regorge d&#8217;informations sur les bons coins de Montréal. Le site n&#8217;est pas tout jeune, il a été ouvert en 2003, et une nouvelle version de leur application à vu le jour récemment. Quand on regarde la partie &#171;&#160;A propos&#171;&#160;, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.madeinmtl.com"><img src="http://www.armetiz.info/wp-content/uploads/2008/09/capture.png" alt="" title="MadeinMTL Logo" width="77" height="77" class="alignright size-medium wp-image-259" /></a></p>
<h3>Made in Montréal</h3>
<p>Outil d&#8217;exploration basé sur une application RIA utilisant la technologie Flash d&#8217;Adobe.<br />
<a href="http://www.madeinmtl.com">MadeinMTL.com</a> regorge d&#8217;informations sur les bons coins de Montréal.</p>
<p>Le site n&#8217;est pas tout jeune, il a été ouvert en 2003, et une nouvelle version de leur application à vu le jour récemment.<br />
Quand on regarde la partie &laquo;&nbsp;<em>A propos</em>&laquo;&nbsp;, nous observons :</p>
<blockquote><p>MadeinMTL permet l&#8217;exploration virtuelle de Montréal, â travers plus de <strong>15 000 photos</strong>, <strong>400 textes</strong>, <strong>50 heures</strong> de vidéo, <strong>40 capsules sonores</strong> et <strong>25 courts-métrages</strong>, intégrés dans un <em>environnement organique</em>, qui traduit l&#8217;expérience véritable que nous avons d&#8217;une ville en y habitant ou en la visitant. </p></blockquote>
<p><strong>PS : L&#8217;article était en brouillon sur mon blog depuis 2008.</strong></p>

<p><a href="http://feedads.g.doubleclick.net/~a/v-yrfTChD16EoV69q7dzt5UIlXg/0/da"><img src="http://feedads.g.doubleclick.net/~a/v-yrfTChD16EoV69q7dzt5UIlXg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/v-yrfTChD16EoV69q7dzt5UIlXg/1/da"><img src="http://feedads.g.doubleclick.net/~a/v-yrfTChD16EoV69q7dzt5UIlXg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/yGyZntqliMA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/que-faire-a-montreal-application-ria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/que-faire-a-montreal-application-ria/</feedburner:origLink></item>
		<item>
		<title>Livre – Beginning PhoneGap</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/RzNzZdMtQEE/</link>
		<comments>http://www.armetiz.info/livre-beginning-phonegap/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 07:35:33 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Livres]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[Production]]></category>
		<category><![CDATA[Projet]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2302</guid>
		<description><![CDATA[Beginning PhoneGap, Mobile Web Framework for JavaScript and HTML5 se propose de vous faire découvrir PhoneGap. Ce livre n&#8217;a pas été pour moi un coups de coeur. Vous trouverez une centaine de pages sur PhoneGap, les autres 200 pages seront sur jQueryMobile, Sencha ou autres frameworks. Du coups, je ne vous recommande pas la lecture [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.fr/Beginning-PhoneGap-Mobile-Framework-JavaScript/dp/1430239034/"><img src="http://www.armetiz.info/wp-content/uploads/2012/04/beginning_phonegap.jpg" alt="beginning_phonegap" title="beginning_phonegap" width="150" height="150" class="alignleft size-full wp-image-2303" /></a><a href="http://www.amazon.fr/gp/product/1430239034/">Beginning PhoneGap, Mobile Web Framework for JavaScript and HTML5</a> se propose de vous faire découvrir <a href="http://phonegap.com/">PhoneGap</a>.</p>
<p>Ce livre n&#8217;a pas été pour moi un coups de coeur. Vous trouverez une centaine de pages sur PhoneGap, les autres 200 pages seront sur <a href="http://jquerymobile.com/">jQueryMobile</a>, <a href="http://www.sencha.com/">Sencha</a> ou autres frameworks.</p>
<p>Du coups, <strong>je ne vous recommande pas</strong> la lecture de ce livre pour découvrir <strong>PhoneGap</strong>.<br />
Afin d&#8217;aller plus loin, <a href="http://www.kitpages.fr/news">Kitpages</a> m&#8217;a conseillé la lecture de <a href="http://www.amazon.fr/Phonegap-Beginners-Guide-Andrew-Lunny/dp/1849515360/">Phonegap Beginner&#8217;s Guide</a> qui semble être un ouvrage portant sur l&#8217;utilisation de PhoneGap lui meme plus que sur les frameworks qui peuvent améliorer la production de projet via PhoneGap.<br />
<a href="http://phonegap.com/"><img src="http://www.armetiz.info/wp-content/uploads/2012/04/phonegap.jpg" alt="phonegap" title="phonegap" width="130" height="130" class="alignright size-full wp-image-2307" /></a></p>
<h3>PhoneGap</h3>
<p>D&#8217;après ce que j&#8217;en ai vu le produit semble très interessant pour de <strong>petit projet</strong>. </p>
<p>L&#8217;interêt principal étant de pouvoir réaliser rapidement une WebAPP HTML/CSS/JS et compiler sans effort via <a href="https://build.phonegap.com/">PhoneGap Builder</a> pour les principaux acteurs mobiles.</p>
<p>Les projets un peu <strong>touchy</strong> auront sans doute plus de difficulté à trouver un avantage à l&#8217;utilisation de PhoneGap. </p>

<p><a href="http://feedads.g.doubleclick.net/~a/s5yx7H53S8WYa-kHIjiyIE1hYfE/0/da"><img src="http://feedads.g.doubleclick.net/~a/s5yx7H53S8WYa-kHIjiyIE1hYfE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/s5yx7H53S8WYa-kHIjiyIE1hYfE/1/da"><img src="http://feedads.g.doubleclick.net/~a/s5yx7H53S8WYa-kHIjiyIE1hYfE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/RzNzZdMtQEE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/livre-beginning-phonegap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/livre-beginning-phonegap/</feedburner:origLink></item>
		<item>
		<title>Livre – MongoDB in Action</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/WzXL5ONt9YA/</link>
		<comments>http://www.armetiz.info/livre-mongodb-in-action/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 10:38:14 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Livres]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Découverte]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Driver]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RDBMS]]></category>
		<category><![CDATA[SGBDR]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transaction]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2275</guid>
		<description><![CDATA[Je souhaitais approfondir MongoDB depuis un petit moment déjà. Et bien qu&#8217;il y ai suffisamment de ressource sur le site officiel, la lecture d&#8217;un ouvrage papier a toujours été pour moi un luxe lors des mes découvertes techniques. MongoDB Pour commencer, C&#8217;est un serveur de base de donnée NoSQL stockant les données sous forme de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.fr/MongoDB-Action-Kyle-Banker/dp/1935182870"><img src="http://www.armetiz.info/wp-content/uploads/2012/03/mongodb-in-action.png" alt="mongodb-in-action" title="mongodb-in-action" width="150" height="188" class="size-full wp-image-2277 alignright" /></a>Je souhaitais approfondir <strong><a href="http://www.mongodb.org/">MongoDB</a></strong> depuis un petit moment déjà. Et bien qu&#8217;il y ai suffisamment de ressource sur le site officiel, la lecture d&#8217;un ouvrage papier a toujours été pour moi un luxe lors des <a href="http://www.armetiz.info/category/livres/">mes découvertes techniques</a>. </p>
<h3>MongoDB</h3>
<p>Pour commencer,<br />
C&#8217;est un serveur de base de donnée <strong>NoSQL</strong> stockant les données sous forme de <strong>Document</strong>.<br />
Contrairement à d&#8217;autres serveurs NoSQL comme Redis qui ne permet un acces aux données que par une clé unique, MongoDB permet d&#8217;acceder à un ou plusieurs Document via un <strong>système de requête</strong> pouvant utiliser des <strong>indexes</strong>.<br />
MongoDB c&#8217;est aussi un déploiement <strong>Haute Disponibilité</strong> simplifié par la Réplication, une répartition des données &#8211; <strong>Sharding</strong> &#8211; possible pour les projets d&#8217;envergures, du <strong>Map/Reduce</strong> et du stockage de fichier via <strong>GridFS</strong>.<br />
Bref, c&#8217;est une mine d&#8217;or pour les technophiles.</p>
<h3>Le livre</h3>
<p>Ce livre s&#8217;adresse à ceux souhaitant découvrir MongoDB, voici les différents chapitres</p>
<ul>
<li>A database for the modern web</li>
<li>MongoDB through the JavaScript shell</li>
<li>Writting programs using MongoDB</li>
<li><strong>Document-oriented data</strong></li>
<li><strong>Queries</strong> and aggregation</li>
<li><strong>Updates, atomic operations</strong>, and deletes</li>
<li>Indexing and query optimization</li>
<li><strong>Replication</strong></li>
<li>Sharding</li>
<li>Deployment and administration</li>
</ul>
<p>Il s&#8217;agit d&#8217;un <strong>ouvrage écrit en Anglais</strong> dans un registre légèrement plus soutenu que les autres livres techniques Anglais. Heureusement il ne s&#8217;agit pas d&#8217;un roman, on comprends donc assez facilement les messages que souhaite faire passer l&#8217;auteur.</p>
<p><a href="http://www.mongodb.org/"><img src="http://www.armetiz.info/wp-content/uploads/2012/03/mongodb-115x115.jpg" alt="mongodb" title="mongodb" width="115" height="115" class="size-full wp-image-2286 alignleft" /></a>Dès les 50 premieres pages, j&#8217;ai été <strong>convaincu</strong> par cette &laquo;&nbsp;nouvelle&nbsp;&raquo; technologie !<br />
J&#8217;avais énormément de question sur la structure d&#8217;un projet MongoDB et la migration depuis un SGBDR.<br />
C&#8217;est là que les exemples sont très parlant et illustrent les problématiques qu&#8217;un développeur rencontra à coups sûr. On trouve réponse à de nombreuses questions concernant la conception d&#8217;un projet avec MongoDB.</p>
<p>La partie qui m&#8217;a un peu déçu concerne le<strong> Sharding sous MongoDB</strong>.<br />
Je m&#8217;attendais à une fonctionnalité simple à mettre en place alors qu&#8217;en fait, cela implique quelques contraintes sur les indexes, et alourdit de maniere significative l&#8217;administration.<br />
Au final, c&#8217;est moi qui avait un mauvais jugement, le Sharding étant une fonctionnalité tellement excellente pour les entreprises disposant d&#8217;un jeux de données colossale qu&#8217;il ne fallait pas s&#8217;attendre à une simple commande CLI. <em>De grands pouvoirs impliquent de grandes responsabilités !</em> </p>
<h3>Pour conclure</h3>
<p><strong>MongoDB</strong> a un avenir plus que certain au sein de nos SI. Il manque encore un peu de <strong>maturité</strong> à ce projet pour qu&#8217;il puisse s&#8217;imposer face à MySQL. Mais un jour on utilisera les <strong>SGBDR</strong> uniquement lorsque l&#8217;on aura des contraintes liées aux transactions ou à une propriété dédiée des nos SGBRD.</p>
<h3>Pour aller un peu plus loin</h3>
<p><a href="http://www.doctrine-project.org/"><img src="http://www.armetiz.info/wp-content/uploads/2012/03/doctrine.png" alt="doctrine" title="doctrine" width="191" height="53" class="size-full wp-image-2285 alignright" /></a><br />
Si vous êtes développeur PHP, je vous recommande fortement la lecture du projet <a href="http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/index.html">Doctrine MongoDB ODM</a>.<br />
Mon point de vue est qu&#8217;il s&#8217;agit d&#8217;un must have sur les projets MongoDB.<br />
Sans parler de la possibilité de faire du <strong>mapping vers des POJO</strong>, MongoDB ODM permet d&#8217;assembler deux collections liés par des références, et je vous laisse découvrir l&#8217;intérêt du <a href="http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/priming-references.html">priming</a> qui ne vous laissera surement pas de marbre.</p>
<p>Commander le livre sur <a href="http://www.amazon.fr/MongoDB-Action-Kyle-Banker/dp/1935182870">Amazon</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/zaPtWYfQqkCEgSHrERBTTDoqZNI/0/da"><img src="http://feedads.g.doubleclick.net/~a/zaPtWYfQqkCEgSHrERBTTDoqZNI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zaPtWYfQqkCEgSHrERBTTDoqZNI/1/da"><img src="http://feedads.g.doubleclick.net/~a/zaPtWYfQqkCEgSHrERBTTDoqZNI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/WzXL5ONt9YA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/livre-mongodb-in-action/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/livre-mongodb-in-action/</feedburner:origLink></item>
		<item>
		<title>CentOS 6 – Varnish &amp; GeoIP</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/Lq6lQR03Z0E/</link>
		<comments>http://www.armetiz.info/centos-6-varnish-geoip/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 10:10:27 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Compilation]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[GeoIP]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Module]]></category>
		<category><![CDATA[Pays]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Varnish]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2202</guid>
		<description><![CDATA[Nous allons voir comment déporter le système de géo-localisation IP sur Varnish. L&#8217;objectif final est de permettre à vos backends de récupérer le Pays de l&#8217;utilisateur au sein de la requête HTTP. Par défault, Varnish n&#8217;intègre pas de système de géo-localisation par IP, en revanche il existe quelques plugins qui permettent l&#8217;utilisation de GeoIP de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.armetiz.info/wp-content/uploads/2011/12/centos.png"><img src="http://www.armetiz.info/wp-content/uploads/2011/12/centos.png" alt="centos" title="centos" width="128" height="128" class="alignright size-full wp-image-2188" /></a>Nous allons voir comment déporter le système de <strong>géo-localisation IP</strong> sur Varnish.<br />
L&#8217;objectif final est de permettre à vos backends de récupérer le Pays de l&#8217;utilisateur au sein de la requête HTTP.</p>
<p>Par défault, Varnish n&#8217;intègre pas de système de géo-localisation par IP, en revanche il existe quelques plugins qui permettent l&#8217;utilisation de <a href="http://www.maxmind.com/app/c">GeoIP de MaxMind</a>.</p>
<p>Voici les parties de l&#8217;article :</p>
<ul>
<li>Installation de Varnish</li>
<li>Installation de GeoIP pour Varnish</li>
<li>Configuration du Varnish Module</li>
<li>Configuration de SELinux</li>
</ul>
<p>A noter que nous avons opter pour le <a href="https://www.varnish-cache.org/docs/3.0/reference/vmod.html">VMOD</a> <a href="https://github.com/leed25d/geoip-vmod">Geoip-vmod par leed25d</a>. Contrairement aux autres plugins, celui-ci ne travail pas le header HTTP de manière autonome. Ce sera à vous de le faire, et grâce à cela vous allez pouvoir choisir comment&#8230;</p>
<h3>Varnish</h3>
<p>Pour compiler le VMOD, il vous faudra récupérer les sources de Varnish et les compiler même si vous choisissez l&#8217;installation par YUM.<br />
De mon coté, je n&#8217;utilise pas en production la version que je compile mais la version provenant du dépot <a href="https://www.varnish-cache.org/">varnish-cache.org</a>. A vous de voir.</p>
<p>Commençons par l&#8217;installation de Varnish via YUM (cf. <a href="https://www.varnish-cache.org/installation/redhat">Doc officielle</a>):</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm
yum install varnish</pre></div></div>

<p>Pour compiler Varnish nous allons avoir besoin de quelques outils et des sources.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">yum install pcre-devel make
cd &amp;&amp; curl -o varnish-source.tar.gz http://repo.varnish-cache.org/source/varnish-3.0.2.tar.gz
tar -xvzf varnish-source.tar.gz</pre></div></div>

<p>On lance la compilation de Varnish.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">cd varnish-3.0.2/
./configure
make</pre></div></div>

<p>Normalement, Varnish a été compilé dans votre repertoire <strong>$HOME/varnish-3.0.2/</strong>.</p>
<h3>GeoIP VMOD</h3>
<p>On récupère les sources sur <a href="https://github.com/leed25d/geoip-vmod">github</a>.</p>
<p>Après l&#8217;installation de quelques outils dont GeoIP, on lance la compilation du VMOD.<br />
Attention, pour les version 32Bits utiliser <strong>VMODDIR=/usr/lib/varnish/vmods/</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">yum install unzip automake autoinstall libtool geoip geoip-devel
unzip leed25d-geoip-vmod-[REVISION].zip
cd leed25d-geoip-vmod-[REVISION]
./autogen.sh
./configure VARNISHSRC=$HOME/varnish-3.0.2/ VMODDIR=/usr/lib64/varnish/vmods/
make
make install</pre></div></div>

<p>Suite à l&#8217;installation Varnish, penser à ouvrir votre firewall.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">#/etc/sysconfig/iptables
-A INPUT -m tcp -p tcp --dport 80 -j ACCEPT</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">service iptables restart</pre></div></div>

<p>De même, il faut configurer Varnish pour écouter sur le <strong>port 80</strong> à la place du <strong>6081</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">#/etc/sysconfig/varnish&lt;/strong&gt;
VARNISH_LISTEN_PORT=80</pre></div></div>

<p>Ensuite, on va vérifier que l&#8217;on peut lancer Varnish en chargeant le plugin GeoIP.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#/etc/varnish/default.vcl</span>
<span style="color: #339933;">#Top of file.</span>
import geoip<span style="color: #339933;">;</span></pre></div></div>

<p>On va lancer le processus en debug pour voir si tout se passe bien :</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">varnishd -d -f /etc/varnish/default.vcl
start</pre></div></div>

<p>Si vous n&#8217;avez pas d&#8217;erreur, c&#8217;est une bonne chose. Sinon, vérifier les étapes ci-dessus.</p>
<p>On va donc pouvoir inclure le pays de l&#8217;utilisateur dans le Header HTTP en suivant l&#8217;exemple de l&#8217;auteur du VMOD</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#/etc/varnish/default.vcl</span>
import geoip<span style="color: #339933;">;</span>
&nbsp;
sub vcl_recv <span style="color: #009900;">&#123;</span>
    set req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span>For <span style="color: #339933;">=</span> client.<span style="color: #202020;">ip</span><span style="color: #339933;">;</span>
    set req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>GeoIP <span style="color: #339933;">=</span> geoip.<span style="color: #202020;">country</span><span style="color: #009900;">&#40;</span>req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span>For<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Maintenant on va pouvoir mettre Varnish en démarrage automatique.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">chkconfig varnish on
service varnish start</pre></div></div>

<p><strong>Attention:</strong><br />
Sachant que vous êtes sous CentOS, SELinux est surement activé et bloquera l&#8217;access au fichier de données <strong>/usr/share/GeoIP/GeoIP.dat</strong>. Vous pouvez le désactiver ou aller voir à la fin de l&#8217;article comment le configurer aux petits oignons.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">setenforce 0</pre></div></div>

<p>Et pour finir, un peu de ménage.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">cd &amp;&amp; rm -Rf varnish-* &amp;&amp; rm -Rf leed25d-*
yum remove pcre-devel make unzip automake autoinstall geoip-devel</pre></div></div>

<h3>Pour aller plus loin</h3>
<p>Avec la configuration ci-dessus,<br />
Si un client de France se connecte directement à Varnish, lorsqu&#8217;une requête sera générée pour atteindre vos backends elle contiendra : <strong>X-GeoIP: FR</strong></p>
<p>Vous pourrez donc récupérer le pays de l&#8217;utilisateur en analysant le contenu de la requête HTTP.<br />
Il est à noter que GeoIP retourne le code pays &laquo;&nbsp;<strong>AA</strong>&nbsp;&raquo; lorsqu&#8217;il ne parvient pas à faire la détection.</p>
<p>Voici comment vous pouvez exploiter le contenu du header en PHP :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$headers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">apache_request_headers</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$code</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$headers</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$headers</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;X-GeoIP&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$headers</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$code</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$headers</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;X-GeoIP&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$code</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">||</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;AA&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$code</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$code</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDefaultCountry</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$code</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$code</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Retournons du coté de Varnish.<br />
Comment les choses vont se passer si vous ajoutez un <strong>Proxy en amont de Varnish</strong>. Par exemple, <a href="http://www.apsis.ch/pound">Pound</a> pour gérer le protocole HTTPS.</p>
<p>La detection du pays ne fonctionnera plus normalement car la valeur contenu dans le script VCL &#8216;<strong>client.ip</strong>&#8216; correspondra à l&#8217;IP de votre serveur Pound.</p>
<p>Nous allons donc devoir travailler avec un autre Header HTTP: <a href="http://en.wikipedia.org/wiki/X-Forwarded-For">X-Forwarded-For</a>. Celui-ci permet de conserver l&#8217;historique des différents point de passage d&#8217;une requête HTTP et contient l&#8217;IP du client qui a initié la connection HTTP.</p>
<p>Lorsque les différents Proxy implementent correctement ce standard, le champs <strong>X-Forwarded-For</strong> contient l&#8217;IP du client, le proxy A, le proxy B, etc.. le tout séparé avec des virgules.</p>
<p>Voici comment en tenir compte au sein de votre configuration VCL :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">sub vcl_recv <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//...</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>req.<span style="color: #202020;">restarts</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>req.<span style="color: #202020;">http</span>.<span style="color: #202020;">x</span><span style="color: #339933;">-</span>forwarded<span style="color: #339933;">-</span><span style="color: #b1b100;">for</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            set req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span>For <span style="color: #339933;">=</span>
            req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span>For <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;, &quot;</span> <span style="color: #339933;">+</span> client.<span style="color: #202020;">ip</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            set req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span>For <span style="color: #339933;">=</span> client.<span style="color: #202020;">ip</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    set req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>GeoIP <span style="color: #339933;">=</span> geoip.<span style="color: #202020;">country</span><span style="color: #009900;">&#40;</span>regsub <span style="color: #009900;">&#40;</span>req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span>For<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;(,.*)&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Maintenant parlons un peu du <strong>système de cache de Varnish</strong>.<br />
Si vous avez besoin de connaitre le pays de l&#8217;utilisateur, il y a donc fort à parier que le contenu retourné à l&#8217;utilisateur sera different en fonction de son Pays.</p>
<p>En résumé, pour une URL : <strong>/mon-url</strong>, en fonction du Pays utilisateur le contenu sera different.<br />
Si on conserve la spécification par défaut de Varnish qui consiste à mettre en cache les données provenant d&#8217;une même URL, vous allez avoir quelques mauvaises surprises.</p>
<p>Voici comment tenir compte du pays de l&#8217;utilisateur pour gérer les données qui sont mises en cache.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">sub vcl_hash <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//...</span>
&nbsp;
    hash_data<span style="color: #009900;">&#40;</span>req.<span style="color: #202020;">url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    hash_data<span style="color: #009900;">&#40;</span>req.<span style="color: #202020;">http</span>.<span style="color: #202020;">X</span><span style="color: #339933;">-</span>GeoIP<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//...</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>hash<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>SELinux</h3>
<p>Sous Centos, il y a SELinux.<br />
Si vous n&#8217;êtes pas un expert en <strong>sécurité Linux</strong>. Voici comment faire fonctionner <strong>Varnish &#038; GeoIP</strong> sans désactiver SELinux.<br />
Le processus Varnish fait parti d&#8217;un contexte SELinux different du fichier GetIP.dat qui est installé avec GeoIP.<br />
Du coup, nous allons faire un module pour SELinux afin d&#8217;autoriser varnish_t à lire les contextes de type usr_t.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">mkdir ~/myvarnish; cd ~/myvarnish;
echo &quot;policy_module(myvarnish, 1.0.0) optional_policy(\` gen_require(\` type varnishd_t; ') files_read_usr_files(varnishd_t) ')&quot; &gt; myvarnish.te
make -f /usr/share/selinux/devel/Makefile myvarnish.pp
semodule -i myvarnish.pp</pre></div></div>

<p>Pour le coup, cette partie provient d&#8217;une discussion avec une personne sur #SELinux on <em>freenode</em>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/rxCAo_gHhsBIrrU2yxXe2wz36y0/0/da"><img src="http://feedads.g.doubleclick.net/~a/rxCAo_gHhsBIrrU2yxXe2wz36y0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/rxCAo_gHhsBIrrU2yxXe2wz36y0/1/da"><img src="http://feedads.g.doubleclick.net/~a/rxCAo_gHhsBIrrU2yxXe2wz36y0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/Lq6lQR03Z0E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/centos-6-varnish-geoip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/centos-6-varnish-geoip/</feedburner:origLink></item>
		<item>
		<title>Pound HTTPS 2 HTTP – Format Certificat</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/JOj3YPhEwwA/</link>
		<comments>http://www.armetiz.info/pound-https-2-http-certificat-pem-format/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 05:00:34 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Pound]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2224</guid>
		<description><![CDATA[Au niveau de la configuration, Pound peut prendre un fichier .pem contenant les certificats du serveurs ainsi que des certificats intermédiaires jusqu&#8217;à l&#8217;autorité de certification ROOT. Ce que je ne savais pas et que j&#8217;ai eu beaucoup de mal à trouver, c&#8217;est qu&#8217;il faut inclure la clé privée du certificat pour que Pound puisse démarrer. [...]]]></description>
			<content:encoded><![CDATA[<p>Au niveau de la configuration, <strong><a href="http://www.apsis.ch/pound/index_html">Pound</a></strong> peut prendre un fichier .pem contenant les <strong>certificats du serveurs</strong> ainsi que des <strong>certificats intermédiaires</strong> jusqu&#8217;à l&#8217;autorité de <strong>certification ROOT</strong>.</p>
<p>Ce que je ne savais pas et que j&#8217;ai eu beaucoup de mal à trouver, c&#8217;est qu&#8217;il faut inclure la <strong>clé privée du certificat</strong> pour que Pound puisse démarrer.<br />
Sans cette clé privée, voici l&#8217;erreur que vous pouvez avoir : SSL_CTX_use_PrivateKey_file Error</p>
<p>Du coups, voici le format à utiliser :</p>
<blockquote><p>
&#8212;&#8211;BEGIN PRIVATE KEY&#8212;&#8211;<br />
Server key (pasted in the new key here)<br />
&#8212;&#8211;END PRIVATE KEY&#8212;&#8211;</p>
<p>&#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211;<br />
Server certificate<br />
&#8212;&#8211;END CERTIFICATE&#8212;&#8211;</p>
<p>&#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211;<br />
Verisign Intermediate CA (for Extended Validation Certificates)<br />
&#8212;&#8211;END CERTIFICATE&#8212;&#8211;</p>
<p>&#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211;<br />
Verisign Root CA (Self signed)<br />
&#8212;&#8211;END CERTIFICATE&#8212;&#8211;
</p></blockquote>
<p>PS : Information trouvée sur une archive Mailing List :<a href="http://www.apsis.ch/pound/pound_list/archive/2007/2007-11/1195693266000">apsis</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/WYTHbJedvschUkJHBgTAuIMNdBg/0/da"><img src="http://feedads.g.doubleclick.net/~a/WYTHbJedvschUkJHBgTAuIMNdBg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/WYTHbJedvschUkJHBgTAuIMNdBg/1/da"><img src="http://feedads.g.doubleclick.net/~a/WYTHbJedvschUkJHBgTAuIMNdBg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/JOj3YPhEwwA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/pound-https-2-http-certificat-pem-format/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/pound-https-2-http-certificat-pem-format/</feedburner:origLink></item>
		<item>
		<title>Linux – Trouver les fichiers contenant une chaine de caractere</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/6AbXv6GUjtE/</link>
		<comments>http://www.armetiz.info/linux-trouver-les-fichiers-contenant-string/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 10:43:15 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[automatique]]></category>
		<category><![CDATA[Fichier]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[Post-it]]></category>
		<category><![CDATA[Recherche]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[xargs]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2221</guid>
		<description><![CDATA[A chaque fois que j&#8217;ai besoin de chercher une liste de fichier contenant une chaine de caractere, je passe 15min à trouver la bonne commande. Donc voici un aide mémoire : find . &#124; xargs grep 'string' -sl Plus simple : grep -lR &#34;string&#34; *]]></description>
			<content:encoded><![CDATA[<p>A chaque fois que j&#8217;ai besoin de chercher une liste de fichier contenant une chaine de caractere, je passe 15min à trouver la bonne commande.</p>
<p>Donc voici un aide mémoire :</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">find . | xargs grep 'string' -sl</pre></div></div>

<p>Plus simple :</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">grep -lR &quot;string&quot; *</pre></div></div>


<p><a href="http://feedads.g.doubleclick.net/~a/S1cO8Zsmcz0lcrq6Xd3XFYtyerg/0/da"><img src="http://feedads.g.doubleclick.net/~a/S1cO8Zsmcz0lcrq6Xd3XFYtyerg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/S1cO8Zsmcz0lcrq6Xd3XFYtyerg/1/da"><img src="http://feedads.g.doubleclick.net/~a/S1cO8Zsmcz0lcrq6Xd3XFYtyerg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/6AbXv6GUjtE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/linux-trouver-les-fichiers-contenant-string/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/linux-trouver-les-fichiers-contenant-string/</feedburner:origLink></item>
		<item>
		<title>CentOS 6 – Installer APC</title>
		<link>http://feedproxy.google.com/~r/armetiz/~3/uB2O6klBvI8/</link>
		<comments>http://www.armetiz.info/centos-6-installer-apc/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 13:32:31 +0000</pubDate>
		<dc:creator>Thomas Tourlourat</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Compilation]]></category>
		<category><![CDATA[Optimisation]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.armetiz.info/?p=2185</guid>
		<description><![CDATA[Apres avoir installé et configuré correctement votre environnement LAMP sous CentOS 6 vous souhaitez installer APC. Ce dont vous avez besoin avant de commencer : - PEAR, - les interfaces de développement de PHP, Apache &#038; PCRE, - un compilateur C &#038; l&#8217;outil Make. yum install php-pear php-devel httpd-devel pcre-devel gcc make Ensuite, on lance [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.armetiz.info/wp-content/uploads/2011/12/centos.png"><img src="http://www.armetiz.info/wp-content/uploads/2011/12/centos.png" alt="centos" title="centos" width="128" height="128" class="alignright size-full wp-image-2188" /></a>Apres avoir installé et configuré correctement votre environnement LAMP sous CentOS 6 vous souhaitez <strong>installer APC</strong>.</p>
<p>Ce dont vous avez besoin avant de commencer :<br />
- <strong>PEAR</strong>,<br />
- les interfaces de développement de PHP, Apache &#038; PCRE,<br />
- un <strong>compilateur C</strong> &#038; l&#8217;outil <strong>Make</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">yum install php-pear php-devel httpd-devel pcre-devel gcc make</pre></div></div>

<p>Ensuite, on lance la compilation de l&#8217;extension APC.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">pecl install apc</pre></div></div>

<p>Voici les questions qui vous seront posées, personnellement j&#8217;ai utilisé les valeurs par défaut.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">Enable internal debugging in APC [no] : 
Enable per request file info about files used from the APC cache [no] : 
Enable spin locks (EXPERIMENTAL) [no] : 
Enable memory protection (EXPERIMENTAL) [no] : 
Enable pthread mutexes (default) [yes] : 
Enable pthread read/write locks (EXPERIMENTAL) [no] :</pre></div></div>

<p>On active l&#8217;<strong>extension PHP</strong></p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">echo &quot;extension=apc.so&quot; &gt; /etc/php.d/apc.ini</pre></div></div>

<p>Et on redémarre Apache.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">service httpd restart</pre></div></div>

<p>Vous pouvez vérifier que vous avez correctement installé APC via <strong>phpinfo</strong>().</p>
<p>Aussi, n&#8217;hésiter pas à utiliser le script PHP d&#8217;administration de APC.<br />
Ici, nous le copions dans notre répertoire HTTP.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">cp /usr/share/pear/apc.php /var/www/apc.php</pre></div></div>


<p><a href="http://feedads.g.doubleclick.net/~a/InKgyxPgrgKxNQp_FZv7-HLTnuo/0/da"><img src="http://feedads.g.doubleclick.net/~a/InKgyxPgrgKxNQp_FZv7-HLTnuo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/InKgyxPgrgKxNQp_FZv7-HLTnuo/1/da"><img src="http://feedads.g.doubleclick.net/~a/InKgyxPgrgKxNQp_FZv7-HLTnuo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/armetiz/~4/uB2O6klBvI8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.armetiz.info/centos-6-installer-apc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.armetiz.info/centos-6-installer-apc/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.812 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-14 14:29:09 --><!-- Compression = gzip -->

