<?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>Blog Modulaweb</title>
	<atom:link href="http://www.modulaweb.fr/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.modulaweb.fr/blog</link>
	<description>Le blog des technologies modulables orientées web</description>
	<lastBuildDate>Thu, 16 Dec 2010 03:02:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Prestashop™ et l&#8217;URL Rewriting : pourquoi c&#8217;est la cata ?</title>
		<link>http://www.modulaweb.fr/blog/2010/12/prestashop-et-url-rewriting-pourquoi-cest-la-cata/</link>
		<comments>http://www.modulaweb.fr/blog/2010/12/prestashop-et-url-rewriting-pourquoi-cest-la-cata/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 07:52:01 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[prestashop]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=549</guid>
		<description><![CDATA[Prestashop™ est un système de publication de boutiques en ligne Open-source écrit en PHP : il permet, en quelques minutes, de mettre en ligne une boutique capable de présenter plusieurs milliers de produits et de tout gérer de la base (panier d'achats, commande, paiement) mais aussi le suivi de livraison, les retours, statistiques… Une boutique [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-551" src="http://www.modulaweb.fr/blog/wp-content/uploads/2010/12/logo-prestashop.png" alt="" width="214" height="69" />Prestashop™ est un système de publication de boutiques en ligne Open-source écrit en PHP : il permet, en quelques minutes, de mettre en ligne une boutique capable de présenter plusieurs milliers de produits et de tout gérer de la base (panier d'achats, commande, paiement) mais aussi le suivi de livraison, les retours, statistiques…</p>
<p>Une boutique va devoir être trouvée, donc son référencement va devoir être efficace, un des éléments clés du SEO, c'est de mettre en place des règles d'URL rewriting qui, en plus de faciliter le travail de crawling des robots, permettent d'ajouter de la cohérence et du sens aux liens et aux pages entre elles. Le problème, c'est que Prestashop™ a une méthode pour le moins étrange de gérer les URL réécrites… voyons ça en détails :</p>
<h2>La réécriture d'URL dans l'idéal</h2>
<p>Soient trois catégories, A, B et C. C est une catégorie fille de B qui est, elle même, fille de A. 1, 2 et 3 sont leurs Identifiant uniques respectifs. Soient un produit P faisant partie de la catégorie C et son identifiant unique 100.</p>
<p>Dans l'idéal, l'url réécrite permettant d'accéder à la page du produit P devrait être /a/b/c/p/ ou /a/b/c/p.html ou encore, /1-a/2-b/3-c/100-p ou enfin /1-a/2-b/3-c/100-p.html</p>
<p>L'idée est qu'un robot qui (re)découvre le site via l'URL du produit P puisse, de lui même, même si la page du produit P a un souci (problème d'affichage, maintenance…) et donc de pouvoir déduire de lui même l'URL lui permettant d'accéder aux catégories A, B et C.</p>
<p>En découvrant l'URL /1-a/2-b/3-c/100-p.html, le robot va remonter le chemin, et visitera /1-a/2-b/3-c/, puis /1-a/2-b/ puis /1-a/ et découvrira par la même comment accéder à tout le catalogue, et comprendra quel lien lie la page dont l'URL est /1-a/ au produit dont la page est accessible via l'URL /1-a/2-b/3-c/100-p.html puisque la page /1-a/ est une page parente de la page du produit P.</p>
<p>Dans la vraie vie, cet exemple donnerait, par exemple : /1-bagagerie/2-grand-voyageur/3-trolleys/100-bagage-trolley-cuir-noir-roulettes.html</p>
<h2>Ce que fait Prestashop™</h2>
<p>Pour réécrire une URL, Prestashop™ utilise plusieurs méthodes, suivant la page à afficher et sa position.</p>
<p>Reprenons notre exemple : trois catégories, A, B et C. C est une catégorie fille de B qui  est, elle même, fille de A. 1, 2 et 3 sont leurs Identifiant uniques  respectifs, ainsi qu'un produit P faisant partie de la catégorie C, son  identifiant unique étant 100.</p>
<p>Pour A, Prestashop™ génèrera l'URL /1-a, jusqu'ici, tout va bien.</p>
<p>Pour B, Prestashop™ devrait générer, logiquement, /1-a/2-b, mais il génère /2-b ! idem pour C : pas de parents dans l'URL pour les catégories.</p>
<p>Pour P, Prestashop™ génère /c/100-P.html … vous lisez bien : non seulement la filiation entre C, B et A n'est pas spécifiée, mais l'identifiant de C ne l'est pas non plus ! donc le crawler qui remontera à l'URL /c aura une belle erreur 404.</p>
<p>Si on reprend notre exemple concrêt, au lieu d'avoir l'adresse /1-bagagerie/2-grand-voyageur/3-trolleys/100-bagage-trolley-cuir-noir-roulettes.html, on aura soit /1-bagagerie, /2-grand-voyageur, ou /3-trolleys pour les catégories, soit /trolleys/100-bagage-trolley-cuir-noir-roulettes.html pour le produit.</p>
<p>Merci Prestashop™ !</p>
<h2>Comment faire alors ?</h2>
<p>Je cherche : apparemment, il n'est pas prévu que Prestashop™ fonctionne autrement, donc il va falloir coder et modifier le code. Je posterai ici-même le fruit de mes recherches.</p>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2010/12/prestashop-et-url-rewriting-pourquoi-cest-la-cata/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Nous sommes tous Wikileaks</title>
		<link>http://www.modulaweb.fr/blog/2010/12/nous-sommes-tous-wikileaks/</link>
		<comments>http://www.modulaweb.fr/blog/2010/12/nous-sommes-tous-wikileaks/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 07:32:49 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[miroir]]></category>
		<category><![CDATA[WikiLeaks]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=539</guid>
		<description><![CDATA[WikiLeaks dérange. Non pas qu'ils révèlent des choses qui pourraient bouleverser le monde, non, tout ce qui a été révélé ou presque, nous le savions, nous le sentions tous et toutes, et, révélées ou non, ces faits ne changeront pas. Ce qui dérange chez WikiLeaks, c'est que dès qu'ils ont une info entre les mains, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wikileaks.modulaweb.org"><img class="alignleft size-full wp-image-543" src="http://www.modulaweb.fr/blog/wp-content/uploads/2010/12/wlogo.png" alt="" width="168" height="387" /></a>WikiLeaks dérange. Non pas qu'ils révèlent des choses qui pourraient bouleverser le monde, non, tout ce qui a été révélé ou presque, nous le savions, nous le sentions tous et toutes, et, révélées ou non, ces faits ne changeront pas. Ce qui dérange chez WikiLeaks, c'est que dès qu'ils ont une info entre les mains, c'est plus fort qu'eux, ils ont le toupet de la mettre en ligne ! Vous rendez-vous compte ? Quelle impertinence !</p>
<h2>Muselage politique</h2>
<p>Tout d'abord, le domaine WikiLeaks.org disparaît. WikiLeaks est en suite privé de son hébergement par Amazon, puis c'est au tour de Paypal de fermer le compte de WikiLeaks (l'histoire ne dis pas combien d'argent il restait sur le compte lors de la fermeture) privant le site désormais fantomatique de tout revenus. WikiLeaks ne se laisse pas faire : des hébergeurs, il y en a beaucoup, l'un d'eux est en France (OVH) et héberge WikiLeaks sur l'adresse 213.251.145.96, victime d'attaques aussitôt mis en ligne.</p>
<p>Vendredi matin, au sot du lit, nous apprenions qu'Éric BESSON, notre tout frais ministre de l'économie numérique, sans doute nostalgique des habitudes prises à son ancien ministère, voulait expulser WikiLeaks du territoire car, je le cite, «<em>La France ne peut héberger des  sites Internet qui violent ainsi le secret des relations diplomatiques</em>». Rappelons tout de même que celui qui est à l'origine de la fuite n'est autre qu'un membre des relations diplomatiques américaines, et que les données étaient issues de la chancellerie US. De quoi se mèle-t-il ? Ce n'est pas WikiLeaks qui a agi pour obtenir ces données, c'est celui qui les a détourné à la source et c'est donc à la justice américaine de s'occuper de la diffusion de ces données… depuis le sol américain, et M. BESSON n'a pas à se mêler de ça. Je pensais que la France était un pays ou la liberté d'expression et, surtout, la liberté de la presse étaient inscrites dans la constitution… on m'aurait menti ? Pourquoi WikiLeaks ne pourrait pas diffuser des informations sous prétexte qu'elles étaient initialement destinées à rester secrètes ? En quoi héberger un site diffusant ces données, depuis la France (ou tout autre pays d'ailleurs) serait illégal ? En quoi, diffuser de l'information, quelle que soit sa provenance, est inacceptable ?</p>
<h2>Points de droit</h2>
<p>1. Jusqu'à preuve du contraire, les données diffusées par WikiLeaks n'ont fait l'objet d'aucune décision de justice les qualifiant d'illégales, même pas aux USA, hors c'est à un juge (français, est-il besoin de préciser ?) qu'il appartient de déterminer la légalité de la diffusion de ces données depuis la France.</p>
<p>2. OVH n'est en rien l'hébergeur du site WikiLeaks, il est l'exécutant technique, le sous-traitant, et ne peut être contraint que par ordre de justice de supprimer l'accès au site. L'hébergeur, c'est celui qui fournit l'hébergement à WikiLeaks, celui qui loue le serveur et qui en prête une partie à WikiLeaks.</p>
<p>M. BESSON devrait donc se renseigner avant de :</p>
<p>1. décréter que la diffusion des données initialement diffusées par WikiLeaks est illégal<br />
2. de demander à OVH le retrait de ces données.</p>
<h2>Nous sommes tous WikiLeaks</h2>
<p>WikiLeaks a montré aux décideurs, aux politiques, qu'il suffit d'une fuite et d'un média, que la presse se mêle de quelque chose, qu'une révélation soit faite, pour mettre au jour ou apporter la preuve de certains de leurs actions peu compatibles avec la réélection et parfois même le droit. C'est parce qu'il représente un contre-pouvoir, parce qu'il ne joue pas le jeu du secret que WikiLeaks dérange et que les dirigeants de notre pays, à l'instar d'autres, feront tout pour que le site et son fondateur disparaissent.</p>
<p>C'est en faisant en sorte que WikiLeaks soit toujours présent sur le web, à des endroits différents, impossibles à museler tous en même temps, en faisant en sorte qu'il ne soit plus réellement possible de bloquer WikiLeaks, en étant tous Wikileaks, qu'ensemble, nous défendrons la liberté, de la presse et des médias d'une part, mais aussi la liberté tout court : la liberté de ne pas jouer leur jeu, celle qui a fait que le peuple est souverain aujourd'hui dans nos contrées.</p>
<p>Pour se faire, il "suffit" de créer un miroir de WikiLeaks. Le notre, accessible depuis jeudi à l'adresse  <a title="Miroir de WikiLeaks mis en place par Modulaweb - S'ouvrira dans une nouvelle fenêtre" href="http://wikileaks.modulaweb.org" target="_blank">wikileaks.modulaweb.org</a>. Il n'est pas impossible qu'il y en ait d'autres dans les prochains jours, au plus il y en a, mieux c'est !</p>
<p>Vous aussi, si vous le pouvez et le souhaitez, vous pouvez <a title="le lien s'ouvrira dans une nouvelle fenêtre" href="http://wikileaks.modulaweb.org/mass-mirror.html" target="_blank">mettre en place un miroir en suivant les instructions de WikiLeaks</a>. <strong>Attention :</strong> votre site sera très probablement attaqué peu après que votre adresse ait été rendue publique, sachez donc que vous ferez prendre un risque à votre serveur !</p>
<h3>Quelques conseils</h3>
<p>- Créez une «prison» pour l'utilisateur créé pour que WikiLeaks mette à jour les données de votre miroir si vous savez comment (pour le coup, Google est votre ami) ou utilisez un serveur ftp qui restreigne les connexion dans un dossier sans possibilité de remonter dans l'arborescence (à ce sujet, le tutoriel «<a title="Cliquez pour lire Configurer vsftpd pour mettre à jour automatiquement WordPress" href="../2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/">Configurer vsftpd pour mettre à jour automatiquement WordPress</a>» pourra vous être utile, il suffit de suivre le tutoriel et de remplacer la ligne "listen_address=127.0.0.1" par "listen_address=IP.de.votre.serveur"</p>
<p>- éventuellement sécuriser Apache au prix de performances plus basses, afin de ne pas planter complètement votre serveur en cas d'attaque à l'aide de modules comme mod_evasive.</p>
<p>- utilisez, si possible, une adresse IP jettable (IP Failover par exemple) histoire de ne pas complètement «griller» l'adresse principale de votre serveur.</p>
<p>- évitez d'héberger le miroir sur une machine à la maison : la qualité du miroir sera médiocre et vous vous éviterez ainsi pas mal de soucis de sécurité.</p>
<p>- rendez votre miroir public en communiquant à son sujet, un miroir invisible ne sert à rien (diffusez dans vos réseaux sociaux, sites web…)</p>
<p>- ne jouez pas avec la justice : si la justice se prononce un jour contre la publication de ces données, rendant par la même le fait de constituer un miroir illégal, supprimez votre miroir à la seconde où vous recevrez une demande de votre prestataire d'hébergement… mais il vous est toujours possible d'utiliser un hébergement à l'étranger si le cœur vous en dit.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 674px; width: 1px; height: 1px; overflow: hidden;">
<pre>listen_address=127.0.0.1
</pre>
</div>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2010/12/nous-sommes-tous-wikileaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimiser Apache – Partie 1</title>
		<link>http://www.modulaweb.fr/blog/2010/11/optimiser-apache/</link>
		<comments>http://www.modulaweb.fr/blog/2010/11/optimiser-apache/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 23:00:40 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[gnu/linux]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=524</guid>
		<description><![CDATA[La question « Comment faire en sorte que les pages de mon site soient servies rapidement ? » reviens souvent. Si vous utilisez un hébergement mutualisé, c'est uniquement du coté CMS voire langage (PHP le plus souvent) qu'il va falloir travailler. Si vous possédez votre propre serveur dédié, vous pourrez agir directement à la source [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-527" src="http://www.modulaweb.fr/blog/wp-content/uploads/2010/11/apache.jpeg" alt="" width="120" height="120" />La question « Comment faire en sorte que les pages de mon site soient servies rapidement ? » reviens souvent. Si vous utilisez un hébergement mutualisé, c'est uniquement du coté CMS voire langage (PHP le plus souvent) qu'il va falloir travailler. Si vous possédez votre propre serveur dédié, vous pourrez agir directement à la source : optimiser le serveur web lui même.</p>
<p>Ce tutoriel a pour but de donner des pistes vous permettant d'optimiser au mieux, en comprenant à peu près ce que vous faites, un serveur rencontré classiquement : Apache dans sa version 2, tournant bien évidemment sur un système GNU/Linux, dans le but de servir des pages générées à l'aide de PHP.</p>
<p><strong>Attention :</strong> même si ces optimisations peuvent vous faire gagner pas mal de points sur PageSpeed ou YSlow, ce tutoriel a pour unique sujet l'optimisation d'Apache. De même, il ne sera pas question ici de discuter de l'utilisation d'un autre serveur pour servir les contenus statiques voire de comparer les performances d'Apache avec d'autres serveurs web comme Lighttpd ou NGInx</p>
<p>Si votre serveur est déjà en production, il peut être intéressent d'effectuer un test de performances, par exemple à l'aide d'un outil en ligne, comme <a title="Ouvrir l'utilitaire d'évaluation de la vitesse de pages web GTMetrix dans une nouvelle fenêtre." href="http://gtmetrix.com/" target="_blank">GTMetrix</a> (créez un compte, vous pourrez ainsi accéder à plus d'options, et avoir un joli graphe de l'évolution des performances, c'est évidement gratuit) dès maintenant, et après chaque optimisation.</p>
<h2>Prefork ou Worker ?</h2>
<p>Il convient de choisir quelle « mouture » d'Apache utiliser. Ces moutures se choisissent en installant  l'un des modules « core » déterminant le comportement d'Apache vis à vis des requêtes multiples et concurrentes. Sous GNU/Linux, Apache dispose de deux modules stables pour la production : <acronym title="Multi-Processing Module : Module à Processus Multiples">MPM</acronym> Prefork et MPM Worker. Les modules MPM dupliquent Apache afin de lui permettre de répondre à plusieurs requêtes simultanément.</p>
<p>La différence entre les deux est que là où MPM Prefork utilise uniquement des <a title="Voir la définition sur Wikipedia dans une nouvelle fenêtre" href="http://fr.wikipedia.org/wiki/Processus_%28informatique%29" target="_blank">processus</a> multiples pour prendre en charge les requêtes concurrentes, MPM Worker  utilise des <a title="Voir la définition sur Wikipedia dans une nouvelle fenêtre" href="http://fr.wikipedia.org/wiki/Thread_%28informatique%29">threads</a> pour paralléliser les requêtes au sein même des processus multiples, offrant donc de meilleures performances mais imposant d'utiliser uniquement des module Apache supportant eux même les threads, interdisant donc l'utilisation du module mod_php, permettant à Apache d'interprêter les scripts PHP.</p>
<p>La configuration que nous utiliserons sera donc Apache 2 MPM Prefork avec PHP installé en tant que module (mod_php)</p>
<p style="padding-left: 30px;">Certains objecterons qu'on aurait très bien pu utiliser MPM Worker et exécuter les scripts PHP via une interface CGI (mod_cgi, mod_fastcgi voire mod_speedycgi) et ils auront raion… cependant, même avec des optimisations, cette solution sera toujours moins performante que MPM Prefok avec mod_php, et l'utilisation d'accélérateurs de scripts PHP comme la mise en cache d'op-code est impossible en dehors de mod_php : lorsqu'on utilise PHP avec Apache pour un site nécessitant de la performance, mod_php est un choix plus que judicieux.</p>
<h2>Points à améliorer</h2>
<p>« Qu'est-ce qui pourrait bien ralentir un serveur Apache ? » Est la question à laquelle nous allons répondre afin de déterminer les points à améliorer pour permettre à Apache de servir les pages plus vite.</p>
<h3>Accès disque</h3>
<p>Un accès disque est toujours coûteux en temps, malgré les optimisations effectuées par le système d'exploitation. À chaque requête d'une page web, outre les accès disques effectués pour récupérer les données des fichiers à servir, d'autres accès disque sont effectués, comme par exemple l'inscription des évènements dans les fichiers log, le calcul de l'<acronym title="Entity Tag : Chaine de caractère unique calculée en fonction du fichier correspondant permettant aux navigateurs de savoir si un fichier est nouveau ou pas.">ETag</acronym> mais aussi la lecture d'un fichier .htaccess ou la recherche d'un fichier d'index !</p>
<h3>Requêtes DNS</h3>
<p>Des requêtes DNS peuvent être effectuées par Apache lorsque, par exemple, il est configuré pour afficher les noms d'hôtes correspondant à l'adresse IP des visiteurs dans les fichiers logs. Certains modules,  comme mod_defensible ou mod_rbl peuvent effectuer plusieurs requêtes DNS afin de vérifier si l'adresse IP et/ou le nom d'hôte de la connexion à Internet du visiteur fait partie ou non d'une ou plusieurs listes noires.</p>
<h3>Taille des fichiers</h3>
<p>Chaque octet compte : chaque octet servi par votre serveur aura un impact direct sur le temps qu'il mettra a finir de servir la ressource demandée, et la compression est non seulement très efficace sur les fichiers texte, mais elle est aussi supportée par de plus en plus de navigateurs tels que Firefox ou Safari ; ça tombe bien, Apache sais compresser à la volée les contenus à servir lorsque le navigateur le supporte.</p>
<h3>Nombre de requêtes</h3>
<p>Chaque connexion est coûteuse en temps et en ressources : il serait formidable de pouvoir signifier au navigateur des visiteurs que certains fichiers ne sont modifier peu souvent et qu'il peut les mettre en cache et les afficher directement au lieu d'effectuer une requête pour chacun d'eux… heureusement, Apache possède un module qui permet de gérer la manière de signifier aux navigateurs les modalités de mise en cache des fichiers selon leur type.</p>
<h3>Configuration d'Apache</h3>
<p>Apache a besoin d'indications pour savoir comment réagir lors des pics de charge et être suffisamment réactif. La configuration idéale pour votre serveur sera déterminée en fonction de la RAM disponible, de celle consumée par la génération des pages, du type de documents servis, mais aussi de la fréquence et du nombre des visites et du trafic. Cette configuration doit être mûrement réfléchie, certaines valeurs, choisies avec discernement peuvent sauver Apache de crash fâcheux lors de pics de visite, ou tout simplement lui permettre d'utiliser au mieux les ressources nécessaires à son fonctionnement.</p>
<h2>Que faire ?</h2>
<p>Maintenant que nous avons vu les éléments clés, établissons un plan d'action, le détail des actions sera vu dans la deuxième partie. Bien évidemment, tout cela est à ajuster au cas par cas, selon les besoins réels de votre serveur.</p>
<h3>Accès disque</h3>
<p>Afin de limiter les accès disque au strict nécessaire (la récupération des données à envoyer au client), nous allons :</p>
<ul>
<li>Désactiver l'utilisation des ETags<br />
Ce système, en plus d'être obsolète est inutile lorsqu'on active le module de gestion du cache d'Apache.</li>
<li>Ne pas autoriser l'usage des fichiers .htaccess et rapatrier le contenu de ces fichiers dans les fichiers de définition des vhosts</li>
<li>Réduire, vhost par vhost, le nombre de possibilités concernant le fichier d'index</li>
<li>Désactiver l'option Multiview afin de gagner du temps</li>
<li>Réduire le niveau d'inscription des évènements dans les fichiers logs à ce qui est réellement utile, vhost par vhost</li>
</ul>
<h3>Requêtes DNS</h3>
<p>Afin de supprimer les requêtes DNS, nous allons :</p>
<ul>
<li>Faire en sorte de n'afficher que les adresses IP dans les fichiers log</li>
<li>Désactiver les modules de vérification de RBL</li>
</ul>
<h3>Taille des fichiers</h3>
<p>Afin de réduire la taille des fichiers, nous allons activer la compression dynamique en fonction du navigateur.</p>
<h3>Nombre de requêtes</h3>
<p>Pour diminuer le nombre de requêtes, nous allons activer et configurer le module de mise en cache pour le serveur entier et chaque vhost si besoin, en fonction du contenu, des fichiers à servir et de la fréquence de rafraichissement des données.</p>
<h3>Configuration d'Apache</h3>
<p>Nous allons configurer Apache à partir de données que nous allons récolter :</p>
<ul>
<li>La mémoire allouée à Apache<br />
Si le serveur héberge un serveur de bases de données comme MySQL ou d'autres services : il conviendra de déterminer quelle quantité de RAM leur réserver et de laisser le reste à Apache.</li>
<li>La mémoire consommée par un processus d'Apache<br />
Pour déterminer la taille de cette mémoire, il faudra exécuter une série de requête (à l'aide d'un ab -n 1000 -c 10 http://votre.url par exemple) tout en exécutant un top ou htop en même temps sur le serveur.</li>
<li>La durée de chargement maximal de vos pages<br />
À l'aide du plugin PageSpeed pour le plugin FireBug pour Firefox par exemple.</li>
</ul>
<p>Il peut paraître curieux de se baser sur une mesure de vitesse de chargement de page, ou de mesurer la RAM utilisée par des processus afin de permettre d'accélérer Apache, mais c'est la seule manière de déterminer, par itérations successives et tâtonnements, les bonnes valeurs pour votre Apache. Il conviendra d'effectuer ces réglages après avoir effectué les autres optimisations, mais aussi après chaque modification majeure de vos scripts PHP car chaque modification modifie aussi la quantité de RAM dont ils ont besoin, donc celle nécessaire à Apache, donc ses paramètres.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<p>La question «Comment faire en sorte que les pages de mon site soient  servies rapidement ?» reviens souvent. Si vous utilisez un hébergement  mutualisé, c'est uniquement du coté CMS voire langage (PHP le plus  souvent) qu'il va falloir travailler. Si vous possédez votre propre  serveur dédié, vous pourrez agir directement à la source : optimiser le  serveur web lui même.</p>
<p>Ce tutoriel a pour but de donner des pistes  vous permettant d'optimiser au mieux, en comprenant à peu près ce que  vous faites, un serveur rencontré classiquement, Apache dans sa version  2, tournant bien évidemment sur un système GNU/Linux, dans le but de  servir des pages générées à l'aide de PHP.</p>
<p>Attention : même si effectuer ces optimisations peuvent vous faire gagner pas mal de points sur Page Speed ou</p>
<p>Si  votre serveur est déjà en production, il peut être très intéressent  d'effectuer un test de performances, par exemple à l'aide d'un outil en  ligne, comme <a href="http://gtmetrix.com/">http://gtmetrix.com/</a> (créez un compte, vous pourrez ainsi accéder à plus d'options, c'est  évidement gratuit) dès maintenant, et après chaque optimisation.</p>
<h1>Avant toute chose</h1>
<p>Il  convient de choisir quelle « mouture » d'Apache choisir. Ces moutures  se choisissent en installant  l'un des modules « core » déterminant le  comportement d'Apache vis à vis des requêtes multiples et concurrentes.  Sous GNU/Linux, Apache dispose de deux modules stables pour la  production : MPM Prefork et MPM Worker. [ note : les modules MPM  dupliquent Apache afin de lui permettre de répondre à plusieurs requêtes  simultanément.]</p>
<p>La différence entre les deux est que là où MPM  Prefork utilise uniquement des processus  (http://fr.wikipedia.org/wiki/Processus_%28informatique%29) multiples  pour prendre en charge les requêtes concurrentes, MPM Worker  utilise  des threads (<a href="http://fr.wikipedia.org/wiki/Thread_%28informatique%29">http://fr.wikipedia.org/wiki/Thread_%28informatique%29</a>)  pour paralléliser les requêtes au sein même des processus multiples,  offrant donc de meilleures performances mais imposant d'utiliser  uniquement des modules supportant les threads, interdisant par la même  occasion l'utilisation du module mod_php permettant à Apache  d'interprêter les script PHP.</p>
<p>On prendra donc soin d'installer apache mpm_prefork ainsi que mod_php.</p>
<p>[encar  Certains objecterons qu'on aurait très bien pu utiliser MPM Worker et  exécuter les scripts PHP via une interface CGI (mod_cgi, mod_fastcgi  voire mod_speedycgi) et ils auront raion… cpendant, même avec des  optimisations, cette solution sera toujours moins performante que MPM  Prefok avec mod_php. De plus, l'utilisation d'accélérateurs de scripts  PHP comme la mise en cache d'op-code est impossible en dehors de  mod_php. ]</p>
<h1>Points à améliorer</h1>
<p>Qu'est-ce qui pourrait  bien ralentir notre serveur ? C'est la question qu'il est temps de se  poser pour pouvoir avancer dans la bonne direction : elle nous permettra  d'identifier les goulots d'étranglement qui ralentissent Apache. Nous  ne parlerons pas ici d'optimisations coté PHP.</p>
<h2>Accès disque</h2>
<p>À  chaque fois que votre serveur est sollicité, toutes les ressources dont  il a besoin sont prises sur le disque. Du fichier .htaccess aux images  et scripts, en passant par les logs. Un accès disque est aussi effectué à  chaque fois qu'Apache doit déterminer si le fichier a été modifié ou  non afin de calculer un ETAG par exemple.</p>
<h2>Requêtes DNS</h2>
<p>Lorsque  les domaines sont affichés en clair dans les logs, lorsqu'un module  vérifie si l'adresse ip d'un client figure dans une RBL ou lorsque dans  une règle de contrôle d'accès à un dossier, un domaine est à vérifier,  des requêtes DNS sont effectuées, ralentissant d'autant chaque  traitement de requête.</p>
<h2>Taille des fichiers transférés</h2>
<p>Au  plus la taille des fichiers transférés est faible, au plus vite la page  sera affichée sur le navigateur du visiteur de votre site : il faut  donc, le plus possible, réduire la taille des fichiers transférés,  notamment par l'utilisation de la compression lorsque cela est possible.</p>
<h2>Taille des requêtes</h2>
<p>Si  votre site web installe des cookies sur le navigateur client, ces  derniers seront joints à chaque requête, même celles concernant des  fichiers statiques invariants.</p>
<h2>Nombre de requêtes pour une page</h2>
<p>Dans  votre page web, chaque script, chaque image, ou feuille de style est  une requête supplémentaire à laquelle votre serveur devra répondre. Peut  être qu'il n'est pas utile de tout recharger à chaque fois, et que le  navigateur de l'internaute peut éventuellement mettre tout ou partie  d'un contenu statique en cache</p>
<h2>Mauvaise configuration</h2>
<h3>Matérielle</h3>
<p>Un  serveur web, on l'a vu plus haut, a besoin d'accéder très régulièrement  au système de fichiers : utiliser un système de stockage adéquat et  permettant des taux de transfert élevés est préférable.</p>
<p>Un  serveur web a aussi besoin de RAM, suffisamment pour lui permettre de  servir autant de requêtes simultanées que nécessaire, sans avoir besoin  d'utiliser la partition d'échange.</p>
<p>On le verra plus tard, mais la  RAM pourra aussi servir à mettre des ressources en cache voire  d'abriter un système de fichiers volatile, selon les besoins du site  (son trafic) et votre budget, au plus il y a de RAM, au mieux c'est.</p>
<p>Dans le cas de l'utilisation de PHP, on aura bien évidemment besoin de plus de RAM que pour servir des fichiers statiques.</p>
<h3>Du système</h3>
<p>Il  est important de configurer le système d'exploitation de façon optimale  ainsi que d'installer un certain nombre d'utilitaires permettant  d'aider Apache à rester performant, comme, par exemple, un système de  rotation des fichiers logs, un système de gestion d'un cache en RAM. On  prendra aussi soin de faire en sorte que d'autres processus n'occupent  pas le serveur inutilement (CPU et RAM).</p>
<h3>D'Apache</h3>
<p>Apache  en lui même aura évidemment besoin d'être configuré avec discernement,  mais le choix des modules ainsi que leur configuration propre est tout  aussi important : certains modules, installés ou activés par défaut, ou  dans leur configuration initiale peuvent faire grandement chuter les  performances d'Apache.</p>
</div>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/08/creer-un-fichier-pid-pour-funambol-sous-gnu-linux/">Créer un fichier PID pour Funambol sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/">Quelques scripts pour profiter de son scanner sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/">Configurer vsftpd pour mettre à jour automatiquement Wordpress</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/inclure-ses-machines-virtuelles-a-son-reseau-avec-virtualbox/">Inclure ses machines virtuelles à son réseau avec VirtualBox</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/installation-de-funambol-couple-a-zimbra-sur-un-serveur-gnu-linux/">Installation de Funambol couplé à Zimbra sur un serveur GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/pour-des-sessions-ssh-qui-durent/">Pour des sessions SSH qui durent</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2010/11/optimiser-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ressources graphiques</title>
		<link>http://www.modulaweb.fr/blog/2010/07/ressources-graphiques/</link>
		<comments>http://www.modulaweb.fr/blog/2010/07/ressources-graphiques/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 14:31:32 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[icones]]></category>
		<category><![CDATA[infographie]]></category>
		<category><![CDATA[mokup]]></category>
		<category><![CDATA[ressources]]></category>
		<category><![CDATA[textures]]></category>
		<category><![CDATA[vectoriel]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=495</guid>
		<description><![CDATA[Voici des sites proposant des ressources graphiques, sous licence Common Contents. Attention: certaines ressources sont sous licence avec clause non commerciale. Certains liens présentés ici vous amènerons vers d'autres articles de blogs comme celui-ci : recensant des liens vers d'autres sites. Merci à Frank et d'autres twitters anonymes pour avoir partagé leurs bonnes adresses. Vectoriel [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.modulaweb.fr/blog/wp-content/uploads/2010/07/expose.png"><img class="alignleft size-full wp-image-503" src="http://www.modulaweb.fr/blog/wp-content/uploads/2010/07/expose.png" alt="" width="128" height="128" /></a>Voici des sites proposant des ressources graphiques, sous licence Common Contents.</p>
<p>Attention: certaines ressources sont sous licence avec clause non commerciale.</p>
<p>Certains liens présentés ici vous amènerons vers d'autres articles de blogs comme celui-ci : recensant des liens vers d'autres sites. <span id="more-495"></span></p>
<p>Merci à <a href="http://twitter.com/webomatik_web">Frank</a> et d'autres twitters anonymes pour avoir partagé leurs bonnes adresses.</p>
<h2>Vectoriel et icônes :</h2>
<ul>
<li><a href="http://www.123vectors.com/">123vectors.com</a></li>
<li><a href="http://www.vecteezy.com/">vecteezy.com</a></li>
<li><a href="http://www.vectorvalley.com/">vectorvalley.com</a></li>
<li><a href="http://www.fordesigner.com/">fordesigner.com</a></li>
<li><a href="http://www.vectorjunky.com/">vectorjunky.com</a></li>
<li><a href="http://qvectors.net/">qvectors.net</a></li>
<li><a href="http://www.iconspedia.com/">iconspedia.com</a></li>
<li><a href="http://www.iconfinder.com/free_icons/?ultimate">iconfinder.com</a></li>
<li><a href="http://www.qianduan.net/abroad-the-best-25-free-vector-images-download-site-collection.html">qianduan.net</a> (post sur un blog japonais regroupant des liens intéressents)</li>
</ul>
<h2>Textures</h2>
<ul>
<li><a href="http://www.noupe.com/freebie/40-fresh-free-texture-packs-from-2010.html">40 packs de texture sur noupe.com</a></li>
<li><a href="http://shadowhousecreations.blogspot.com/search/label/Textures">Shadowhouse Creations</a></li>
</ul>
<h2>Outils pour le webdesigner, templates, mok-ups</h2>
<ul>
<li><a href="http://www.smashingmagazine.com/2010/02/05/50-free-ui-and-web-design-wireframing-kits-resources-and-source-files/">Billet-annuaire sur Smashing Magazine</a></li>
</ul>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/">Quelques scripts pour profiter de son scanner sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/un-nuancier-pantone%c2%ae-en-ligne/">Un nuancier Pantone® en ligne</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2010/07/ressources-graphiques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un fichier PID pour Funambol sous GNU/Linux</title>
		<link>http://www.modulaweb.fr/blog/2009/08/creer-un-fichier-pid-pour-funambol-sous-gnu-linux/</link>
		<comments>http://www.modulaweb.fr/blog/2009/08/creer-un-fichier-pid-pour-funambol-sous-gnu-linux/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 05:47:19 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[funambol]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[head]]></category>
		<category><![CDATA[Monit]]></category>
		<category><![CDATA[PID]]></category>
		<category><![CDATA[ps]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=397</guid>
		<description><![CDATA[Lorsqu'il est lancé, le serveur Funambol ne crée pas de fichier PID rendant difficile son monitoring à l'aide d'outils comme Monit qui, à l'aide d'un PID, monitorent les ressources consommées par un process donné. À l'aide d'un script bash, nous allons permettre cette création de fichier PID. Fonctionnement du script Rien de bien sorcier, juste [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-340" src="http://www.modulaweb.fr/blog/wp-content/uploads/2009/02/funambol1.png" alt="" width="128" height="128" />Lorsqu'il est lancé, le serveur Funambol ne crée pas de fichier PID rendant difficile son monitoring à l'aide d'outils comme <a href="http://fr.wikipedia.org/wiki/Monit">Monit</a> qui, à l'aide d'un PID, monitorent les ressources consommées par un process donné.</p>
<p>À l'aide d'un script bash, nous allons permettre cette création de fichier PID.<br />
<span id="more-397"></span></p>
<h2>Fonctionnement du script</h2>
<p>Rien de bien sorcier, juste une recherche des PID des différents composants du serveur Funambol à l'aide d'un bon vieux <a href="http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man1/ps.1.html">ps</a> couplé à une paire de <a href="http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man1/grep.1.html">grep</a> associés à un petit <a href="http://fr.wikipedia.org/wiki/Awk">awk</a> suivi d'un <a href="http://pwet.fr/man/linux/commandes/head">head</a>... autrement dit "on recherche les processus des composants de funambol dans la liste des processus, et on récupère leurs PID".</p>
<h2>Le script</h2>
<p>Il y a certainement plus élégant mais l'essentiel c'est qu'il fasse ce qu'on lui demande et qu'il remplisse sa fonction didactique.</p>
<pre class="bash"><span style="color: #808080; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Check the script is being run by root, or die.</span>
<span style="color: #007800;">ROOT_UID=</span><span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;$UID&quot;</span> -ne <span style="color: #ff0000;">&quot;$ROOT_UID&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Run script as &quot;</span>root<span style="color: #ff0000;">&quot;.&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span>
	<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #007800;">DS_SERVER=</span>`<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> ds-server | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span>`
&nbsp;
<span style="color: #007800;">HYPERSONIC=</span>`<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> hypersonic | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span>`
&nbsp;
<span style="color: #007800;">CTP_SERVER=</span>`<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> com.funambol.ctp.server.CTPServer | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span>`
&nbsp;
<span style="color: #007800;">INBOX_LISTENER=</span>`<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> inbox-listener | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span>`
&nbsp;
<span style="color: #007800;">PIM_LISTENER=</span>`<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> pimlistener | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span>`
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -z <span style="color: #ff0000;">&quot;$DS_SERVER&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -e /opt/funambol/ds-server.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #c20cb9; font-weight: bold;">rm</span> /opt/Funambol/ds-server.pid
	<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span>
	<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> ds-server | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span> | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> | <span style="color: #c20cb9; font-weight: bold;">head</span> -n <span style="color: #000000;">1</span> &gt; /opt/Funambol/ds-server.pid
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -z <span style="color: #ff0000;">&quot;$HYPERSONIC&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -e /opt/funambol/hypersonic.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #c20cb9; font-weight: bold;">rm</span> /opt/Funambol/hypersonic.pid
        <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span>
        <span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> hypersonic | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span> | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> | <span style="color: #c20cb9; font-weight: bold;">head</span> -n <span style="color: #000000;">1</span> &gt; /opt/Funambol/hypersonic.pid
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -z <span style="color: #ff0000;">&quot;$CTP_SERVER&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -e /opt/funambol/ctp-server.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #c20cb9; font-weight: bold;">rm</span> /opt/Funambol/ctp-server.pid
        <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span>
        <span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> com.funambol.ctp.server.CTPServer | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span> | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> | <span style="color: #c20cb9; font-weight: bold;">head</span> -n <span style="color: #000000;">1</span> &gt; /opt/Funambol/ctp-server.pid
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -z <span style="color: #ff0000;">&quot;$INBOX_LISTENER&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -e /opt/funambol/inbox-listener.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #c20cb9; font-weight: bold;">rm</span> /opt/Funambol/inbox-listener.pid
        <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span>
        <span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> inbox-listener | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span> | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> | <span style="color: #c20cb9; font-weight: bold;">head</span> -n <span style="color: #000000;">1</span> &gt; /opt/Funambol/inbox-listener.pid
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -z <span style="color: #ff0000;">&quot;$PIM_LISTENER&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -e /opt/funambol/pim-listener.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #c20cb9; font-weight: bold;">rm</span> /opt/Funambol/pim-listener.pid
        <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span>
        <span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> pimlistener | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span> | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> | <span style="color: #c20cb9; font-weight: bold;">head</span> -n <span style="color: #000000;">1</span> &gt; /opt/Funambol/pim-listener.pid
<span style="color: #000000; font-weight: bold;">fi</span></pre>
<h2>Utilisation</h2>
<p>En appelant ce script via une tache cron, par exemple, vous permettrez aux système de monitoring d'avoir un pid à jour en cas de redémarrage.</p>
<p>Il est aussi possible de créer un script de commande pour (re)lancer/arrêter Funambol afin de créer/détruire ces fichiers PID au démarrage/arrêt de Funambol. Voici un exemple d'un tel script, où le script précédent (celui qui crée les PID) est dans /opt/controls/mk-funambol-pid-file :</p>
<pre class="bash"><span style="color: #808080; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Check the script is being run by root, or die.</span>
<span style="color: #007800;">ROOT_UID=</span><span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;$UID&quot;</span> -ne <span style="color: #ff0000;">&quot;$ROOT_UID&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Run script as &quot;</span>root<span style="color: #ff0000;">&quot;.&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span>
	<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #007800;">FUNAMBOL=</span>`<span style="color: #c20cb9; font-weight: bold;">ps</span> -ef | <span style="color: #c20cb9; font-weight: bold;">grep</span> /opt/Funambol | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #c20cb9; font-weight: bold;">grep</span>`
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -z <span style="color: #ff0000;">&quot;$FUNAMBOL&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #007800;">FUNAMBOL_ON=</span><span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">else</span>
	<span style="color: #007800;">FUNAMBOL_ON=</span><span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> $<span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">in</span>
start<span style="color: #7a0874; font-weight: bold;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$FUNAMBOL_ON</span> -eq <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
	<span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Funambol is already started : use $0 restart option to restart.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
		<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
	<span style="color: #000000; font-weight: bold;">else</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Starting Funambol...&quot;</span>
		/opt/Funambol/bin/funambol start
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Creating PID files...&quot;</span>
		/opt/controls/mk-funambol-pid-<span style="color: #c20cb9; font-weight: bold;">file</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
	;;
stop<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$FUNAMBOL_ON</span> -eq <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
	<span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Funambol is already stopped.&quot;</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
        <span style="color: #000000; font-weight: bold;">else</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Stopping Funambol...&quot;</span>
                /opt/Funambol/bin/funambol stop
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Deleting PID files...&quot;</span>
                /opt/controls/mk-funambol-pid-<span style="color: #c20cb9; font-weight: bold;">file</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span>
        <span style="color: #000000; font-weight: bold;">fi</span>
	;;
restart<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$FUNAMBOL_ON</span> -eq <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
	<span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Funambol was already stopped !&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Starting Funambol...&quot;</span>
                /opt/Funambol/bin/funambol start
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Creating PID files...&quot;</span>
                /opt/controls/mk-funambol-pid-<span style="color: #c20cb9; font-weight: bold;">file</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span>
	<span style="color: #000000; font-weight: bold;">else</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Stopping Funambol...&quot;</span>
                /opt/Funambol/bin/funambol stop
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Deleting PID files...&quot;</span>
                /opt/controls/mk-funambol-pid-<span style="color: #c20cb9; font-weight: bold;">file</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Starting Funambol...&quot;</span>
                /opt/Funambol/bin/funambol start
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Creating PID files...&quot;</span>
                /opt/controls/mk-funambol-pid-<span style="color: #c20cb9; font-weight: bold;">file</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;done.&quot;</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span>
        <span style="color: #000000; font-weight: bold;">fi</span>
	;;
status<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$FUNAMBOL_ON</span> -eq <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
        <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Funambol is curently stopped.&quot;</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span>
        <span style="color: #000000; font-weight: bold;">else</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Funambol is curently started.&quot;</span>
                <span style="color: #7a0874; font-weight: bold;">echo</span>
        <span style="color: #000000; font-weight: bold;">fi</span>
        ;;
*<span style="color: #7a0874; font-weight: bold;">&#41;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage $0 [start|stop|restart|status]&quot;</span>
	;;
<span style="color: #000000; font-weight: bold;">esac</span></pre>
<p>Ce script permet, en outre, de permettre un redémarrage direct de Funambol.</p>
<h2>Exemple d'application : configuration de Monit pour Funambol</h2>
<p>Considérant que nous avons les 2 scripts précédent, l'un dans /opt/controls/mk-funambol-pid-file et l'autre dans /opt/controls/funambol, on pourra utiliser, par exemple, la configuration suivante pour Monit :</p>
<pre># Funambol
check process ds-server with pidfile /opt/Funambol/ds-server.pid
        group funambol
        start program "/opt/controls/funambol start"
        stop program "/opt/controls/funambol stop"
        if failed port 8443 for 3 times within 3 cycles then restart
        if 2 restart within 10 cycles then timeout
check process hypersonic with pidfile /opt/Funambol/hypersonic.pid
        group funambol
check process ctp-server with pidfile /opt/Funambol/ctp-server.pid
        group funambol
check process inbox-listener with pidfile /opt/Funambol/inbox-listener.pid
        group funambol
check process pim-listener with pidfile /opt/Funambol/pim-listener.pid
        group funambol</pre>
<p>Ici funambol utilise une connexion sécurisée sur le port 8443 comme indiqué dans le <a href="http://www.modulaweb.fr/blog/2009/02/installation-de-funambol-couple-a-zimbra-sur-un-serveur-gnu-linux/">tutoriel d'installation de Funambol</a>, nous monitorons donc ce port.</p>
<p>Grâce aux pid, nous pourrons voir sur l'interface web de Monit les ressources consommées par les composants de Funambol, et éventuellement créer des règles dans le cas où cette consommation deviendrait excessive.</p>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/">Quelques scripts pour profiter de son scanner sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/installation-de-funambol-couple-a-zimbra-sur-un-serveur-gnu-linux/">Installation de Funambol couplé à Zimbra sur un serveur GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2010/11/optimiser-apache/">Optimiser Apache – Partie 1</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/">Configurer vsftpd pour mettre à jour automatiquement Wordpress</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/inclure-ses-machines-virtuelles-a-son-reseau-avec-virtualbox/">Inclure ses machines virtuelles à son réseau avec VirtualBox</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/pour-des-sessions-ssh-qui-durent/">Pour des sessions SSH qui durent</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2009/08/creer-un-fichier-pid-pour-funambol-sous-gnu-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un «dummy-package» sous Debian ou Ubuntu</title>
		<link>http://www.modulaweb.fr/blog/2009/08/creer-un-dummy-package-sous-debian-ou-ubuntu/</link>
		<comments>http://www.modulaweb.fr/blog/2009/08/creer-un-dummy-package-sous-debian-ou-ubuntu/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 04:39:27 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dpkg]]></category>
		<category><![CDATA[dummy]]></category>
		<category><![CDATA[equivs]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=367</guid>
		<description><![CDATA[Il arrive parfois qu'une dépendance d'un paquet soit manquante ou ne puisse être installée car un autre programme, compilé localement ou installé par ailleurs, remplisse la fonction, mais sans le signaler au système de gestion de paquets. Exemple : mailx sur un serveur où Zimbra est installé. Lorsqu'on cherche à installer mailx, le système de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.modulaweb.fr/blog/wp-content/uploads/2009/08/applications-system.png"><img class="alignleft size-full wp-image-371" src="http://www.modulaweb.fr/blog/wp-content/uploads/2009/08/applications-system.png" alt="" width="128" height="128" /></a>Il arrive parfois qu'une dépendance d'un paquet soit manquante ou ne puisse être installée car un autre programme, compilé localement ou installé par ailleurs, remplisse la fonction, mais sans le signaler au système de gestion de paquets.</p>
<p><strong>Exemple :</strong> mailx sur un serveur où Zimbra est installé.<br />
Lorsqu'on cherche à installer mailx, le système de paquetage nous indique qu'il lui faut un MTA et nous propose exim ou postfix. Or Zimbra possède déjà son propre MTA (postfix en l'occurrence) et nous n'allons pas en installer un deuxième.</p>
<p><strong>Solution :</strong> un «dummy-package»</p>
<p>Un «dummy-package» est un paquet vide, ayant pour fonction soit de combler artificiellement une dépendance, soit d'en ajouter artificiellement. Par exemple, le paquet linux-headers dépend toujours de la version du noyau installée : son installation implique l'installation des headers correspondant au noyau actuellement installé.</p>
<h2>Création d'un dummy-package</h2>
<p>Installons le paquet "equivs" qui permet de créer des dummy-packages, justement</p>
<pre class="bash"><span style="color: #c20cb9; font-weight: bold;">sudo</span> apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> equivs</pre>
<p>Créons un dossier pour notre paquet et création du fichier de configuration</p>
<pre class="bash"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> dummy-package; <span style="color: #7a0874; font-weight: bold;">cd</span> dummy-package</pre>
<p>Facultatif : crée un fichier de configuration par défaut (utile pour connaitre le formatage)</p>
<pre class="bash">equivs-control dummy-package</pre>
<p>Remplacer le contenu du fichier de configuration de notre paquet, ou éditer le fichier "dummy-package" via</p>
<pre class="bash"> <span style="color: #c20cb9; font-weight: bold;">nano</span> dummy-package</pre>
<p>et y mettre</p>
<pre>Section: misc
Priority: optional
Standards-Version: 3.6.2

Package: dummy-package
Version: 1.0
Maintainer: votre nom &lt;vous@domaine.tld&gt;
Pre-Depends:
Depends:
Recommends:
Suggests:
Provides: &lt;liste de ce qui fournit ce paquet séparée par des virgules&gt;
Replaces:
Description: Paquet vide permettant de combler les dépendances suivantes : &lt;liste de ce qui fournit ce paquet&gt;</pre>
<p>Créons et installons notre paquet</p>
<pre class="bash">equivs-build dummy-package
<span style="color: #c20cb9; font-weight: bold;">sudo</span> dpkg -i dummy-package_1.0_all.deb</pre>
<h2>Exemple de dummy-package</h2>
<p>Si on reprend l'exemple de mailx, notre dummy-package aura le fichier de configuration suivant :</p>
<pre>Section: misc
Priority: optional
Standards-Version: 3.6.2

Package: dummy-mta
Version: 1.0
Maintainer: votre nom &lt;vous@domaine.tld&gt;
Pre-Depends:
Depends:
Recommends:
Suggests:
Provides: mail-transport-agent
Replaces:
Description: Paquet vide permettant de combler la dépendance à mail-transport-agent</pre>
<p>Simple et efficace.</p>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/">Configurer vsftpd pour mettre à jour automatiquement Wordpress</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/lancer-ubuntu-dans-virtualbox/">Lancer Ubuntu dans VirtualBox</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2009/08/creer-un-dummy-package-sous-debian-ou-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer les spams aux oubliettes avec Zimbra</title>
		<link>http://www.modulaweb.fr/blog/2009/05/envoyer-les-spams-aux-oubliettes-avec-zimbra/</link>
		<comments>http://www.modulaweb.fr/blog/2009/05/envoyer-les-spams-aux-oubliettes-avec-zimbra/#comments</comments>
		<pubDate>Mon, 25 May 2009 12:16:04 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[zimbra]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=351</guid>
		<description><![CDATA[Avec Zimbra, le problème n'est pas la détection et le classement des spam comme tel : ça fonctionne très bien. Le réel problème, c'est que le spam continue d'affluer. Lorsque, comme moi, on utilise son propre domaine, on peut facilement dédier une adresse spécifique à tel ou tel service. Par exemple, pour s'inscrire sur le [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-352" src="http://www.modulaweb.fr/blog/wp-content/uploads/2009/05/user-trash-full.png" alt="" width="128" height="128" />Avec Zimbra, le problème n'est pas la détection et le classement des spam comme tel : ça fonctionne très bien. Le réel problème, c'est que le spam continue d'affluer.</p>
<p>Lorsque, comme moi, on utilise son propre domaine, on peut facilement dédier une adresse spécifique à tel ou tel service. Par exemple, pour s'inscrire sur le site «plop.com» on va pouvoir utiliser l'adresse «plop@domaine.com». Le plus simple, pour utiliser ce genre de méthode sans se prendre la tête, est d'utiliser une adresse «catchall» : qui capture toutes les autres, vous permettant de ne pas avoir a créer un alias spécifique à chaque fois.</p>
<p>Le problème c'est que les spamers vont tirer partie de ce système de catchall et vous envoyer du spam à des adresse emails générées à la volée.</p>
<p>Pour envoyer tous ces spams au fond de /dev/null, il suffit de créer une oubliette à spam : un spam-pit.<span id="more-351"></span></p>
<h2>Première étape : créer un compte «spam-pit»</h2>
<p>Il vous suffit de faire comme d'habitude : vous créez un compte classique, mais en le paramétrant pour qu'il ait accès à un minimum de choses avec, plus particulièrement, les paramètres suivants :</p>
<ol>
<li>espace disque alloué de 1 Mb</li>
<li>compte bloqué</li>
<li>accès à aucune fonctionnalité de Zimbra à part le mail</li>
<li>envoi des alertes lorsque la boîte est pleine espacées 3650 jours (10 ans)</li>
</ol>
<p>Avec ces paramètres, vu le nombre de spams envoyés par jours, ce compte sera vite plein, et les spams qui seront reçus par ce compte ne seront tout simplement pas traités et renverrons une erreur «boîte pleine».</p>
<h2>Deuxième étape : identifier les adresses ciblées.</h2>
<p>Les spamers utilisent souvent un groupe d'adresses spécifiques, toujours les mêmes, comme «sales» ou un numéro : identifiez ces adresses, et ajoutez-les comme alias à votre compte «spam-pit».</p>
<h2>Troisième étape : videz votre dossier «spam»</h2>
<p>Et regardez-le ne plus se remplir (aussi rapidement qu'avant en tous cas) ainsi que votre charge serveur : n'ayant plus à traiter une partie du spam, sa charge devrait baisser.</p>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/installation-de-funambol-couple-a-zimbra-sur-un-serveur-gnu-linux/">Installation de Funambol couplé à Zimbra sur un serveur GNU/Linux</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2009/05/envoyer-les-spams-aux-oubliettes-avec-zimbra/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Quelques scripts pour profiter de son scanner sous GNU/Linux</title>
		<link>http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/</link>
		<comments>http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/#comments</comments>
		<pubDate>Fri, 22 May 2009 18:34:52 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Choses utiles]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[infographie]]></category>
		<category><![CDATA[sane]]></category>
		<category><![CDATA[zenity]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=321</guid>
		<description><![CDATA[Sous GNU/Linux (et même sous BSD et autres Solaris), les scanners sont très bien gérés grâce au proget SANE. Bien que les interface graphiques pour SANE, comme XSane, soient très abouties, rien de mieux pour une utilisation "courante" de son scanner que les boutons dont il dispose. Le problème c'est qu'autant les scanners sont bien [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-322" src="http://www.modulaweb.fr/blog/wp-content/uploads/2009/05/gnome-dev-scanner.png" alt="" width="128" height="128" />Sous GNU/Linux (et même sous BSD et autres Solaris), les scanners sont très bien gérés grâce au proget SANE. Bien que les interface graphiques pour SANE, comme XSane, soient très abouties, rien de mieux pour une utilisation "courante" de son scanner que les boutons dont il dispose.</p>
<p>Le problème c'est qu'autant les scanners sont bien supportés en tant que tels, autant leurs boutons sont excessivement peu souvent supportés.</p>
<p>Certains, comme moi, seront certainement très frustrés de ne pas pouvoir utiliser les très utiles boutons de leur appareil, et je me suis dit que quelques petits scripts seraient certainement utiles à d'autres.<span id="more-321"></span><strong></strong></p>
<p><strong>Attention :</strong> j'utilise <a href="http://www.gnomefr.org/">Gnome</a>, et les scripts suivants utilisent <a href="http://library.gnome.org/users/zenity/index.html.fr">zenity</a>. Si vous êtes sous <a href="http://fr.kde.org/">KDE</a>, mieux vaut utiliser <a href="http://docs.kde.org/stable/fr/kdewebdev/kommander/kmdr-basics.html">kommander</a> (je vous laisse le soin d'adapter les scripts), mais vous pouvez très bien utiliser zenity… ça sera moins bien intégré, c'est tout.</p>
<p>Un préalable au bon fonctionnement de ces scripts est, bien entendu, qu'un scanner soit déjà connecté à la machine, et que se scanner soit reconnu et configuré… en plus, pour le premier, d'avoir une imprimante connectée, allumée, et configurée.</p>
<p>Comme d'habitude, un petit tour dans le man ne fera de mal à personne.</p>
<h2>Photocopie</h2>
<p><strong>Dépendances :</strong> tiff2ps (paquet libtiff-tools), zenity (ou kommander)<br />
<strong>Ce que fait le script :</strong> scanne vers un fichier TIFF, le convertit en PostScript et imprime le résultat.</p>
<pre class="bash"><span style="color: #808080; font-style: italic;">#!/bin/bash</span>
<span style="color: #000000; font-weight: bold;">if</span> `zenity --question --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Assurez-vous d'avoir aligné le document sur le bord DROIT de la fenêtre puis cliquez sur «Valider»&quot;</span> --<span style="color: #007800;">title=</span><span style="color: #ff0000;">&quot;Photocopier un document&quot;</span>`
<span style="color: #000000; font-weight: bold;">then</span>
	scanimage --format tiff --mode Gray --resolution <span style="color: #000000;">300</span> -l <span style="color: #000000;">0</span> -t <span style="color: #000000;">0</span> -x 210mm -y 297mm -p &gt; tmp.tiff
	tiff2ps -z -<span style="color: #c20cb9; font-weight: bold;">w</span> <span style="color: #000000;">8.27</span> -h <span style="color: #000000;">11.69</span> tmp.tiff | <span style="color: #c20cb9; font-weight: bold;">lpr</span>
	<span style="color: #c20cb9; font-weight: bold;">rm</span> -f tmp.tif
<span style="color: #000000; font-weight: bold;">else</span>
	zenity --info --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Photocopie annulée&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre>
<h2>Scan2PDF</h2>
<p><strong>Dépendances :</strong> tiff2pdf (paquet libtiff-tools), zenity (ou kommander), evince (kpdf sous kde)<br />
<strong>Ce que fait le scritpt :</strong> scanne vers un fichier TIFF, le convertit en PDF et l'enregistre là où l'a indiqué l'utilisateur. Si l'utilisateur le souhaite, l'affiche à l'écran.</p>
<pre class="bash"><span style="color: #808080; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> `zenity --question --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Assurez-vous d'avoir aligné le document sur le bord DROIT de la fenêtre puis cliquez sur «Valider»&quot;</span> --<span style="color: #007800;">title=</span><span style="color: #ff0000;">&quot;Scanner un document vers PDF&quot;</span>`
<span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #007800;">pdf=</span>$<span style="color: #7a0874; font-weight: bold;">&#40;</span>zenity --file-selection --save --confirm-overwrite --<span style="color: #007800;">filename=</span><span style="color: #ff0000;">&quot;$HOME/Desktop/scan.pdf&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> -n <span style="color: #007800;">$pdf</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
    <span style="color: #000000; font-weight: bold;">then</span>
        scanimage --format tiff --mode Gray --resolution <span style="color: #000000;">300</span> -l <span style="color: #000000;">0</span> -t <span style="color: #000000;">0</span> -x 210mm -y 297mm -p &gt; tmp.tiff
        tiff2pdf -o <span style="color: #007800;">$pdf</span> -z -p A4 -r d -c scan2pdf -a $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">whoami</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> ./tmp.tiff
        <span style="color: #c20cb9; font-weight: bold;">rm</span> -f tmp.tiff
        <span style="color: #000000; font-weight: bold;">if</span> `zenity --question --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Le document va s'ouvrir&quot;</span> --<span style="color: #007800;">title=</span><span style="color: #ff0000;">&quot;Scan terminé&quot;</span>`
        <span style="color: #000000; font-weight: bold;">then</span>
            evince <span style="color: #007800;">$pdf</span>
        <span style="color: #000000; font-weight: bold;">fi</span>
    <span style="color: #000000; font-weight: bold;">else</span>
        zenity --info --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Copie annulée&quot;</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">else</span>
    zenity --info --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Copie annulée&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre>
<h2>Scan2Gimp</h2>
<p><strong>Dépendances :</strong> zenity (ou kommander),tempfile gimp<br />
<strong>Ce que fait le scritpt :</strong> scanne vers un fichier TIFF sauvegardé sur le bureau avec un nom unique et l'ouvre avec <a href="http://www.framasoft.net/article1054.html">Gimp</a>.</p>
<pre class="bash"><span style="color: #808080; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> `zenity --question --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Assurez-vous d'avoir aligné le document sur le bord DROIT de la fenêtre puis cliquez sur «Valider»&quot;</span> --<span style="color: #007800;">title=</span><span style="color: #ff0000;">&quot;Scan vers Gimp&quot;</span>`
<span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #007800;">tmp=</span><span style="color: #ff0000;">&quot;$(tempfile -d &quot;</span><span style="color: #007800;">$HOMEDesktop</span><span style="color: #ff0000;">&quot; -p &quot;</span>scan-<span style="color: #ff0000;">&quot; -s &quot;</span>.tiff<span style="color: #ff0000;">&quot;)&quot;</span>
    scanimage --format tiff --mode Gray --resolution <span style="color: #000000;">300</span> -l <span style="color: #000000;">0</span> -t <span style="color: #000000;">0</span> -x 210mm -y 297mm -p &gt; <span style="color: #007800;">$tmp</span>
    <span style="color: #c20cb9; font-weight: bold;">gimp</span> <span style="color: #007800;">$tmp</span>
<span style="color: #000000; font-weight: bold;">else</span>
    zenity --info --<span style="color: #007800;">text=</span><span style="color: #ff0000;">&quot;Scan annulé&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/08/creer-un-fichier-pid-pour-funambol-sous-gnu-linux/">Créer un fichier PID pour Funambol sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2010/11/optimiser-apache/">Optimiser Apache – Partie 1</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2010/07/ressources-graphiques/">Ressources graphiques</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/">Configurer vsftpd pour mettre à jour automatiquement Wordpress</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/inclure-ses-machines-virtuelles-a-son-reseau-avec-virtualbox/">Inclure ses machines virtuelles à son réseau avec VirtualBox</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/un-nuancier-pantone%c2%ae-en-ligne/">Un nuancier Pantone® en ligne</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/installation-de-funambol-couple-a-zimbra-sur-un-serveur-gnu-linux/">Installation de Funambol couplé à Zimbra sur un serveur GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/pour-des-sessions-ssh-qui-durent/">Pour des sessions SSH qui durent</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Configurer vsftpd pour mettre à jour automatiquement WordPress</title>
		<link>http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/</link>
		<comments>http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/#comments</comments>
		<pubDate>Sun, 17 May 2009 16:06:29 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vsftpd]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=294</guid>
		<description><![CDATA[WordPress, intègre des possibilités de mise à jour automatique des plugins en utilisant le protocole FTP. Certains se poseront la question du pourquoi de l'utilisation de FTP pour cela alors que PHP est très à même de télécharger des fichiers depuis l'internet et lancer des commandes shell pour décompresser les archives, sans parler de la [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-301" src="http://www.modulaweb.fr/blog/wp-content/uploads/2009/05/g2399.png" alt="" width="150" height="150" /></p>
<p>WordPress, intègre des possibilités de mise à jour automatique des plugins en utilisant le protocole FTP. Certains se poseront la question du pourquoi de l'utilisation de FTP pour cela alors que PHP est très à même de télécharger des fichiers depuis l'internet et lancer des commandes shell pour décompresser les archives, sans parler de la gestion des fichiers, mais ça n'est pas l'objet de cet article.</p>
<p>Afin de pouvoir utiliser cette fonctionnalité de mise à jour de WordPress, il vous faut un serveur FTP sur votre serveur. Je vais vous proposer vsftpd (pour <em>Very Secure File Transfert Protocol Deamon</em> : Service de Transfert de Fichiers Trés Sécurisé) alors que d'autres sont de fervents adeptes de Proftp. Ce choix s'explique par deux arguments, le premier étant la sécurité qu'il apporte (RedHat, OpenBSD et SuSE, notamment, l'utilisent pour leurs serveurs FTP publics), le deuxième étant sa simplicité de configuration.<span id="more-294"></span></p>
<p>Vsftpd permet de créer des utilisateurs virtuels Ces utilisateurs virtuels utilisent sur le système l'identité de l'utilisateur “ftp” pour effectuer les opérations sur le système de fichiers. Vsftpd permet aussi de n'écouter que certaines interfaces, ce qui nous permettra de sécuriser totalement notre serveur.</p>
<p>Comme d'habitude, nous allons prendre l'exemple d'une distribution basée sur Debian (Debian, Ubuntu et dérivés…) la première chose à faire étant d'installer vsftpd via un <em>sudo apt-get install vsftpd</em> (ou autre, selon votre distribution).</p>
<p>En suite, trois choses à configurer : PAM pour permettre l'utilisation des utilisateurs virtuels, vsftpd lui même par le biais de son fichier de configuration et les utilisateurs virtuels.</p>
<p>Enfin il conviendra de modifier quelque peu les droits d'écriture de certains répertoires et fichiers.</p>
<h2>1. Configuration de PAM</h2>
<p>Il faut, si ces bibliothèques ne sont pas déja présentes, installer le support des bases de données Berkeley : libdbX et dbX-util où X = la version, 4.4, 4.6 ou 4.7 soit, par exemple, <em>sudo apt-get install libdb4.6 db4.6-util</em>.</p>
<p>En suite, configurer PAM pour lui dire où chercher les informations de connexion : éditer le fichier /etc/pam.d/vsftpd (le créer si besoin, le vider si déjà présent) et y mettre :</p>
<pre>auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login</pre>
<p>Si vous êtes en 64 bits, il conviendra peut être de remplacer lib par lib64.</p>
<p>Aller dans le répertoire /etc/vsftpd (le créer si besoin), et créer un fichier “login.txt” qui contiendra, en clair, les login et mots de passe de tous les utilisateurs virtuels. Ce fichier est de la forme :</p>
<pre>login1
mot de passe de login1
login2
mot de passe de login2
…</pre>
<p>Pour WordPress, on va y mettre, par exemple :</p>
<pre>wordpress
wp-pass</pre>
<p>Il faut en suite convertir ce fichier en base de données Berkeley à l'aide de la commande :</p>
<pre class="bash"><span style="color: #c20cb9; font-weight: bold;">sudo</span> db4.6_load -T -t <span style="color: #7a0874; font-weight: bold;">hash</span> -f /etc/vsftpd/<span style="color: #c20cb9; font-weight: bold;">login</span>.txt /etc/vsftpd/<span style="color: #c20cb9; font-weight: bold;">login</span>.db</pre>
<p>Remarque : il conviendra de remplacer db4.6_load par db4.4_load ou db4.7_load selon la version disponnible.</p>
<p><strong>Note:</strong> certains se demandent pourquoi faire ça (écrire les mots de passe dans un fichier en clair et le convertir en db) et ne pas directement utiliser le fichier en clair : c'est simplement qu'il sera, par la suite, plus simple pour ouvrir le serveur ftp au public. Il suffira de faire un chmod à 600 sur ces fichiers et/ou de supprimer la version en clair.</p>
<h2>2. Configuration de vsftpd</h2>
<p>Sauvegarder /etc/vsftpd.conf (par, par exemple un petit sudo <em>cp /etc/vsftpd.conf /etc/vsftpd.conf.bak</em>), l'éditer, le vider et y mettre :</p>
<pre># Lancement de vsftpd en standalone
listen=YES
# vsftpd ne va accepter les connexion uniquement depuis le serveur lui même
listen_address=127.0.0.1
# activation des utilisateurs locaux (permet d'utiliser les utilisateurs virtuels)
local_enable=YES
# Afin de permettre la mise à jour, il *faut* permettre l'écriture
write_enable=YES
# activation explicite des utilisateurs virtuels
guest_enable=YES
# force les utilisateurs virtuels d'agir vis à vis du système comme l'utilisateur
guest_username=ftp
# force les utilisateurs à rester dans le ~ de l'utilisateur guest (spacifié juste au dessus soit '/home/ftp/')
chroot_local_user=YES
# active la configuration 'per user&quot; permettant, de créer plusieurs utilisateurs virtuels si besoin par la suite, pour un autre WordPress par exemple
user_config_dir=/etc/vsftpd/users</pre>
<p><strong>Attention :</strong> si vous souhaitez, par la suite, ouvrir votre serveur ftp au public, veuillez ré-utiliser le fichier de configuration initial et le compléter avec les éléments de cet exemple. En effet, étant donné que notre WordPress est sur le même serveur que le serveur FTP, on n'a pas besoin de restreindre la sécurité outre mesure, ce qui ne convient évidement pas à une utilisation “publique”</p>
<h2>3. Configuration des utilisateurs</h2>
<p>On va utiliser ici une configuration “per user” qui permet de modifier la configuration pour chaque utilisateur virtuel (cas où on utilise plusieurs installations de WordPress sur le même serveur). Pour se faire, il nous faut simplement créer un fichier pour chaque utilisateur dans /etc/vsftpd/users (qu'il faudra créer via <em>sudo mkdir /etc/vsftpd/users</em>)</p>
<p>Nous avons créé plus haut un utilisateur nommé “wordpress”, créons donc ce fichier en le nommant “wordpress” : <em>sudo nano /etc/vsftpd/users/wordpress</em> et mettons ce qui suit dedans :</p>
<pre># l'utilisateur doit être enfermé dans un dossier contenu dans /home/ftp
# ce dossier sera un lien symbolique vers la racine (contenant le dossier wp-content)
# de votre installation de WordPress
local_root=/home/ftp/wordpress
# droit d'écriture
write_enable=YES
anon_upload_enable=YES
# droit créer des dossiers
anon_mkdir_write_enable=YES
# droit de renommer, supprimer...
anon_other_write_enable=YES
# signifie que l'utilisateur virtuel à les mêmes droits que l'utilisateur réel (ici ftp)
virtual_use_local_privs=YES
# définit l'umask pour les fichiers
local_umask=022</pre>
<p>En suite il faut créer le lien symbolique dans /home/ftp, dans le fichier de configuration, nous avons spécifié “/home/ftp/wordpress”. Ce lien symbolique va devoir pointer vers le dossier racine de votre installation de WordPress (contenant wp-content) mettons /home/www/blog/, ce qui donne : <em>sudo ln -s /home/www/blog /home/ftp/wordpress</em></p>
<h2>4. Droits utilisateur</h2>
<p>Il faut permettre à l'utilisateur ftp de créer des dossiers et des fichiers dans le dossier wp-content/upgrade (qu'il faudra créer, car il n'existe pas par défaut à moins que vous ne donniez ces droits au dossier wp-content). Même chose à tous les dossiers/fichiers contenus dans le dossier wp-content/plugins<br />
Je vous laisse faire, après tout, si vous êtes arrivés jusqu'ici c'est que vous en êtes capable normalement.</p>
<h2>5. Redémarrage de vsftpd et tests</h2>
<p>Redémarrer vsftpd via sudo /etc/init.d/vsftpd restart et tester la mise à jour des plugins de WordPress : pour se faire, si vous n'avez pas de plugin à mettre à jour, vous pouvez toujours télécharger une ancienne version d'un plugin et chercher à le mettre à jour.</p>
<p>Dans WordPress, allez dans le menu “Extentions”, et cliquez sur “mise à jour automatique” sur la ligne d'un plugin à mettre à jour. Un formulaire apparaît, entrez-y “127.0.0.1” comme hôte, “wordpress” comme login, “wp-pass» comme mot de passe, et cochez “FTP” puis "mettre à jour". Si vous voyez une erreur lors de la mise à jour, lisez bien le message renvoyé par WordPress : il vous renseignera exactement sur ce qui ne va pas. Si WordPress n'arrive pas à créer ou supprimer un fichier/dossier dans un répertoire, vérifiez les droits, le plus souvent les problèmes viennent de là.</p>
<p>Si les droits s'emblent ok, vérifiez le fonctionnement du serveur directement avec le client ftp en ssh : une session "réussie" devrait ressembler à ça :</p>
<pre class="bash">$ <span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>
Connected to <span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>.
<span style="color: #000000;">220</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>vsFTPd <span style="color: #000000;">2.0</span><span style="color: #000000;">.6</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
Name <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>:modulaweb<span style="color: #7a0874; font-weight: bold;">&#41;</span>: wordpress
<span style="color: #000000;">331</span> Please specify the password.
Password:
<span style="color: #000000;">230</span> Login successful.
Remote system <span style="color: #7a0874; font-weight: bold;">type</span> is UNIX.
Using binary mode to transfer files.
ftp&amp;gt; <span style="color: #c20cb9; font-weight: bold;">ls</span>
<span style="color: #000000;">200</span> PORT <span style="color: #7a0874; font-weight: bold;">command</span> successful. Consider using PASV.
<span style="color: #000000;">150</span> Here comes the directory listing.
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">397</span> May <span style="color: #000000;">25</span>  <span style="color: #000000;">2008</span> index.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>          <span style="color: #000000;">15410</span> Dec <span style="color: #000000;">06</span> <span style="color: #000000;">07</span>:<span style="color: #000000;">47</span> license.txt
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">7638</span> Oct <span style="color: #000000;">29</span>  <span style="color: #000000;">2008</span> readme.html
drwxrwxrwx    <span style="color: #000000;">3</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">4096</span> May <span style="color: #000000;">17</span> <span style="color: #000000;">13</span>:<span style="color: #000000;">20</span> upgrade
drwxrwxr-x    <span style="color: #000000;">2</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">4096</span> Apr <span style="color: #000000;">30</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">33</span> util
drwxrwxr-x    <span style="color: #000000;">8</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">4096</span> Apr <span style="color: #000000;">15</span> <span style="color: #000000;">03</span>:<span style="color: #000000;">36</span> wp-admin
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>          <span style="color: #000000;">40271</span> Nov <span style="color: #000000;">28</span> <span style="color: #000000;">21</span>:<span style="color: #000000;">04</span> wp-app.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">220</span> Oct <span style="color: #000000;">14</span>  <span style="color: #000000;">2008</span> wp-atom.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">274</span> May <span style="color: #000000;">25</span>  <span style="color: #000000;">2008</span> wp-blog-header.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">3483</span> Apr <span style="color: #000000;">16</span> <span style="color: #000000;">23</span>:<span style="color: #000000;">27</span> wp-comments-post.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">238</span> Oct <span style="color: #000000;">14</span>  <span style="color: #000000;">2008</span> wp-commentsrss2.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">2497</span> Dec <span style="color: #000000;">16</span> <span style="color: #000000;">08</span>:<span style="color: #000000;">33</span> wp-config-sample.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">2702</span> May <span style="color: #000000;">02</span> <span style="color: #000000;">02</span>:<span style="color: #000000;">47</span> wp-config.php
drwxrwxr-x    <span style="color: #000000;">7</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">4096</span> May <span style="color: #000000;">17</span> <span style="color: #000000;">13</span>:<span style="color: #000000;">39</span> wp-content
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">1242</span> Sep <span style="color: #000000;">18</span>  <span style="color: #000000;">2008</span> wp-cron.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">220</span> Oct <span style="color: #000000;">14</span>  <span style="color: #000000;">2008</span> wp-feed.php
drwxrwxr-x    <span style="color: #000000;">6</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">4096</span> May <span style="color: #000000;">01</span> <span style="color: #000000;">16</span>:<span style="color: #000000;">19</span> wp-includes
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">1986</span> May <span style="color: #000000;">25</span>  <span style="color: #000000;">2008</span> wp-links-opml.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">2004</span> Oct <span style="color: #000000;">31</span>  <span style="color: #000000;">2008</span> wp-load.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>          <span style="color: #000000;">19738</span> Dec <span style="color: #000000;">03</span> <span style="color: #000000;">19</span>:<span style="color: #000000;">04</span> wp-<span style="color: #c20cb9; font-weight: bold;">login</span>.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">6932</span> Dec <span style="color: #000000;">09</span> <span style="color: #000000;">18</span>:<span style="color: #000000;">03</span> wp-mail.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">487</span> May <span style="color: #000000;">25</span>  <span style="color: #000000;">2008</span> wp-pass.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">218</span> Oct <span style="color: #000000;">14</span>  <span style="color: #000000;">2008</span> wp-rdf.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">316</span> May <span style="color: #000000;">25</span>  <span style="color: #000000;">2008</span> wp-register.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">218</span> Oct <span style="color: #000000;">14</span>  <span style="color: #000000;">2008</span> wp-rss.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>            <span style="color: #000000;">220</span> Oct <span style="color: #000000;">14</span>  <span style="color: #000000;">2008</span> wp-rss2.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>          <span style="color: #000000;">18695</span> Jan <span style="color: #000000;">24</span> <span style="color: #000000;">13</span>:<span style="color: #000000;">21</span> wp-settings.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>           <span style="color: #000000;">3434</span> May <span style="color: #000000;">25</span>  <span style="color: #000000;">2008</span> wp-trackback.php
-rwxrwxr-x    <span style="color: #000000;">1</span> <span style="color: #000000;">1002</span>     <span style="color: #000000;">33</span>          <span style="color: #000000;">92428</span> Jan <span style="color: #000000;">19</span> <span style="color: #000000;">18</span>:<span style="color: #000000;">47</span> xmlrpc.php
<span style="color: #000000;">226</span> Directory send OK.
ftp&amp;gt; <span style="color: #7a0874; font-weight: bold;">exit</span>
<span style="color: #000000;">221</span> Goodbye.</pre>
<p>N'hésitez pas à faire des suggestions ou remarques en commentaire.</p>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/08/creer-un-dummy-package-sous-debian-ou-ubuntu/">Créer un «dummy-package» sous Debian ou Ubuntu</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/pour-des-sessions-ssh-qui-durent/">Pour des sessions SSH qui durent</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2010/11/optimiser-apache/">Optimiser Apache – Partie 1</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/08/creer-un-fichier-pid-pour-funambol-sous-gnu-linux/">Créer un fichier PID pour Funambol sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/05/quelques-scripts-pour-profiter-de-son-scanner-sous-gnulinux/">Quelques scripts pour profiter de son scanner sous GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/inclure-ses-machines-virtuelles-a-son-reseau-avec-virtualbox/">Inclure ses machines virtuelles à son réseau avec VirtualBox</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/installation-de-funambol-couple-a-zimbra-sur-un-serveur-gnu-linux/">Installation de Funambol couplé à Zimbra sur un serveur GNU/Linux</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/lancer-ubuntu-dans-virtualbox/">Lancer Ubuntu dans VirtualBox</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2009/05/configurer-vsftpd-pour-mettre-a-jour-automatiquement-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Flash™ non intrusif</title>
		<link>http://www.modulaweb.fr/blog/2009/04/flash-non-intrusif/</link>
		<comments>http://www.modulaweb.fr/blog/2009/04/flash-non-intrusif/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 23:05:41 +0000</pubDate>
		<dc:creator>Jean-François VIAL</dc:creator>
				<category><![CDATA[Discussions]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.modulaweb.fr/blog/?p=99</guid>
		<description><![CDATA[Flash™, créé par Macromedia™ en 1996, aujourd'hui maintenu par Adobe™, est une technologie permettant d'ajouter à une page web une application interactive pouvant inclure des graphismes 2D et textes vectoriels animés, des vidéos en streaming… Des animations Flash™ sont aujourd'hui visibles partout sur internet. Cette technologie apporte beaucoup, sur le plan esthétique comme en interactivité, [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-139" href="http://www.modulaweb.fr/blog/2009/04/flash-non-intrusif/flash/"><img class="alignleft size-full wp-image-139" title="flash" src="http://www.modulaweb.fr/blog/wp-content/uploads/2009/04/flash.png" alt="flash" width="128" height="128" /></a>Flash™, créé par Macromedia™ en 1996, aujourd'hui maintenu par Adobe™, est une technologie permettant d'ajouter à une page web une application interactive pouvant inclure des graphismes 2D et textes vectoriels animés, des vidéos en streaming… Des animations Flash™ sont aujourd'hui visibles partout sur internet. Cette technologie apporte beaucoup, sur le plan esthétique comme en interactivité, mais apporte aussi beaucoup de problèmes d'accessibilité… sauf si on s'y prend bien.</p>
<p><span id="more-99"></span></p>
<p>Voici quelques conseils :</p>
<h2>Règles à suivre</h2>
<p>En suivant quelques règles tenant du bon sens, on arrive à mettre en place des embellissements utilisant Flash™, de manière à garder une bonne accessibilité, et, surtout, sans pénaliser celles et ceux qui n'ont pas le fameux plugin permettant de voir ces animations.</p>
<h3>1. Faire comme si Flash™ n'existait pas</h3>
<p>Dans un premier temps, on va créer le design, les contenus et fonctionnalités, en faisant comme si Flash™ n'existait tout simplement pas. Les règles CSS sont souvent très suffisantes pour créer certains effets, et javascript permet, à moindre efforts, et à condition de l'employer de manière non intrusive, de créer un certain nombre d'effets que même Flash™ ne permettrait pas de faire. Les frameworks tels que <a href="http://prototypejs.org">Prototype</a> et <a href="http://script.aculo.us">Scriptaculous</a>, par exemple, permettent pléthore d'effets et autres interactions, je vous les conseille chaudement.</p>
<p>Agir ainsi, en préparant, d'abord, un environnement pleinement fonctionnel sans utiliser Flash™ est un préalable indispensable pour permettre une bonne accessibilité : si le client possède le bon plugin, les animations Flash™ viendront se substituer à certains contenus, dans le cas contraire, la navigation n'en souffrira pas.</p>
<p>Une fois que le contenu est présent, que le design joue son rôle et que javascript viens prêter main forte, on passe à la suite :</p>
<h3>2. Identifier les contenus et fonctions «flashables»</h3>
<p>On ne va pas tout placer sous Flash™, évidement : seules quelques parties, finement choisies, seront remplacées par du contenu Flash™ en fonction des critères suivants :</p>
<ol>
<li>Les CSS ne peuvent créer les mêmes effets esthétiques souhaités</li>
<li>Le javascript, lui non plus, ne peut aider à atteindre ces objectifs esthétiques</li>
<li>Si flash n'apporte pas un «plus» esthétique, il apporte au contenu un «plus» dans la navigation et l'interactivité.</li>
</ol>
<p>Une fois ces contenus identifiés, on modifiera le code (X)HTML de manière à identifier le conteneur de ces contenus :</p>
<pre>&nbsp;
&lt;div&gt;Ce texte sera remplacé par une animation Flash™&lt;/div&gt;
&nbsp;</pre>
<p>sera modifié en</p>
<pre>&nbsp;
&lt;div id=&quot;texte_flash&quot;&gt;Ce texte sera remplacé par une animation Flash™&lt;/div&gt;
&nbsp;</pre>
<p>et les feuilles de style seront adaptées en fonction, afin de ne pas être perturbées par l'ajout des &lt;div>.</p>
<p>L'étape suivante sera, bien évidement, de créer les animations Flash™ à proprement parler, mais nous n'en parlerons pas ici.</p>
<h3>3. «Flasher» le contenu</h3>
<p>Vos animations sont prêtes, il ne reste plus qu'à les mettre en place. Pour ce faire, on peut soit utiliser une fonction javascript de notre fabrication, soit utiliser ce qui existe déjà : le script <a href="http://code.google.com/p/swfobject/">SWFObject</a>.</p>
<p><a href="http://code.google.com/p/swfobject/">SWFObject</a>, écrit par Geoff Stearns, Michael Williams, et Bobby van der Sluis, est, pour moi, le meilleur moyen d'inclure du Flash™ dans une page web. Ce script open-source (sous licence MIT) vous permet d'inclure dans vos pages web des animations Flash™ en les plaçant dans des conteneurs (&lt;div> par exemple). Pour l'utiliser, téléchargez le .zip depuis le site officiel, et placez le fichier .js dans un dossier et liez-le à votre page web via une balise &lt;script> comme suit. En suite, rien de plus simple ! reprenons notre exemple de tout à l'heure :</p>
<pre>&nbsp;
&lt;div id=&quot;texte_flash&quot;&gt;Ce texte sera remplacé par une animation Flash™&lt;/div&gt;
&nbsp;</pre>
<p>Notre animation Flash™ (nommée "animation.swf") ayant 300 pixels de large et 120 de haut et requérant la version 5 minimum du plugin Flash™, viendra se loger dans le conteneur nommé "texte_flash", et nous allons utiliser SWFObject comme suit pour ce faire :</p>
<pre>&lt;script type=&quot;text/javascript&quot;&gt;
  var anim = new swfobject.embedSWF(&quot;animation.swf&quot;, &quot;texte_flash&quot;, &quot;300&quot;, &quot;120&quot;, &quot;5.0.0&quot;);
&lt;/script&gt;</pre>
<p>Pour de plus amples informations, reportez-vous à la page suivante (en anglais) : <a href="http://code.google.com/p/swfobject/wiki/documentation">http://code.google.com/p/swfobject/wiki/documentation</a></p>
<p>Ainsi, notre animation remplacera le contenu de la
<div> nommée "texte_flash" si javascript est activé sur le navigateur du visiteur, et s'il a un plugin Flash™ capable d'afficher l'animation. S'il n'a ni l'un, ni l'autre, aucun souci : le site reste fonctionnel et parfaitement accessible.</p>
<h3>4. Maintenance</h3>
<p>Il conviendra, évidement, à chaque changement du contenu «non-Flash™», de modifier le contenu de l'animation. Il est donc fortement recommandé de faire en sorte que l'animation récupère le contenu à afficher de manière dynamique (via javascript par exemple) afin que les contenus avec et sans Flash™ restent identiques, sans pour autant avoir besoin de mettre à jour à la fois le contenu et les animations.</p>
<h2>Un mot sur l'<em>intrusivité</em></h2>
<p>N'afficher un contenu Flash™ que lorsque celà est nécessaire, c'est bien, mais faire en sorte que l'utilisateur ne soit pas gêné par ces contenus, d'une quelconque manière, c'est mieux.</p>
<p>Certains «webmasters» trouvent intéressent d'ajouter à leurs animations Flash™ une bande son. Dans l'absolu, rien de bien méchant, cependant, ces bandes son sont, bien souvent, imposées au visiteur. Certes, la musique ajoute un peit quelquechose à l'ambiance du site, cependant, le visiteur écoute déjà peut être de la musique… ou peut être qu'il n'aime pas cette musique imposée, peut etre encore qu'il a le son réglé au maximum sans le savoir, peut être encore qu'il est au bureau… et voilà que, sans prévenir, sans son accord, sans qu'il en ait été prévenu au préalable, sans qu'il ai pu dire si, oui ou non, il désirait cette musique, voilà que des sons jaillissent de ses haut-parleurs ou de ses écouteurs. Quelle intrusivité, quel irrespect pour le visiteur que de lui imposer celà. «Comment faire ?» demanderont certains… simplement en prévenant l'utilisateur par un message, lors du pré-chargement par exemple : «Nous vous proposons une ambiance musicale pour accompagner votre navigation : cliquez-ici pour désactiver l'ambiance musicale» est-ce si compliqué ?</p>
<p>Pour en finir avec la musique et les sons sous Flash™ : quitte à mettre en place un fond sonore, autant que ce fond soit de qualité ! par pitié, utilisez un échantillonage de 128kbps minimum ! et en stéréo ! par pitié ! Nul doute que vous ne mettriez pas en ligne des photos pixélisées, alors pourquoi faire de même pour la musique ? d'autant qu'une musique de mauvaise qualité offre de vous une image d'amateurisme certain…</p>
<h2>Conclusion</h2>
<p>Il existe bien des manières d'inclure du Flash™ dans une page web, celle proposée ici en est une, à mon très humble avis, des plus simple et des moins intrusive. Il conviendra de vous documenter plus avant sur Flash™ et les moyens de mettre vos contenus «flashés» à jour lors des modifications sur le contenu classique, mais, avant de céder à la tentation, d'utiliser au maximum les possibilités des CSS et de javascript. Et si Flash™ se révèle incontournable dans votre projet, gardez à l'esprit qu'au moins votre animation sera intrusive, au plus les visiteurs l'apprécieront.</p></div>
<h4 class='related-posts-header'>Articles apparentés</h4><ul class="related-posts-list"><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/03/internet-explorer-8-enfin-un-produit-microsoft-qui-respecte-les-standards/">Internet Explorer™ 8 : enfin un produit Microsoft™ qui respecte les standards</a> </li><li class="related-post"><a href="http://www.modulaweb.fr/blog/2009/02/forcer-l-evaluation-du-code-dans-un-contexte-global-en-javascript/">Forcer l'évaluation du code dans un contexte global en javascript</a> </li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.modulaweb.fr/blog/2009/04/flash-non-intrusif/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

