tag:blogger.com,1999:blog-64277927587864041632018-09-17T07:11:45.362+02:00Blog in touchParce que j'aime échanger, parce que j'aime partager ...altohttp://www.blogger.com/profile/00913401855520268441[email protected]Blogger21125tag:blogger.com,1999:blog-6427792758786404163.post-20707084379022406202014-03-13T16:03:00.003+01:002017-11-07T16:25:48.480+01:00Comment contrôler si un port est ouvert/accessible sur un serveur Linux.<h2>0°) Introduction.</h2>En mission chez un client, j'ai rencontré une problématique intéressante.<br />Sur le serveur linux de développement, nous devons faire tourner plusieurs instances de notre serveur d'application (dans notre cas <a href="http://tomcat.apache.org/" target="_blank">Tomcat</a>) sur des ports différents. Malheureusement, les contraintes de sécurités internes, ne nous permettent pas d'utiliser les ports comme nous l'aurions souhaités. Du coup, il fallait faire une demande auprès du service concernée et attendre que celle-ci soit traitée.<br /><br />Malheureusement, certaines ouvertures de ports n'étaient pas correctement traitées, et nous avions besoin de contrôler si le port était bien accessible.<br /><br /><h2>1°) Dans le vif du sujet.</h2>Mon premier réflexe a été de penser à faire une configuration spécifique avec un serveur apache/nginx et tester si je pouvais interroger le service depuis un navigateur... Mais j'avais plus &nbsp;d'une vingtaine de port à tester. La solution devenait beaucoup trop lourde à mettre en oeuvre.<br /><br />Après une rapide recherche sur internet, j'ai trouver un petit script python (voir <a href="http://www.commentcamarche.net/faq/6858-demarrer-un-programme-en-tant-que-service-demon" target="_blank">ici</a>), que j'ai donc adapter pour mes besoins. Voici le script modifié :<br /><br /><pre><br /> <code class="language-python">#!/usr/bin/python<br />import datetime,BaseHTTPServer,sys<br />#<br /># Contruction de la réponse : On renvoi la date et l'heure<br />#<br />class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):<br /> def do_GET(self):<br /> self.send_response(200)<br /> self.send_header('Content-type','text/plain')<br /> self.end_headers()<br /> self.wfile.write(str(datetime.datetime.now()))<br /> return<br />#<br /># On regarde si le port a été passé en paramétre.<br /># - Si oui on le récupere<br /># - Si non, on mets le port 18443 par défaut.<br />#<br />if len(sys.argv) &gt; 1:<br /> port = sys.argv[1]<br />else:<br /> port = "18443"<br />print "En écoute sur le port " + port + " ..."<br />#<br /># Lancement du service<br />#<br />server = BaseHTTPServer.HTTPServer(('', int(port)), MyHandler)<br />server.serve_forever()</code><br /></pre><br /><div><br /></div>Bien sur il faut que python soit installé sur votre serveur :-)<br />Le fonctionnement est assez simple. Il suffit de lancer le script en indiquant le port sur lequel on veut écouter :<br /><span style="color: #073763;"><b><br /></b></span><span style="color: #073763;"><b>user# ./dummyService.py 18443</b></span><br /><span style="color: #38761d;"><i>En écoute sur le port 18443 ...</i></span><br /><br />On peut commencer à faire une requête en local avec wget :<br /><br /><b><span style="color: #073763;">users# &nbsp;wget localhost:18443</span></b><br /><span style="color: #38761d;"><i>--2014-03-13 15:46:45-- &nbsp;http://localhost:18443/</i></span><br /><span style="color: #38761d;"><i>Resolving localhost... 127.0.0.1</i></span><br /><span style="color: #38761d;"><i>Connecting to localhost|127.0.0.1|:18443... connected.</i></span><br /><span style="color: #38761d;"><i>HTTP request sent, awaiting response... 200 OK</i></span><br /><span style="color: #38761d;"><i>Length: unspecified [text/plain]</i></span><br /><span style="color: #38761d;"><i>Saving to: `index.html.24'</i></span><br /><span style="color: #38761d;"><i><br /></i></span><span style="color: #38761d;"><i>&nbsp; &nbsp; [ &lt;=&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ] 26 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--.-K/s &nbsp; in 0s</i></span><br /><span style="color: #38761d;"><i><br /></i></span><span style="color: #38761d;"><i>2014-03-13 15:46:45 (3.54 MB/s) - `index.html.24' saved [26]</i></span><br /><div><br /></div>Et ensuite essayer d'accéder au serveur depuis un navigateur :<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="/-bzG-05N042w/UyHGE672EQI/AAAAAAAAax8/2m-QSqGAZ58/s1600/CaptureChrome.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="/-bzG-05N042w/UyHGE672EQI/AAAAAAAAax8/2m-QSqGAZ58/s1600/CaptureChrome.webp" /></a></div><br />Si le service n'est pas accessible, la réponse du navigateur sera :<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="/-YB3F1jdT7tk/UyHGda3mlbI/AAAAAAAAayE/5pWEGmCcBdc/s1600/CaptureChrome2.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="/-YB3F1jdT7tk/UyHGda3mlbI/AAAAAAAAayE/5pWEGmCcBdc/s1600/CaptureChrome2.webp" /></a></div><br />Lors du lancement du script, si le port est occupé, le script nous réponds :<br /><br /><i><span style="color: #38761d;">En ecoute sur le port 18080 ...</span></i><br /><i><span style="color: #38761d;">Traceback (most recent call last):</span></i><br /><i><span style="color: #38761d;">&nbsp; File "./dummyService.py", line 26, in ?</span></i><br /><i><span style="color: #38761d;">&nbsp; &nbsp; server = BaseHTTPServer.HTTPServer(('', &nbsp;int(port)), MyHandler)</span></i><br /><i><span style="color: #38761d;">&nbsp; File "/usr/lib64/python2.4/SocketServer.py", line 330, in __init__</span></i><br /><i><span style="color: #38761d;">&nbsp; &nbsp; self.server_bind()</span></i><br /><i><span style="color: #38761d;">&nbsp; File "/usr/lib64/python2.4/BaseHTTPServer.py", line 101, in server_bind</span></i><br /><i><span style="color: #38761d;">&nbsp; &nbsp; SocketServer.TCPServer.server_bind(self)</span></i><br /><i><span style="color: #38761d;">&nbsp; File "/usr/lib64/python2.4/SocketServer.py", line 341, in server_bind</span></i><br /><i><span style="color: #38761d;">&nbsp; &nbsp; self.socket.bind(self.server_address)</span></i><br /><i><span style="color: #38761d;">&nbsp; File "&lt;string&gt;", line 1, in bind</span></i><br /><i><span style="color: #38761d;">socket.error: (98, 'Address already in use')</span></i><br /><h2>2°) Conclusion.</h2>Voilà, du coup tester si un port est accessible sur un serveur devient très simple et très rapide.<br />Lors de la mise en place d'un firewall, ce type d'outil peut-être très utile pour tester les règles que l'on mets en place....altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-14714504043176032962013-01-29T15:50:00.001+01:002016-05-19T11:07:44.167+02:00NAGIOS : Vérifier l'état du pare-feu iptablesL'environnent technique des serveurs est le suivant :<br/><ul> <li>OS : OpenSuse 12.2</li> <li>Supervision : NAGIOS 3.4</li> <li>Pare-feu : iptables</li></ul><h3>0&deg;) Introduction</h3>L'objectif de cette article est de vous faire partager un petit outil que j'ai développé pour nos besoins propres, concernant la supervision de la prise en compte des règles d'accès à notre réseau via <a href="http://fr.wikipedia.org/wiki/Iptables" target="_blank">iptables</a> avec <a href="http://www.nagios.org/" target="_blank">NAGIOS</a>.<br/>Avec la politique de sécurité que nous avions choisis de mettre en place, il était nécessaire de s'assurer que nos règles étaient bien appliquées lors du démarrage de nos serveurs. <br/>Le script est assez basique et contrôle juste le nombre de règles appliquées, déclenchant une alerte lorsque ce nombre est inférieur à un seuil prédéfini. <br/><br/><h3>1&deg;) Les motivations. </h3>Depuis quelques années maintenant, j'ai choisi de configurer sur chacun des nos serveurs des règles de sécurité basées sur <a href="http://fr.wikipedia.org/wiki/Iptables" target="_blank">iptables</a>. Le mise en place n'a pas été évident et la compréhension des règles a pris pas mal de temps, même en ayant une bonne connaissance du réseau et des <a href="http://fr.wikipedia.org/wiki/IPv4" target="_blank">trames IP</a>. Mais bon, à l'arrivé nous avons un résultat qui tient la route (du moins c'est l'impression que ça donne !!!). <br/><br/>Seul petit bémol: une fois les règles mises au point, j'avais eu la mauvaise idée de démarrer le pare-feu au moment du boot. Et bien sur, un jour (un très mauvais jour), une erreur dans mon fichier contenant mes règles a bloqué l'ensemble des accès réseaux sur un serveur de production.... <br/>De coup, impossible d’accéder à la machine, m'obligeant à me déplacer directement en salle machine pour corriger ce problème en redémarrant le système en mode single et en désactivant le script appliquant les règles de notre pare-feu. <br/><br/>Pas vraiment pratique... du coup j'ai décidé d'appliquer les règles à la main après chaque démarrage. Pas très satisfaisant, mais beaucoup plus sur. Il est souvent nécessaire de faire des compromis en informatique. <br/><br/><h3>2&deg;) Dans le vif du sujet.</h3>Malheureusement, il arrive (pas souvent, mais ça arrive) que les serveurs redémarrent (panne électrique, bug du kernel, mauvaise manipulation des techniciens,...). Du coup Il devenait nécessaire que nous soyons prévenu lorsque ces règles n'étaient pas appliquées. <br/>Comme tous bon informaticien qui se respect, avant de ré-inventer la roue, je me suis mis à chercher un plugin plus ou moins officiel de NAGIOS. A ma grande surprise, je n'ai pas trouvé grand chose. Du moins, en restant diplomate et en modérant mes propos, je dirais que je n'ai pas trouvé de plugin qui pouvait répondre à mes attentes ou alors je n'ai pas été assez malin pour arriver à faire marcher le plugin que j'avais trouvé <a href="http://exchange.nagios.org/directory/Plugins/Security/Check-Iptables/details" target="_blank">(check_iptables_status.sh</a>). <br/><br/>Du coup, il ne me restait plus qu'à en développer un... m'inspirant malgré tout du plugin de <a href="http://techironic.com/dev/check_iptables" target="_blank">rhoml</a>, je suis partie sur le même principe : tester le nombre de règles appliquées et déclencher une alerte si on est en dessous d'un certain seuil. <br/><br/>Voici le détail des étapes pour la mise en place de ce script.<br/><pre class="brush: shell">cd /usr/lib/nagios/plugins<br />vi check_firewall.sh<br /></pre><span style="font-size: small; font-family: 'courier new' , courier , monospace;">Copier le contenu </span><br/><br/><pre class="brush: shell"><br />#!/bin/sh<br />#<br /># Author: Alain TOMASIAN<br /># Date: 25 Dec. 2012<br /># Description: Check if the firewall based on iptables is running<br />#<br />. /usr/lib/nagios/plugins/utils.sh<br />print_usage() {<br />echo "Usage: check_firewall.sh "<br />}<br /># Make sure the correct number of command line<br />IPTABLES_CMD=/usr/sbin/iptables<br />RESULT=`sudo $IPTABLES_CMD -L -n | wc -l`<br />if [ $RESULT -lt 10 ] ; then<br /> echo "FW CRITICAL : The firewall hasn't been started : number of rules lines = $RESULT"<br /> exit $STATE_CRITICAL<br />elif [ $RESULT -lt 100 ] ; then<br /> echo "FW WARNING : May be the firewall hasn't been started : number of rules lines = $RESULT"<br /> exit $STATE_WARNING<br />else<br /> echo "FW OK : The firewall has been started : number of rules lines = $RESULT"<br /> exit $STATE_OK<br />fi<br /></pre><span style="font-size: small; font-family: 'courier new' , 'courier' , monospace;"> Le point délicat est qu'il faut autoriser l'utilisateur "nagios" à exécuter la commande "iptables". Pour cela, il est nécessaire de passer par sudo :<br/></span><pre class="brush: shell"><br /># sudoedit /etc/sudoers<br /></pre><br/>Ajouter la ligne suivante dans la partie :<br/><pre class="brush: shell"><br /> ##<br /> ## User privilege specification<br /> ##<br /> nagios ALL = (root) NOPASSWD:/usr/sbin/iptables -L -n <br /></pre>et sauvegarder le fichier.<br/><br/>A cette phase du projet, il n'est pas vraiment facile de tester la commande avec l'utilisateur nagios, car normalement cette utilisateur n'a pas de <a href="http://fr.wikipedia.org/wiki/Interface_syst%C3%A8me" target="_blank">shell</a> valide....<br/>Pour valider notre travail, il faut continuer la phase configuration, car le problème viendra uniquement lorsqu'on essaiera d'utiliser la commande via nrpe (dans notre cas de figure).<br/><br/>A présent il faut installer la commande au niveau de nrpe et au niveau de nagios. <br/>Sur le serveur à superviser, il faut aujouter dans le fichier de configuration /etc/nagios/nrpe.cfg la ligne suivante dans la description des commandes : <br/> <pre class="brush: shell"><br /> vi /etc/nagios/nrpe.cfg<br /></pre> <pre class="brush: shell"><br /> command[check_firewall]=/usr/lib/nagios/plugins/check_firewall.sh<br /></pre> <br/>Puis redémarrer nrpe : <br/><pre class="brush: shell"><br /> /etc/init.d/nrpe restart<br /></pre><br/>Sur le serveur de supervision, il faut aujouter dans le fichier /etc/nagios/objects/commands.cfg les lignes suivantes : <br/> </span></span><br/><pre class="brush: shell"><br /> vi /etc/nagios/objects/commands.cfg<br /></pre><span style="font-size: small;"><span style="font-family: 'courier new' , 'courier' , monospace;"> <pre class="brush: shell"><br /> # 'check_remote_firewall' command definition<br/> <br /> define command {<br /> command_name check_remote_firewall<br /> command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_firewall<br /> }<br /> <br /> # 'check_firewall' command definition<br /> define command {<br /> command_name check_firewall<br /> command_line $USER1$/check_firewall.sh<br /> }<br /></pre>Faire un check de la config nagios avant de relancer le serveur :<br/><pre class="brush: shell"><br /> /etc/init.d/nagios check<br /></pre> <span style="color: #38761d;">Starting configuration check - passed configuration check done</span><br/><pre class="brush: shell"><br /> /etc/init.d/nagios restart<br /></pre> <i><span style="color: #38761d;">Shutting down Nagios &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; done<br/> Starting Nagios &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;done</span></i></span><br/><br/>A présent, nous pouvons effectuer un test de connexion avec un check_nrpe pour valider le mode de fonctionnement : <br/><span style="font-family: 'courier new' , 'courier' , monospace;"><b><span style="color: #351c75;"># /usr/lib/nagios/plugins/check_nrpe -H xx.xx.xx.xx -c check_firewall</span></b><br/><i><span style="color: #38761d;">FW OK : The firewall has been started : number of rules lines = 671</span></i></span><br/><br/>Le reste n'est plus qu'une simple&nbsp;formalité&nbsp;car il faut juste configurer sur le serveur de supervision les services pour mettre un check sur les machine à superviser.<br/>Le résultat en image :<br/></span><br/><div class="separator" style="clear: both; text-align: center;"> <span style="font-size: small; font-family: 'courier new' , 'courier' , monospace;"> <a href="/-hvC4joi-Wfk/UQffJWmN-EI/AAAAAAAASaw/HmcDqGTjHDw/s1600/ishot-55.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> <img border="0" height="153" src="/-hvC4joi-Wfk/UQffJWmN-EI/AAAAAAAASaw/HmcDqGTjHDw/s640/ishot-55.webp" width="640"/> </a> </span></div><br/><br/><br/><h3>3&deg;) Conclusions.</h3><br/><div> <span style="font-size: small; font-family: 'courier new' , 'courier' , monospace;"> Ce plugin est assez basique et nécessiterait certaines améliorations que j'apporterai peut-être si mon emploi du temp me le permet.... Mais pour l'instant il me rend un grand service en vérifiant que mes règles de sécurités soient bien appliquées. </span></div>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-40136961977673790312013-01-23T16:11:00.000+01:002013-01-23T16:19:56.761+01:00Configuration SSL pour MySQL sous OpenSuseL'environnent technique des serveurs est le suivant :<br /><ul><li>OS : OpenSuse 12.1</li><li>Base de données : MySQL Community Server 5.5.28</li><li>Librairie SSL : OpenSSL 1.0&nbsp; </li></ul><h3> 0°) Introduction. </h3>Comme je l'ai expliqué dans mon précédent post (<a href="http://www.blogintouch.com/2013/01/serveurs-physiques-versus-serveurs.html" target="_blank">Serveurs physiques Versus Serveurs virtuels</a>), nous avons migrer nos serveurs physiques vers des serveurs virtuels. Un des premiers dommages collatéral a été que l'ensemble de nos serveurs ne soient plus sur la même plage de réseau IP et que nous ne puissions plus installer une réseau privé (<a href="http://fr.wikipedia.org/wiki/R%C3%A9seau_priv%C3%A9" target="_blank">192.168.0.0/16)</a> entre nos serveurs.<br /><br />Bien sur, j'aurais pu mettre en place un réseau privé virtuel (<a href="http://fr.wikipedia.org/wiki/R%C3%A9seau_priv%C3%A9_virtuel" target="_blank">VPN)</a> pour faire transiter l'ensemble du trafic interne. Mais j'ai eu la flemme car la plus part des échanges sont fait à travers du <a href="http://fr.wikipedia.org/wiki/Secure_Shell" target="_blank">ssh</a> et le seul trafic en clair qui était concerné était la réplication de mes bases de données sous <a href="http://fr.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a>. Donc, je me suis lancé dans la mise en place de connexions sécurisé via SSL pour MySQL. <br />A priori (d'après ce que j'aivais pu lire) MySQL crypte par défaut l'échange des mots de passe lors de l'établissement d'une connexion. Par contre, une fois la connexion établie, les données transitaient en clair. Même si ces données ne revêtent pas un caractère hyper-sensible, certaines informations doivent demeurer confidentielles. Il devient alors nécessaire de crypter l'ensemble des échanges afin de pouvoir garantir la confidentialité des données échangées. <br /><h3>&nbsp;</h3><h3>&nbsp;1°) Dans le vif du sujet. </h3>Pour réaliser cette mise en place, je me suis fortement inspiré de l'article "<a href="http://krierjon.developpez.com/mysql/securiser/index.php?page=page_9#L9" target="_blank">Sécurisez votre serveur MySQL sous Unix</a>".<br /><br />Même si on trouve pléthore d'articles sur le net, je vais quand même détailler les différentes étapes que effectuer car j'ai rencontré quelques difficultés qui n'ont pas été toujours simple à résoudre.<br /><h4>&nbsp;</h4><h4>&nbsp;1.1°) Création des certificats SSL. </h4>Le premier travail consiste à créer les certificats qui vont être utilisés par MySQL pour le cryptage des communications entre les serveurs.<br />Il faut commencer par créer un premier certificat qui va nous servir à signer les 2 autres certificats (un certifcat serveur et un certificat client). C'est notre <a href="http://fr.wikipedia.org/wiki/Autorit%C3%A9_de_certification" target="_blank">autorité de certification</a>.&nbsp; Le premier piège est qu'il est <b>indispensable</b> que le CN (<a href="http://fr.wikipedia.org/wiki/Demande_de_signature_de_certificat" target="_blank">Common Name</a>) du certifcat de notre autorité de certification soit différent des autres certificats. Cela semble évident, mais lorsque on autosigne un certificat, on a tendance à donner le même CN. Du moins c'est ce que j'ai fait et j'ai eu énormément de mal ensuite à faire fonctionner la connexion SSL avec MySQL. Voici les lignes de commande pour la création des différents certificats :<br /><span style="font-size: small;"><span style="color: #351c75;"><b><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# cd /etc/ssl/certs<br /> diplodocus# mkdir mysql<br /> diplodocus# cd mysql<br />diplodocus# openssl req -new -x509 -keyout ca-key.pem -out ca-cert.pem -days 3600</span></b></span></span><br /><span style="font-size: small;"><span style="color: #351c75;"><b><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"></span></b></span><i><span style="color: #38761d;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Generating a 1024 bit RSA private key<br /> .......................++++++<br /> ...++++++<br /> writing new private key to 'ca-key.pem'<br /> Enter PEM pass phrase:<br /> Verifying - Enter PEM pass phrase:<br /> -----<br /> You are about to be asked to enter information that will be incorporated<br /> into your certificate request.<br /> What you are about to enter is what is called a Distinguished Name or a DN.<br /> There are quite a few fields but you can leave some blank<br /> For some fields there will be a default value,<br /> If you enter '.', the field will be left blank.<br /> -----<br /> Country Name (2 letter code) [AU]:FR<br /> State or Province Name (full name) [Some-State]:Ile de France<br /> Locality Name (eg, city) []:PARIS<br /> Organization Name (eg, company) [Internet Widgits Pty Ltd]:NAOS Technologies<br /> Organizational Unit Name (eg, section) []:MySQL<br /> Common Name (eg, YOUR name) []:www.naos.com</span></span><span style="color: #339966;">&nbsp;</span></i><b><span style="color: #990000;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&lt;--- ATTENTION : il est très important que le common name du CA soit différent de ceux des certificats (Voir erreur sinon en bas de page).</span></span></b></span><i><span style="color: #339966;"><br /></span><span style="font-size: small;"><span style="color: #38761d;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Email Address []:[email protected]</span></span></span></i><br /><span style="font-size: small;"><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl req -new -keyout server-key.pem -out server-req.pem -days 3600</span></span></b><i><span style="color: #38761d;"><br /></span><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #38761d;">Generating a 1024 bit RSA private key<br /> .....++++++<br /> ..........++++++<br /> writing new private key to 'server-key.pem'<br /> Enter PEM pass phrase:<br /> Verifying - Enter PEM pass phrase:<br /> -----<br /> You are about to be asked to enter information that will be incorporated<br /> into your certificate request.<br /> What you are about to enter is what is called a Distinguished Name or a DN.<br /> There are quite a few fields but you can leave some blank<br /> For some fields there will be a default value,<br /> If you enter '.', the field will be left blank.<br /> -----<br /> Country Name (2 letter code) [AU]:FR<br /> State or Province Name (full name) [Some-State]:Ile de France<br /> Locality Name (eg, city) []:PARIS<br /> Organization Name (eg, company) [Internet Widgits Pty Ltd]:NAOS Technologies <br /> Organizational Unit Name (eg, section) []:MySQL<br /> Common Name (eg, YOUR name) []:*.naos.com <br /> Email Address []:[email protected]<br /><br /> Please enter the following 'extra' attributes<br /> to be sent with your certificate request<br /> A challenge password []:<br /> An optional company name []:NAOS Technologies</span></span></i></span><br /><br />- On signe le certificat serveur avec la clé de l'autorité de certification que l'on vient de créer :<br /><span style="font-size: small;"><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem<i> </i></span></span></b></span><br /><span style="font-size: small;"><i><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #38761d;">Signature ok<br /> subject=/C=FR/ST=Ile de France/L=PARIS/O=NAOS Technologies/OU=MySQL/CN=*.naos.com/[email protected]<br /> Getting CA Private Key<br /> Enter pass phrase for ca-key.pem:<br /> Generating a 1024 bit RSA private key<br /> ...............++++++<br /> ..............................++++++<br /> writing new private key to 'client-key.pem'<br /> Enter PEM pass phrase:<br /> Verifying - Enter PEM pass phrase:<br /> -----<br /> You are about to be asked to enter information that will be incorporated<br /> into your certificate request.<br /> What you are about to enter is what is called a Distinguished Name or a DN.<br /> There are quite a few fields but you can leave some blank<br /> For some fields there will be a default value,<br /> If you enter '.', the field will be left blank.<br /> -----<br /> Country Name (2 letter code) [AU]:FR<br /> State or Province Name (full name) [Some-State]:Ile de France<br /> Locality Name (eg, city) []:PARIS<br /> Organization Name (eg, company) [Internet Widgits Pty Ltd]:NAOS Technologies<br /> Organizational Unit Name (eg, section) []:MySQL<br /> Common Name (eg, YOUR name) []:*.naos.com<br /> Email Address []:[email protected]<br /><br /> Please enter the following 'extra' attributes<br /> to be sent with your certificate request<br /> A challenge password []:<br /> An optional company name []:NAOS Technologies</span></span></i></span><br /><br />- On signe le certificat client avec la clé de l'autorité de certification que l'on vient de créer :<br /><span style="font-size: small;"><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl x509 -req -in client-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem</span></span></b><i><span style="color: navy;"><br /></span><span style="color: #38761d;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Signature ok<br /> subject=/C=FR/ST=Ile de France/L=PARIS/O=NAOS Technologies/OU=MySQL/CN=*.naos.com/[email protected]<br /> Getting CA Private Key<br /> Enter pass phrase for ca-key.pem:</span></span></i></span><br /><br />- On supprime la pass phrase sur les deux certificats :<br /><span style="font-size: small;"><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl rsa -in server-key.pem -out server-key.pem</span></span></b><span style="color: #38761d;"><i><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br />Enter pass phrase for server-key.pem:<br /> writing RSA key</span></i></span></span><span style="font-size: small;"><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl rsa -in client-key.pem -out client-key.pem</span></span></b><i><span style="color: #38761d;">&nbsp;</span></i></span><br /><span style="font-size: small;"><span style="color: #38761d;"><i><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Enter pass phrase for client-key.pem:<br /> writing RSA key</span></i></span></span><br />Avant de continuer, on vérifie que les certificats sont ok en passant la commande :<br /><span style="font-size: small;"><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl verify -CAfile ca-cert.pem server-cert.pem</span></span></b></span><br /><span style="font-size: small;"><span style="color: #38761d;"><i><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">server-cert.pem: C = FR, ST = Ile de France, L = PARIS, O = NAOS Technologies, OU = MySQL, CN = *.naos.com, emailAddress = [email protected]<br /> error 18 at 0 depth lookup:self signed certificate<br /> OK</span></i></span></span><br /><span style="font-size: small;">Si vous avez le résultat ci-dessus, c'est que vous avez un souci. Sinon vous devriez avoir :<br /><b><span style="color: #351c75;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl verify -CAfile ca-cert.pem server-cert.pem</span></span></b></span><br /><span style="font-size: small;"><i><span style="color: #38761d;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">server-cert.pem: OK</span></span></i><br /><span style="color: #351c75;"><b><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# openssl verify -CAfile ca-cert.pem client-cert.pem<i> </i></span></b></span></span><br /><span style="font-size: small;"><span style="color: #38761d;"><i><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">client-cert.pem: OK </span></i></span></span><br /><h4>&nbsp;</h4><h4>1.2°) Configuration du serveur MySQL. </h4><span style="font-size: small;">Voilà, les certificats sont créés, il nous reste maintenant à configurer MySQL pour qu'il puisse gérer les transactions cryptées. </span><br /><span style="font-size: small;">Dans le fichier /etc/my.cf, ajoutons dans le bloc [mysqld] les lignes suivantes :</span><br /><span style="color: #38761d;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="font-size: small;">ssl<br /> ssl-cipher=DHE-RSA-AES256-SHA<br /> ssl-ca=/etc/ssl/certs/mysql/ca-cert.pem<br /> ssl-cert=/etc/ssl/certs/mysql/server-cert.pem<br /> ssl-key=/etc/ssl/certs/mysql/server-key.pem</span></span></span><br />et dans le bloc [client], ajoutons les lignes suivantes :<br /><span style="color: #38761d;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="font-size: small;">ssl-ca = /etc/ssl/certs/mysql/ca-cert.pem </span></span></span><br />On redémarre le serveur MySQL : <br /><b><span style="color: #351c75;"><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# /etc/init.d/mysql restart</span></span></span></b><br /><span style="color: #38761d;"><i><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="font-size: small;">Restarting service MySQL <br /> Shutting down service MySQL done<br /> Starting service MySQL done</span></span></i></span><br />Si tous se passe bien, on devrait avoir le résultat suivant sous la console MySQL: <br /><span style="color: #351c75;"><b><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# mysql -u root -p </span></span></b></span><br /><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Enter password: <br /> Welcome to the MySQL monitor. Commands end with ; or \g.<br /> Your MySQL connection id is 1<br /> Server version: 5.5.28-log Source distribution<br /> Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.<br /> Oracle is a registered trademark of Oracle Corporation and/or its<br /> affiliates. Other names may be trademarks of their respective<br /> owners.<br /> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</span></span></i><span style="color: #351c75;"><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"></span></span></span></span><span style="color: #351c75;"><b>&nbsp;</b></span><br /><br /><span style="color: #351c75;"><b>mysql&gt; SHOW VARIABLES LIKE '%ssl%';</b></span><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br /> +-----------------+-----------------------------------------+<br /> | Variable_name&nbsp;&nbsp; | Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br /> +-----------------+-----------------------------------------+<br /> | have_openssl &nbsp;&nbsp; | YES</span></span></i></span><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span></span></i></span> |<br /> | have_ssl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | YES</span></span></i></span><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span></span></i></span> |<br /> | ssl_ca &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; | /etc/ssl/certs/mysql/ca-cert.pem &nbsp; &nbsp; &nbsp;&nbsp; |<br /> | ssl_capath &nbsp; &nbsp;&nbsp; | /etc/ssl/certs/mysql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br /> | ssl_cert&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | /etc/ssl/certs/mysql/server-cert.pem&nbsp;&nbsp;&nbsp; |<br /> | ssl_cipher &nbsp; &nbsp;&nbsp; | DHE-RSA-AES256-SHA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br /> | ssl_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | /etc/ssl/certs/mysql/server-key.pem&nbsp;&nbsp;&nbsp;&nbsp; |<br /> +-----------------+-----------------------------------------+<br />7 rows in set (0.01 sec)</span></span></i></span><br /><h4>&nbsp;</h4><h4>1.3°) Tester la connexion SSL en local. </h4>A présent, il faut tester la connexion ssl. D'abord, nous allons tester le fonctionnement en local. Pour cela nous avons besoin de créer un utilisateur qui ne peut se connecter qu'en utilisant une connexion sécurisée.<br /><span style="color: #351c75;"><b><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'bidon'@'localhost' IDENTIFIED BY "xxxxxxxx" REQUIRE SSL;</span></span></b></span><br /><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Query OK, 0 rows affected (0.00 sec)</span></span></i></span><br /><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">mysql&gt; flush privileges ;</span></span></i></span><br /><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Query OK, 0 rows affected (0.00 sec)</span></span></i></span><br /><br />Pour tester la connexion il suffit de passer la commande suivante, pour une connexion simple :<br /><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b># mysql -u bidon -p</b></span><br /><span style="color: #38761d;"><i>Enter password: <br /> ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)</i></span></span></span><br />On peut remarquer que la connexion échoue. Maintenant en utilisant une connexion sécurisée : <br /><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b># mysql -u bidon -p --ssl-ca=/etc/ssl/certs/mysql/ca-cert.pem</b></span> <br /><span style="color: #38761d;"><i>Enter password: <br /> Welcome to the MySQL monitor. Commands end with ; or \g.<br /> Your MySQL connection id is 24<br /> Server version: 5.5.25-log Source distribution<br /> Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.<br /> Oracle is a registered trademark of Oracle Corporation and/or its<br /> affiliates. Other names may be trademarks of their respective<br /> owners.<br /> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</i></span><br /><span style="color: #20124d;"><b>mysql&gt; quit</b></span></span></span><br />Et ô miracle ça fonctionne. Maintenant, tentons la connexion sécurisée depuis un serveur distant.<br /><h4>&nbsp;</h4><h4>&nbsp;1.4°) Tester la connexion SSL depuis un serveur distant.&nbsp;</h4>Notre serveur local est nommé "diplodocus" et le serveur distant "triceratops". Sur diplodocus il faut autoriser un utilisateur à se connecter en SSL depuis triceratops :<br /><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b>mysql&gt; GRANT ALL PRIVILEGES ON bidon.* TO 'bidon'@'triceratops' IDENTIFIED BY "xxxxxxxxx" REQUIRE SSL;</b></span><br /><span style="color: #38761d;"><i>Query OK, 0 rows affected (0.00 sec)</i></span><br /><span style="color: #351c75;"><b>mysql&gt; flush privileges ;</b></span><br /><span style="color: #38761d;"><i>Query OK, 0 rows affected (0.00 sec)</i></span></span></span><br />Il faut à présent copier l'ensemble des certificats situé dans le répertoire /etc/certs/mysql/ sur le même répertoire sur triceratops :<br /><span style="color: #351c75;"><b><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">triceratops# cd /etc/ssl/certs/mysql<br />triceratops# scp [email protected]:/etc/ssl/certs/mysql/client-key.pem .<br /> triceratops# scp [email protected]:/etc/ssl/certs/mysql/server-cert.pem .<br /> triceratops# scp [email protected]:/etc/ssl/certs/mysql/client-cert.pem .</span></span></b></span><br />Un fois ce travail effecuté, il suffit de tester la connexion distante :<br /><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b>triceratops# mysql -u bidon -p --ssl-ca=/etc/ssl/certs/mysql/ca-cert.pem -h diplodocus</b></span><br /><span style="color: #38761d;"><i>Enter password: <br /> Welcome to the MySQL monitor. Commands end with ; or \g.<br /> Your MySQL connection id is 25<br /> Server version: 5.5.25-log Source distribution<br /> Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.<br /> Oracle is a registered trademark of Oracle Corporation and/or its<br /> affiliates. Other names may be trademarks of their respective<br /> owners.<br /> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</i></span><br /><span style="color: #351c75;"><b>mysql&gt; quit</b></span><br /><span style="color: #38761d;"><i>Bye</i></span></span></span><br /><br />Et voilà, le tour est joué...<br /><h3>&nbsp;</h3><h3>2°) Analyse du trafic réseau pour valider la connexion SSL.</h3>Mais bon comment être sur maintenant que les échanges entre le client et le serveur sont bien crypté ?<br />Ben, il suffit de regarder ce qui se passe sur le réseau entre les deux machine. Pour cela, j'ai trouvé sur le net un outil permettant <a href="http://fr.wikipedia.org/wiki/Analyseur_de_paquets" target="_blank">d'analyser les paquets</a> liés au trafic réseau MySQL sur une interface : <a href="http://hackmysql.com/mysqlsniffer" target="_blank">mysqlsniffer</a>.<br />Voici les étapes pour installer, compiler et utiliser mysqlsniffer (inspiré de : <a href="http://www.zapoyok.info/2010/05/21/utilisation-de-mysqlsniffer/" target="_blank">Utilisation de mysqlsniffer</a>) :<br /><span style="color: #351c75;"><b><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">diplodocus# mkdir -p /usr/local/src/mysqlsniffer<br /> diplodocus# cd /usr/local/src/mysqlsniffer<br /> diplodocus# wget hackmysql.com/code/mysqlsniffer.tgz<br /> diplodocus# tar xfvz mysqlsniffer.tgz<br /> diplodocus# gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c</span></span></b></span><br /><span style="color: #38761d;"><i><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">mysqlsniffer.c:26:18: fatal error: pcap.h: No such file or directory</span></span></i></span><br /><br />Là, on se rend compte qu'il manque une librairie :<br /><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b># zypper install libpcap-devel<br /> # gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c<br /> # ls -lt</b></span><br /><span style="color: #38761d;"><i>total 136<br /> -rwxr-xr-x 1 root root 22 15:50 mysqlsniffer</i></span></span></span><br /><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #38761d;"><i><span style="font-size: small;">..............</span></i></span> </span></span><br /><br /><span style="background-color: white; float: none; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; text-align: justify; text-indent: 0px; text-transform: none; word-spacing: 0px;">Ensuite il faut lancer la commande et se connecter à la base distante depuis un autre console:</span><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b># ./mysqlsniffer -p 3306 eth0</b></span><br /><span style="color: #38761d;"><i>mysqlsniffer listening for MySQL on interface eth0 port 3306<br /> .....................<br /> ::FRAGMENT START::<br /> ::FRAGMENT END::</i></span><br /> ......................</span></span><span style="background-color: white; float: none; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; text-align: justify; text-indent: 0px; text-transform: none; word-spacing: 0px;"><br />Les </span><span style="background-color: white; color: black; float: none; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; text-align: justify; text-indent: 0px; text-transform: none; word-spacing: 0px;">::FRAGMENT START:: et </span><span style="background-color: white; color: black; float: none; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; text-align: justify; text-indent: 0px; text-transform: none; word-spacing: 0px;">::FRAGMENT END:: montre que la connexion est cryptée, sinon on aurait :</span><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="color: #351c75;"><b># ./mysqlsniffer -p 3306 eth0</b></span><br /><span style="color: #38761d;"><i>mysqlsniffer listening for MySQL on interface eth0 port 3306<br /> server &gt; xx.xx.xx.xx.57842: ID 0 len 78 Handshake &lt;proto 10 ver 5.5.28-log thd 18&gt; <br /> xx.xx.xx.xx.57842 &gt; server: ID 1 len 80 Handshake (new auth) &lt;user bidon db (null) max pkt 16777216&gt; <br /> server &gt; xx.xx.xx.xx.57842: ID 2 len 7 OK &lt;fields 0 affected rows 0 insert id 0 warnings 0&gt; <br /> xx.xx.xx.xx.57842 &gt; server: ID 0 len 33 COM_QUERY: select @@version_comment limit 1<br /> server &gt; xx.xx.xx.xx.57842: ID 1 len 1 1 Fields<br /> ID 2 len 39 Field: ..@@version_comment &lt;type var string (253) size 19&gt;<br /> ID 3 len 5 End &lt;warnings 0&gt; <br /> ID 4 len 20 || Source distribution ||<br /> ID 5 len 5 End &lt;warnings 0&gt; <br /> xx.xx.xx.xx.57842 &gt; server: ID 0 len 18 COM_QUERY: SELECT DATABASE()<br /> server &gt; xx.xx.xx.xx.57842: ID 1 len 1 1 Fields<br /> ID 2 len 32 Field: ..DATABASE() &lt;type var string (253) size 34&gt;<br /> ID 3 len 5 End &lt;warnings 0&gt; <br /> ID 4 len 1 || NULL ||<br /> ID 5 len 5 End &lt;warnings 0&gt; <br /> xx.xx.xx.xx.57842 &gt; server: ID 0 len 5 COM_INIT_DB: bidon<br /> server &gt; xx.xx.xx.xx.57842: ID 1 len 7 OK &lt;fields 0 affected rows 0 insert id 0 warnings 0&gt; <br /> server &gt; xx.xx.xx.xx.44498: ID 0 len 72 Handshake &lt;proto 10 ver 5.5.8 thd 72804&gt; <br /> xx.xx.xx.xx.44498 &gt; server: ID 1 len 85 Handshake (new auth) &lt;user bidon db bidon max pkt 1073741824&gt; <br /> server &gt; xx.xx.xx.xx.44498: ID 2 len 7 OK &lt;fields 0 affected rows 0 insert id 0 warnings 0&gt; <br /> xx.xx.xx.xx.44498 &gt; server: ID 0 len 1 COM_STATISTICS<br /> server &gt; xx.xx.xx.xx.44498: ID 1 len 143 Uptime: 4611470 Threads: 1 Questions: 16883155 Slow queries: 1 Opens: 183 Flush tables: 1 Open tables: 152 Queries per second avg: 3.661<br /> xx.xx.xx.xx.44498 &gt; server: ID 0 len 1 COM_QUIT<br /> xx.xx.xx.xx.57842 &gt; server: ID 0 len 12 COM_QUERY: show tables<br /> server &gt; xx.xx.xx.xx.57842: ID 1 len 1 1 Fields<br /> ID 2 len 86 Field: information_schema.TABLE_NAMES.Tables_in_bidon &lt;type var string (509) size 64&gt;<br /> ID 3 len 5 End &lt;warnings 0&gt; <br /> ID 4 len 5 End &lt;warnings 0&gt; <br /> xx.xx.xx.xx.57842 &gt; server: ID 0 len 1 COM_QUIT</i></span></span></span><span style="background-color: white; color: black; float: none; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; text-align: justify; text-indent: 0px; text-transform: none; word-spacing: 0px;"><br /><br />Voilà, l'affaire est dans le sac.</span><br /><h3>&nbsp;</h3><h3>3°) Conclusions</h3>Nous voilà maintenant paré, pour mettre en place la réplication entre serveurs MySQL situés sur&nbsp; réseaux différents. Il reste quand même évident que ce travail vous assure la confidentialité des données échangées, mais n'assure en aucun cas la sécurisation du serveur de base de données qu'est MySQL : c'est un autre sujet.... qui est lui lié à la mise en place d'un pare-feu et d'une vrai politique de sécurité réseau.<br /><br />Quelques liens intéressant :<br />- <a href="http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL" target="_blank">Connexion sécurisée à MySQL (chicoree.fr).</a><br />- <a href="http://krierjon.developpez.com/mysql/securiser/index.php?page=page_9#L9" target="_blank">Sécurisez votre serveur MySQL sous Unix ( developpez.com).</a>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-79286111019867860032013-01-15T15:56:00.000+01:002013-01-20T07:37:50.132+01:00Serveurs physiques Versus Serveurs virtuels<h3>0°) Introduction </h3>L'objectif de cet article est de vous faire partager mon retour d'expérience sur la migration de l'hébergement de nos serveurs physiques vers un hébergement virtualisé.<br />Je me suis rendu compte à travers mes recherches que même si on parlait énormément de technologie <a href="http://fr.wikipedia.org/wiki/Cloud_computing" target="_blank">"Cloud"</a> et "<a href="http://fr.wikipedia.org/wiki/Cloud_computing#IaaS" target="_blank">IAAS</a>", il n'était pas vraiment évident de si retrouver dans la jungle des offres disponibles, même pour un professionnel.<br />Il est possible que la problématique exposée dans cet article soit particulière et ne réponde pas à l'ensemble de vos interrogations. Mais globalement si vous gérez aujourd'hui des serveurs physiques et que vous louez une ou plusieurs baies dans une salle machine, cet article vous donnera un aperçu et surtout un exemple réussi de migration de serveurs physiques vers des serveurs virtuels.<br /><br /><h3>1°) L'état des lieux</h3>Depuis 1998, les serveurs de la société NAOS sont hébergés chez <a href="http://www.internet-fr.net/" target="_blank">INTERNET-FR</a>. Dans une de leurs salles machines ultra sécurisées, nous avons bénéficié pendant plus de 14 ans d'une qualité de services exceptionnelle. Que ce soit au niveau des caractéristiques techniques mises à notre disposition pour notre hébergement que de la qualité relationnelle avec les équipes techniques. A tel point qu'il ne nous était jamais venu à l'esprit de chercher une autre solution pour l'hébergement de nos serveurs.<br /><br />Le seul point d'ombre à cela, c'est que nous n'avions pas accès à nos serveurs 24H/24 et 7J/7. Mais, nous avions fait avec. Les pannes étant assez rares, nous avons compensé ce léger souci d'accès par la mise en place de serveurs de secours (1 serveur de secours pour 2 serveurs en production) avec des procédures de bascule en cas de plantage, pour assurer à nos clients un taux de disponibilité le plus élevé possible. Concrétement, comme nous avions à notre disposition une plage de 32 adresses IP, nous avons attribués une adresse IP pour chaque service et une adresse IP pour chaque serveur. Ainsi, il suffisait de reconfigurer les cartes réseaux des serveurs de secours pour que les services soient relancés.<br /><br />Cette stratégie avait quand même ses limites. En effet, il fallait être sûr que le serveur en panne ne soit pas redémarré, sinon des collisions et des pertes de paquets réseaux risquer de créer de gros souci si sur le même réseaux nous avions configuré la même adresse IP sur 2 cartes différentes.<br />Mais cela ne c'est jamais présenté.<br /><br />Malheureusement, toute bonne chose a une fin. Fin Mai 2011, INTERNET-FR est <a href="http://www.zdnet.fr/actualites/prosodie-se-renforce-dans-l-hebergement-avec-internet-fr-et-level-ip-39761281.htm" target="_blank">racheté</a> par la société <a href="http://www.prosodie.fr/" target="_blank">PROSODIE</a>. Jusque-là, pas d'affolement, même si nous nous posons pas mal de questions... L'inquiétude vient d'une annonce deux mois plus tard, mi-juin 2011 sur le <a href="http://www.journaldunet.com/solutions/ssii/capgemini-rachat-prosodie.shtml" target="_blank">rachat de PROSODIE par CAP GEMINI</a>.&nbsp; Là, nous comprenons que notre aventure avec notre hébergeur est sur sa fin....<br /><br />Bon, c'est la vie....<br /><br />Fataliste, même si à ce moment là, nos interlocuteurs privilégiers chez INTERNET-FR se veulent rassurants, nous entamons quand même à notre grand regret notre quête du Saint Graal :&nbsp; <br /><h3>2°) A la recherche d'un nouvel hébergeur !</h3>Avant d'entamer mes recherches, je fais un état des lieux des prestations que nous disposions afin d'essayer de trouver quelque chose d'approchant. Bien sur, nous avions conscience qu'il serait très difficile de retrouver l'équivalent rapport qualité/prix. <br />L'état des lieux fût assez rapide :<br /><ul><li>6 serveurs (double alimentation 500Wx2, et oui les serveurs ne sont pas tous jeunes...)</li><li>32 adresses IP</li><li>2 routeurs (un réseau local + un réseau public)</li><li>1 baie 42U</li><li>très bonne bande passante</li></ul>Tant qu'à changer, autant aussi gommer les lacunes de notre précédent hébergement, donc en plus nous voulions :<br /><ul><li>accès à nos serveurs 24h/24 et 7j/7</li><li>reboot physique à distance</li></ul>Voilà, YaPluKa <img border="0" src="/-arTMe5PuHXI/UPGgS700EgI/AAAAAAAASRc/dNE4Mxu3XRI/s1600/face-smile.webp" style="top: 5px;" /><br /><br />Je commence mes recherches en mars 2012 et elles s'avèrent très difficiles :<br /><ol><li>Trouver des sociétés qui gèrent des salles machines d'hébergement sur Paris, Ile de France.</li><li>Qui sont intéressées par louer 1 seule baie ou 1/2 baie.</li><li>Dont le prix de la location n'est pas fonction de la consommation des ressources mais forfaitisé.</li><li>Trouver des sociétés qui veulent faire un devis </li><li>...</li></ol>Je me rends compte que c'est la jungle.... et j'ai énormément de mal a avoir un début de réponse, même en appelant directement les personnes. C'est assez exaspérant et surprenant. Malgré tous j'obtiens 2 devis, de la part de <a href="http://www.celeste.fr/" target="_blank">Céleste</a> et de <a href="http://www.telehouse.fr/" target="_blank">Téléhouse</a> : un grand merci <img border="0" src="/-arTMe5PuHXI/UPGgS700EgI/AAAAAAAASRc/dNE4Mxu3XRI/s1600/face-smile.webp" valign="middle" vspace="4" /><br />Mais malheureusement leurs propositions ne correspondent pas à nos attentes.<br /><br />Devant ce constat d'échec, nous devions changer de stratégie et commencer à penser à abandonner nos machines au profit de machines de locations chez un hébergeur. Là, du coup c'est beaucoup plus facile à trouver car les offres sur ce sujet sont pléthoriques...<br /><h3>3°) Dans le vif du sujet<u><b><span style="color: #f6b26b;"><span style="font-size: large;"> </span></span></b></u></h3>Depuis quelques années maintenant, j'avais une position assez tranchée sur la mise en place de serveurs virtuels. Mes arguments (pour les environnement Linux) étaient les suivants :<br /><ul><li>Ajout d'un surcouche à l'OS : ce qui ne peut que pénaliser les performances.</li><li>Ajout d'un <a href="http://fr.wikipedia.org/wiki/Point_individuel_de_d%C3%A9faillance" target="_blank">SPOF</a> (Single Point Of Failure) : Mettre plusieurs serveurs virtuels sur une seule machine physique.</li><li>Démultiplication des serveurs : ce qui se traduit par l'accroissement du travail d'administration, de déploiement, de supervision, etc... </li><li>L'optimisation et la gestion des ressources physiques devient de plus en plus difficile et ce fait uniquement par accroissement des dites ressources...</li></ul>Donc j'étais plutôt adepte d'optimiser les ressources d'une machine avec un bon OS plutôt que de multiplier l'installation de plusieurs serveurs. <br /><br />Fin Septembre 2012 un événement va remettre à plat toutes mes convictions : un plantage hardware d'un serveur de production...<br /><ul><li>Impossible de rebooter,&nbsp;</li><li>les délais d'intervention de mon hébergeur ont frôlé les 24h </li><li>la carte réseau du serveur continuait de répondre donc impossible de passer sur le serveur de secours.&nbsp;</li></ul>Bilan, chez NAOS on commence à se poser des questions sur l'hébergement de machines physiques. Pourquoi pas s'intéresser au marché de l'hébergement des serveurs virtuels ?<br />Là aussi, les offres sont pléthorique et nous avions du mal à nous y retrouver, et pourtant l'informatique c'est notre métier, je n'osais même pas imaginer si nous n'avions pas eu les compétences requises pour effectuer ce type de démarches....<br />Nous avions quand même une assez bonne idée de ce que nous cherchions et nous avions du mal à trouver chaussure à notre pied. Jusqu'à ce que je me rende compte en lisant mes emails, que la société <a href="http://www.gandi.net/" target="_blank">GANDI</a> (le <a href="http://fr.wikipedia.org/wiki/Bureau_d%27enregistrement" target="_blank">registrar</a> de l'ensemble de mes <a href="http://fr.wikipedia.org/wiki/Domain_Name_System" target="_blank">domaines</a>) était un acteur assez actif dans le marché du <a href="http://fr.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud</a> et plus particulièrement dans le domaine du <a href="http://fr.wikipedia.org/wiki/Cloud_computing#IaaS" target="_blank">IAAS</a>. Et, ô miracle, fin septembre 2012, GANDI annonce <a href="https://www.gandi.net/news/fr/2012-09-27/773-opensuse_12.1_dispo/" target="_blank">la mise à disposition de la distribution OpenSuse 12.1</a>. Tous les signes étaient au vert pour faire notre choix...<br /><br />Un tour d'horizon rapide du service proposé par GANDI me permet de constater dans un premier temps que cela peut répondre à nos attentes. Donc, il ne nous restait plus qu'à tester.<br /><br />Et là, je commence à être assez bluffé par la simplicité et l'accessibilité du service. Comme à son habitude, GANDI travaille essentiellement sur le net. Donc, l'ensemble des opérations s'effectuent via une interface web, qui est assez simple et suffisamment ergonomique. Ce qui m'allait très bien :<br /><ul><li>Pas besoin d'attendre des semaines un hypothétique devis.</li><li>Aucun engagement dans le temps.</li><li>Une offre technique très claire et sans surprise.</li><li>Une offre financière claire et surtout très abordable. </li><li>...</li></ul>Le principe choisi est assez déroutant au début, mais on s'y habitue rapidement. En mode serveur, vous achetez des parts de ressources. A ce jour, une part correspond à :<br /><ul><li>1 coeur</li><li>512 Mo de mémoire</li><li>12Go d'espace disque (<a href="http://fr.wikipedia.org/wiki/Serial_Attached_SCSI" target="_blank">SAS</a> en <a href="http://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_10_.28ou_RAID_1.2B0.29" target="_blank">Raid 10</a>)</li><li>10<a href="http://fr.wikipedia.org/wiki/D%C3%A9bit_binaire" target="_blank">Mbps</a> de bande passante</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="/-zuuRzPQt8aQ/UPuQq27uAxI/AAAAAAAASUI/SYlnmdHyJT8/s1600/ishot-53.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="/-zuuRzPQt8aQ/UPuQq27uAxI/AAAAAAAASUI/SYlnmdHyJT8/s640/ishot-53.webp" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><br />Bon, je ne vais pas décrire ici l'ensemble des avantages et des possibilités de la solution <a href="https://www.gandi.net/hebergement/serveur" target="_blank">GANDI</a>. Le mieux est de se rendre sur leur site pour le découvrir ... <br /><br />De notre côté, après une quinzaine de jours de tests, nous avons complètement adopté la solution et pris la décision de migrer l'ensemble de nos services.<br />Avec cette expérience, j'ai remis mes convictions au goûs du jour et aujourd'hui, je commence (enfin! diront certains) à appréhender les bénéfices du cloud pour notre entreprise. <br /><br />Plusieurs avantages pour nous, que je vais essayer d'énoncer et de commenter (peut-être pas de manière exhaustive) ci-dessous par degré d'importance&nbsp; :<br /><h3>4°) Zéro serveurs physiques</h3>Le fait de ne plus avoir de serveurs physiques, corrige deux freins majeurs dans notre mode de fonctionnement et dans nos offres de services.<br /><b>Notre premier frein</b> était lié au coût d'acquisition et de maintenance d'un serveur physiques. Lors de la mise en place de nouveaux services et/ou de propositions de nouvelles prestations, nous étions obligés :<br /><ul><li>d'intégrer dans nos coûts et/ou propositions, l'amortissement de l'achat des serveurs. Pour une proposition, il fallait demander à notre client, un engagement minimum de 36 mois (comptablement, c'est le délai nécessaire pour l'amortissement d'une machine).&nbsp;</li><li>de contracter un crédit pour financer cet achat.&nbsp;</li><li>de proposer des délais de mise en service pouvant s'étaler sur plusieurs mois (acceptation du crédit, délais de livraison des serveurs, mise en production des services, etc...). </li><li>de prévoir l'espace nécessaire dans notre baie d'hébergement et le cas échéant d'intégrer un coût supplémentaire de location d'une nouvelle baie.</li></ul><b>Le second frein</b> venait de la gestion des ressources de nos serveur et de la gestion de l'obsolescence de notre parc. Concernant l'optimisation des ressources, nous avions des serveurs qui étaient toujours surdimensionnés afin d'éviter de se retrouver sous-dimensionné après quelques mois d'exploitation. Il était très difficile après la mise en production de modifier les caractéristiques physiques d'un serveur :<br /><ul><li>difficulté d'accéder à la salle machine, </li><li>dans la majorité des cas, l'intervention nécessitait un arrêt des services,</li><li>risque non négligeable de générer des problèmes collatéraux suite à l'intervention.</li></ul>Donc comme vous l'aurez compris, aujourd'hui, avec nos serveurs virtualisés, nous avons déporté l'ensemble des problèmes énoncés ci-dessus auprès de notre nouveau prestataire. Plusieurs gains financiers notables très rapidement:<br /><ul><li>réduction de notre <a href="http://fr.wikipedia.org/wiki/Cout_total_de_possession">TCO</a> (notre coût de possession).</li><li>suppression de l'ensemble des contrats de maintenance hardware de nos serveurs. </li><li><span style="color: #6aa84f;"><span style="color: black;">réduction de notre facture d'hébergement.</span></span></li></ul><h3>Maintenance et&nbsp; sauvegarde des données améliorés</h3><h3>5°) Agilité de l'entreprise.</h3>La première conséquence évidente et mesurable induite par le choix de passer à des serveurs virtuels est d'avoir introduit une forme d'agilité dans les "futur services" que nous pourrons proposer.<br />En effet, la mise en production d'un serveur peut s'effectuer en quelques jours (uniquement liée à la complexité des services à installer).&nbsp; Le choix de fonctionnement de notre prestataire va nous permettre de proposer à&nbsp; nos clients de pouvoir s'engager sur des périodes inférieures ou égales à 12 mois. <br /><br />A titre d'exemple, vous trouverez ci-dessus les délais qui ont été nécessaire pour la migration de notre serveur de supervision basé sur NAGIOS :<br /><ul><li>Délai d'acquisition des ressources auprès de GANDI : 1h </li><li>Installation d'OpenSuse 12.1 (image GANDI) : 1h </li><li>Configuration spécifique du serveur : 2h</li><li>Installation de NAGIOS et configuration des machines et services à superviser : 6h</li><li>Tests de validation et correction des problèmes : 5h</li><li>Mise en production : 1h</li></ul>Soit un total d'environ 16h (deux grosses journées) de travail pour migrer un serveur NAGIOS. Honorable non ?<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="/-AaSeFMjfVTY/UPUYGPZ6M9I/AAAAAAAASSg/DS86unEAXqI/s1600/ishot-76.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="419" src="/-AaSeFMjfVTY/UPUYGPZ6M9I/AAAAAAAASSg/DS86unEAXqI/s640/ishot-76.webp" width="640" /></a></div>La deuxième conséquence concerne la gestion et l'évolution des ressources des serveurs. Bon, je n'ai pas une grosse expérience des serveurs virtualisés, mais je trouve que le concept mis en place par GANDI est assez séduisant. Concernant les ressources attribuées, vous avez les ressources propres au serveur (CPU, mémoire) et les ressources externes (carte réseau, espace disque).<br />Les cartes réseaux et les espaces disques sont attachés à un serveur.<br />Dans l'exemple ci-dessous, j'ai un serveur 3 cœurs avec 4Go de mémoire auquel est attaché une interface réseau. <br /><div class="separator" style="clear: both; text-align: center;"><a href="/-Pu1cWXguDAo/UPUbbPGo1mI/AAAAAAAASSw/2XeAB6PIisM/s1600/ishot-79.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="/-Pu1cWXguDAo/UPUbbPGo1mI/AAAAAAAASSw/2XeAB6PIisM/s640/ishot-79.webp" width="640" /></a></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="/-RVRw04qNDIc/UPUcZbH_2eI/AAAAAAAASS8/TAZWXbjqbxQ/s1600/ishot-81.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="/-RVRw04qNDIc/UPUcZbH_2eI/AAAAAAAASS8/TAZWXbjqbxQ/s640/ishot-81.webp" width="640" /></a></div><div style="text-align: center;"><u><span style="font-size: x-small;"><br /></span></u></div>Sur ce serveur, j'ai attaché 2 disques :<br /><div class="separator" style="clear: both; text-align: center;"><a href="/-8tjQiv7MvnU/UPUcbKeRvJI/AAAAAAAASTE/_YYcfvKsvsg/s1600/ishot-80.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="84" src="/-8tjQiv7MvnU/UPUcbKeRvJI/AAAAAAAASTE/_YYcfvKsvsg/s640/ishot-80.webp" width="640" /></a></div>Un disque qui contient le système d'exploitation et un autre qui contient les données des services qui tournent sur ce serveur.<br />Premier avantage, en supposant que je dispose de l'espace disque nécessaire, je peux à tout moment faire un <a href="http://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29" target="_blank">spnashot</a> des mes disques très simplement.<br /><div class="separator" style="clear: both; text-align: center;"><a href="/-UfT4H7u8rCg/UPUeSTfJJiI/AAAAAAAASTg/04JgvJgNc9A/s1600/ishot-82.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="165" src="/-UfT4H7u8rCg/UPUeSTfJJiI/AAAAAAAASTg/04JgvJgNc9A/s400/ishot-82.webp" width="400" /></a></div>Je peux aussi agrandir la taille du disque, à priori sans avoir à redémarrer le serveur. Mais je me suis rendu compte que même en effectuant un resize2fs, j'avais besoin de faire un reboot (qui ne dure que quelques secondes).<br />Ce qui est séduisant, c'est que je peux détacher les ressources associées à un serveur et les rattacher à un autre serveur (mais je n'ai pas encore testé). Idem pour l'interface réseau (mais je n'ai pas encore testé aussi). Ce qui ouvre des perspectives de garanties de services assez intéressantes.<br />Avec un peu d'organisation et de rigueur, nous allons améliorer considérablement le <a href="http://fr.wikipedia.org/wiki/Disponibilit%C3%A9" target="_blank">taux de disponibilité</a> de nos services (même si celui si était quand même assez bon), offrir aussi des garanties plus importante sur la pérennité des données qui nous sont confiées. <br /><br />Donc vous l'aurez compris, nos limites en terme de ressources seront étroitement liées à celles de notre prestataire...<br /><br /><h3>6°) Conclusions.</h3>Pour conclure, même si je suis énormément séduit pas les nouvelles perspectives qui me sont aujourd'hui offertes les services virtualisés, je suis quand même conscient que cela soulève certains nouveaux problèmes :<br /><ul><li>une très forte dépendance vis-à-vis de mon prestataire.</li><li>mes serveurs ne sont plus sur le même réseau.</li><li>impossible d'installer un réseau privé entre l'ensemble de mes serveurs, donc le trafic même intra-serveur passe par le réseau public.</li><li>accroissement nécessaire des règles de sécurité et de cryptage des données échangées entre les serveurs.</li><li>quid des garanties des données en cas de pertes suite à un problème grave sur l'infrastructure du prestataire ?</li><li>...</li></ul>Il faut malgré tous rester réaliste, aujourd'hui il est impossible d'avancer et de proposer des services innovant sans dépendre d'un prestataire... Donc le tous c'est de prévoir des plans de sorties en cas de problèmes.<br />Nous nous sommes déjà affranchi (du moins nous le pensons ???) des problèmes de sécurités en durcissant et en affinant les règles de nos <a href="http://fr.wikipedia.org/wiki/Pare-feu_%28informatique%29" target="_blank">pares-feux</a>, et des problèmes de confidentialités d'échanges de données intra-serveurs en cryptant ces échanges via <a href="http://fr.wikipedia.org/wiki/OpenSSL" target="_blank">OpenSSL</a> (cela fera l'objet d'un autre post concernant la mise en place de crytpage avec MySQL).<br /><br />Pour les autres nouvelles contraintes, nous allons pour l'instant, déjà profiter des plus apporter par ces nouvelles technologies et nous essayerons dans le futur de palier aux nouveaux problèmes induits par les choix qui ont été fait.<br /><ul></ul>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-72104954103316161472012-11-26T16:47:00.000+01:002012-11-26T16:50:40.378+01:00NRPE : Problème avec la commande check_procs.<h2>NRPE : Problème avec la commande check_procs.</h2>Dernièrement, j'ai eu la malchance d'avoir un problème hard (carte RAID H.S.) sur un de mes serveurs de production.<br />Bon, ça arrive, le serveur n'était pas tous jeune... Le problème c'est que ce genre de désagrément se produit toujours le week-end :-) Sans être fataliste, d'un autre côté le week-end, l'utilisation des services est moindre, donc l'un d'en l'autre : on va pas se plaindre !!!<br />La priorité était de remettre les services en route le plus rapidement possible. Une fois le problème hardware mis en évidence (impossible de redémarrer le serveur), il était plus couteux d'essayer de réparer plutôt que de migrer sur un serveur de secours. Donc la solution choisie, voire imposée par les circonstance et le bon sens, consistait à migrer les services.<br />Après migration et remise en production des services, tous était redevenu à la normale. Ouf, j'ai eu chaud... C'est dans de telle situation que l'on est content d'avoir mis en place des sauvegardes régulières :-)<br /><br />Touche finale: il ne restait plus qu'à remettre en place mes scripts de supervision sur le nouveau serveur de production.<br />Une partie du serveur étant déjà supervisé, je n'avais que les scripts spécifiques à mes services à remettre en place. Et là, grosse surprise, la supervision de la présence&nbsp; de certain processus me renvoyer :<br />&nbsp;- <i><span style="color: #0b5394;">PROCS CRITICAL: 0 processes with args 'com.naos.enews.privateInterfaces.utilities.SendingSchedulingEmailings'</span></i><br />- <i><span style="color: #0b5394;">PROCS CRITICAL: 0 processes with args 'com.naos.enews.privateInterfaces.utilities.NewNpaiManager'</span></i><br /><br />Bizarre, car après vérification sur le serveur de production, les processus étaient bien présent et en cours d'exécution.<br />J'ai exécuté les commandes en direct sur le serveur sans passer par NRPE et là, le résultat était bien celui attendu :<br /><i><span style="color: #0b5394;"><span style="color: #38761d;"># ./check_procs -c 1:1 -a com.naos.enews.privateInterfaces.utilities.NewNpaiManager</span><br />PROCS OK: 1 process with args 'com.naos.enews.privateInterfaces.utilities.NewNpaiManager'</span></i><br />Déduction logique : le problème venait du check_nrpe...<br />Hop, un petit coup de google and co... Dur dur de trouver la bonne informations... <br />Après pas mal d'heures de tests, de compilation des sources et pas mal d'heure de recherche sur le net (voire quelques jours...), j'ai enfin trouver "<span style="color: #990000;"><b>THE SOLUTION</b></span>". <br />A priori, le problème proviennait d'une variable d'environnement permettant de limiter le nombre de caractères en sortie de la commande "ps". Lorsque je passais mes tests en local, j'utilisais le compte root. Donc il était normal que j'obtienne le résultat attendu. Par contre en passant pas NRPE, le compte utilisateur était celui de nagios. Le résultat de la commande "ps" était tronqué et la pattern recherchée était absente.<br /><br />Finalement, la solution la plus élégante pour corriger le problème, a été trouvé via le lien <a href="http://weblog.christoph-probst.com/article.php/20110718143604605" target="_blank">suivant</a>.<br />J'ai mis en application en modifiant mon fichier de configuration NRPE sur la machine à superviser :<br /><br /><i><span style="color: #0b5394;">command[check_sending_enews_procs]=<b>COLUMNS=512 </b>/usr/lib/nagios/plugins/check_procs -c 1:1 -a com.naos.enews.privateInterfaces.utilities.SendingSchedulingEmailings<br />command[check_smtp_log_enews_procs]=<b>COLUMNS=512 </b>/usr/lib/nagios/plugins/check_procs -c 1:1 -a com.naos.enews.privateInterfaces.utilities.NewNpaiManager</span></i><br /><br />Après avoir sauvegardé et relancer le daemon nrpe, j'obtiens afin sur le serveur de supervision le&nbsp; résultat attendu :<br /><br /><i><span style="color: #38761d;"># /usr/local/nagios/libexec/check_nrpe -H 192.168.0.146 -c check_smtp_log_enews_procs</span><br /><span style="color: #0b5394;">PROCS OK: 1 process with args 'com.naos.enews.privateInterfaces.utilities.NewNpaiManager'</span></i><br /><i><span style="color: #38761d;"># /usr/local/nagios/libexec/check_nrpe -H 192.168.0.146 -c check_sending_enews_procs </span><br /><span style="color: #0b5394;">PROCS OK: 1 process with args 'com.naos.enews.privateInterfaces.utilities.SendingSchedulingEmailings'</span></i><br /><br /><u><b>En conclusion : </b></u><br />Il devient de plus en plus dur de trouver de l'information pertinente sur les moteurs de recherche. Pourtant les problèmes à résoudre sont de plus en plus pointus et demandent quand même une bonne dose de réflexion... D'un autre côté, si c'était facile, ça ne serait pas aussi marrant :-) pour se remuer les méninges non ???altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-77782830379335335802012-10-08T15:42:00.001+02:002016-05-04T16:24:46.615+02:00Optimiser les images de sa lettre<h2>Gérer et optimiser vos images dans vos lettres d'informations.</h2>Le choix du format HTML comme format de diffusion de vos lettres d'informations, vous permet de mettre en valeur votre message par l'insertion d'images et d'illustrations graphiques ce qui va améliorer la lecture de votre message en la rendant plus animée.<br />Généralement, ces images proviennent soit de votre bibliothèque d'entreprise, soit d'une bibliothèque d'images que vous aurez préalablement sélectionné sur le web. Dans la majorité des cas, les images choisis ne sont pas à la bonne dimension, au bon poids ou parfois vous souhaitez ne récupérer qu'une partie de l'image. Sans les bons outils, nous sommes souvent désemparées lorsqu'il faut optimiser, retailler ou modifier le format d'une image.<br />Notre article a pour objectif de vous donner quelques pistes afin de réaliser ce type d'opération sans engloutir votre budget communication.<br /><br />Vous trouverez sur le net, de nombreux logiciels qui sont capables de vous permettre de retailler, d'extraire ou d'optimiser vos images. Loin d'être exhaustif, nous avons sélectionné et testé trois applications sur les environnements Mac et PC. L'investissement des deux premières applications restent raisonnables, un peu moins pour la troisième, mais on ne pouvait pas passer à côté de la référence actuelle du traitement d'image qu'est Photoshop.<br /><br /><strong>Même si aujourd'hui la bande passantes des réseaux est de plus en plus performante, l'optimisation de vos images va vous permettre d'alléger le poids global de votre lettre et favoriser un affichage plus rapide dans les gestionnaires de courriers de vos destinataires.</strong><br /><table border="0" cellpadding="0" cellspacing="1" style="width: 100%px;"> <tbody><tr> <td><img _fcksavedurl="/opencms/opencms/sites/enews/images/1Bleu.png" align="left" alt="1Bleu" height="35" id="iimg_-1875400011" src="/opencms/opencms/sites/enews/images/1Bleu.webp" width="35" />PHOTOFILTRE</td> <td><img _fcksavedurl="/opencms/opencms/sites/enews/images/2Bleu.png" align="left" alt="2Bleu" height="35" id="iimg_-1874221803" src="/opencms/opencms/sites/enews/images/2Bleu.webp" width="35" />PIXELMATOR</td> <td><img _fcksavedurl="/opencms/opencms/sites/enews/images/3Bleu.png" align="left" alt="3Bleu" height="35" id="iimg_-1877609899" src="/opencms/opencms/sites/enews/images/3Bleu.webp" width="35" />PHOTOSHOP</td> </tr><tr> <td width="33%"><img _fcksavedurl="/opencms/opencms/sites/enews/images/PhtofiltreLogo.jpg" align="left" alt="PhtofiltreLogo" height="120" hspace="5" id="iimg_-1581360801" src="/opencms/opencms/sites/enews/images/PhtofiltreLogo.webp" vspace="5" width="120" /><strong>Compatible PC<br /> Version gratuite (selon usage) et version Pro . Budget inférieur à 50€.</strong></td> <td width="33%"><img _fcksavedurl="/opencms/opencms/sites/enews/images/LogoPixelMator.png" align="left" alt="LogoPixelMator" height="120" hspace="5" id="iimg_-1566154244" src="/opencms/opencms/sites/enews/images/LogoPixelMator.webp" vspace="5" width="120" /><strong>Compatible MAC<br /> Budget inférieur à 50€</strong></td> <td><img _fcksavedurl="/opencms/opencms/sites/enews/images/LogoPhotoshop.jpg" align="left" alt="LogoPhotoshop" height="120" hspace="5" id="iimg_-1565496796" src="/opencms/opencms/sites/enews/images/LogoPhotoshop.webp" vspace="5" width="120" /><strong>Compatible MAC et PC<br /> Budget supérieur à 400€</strong></td> </tr><tr> <td valign="top">PROCEDURE<br /><strong>Commencer</strong> par effectuer une copie de sauvegarde de votre image origine.<br /><u>♦ Pour recadrer/rogner votre image :</u><br /><strong>Ouvrir</strong> votre copie d'image avec Photofiltre <img _fcksavedurl="/opencms/opencms/sites/enews/images/phfiltre1.jpg" align="left" alt="phfiltre1" height="198" hspace="5" id="iimg_795532377" src="/opencms/opencms/sites/enews/images/phfiltre1.webp" vspace="5" width="300" /><br />Votre écran se présente avec votre image au centre, une barre horizontale de menus et d'outils dans le haut, une barre verticale d'outils à droite.<br /><strong>Sélectionner</strong> dans la barre d'outils, l'outil "Sélection"<img _fcksavedurl="/opencms/opencms/sites/enews/images/phfiltre2.jpg" alt="phfiltre2" height="30" id="iimg_795142593" src="/opencms/opencms/sites/enews/images/phfiltre2.webp" width="31" /> .<br /><strong>Sélectionner</strong> avec la souris la partie de l'image que vous souhaitez conserver. La partie sélectionnée est encadrée par un pointillé. <strong><br /> Sélectionner </strong>dans le menu "Image", le sous-menu "Recadrer" (ou utiliser le raccourci Maj+ctrl+H).<br />Il ne vous reste plus à l'écran que la partie souhaitée.<br /><br /><u>♦ Pour redimensionner votre image :</u><strong><br /> Sélectionner</strong> dans le menu "Image", le sous-menu "Taille de l'image". Une fenêtre apparaît vous permettant de saisir vos paramètres.<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/phfiltre4.jpg" alt="phfiltre4" height="282" id="iimg_775535152" src="/opencms/opencms/sites/enews/images/phfiltre4.webp" width="200" /><br /><strong>Cocher</strong> l'option 'Conserver les proportions" pour effectuer un redimensionnement homothétique.<br /><strong>Saisir</strong> la longueur ou la hauteur en pixels.<br /><strong>Saisir</strong> la résolution (généralement 72 pour le web) puis valider.<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/phfiltre5.jpg" align="left" alt="phfiltre5" height="198" hspace="5" id="iimg_775710464" src="/opencms/opencms/sites/enews/images/phfiltre5.webp" vspace="5" width="300" /><br /><u>♦ Pour sauvegarder l'image modifiée :</u><br /><strong>Sélectionner</strong> dans le menu "Fichier", le sous-menu "Enregistrer sous".<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/phfiltre6.jpg" align="left" alt="phfiltre6" height="217" hspace="5" id="iimg_779377296" src="/opencms/opencms/sites/enews/images/phfiltre6.webp" vspace="5" width="300" /><br /><strong>Choisir</strong> le format de l'image (gif ou jpeg). Eviter "png" pour l'emailing.<br /><strong>Sélectionner</strong> le répertoire d'enregistrement et valider.</td> <td valign="top">PROCEDURE<br /><strong>Commencer</strong> par effectuer une copie de sauvegarde de votre image origine.<br /><u>♦ Pour recadrer/rogner votre image :</u><br /><strong>Ouvrir</strong> votre copie d'image avec Pixelmator <img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm1.jpg" align="left" alt="Pixelm1" height="176" hspace="5" id="iimg_-1176862945" src="/opencms/opencms/sites/enews/images/Pixelm1.webp" vspace="5" width="300" /><br />Votre écran se présente avec votre image au centre, une barre horizontale de menus dans le haut, une barre verticale d'outils à gauche, deux autres fenêtres sur la droite.<br /><strong>Sélectionner</strong> dans la barre d'outils, l'outil "Rogner"<img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm2.jpg" alt="Pixelm2" height="31" id="iimg_-1179765441" src="/opencms/opencms/sites/enews/images/Pixelm2.webp" width="30" /> .<br /><strong>Sélectionner</strong> avec la souris la partie de l'image que vous souhaitez conserver. <img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm3.jpg" align="left" alt="Pixelm3" height="173" hspace="5" id="iimg_-1175502425" src="/opencms/opencms/sites/enews/images/Pixelm3.webp" vspace="5" width="300" />La partie non sélectionnée est opacifiée. <strong><br /> Valider</strong> votre opération en cliquant en haut à droite sur le bouton "Rogner" <img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm4.jpg" alt="Pixelm4" height="15" id="iimg_-1179475393" src="/opencms/opencms/sites/enews/images/Pixelm4.webp" width="40" />.<br />Il ne vous reste plus à l'écran que la partie souhaitée. <img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm5.jpg" align="left" alt="Pixelm5" height="174" hspace="5" id="iimg_-1177239169" src="/opencms/opencms/sites/enews/images/Pixelm5.webp" vspace="5" width="300" /><u>♦ Pour redimensionner votre image :</u><strong><br /> Sélectionner</strong> dans le menu "Image", le sous-menu "Taille de l'image". Une fenêtre apparaît vous permettant de saisir vos paramètres.<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm6.jpg" alt="Pixelm6" height="207" id="iimg_-1181672649" src="/opencms/opencms/sites/enews/images/Pixelm6.webp" width="200" /><br /><strong>Cocher</strong> l'option 'Echelle proportionnelle" pour effectuer un redimensionnement homothétique.<br /><strong>Saisir</strong> la longueur ou la hauteur en pixels.<br /><strong>Saisir</strong> la résolution (généralement 72 pixels/pouce pour le web) puis valider.<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/Pixelm7.jpg" align="left" alt="Pixelm7" height="169" hspace="5" id="iimg_-1193986586" src="/opencms/opencms/sites/enews/images/Pixelm7.webp" vspace="5" width="300" /><br /><u>♦ Pour sauvegarder l'image modifiée :</u><br /><strong>Sélectionner</strong> dans le menu "Partage", le sous-menu "Exporter pour le web".<br /><strong>Choisir</strong> les options en haut de l'image telles que <br />• le format de l'image (gif ou jpeg). Eviter "png" pour l'emailing;<br />• la qualité de 0 à 100%. Le poids de l'image s'affiche à gauche, en jouant avec ce paramètre, il est possible de le baisser. Il faut alors trouver le bon compromis entre poids et qualité d'image.<br /><strong>Cliquer</strong> sur suivant pour finaliser l'enregistrement de votre image et sélectionner le répertoire d'enregistrement.</td> <td valign="top">PROCEDURE<br /><strong>Commencer</strong> par effectuer une copie de sauvegarde de votre image origine.<br /><u>♦ Pour recadrer/rogner votre image :</u><br /><strong>Ouvrir</strong> votre copie d'image avec Photoshop<img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop1.jpg" align="left" alt="photoshop1" height="188" hspace="5" id="iimg_1619012432" src="/opencms/opencms/sites/enews/images/photoshop1.webp" vspace="5" width="300" /><br />Votre écran se présente avec votre image au centre, une barre horizontale de menus dans le haut, une barre verticale d'outils à droite ou à gauche, d' autres fenêtres sur la droite.<br /><strong>Sélectionner</strong> dans la barre d'outils, l'outil "Rogner"<img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop2.jpg" alt="photoshop2" height="23" id="iimg_1620428720" src="/opencms/opencms/sites/enews/images/photoshop2.webp" width="30" /> .<br /><strong>Sélectionner</strong> avec la souris la partie de l'image que vous souhaitez conserver. <img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop8.jpg" align="left" alt="photoshop8" height="188" hspace="5" id="iimg_1656963322" src="/opencms/opencms/sites/enews/images/photoshop8.webp" vspace="5" width="300" />La partie non sélectionnée est opacifiée. <strong><br /> Valider</strong> votre opération en cliquant en haut à droite sur le bouton "Valider" <img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop4.jpg" alt="photoshop4" height="16" id="iimg_1620010096" src="/opencms/opencms/sites/enews/images/photoshop4.webp" width="20" />.<br />Il ne vous reste plus à l'écran que la partie souhaitée. <img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop5.jpg" align="left" alt="photoshop5" height="188" hspace="5" id="iimg_1625859968" src="/opencms/opencms/sites/enews/images/photoshop5.webp" vspace="5" width="300" /><br /><u>♦ Pour redimensionner votre image :</u><strong><br /> Sélectionner</strong> dans le menu "Image", le sous-menu "Taille de l'image". Une fenêtre apparaît vous permettant de saisir vos paramètres.<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop6.jpg" alt="photoshop6" height="228" id="iimg_1669464715" src="/opencms/opencms/sites/enews/images/photoshop6.webp" width="300" /><br /><strong>Cocher</strong> l'option 'Echelle proportionnelle" pour effectuer un redimensionnement homothétique.<br /><strong>Saisir</strong> la longueur ou la hauteur en pixels.<br /><strong>Saisir</strong> la résolution (généralement 72 pixels/pouce pour le web) puis valider.<br /><img _fcksavedurl="/opencms/opencms/sites/enews/images/photoshop7.jpg" align="left" alt="photoshop7" height="188" hspace="5" id="iimg_1670995835" src="/opencms/opencms/sites/enews/images/photoshop7.webp" vspace="5" width="300" /><br /><u>♦ Pour sauvegarder l'image modifiée :</u><br /><strong>Sélectionner</strong> dans le menu "Fichier", le sous-menu "Enregistrer pour le web".<br /><strong>Choisir</strong> les options à droite de l'image telles que <br />• le format de l'image (gif ou jpeg). Eviter "png" pour l'emailing;<br />• la qualité. Le poids de l'image s'affiche sous l'image, en jouant avec ce paramètre, il est possible de le baisser. Il faut alors trouver le bon compromis entre poids et qualité d'image.<br /><strong>Valider</strong> pour finaliser l'enregistrement de votre image et sélectionner le répertoire d'enregistrement.</td> </tr></tbody></table>Voilà, avec ces informations, vous devriez être capable à présent de retailler ou d'optimiser vos images pour vos lettres d'informations.<br /><br /><strong>Chantal KERMAIDIC<br />Responsable de la communication</strong>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-18873584680542937412012-10-08T15:38:00.001+02:002012-10-08T15:38:07.193+02:00Images bloquées, quelles parades ?<h2>Impact de l'attribut "alt" dans les images de votre lettre.</h2>Les images d'une newsletter sont parfois bloquées à l'arrivée sur les postes destinataires en fonction de&nbsp; l'outil de messagerie utilisé ou de son paramétrage. Votre objectif est d'arriver à <strong>rendre votre lettre suffisament attractive&nbsp; </strong><strong>pour que votre destinataire s'y intéresse même si les images sont bloquées</strong>. <br />Dans cette situation, qui ne dépend malheureusement pas de vous, les questions suivantes se posent :<br /> <ul><li>comment réussir à intéresser votre destinataire ?</li><li>comment éviter qu’il ignore ou efface votre email immédiatement?</li><li>comment lui suggérer d’aller vers votre site ?</li><li>comment éviter qu’il ne se désabonne ?</li><li>comment l’inciter à débloquer les images ?</li></ul>Dans le code HTML de votre lettre, l'insertion d'une image nécessite au minimum l'ajout du code : <em>&lt;img src="nom du fichier"&nbsp; /&gt;</em><br />Pour faciliter la mise en page,&nbsp; les valeurs de longueur et largeur sont généralement renseignés ainsi qu'un texte alternatif :&nbsp; <em>&lt;img src="nom du fichier" height="hauteur" width="largeur" alt="mon image" /&gt;</em><br /><em><strong>Dans la réalisation d'une lettre d'information il est fortement conseillé de renseigner les attribut de taille de l'image.</strong></em><br />D'autres attributs existent permettant de gérer la position de l'image (droite, gauche, ...) ainsi que sa distance par rapport au texte environant (horizontalement, verticalement,).<br /> <strong>Dans cet article, nous allons nous intéresser de plus près à l'attribut "alt".</strong><br />Comme énoncé plus haut, l'attribut "alt" (pour "alternatif") permet de définir le texte à afficher en lieu et place de l'image si celle-ci ne s'affiche pas suite à un problème de connexion, un problème d'indisponibilité du serveur qui héberge l'image, etc....<br /> Renseigner ce champ évite <strong>dans certain cas,</strong> de trouver sur sa page (lorsque les images sont bloquées) des images de remplacement du style : <br /><br /><table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 360px;"> <tbody><tr> <td class="noborder center middle" width="300"><img _fcksavedurl="/opencms/opencms/sites/enews/images/ImBloquee1.jpg" alt="exemple1" height="95" id="iimg_-1539538058" src="/opencms/opencms/sites/enews/images/ImBloquee1.webp" width="262" /></td> <td class="noborder center middle" width="20">ou</td> <td class="noborder center middle" width="40"><img _fcksavedurl="/opencms/opencms/sites/enews/images/Imgbloquee2.gif" alt="exemple2" height="35" id="iimg_-1304340488" src="/opencms/opencms/sites/enews/images/Imgbloquee2.webp" width="35" /></td> </tr></tbody></table>Il devient donc logique de se poser les bonnes questions lors de la réalisation de son message :<br /> <ul><li>Dans quels cas faut-il renseigner ce champ ?</li><li>Quel type de texte faut-il insérer ?</li><li>Comment mettre en valeur ce texte ?</li></ul>Si le texte de subsitution s'affiche en lieu et place de l'image, il faut avoir en tête que ce contenu va disposer de l'espace initialement prévu pour l'image.Cette contrainte doit être prise en compte au moment de la rédaction du texte.<br />Bien sur tous les images n'ont pas besoin de disposer d'un texte alternatif. En effet, certaines images qui composent votre lettre sont purement décoratives (angles arrondis, des séparations graphiques, ...) et ne nécéssitent aucun texte de subsitution.Malgrè tout, si nous voulons éviter <strong>"l'affreuse image bloquée"</strong>, nous allons renseigner notre attribut "alt" avec un seul caractère discret (du style "." ou "-" par exemple). Dans la suite de cet article, nous vous montrerons comment nous pouvons jouer sur son style CSS pour le rendre encore plus discret si nécessaire.<br />Pour des images du type puce imagée, nous mettrons comme attribut un caractère symbolisant une puce (point, flèche, ...).<br />Pour des images du type bouton à cliquer, l'attribut "alt" sera renseigné selon le cas par un texte du type "cliquez ici pour vous inscrire". Le destinataire saura ainsi où cliquer et pour quelle raison sans voir l'image.<br />Pour substutuer un logo, le nom de la société, de la marque ou du produit qu'il symbolise peut-être utilisé.<br />Pour une "grosse" image contenant un texte (avec une police particulière ou un fond spécifique), utilisez l'attribut pour réécrire le texte ou l'accroche. Attention, si pour des raisons d'intégration votre image a été découpée en plusieurs images, évitez de renseigner l'attribut de chaque morceau avec un texte. Faites-le sur le ou les plus grosses images, ou l'image la mieux placée et pour les autres mettez juste un seul caractère discret comme texte de subsitution.<br /><br />A ce stade, si les images sont bloquées, votre lettre devrait déjà être plus lisible et le code HTML de la déclaration de votre image devrait ressembler à ceci :<em>&lt;img src="nom du fichier" height="hauteur" width="largeur" border="0" alt="mon texte de substitution" /&gt; </em>(hormis les autres attributs d'image qui auraient pu être renseignés).<br /><br />Nous allons à présent, nous intéresser à l'enrichissement du texte de substitution afin de le "styler" pour redonner un peu plus de peps à notre lettre. Effectivement, il est tout à fait possible d'appliquer un style de texte à notre image qui ne va en aucun cas influer sur le rendu de l'image, mais qui s'appliquera au texte alternatif si celui-ci était présenté. Il est quand même à signaler que cet artifice technique, n'est pas reconnue par tous les outils de messagerie mais par la plupart.<br /> Pour vous donner une exemple, nous allons travailler sur le texte de substitution de votre logo.<br /> <ul><li>La taille de police pour être assez visible pourra être augmenter à 24px ou plus.</li><li>La couleur de la police pourra être choisie en fonction de la couleur dominante de votre charte graphique.</li><li>Si vous avez une couleur de fond foncée, la couleur de votre texte de substitution devra être d'une couleur clair, pour qu'il soit visible (voir l'exemple ci-dessous, le texte de substitution apparaît en blanc).</li></ul>Votre code devrait ressembler à :<em> &lt;img src="nom du fichier" height="hauteur" width="largeur" Alt="mon texte de substitution" </em>style="<a href="http://www.blogger.com/blogger.g?blogID=6427792758786404163"><strong>font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; font-size: 12px; color: #fff;</strong></a>"/&gt;<br /> <strong>Pour les textes de subsitutions contenant les caractères "discrets" cités plus hauts, vous pouvez minimiser leur présence choisissant une taille de police très petite.</strong><br /> Voici ci-dessous un exemple de mise en valeur de newsletter avec l'utilisation de l'attribut Alt<br /> <table style="width: 100%px;"> <tbody><tr> <td align="center" class="noborder center"><img _fcksavedurl="/opencms/opencms/sites/enews/images/AvecouSansImages.jpg" alt="AvecouSansImages" height="600" id="iimg_1198983032" src="/opencms/opencms/sites/enews/images/AvecouSansImages.webp" width="800" /></td> </tr></tbody></table>Voilà, à vous de jouer avec le "alt" à présent ! <br />Votre message pourra désormais avoir un impact plus percutant même si les images sont bloquées...<br /> <strong>Chantal KERMAIDIC<br />Reponsable de la communication</strong>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-49037125193888264272012-05-04T09:58:00.004+02:002012-05-04T10:04:19.542+02:00NUMERICABLE: Sécurité et port ouvertDepuis que j'ai subi l'installation d'un cheval de Troie sur un de mes serveurs il y a maintenant presque deux ans de cela, je suis devenu de plus en plus prudent et surtout de plus en plus restrictif (voire paranoïaque) sur l'accès des services au niveau de mes serveurs. A l'époque, j'avais eu l'outrecuidance de croire que les applications OpenSource que j'installais et que j'utilisais, étaient plus ou moins sécurisées. Je n'avais pas pris la peine de vérifier et de mettre à jours régulièrement phpMyAdmin. Ayant laissé les scripts de setup ouverts, il n'a pas fallu longtemps à mes assaillants pour installer un cheval de Troie. Alerté par le trafic réseau anormal et après quelques heures de recherche, je suis arrivé à nettoyer le serveur infecté et à combler le trou de sécurité.<br /><br />Depuis cette époque, j'ai installé sur chacun de mes serveurs un firewall système (<a href="http://fr.wikipedia.org/wiki/Iptables" target="_blank">iptable</a>) et je n'ouvre les services qu'avec parcimonie et à bon escient.<br /><br />Dernièrement j'installe une nouvelle version d'eGroupWare que j'envisage de faire fonctionner sur le port <b style="color: black;">445</b> (microsoft-ds). je vérifie, avant bien sur, dans le fichier /etc/services à quoi correspond l'utilisation de ce port. Pas de souci, c'est un port qui est réservé par le protocole Samba, que je n'utilise pas.<br /><br />En déplacement lors de mon installation, mes tests de validations sont donc effectués depuis une connexion ADSL chez SFR. Je configure l'accès de port 445 depuis l'adresse IP que j'utilise à ce moment là :<br /><br /><div style="color: #073763;"><i>root# iptables -t filter -A INPUT -p tcp --dport 445 -s xxx.xxx.xxx.0/24 -j ACCEPT</i></div><div style="color: #073763;"><i>root# iptables -t filter -A OUTPUT -p tcp --dport 445 -s xxx.xxx.xxx.0/24 -j ACCEPT </i></div><br />et pas de souci, tous fonctionne correctement. De retour chez moi avec une connexion ADSL Free et après avoir mis les bonnes autorisations, pas de souci aussi, ça fonctionne.<br />Par contre, de retour au bureau avec une connexion numéricable, là même après avoir configuré convenable mon firewall, impossible d'accès à mon site avec un joli message super bien explicite :<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="/-_NabcMQsQqo/T6OJv7Rd7pI/AAAAAAAABF0/f1rAS4jE1R8/s1600/ishot-26.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="328" src="/-_NabcMQsQqo/T6OJv7Rd7pI/AAAAAAAABF0/f1rAS4jE1R8/s640/ishot-26.webp" width="640" /></a></div><br />Après avoir passé quelques heures à faire des tests dans tous les sens au niveau de la configuration de mon firewall, je me rends compte qu'avec ou sans firewall, impossible d'accéder à ce service quoi que je fasse. Alors qu'un autre service sur un port différent, passe sans problème. Du coup, je me mets à suspecter le port en question. Effectivement, après une recherche sur le net, j'apprends que le port 445 qui est utilisé par le port Samba est potentiellement un trou de sécurité et peut permettre la récupération des mots de passes d'un PC, donc bloqué chez numéricable.... Mais je suis sur Mac moaaaaa !!!!<br />Pour résoudre mon problème, j'ai modifié le port d'accès et à présent cela fonctionne...<br /><br />Beaucoup de temps perdu pour une information qui n'est pas diffusé par numéricable, mais bon c'est toujours satisfaisant de trouver la solution à un problème.<br /><br /><br />altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-60714574374898588242012-04-26T18:18:00.000+02:002012-04-26T18:23:59.958+02:00OpenSuse 12.1: Installer eGroupWareJ'utilise <a href="http://www.egroupware.org/" target="_blank">eGroupWare</a> depuis pas mal de temps, pour le module "Base de connaissance". Bon, je sais, installer un outil aussi complet pour n'utiliser qu'un seul module, c'est un peu du luxe. Mais (pour l'instant, car je continu de chercher) je n'ai pas trouvé d'outils OpenSource me permettant de gérer convenablement les informations techniques que j'amasse quotidiennement. Donc comme j'ai les serveurs, comme j'ai les ressources et comme j'ai les compétences, pourquoi ne pas s'offrir le luxe d'installer <a href="http://www.egroupware.org/" target="_blank">eGroupWare</a> sur un de nos serveurs ?<br /><br />Ma dernière installation d'eGroupWare (en version 1.4), remontait à plus de 3ans... mon premier réflexe a donc été d'essayer de mettre à jours, la version existante. Bien mal m'en a pris... Heureusement que dans ma grande sagesse (et surtout avec déjà beaucoup d'upgrade manqués aux compteurs), j'avais sauvegardé à la fois la base et le répertoire d'eGroupWare. Ce qui m'a permis de revenir en arrière sans avoir perdu la moindre information.... Ouf ...<br />Donc après cette petite mésaventure, je me décide à installer une nouvelle instance d'eGroupWare sur un serveur à part, histoire d'être tranquille. <br />Le souvenir que j'en avais, c'était qu'eGroupWare avait beaucoup de dépendances au niveau des modules php et que lors de mes premières installations, j'avais pas mal galéré pour toutes les ajouter à la main.<br />Utilisant depuis quelques temps maintenant le super outil de gestion des packages d'OpenSuse '<a href="http://fr.opensuse.org/SDB:Zypper_usage_11.3" target="_blank">zypper</a>', je me dis pourquoi ne pas en profiter pour l'installation d'eGroupWare ? Effectivement, sur le site d'eGroupWare, on trouve justement un <a href="http://download.opensuse.org/repositories/server:/eGroupWare" target="_blank">repository</a> pour pouvoir utiliser zypper.<br /><br />Et voilà que l'installation commence.<br /><br />Etape 1 : ajouter les référence du repository<br /><i><b><span style="color: red;">piaf:~ #</span></b> <span style="color: navy;">zypper addrepo http://download.opensuse.org/repositories/server:/eGroupWare/openSUSE_12.1/ 'openSUSE-12.1 eGroupWare'</span><span style="color: #339966;"><br />Adding repository 'openSUSE-12.1 eGroupWare' [done]<br />Repository 'openSUSE-12.1 eGroupWare' successfully added<br />Enabled: Yes<br />Autorefresh: No<br />GPG check: Yes<br />URI: http://download.opensuse.org/repositories/server:/eGroupWare/openSUSE_12.1/</span></i><br /><br />Etape 2 : mettre à jours les informations du nouveau repository<br /><i><span style="color: red;"><b>piaf:~ #</b></span> <span style="color: #333399;">zypper lr -u</span><br /><span style="color: teal;"># | Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Enabled | Refresh | URI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />--+--------------------------+--------------------------+---------+---------+----------------------------------------------------------------------------<br />1 | openSUSE-12.1 eGroupWare | openSUSE-12.1 eGroupWare | Yes&nbsp;&nbsp;&nbsp;&nbsp; | No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | http://download.opensuse.org/repositories/server:/eGroupWare/openSUSE_12.1/<br />2 | repo-12.1-non-oss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | openSUSE-12.1 Non-OSS&nbsp;&nbsp;&nbsp; | Yes&nbsp;&nbsp;&nbsp;&nbsp; | No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | http://download.opensuse.org/distribution/12.1/repo/non-oss/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />3 | repo-12.1-oss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | openSUSE-12.1 OSS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Yes&nbsp;&nbsp;&nbsp;&nbsp; | No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | http://download.opensuse.org/distribution/12.1/repo/oss/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />4 | repo-12.1-update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | openSUSE-12.1 Updates&nbsp;&nbsp;&nbsp; | Yes&nbsp;&nbsp;&nbsp;&nbsp; | No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | http://download.opensuse.org/update/12.1/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><br /><i><b><span style="color: red;">piaf:~ #</span></b> <span style="color: navy;">zypper refresh</span><br /><span style="color: teal;">Retrieving repository 'openSUSE-12.1 eGroupWare' metadata [\]<br /><br />New repository or package signing key received:<br />Key ID: DC0A179E47E7FC8D<br />Key Name: server:eGroupWare OBS Project &lt;server:[email protected]&gt;<br />Key Fingerprint: A8533F680C15B1B9DC69036BDC0A179E47E7FC8D<br />Key Created: Sat Apr&nbsp; 3 09:02:42 2010<br />Key Expires: Mon Jun 11 09:02:42 2012 (expires in 45 days)<br />Repository: openSUSE-12.1 eGroupWare<br /><br />Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a<br />Retrieving repository 'openSUSE-12.1 eGroupWare' metadata [done]<br />Building repository 'openSUSE-12.1 eGroupWare' cache [done]<br />Repository 'openSUSE-12.1 Non-OSS' is up to date.<br />Repository 'openSUSE-12.1 OSS' is up to date.<br />Retrieving repository 'openSUSE-12.1 Updates' metadata [done]<br />Building repository 'openSUSE-12.1 Updates' cache [done]<br />All repositories have been refreshed.</span><span style="color: #339966;">&nbsp;</span></i> <br /><br />Etape 3 : installation d'eGroupWare<br /><i><span style="color: red;"><b>piaf:~ #</b></span><span style="color: navy;"> zypper search egroupware</span><br /><span style="color: #339966;">Loading repository data...<br />Reading installed packages...<br /><br />S | Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Summary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />--+----------------------------+-----------------------------------------------------------+-----------<br />&nbsp; | eGroupware&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | EGroupware is a web-based groupware suite written in php. | package&nbsp;&nbsp; <br />&nbsp; | eGroupware&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | EGroupware is a web-based groupware suite written in php. | srcpackage<br />&nbsp; | eGroupware-bookmarks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware bookmarks application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-calendar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware calendar application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-core&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware core&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-developer_tools | The EGroupware developer_tools application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-egw-pear&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware egw-pear application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-emailadmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware emailadmin application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-felamimail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware Webmail application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-filemanager&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware filemanager application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-gallery&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware gallery application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-importexport&nbsp;&nbsp;&nbsp; | The EGroupware importexport application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-infolog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware infolog application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-manual&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware manual application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-news_admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware news_admin application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-notifications&nbsp;&nbsp; | The EGroupware notifications application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-phpbrain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware phpbrain application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-phpfreechat&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware chat application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-phpsysinfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware phpsysinfo application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-polls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware polls application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-projectmanager&nbsp; | The EGroupware projectmanager application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-registration&nbsp;&nbsp;&nbsp; | The EGroupware registration application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-resources&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware resources application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-sambaadmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware sambaadmin application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-sitemgr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware Sitemanager CMS application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-syncml&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware syncml application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-timesheet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware timesheet application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-tracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware trouble ticket system application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; <br />&nbsp; | eGroupware-wiki&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | The EGroupware wiki application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | package&nbsp;&nbsp; </span><br /><b><span style="color: red;">piaf:~ #</span></b> <span style="color: navy;">zypper install eGroupware</span><br /><span style="color: #339966;">Loading repository data...<br />Reading installed packages...<br />Resolving package dependencies...<br /><br />The following NEW packages are going to be installed:<br />&nbsp; eGroupware eGroupware-bookmarks eGroupware-calendar eGroupware-core eGroupware-developer_tools eGroupware-egw-pear eGroupware-emailadmin <br />&nbsp; eGroupware-felamimail eGroupware-filemanager eGroupware-importexport eGroupware-infolog eGroupware-manual eGroupware-news_admin eGroupware-notifications <br />&nbsp; eGroupware-phpbrain eGroupware-phpfreechat eGroupware-phpsysinfo eGroupware-polls eGroupware-projectmanager eGroupware-registration eGroupware-resources <br />&nbsp; eGroupware-sambaadmin eGroupware-sitemgr eGroupware-syncml eGroupware-timesheet eGroupware-tracker eGroupware-wiki jpgraph libc-client2007e_suse php5-bz2 <br />&nbsp; php5-gd php5-imap php5-posix php5-zip t1lib tnef <br /><br />36 new packages to install.<br />Overall download size: 21.7 MiB. After the operation, additional 69.0 MiB will be used.<br />Continue? [y/n/?] (y): <br />Retrieving package tnef-1.4.9-1.1.x86_64 (1/36), 45.0 KiB (131.0 KiB unpacked)<br />Retrieving: tnef-1.4.9-1.1.x86_64.rpm [done]<br />Retrieving package libc-client2007e_suse-2007e_suse-9.1.2.x86_64 (2/36), 405.0 KiB (1.1 MiB unpacked)<br />Retrieving: libc-client2007e_suse-2007e_suse-9.1.2.x86_64.rpm [done]<br />Retrieving package php5-bz2-5.3.8-4.12.2.x86_64 (3/36), 27.0 KiB (28.0 KiB unpacked)<br />Retrieving: php5-bz2-5.3.8-4.12.2.x86_64.rpm [done (0 B/s)]<br />Retrieving package php5-posix-5.3.8-4.12.2.x86_64 (4/36), 27.0 KiB (32.0 KiB unpacked)<br />Retrieving: php5-posix-5.3.8-4.12.2.x86_64.rpm [done]<br />Retrieving package php5-zip-5.3.8-4.12.2.x86_64 (5/36), 49.0 KiB (88.0 KiB unpacked)<br />Retrieving: php5-zip-5.3.8-4.12.2.x86_64.rpm [done]<br />Retrieving package t1lib-5.1.2-15.7.1.x86_64 (6/36), 152.0 KiB (405.0 KiB unpacked)<br />Retrieving: t1lib-5.1.2-15.7.1.x86_64.rpm [done]<br />Retrieving package php5-imap-5.3.8-4.12.2.x86_64 (7/36), 46.0 KiB (100.0 KiB unpacked)<br />Retrieving: php5-imap-5.3.8-4.12.2.x86_64.rpm [done]<br />Retrieving package php5-gd-5.3.8-4.12.2.x86_64 (8/36), 99.0 KiB (333.0 KiB unpacked)<br />Retrieving: php5-gd-5.3.8-4.12.2.x86_64.rpm [done]<br />Retrieving package jpgraph-3.0.7-2.1.noarch (9/36), 9.8 MiB (21.8 MiB unpacked)<br />Retrieving: jpgraph-3.0.7-2.1.noarch.rpm [done (4.4 MiB/s)]<br />Retrieving package eGroupware-core-1.8.004.20120423-1.1.noarch (10/36), 5.6 MiB (23.8 MiB unpacked)<br />Retrieving: eGroupware-core-1.8.004.20120423-1.1.noarch.rpm [done (4.2 MiB/s)]<br />Retrieving package eGroupware-wiki-1.8.004.20120423-1.1.noarch (11/36), 152.0 KiB (487.0 KiB unpacked)<br />Retrieving: eGroupware-wiki-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-tracker-1.8.004.20120423-1.1.noarch (12/36), 136.0 KiB (555.0 KiB unpacked)<br />Retrieving: eGroupware-tracker-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-timesheet-1.8.004.20120423-1.1.noarch (13/36), 91.0 KiB (265.0 KiB unpacked)<br />Retrieving: eGroupware-timesheet-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-sitemgr-1.8.004.20120423-1.1.noarch (14/36), 825.0 KiB (2.8 MiB unpacked)<br />Retrieving: eGroupware-sitemgr-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-sambaadmin-1.8.004.20120423-1.1.noarch (15/36), 49.0 KiB (79.0 KiB unpacked)<br />Retrieving: eGroupware-sambaadmin-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-resources-1.8.004.20120423-1.1.noarch (16/36), 106.0 KiB (338.0 KiB unpacked)<br />Retrieving: eGroupware-resources-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-registration-1.8.004.20120423-1.1.noarch (17/36), 161.0 KiB (434.0 KiB unpacked)<br />Retrieving: eGroupware-registration-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-projectmanager-1.8.004.20120423-1.1.noarch (18/36), 397.0 KiB (1.6 MiB unpacked)<br />Retrieving: eGroupware-projectmanager-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-polls-1.8.004.20120423-1.1.noarch (19/36), 68.0 KiB (142.0 KiB unpacked)<br />Retrieving: eGroupware-polls-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-phpsysinfo-1.8.004.20120423-1.1.noarch (20/36), 267.0 KiB (1.0 MiB unpacked)<br />Retrieving: eGroupware-phpsysinfo-1.8.004.20120423-1.1.noarch.rpm [done (843.8 KiB/s)]<br />Retrieving package eGroupware-phpfreechat-1.8.004.20120423-1.1.noarch (21/36), 971.0 KiB (4.7 MiB unpacked)<br />Retrieving: eGroupware-phpfreechat-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-phpbrain-1.8.004.20120423-1.1.noarch (22/36), 155.0 KiB (639.0 KiB unpacked)<br />Retrieving: eGroupware-phpbrain-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-notifications-1.8.004.20120423-1.1.noarch (23/36), 58.0 KiB (115.0 KiB unpacked)<br />Retrieving: eGroupware-notifications-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-news_admin-1.8.004.20120423-1.1.noarch (24/36), 105.0 KiB (361.0 KiB unpacked)<br />Retrieving: eGroupware-news_admin-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-infolog-1.8.004.20120423-1.1.noarch (25/36), 294.0 KiB (1.3 MiB unpacked)<br />Retrieving: eGroupware-infolog-1.8.004.20120423-1.1.noarch.rpm [done (0 B/s)]<br />Retrieving package eGroupware-importexport-1.8.004.20120423-1.1.noarch (26/36), 206.0 KiB (432.0 KiB unpacked)<br />Retrieving: eGroupware-importexport-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-egw-pear-1.8.004.20120423-1.1.noarch (27/36), 105.0 KiB (503.0 KiB unpacked)<br />Retrieving: eGroupware-egw-pear-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-developer_tools-1.8.004.20120423-1.1.noarch (28/36), 82.0 KiB (220.0 KiB unpacked)<br />Retrieving: eGroupware-developer_tools-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-calendar-1.8.004.20120423-1.1.noarch (29/36), 467.0 KiB (2.4 MiB unpacked)<br />Retrieving: eGroupware-calendar-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-bookmarks-1.8.004.20120423-1.1.noarch (30/36), 121.0 KiB (280.0 KiB unpacked)<br />Retrieving: eGroupware-bookmarks-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-manual-1.8.004.20120423-1.1.noarch (31/36), 56.0 KiB (61.0 KiB unpacked)<br />Retrieving: eGroupware-manual-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-syncml-1.8.004.20120423-1.1.noarch (32/36), 65.0 KiB (235.0 KiB unpacked)<br />Retrieving: eGroupware-syncml-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-filemanager-1.8.004.20120423-1.1.noarch (33/36), 171.0 KiB (476.0 KiB unpacked)<br />Retrieving: eGroupware-filemanager-1.8.004.20120423-1.1.noarch.rpm [done (0 B/s)]<br />Retrieving package eGroupware-emailadmin-1.8.004.20120423-1.1.noarch (34/36), 121.0 KiB (497.0 KiB unpacked)<br />Retrieving: eGroupware-emailadmin-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-felamimail-1.8.004.20120423-1.1.noarch (35/36), 361.0 KiB (1.6 MiB unpacked)<br />Retrieving: eGroupware-felamimail-1.8.004.20120423-1.1.noarch.rpm [done]<br />Retrieving package eGroupware-1.8.004.20120423-1.1.noarch (36/36), 30.0 KiB (0 B unpacked)<br />Retrieving: eGroupware-1.8.004.20120423-1.1.noarch.rpm [done]<br />Installing: tnef-1.4.9-1.1 [done]<br />Installing: libc-client2007e_suse-2007e_suse-9.1.2 [done]<br />Installing: php5-bz2-5.3.8-4.12.2 [done]<br />Installing: php5-posix-5.3.8-4.12.2 [done]<br />Installing: php5-zip-5.3.8-4.12.2 [done]<br />Installing: t1lib-5.1.2-15.7.1 [done]<br />Installing: php5-imap-5.3.8-4.12.2 [done]<br />Installing: php5-gd-5.3.8-4.12.2 [done]<br />Installing: jpgraph-3.0.7-2.1 [done]<br />Installing: eGroupware-core-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-wiki-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-tracker-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-timesheet-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-sitemgr-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-sambaadmin-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-resources-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-registration-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-projectmanager-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-polls-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-phpsysinfo-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-phpfreechat-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-phpbrain-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-notifications-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-news_admin-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-infolog-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-importexport-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-egw-pear-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-developer_tools-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-calendar-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-bookmarks-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-manual-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-syncml-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-filemanager-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-emailadmin-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-felamimail-1.8.004.20120423-1.1 [done]<br />Installing: eGroupware-1.8.004.20120423-1.1 [done]<br />Additional rpm output:<br />/var/tmp/rpm-tmp.tlGGWE: line 2: /usr/bin/php5: No such file or directory<br />EGroupware install log saved to /root/eGroupware-install.log</span></i><br /><br />Et voilà, le tour est joué... facile non?<br />Juste un petit souci, car il manque l'exécutable /usr/bin/php5. Pour cela il suffit d'installer le package php5 (j'ai quand même mis un bout de temp à trouver le bon package, car un package php5 était déjà installé, mais ce n'était pas le bon) :<br /><br /><i><b><span style="color: red;">piaf:~ #</span></b> <span style="color: navy;">zypper install php5</span><br /><span style="color: #339966;">Loading repository data...<br /> Reading installed packages...<br /> Resolving package dependencies...<br /> <br /> The following package is going to be upgraded:<br /> &nbsp; php5 <br /> <br /> 1 package to upgrade.<br /> Overall download size: 1.1 MiB. No additional space will be used or freed after the operation.<br /> Continue? [y/n/?] (y): <br /> Retrieving package php5-5.3.8-4.12.2.x86_64 (1/1), 1.1 MiB (4.6 MiB unpacked)<br /> Retrieving: php5-5.3.8-4.12.2.x86_64.rpm [done (0 B/s)]<br /> Installing: php5-5.3.8-4.12.2 [done]<b></b></span></i> <i><b></b></i><br /><br />Beaucoup plus simple à installer car je n'ai plus à m'occuper des dépendances. Par défaut, les fichiers d'eGroupWare sont situé dans /usr/share/egroupware. Il suffit donc maintenant de configurer apaache et de suivre <a href="http://community.egroupware.org/index.php?page_name=wiki&amp;lang=&amp;wikipage=ManualSetup" target="_blank">les instructions d'installation d'eGroupWare</a>. Je n'ai rencontré aucun problème pour la suite, mais si vous avez un souci, n'hésitez pas à me laisser une question.altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-75037282651449170082012-04-05T11:10:00.000+02:002012-09-18T12:01:21.640+02:00Tester l'impact de votre campagne avant envoi (Part II)<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div>Dans notre sujet "tester sa campagne avant envoi (part I), je vous avais énuméré quelques points importants à valider avant l’envoi de votre campagne d’emails. Ces tests concernaient essentiellement la validation de la lettre, au niveau fonctionnel et visuel. <br /><br /><br /><b><span style="color: #444444;">Afin d'assurer le maximum d’impact de votre campagne , avez-vous déjà pensé à tester le contenu de votre lettre sur un échantillon de votre cible ? </span></b><br /><br /><br />Même si des études aujourd’hui mettent en évidence ce qui, dans une lettre, marche mieux ou moins bien , votre liste de contacts possède ses spécificités et par conséquent, son comportement aussi. <br /><br /><br />Lorsque vous créez une campagne, rien ne vous empêche de faire votre propre étude de comportement et ainsi optimiser l'impact. <br /><br /><br /><br /><b><span style="color: #444444;">Le principe de base est le suivant : </span></b><br />Vous créez 2 ou 3 sous-listes (échantillons) de votre base en extrayant 5 à 10 % (selon volume) des contacts de votre liste globale. <br />Sur ces différentes sous-listes, vous allez envoyer votre lettre avec différents contenus, analyser les résultats et à partir de ces échantillons décider du contenu à envoyer sur la totalité. <br />Vous verrez, les résultats sont surprenants et parfois inattendus ! <br /><br /><b><span style="color: #444444;">Mais quels éléments de la lettre pouvez-vous comparer ? </span></b><br /><br />Il y a trois barrières importantes à franchir dans le process de lecture d’une lettre : <br />1. L’identification de l’expéditeur et l’objet de la lettre <br />2. Le contenu du premier quart de votre lettre (« Johnson Box ») <br />3. Le reste de votre lettre <br /><br /><u>L’identification de l’expéditeur</u> <br />Il est important d’être clairement identifié et vous n’avez pas beaucoup de choix pour le faire. <br />En règle générale, on utilisera le nom de la société et/ou le nom du produit/service/marque. Dans certains cas, pour la fidélisation avec ses clients, un contact commercial par exemple pourra utiliser son nom. <br />Ce champ doit être défini dès vos toutes premières lettres et demeurer fixe. <br /><br /><u>L’objet de la lettre </u><br />N’hésitez pas à tester différents objets (sujets) sur vos échantillons ! <br />Lorsque vous définissez l’objet de la lettre, gardez en tête que c’est le deuxième élément après le nom de l'expéditeur qui va déclencher son ouverture. <br />Il peut lui aussi contenir le nom de la société, le nom d’une marque, le nom d’un produit ou service s’il n’a pas déjà été utilisé auparavant pour identifier l’expéditeur. En pratique, c’est la marque qui apparaît le plus. <br />Mais l’objet, c’est la première accroche de votre contact. Elle doit lui donner envie d’aller plus loin. Attention, beaucoup d’outils de messagerie tronquent l’objet du message dans la fenêtre de réception des emails à moins de 40 caractères. Soyez bref !!! <br /><br /><u>La Johnson Box</u> <br />Je vous rappelle qu’il s’agit là du premier quart de votre lettre (les 30 premières lignes). Retrouvez sa définition dans la fiche pratique :<u> <span style="color: black;">Comment augmenter le taux d'ouverture de vos lettres d'information ? </span></u><br /><br />Tout comme l’objet de la lettre, cette partie mérite d’être testée. En effet, il s’agit de la dernière barrière à franchir pour que le destinataire se transforme en lecteur et s’intéresse vraiment à votre message. <br /><br />C’est l’introduction à votre lettre et souvent la seule partie visible à l’ouverture. <br />Testez différentes introductions de votre lettre sur différents échantillons de contacts ! <br /><br /><u>Le contenu global de la lettre</u> <br />Hormis le ou les sujets développés dans votre lettre et la façon dont ils sont traités, il a été constaté que certains éléments de la lettre peuvent influencer la réactivité des destinataires (tels que la présence d'un logo, sa localisation, le nombre de liens, . . .). <br />Tester ces éléments est faisable mais requiert beaucoup de temps car cela peut remettre en question le design complet de la lettre. Ces questions là, vous devez vous les poser au moment de la création de la lettre et non pas au moment de la validation. Par conséquent, plutôt que de les tester sur des échantillons de contacts, je vous incite à suivre les règles couramment pratiquées et de déduire des résultats globaux de votre campagne, s'il est nécessaire ou pas de remettre en question le design général de votre lettre. <br /><br /><br />Que déduire de vos résultats sur échantillons ? <br /><br />L'analyse est très simple : <br />L'échantillon qui obtiendra le taux d'ouverture le plus élevé validera l'objet (ou le sujet) de la lettre le plus efficace, le plus accrocheur. <br />L'échantillon qui obtiendra le taux de clics le plus élevé (proportionnellement au taux d'ouverture de l'échantillon) validera la "Johnson Box" la plus accrocheuse. <br /><br /><span style="color: orange;"><i>Exemple :</i></span> <br />Supposons que je crée trois échantillons de 150 contacts chacun : échantillon N°1, N°2 et N°3 <br />Après envoi de mes différents essais (sujet des messages différents, Johnson Box différentes) de campagne sur mes échantillons, supposons que j'obtienne : <br />Un nombre d'ouvertures pour chaque échantillon qui est respectivement de : 84, 105 et 90 <br />Un nombre de clics pour chaque échantillon qui est respectivement de : 13, 15 et 13 <br />Je vais pouvoir déduire quelques taux de ces résultats : <br /><a href="/-ELDKjr02Pro/UFbmxpCU3VI/AAAAAAAAPQo/WR-bBNOOeYo/s1600/TesterCampagneT1.webp" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="313" src="/-ELDKjr02Pro/UFbmxpCU3VI/AAAAAAAAPQo/WR-bBNOOeYo/s640/TesterCampagneT1.webp" width="640" /></a><br /><br />Mes résultats décrits ci-dessus démontrent que si je veux m'assurer le maximum d'impact, j'ai tout intérêt à envoyer ma lettre en prenant "le sujet" de lettre utilisé pour mon échantillon N°2 et le contenu utilisé pour mon échantillon N°1. <br /><br /><b><span style="color: #444444;">Attention</span></b> : Lorsque vous lancerez l'envoi définitif de votre campagne d'email, n'oubliez pas d'exclure de la liste de diffusion, les sous-listes échantillons afin d'éviter une double réception de votre lettre. Pour cela, utilisez la fonction "Exclusion de listes" de la solution <a href="http://www.enews.fr/" target="_blank">ENEWS™</a>. <br /><br />Cordialement, <br /><br />Chantal Kermaïdic <br />Responsable Marketing ENEWS™altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-74006295759983437702012-03-28T20:04:00.001+02:002012-04-13T16:24:09.044+02:00Audit et optimisation MySQL 5<div class="separator" style="clear: both; text-align: center;"><a href="/-Cba-osoP-Z8/T3NJbseq07I/AAAAAAAAAIM/PtsSDD-RnDY/s1600/mysql5Audit.webp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="/-Cba-osoP-Z8/T3NJbseq07I/AAAAAAAAAIM/PtsSDD-RnDY/s1600/mysql5Audit.webp" /></a></div>Ca faisait un moment que je devais écrire un post sur cet excellent livre. Mais à chaque fois, je me trouve d'autres occupations. Profitant donc d'un peu de temps libre, voici mon avis sur ce livre destiné aux administrateurs.<br />Bon, il est vrai que le livre a été édité en mars 2010, avant l'acquisition de MySQL par ORACLE et que depuis, il a coulé beaucoup d'eau sous les ponts. Mais, il n'en demeure pas moins une excellente référence pour tous les administrateurs qui n'ont malheureusement pas le temps d'approfondir leur connaissance suite à une surcharge de travail.<br /><br />Ce que j'ai&nbsp;particulièrement&nbsp;apprécié dans ce livre c'est son positionnement. Enfin un livre qui répond aux questions qu'on se pose lorsque l'on doit auditer ou optimiser une base ou le schéma d'une base, lorsque l'on doit faire face à une situation d'urgence suite à un accroissement de requêtes lors d'un burst.<br /><br /><span style="color: #990000;">Chapitre 1</span>&nbsp;: Il est essentiellement consacré à la gestion des situations d'urgences. Il est bien évident, que toutes les&nbsp;situations&nbsp;ne peuvent pas être traitées, mais on sent le vécu et l'expérience des auteurs au travers des exemples et astuces qu'il nous prodigue. Cela a été très instructif. Même si je n'ai pas eu souvent de situations catastrophiques à gérer, c'est toujours&nbsp;intéressant&nbsp;de savoir comment réagir lorsqu'un imprévu se présente.<br /><br /><span style="color: #990000;">Chapitre 2</span>&nbsp;: Ce chapitre est consacré au choix de son (ses) serveur(s) pour l'hébergement de son instance de MySQL. Cette partie, même si elle décrit les grands axes permettant de faire ses propres choix, elle reste pour moi trop généraliste. J'aurai aimé voir apparaitre le traitement de cas concrets en terme de dimensionnement, de configuration système, de paramétrage spécifique du noyau, du paramétrage des différentes variables de MySQL. Mais bon, c'est déjà bien d'avoir abordé ce sujet dans un livre? Peut-être que la prochaine édition sera beaucoup plus prolixe sur ce sujet ?<br /><br /><span style="color: #990000;">Chapitre 3</span>&nbsp;: Enfin !! un livre qui ose aborder dans le détails les différents moteurs de stockage de MySQL. Historiquement, n'ayant pas besoin de transaction dans les applications que je développe, je me suis toujours contenté du moteur de stockage par défaut qui est MyISAM. Avec le temps, je me suis aussi habitué aux outils me permettant (<a href="http://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html" rel="nofollow" target="_blank">mysqlcheck</a>) de réparer ou de corriger mes bases. De plus (touchons du bois) à ce jour, je n'ai eu aucune raison valable et sérieuse d'en changer : <br /><ul><li>les performances sont très satisfaisantes,&nbsp;</li><li>j'ai pratiquement aucune erreur,&nbsp;</li><li>je n'ai jamais eu de pertes de données.</li></ul><div>Mais il était intéressant de voir quels étaient les différents moteurs de stockages et de pouvoir imaginer quel moteur choisir en fonction du type d'utilisation de l'application développée.&nbsp;</div><div><br /></div><div>A suivre...</div>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-41320228870695788082012-03-15T11:29:00.000+01:002012-09-18T17:01:18.351+02:00Tester sa campagne avant envoi (Part I)<b><span style="color: #444444;">L’une des étapes les plus importantes, et souvent négligée ou mal préparée dans la réalisation de votre campagne d’email marketing, est le test avant l’envoi. </span></b><br /><br />Alors que les tests seront très succincts dans le cadre d’une lettre au format « Texte », ils devront être très approfondis pour une lettre au format « html ». <br /><b><span style="color: #444444;">Je vous suggère d’établir dans ce second cas</span></b>, une checklist des différents points à tester en incluant au minimum les différentes erreurs souvent commises et listée ci-dessous, puis en adaptant cette liste au contenu de votre lettre. <br />Ce travail de préparation est loin d’être inutile et pourra être réutilisé pour vos campagnes suivantes. <br /><br />Vous devez impérativement tester le rendu de votre lettre depuis un ordinateur différent de celui sur lequel elle a été créée. Vous devez aussi le tester dans des environnements variés et ainsi, vérifier que l’apparence et le format correspondent à vos attentes. <br />Lorsque je parle d’environnements, cela signifie : visualiser votre lettre en utilisant différents navigateurs, en utilisant différents outils de messagerie, en utilisant différentes résolutions d’écran. <br /><br />Votre lettre peut avoir une apparence différente selon le navigateur utilisé, selon le gestionnaire de courrier utilisé et selon la version logicielle de ceux-ci. <br />On rencontre deux types de gestionnaire de courriers. Des messageries de type « webmail » accessibles à partir d’un navigateur, telles que : Hotmail, Yahoo, Gmail, Orange, Aol, Free, … et des gestionnaires de courrier installées sur l’ordinateur de votre destinataire tels que Outlook, Thunderbird, Lotus, …. <br /><b><span style="color: #444444;">Ne désespérez pas !</span></b> Pour vos premières lettres, vous devrez effectuer un bon nombre de tests, puis avec l’expérience, vous arriverez à identifier des comportements similaires ainsi que les points particuliers à valider selon les outils. Vous pourrez ainsi réduire votre panel de tests. <br />Il est bien sûr évident que vous ne pourrez pas tester de façon exhaustive tous les environnements utilisés par votre cible. A noter que la solution <a href="http://www.enews.fr/" target="_blank">ENEWS™</a>, vous permet d’estimer à partir de l’analyse de vos listes de diffusion, les types d’outil de messagerie les plus utilisés par vos lecteurs et ainsi d’orienter vos tests en conséquence. <br /><br /><u>Voici quelques défauts souvent constatés sur lesquels vous devrez être vigilant et qui doivent être contrôlés : </u><br /><br />1. Les images contenues dans votre lettre Selon qu’elles sont embarquées ou distantes (<span style="color: orange;">cf. notre dossier : Les images de votre lettre : distantes ou embarquées ?</span>), vérifiez qu’elles puissent s’afficher correctement. <br />Pour les images distantes (accessible via une url de type : http://www.ServeurDeMaSociete.com/MesImages/Image1.jpeg) contrôlez les points suivants : <br />- Les images sont présentes sur le site <br />- Les images sont accessibles <br />Pour les images embarquées (grâce à l’utilisation d’ENEWS™), vérifiez que : <br />- Les images sont correctement embarquées avec le message <br /><br />2. Les polices de caractères Tous les systèmes d’exploitation ne lisent pas les mêmes polices de caractères surtout dans le cas de polices spécifiques. Lors de la réalisation de la lettre, vous pouvez choisir une liste de polices de substitution. Si malgré cela, vous souhaitez utiliser des polices « exotiques », nous préconisons alors l’utilisation d’image pour ces parties de texte. Dans le cas de polices classiques (Arial, Verdana, Times, Courrier, …), préférez le format texte plutôt que image afin de minimiser le poids de votre lettre. <br /><br />3. Les résolutions d’écran <br />Lorsque vous créez votre message, vous avez la possibilité de dimensionner les différents éléments qui constituent votre lettre avec des tailles fixes ou proportionnelles à votre écran. <br />Dans le premier cas, les éléments de votre lettre seront tous placés identiquement quelle que soit la résolution de l’écran destinataire. Si la résolution de l’écran du lecteur est inférieure, il ne verra qu’une partie de la lettre et devra utiliser l’ascenseur de sa fenêtre pour voir le reste. Si au contraire, la résolution de l’écran du lecteur est supérieure, la lettre (entière) n’apparaîtra que sur une partie de celui-ci, et le rendu pourra être altéré. <br />Dans le second cas, quelle que soit la résolution, la lettre s’adaptera au format de l’écran. Mais attention aux décalages ! Le dimensionnement proportionnel des éléments d’une lettre peut réserver de mauvaises surprises. Votre lettre peut se déformer, des espaces vides peuvent se former : à tester !! <br /><br />4. Les liens présents dans la lettre <br />Testez tous les liens de votre lettre. Quelle désolation de cliquer sur un lien qui ne réagit pas ou qui vous ouvre une page d’erreur « 404, not found » ! Un oubli de ce type peut réduire à néant tout le bénéfice de votre campagne alors qu’il est si simple à tester et à corriger le cas échéant. Même les liens qui sont toujours présents dans vos lettres, tel que le lien de désinscription par exemple, ou les liens d’accès à certaines pages de votre site web doivent être testés. Les adresses d’accès à ces pages ont pu être modifiées depuis votre dernière campagne. Il peut y avoir une indisponibilité passagère ou ils peuvent tout simplement avoir été mal orthographiés dans votre lettre. Lorsque les liens font référence à des pages de votre site internet, avant de lancer votre campagne, assurez-vous que le serveur est bien accessible. L’un des gros avantages de l’emailing est la rapidité d’interactions des destinataires, il ne faut pas rater cette opportunité! <br /><br />5. Les fautes d’orthographe <br />Vous conviendrez comme moi, qu’il est plus important de focaliser l’attention de votre destinataire sur le contenu de la lettre plutôt que sur les fautes d’orthographe ou de grammaire. Essayez de les éviter. <br /><br />6. Encodage de votre lettre <br />Le type d’encodage html de votre lettre est très important. Selon l’encodage utilisé, les caractères contenus dans votre lettre vont pouvoir être interprétés ou pas par les navigateurs, et par conséquent, votre lettre va s’afficher chez le destinataire avec l’apparence souhaitée ou comme une succession de caractères indéchiffrables. Attention, l’encodage utilisé devra être compatible avec la langue de votre cible. <br /><br />7. Apparition des accents dans le sujet (l’objet) de la lettre <br />Méfiez-vous des accents ou des caractères spéciaux dans les sujets de lettres. Mal encodés, ils peuvent rendre l’objet de l’email illisible. Exemple :« =?iso-8859-1?Q?invitation : r=E9union pr=E9 - salon E ... » <br /><br />8. Personnalisation <br />Si vous souhaitez personnaliser votre message ou le sujet, pensez à vous assurer que les champs utilisés dans votre base de contacts sont bien renseignés. <br /><br />9. Charge du serveur distant <br />Votre lettre contient des liens ou des images distantes, assurez-vous que votre serveur soit capable de répondre aux sollicitations (tenir la charge). <br /><br /><br />Les défauts cités ci-dessus sont parmi les plus rencontrés. Ils peuvent facilement être évités par une phase de tests. Cette phase de tests peut être simplifiée par l’utilisation de la solution ENEWS™ qui vous aidera à valider votre lettre mais qui en plus vous évitera de tomber dans certains des pièges énumérés ci-dessus. <br /><br />Une lettre qui n’apparaît pas correctement peut très vite décourager votre destinataire. Il risque de la supprimer sans même en avoir pris connaissance, ou même le pousser à se désinscrire pour ne plus recevoir les suivantes !! <br />N’oubliez pas que votre lettre véhicule l’image de votre société. <br />Au delà de la performance apporté par ENEWS™, notre solution s’entoure d’une équipe expérimentée qui est à votre écoute et qui peut vous conseiller et vous accompagner. <br /><br />Cordialement, <br /><br />Chantal Kermaïdic <br />Responsable Marketing ENEWS™ altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-42433471642459008072012-02-29T00:00:00.000+01:002012-04-13T16:28:01.270+02:00Extension du plugin NAGIOS MailBoxHealth pour EXCHANGE 2010Dernièrement, j'ai été amené à mettre en place pour un client la supervision d'EXCHANGE 2010.<br />Pour cela, j'ai trouvé l'excellent plugin de Jeffrey ROBERTSON (<a href="http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Microsoft-Exchange/Exchange-2010/details" target="_blank">Accéder au plugin</a>). Malheureusement, les clients ayant des problèmes avec leurs propres spécificités, ce plugin ne pouvait les contenter en l'état.<br />En effet, lors de la supervision des points de montage des dossiers, certains montages n'étant pas utilisés (donc non montés), le plugin renvoyait une erreur, alors que touy fonctionné normalement.<br />Il a donc fallu se retrousser les manches et se mettre à faire du Powershell. Je sais, je ne suis pas vraiment un spécialiste de l'environnement Microsoft, mais à certains moments, il faut mettre ses grands principes de côté et passer à l'action afin de mener à bien sa mission :-)<br /><br />Finalement, le PowerShell c'est pas si mal. Le problème, comme pour tous nouveaux langages, c'est la syntaxe. J'ai quand même eu beaucoup de mal à trouver de l'information. A croire, que les gens sont avares d'informations pertinentes lorsqu'il s'agit de toucher à l'environnement Microsoft ???<br /><br />L'idée était de pouvoir passer en argument des&nbsp;paramètres&nbsp;permettant d'exclure du check des points de montage.<br />J'ai donc introduit dans le code, la passage des arguments suivants : <br /><ul><li>-A : Pour contrôler l'ensemble des points de montages</li><li>-X : Pour exclure du contrôle les points de montages passés en argument (une liste de noms séparés par des virgules)</li><li>-I : Pour exclure du contrôle la liste de mots clés passés en argument (plusieurs mots clés séparés par des virgules)</li></ul>Voici le code source du script :<br /><div style="margin-left: 20px;"><span style="color: blue; font-size: x-small;"><i></i></span><br /><span style="color: blue; font-size: x-small;"><i>function Help</i></span><br /><span style="color: blue; font-size: x-small;"><i>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "This script check the MailBox Health of Exchange 2010"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host ""</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "Options:"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "-A (The default)"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "<span class="Apple-tab-span" style="white-space: pre;"> </span>Check all Exchange Databases"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "-X"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "<span class="Apple-tab-span" style="white-space: pre;"> </span>Ignore the Exchange Databases indicated in arguments (list separeted by a comma)"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "-I"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "<span class="Apple-tab-span" style="white-space: pre;"> </span>Keyword expression to ignore the Exchange Databases"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>exit</i></span><br /><span style="color: blue; font-size: x-small;"><i>}</i></span><br /><span style="color: blue; font-size: x-small;"><i>function validateChecking</i></span><br /><span style="color: blue; font-size: x-small;"><i>{<span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>[string]$DataBaseName = $DataBase.Name ;</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($ExcludedDatabases.length -gt 0){</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>ForEach ($Exclude in $ExcludedDatabases)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($DataBaseName.CompareTo($Exclude) -eq 0)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>return $FALSE</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($ExcludedKeywordsDatabases.length -gt 0){</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>ForEach ($KeywordExclude in $ExcludedKeywordsDatabases)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($DataBaseName.Contains($KeywordExclude))</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>return $FALSE</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>return $TRUE</i></span><br /><span style="color: blue; font-size: x-small;"><i>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i>function checkDatabases</i></span><br /><span style="color: blue; font-size: x-small;"><i>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosStatus = "0"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = ""</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>ForEach ($DataBase in Get-MailboxDatabase) {<span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if (validateChecking)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>ForEach ($Status in Get-MailboxDatabaseCopyStatus -Identity $DataBase.Name) {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>switch ($Status.Status) {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Failed" {&nbsp;</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosStatus = "2"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosDescription -ne "") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + ", "</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + $Status.Name + " is " + $Status.Status</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Dismounted" {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosStatus = "2"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosDescription -ne "") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + ", "</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + $Status.Name + " is " + $Status.Status</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Resynchronizing" {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosStatus -ne "2") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosStatus = "1"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosDescription -ne "") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + ", "</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + $Status.Name + " is " + $Status.Status</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Suspended" {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosStatus -ne "2") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosStatus = "1"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosDescription -ne "") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + ", "</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + $Status.Name + " is " + $Status.Status</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Mounting" {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosStatus -ne "2") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosStatus = "1"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosDescription -ne "") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + ", "</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$NagiosDescription = $NagiosDescription + $Status.Name + " is " + $Status.Status</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Healthy" {}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"Mounted" {}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span># Output, what level should we tell our caller?</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($NagiosStatus -eq "2") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Write-Host "CRITICAL: " $NagiosDescription</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>} elseif ($NagiosStatus -eq "1") {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Write-Host "WARNING: " $NagiosDescription</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>} else {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Write-Host "OK: All Mailbox Databases are mounted and healthy."</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>exit $NagiosStatus</i></span><br /><span style="color: blue; font-size: x-small;"><i>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><br /></i></span><br /><span style="color: blue; font-size: x-small;"><i>$ArgCount = 0</i></span><br /><span style="color: blue; font-size: x-small;"><i>if (!$arg)</i></span><br /><span style="color: blue; font-size: x-small;"><i>{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>if ($args.length -gt 0){</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>While ($ArgCount -lt $args.length){</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>switch ($args[$ArgCount]){</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"-A"{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$ArgCount = ($ArgCount + 1)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}<span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"-X"{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$ExcludedDatabases = $args[($ArgCount+1)]</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$ArgCount = ($ArgCount + 2)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"-I"{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$ExcludedKeywordsDatabases = $args[($ArgCount+1)]</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$ArgCount = ($ArgCount + 2)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"-h"{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Help</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>"$" {</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>#Correcting the problem when haven't some argument</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>$ArgCount = ($ArgCount + 1)</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span></i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>default{</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "Invalid command."</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>write-host "$args"</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Help</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></span><br /><span style="color: blue; font-size: x-small;"><i>}</i></span><br /><span style="color: blue; font-size: x-small;"><i>checkDatabases</i></span></div><br />Bon, le script n'a peut-être pas été conçu dans les&nbsp;règles&nbsp;de l'art, mais j'ai du faire ce que j'ai pu avec les maigres connaissances que j'avais et le peu de temps qui m'était imparti. Ce script a été mis en place pour être utilisé avec NSClient++ côté serveur à superviser et avec un check_nrpe côté serveur de supervision.<br />Pour cela, il y a quelques modifications à apporter dans la configuration du serveur à superviser; dans le fichier&nbsp;NSCP.ini. Il faut savoir que ce fichier fonctionne par bloc et donc que même si vous avez l'impression d'avoir initialiser une variable dans un bloc et pas dans un autre, elle ne sera pas prise en compte.<br />Première modification dans le bloc&nbsp;[External Commands] :<br /><br /><ul><li>allow_nasty_meta_chars=1&nbsp;</li><li>allow_arguments=1</li></ul><br />&nbsp;Autre modification dans le bloc&nbsp;[Wrapped Scripts]<br /><br /><ul><li>check_mailbox_health_ps1=MailboxHealth.ps1 $ARG1$</li></ul>Il faut penser à relancer le process&nbsp;NSClient++ puis à tester côté serveur de supervision avec par exemple la commande :<br /><br /><ul><li>./check_nrpe -H hostname -t 30 -c check_mailbox_health_ps1 -a "-A"</li></ul>Voilà, pour mon client cela à bien fonctionné et ça était mis en production.<br />J'ai publié ces modification auprès de&nbsp;Jeffrey ROBERTSON, qui les a inclus dans la version du plugin que vous trouverez i<a href="http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Microsoft-Exchange/Exchange-2010/details" target="_blank">ci</a>.<br /><br />Si vous avez un souci de mise en oeuvre, n'hésitez pas à me poster votre question.altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-61726335044316721342011-06-03T11:22:00.000+02:002012-04-13T16:30:05.477+02:00Prise en compte de JKMount dans un VirtualHostRéceptionnant deux nouveaux serveurs DELL, j'installe comme à mon habitude, la dernière version d'OpenSuse que j'avais à ma disposition, la 11.3 que je m'empresse d'upgrader en 11.4 avec le super outil de gestion de packages "zypper".<br /><br />Je configure et j'installe les serveurs dans ma baie afin de pouvoir les utiliser pour l'hébergement d'application web. Ma configuration standard est la suivante :<br /><ul><li>Serveur http apache (version 2.2)</li><li>Serveur DNS bind (version 9.7)</li><li> Base de données MySQL (version 5.5.9)</li><li>JVM oracle 1.6.0_23</li><li>Serveur d'application APACHE/TOMCAT 7.0.3</li></ul>Et voilà, tous fonctionne correctement, il ne me reste plus qu'à configurer le connecteur mod_jk pour faire le lien entre le serveur http et tomcat. J'installe le rpm qui va bien (apache2-mod_jk-1.2.30-2.1.x86_64 sur OpenSuse).<br />Je configure correctement les fichiers de configurations d'Apache et de Tomcat (j'ai déjà fais ça plus d'une dizaine de fois) et je redémarre le tout.<br /><br />Patatrac.... j'ai un joli message d'apache avec une erreur 404... fichier introuvable. J'active le débug de mod_jk et j'obtiens les messages d'erreurs suivant :<br /><br /><i style="color: blue;">[Fri Jun 03 10:39:23.879 2011] [31199:140189304702720] [debug] jk_translate::mod_jk.c (3425): missing uri map for opencms8.naos.com:/opencms/opencms/system/login<br />[Fri Jun 03 10:39:23.879 2011] [31199:140189304702720] [debug] jk_map_to_storage::mod_jk.c (3585): missing uri map for opencms8.naos.com:/opencms/opencms/system/login<br />[Fri Jun 03 10:39:23.904 2011] [31199:140189304702720] [debug] jk_map_to_storage::mod_jk.c (3585): missing uri map for opencms8.naos.com:/error/HTTP_NOT_FOUND.html.var<br />[Fri Jun 03 10:39:23.905 2011] [31199:140189304702720] [debug] jk_map_to_storage::mod_jk.c (3585): missing uri map for opencms8.naos.com:/error/include/top.html<br />[Fri Jun 03 10:39:23.905 2011] [31199:140189304702720] [debug] jk_map_to_storage::mod_jk.c (3585): missing uri map for opencms8.naos.com:/error/include/bottom.html<br />[Fri Jun 03 10:39:23.905 2011] [31199:140189304702720] [debug] jk_map_to_storage::mod_jk.c (3585): missing uri map for opencms8.naos.com:/error/contact.html.var</i><br /><br />Heureusement qu'internet est là :-) Après une recherche (un peu longue) finalement je trouve la solution <a href="http://www.developpez.net/forums/d576270/java/serveurs-conteneurs-java-ee/tomcat/connecteur-tomcat-apache/">ici</a>. Sauf qu'après avoir regardé la documentation de <a href="http://tomcat.apache.org/connectors-doc/reference/apache.html">mod_jk</a>, ce n'est pas <b><span style="color: #990000;">JkMountCopy All</span></b> qu'il faut mettre dans le VirtualHost mais <b><span style="color: #990000;">JkMountCopy On</span></b>.<br /><br />Et voilà, le problème est résolu. Comme quoi, même après des dizaines voire des vingtaines d'installations, on a toujours des surprises et on apprend en permanence :-)altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-32982666564545805022011-01-04T17:31:00.000+01:002012-09-18T17:00:09.286+02:00Quel format pour votre lettre d'information ?Dans votre projet d'Emarketing vous êtes, ou peut-être l'avez-vous déjà été, amené à vous poser la question sur la forme et l'ergonomie du message que vous souhaitez diffuser. <br /><br />L'email est un support qui vous permet de diffuser des formats différents, du plus simplifié au plus complexe. Vous pouvez opter pour l'un d'entre eux ou bien les utiliser simultanément. Nous allons ici les passer en revue en précisant à chaque fois les avantages et les inconvénients. Vous serez alors à même de choisir le format de votre lettre d'information en conjuguant les possibilités techniques à vos objectifs de communication. <br /><br />. Le format Texte <br /><br />C'est le format standard accessible depuis toutes les plates-formes informatiques. Par conséquent, vous êtes certain que vos destinataires pourront lire votre information. Ce format présente également l'avantage d'être très léger (en Ko), sur un support où le poids des données est une caractéristique technique de première importance. Même si les connexions haut débit sont courantes, ne négligez pas le fait que beaucoup d'internautes se connectent encore avec un modem. La mise en page de votre information ne nécessite aucune compétence particulière. N'importe quel éditeur de texte (type notePad) fera l'affaire ! <br /><br />En contre partie, le format Texte ne vous permet pas de personnaliser votre lettre d'information. Votre contenu est brut et n'est pas rehausser par vos visuels (images, vidéo, sons). <br /><br /><br /><br />. Le format HTML <br /><br />C'est le format utilisé dans la programmation des sites Internet. Dans votre lettre d'information, il vous permet d'agrémenter votre contenu de visuels et de véhiculer l'image de votre entreprise à travers vos couleurs, votre logo, etc?. Un disquaire, peut par exemple insérer un fichier de type "son" qui s'exécute à la lecture du message électronique. Le HTML vous permet d'intégrer dans votre lettre des éléments qui font partie des technologies "Rich Media" (ex : animations Shockwave, séquence Vidéo?). <br /><br />Avec le format HTML, votre communication prend de la valeur et votre impact sera bien meilleur. Aussi, nous ne devons pas oublier que la lecture à l'écran est plus ardue et pénible. Les visuels cassent la monotonie d'un texte aussi cours soit-il et surtout soutiennent un contenu à travers du graphisme spécialement étudié pour répondre aux objectifs de communication. <br /><br />Mais attention aux pièges, parce qu'une mauvaise utilisation de ce format peut rendre votre lettre inaccessible. Aussi la mise en page dans ce format nécessitera l'intervention de spécialistes. <br /><br />Le principal inconvénient du HTML est qu'il n'est pas interprété de la même façon par toutes les plates-formes et certains gestionnaires de courrier ne sont pas compatibles du tout. (Exemple : les versions 3 de Netscape Messenger et Internet Explorer, le gestionnaire d'AOL, Lotus, ?). <br /><br />Pour ce qui concerne l'interprétation, les disparités restent souvent mineures. Par exemple, un paragraphe est justifié avec l'un mais pas l'autre, il peut exister des décalages dans l?un mais pas dans l'autre, etc? Si ces problèmes peuvent excéder un webdesigner, ils n'ont pas de conséquences majeures sur la forme et le contenu. <br /><br />En revanche, vos clients qui ne disposent pas d'un gestionnaire de courrier compatible ne prendront pas connaissance de votre information. Vous avez peut-être déjà reçu des courriers aux codes cabalistiques et illisibles (parfois même effrayants !) : c'est ce que vos clients et prospects DANS CE CAS, recevront de votre part ! <br /><br /><br />- - - - - - - - - - - - - - - - - - - - <br /><br />Heureusement, il existe des solutions pour pallier aux inconvénients et faire fonctionner pleinement le couple marketing et technologie. En effet, les langages de programmation à la disposition des spécialistes permettent aujourd'hui d'envoyer votre lettre d'information dans ces deux formats simultanément. Concrètement, il s'agit de détecter la version de la messagerie électronique et de lui adresser le format adéquate. <br /><br />Vous évitez ainsi les désagréments liés à la plate-forme côté client. Votre information touche sa cible quelque soit son équipement ! Et si vous optez ou avez déjà choisi de communiquer par email, l'un de vos objectifs n'est-il pas d'être lu par le plus grand nombre ? <br /><br /><br /><br />- - - - - - - - - - - - - - - - - - - - <br /><br />Chantal KERMAIDIC<br />NAOS TECHNOLOGIESaltohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-73406255813607732802010-03-23T15:48:00.000+01:002012-09-18T12:02:26.649+02:00Quand envoyer sa campagne d'emailing ?<span class="text1" style="font-weight: bold;"><span style="color: #444444;">B2B ou B2C, influencez l'impact de votre campagne par le choix du jour et de l'heure de diffusion. </span><br /><br /> <u>80% des ouvertures et des clics ont lieu dans les 24 à 48 heures</u> </span><span class="text1">qui suivent l'envoi de la campagne. La programmation du jour et de l'heure de départ de la campagne est par conséquent un facteur déterminant pour son succès</span> <br /><br /><a href="http://www.blogger.com/blogger.g?blogID=6427792758786404163" id="Paragraphe1" name="Paragraphe1"></a> <span class="text2" style="font-weight: bold;">Avec l'emailing, vous maîtrisez dans le temps l'action et la réaction de vos destinataires.</span> <br />L'emailing lèvent beaucoup d'incertitudes. Contrairement à la plupart des autres médias de diffusion, vous pouvez contrôler de façon précise à partir de quel jour et de quelle heure votre destinataire va pouvoir consulter votre offre ou votre lettre d'information. <br />Contrairement à un appel téléphonique, votre message ne dérangera pas votre contact ,car celui-ci le consultera au moment qu'il aura lui-même choisi et donc pas au milieu d'une réunion ou de l'exécution d'une tâche. Accompagné d' <a href="http://www.enews.fr/" target="_blank"><span class="text2">ENEWS™</span></a>, vous pourrez savoir sans jamais avoir eu de contact direct avec votre destinataire à quel moment il aura consulté votre message. <br />L'emailing accroît la réactivité de la cible. L'emailing permet par l'insertion de formulaire pré-rempli de répondre très rapidement à une offre. La réponse est souvent immédiate et selon l'offre, il suffit bien souvent de cliquer sur un bouton, de cocher une ou deux cases ou de remplir un ou deux champs. Ces actions sont immédiates. <br /><br /><a href="http://www.blogger.com/blogger.g?blogID=6427792758786404163" id="Paragraphe2" name="Paragraphe2"></a> <span class="text2" style="font-weight: bold;">Votre lettre d'information s'adresse à des professionnels.</span> L'indice de pénétration sera meilleur (taux d'ouvertures plus élevé, taux de clics plus important) en faisant partir vos campagnes en début de semaine (lundi après-midi, mardi ou mercredi). Dans ce contexte, l'indice de pénétration concerne non seulement l'indice de consultation (ouverture, clic sur un lien) mais aussi l'indice de réactivité. Un envoi en début de semaine favorisera ce dernier. En effet, s'il est intéressé par votre proposition, votre destinataire pourra l'intégrer dans son planning de la semaine et y donner suite plus rapidement. <br />Quel que soit le type de message que vous envoyez, quel que soit le sujet de votre lettre, quel que soit votre cible, <span style="font-weight: bold;">plus de 80% de vos lecteurs consulteront votre lettre dans les 48h</span> (jours ouvrés) qui suivent son envoi. Les deux graphismes ci-dessous l'illustrent. <br /><br /><table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 100%px;" summary=""><tbody><tr><td><img _fcksavedurl="/opencms/opencms/sites/enews/old/Images/envoiDebSemaine300.gif" alt="" height="145" src="http://opencms7:8080/opencms/opencms/sites/enews/old/Images/envoiDebSemaine300.gif" width="300" /></td><td><img _fcksavedurl="/opencms/opencms/sites/enews/old/Images/envoiFinSemaine300.gif" alt="" height="142" src="http://opencms7:8080/opencms/opencms/sites/enews/old/Images/envoiFinSemaine300.gif" width="300" /></td></tr><tr><td><span style="text-decoration: underline;">&nbsp;Illustration d'une campagne destinée à des professionnels envoyée un mardi en fin de matinée</span></td><td>&nbsp; <span style="text-decoration: underline;">Illustration d'une campagne destinée à des professionnels envoyée un jeudi après-midi</span></td></tr></tbody></table><br /><span class="text2"><br /></span> <a href="http://www.blogger.com/blogger.g?blogID=6427792758786404163" id="Paragraphe3" name="Paragraphe3"></a> <span class="text2"><span style="font-weight: bold;">Votre lettre d'information s'adresse à des consommateurs.</span></span> Les règles ne sont pas aussi claires. Plusieurs facteurs rentrent en ligne de compte. Tout comme dans le cas de professionnels ,les taux d'ouvertures les plus importants ont lieu dans les 48h qui suivent l'envoi de la campagne, mais les 72h suivantes présentes aussi des taux non négligeables. Le comportement de la cible par rapport à la consultation de votre message reste similaire que l'envoi se fasse en début de semaine ou en fin de semaine. A noter, tout de même, une baisse le dimanche. Les deux graphismes ci-dessous illustrent ces propos. <br /><table align="" border="0" cellpadding="1" cellspacing="1" style="width: 100%px;" summary=""><tbody><tr><td><img _fcksavedurl="/opencms/opencms/sites/enews/old/Images/consoDebSemaine.gif" alt="" height="125" src="http://opencms7:8080/opencms/opencms/sites/enews/old/Images/consoDebSemaine.gif" width="300" /></td><td><img _fcksavedurl="/opencms/opencms/sites/enews/old/Images/consoFinSem.gif" alt="" height="133" src="http://opencms7:8080/opencms/opencms/sites/enews/old/Images/consoFinSem.gif" width="300" /></td></tr><tr><td><span style="text-decoration: underline;">Illustration d'une campagne destinée à des consommateurs envoyée un mardi en fin de matinée</span></td><td><span style="text-decoration: underline;">Illustration d'une campagne</span> <span style="text-decoration: underline;">destinée à des consommateurs</span> <span style="text-decoration: underline;">envoyée un jeudi en fin de matinée</span></td></tr></tbody></table><br /><br />Avant de décider de la date et de l'heure d'envoi de votre campagne, vous devrez définir par rapport au profil de votre cible et au contenu de votre lettre, quel est le meilleur moment pour obtenir une réponse favorable à votre offre. <br />Voici quelques questions qui peuvent vous aider à programmer votre campagne : <br />• A quel tranche d'âge appartiennent mes contacts ? <br />• Exercent-ils une activité professionnelle ? sont-ils étudiants ? <br />• A quel catégorie socio-profesionnelle appartiennent-ils ? <br /><span class="text1"><span style="font-weight: bold;">»</span></span> Vous allez ainsi définir si votre lettre pourra être consultée dans la journée ou seulement le soir <br /><br />• Le contenu de votre lettre concerne t-elle un acte d'achat ? <br />• Si oui, cet achat peut-il se faire 24h/24, 7j/7 ou seulement pendant des heures d'ouverture <br />• Le contenu de votre lettre concerne t-il des activités à effectuer durant le week end ou plutôt en semaine ... <br /><span class="text1" style="font-weight: bold;">»</span> Vous allez ainsi pouvoir définir le jour de consultation de votre lettre le plus approprié <br /><br /><span class="text2"><a href="http://www.enews.fr/" target="_blank">ENEWS™</a> </span>vous aide à mettre en place votre stratégie d'envoi de campagnes. <a href="http://www.enews.fr/" target="_blank">ENEWS™</a> vous fournit une modélisation graphique des résultats de vos campagnes, vous permettant en un clin d'oeil d'évaluer l'impact de votre campagne et l'orientation à prendre pour les prochaines campagnes.&nbsp; <br /><br /><img _fcksavedurl="/opencms/opencms/sites/enews/old/Images/statistique-heures.gif" alt="" height="194" src="http://opencms7:8080/opencms/opencms/sites/enews/old/Images/statistique-heures.gif" width="600" />altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-47264013276064760802010-03-23T11:08:00.013+01:002012-04-13T16:32:36.715+02:00Gestion des catégories dans OpenCMS<span style="font-family: Georgia,'Times New Roman',serif;">Depuis la version 7 d'<a href="http://www.opencms.org/">OpenCMS</a>, il est possible de définir et d'associer des catégories à des ressources. </span><span style="font-family: Georgia,'Times New Roman',serif;">Je m'explique !!</span><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iEBNqEbeI/AAAAAAAAAFg/IdyfqevcE0Q/s1600-h/ishot-44.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="/_D_cIZ-Ry7_8/S6iEBNqEbeI/AAAAAAAAAFg/IdyfqevcE0Q/s640/ishot-44.webp" width="577" /></a></div></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 1</td></tr></tbody></table><div style="text-align: justify;">Lorsque l'on doit gérer par exemple des bibliothèques d'images volumineuses, assez rapidement nous vient l'envie de créer des sous-répertoires afin de classifier les images par catégories. Malheureusement, en procédant de cette manière, on perd le bénéficie d'avoir tous les&nbsp; ressources images situées dans un seul répertoire et cela nous oblige à gérer plusieurs bibliothèques. Ce qui n'est pas très pratique. </div><blockquote><div style="background-color: orange; text-align: justify;"><span style="font-size: large;">La solution est de créer des catégories et de les assigner aux ressources souhaitées. </span></div></blockquote><div style="text-align: justify;">Pour ajouter une catégorie, il suffit de créer une ressource de type répertoire dans le système de fichier suivant :<br /><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iHuxV4h4I/AAAAAAAAAFo/iNAgK5WbHiM/s1600-h/ishot-46.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="68" src="/_D_cIZ-Ry7_8/S6iHuxV4h4I/AAAAAAAAAFo/iNAgK5WbHiM/s640/ishot-46.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 2</td></tr></tbody></table>Il est important de noter que c'est le titre des catégories qui apparaît dans les boîtes de dialogue d'OpenCMS :<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iIWwAfukI/AAAAAAAAAFs/mYH_h2uvgvU/s1600-h/ishot-47.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="236" src="/_D_cIZ-Ry7_8/S6iIWwAfukI/AAAAAAAAAFs/mYH_h2uvgvU/s640/ishot-47.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 3</td></tr></tbody></table>Une fois créée, pour assigner une catégorie à une ressource il suffit de se positionner sur la ressource et d'accéder à la fonction "Assigner les catégories" :</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iJHnj3_SI/AAAAAAAAAFw/OKOeirVILrM/s1600-h/ishot-48.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="265" src="/_D_cIZ-Ry7_8/S6iJHnj3_SI/AAAAAAAAAFw/OKOeirVILrM/s640/ishot-48.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 4</td></tr></tbody></table><div style="text-align: justify;">Ce qui nous envoit vers la Figure 3. Il suffit ensuite d'assigner une ou plusieurs catégories en cliquant sur le petit bouton <img align="absmiddle" border="0" hspace="1" src="/_D_cIZ-Ry7_8/S6iL1vm_xCI/AAAAAAAAAF0/Wo7pz414Qj4/s1600/add.webp" vspace="1" /> de la catégorie et de retourner à la vue "Explorateur".<br /><br />A présent, lorsque l'on essaie d'utiliser une image dans des contenues structurées d'OpenCMS, on peut accéder aux ressources par catégorie :<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iNuOHktEI/AAAAAAAAAF4/tldfml4E8qY/s1600-h/ishot-49.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="104" src="/_D_cIZ-Ry7_8/S6iNuOHktEI/AAAAAAAAAF4/tldfml4E8qY/s640/ishot-49.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 5</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iO6vDtpcI/AAAAAAAAAF8/q3-EcDmLJ9M/s1600-h/ishot-51.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="632" src="/_D_cIZ-Ry7_8/S6iO6vDtpcI/AAAAAAAAAF8/q3-EcDmLJ9M/s640/ishot-51.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 6 : Visualisation de la bibliothèque d'images</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iPJCyj4CI/AAAAAAAAAGA/cSSs2lcRYT4/s1600-h/ishot-52.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="162" src="/_D_cIZ-Ry7_8/S6iPJCyj4CI/AAAAAAAAAGA/cSSs2lcRYT4/s640/ishot-52.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 7 : Liste des catégories</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iPh3zWLKI/AAAAAAAAAGE/XiFzMouBA98/s1600-h/ishot-53.webp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="222" src="/_D_cIZ-Ry7_8/S6iPh3zWLKI/AAAAAAAAAGE/XiFzMouBA98/s640/ishot-53.webp" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 8 : Visualisation des images dans la catégorie sélectionnée</td></tr></tbody></table>Et voilà le travail, pas mal non ?<br />Bon le problème c'est qu'en ajoutant des catégories dans la ressource<b style="background-color: white; color: black;"> </b><span style="background-color: orange; color: black;">/</span><span style="background-color: orange; color: black;">system/categories</span>, nous allons devoir gérer les permissions, ce qui rapidement devient laborieux lorsque l'on gére plusieurs sites.<br />Mais heureusement que les développeurs d'<a href="http://www.opencms.org/">OpenCMS</a> y ont pensé !!!<br /><div class="separator" style="clear: both; text-align: center;"><a href="/_D_cIZ-Ry7_8/S6iRD8bcgCI/AAAAAAAAAGI/GlLJsaToe-A/s1600-h/ishot-54.webp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="/_D_cIZ-Ry7_8/S6iRD8bcgCI/AAAAAAAAAGI/GlLJsaToe-A/s1600/ishot-54.webp" /></a></div>En fait, l'astuce est de créer dans le répertoire d'un site la ressource répertoire ayant pour nom "<span style="background-color: orange;">_categories</span>", puis de procéder comme précédemment pour ajouter des catégories. L'avantage de cette méthode est que les catégories ainsi créées héritent des droits du répertoire parent. Donc les permissions des catégories sont gérées par&nbsp; la définition des droits lors de la mise en place du site. Ce qui permet de rationaliser la gestion des catégories dans OpenCMS.<br /><br /><br /><span style="color: #76a5af; font-size: large;">Pour conclure :</span><br />Il me reste maintenant à trouver une moyen rapide et simple d'associer des ressources à une ou plusieurs catégories autrement que d'associer les catégories ressources par ressources.<br />Maintenant, cette fonctionnalité rend énormément de service pour la gestion des bibliothèques dans OpenCMS.</div>altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-92009532755972637132010-03-18T18:43:00.013+01:002012-04-13T16:33:30.470+02:00Comment écrire du texte verticalement avec du CSS<style type="text/css">div.verticaltext { color:#333; writing-mode:tb-rl; -webkit-transform:rotate(270deg); -moz-transform:rotate(270deg); white-space:nowrap; border:0px solid red; display:block; text-align:left; width:180px; height:20px; text-shadow: 0px 0px 1px #333; font-family: Arial, Verdana, Helvetica, sans-serif; font-size:18px; font-weight:normal; } </style><br /><div class="verticaltext">Texte vertical<br /><br />Ça fonctionne !!!</div><br /><br /><div style="display: block; margin-left: 20px;"><div style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><br /><br /><br /><div style="text-align: justify;">Petit problème lors de la réalisation de la nouvelle version de notre site NAOS: <i style="color: #cc0000;">Comment écrire du texte verticalement avec du CSS afin d'éviter d'avoir à faire des images pour tous les textes ?</i></div></div><div style="text-align: justify;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Après une petite recherche sur le net, j'ai trouvé quelques liens assez intéressants. Pour faire rapide voici un exemple de solution :</span></div><div style="color: #999999; font-family: &quot;Trebuchet MS&quot;,sans-serif;">.verticaltext {<br />&nbsp;&nbsp;&nbsp; color:#333;<br />&nbsp;&nbsp;&nbsp; writing-mode:tb-rl;<br />&nbsp;&nbsp;&nbsp; -webkit-transform:rotate(270deg);<br />&nbsp;&nbsp;&nbsp; -moz-transform:rotate(270deg);<br />&nbsp;&nbsp;&nbsp; white-space:nowrap;<br />&nbsp;&nbsp;&nbsp; display:block;<br />&nbsp;&nbsp;&nbsp; bottom:0;<br />&nbsp;&nbsp;&nbsp; width:20px;<br />&nbsp;&nbsp;&nbsp; height:20px;<br />&nbsp;&nbsp;&nbsp; text-shadow: 0px 0px 1px #333;<br />&nbsp;&nbsp;&nbsp; font-family: Arial, Verdana, Helvetica, sans-serif;<br />&nbsp;&nbsp;&nbsp; font-size:14px;<br />&nbsp;&nbsp;&nbsp; font-weight:normal;<br />}</div><br /><div style="text-align: justify;">Alors, j'ai testé sur <span style="background-color: #d9ead3;">Mac OSX avec Safari, FF et Chrome</span> ça fonctionne, <span style="background-color: #ea9999;">mais pas avec Camino et Opera (version 10)</span>.<br />Ça marche sur <span style="background-color: #d9ead3;">Window XP, avec IE 7, FF, Safari et Chrome</span>.<span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">&nbsp;</span><br /><br /><div style="background-color: #f9cb9c; color: black;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Par contre sur IE, pour arriver à mettre le texte dans le sens ou je voulais, j'ai ajouté dans la feuille de style l'élément suivant : filter:flipH() flipV();</span></div><br /><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Il me reste juste à faire des tests de positionnement...</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Voici les liens intéressant pour plus d'informations sur le sujet :</div><div style="text-align: justify;"><a href="http://scottgale.com/blog/css-vertical-text/2010/03/01/">Scott GALE</a><br /><a href="http://www.thecssninja.com/css/real-text-rotation-with-css">The CSS Ninja</a><br /><a href="http://snook.ca/archives/html_and_css/css-text-rotation">Jonathan SNOOK</a></div><div style="text-align: justify;"><br /></div></div>altohttp://www.blogger.com/profile/00913401855520268441[email protected]3tag:blogger.com,1999:blog-6427792758786404163.post-79423938172759095962010-03-03T14:02:00.002+01:002012-04-13T16:39:19.078+02:00Comment associer une extension à une application sur OSXIl m'arrive régulièrement de vouloir ouvrir un type de fichier avec une extension spécifique (.doc par exemple) avec une autre application que celle prévue par défaut sur OS X. J'ai enfin trouvé récemment comment faire et je souhaitais partager cette petite information qui n'est pas triviale à trouver.<br /><br />Click droit (ou POMME I) sur le fichier concerné pour <span style="background-color: orange;">"Lire les informations"</span> :<br /><img alt="" height="320" src="/images/image_1_03MARS2010.webp" width="286" /><br /><br />Puis choisir l'application à associer à ce fichier :<br /><img alt="" height="269" src="/images/image_2_03MARS2010.webp" width="320" /><br /><br />Ensuite il suffit de cliquer sur le bouton <span style="background-color: orange;">"Tout modifier"</span> pour que ça soit pris en compte pour tous les fichiers ayant la même extensions :<br /><img alt="" height="227" src="/images/image_3_03MARS2010.webp" width="320" /><br /><br />Et voilà le travail. Un fois que l'on sait, c'est simple :-)altohttp://www.blogger.com/profile/00913401855520268441[email protected]1tag:blogger.com,1999:blog-6427792758786404163.post-86447025910996784372010-01-22T15:43:00.005+01:002010-02-07T17:27:30.332+01:00Mes débuts avec OpenCMS<div class="separator" style="clear: both; text-align: center;"><a href="http://www.opencms.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 2px; margin-right: 1em;"><img border="0" hspace="0" src="/_D_cIZ-Ry7_8/S27ZBa-YahI/AAAAAAAAAFI/W6ctSHHcQqI/s320/logo_opencms_150.webp" vspace="4" /></a></div>J'ai découvert <a href="http://www.opencms.org/">OpenCMS</a> en <b>2004</b>. Je cherchais pour mes clients une application de gestion de contenus (CMS) en OpenSource et écrite en Java/JEE. <br />Pourquoi cette contrainte alors que de nombreuse solution en PHP existaient ? <br />Simplement parce que je maitrisais assez bien l'installation d'application Java et surtout j'étais beaucoup plus compétent pour diagnostiquer ou pour faire évoluer une solution qui utilisait cette technologie. A cette époque, très peu d'application OpenSource étaient écrites en Java. Le PHP était le langage dominant dans l'OpenSource car beaucoup plus souple, beaucoup plus accessible et surtout le PHP disposait d'une communauté beaucoup plus prolixe (ce qui est toujours le cas aujourd'hui !!).<br />Je découvre donc OpenCMS, solution développée par la société allemande <a href="http://www.alkacon.com/">ALKACON</a>. Rapidement, j'ai été séduit par cette application. L'installation sur un serveur d'application <a href="http://tomcat.apache.org/">TOMCAT</a> avec une base de données <a href="http://www.mysql.com/">MySQL</a>, de la <a href="http://www.opencms.org/en/news/oldnews_355.html">version 5.0</a> s'effectue sans trop de difficulté.<br />Par contre, l'apprentissage fut très long et assez fastidieux. Très peu ou pas de documentation, m'obligeant à fouiller dans les antres du code source pour comprendre et trouver les informations nécessaires. Voyant quand même une réelle opportunité, j'ai persévéré dans l'utilisation de cette l'application.<br /><br /><b>2006</b> voit la sortie de la <a href="http://www.opencms.org/en/news/oldnews_892.html">version 6.0</a>. Grâce au progrès et aux améliorations des performances des machines, des serveurs et des outils de développements, la version 6.0 (en totale rupture avec la version 5.0) fût une véritable révolution pour la communauté OpenCMS. L'approche était (et est toujours) vraiment intéressante. La gestion des modèles au travers de jsp et de xml permettait de mettre en place et de maintenir des sites internets avec une grande facilité et une simplicité déconcertante.<br /><br />Pour faire rapide, OpenCMS permet de gérer du contenu structuré et du contenu non structuré:<br /><ul><li>Le contenu structuré et un contenu qui peut être décrit et balisé par des champs. Par exemple, un évènement, une nouvelle, une FAQ,...&nbsp;</li><li>Le contenu non structuré est un contenu que l'on ne peut pas baliser.</li></ul>La documentation s'étoffe un peu mais est toujours aussi inaccessible. Par contre, cette version intègre pas mal d'exemple sur lesquels on peut s'appuyer pour découvrir les fonctionnalités avancées de la solution. Malgré ses innombrables avantages, la solution reste assez confidentielle en France, et mes activités annexes ne me permettent malheureusement pas d'évangéliser le marché Français.<br /><br /><b>Aujourd'hui</b>, nous en sommes à la <a href="http://www.opencms.org/en/news/100119_v752_available.html">version 7.5.2</a>. Cette version a amené son lot de nouvelles fonctionnalités, de stabilité et de performance. J'investis pas mal de mon temps actuellement pour promouvoir cette solution. Je pense qu'aujourd'hui le marché est un peu plus mur. Les entreprises (grandes ou petites) ont des besoins grandissant dans la gestion de leurs contenus et documents et je pense qu'OpenCMS a une carte à jouer. J'ambitionne de pouvoir jouer un rôle prépondérant dans sa promotion sur le territoire Français.<br /><br />Dans une prochain billet, je vous présenterai plus en détail les avantages de cette solution. <br />Merci d'avoir pris un peu de votre temps pour lire ce petit billet et à très bientôt.altohttp://www.blogger.com/profile/00913401855520268441[email protected]0tag:blogger.com,1999:blog-6427792758786404163.post-10904831107249143192010-01-18T12:22:00.002+01:002012-09-18T12:05:28.401+02:00L'emailing : le media bidirectionnelLa particularité de l'emailing est non seulement de permettre la diffusion de votre information vers une liste de destinataires <b><span style="color: #444444;">mais aussi de recueillir</span></b> les informations conscientes ou inconscientes, fournies par vos contacts.<br />L'emailing vous permet de <b><span style="color: #444444;">diffuser de l'information en temps réel</span></b> dans n'importe quel pays en utilisant un minimum de ressources.<br />Les campagnes de communication par email demandent <b><span style="color: #444444;">moins de temps de réalisation et le cycle de vente est raccourci</span></b>. Les barrières d'une communication à l'international s'effondrent : plus de décalage horaire, plus de coût supplémentaire, plus de délai d'acheminement. <br />Avec l'emailing, la réception du message est simultanée à l'envoi ainsi que souvent, la réponse de votre contact. Votre campagne est à peine partie que vos premiers résultats s'affichent déjà.<br /><br /><a href="http://www.enews.fr/">ENEWS™</a> vous permet de visualiser en temps réels les réactions de vos interlocuteurs. Vous avez accès à des données brutes (quantité d'ouvertures, de clics, qui, ...) mais aussi des données pré-analysées par l'application qui vous transforme vos résultats en tableaux et graphiques.<br />L'emailing vous permet de choisir avec précision, le jour et l'heure de consultation de votre message. (je vous invite à consulter notre dossier " Quand envoyer sa campagne ? " ).<br /><br />Avec l'emailing, les frontières n'existent plus. Rien ne change dans votre diffusion que votre destinataire se trouve dans le même pays que vous ou ailleurs. La communication se fait dans les mêmes conditions qu'une communication locale et sans coût complémentaire.<br />La solution d'emailing <a href="http://www.enews.fr/">ENEWS™</a> vous permet d'intégrer dans la programmation de l'envoi de vos campagnes, le décalage horaire de vos destinataires.<br /><br />Avec l'emailing vous créez une campagne de communication avec un minimum de ressources. Une fois votre lettre réalisée, votre campagne est pratiquement terminée. Vous n'avez pas besoin de ressources humaines ou mécaniques pour mettre sous enveloppe et affranchir vos courriers. Vous n'avez pas besoin de ressources humaines pour effectuer des appels téléphoniques, . . .<br />Vous n'avez qu'à programmer l'envoi depuis les menus de votre application (<a href="http://www.enews.fr/">ENEWS™</a>).<br />De plus en utilisant la solution <a href="http://www.enews.fr/"> </a><a href="http://www.enews.fr/">ENEWS™</a>, ceux sont nos serveurs qui travaillent pendant l'envoi de votre campagne. Par conséquent, vous pouvez continuer à utiliser votre ordinateur de façon transparente sans que ses ressources soient réduites.<br /><br /><br />L'emailing est précieux par les informations qu'il vous apporte. L'emailing favorise la réactivité de votre lecteur. <br />A réception de votre lettre, le destinataire va vous fournir des informations de manière volontaire ainsi que de manière involontaire. <br /><br /><u>L'emailing : recueil d'informations volontaires: </u><br />L'objet de votre lettre concerne une invitation à un évènement, une offre spéciale, un sondage, une demande d'information, une inscription, . . .<br />Vous pouvez intégrer un formulaire dans votre lettre. Ce formulaire peut être placé directement dans le contenu de la lettre ou accessible depuis un lien externe. Ce type de formulaire rend la réaction de votre interlocuteur encore plus aisée. Le retour par formulaire vous permet de mieux cadrer les informations que vous souhaitez obtenir.<br /><br />De plus, <a href="http://www.enews.fr/">ENEWS™</a> vous permet de pré-remplir le formulaire avec les données déjà présentes dans votre base. Premier avantage : le lecteur n'a qu'à compléter les champs non renseignés ou éventuellement modifier certains champs, ce qui simplifie encore plus son action. Il va y passer moins de temps et par conséquent pourra y répondre de façon plus impulsive.. Autre avantage : Le couplage de votre base avec le formulaire permet de remplir automatiquement votre base avec les nouvelles données complétées par votre contact. Aucune intervention manuelle n'est nécessaire. De plus, selon les choix de votre contact, il peut être inscrit automatiquement à une liste de diffusion particulière.<br /><br />L'emailing : recueil d'informations involontaires : <br />Grâce à l'emailing, votre destinataire va malgré lui vous fournir des informations sur ses centres d'intérêts. En effet, le tracking vous permet d'identifier avec précisions pour chaque lien présent dans votre lettre, les contacts qui se sont intéressés à ce sujet ou à ce produit, les contacts qui sont allés sur telle page de votre site depuis votre lettre, ...<br /><br />Avec <a href="http://www.enews.fr/"> </a> <a href="http://www.enews.fr/">ENEWS™</a> vous allez pouvoir extraire par lien, la liste des contacts qui auront cliqués sur ce lien, mais aussi connaître pour un contact donné, les lettres et les liens qu'il aura consulté.<br />D'autres retours sont aussi intéressants pour le suivi de vos contacts : des changements d'adresse, des erreurs d'adresse (erreur de format ou adresse invalide), des demandes de désinscriptions.<br /><a href="http://www.enews.fr/">ENEWS™</a> met à jour de façon automatique les adresses électronique erronées et les désinscriptions dans votre base de contacts. Cependant, vous pouvez à tout moment consulter ou extraire l'une ou l'autre de ces deux listes selon différents critères.<br /><br />Avec toutes ces informations obtenues sur le comportement du consommateur, l'emailing vous permet sans coût complémentaire d'établir votre stratégie produit, marketing et commerciale. CKhttp://www.blogger.com/profile/01802521298438729113[email protected]0