<?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>Le blog de Bertrand PERALTA &#187; Technologie</title>
	<atom:link href="http://bertrand.peralta.fr/categorie/technologie/feed/" rel="self" type="application/rss+xml" />
	<link>http://bertrand.peralta.fr</link>
	<description></description>
	<lastBuildDate>Thu, 21 Jan 2010 21:20:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL et le moteur Blackhole</title>
		<link>http://bertrand.peralta.fr/2009/10/14/mysql-et-le-moteur-blackhole/</link>
		<comments>http://bertrand.peralta.fr/2009/10/14/mysql-et-le-moteur-blackhole/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 20:55:56 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Blackhole]]></category>
		<category><![CDATA[Réplication]]></category>

		<guid isPermaLink="false">http://bertrand.peralta.fr/?p=155</guid>
		<description><![CDATA[MySQL a l&#8217;avantage de pouvoir fonctionner avec différents moteur de stockage. Les plus connus sont sans aucun doute MyISAM, moteur historique très rapide en lecture mais dépourvu de transaction, et InnoDB qui est un moteur transactionnel capable d&#8217;absorber des charges plus importantes. Plusieurs autres moteurs sont également disponibles et répondent à des besoins particuliers. Memory [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL a l&#8217;avantage de pouvoir fonctionner avec différents moteur de stockage. Les plus connus sont sans aucun doute MyISAM, moteur historique très rapide en lecture mais dépourvu de transaction, et InnoDB qui est un moteur transactionnel capable d&#8217;absorber des charges plus importantes. Plusieurs autres moteurs sont également disponibles et répondent à des besoins particuliers. Memory permet par exemple d&#8217;utiliser des tables en mémoire. Enfin le moteur Blackhole permet comme son nom l&#8217;indique de ne rien stocker ! Alors me direz-vous à quoi cela peut-il bien servir un moteur de stockage qui ne stocke rien ??</p>
<p><strong>Le moteur Blackhole et la réplication</strong></p>
<p>Dans un système à forte charge il est fréquent de trouver plusieurs serveurs MySQL synchronisés entre eux via la réplication des données. Toutes les données ajoutées sur le serveur Maître sont sont enregistrées dans un journal qui est alors envoyé sur les différents serveurs Esclave pour y être joué afin que les bases soient parfaitement synchronisées. Etant donné que le journal contient les ordres sql, les serveurs MySQL peuvent fonctionner avec différents moteurs de stockage.</p>
<p><strong>Utilisation en Proxy</strong></p>
<p>Si les tables sur le Maître utilisent le moteur Blackhole, alors celui-ci ne fait qu&#8217;enregistrer les ordres SQL et les transmet aux différents serveurs Esclave. Bien entendu, seulement une ou une partie des tables peuvent être configurées de cette manière afin de répartir la charge entre différents serveurs dans le cas de grosses charges en écriture.</p>
<p><strong>Utilisation en filtre de réplication</strong></p>
<p>Un des inconvénients de la réplication MySQL actuelle, c&#8217;est qu&#8217;elle ne permet pas de de ne répliquer qu&#8217;une partie des données présentes sur le Maître. Ainsi, si un Maitre possède beaucoup de données, les Esclaves sont en principe obligés de supporter la même volumétrie même si ces données ne sont pas utilisées. Comme les tables sur un Esclave peuvent ne pas utiliser le même moteur de stockage que sur le Master, il est possible de déclarer les tables sur l&#8217;Esclave avec un moteur Blackhole. Ainsi, lorsque le processus de réplication jouera les ordres SQL reçus du Maître, celle-ci seront jouées, mais sans aucune conséquence ni sur les accès disque ni sur la charge CPU du serveur.</p>
<p><strong>Exemple</strong></p>
<p>Vous gérez plusieurs serveur MySQL en réplication avec une grosse base de données et beaucoup de requêtes&#8230; Malheureusement, vous devez exécuter des requêtes très consommatrices d&#8217;accès disque et qui ne sont pas optimisables, du genre :</p>
<pre>SELECT id FROM users WHERE name like '%dupont%';</pre>
<p>Cette requête fera inlassablement un &laquo;&nbsp;Full scan&nbsp;&raquo; de la table et ne peut pas utiliser d&#8217;index. Si la table contient beaucoup d&#8217;enregistrements et/ou un certain volume de données, il sera très difficile d&#8217;obtenir des temps de réponse corrects. En prime, les autres requêtes seront ralenties.</p>
<p>Une solution ? Ajoutez un serveur Esclave, mais déclarez toutes les autres tables en Blackhole et réservez ce serveur à l&#8217;exécution de ces mauvaises requêtes. La réplication n&#8217;utilisera que très peu d&#8217;accès disque qui seront quasiment dédiés à ces mauvaises requêtes.</p>
<p>Un solution &laquo;&nbsp;riche&nbsp;&raquo; ? Si votre serveur a suffisamment de mémoire, déclarez une table Memory qui ne contiendra que ce champ &laquo;&nbsp;name&nbsp;&raquo; ou les champs nécessaires à vos requetes, et positionnez un trigger sur la table d&#8217;origine afin que les modifications apportées par la réplication soient répliquées dans la table en mémoire.</p>
<p><strong>Quelques chiffres</strong></p>
<p>Chez Wikio, nous avons mis en place cette solution pour faire une test avec une table qui occupe 1Go sur disque. Les temps de réponse sont les suivants :</p>
<ul>
<li>Sur une esclave non dédié : entre 10 et 30 secondes suivant la charge occasionnée par les autres requêtes</li>
<li>Sur un esclave ne répliquant que les tables nécessaires : 9 secondes</li>
<li>En mettant les tables en mémoire : 3 secondes</li>
</ul>
<p>Ben sûr, vous me direz, la solution est coûteuse&#8230; mais dans certains cas, il est préférable de monopoliser un serveur afin que les traitements aillent 3 fois plus vite !</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2009/10/14/mysql-et-le-moteur-blackhole/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Téléphoner avec son ordinateur avec une Freebox et SIP</title>
		<link>http://bertrand.peralta.fr/2009/06/15/telephoner-avec-son-ordinateur-avec-une-freebox-et-sip/</link>
		<comments>http://bertrand.peralta.fr/2009/06/15/telephoner-avec-son-ordinateur-avec-une-freebox-et-sip/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 18:58:29 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[Softphone]]></category>

		<guid isPermaLink="false">http://bertrand.peralta.fr/?p=123</guid>
		<description><![CDATA[Savez-vous qu&#8217;une Freebox permet de faire beaucoup d&#8217;autres choses que du simple accès Internet ? Une des fonctions intéressantes est l&#8217;exploitation de la téléphonie via le protocole SIP. Cela permet par exemple d&#8217;exploiter sa ligne téléphoniques à l&#8217;aide de téléphones connectés en WiFi.
Pour mon usage, c&#8217;est l&#8217;utilisation de la téléphonie à partir de mon PC [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.free.fr"><img class="alignleft size-full wp-image-126" style="border: 0pt none; margin: 10px;" title="Free" src="http://bertrand.peralta.fr/wp-content/uploads/2009/06/free_logo.png" alt="Free" width="180" height="78" /></a>Savez-vous qu&#8217;une Freebox permet de faire beaucoup d&#8217;autres choses que du simple accès Internet ? Une des fonctions intéressantes est l&#8217;exploitation de la téléphonie via le protocole SIP. Cela permet par exemple d&#8217;exploiter sa ligne téléphoniques à l&#8217;aide de téléphones connectés en WiFi.</p>
<p>Pour mon usage, c&#8217;est l&#8217;utilisation de la téléphonie à partir de mon PC qui m&#8217;intéressait. Pouvoir téléphoner depuis mon PC, avec mon casque/micro (donc avec un certain confort d&#8217;utilisation) et au tarif de la téléphonie Free, c&#8217;est à dire gratuitement pour l&#8217;usage que j&#8217;en fait. En prime, ça permet de téléphoner sans occuper la ligne téléphonique !</p>
<p>Pour une simplicité de fonctionnement, il est préférable de configurer la Freebox en mode routeur afin qu&#8217;elle gère elle-même les ouvertures de ports nécessaires au fonctionnement de SIP.</p>
<p><strong>1ère étape : Activer SIP dans son interface de gestion Free<br />
</strong></p>
<div id="attachment_124" class="wp-caption alignnone" style="width: 666px"><a href="http://bertrand.peralta.fr/wp-content/uploads/2009/06/Free-SIP.png"><img class="size-full wp-image-124" title="Activer SIP depuis l'interface de gestion Free" src="http://bertrand.peralta.fr/wp-content/uploads/2009/06/Free-SIP.png" alt="Activer SIP depuis l'interface de gestion Free" width="656" height="338" /></a><p class="wp-caption-text">Activer SIP depuis l&#39;interface de gestion Free</p></div>
<p><strong>2ème étape : Télécharger un logiciel de téléphonie</strong></p>
<p>Vous pouvez par exemple télécharger <a title="Le site de SIPInside" href="http://tothpaul.free.fr/SIPInside" target="_blank">SIPInside</a> ou encore <a title="Le site de X-Lite" href="http://www.counterpath.com/x-lite.html" target="_blank">X-Lite</a>. Le premier a l&#8217;avantage de fonctionner immédiatement avec Free (vous n&#8217;autrez juste qu&#8217;à indiquer votre compte). J&#8217;ai par contre eu des problèmes de sons avec celui-ci. X-Lite est plus complet (ou complexe ?) mais présente l&#8217;avantage de fonctionner sur d&#8217;autres plateformes que Windows.</p>
<p>Voici par exemple une copie du paramétrage de X-Lite :</p>
<div id="attachment_125" class="wp-caption alignnone" style="width: 449px"><img class="size-full wp-image-125" title="Configuration de X-Lite pour mon compte Free" src="http://bertrand.peralta.fr/wp-content/uploads/2009/06/XLite-parameters.png" alt="Configuration de X-Lite pour mon compte Free" width="439" height="507" /><p class="wp-caption-text">Configuration de X-Lite pour mon compte Free</p></div>
<p>J&#8217;ai eu l&#8217;occasion de tester ce dispositif lors de conférences téléphoniques qui ont duré plus d&#8217;une heure. Je n&#8217;ai eu aucun problème de qualité de ligne ou de son.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2009/06/15/telephoner-avec-son-ordinateur-avec-une-freebox-et-sip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Mint 6 Felicia</title>
		<link>http://bertrand.peralta.fr/2009/03/10/linux-mint-6-felicia/</link>
		<comments>http://bertrand.peralta.fr/2009/03/10/linux-mint-6-felicia/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 18:57:28 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Admin Linux]]></category>

		<guid isPermaLink="false">http://bertrand.peralta.fr/?p=91</guid>
		<description><![CDATA[


Cela faisait un moment que je devais tester cette distribution. Xavier en est un fidèle utilisateur. Une mise à jour qui se passe mal sur mon ancien système&#8230; et me voilà donc parti à télécharger la dernière version de LinuxMint afin de faire le grand saut.
Verdict après l&#8217;installation : Bluffant. Certes, une des nouvelles fonctionnalités [...]]]></description>
			<content:encoded><![CDATA[<dl id="attachment_92" class="wp-caption aligncenter" style="width: 410px;">
<dt class="wp-caption-dt"><a href="http://bertrand.peralta.fr/wp-content/uploads/2009/03/mintupdate.png"><img class="size-full wp-image-92" title="mintupdate" src="http://bertrand.peralta.fr/wp-content/uploads/2009/03/mintupdate.png" alt="LinuxMint et son nouvel outil de mise à jour" width="400" height="300" /></a></dt>
</dl>
<p>Cela faisait un moment que je devais tester cette distribution. <a href="http://www.liteweb.fr/articles/2009/03/06/133-yeaaa-sortie-de-linux-mint-6-felicia-kde-ce-rc1.html" target="_blank">Xavier</a> en est un fidèle utilisateur. Une mise à jour qui se passe mal sur mon ancien système&#8230; et me voilà donc parti à télécharger la dernière version de LinuxMint afin de faire le grand saut.<br />
Verdict après l&#8217;installation : Bluffant. Certes, une des nouvelles fonctionnalités est le support amélioré des systèmes à double écrans par Gnome, mais je crois bien que c&#8217;est la première fois que tout s&#8217;installe automatiquement <img src='http://bertrand.peralta.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Verdict après une journée d&#8217;utilisation : Tout marche bien. Malgré le passage à Gnome, je retrouve mes principaux outils et je n&#8217;ai pas rencontré de soucis particuliers. L&#8217;outil d&#8217;installation des packages est vraiment simple à utiliser et l&#8217;outil de mise à jour est prometteur (je ne l&#8217;ai pas encore véritablement testé). Un petit bémol pour la version d&#8217;Eclipse qui est la 3.2 alors que la 3.4 est dispo depuis un moment déjà.</p>
<p>Bref, si vous avez envie d&#8217;essayer cette distribution, n&#8217;hésitez pas. Elle existe également en version KDE (RC actuellement).</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2009/03/10/linux-mint-6-felicia/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Analyser la mémoire d&#8217;une application Java</title>
		<link>http://bertrand.peralta.fr/2009/02/06/analyser-la-memoire-dune-application-java/</link>
		<comments>http://bertrand.peralta.fr/2009/02/06/analyser-la-memoire-dune-application-java/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:32:01 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Garbage Collector]]></category>

		<guid isPermaLink="false">http://bertrand.peralta.fr/?p=65</guid>
		<description><![CDATA[Tout développeur, un jour ou l&#8217;autre, est confronté à un problème de mémoire. Java permet de ne pas se soucier de la gestion de la mémoire, mais comme toute chose automatique, c&#8217;est bien quand ça marche, et c&#8217;est moins bien quand on rencontre des problèmes !
Heureusement, les derniers JDK proposent des outils plus ou moins [...]]]></description>
			<content:encoded><![CDATA[<p>Tout développeur, un jour ou l&#8217;autre, est confronté à un problème de mémoire. Java permet de ne pas se soucier de la gestion de la mémoire, mais comme toute chose automatique, c&#8217;est bien quand ça marche, et c&#8217;est moins bien quand on rencontre des problèmes !</p>
<p>Heureusement, les derniers JDK proposent des outils plus ou moins ergonomiques afin de surveiller et mieux comprendre ce qu&#8217;il se passe. Avant toute chose, voici un (très) bref rappel du fonctionnement de la gestion de la mémoire Java et de son &laquo;&nbsp;garbage collector&nbsp;&raquo; (ou GC).</p>
<p><strong>Java et le &laquo;&nbsp;garbage collector&nbsp;&raquo;</strong></p>
<p>Afin d&#8217;optimiser le fonctionnement du GC, Java utilise par défaut un système mettant en oeuvre plusieurs zones mémoire. Ces zones sont utilisées par les objets plus ou moins vieux. Je ne rentrerai pas dans les détails de ces zones ni comment les dimensionner. Le GC utilise 3 zones au fur et à mesure que les objets vieillisent :</p>
<p>- Survivor space : Il est en fait séparé en 2. Chaque zone est active alternativement. Les objets nouvellement créés sont créés dans la zone active. Au moment du passage du YGC (Young Garbage Collector), celui-ci va nettoyer le Survivor Space en recopiant les objets encore référencés dans la seconde zone qui devient active à son tour. Au bout d&#8217;un certain nombre d&#8217;allez-retour, les objets sont alors transférés dans le &laquo;&nbsp;Eden space&nbsp;&raquo;.</p>
<p>- Young Space : Comme nous venons de le voir cette zone reçoit les objets encore jeunes qui ont survécus à plusieurs YGC.</p>
<p>- Old Space : Lorsque la place vient à manquer dans le Young Space, un Full Garbage Collector (FGC) est lancé et les objets les plus anciens de la Young Zone sont transférés dans cette zone.</p>
<p>En plus de ces 3 zones, il existe le Permanent Space qui comme son nom l&#8217;indique est utilisé pour le cache du code et les objets statiques.</p>
<p>Lorsqu&#8217;un problème de mémoire arrive, c&#8217;est en général car des objets restent référencés (par une liste ou autre) et finissent donc par remplir le Old Space. Un des premiers outils bien pratique pour suivre ces mouvements de mémoire entre les zones est jstat qui est livré avec le JDK. Différentes options existent, mais la surveillance du Garbage Collector est sans doute le plus intéressant dans notre cas.</p>
<pre>jstat -gc -h10 &lt;pid&gt; 5s</pre>
<pre> S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
5376.0 10944.0 5319.5  0.0   723712.0 393938.3  571776.0   548046.1  61568.0 58080.5    754   27.767  26     16.290   44.057
9600.0 6976.0  0.0   6964.5 691648.0 232030.5  571776.0   550188.2  61568.0 58084.8    755   27.801  26     16.290   44.091
5504.0 10560.0 5465.1  0.0   777088.0 106216.4  571776.0   553407.3  61568.0 58085.2    756   27.870  26     16.290   44.161
5504.0 10560.0 5465.1  0.0   777088.0 608730.8  571776.0   553407.3  61568.0 58085.7    756   27.870  26     16.290   44.161
9856.0 5824.0  0.0   5801.2 865984.0 263527.0  571776.0   555880.7  61568.0 58086.1    757   27.892  26     16.290   44.182
9856.0 5824.0  0.0   5801.2 865984.0 696381.0  571776.0   555880.7  61568.0 58088.1    757   27.892  26     16.290   44.182
8192.0 10496.0 8180.9  0.0   826944.0 359223.6  571776.0   558621.8  61568.0 58088.4    758   27.910  26     16.290   44.201
7552.0 5312.0  0.0   5296.1 789824.0 71320.0   571776.0   563405.1  61568.0 58088.9    759   27.963  26     16.290   44.253
7552.0 5312.0  0.0   5296.1 789824.0 648105.7  571776.0   563405.1  61568.0 58090.4    759   27.963  26     16.290   44.253
6464.0 10176.0 6452.6  0.0   880512.0 401761.5  571776.0   565630.1  61568.0 58090.4    760   28.016  26     16.290   44.306
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
6464.0 10176.0 6452.6  0.0   880512.0 876197.9  571776.0   565630.1  61568.0 58093.7    760   28.016  26     16.290   44.306
9024.0 4928.0  0.0    0.0   840704.0 321404.4  567360.0   469081.9  61440.0 58096.0    761   28.034  27     17.329   45.363</pre>
<p>Voici quelques explication sur la signification des entêtes de colonne concernant les zones :</p>
<p>- La première lettre indique la zone : S0 et S1 = survivor 1 et 2, E = Eden, O = Old et P = Permanent</p>
<p>- La dernière lettre indique la mémoire réellement occupée ou la taille réservée : C = Capacity et U = Used</p>
<p>Concernant le GC : YGC = Young GC, YGCT = Young GC Time, FGC = Full GC, FGCT = Full GC Time et GCT = GC Time (temps global)</p>
<p>On voit tout d&#8217;abord, que S0 et S1 sont remplis l&#8217;un ou l&#8217;autre mais pas les deux en même temps. En regardant la colonne YGC, on voit qu&#8217;a chaque incrémentation, S0 et S1 permuttent. La taille de l&#8217;Eden Space varie également à chaque passage du YGC. On voit également qu&#8217;à chaque YGC, le OU augmente afin de stocker les objets les plus anciens de l&#8217;Eden Space. Enfin on voit qu&#8217;à l&#8217;avant dernière ligne, le OU se rapporchait du OC ce qui laissait présager de la saturation de la zone Old Space. La dernière ligne indique donc le passage du FGC qui a eu pour effet de nettoyer le Old Space et de lui réassigner une nouvelle taille.</p>
<p>Que se passe-t-il en cas de fuite mémoire (autrement dit d&#8217;objets restant alloués par erreur) ? Le OC grossit de plus en plus, une fois arrivé à son max, le OU se rapproche de la limite. Le FGC passe donc fréquemment au point de ralentir la JVM&#8230; puis une belle exception OutOfMemory est déclenchée.</p>
<p><strong>Analyse d&#8217;une JVM</strong></p>
<p>Jstat vous permet d&#8217;observer l&#8217;occupation mémoire, et voir que vous avez effectivement un problème&#8230; Mais comment savoir d&#8217;où ça vient ? Il existe plusieurs outils, je vous citerai les 2 que j&#8217;utilise : jmap et mat.</p>
<p>Jmap est un outil du même style que jstat. Il est livré avec le JDK et permet d&#8217;analyser une JVM en cours de fonctionnement. Il permet dans un premier temps d&#8217;obtenir une liste des objets actuellement en mémoire, triée par occupation mémoire décroissante. Bien entendu les premières places sont occupées par des objets comme String, byte[], etc, mais si vous voyez une de vos classes dans les 20 premières positions&#8230; c&#8217;est louche. Pour obtenir cette liste, voici la commande :</p>
<pre>jmap -histo &lt;pid&gt;</pre>
<p>Si cette liste ne suffit pas à trouver le fautif, vous pouvez utiliser l&#8217;artillerie lourde : générer un dump binaire et utiliser un outil qui analysera ce dump vous permettant de naviguer dans vos objets en mémoire. Un dump peut être généré de différentes façons (par exemple jmap ou jconsole). Voici la commande jmap qui génère ce dump :</p>
<pre>jmap -heap:format=b</pre>
<p>Cette commande correspond à un JDK5 et peut être différente avec un JDK d&#8217;une autre version. Attention, si la génération de la liste ne prend que quelques secondes, la génération d&#8217;un dump est beaucoup plus longue. Inutile de vous dire que pendant ce temps la JVM est bloquée&#8230; donc pour une JVM en exploitation, il vaut mieux le savoir <img src='http://bertrand.peralta.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Différents outils d&#8217;analyse existent également. J&#8217;utilise pour ma part <a href="http://www.eclipse.org/mat" target="_blank">MAT</a> qui est un plugin Eclipse et existe également dans version autonome. Cette dernière est préférable pour des question d&#8217;occupation mémoire (il faut beaucoup de mémoire pour analyser le dump). Cet outil permet d&#8217;analyser le dump et de vous suggérer des problèmes possibles. Si cela ne suffit pas (ou si vous pensez qu&#8217;il se trompe) vous pourrez alors analyser les objets, trouver leur référence, voir leur contenu, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2009/02/06/analyser-la-memoire-dune-application-java/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Contrôle parental avec Squid et SquidGuard</title>
		<link>http://bertrand.peralta.fr/2009/01/23/controle-parental-avec-squid-et-squidguard/</link>
		<comments>http://bertrand.peralta.fr/2009/01/23/controle-parental-avec-squid-et-squidguard/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 17:52:20 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Admin Linux]]></category>
		<category><![CDATA[Contrôle parental]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[SquidGuard]]></category>

		<guid isPermaLink="false">http://bertrand.peralta.fr/?p=49</guid>
		<description><![CDATA[Si comme moi votre réseau personnel est géré à l&#8217;aide d&#8217;une passerelle Linux et que vos enfants ont accès à Internet sans vraiment de contrôle, cela risquerait de vous intéresser&#8230;
Squid est le proxy le plus connu, mais étant donné les débits possibles aujourd&#8217;hui, l&#8217;utilisation d&#8217;un proxy est de moins en moins nécessaire. Par contre, en [...]]]></description>
			<content:encoded><![CDATA[<p>Si comme moi votre réseau personnel est géré à l&#8217;aide d&#8217;une passerelle Linux et que vos enfants ont accès à Internet sans vraiment de contrôle, cela risquerait de vous intéresser&#8230;</p>
<p><a title="Squid" href="http://www.squid-cache.org/" target="_blank">Squid</a> est le proxy le plus connu, mais étant donné les débits possibles aujourd&#8217;hui, l&#8217;utilisation d&#8217;un proxy est de moins en moins nécessaire. Par contre, en plus de la fonction principale de cache, Squid possède des fonctionnalités intéressantes comme l&#8217;ajout de filtrages complémentaires.</p>
<p><a title="SquidGuard" href="http://www.squidguard.org/" target="_self">SquidGuard</a> est un outil permettant de bloquer l&#8217;accès à certaines pages Web, en fonction de différents critères. Cet outil est notamment utilisé par l&#8217;éducation nationale pour assurer un contrôle d&#8217;accès à Internet dans les établissements scolaires.</p>
<p>L&#8217;université de Toulouse met à jour régulièrement des listes noires (blacklist) de sites devant être interdits de consultation par les élèves (donc a priori par mes enfants également). Une <a title="SquidGuard par le CRI" href="http://cri.univ-tlse1.fr/documentations/cache/squidguard.html" target="_self">page</a> est d&#8217;ailleurs consacrée à l&#8217;utilisation et la mise en place de SquidGuard.</p>
<p><strong>Installation</strong></p>
<p>Squid est en principe livré avec les différentes distribution de Linux. SquidGuard l&#8217;est également dans certaines (c&#8217;est le cas dans la version OpenSuse que j&#8217;utilise).</p>
<p><strong>Configuration</strong></p>
<p>Il faut avant tout indiquer à Squid d&#8217;utiliser SquidGuard pour effectuer un filtrage supplémentaire. Cela se fait en ajoutant la ligne suivante au fichier squid.conf :</p>
<pre>url_rewrite_program /usr/sbin/squidGuard -c /etc/squidguard.conf</pre>
<p>Un redémarrage de Squid devrait faire appraître des process SquidGuard lancés par Squid.</p>
<p><strong>Mise en place de listes noires</strong></p>
<p>Vous pouvez confectionner vous-même vos blacklistes mais le plus simple est bien entendu d&#8217;utiliser des listes déjà éprouvées et mises à jour comme celles de l&#8217;université de Toulouse. Elles sont accessibles depuis cette page : <a href="http://cri.univ-tlse1.fr/blacklists/" target="_blank">http://cri.univ-tlse1.fr/blacklists/</a>. Le fichier blacklists.tar.gz contient toutes les listes et pour une première installation il est sans doute intéressant de l&#8217;utiliser.</p>
<p>Les listes doivent être mises en place dans le répertoire indiqué par la variable dbhome du fichier de configuration de SquidGuard (/etc/squidguard.conf dans mon cas).</p>
<p><strong>Prise en compte des listes dans SquidGuard</strong></p>
<p>Il faut alors indiquer à SquidGuard d&#8217;utiliser ces listes ou au moins quelques unes (la liste adult est de loin la plus fournie et la plus intéressante en terme de contrôle parental).</p>
<pre>dest blacklist {</pre>
<pre>    domainlist blacklists/adult/domains</pre>
<pre>    urllist    blacklists/adult/urls</pre>
<pre>}</pre>
<p><strong>Compilation des listes</strong></p>
<p>Afin que SquidGuard soit plus performant et plus rapide au démarrage de Squid, il est possible (voire fortement conseillé) de demander à SquidGuard d&#8217;utiliser une base de données pour effectuer son filtrage.</p>
<p>La compilation des listes déclarées dans la configuration se fait à l&#8217;aide la commande :</p>
<pre>squidGuard -C all</pre>
<p>Le reste de la configuration de est assez implicite (déclaration des réseaux et utilisateurs devant être filtrés). Les fonctions avancées peuvent être mises en place en suivant la document de SquiGuard : http://www.squidguard.org/Doc/</p>
<p>Pour activer le filtrage, il suffit alors de configurer l&#8217;utilisation du proxy sur les postes qu&#8217;on désire protéger. Une solution plus radicale est de configurer au niveau des règles  du firewall l&#8217;utilisation automatique du proxy.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2009/01/23/controle-parental-avec-squid-et-squidguard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMS avec Spring</title>
		<link>http://bertrand.peralta.fr/2008/11/26/jms-avec-spring/</link>
		<comments>http://bertrand.peralta.fr/2008/11/26/jms-avec-spring/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 20:47:28 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://bperalta.wordpress.com/?p=117</guid>
		<description><![CDATA[Voici un mode d&#8217;emploi simple pour mettre en oeuvre JMS en utilisant Spring. Bien entendu il vous faut pour cela au minimum un serveur JMS (serveur d&#8217;application, ou ActiveMQ ou encore OpenJMS). Comme vous allez le voir, le codage et la paramétrage sont assez simples en fait  
Spring met à votre disposition 2 dispositifs [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un mode d&#8217;emploi simple pour mettre en oeuvre JMS en utilisant Spring. Bien entendu il vous faut pour cela au minimum un serveur JMS (serveur d&#8217;application, ou ActiveMQ ou encore OpenJMS). Comme vous allez le voir, le codage et la paramétrage sont assez simples en fait <img src='http://bertrand.peralta.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Spring met à votre disposition 2 dispositifs rendant l&#8217;utilisation de JMS très simple :</p>
<p>- JmsTemplate : gère la connexion vers le serveur déclaré et l&#8217;envoi des données</p>
<p>- SimpleMessageListenerContainer : assure la réception des messages et l&#8217;appel à votre classe en charge de traiter la réception des objets.</p>
<p><strong>1ère étape : déclaration du serveur</strong></p>
<p>Dans un fichier xml de configuration Spring, insérez ces lignes (dans notre exemple, il s&#8217;agit de la déclaration des 2 serveurs ActiveMQ locaux) :</p>
<pre>    &lt;!-- ActiveMQ Sender --&gt;
    &lt;bean id="connectionFactorySender" class="org.apache.activemq.ActiveMQConnectionFactory"&gt;
        &lt;property name="brokerURL" value="tcp://localhost:61616"/&gt;
    &lt;/bean&gt;

    &lt;!-- ActiveMQ Receiver --&gt;
    &lt;bean id="connectionFactoryListener" class="org.apache.activemq.ActiveMQConnectionFactory"&gt;
        &lt;property name="brokerURL" value="tcp://localhost:61616"/&gt;
    &lt;/bean&gt;</pre>
<p>ainsi que la déclaration de la queue qui sera utilisée pour nos échanges de messages :</p>
<pre>    &lt;bean id="categs_backup_queue" class="org.apache.activemq.command.ActiveMQQueue"&gt;
        &lt;constructor-arg value="categs_backup"/&gt;
    &lt;/bean&gt;</pre>
<p><strong>2ème étape : gestion de l&#8217;émission des messages</strong></p>
<p>Dans notre exemple, nous échangerons des POJOs représentants des catégories afin de les sauvegarder sur un autre serveur.</p>
<p>Voici l&#8217;implémentation de la classe servant à envoyer ces messages :</p>
<pre>public class CategorieBackupSenderImpl implements CategorieBackupSender {
    private JmsTemplate jmsTemplate;
    private Queue queue;

    @Required
    public void setConnectionFactory(ConnectionFactory cf) {
        this.jmsTemplate = new JmsTemplate(cf);
    }

    @Required
    public void setQueue(Queue queue) {
        this.queue = queue;
    }

    /* (non-Javadoc)
     * @see com.bp.jms.CategorieBackupSender#simpleSend()
     */
    public void send(final Categorie categ) {
        this.jmsTemplate.send(this.queue, new MessageCreator() {
            public ObjectMessage createMessage(Session session) throws JMSException {
              return (ObjectMessage) session.createObjectMessage(categ);
            }
        });
    }
}</pre>
<p>Les deux setters servent à Spring pour renseigner les propriétés nécessaires au bon fonctionnement de cette classe : le template (JmsTemplate) qui utilise la connexion au serveur JMS (ConnectionFactory) et la queue (Queue).</p>
<p>La méthode Send fait appel au template pour créer le message à partir de notre POJO via la classe MessageCreator.</p>
<p>Il nous reste à déclarer ce composant dans le XML de configuration Spring :</p>
<pre>    &lt;bean id="categorieBackupSender" class="com.bp.categories.jms.impl.CategorieBackupSenderImpl"&gt;
        &lt;property name="connectionFactory" ref="connectionFactorySender"/&gt;
        &lt;property name="queue" ref="categs_backup_queue"/&gt;
    &lt;/bean&gt;</pre>
<p>C&#8217;est tout pour l&#8217;émission des messages ! La bonne nouvelle c&#8217;est que la réception n&#8217;est guère plus compliquée <img src='http://bertrand.peralta.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>3è étape : gestion de la réception des messages</strong></p>
<p>Voici la classe gérant cette réception :</p>
<pre>public class CategorieBackupListener implements MessageListener {

    private CategorieService categorieService;

    /**
     * @param categorieService the categorieService to set
     */
    @Required
    public void setCategorieService(CategorieService categorieService) {
        this.categorieService = categorieService;
    }

    public void onMessage(Message message) {
        if (message instanceof ObjectMessage) {
            try {
                Categorie categ = (Categorie) ((ObjectMessage) message).getObject();
                categorieService.backup(categ);
            }
            catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        }
        else {
            throw new IllegalArgumentException("Message must be of type ObjectMessage");
        }
    }
}</pre>
<p>Le source est assez parlant de lui-même. Suite à la réception du message, le service CategorieService est appelé afin d&#8217;effectuer le traitement approprié.</p>
<p>De même que pour l&#8217;émission, la configuration Spring est importante&#8230;</p>
<pre>    &lt;bean id="categorieBackupListener" class="com.bp.categories.jms.CategorieBackupListener"&gt;
        &lt;property name="categorieService" ref="categorieService" /&gt;
    &lt;/bean&gt;

    &lt;bean id="listener" class="org.springframework.jms.listener.SimpleMessageListenerContainer"&gt;
       &lt;property name="connectionFactory" ref="connectionFactoryListener"/&gt;
       &lt;property name="destination" ref="categs_backup_queue"/&gt;
       &lt;property name="concurrentConsumers" value="3"/&gt;
       &lt;property name="messageListener" ref="categorieBackupListener"/&gt;
    &lt;/bean&gt;</pre>
<p>Bien entendu dans cet exemple nous échangeons des POJOs reconnus par JMS comme simple Object. Il est possible d&#8217;améliorer tout ça, ne serait-ce que pour s&#8217;assurer que l&#8217;objet reçu est bien l&#8217;objet attendu ou aussi pour échanger des objets de différents types en utilisant la même queue.</p>
<p><strong>4ème étape : fonctionnement de notre exemple</strong></p>
<p>Nous devons déclarer nos deux beans :</p>
<pre>        categorieService = (CategorieService) Context.getContext().getBean("categorieService");
        categorieBackupSender = (CategorieBackupSender) Context.getContext().getBean("categorieBackupSender");</pre>
<p>puis la récupération de nos objets et leur envoi :</p>
<pre>        List&lt;Categorie&gt; categs = categorieService.getCategs();
        if (categs != null) {
            for (Categorie categ: categs) {
                categorieBackupSender.send(categ);
            }
        }</pre>
<p>La réception se met en route automatique dès l&#8217;instanciation du listener.</p>
<p>Si vous voulez contrôler le fonctionnement du listener, alors il faut déclarer un troisième bean :</p>
<pre>        listener = ((SimpleMessageListenerContainer) Context.getContext().getBean("listener"));</pre>
<p>Voilà, cet exemple ne présente sans doute pas toutes les possibilités que l&#8217;on peut faire de JMS avec Spring, mais c&#8217;est un bon début <img src='http://bertrand.peralta.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2008/11/26/jms-avec-spring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Postfix et l&#8217;envoi de mails vers AOL</title>
		<link>http://bertrand.peralta.fr/2008/11/05/postfix-et-lenvoi-de-mails-vers-aol/</link>
		<comments>http://bertrand.peralta.fr/2008/11/05/postfix-et-lenvoi-de-mails-vers-aol/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 21:26:23 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Admin Linux]]></category>
		<category><![CDATA[Aol]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://bperalta.wordpress.com/?p=112</guid>
		<description><![CDATA[AOL filtre de façon drastique les mails envoyés à leurs abonnés. Le problème, c&#8217;est que leur filtre stoppe net les mails envoyés depuis un serveur connecté sur une ligne ADSL ou tout autre réseau réputé comme un réseau ne devant pas en principe héberger des serveurs.
Postfix vous permet de modifier la route empruntée par les [...]]]></description>
			<content:encoded><![CDATA[<p>AOL filtre de façon drastique les mails envoyés à leurs abonnés. Le problème, c&#8217;est que leur filtre stoppe net les mails envoyés depuis un serveur connecté sur une ligne ADSL ou tout autre réseau réputé comme un réseau ne devant pas en principe héberger des serveurs.</p>
<p>Postfix vous permet de modifier la route empruntée par les mails envoyés à certains domaines. Il sufit pour cela d&#8217;insérer dans le fichier transport ce type de ligne :</p>
<pre>&lt;domaine&gt; : [&lt;serveur smtp de destination&gt;]</pre>
<p>Par exemple, pour un serveur connecté sur une ligne Free :</p>
<pre>aol.com         :[smtp.free.fr]
.aol.com        :[smtp.free.fr]</pre>
<p>La seconde ligne permet de gérer les cas où un sous-domaine d&#8217;aol.com serait utilisé au sein d&#8217;une adresse email.</p>
<p>N&#8217;oubliez pas de compiler le fichier transport à l&#8217;aide de la commande</p>
<pre>postmap transport</pre>
<p>et de vérifier que ce fichier transport est bien déclaré dans le fichier main.cf :</p>
<pre>transport_maps = hash:/etc/postfix/transport</pre>
<p>Edit : vous pouvez ajouter également :</p>
<pre>aim.com         :[smtp.free.fr]</pre>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2008/11/05/postfix-et-lenvoi-de-mails-vers-aol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitorer une application Tomat avec JConsole</title>
		<link>http://bertrand.peralta.fr/2008/10/22/monitorer-une-application-tomat-avec-jconsole/</link>
		<comments>http://bertrand.peralta.fr/2008/10/22/monitorer-une-application-tomat-avec-jconsole/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 20:17:43 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JConsole]]></category>
		<category><![CDATA[JMX]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://bperalta.wordpress.com/?p=101</guid>
		<description><![CDATA[L&#8217;utilisation de JConsole permet de consulter toutes les données exposées en JMX par un programme Java. De nombreuses données sont en général accessibles comme par exemple l&#8217;utilisatoin de la mémoire, le nombre de threads, le nombre de classes chargées. Tomcat n&#8217;ouvre pas par défaut l&#8217;accès JMX, mais il suffit d&#8217;indiquer à la JVM utilisée par [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;utilisation de JConsole permet de consulter toutes les données exposées en JMX par un programme Java. De nombreuses données sont en général accessibles comme par exemple l&#8217;utilisatoin de la mémoire, le nombre de threads, le nombre de classes chargées. Tomcat n&#8217;ouvre pas par défaut l&#8217;accès JMX, mais il suffit d&#8217;indiquer à la JVM utilisée par Tomcat ces quelques infos :</p>
<pre>-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=&lt;port&gt;
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false</pre>
<p>Comme vous l&#8217;aurez constaté, il n&#8217;y a aucune sécurité d&#8217;accès et cela n&#8217;est conseillé que pour un serveur présent sur un réseau protégé. Dans certain cas, il est nécessaire d&#8217;ajouter :</p>
<pre>
<pre>-Djava.rmi.server.hostname=&lt;IP qui doit écouter sur le port JMX&gt;</pre>
</pre>
<p>Suivant la façon de lancer Tomcat, vous pourrez insérer ces propriétés das le script de démarrage ou dans la variable d&#8217;environnement JAVA_OPTS qui est lue par les scripts Tomcat. Il ne vous restera plus qu&#8217;à vous connecter avec JConsole sur l&#8217;ip et le port indiqué et à scruter toutes les informations délivrées.</p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2008/10/22/monitorer-une-application-tomat-avec-jconsole/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installation d&#8217;un webmail : RoundCube</title>
		<link>http://bertrand.peralta.fr/2008/10/16/installation-dun-webmail-roundcube/</link>
		<comments>http://bertrand.peralta.fr/2008/10/16/installation-dun-webmail-roundcube/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 19:42:43 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Admin Linux]]></category>
		<category><![CDATA[dovecot]]></category>
		<category><![CDATA[roundcube]]></category>
		<category><![CDATA[webmail]]></category>

		<guid isPermaLink="false">http://bperalta.wordpress.com/?p=91</guid>
		<description><![CDATA[Il n&#8217;est pas toujours possible d&#8217;accéder à ses mails depuis le client mail habituel. L&#8217;accès via un webmail est une solution très pratique pour les itinérants ou occasionnellement. Plusieurs solutions packagées existent. Une des plus connue est SquirrelMail, mais le look ne m&#8217;a pas franchement convaincu. Mon choix final s&#8217;est porté sur RoundCube, donc pour [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.roundcube.net/images/screens/mail_listing.jpg"><img class="alignleft size-full wp-image-97" style="margin-right:10px;margin-left:10px;" title="L'interface de RoundCube" src="http://bertrand.peralta.fr/wp-content/uploads/2008/10/mail_listing.jpg" alt="" width="180" height="122" /></a>Il n&#8217;est pas toujours possible d&#8217;accéder à ses mails depuis le client mail habituel. L&#8217;accès via un webmail est une solution très pratique pour les itinérants ou occasionnellement. Plusieurs solutions packagées existent. Une des plus connue est <a href="http://www.squirrelmail.org/" target="_blank">SquirrelMail</a>, mais le look ne m&#8217;a pas franchement convaincu. Mon choix final s&#8217;est porté sur <a href="http://roundcube.net/" target="_blank">RoundCube</a>, donc pour son look résolument plus moderne, mais aussi pour un support direct de Dovecot.</p>
<p>L&#8217;installation se fait relativement simplement. Voici les quelques points nécesaires :</p>
<p><strong>Téléchargement de la dernière version sur <a href="http://roundcube.net/downloads" target="_blank">http://roundcube.net/downloads</a></strong></p>
<p>L&#8217;installation en elle-même ne pose pas particulièrement de problème car il suffit de déposer le contnu du tar.gz dans un répertoire vu par apache.</p>
<p><strong>Création des cles ssl</strong></p>
<p>C&#8217;est peut-être la partie la plus sensible&#8230; Vous pouvez vous aider d&#8217;<a href="http://bertrand.peralta.fr/2008/09/10/creation-et-gestion-de-cles/" target="_blank">un de mes posts précédents</a> pour cela.</p>
<p><strong>Création d&#8217;un vhost sur apache</strong></p>
<p>Voici un exemple de vhost simple :</p>
<pre>&lt;IfDefine SSL&gt;
&lt;IfDefine !NOSSL&gt;

&lt;VirtualHost nom_du_serveur:443&gt;

        #  General setup for the virtual host
        DocumentRoot "repertoire_contenant_roundcube"
        ServerName nom_du_serveur:443
        ServerAdmin email_admin_du_serveur
        ErrorLog /var/log/apache2/nom_du_serveur_error.log
        TransferLog /var/log/apache2/nom_du_serveur_access.log

        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

        SSLCertificateFile /etc/apache2/ssl.crt/nom_du_certificat_du_serveur
        SSLCertificateKeyFile /etc/apache2/ssl.key/nom_de_la_cle_privee_du_serveur

        SetEnvIf User-Agent ".*MSIE.*" \
                 nokeepalive ssl-unclean-shutdown \
                 downgrade-1.0 force-response-1.0

        CustomLog /var/log/apache2/nom_du_serveur_acess.log ssl_combined

        &lt;Directory "repertoire_contenant_roundcube"&gt;
                Options Indexes FollowSymLinks
                AllowOverride None
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

&lt;/VirtualHost&gt;

&lt;/IfDefine&gt;</pre>
<p>Bien entendu il faut activer le ssl en le redémarrant avecl&#8217;option startssl qui n&#8217;a d&#8217;autre mission que de démarrer le process en spécifiant -DSSL sur la ligne de commande.</p>
<p><strong>Configuration de RoundCube</strong></p>
<p>Le fichier INSTALL livré avec RoundCube décrit les opération à faire au niveau de la base de données. Il s&#8217;agit en fait de créer une base, le programme de configuration se chargeant alors de créer toutes les tables necessaires.</p>
<p>Il suffit ensuite d&#8217;appeler avec un browser l&#8217;url http://nom_de_votre_serveur/installer/ afin de compléter les quelques renseignements nécessaires comme la façons d&#8217;accéder au smtp, au serveur imap et à la base de données.</p>
<p>Une fois la configuration terminée, il est consillé de supprimer le répertoire /installer pour éviter quelques surprises <img src='http://bertrand.peralta.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2008/10/16/installation-dun-webmail-roundcube/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ajouter une Greylist à Postfix</title>
		<link>http://bertrand.peralta.fr/2008/09/30/ajouter-une-greylist-a-postfix/</link>
		<comments>http://bertrand.peralta.fr/2008/09/30/ajouter-une-greylist-a-postfix/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 19:58:21 +0000</pubDate>
		<dc:creator>bperalta</dc:creator>
				<category><![CDATA[Admin Linux]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://bperalta.wordpress.com/?p=88</guid>
		<description><![CDATA[Les spams deviennent de plus en plus envahissants, et un serveur SMTP se trouve vite submergé de mails inutiles qui augmentent sensiblement sa charge. Bien entendu, des logiciels anti-spams existent. En s&#8217;appuyant sur une analyse du contenu des mails, ceux-ci arrivent à de bons (voire très bons) résultats. Je n&#8217;en citerai que 2, un open [...]]]></description>
			<content:encoded><![CDATA[<p>Les spams deviennent de plus en plus envahissants, et un serveur SMTP se trouve vite submergé de mails inutiles qui augmentent sensiblement sa charge. Bien entendu, des logiciels anti-spams existent. En s&#8217;appuyant sur une analyse du contenu des mails, ceux-ci arrivent à de bons (voire très bons) résultats. Je n&#8217;en citerai que 2, un open source (<a href="http://spamassassin.apache.org/" target="_blank">SpamAssassin</a>) et un produit commercial (<a href="http://www.antispam.fr/fr/" target="_blank">Vade Retro</a>, de <a href="http://www.goto.fr" target="_blank">Goto Software</a>). Une approche plus simple et éliminant une bonne partie des spams consiste à installer une <a href="http://fr.wikipedia.org/wiki/Greylisting" target="_blank">Greylist</a> au sein de Postfix. Plusieurs implémentations existent. Mon choix s&#8217;est porté sur l&#8217;<a href="http://postgrey.schweikert.ch/" target="_blank">implémentation</a> de <a href="http://david.schweikert.ch/" target="_blank">David Schweikert</a>.</p>
<p>L&#8217;installation ne présente pas de problèmes particuliers et les quelques opérations sont décrites dans la documentation livrée. Elle est accessible en tapant la commande :</p>
<pre>perldoc postgrey</pre>
<p>Le lien avec postfix se fait en ajoutant au paramètre smtpd_recipient_restrictions une option check_policy_service inet:127.0.0.1:10023 (à condition d&#8217;avoir utiliser tous les paramètres par défaut). Voici par exemple le paramètre complet :</p>
<pre>smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient,
        permit_sasl_authenticated,
        check_policy_service inet:127.0.0.1:10023,
        reject_unauth_destination</pre>
<p>Une fois le process postgrey lancé (postgrey &#8211;inet=10023 -d) et postfix rechargé, les premières traces de contrôle doivent apparaître dans le log postfix.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrand.peralta.fr/2008/09/30/ajouter-une-greylist-a-postfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
