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

<channel>
	<title>Le blog de Michauko</title>
	<atom:link href="http://michauko.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://michauko.org/blog</link>
	<description>Si tu ne comprends pas le titre de l&#039;article, passe ton chemin</description>
	<lastBuildDate>Wed, 15 May 2013 13:57:27 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Rien à voir avec d&#8217;habitude : un S3 qui freeze tout le temps</title>
		<link>http://michauko.org/blog/rien-a-voir-avec-dhabitude-un-s3-qui-freeze-tout-le-temps-1395/</link>
		<comments>http://michauko.org/blog/rien-a-voir-avec-dhabitude-un-s3-qui-freeze-tout-le-temps-1395/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 14:18:34 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[hors sujet]]></category>
		<category><![CDATA[korben.info]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Samsung]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1395</guid>
		<description><![CDATA[Et voilà, depuis ce week-end, mon S3 s&#8217;est mis à freezer toutes les heures au pire, 5 minutes au mieux de sa forme. C&#8217;est assez lourdingue à l&#8217;usage&#8230; Donc je suis tombé sur un article de korben.info qui m&#8217;a fait réinstaller un OS officiel (stock ROM, pas custom ROM), mais destiné à des S3 plus [...]]]></description>
				<content:encoded><![CDATA[<p>Et voilà, depuis ce week-end, mon S3 s&rsquo;est mis à freezer toutes les heures au pire, 5 minutes au mieux de sa forme.<br />
C&rsquo;est assez lourdingue à l&rsquo;usage&#8230;<br />
Donc je suis tombé sur <a href="http://korben.info/samsung-galaxy-s3-freeze.html" target="_blank">un article de korben.info</a> qui m&rsquo;a fait réinstaller un OS officiel (stock ROM, pas custom ROM), mais destiné à des S3 plus récents. Ca semble parfaitement compatible, ça prend 10 minutes à faire et ça évite de se battre avec un SAV qui va me faire réinstaller 20 fois l&rsquo;OS pour rien.<br />
Ca ne règle pas non plus le problème de fond, on verra si un autre problème hard survient à l&rsquo;avenir.</p>
<p>Merci korben.info</p>
<p><em>(ça et le S2 de ma femme qui s&rsquo;est mis à faire un peu n&rsquo;importe quoi après avoir appliqué des patchs officiels d&rsquo;applis standard&#8230;.. ça commence à me gonfler et je vais mettre samsung dans le même panier que apple si ça continue&#8230; pour d&rsquo;autres raisons, certes, mais quand même&#8230;)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/rien-a-voir-avec-dhabitude-un-s3-qui-freeze-tout-le-temps-1395/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3G, régions surpeuplées et filtrage discrétos =&gt; VPN</title>
		<link>http://michauko.org/blog/3g-regions-surpeuplees-et-filtrage-discretos-vpn-1369/</link>
		<comments>http://michauko.org/blog/3g-regions-surpeuplees-et-filtrage-discretos-vpn-1369/#comments</comments>
		<pubDate>Mon, 12 Nov 2012 10:03:21 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[débit]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[filtrage]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1369</guid>
		<description><![CDATA[Le blocage Salut, Imaginez un opérateur (dernièrement de téléphonie mobile) toujours balaise côté technique, qui apporte de sacrés trucs, qui fait plier commercialement les autres, qui est un opérateur vraiment impressionnant chaque fois qu&#8217;il lance un truc, mais avec qui parfois c&#8217;est la lutte et là ça peut vraiment te gonfler à l&#8217;usage. Alors avant [...]]]></description>
				<content:encoded><![CDATA[<h2>Le blocage</h2>
<p>Salut,<br />
Imaginez un opérateur (dernièrement de téléphonie mobile) toujours balaise côté technique, qui apporte de sacrés trucs, qui fait plier commercialement les autres, qui est un opérateur vraiment impressionnant chaque fois qu&rsquo;il lance un truc, mais avec qui parfois c&rsquo;est la lutte et là ça peut vraiment te gonfler à l&rsquo;usage.</p>
<p>Alors avant te barrer chez un autre opérateur sans engagement qui a de meilleures infrastructures en place, tu cherches à sortir la tête du troupeau et faire en sorte que le service marche comme il devrait.<br />
<em>Et le tout <strong>sans rooter</strong> mon téléphone flambant neuf que je n&rsquo;ai pas encore envie de massacrer en changeant la ROM. Pour les iphoneux, euh&#8230; ça doit aussi exister un client openvpn</em></p>
<h2>L&rsquo;idée</h2>
<p>Bref, aujourd&rsquo;hui, comment faire passer tout son trafic 3G dans un VPN (openvpn)<span id="more-1369"></span> via un serveur &laquo;&nbsp;copain&nbsp;&raquo; (au pire un serveur chez soi) et ainsi contourner quelques restrictions de débits&#8230; de facebook à G+ en passant par mon GPS qui a décroché en 3G au moment où j&rsquo;en avais *vraiment* besoin, tu sais, quand tu es à quelques rues <del datetime="2012-11-12T07:48:32+00:00">du rade </del> de la salle de réunion où tu as <del datetime="2012-11-12T07:48:32+00:00">une beuverie prévue entre copains</del> un RDV de travail avec quelques connaissances. Pour le peu de fois où je me remue jusqu&rsquo;à Paris, ça fait suer quand même ! ton téléphone écran méga-large devient une super grosse brique et accessoirement tu passes pour un con auprès de ceux restés chez des opérateurs classiques au triple de prix.</p>
<p>Donc, si t&rsquo;as tout compris, l&rsquo;idée est de monter un VPN et de tout balancer dedans. Plus tard, quand l&rsquo;opérateur aura réglé ses problèmes, t&rsquo;auras quand même besoin un jour de ce VPN pour te sauver les fesses d&rsquo;une situation exceptionnelle, j&rsquo;en suis sûr, donc ce n&rsquo;est pas perdu. La méthode a été prouvée et constatée de visu par une longue étude de 10 secondes montre en main par quelques geeks présents ce jour là :<br />
- sans VPN, t&rsquo;accèdes à rien, ça rame etc<br />
- tu allumes le VPN, ça turbine<br />
- tu l&rsquo;éteins, tu retournes à même pas un débit d&rsquo;Edge.</p>
<p>Alors bon, ça ne rend sûrement pas service à l&rsquo;opérateur en question qui doit lutter techniquement sur fonds de dispute probable commerciale de sous-location d&rsquo;infrastructure, mais bon, m&rsquo;en fous. C&rsquo;est ça où je change le mois prochain.</p>
<h2>Le matos nécessaire</h2>
<p>Il faut :</p>
<ul>
<li>un serveur VPN déjà en place ; d&rsquo;après un copain, plutôt en TCP qu&rsquo;UDP, du fait de la 3G. Admettons.</li>
<li>un téléphone sous Android. S&rsquo;il est rooté, il suffit d&rsquo;installer &laquo;&nbsp;<a href="https://play.google.com/store/apps/details?id=de.schaeuffelhut.android.openvpn&#038;feature=search_result#?t=W251bGwsMSwxLDEsImRlLnNjaGFldWZmZWxodXQuYW5kcm9pZC5vcGVudnBuIl0." target="_blank">Openvpn settings</a>&nbsp;&raquo; si votre ROM contient openvpn ; ou alors installer &laquo;&nbsp;<a href="https://play.google.com/store/apps/details?id=de.schaeuffelhut.android.openvpn.installer&#038;feature=search_result#?t=W251bGwsMSwxLDEsImRlLnNjaGFldWZmZWxodXQuYW5kcm9pZC5vcGVudnBuLmluc3RhbGxlciJd" target="_blank">Openvpn installer</a>&nbsp;&raquo; en plus pour ramener openvpn ; et s&rsquo;il n&rsquo;est pas rooté, &laquo;&nbsp;<a href="https://play.google.com/store/apps/details?id=de.blinkt.openvpn&#038;feature=search_result#?t=W251bGwsMSwxLDEsImRlLmJsaW5rdC5vcGVudnBuIl0." target="_blank">Openvpn for Android</a>&nbsp;&raquo; fait le boulot comme il faut (il y a je crois des restrictions sur le niveau minimum de release Android à avoir). A voir.</li>
<li><strong>un tout petit peu de conf particulière sur le VPN pour dire aux clients : tout router via le VPN</strong></li>
<li>un site type whatismyip.com pour vérifier facilement quelle IP vous présentez et ainsi valider la conf</li>
<li>à la limite le SDK Android (adb &#038; co) pour pouvoir comprendre ce qu&rsquo;il se passe quand ça marche pas (j&rsquo;en ai pas eu besoin mais ça m&rsquo;aurait aidé au début)</li>
</ul>
<p>A noter que le VPN, c&rsquo;est fourni dans Android, mais pas avec OpenVPN&#8230;</p>
<h2>Montage du serveur VPN</h2>
<p><strong>Le montage d&rsquo;un serveur VPN &#8211; sous Debian &#8211; est décrit dans un <a href="http://michauko.org/blog/2009/09/23/openvpn-les-doigts-dans-le-nez/" target="_blank">précédent article de mon blog</a>. En résumé : installation du paquet puis utilisation des outils easy-rsa pour générer facilement tout l&rsquo;aspect certificat et une paire de clefs pour un poste à essayer, par exemple votre téléphone. <em>Il est bon de tester sur un PC avant pour être sûr que le VPN fonctionne et que si ça ne fonctionne pas, c&rsquo;est la faute au téléphone</em>.</strong><br />
Enfin, ne pas oublier d&rsquo;ouvrir le port TCP/1194 (on a dit TCP, pas UDP) et de tolérer un masquerading entre votre interface VPN et la patte Internet du serveur.</p>
<p>Finalement, la seule spécificité est de préciser ceci dans le fichier de configuration du serveur VPN :</p>
<pre>push "redirect-gateway def1"
;push "dhcp-option DNS 10.8.0.1" #ça ou la ligne suivante, suivant que votre serveur est ou non un serveur DNS
push "dhcp-option DNS 8.8.8.8"
</pre>
<p>Je laisse exprès une ligne qui m&rsquo;a posé souci : faire un push d&rsquo;une conf DNS potable. En effet, le redirect-gateway indique de tout envoyer via le VPN, donc les requêtes DNS aussi&#8230;. si votre serveur est un serveur DNS, alors c&rsquo;est OK pour relayer par lui (penser à ouvrir le trafic DNS de l&rsquo;interface VPN vers la machine), sinon c&rsquo;est mort et le serveur public de Google, dont l&rsquo;IP est 8.8.8.8, peut rendre service.<br />
Lire <a href="http://openvpn.net/index.php/open-source/documentation/howto.html#redirect" target="_blank">ce passage de la doc OpenVPN</a> (quelques lignes) est une bonne idée.</p>
<h2>Côté client</h2>
<p>Voilà, reste à mettre à disposition du client &laquo;&nbsp;OpenVPN for Android&nbsp;&raquo; ou &laquo;&nbsp;OpenVPN Settings&nbsp;&raquo; votre autorité de certification (genre ca.crt), les clefs publique et privée générées pour votre téléphone et le fichier de conf client .ovpn, qui lui n&rsquo;a rien de nouveau, à la limite le <code>proto tcp</code> spécifié.<br />
Il suffit de copier lesdits fichiers dans un répertoire genre <code>/sdcard/openvpn/</code> (ou <code>/storage/sdcard0/openvpn</code>, ça dépend fortement de votre téléphone et de son système)</p>
<p>wala wala, amusez-vous bien.<br />
<a href="http://michauko.org/blog/wp-content/uploads/2012/11/connected.jpg"><img src="http://michauko.org/blog/wp-content/uploads/2012/11/connected-168x300.jpg" alt="Log d&#039;initialisation client OpenVPN for Android - connexion OK" title="Log d&#039;initialisation client OpenVPN for Android - connexion OK" width="168" height="300" class="aligncenter size-medium wp-image-1386" /></a><br />
<a href="http://michauko.org/blog/wp-content/uploads/2012/11/dns.jpg"><img src="http://michauko.org/blog/wp-content/uploads/2012/11/dns-168x300.jpg" alt="Log d&#039;initialisation client OpenVPN for Android - push DNS" title="Log d&#039;initialisation client OpenVPN for Android - push DNS" width="168" height="300" class="aligncenter size-medium wp-image-1387" /></a></p>
<h2>Hors sujet</h2>
<p>A noter quand même que &laquo;&nbsp;celui-qui-a-tout-compris mobile&nbsp;&raquo; offre aussi l&rsquo;identification à ses réseaux freewifi_secure par carte SIM, et ça, c&rsquo;est quand même classe ! du moment que t&rsquo;es pas en mouvement et que ton téléphone gère l&rsquo;identification par carte SIM.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/3g-regions-surpeuplees-et-filtrage-discretos-vpn-1369/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mon avis sur ownCloud 4 : son cloud perso (auto-hébergement de données synchronisées sur Internet)</title>
		<link>http://michauko.org/blog/mon-avis-sur-owncloud-4-son-cloud-perso-auto-hebergement-de-donnees-synchronisees-sur-internet-1361/</link>
		<comments>http://michauko.org/blog/mon-avis-sur-owncloud-4-son-cloud-perso-auto-hebergement-de-donnees-synchronisees-sur-internet-1361/#comments</comments>
		<pubDate>Wed, 22 Aug 2012 13:26:14 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[ownCloud]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1361</guid>
		<description><![CDATA[Juste un rapide retour d&#8217;expérience que j&#8217;ai fait sur ownCloud chez NicoLargo via un long commentaire que je vous invite à lire pour situer un peu mon point de vue. Détailler l&#8217;installation n&#8217;a pas d&#8217;intérêt tellement c&#8217;est simple (et quelques coquilles de jeunesses sont corrigées maintenant). Je préfère me limiter à citer cet outil prometteur, [...]]]></description>
				<content:encoded><![CDATA[<p>Juste un rapide retour d&rsquo;expérience que j&rsquo;ai fait sur ownCloud <a href="http://blog.nicolargo.com/2012/02/owncloud-sur-un-serveur-debian-nginx.html/comment-page-1#comment-16548" target="_blank">chez NicoLargo via un long commentaire</a> que je vous invite à lire pour situer un peu mon point de vue.</p>
<p>Détailler l&rsquo;installation n&rsquo;a pas d&rsquo;intérêt tellement c&rsquo;est simple (et quelques coquilles de jeunesses sont corrigées maintenant).<br />
Je préfère me limiter à citer cet outil prometteur, mais encore trop jeune à mon goût (et un copain qui teste les clients Linux trouve aussi pas mal de problèmes). Donc je ne confierai pas encore de données sérieuses à ce système.<br />
A suivre. C&rsquo;est déjà un boulot impressionnant.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/mon-avis-sur-owncloud-4-son-cloud-perso-auto-hebergement-de-donnees-synchronisees-sur-internet-1361/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>copinage : un extrêmiste du Debian</title>
		<link>http://michauko.org/blog/copinage-un-extremiste-du-debian-1357/</link>
		<comments>http://michauko.org/blog/copinage-un-extremiste-du-debian-1357/#comments</comments>
		<pubDate>Tue, 21 Aug 2012 07:55:38 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1357</guid>
		<description><![CDATA[Je suis peu bavard en ce moment, c&#8217;est vrai. Oui ben je manque de temps avec quelques projets de diverses natures en cours&#8230; voilà na ! Voyez ici (http://guillaume.vaillant.me/) le blog d&#8217;un copain Debianiste jusqu&#8217;au bout des ongles. Il y a à boire et à manger. Même esprit que mon blog : consigner par écrit [...]]]></description>
				<content:encoded><![CDATA[<p>Je suis peu bavard en ce moment, c&rsquo;est vrai. Oui ben je manque de temps avec quelques projets de diverses natures en cours&#8230; voilà na !</p>
<p>Voyez <a href="http://guillaume.vaillant.me/" target="_blank">ici (http://guillaume.vaillant.me/</a>) le blog d&rsquo;un copain Debianiste jusqu&rsquo;au bout des ongles.<br />
Il y a à boire et à manger.<br />
<strong>Même esprit que mon blog : consigner par écrit nos propres remarques sur nos propres installations et essais pour ne pas oublier des heures de recherches.</strong></p>
<p>J&rsquo;adore chercher moi-même un truc dans google et trouver la solution sur&#8230; mon blog <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Ahhh..lzeimer guette.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/copinage-un-extremiste-du-debian-1357/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apache, suhosin, wordpress et WP-Table Reloaded</title>
		<link>http://michauko.org/blog/apache-suhosin-wordpress-et-wp-table-reloaded-1331/</link>
		<comments>http://michauko.org/blog/apache-suhosin-wordpress-et-wp-table-reloaded-1331/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 10:10:58 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[suhosin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-table-reloaded]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1331</guid>
		<description><![CDATA[Le problème Hop, un petit aide-mémoire à propos du plugin WP-Table Reloaded pour WordPress sur un serveur avec patch suhosin. Sur des gros tableaux, impossible de faire la moindre mise à jour en live du tableau, car le patch suhosin limite (c&#8217;est son rôle) la taille de certains formulaires, longueurs de noms de variables etc, [...]]]></description>
				<content:encoded><![CDATA[<h2>Le problème</h2>
<p>Hop, un petit aide-mémoire à propos du plugin WP-Table Reloaded pour WordPress sur un serveur avec patch suhosin.<br />
Sur des gros tableaux, impossible de faire la moindre mise à jour en live du tableau, car le patch suhosin limite (c&rsquo;est son rôle) la taille de certains formulaires, longueurs de noms de variables etc, ou alors, il tronque certains tableaux.<br />
Seul l&rsquo;import initial se passe bien. Ensuite, c&rsquo;est la galère.</p>
<h2>La solution ?</h2>
<p>Il faut régler suhosin plus finement <span id="more-1331"></span>(et non pas le désactiver comme recommandent beaucoup de personnes pour dégager le problème vite fait mal fait).</p>
<p>Pour connaître précisément votre config suhosin sur un site donné, vous pouvez utiliser un appel à phpinfo() en PHP.</p>
<p>Ensuite, sur un site ayant des tableaux de 1500 lignes, j&rsquo;ai dû, à force d&rsquo;alertes suhosin dans /var/log/user.log, modifier ces valeurs dans mon VirtualHost :</p>
<p><code>        php_value suhosin.post.max_array_index_length 0<br />
        php_value suhosin.get.max_array_index_length 0<br />
        php_value suhosin.request.max_array_index_length 0<br />
        php_value suhosin.post.max_vars 0<br />
        php_value suhosin.get.max_vars 0<br />
        php_value suhosin.request.max_vars 0<br />
        php_value suhosin.post.max_name_length 0<br />
        php_value suhosin.get.max_vars 0<br />
        php_value suhosin.request.max_vars 0<br />
        php_value suhosin.memory_limit 512M</code></p>
<p>C&rsquo;est une première étape qui permet de voir si ça règle bien le problème. Ensuite, il faut affiner pour ne pas tolérer de l&rsquo;illimité (0), mais des valeurs réalistes.<br />
Il restait un dernier blocage à 1000 lignes, cette fois la conf de base PHP, j&rsquo;ai modifié ceci puis affiné :<br />
<code>        php_value max_input_vars 10000</code></p>
<p>Un reload Apache et le tour était joué.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/apache-suhosin-wordpress-et-wp-table-reloaded-1331/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Catch-all DNS, VirtualHost et on fait mumuse avec les noms de sous-domaines</title>
		<link>http://michauko.org/blog/catch-all-dns-virtualhost-et-on-fait-mumuse-avec-les-noms-de-sous-domaines-1316/</link>
		<comments>http://michauko.org/blog/catch-all-dns-virtualhost-et-on-fait-mumuse-avec-les-noms-de-sous-domaines-1316/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 16:07:17 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[catch-all]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[VirtualHost]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1316</guid>
		<description><![CDATA[Salut lecteur, Un bail que je n&#8217;ai rien écrit sur ce blog, la faute à un petit projet perso qui me prend un peu de temps chez moi, semble-t-il. L&#8217;idée Ceci dit, je voulais laisser une trace de cette manip&#8217; qui consiste à autoriser n&#8217;importe quel nom de sous-domaine d&#8217;un domaine que vous possédez, exemple [...]]]></description>
				<content:encoded><![CDATA[<p>Salut lecteur,</p>
<p>Un bail que je n&rsquo;ai rien écrit sur ce blog, la faute à un petit projet perso qui me prend un peu de temps chez moi, semble-t-il.</p>
<h2>L&rsquo;idée</h2>
<p>Ceci dit, je voulais laisser une trace de cette manip&rsquo; qui consiste à autoriser n&rsquo;importe quel nom de sous-domaine d&rsquo;un domaine que vous possédez, exemple le fameux &laquo;&nbsp;mon_domaine.com&nbsp;&raquo; en ayant la possibilité d&rsquo;envoyer vers un site ou un autre (au sens, un VirtualHost/DocumentRoot ou un autre) suivant le nom de sous-domaine appelé, la liste de ces sous-domaines étant potentiellement illimitée.</p>
<p>Bon, OK, pour la formulation, c&rsquo;est pas forcément limpide. Un exemple concret : mon_domaine.com est <span id="more-1316"></span>une société qui propose un service web personnalisé pour ses clients. Le gérant de la chose décide de mettre en place les sous-domaines suivants :</p>
<ul>
<li>www.mon_domaine.com</li>
<li>demo.mon_domaine.com ; même mieux : une liste de plusieurs instances de démo : demo1, demo2 etc</li>
<li>une série infinie de clientXXX.mon_domaine.com, exemples : http://client.mon_domaine.com, http://autreclient.mon_domaine.com</li>
</ul>
<p>
On voudrait que le &laquo;&nbsp;www&nbsp;&raquo; renvoie vers le site &laquo;&nbsp;commerçant&nbsp;&raquo;, que les &laquo;&nbsp;demoX&nbsp;&raquo; renvoient vers le service en mode démo (chacun étant une instance différente, une base de données différente, par exemple) et que chaque &laquo;&nbsp;clientXXX&nbsp;&raquo; pointe vers le vrai outil, dont le code est commun pour tous les clients, là aussi avec une peut-être une base de donnée différente par client.<br />
Pourquoi ne pas juste passer un paramètre dans l&rsquo;URL pour indiquer le client ? car dans mon cas, je préférais faire des sous-domaines différents, ça enlève un tas d&rsquo;épines du pied en ce qui concerne la gestion des sessions, gestion qui est liée au nom complet du domaine, pas à ce qu&rsquo;il y a après le &laquo;&nbsp;.com&nbsp;&raquo;, comme un http://&#8230;.com/?client=xxx</p>
<p>On a toujours la possibilité de faire n&rsquo;importe quelle crassouillerie pour avoir un script d&rsquo;index[.php] qui dirige vers tel ou tel code/outil suivant l&rsquo;URL appelée. Pourquoi pas. Mais lorsque l&rsquo;un des outils est par exemple un outil dont on ne veut pas modifier l&rsquo;index[.php], ça peut poser problème. Exemple, le &laquo;&nbsp;www&nbsp;&raquo; est un wordpress, le reste un outil maison. Je ne veux pas avoir à jouer avec le htaccess du WordPress, ce genre de choses. Bref, je scinde les mondes avant et je limite les risques de passage de l&rsquo;un à l&rsquo;autre.</p>
<p>Bon, ça y est ? le contexte est clair ?<br />
Voici la solution que je trouve la plus élégante.</p>
<h2>Côté DNS : catch-all</h2>
<p>Si le gérant de votre nom de domaine le permet, créez d&rsquo;abord un enregistrement DNS type A ou CNAME nommé &laquo;&nbsp;*&nbsp;&raquo; et pointant vers votre serveur. Exemple : &laquo;&nbsp;<code>*.mon_domaine.com CNAME mon_domaine.com</code>&laquo;&nbsp;.<br />
Tous ne le permettent sûrement pas. Je sais au moins que OVH le tolère, il suffit de mettre &laquo;&nbsp;*&nbsp;&raquo; comme nom de sous-domaine.<br />
Ensuite, on peut tester avec la commande &laquo;&nbsp;<code>host/nslookup nimportequoi.mon_domaine.com</code>&laquo;&nbsp;.</p>
<h2>Côté Apache : identification du sous-domaine demandé</h2>
<p>Avec la manip&rsquo; DNS, on est sûr que nimportequoi.mon_domaine.com renvoie bien vers le serveur. Reste à trier au niveau Apache (plutôt qu&rsquo;au niveau code derrière, comme j&rsquo;ai expliqué plus haut).<br />
Déjà pour être sûr que ça marche, une conf simpliste consiste à créer un unique VirtualHost comme ceci :</p>
<pre>< VirtualHost *>
        ServerName mon_domaine.com
        ServerAlias *.mon_domaine.com
        ServerAdmin webmaster@mon_domaine.com
        ...
        DocumentRoot /quelque/part/
        ...
< /VirtualHost>
</pre>
<p>Avec ça, vous pouvez appeler http://peu_importe.mon_domaine.com ou http://www.mon_domaine.com et atterrir sur le même VirtualHost/DocumentRoot, le même &laquo;&nbsp;site&nbsp;&raquo;.</p>
<p>Ensuite, on améliore pour scinder les 3 jeux de sous-domaines. Supprimez le VirtualHost d&rsquo;avant et mettez :</p>
<pre>< VirtualHost *>
        ServerName www.mon_domaine.com
        ServerAdmin webmaster@mon_domaine.com
        ...
        DocumentRoot /quelque/part/le/site/www/
        ...
< /VirtualHost>
< VirtualHost *>
        ServerAlias demo*.mon_domaine.com
        ServerAdmin webmaster@mon_domaine.com
        ...
        DocumentRoot /quelque/part/le/code/des/sites/de/demo/
        ...
< /VirtualHost>
< VirtualHost *>
        ServerName mon_domaine.com
        ServerAlias *.mon_domaine.com
        ServerAdmin webmaster@mon_domaine.com
        ...
        DocumentRoot /quelque/part/le/code/des/sites/de/production/
        ...
< /VirtualHost></pre>
<p>Bah voilà, c&rsquo;est tout, les 3 répertoires mentionnés dans les DocumentRoot sont indépendants.<br />
Il ne resterait plus que dans l&rsquo;outil, à récupérer le nom du sous-domaine (exemple à partir de <code>$_SERVER['SERVER_NAME']</code> en PHP) et faire le traitement adéquat.</p>
<p>En espérant que ça serve à quelqu&rsquo;un,</p>
<p>A la prochaine !</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/catch-all-dns-virtualhost-et-on-fait-mumuse-avec-les-noms-de-sous-domaines-1316/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Ralentir le débit de postfix pour wanadoo/orange</title>
		<link>http://michauko.org/blog/ralentir-le-debit-de-postfix-pour-wanadooorange-1302/</link>
		<comments>http://michauko.org/blog/ralentir-le-debit-de-postfix-pour-wanadooorange-1302/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 11:45:03 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[check_postqueue.sh]]></category>
		<category><![CDATA[master.cf]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[orange]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[transport]]></category>
		<category><![CDATA[wanadoo]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1302</guid>
		<description><![CDATA[Si vous avez un serveur d&#8217;envoi de mails (je ne parle pas d&#8217;être un spammeur) et beaucoup d&#8217;abonnés chez Wanadoo et Orange, vous risquez fort le rejet temporaire de votre serveur si le débit d&#8217;envoi est trop fort. C&#8217;est ce qui m&#8217;est arrivé et hop, 5000 mails entassés dans la file de postfix. On peut [...]]]></description>
				<content:encoded><![CDATA[<p>Si vous avez un serveur d&rsquo;envoi de mails (je ne parle pas d&rsquo;être un spammeur) et beaucoup d&rsquo;abonnés chez Wanadoo et Orange, vous risquez fort le rejet temporaire de votre serveur si le débit d&rsquo;envoi est trop fort.<br />
C&rsquo;est ce qui m&rsquo;est arrivé et hop, 5000 mails entassés dans la file de postfix.</p>
<p>On peut donc créer une file spéciale dans le master.cf de postfix et une règle de transport pour ces domaines, avec un débit réduit. Du moment où j&rsquo;ai rechargé la configuration postfix et relancer le traitement de la file, magie, en 1 heure, les 5000 mails étaient distribués.</p>
<p>Pour ce faire, j&rsquo;ai utilisé les documentations suivantes et adapté au contexte &laquo;&nbsp;configuration postfix définie dans MySQL&nbsp;&raquo;, comme expliqué dans <a href="http://michauko.org/blog/?s=postfix+mysql" title="mes articles précédents" target="_blank">mes articles précédents</a>, toujours d&rsquo;actualité.<span id="more-1302"></span></p>
<ul>
<li><a href="http://linuxnet.ca/postfix/dedicated_transport.html" target="_blank">http://linuxnet.ca/postfix/dedicated_transport.html</a></li>
<li><a href="http://www.zapoyok.info/2011/01/01/orangewanadoo-et-%C2%AB-too-many-connections-slow-down-ofr004_104-104-%C2%BB/" target="_blank">http://www.zapoyok.info/2011/01/01/orangewanadoo-et-%C2%AB-too-many-connections-slow-down-ofr004_104-104-%C2%BB/</a></li>
</ul>
<h2>Dans master.cf</h2>
<blockquote><p>slow    unix    &#8211;       &#8211;       n       &#8211;       5       smtp<br />
  -o syslog_name=postfix-slow<br />
  -o smtp_destination_concurrency_limit=3<br />
  -o slow_destination_rate_delay=1
</p></blockquote>
<h2>Dans main.cf</h2>
<blockquote><p>slow_destination_recipient_limit = 20<br />
slow_destination_concurrency_limit = 2
</p></blockquote>
<h2>Dans la table &laquo;&nbsp;transport&nbsp;&raquo; niveau MySQL</h2>
<p>Sur une conf &laquo;&nbsp;non SQL&nbsp;&raquo;, il suffirait de jouer avec le fichier de transport, sans oublier le &laquo;&nbsp;postmap&nbsp;&raquo; qui va bien.<br />
Dans mon cas, le fichier de transport est défini comme ceci : <code>transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf</code>.<br />
Donc, pour ajouter une route particulière pour ces 4 domaines, on ajoute en base :</p>
<blockquote><p>INSERT INTO `transport` (domain, transport)<br />
VALUES (&lsquo;wanadoo.fr&rsquo;,'slow&rsquo;),<br />
VALUES (&lsquo;wanadoo.com&rsquo;,'slow&rsquo;),<br />
VALUES (&lsquo;orange.fr&rsquo;,'slow&rsquo;),<br />
VALUES (&lsquo;orange.com&rsquo;,'slow&rsquo;)<br />
;</p></blockquote>
<p>Enfin, on relance postfix et la file d&rsquo;attente avec ses X messages bloqués avec un <code>postqueue -f</code>.</p>
<h2>Monitoring de la file d&rsquo;attente sous Nagios</h2>
<p>Du coup, j&rsquo;ai trouvé qu&rsquo;il me manquait une surveillance de la file d&rsquo;attente &laquo;&nbsp;postqueue&nbsp;&raquo; d&rsquo;un serveur via Nagios. Je signale simplement ce script (<a href="http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postqueue-2Esh/details" title="http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postqueue-2Esh/details" target="_blank">http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postqueue-2Esh/details</a>)<br />
Il semble faire le boulot simplement.<br />
A rapprocher de <a href="http://michauko.org/blog/2010/01/06/nrpe-monitorer-des-linux-avec-nagios/" target="_blank">ce document</a> si l&rsquo;ajout d&rsquo;un contrôle via NRPE ne vous est pas familier.</p>
<p>Et voilà.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/ralentir-le-debit-de-postfix-pour-wanadooorange-1302/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>CIFS VFS: No response for cmd 50 mid xxx</title>
		<link>http://michauko.org/blog/cifs-vfs-no-response-for-cmd-50-mid-xxx-1296/</link>
		<comments>http://michauko.org/blog/cifs-vfs-no-response-for-cmd-50-mid-xxx-1296/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 13:47:04 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[CIFS]]></category>
		<category><![CDATA[CIFS VFS]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[OplockEnabled]]></category>
		<category><![CDATA[samba]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1296</guid>
		<description><![CDATA[Sur une machine Debian Squeeze virtualisée, kernel 2.6.28, depuis quelques jours, une tonne de messages type Oct 18 00:20:59 mamachine kernel: [1870080.158744] CIFS VFS: No response for cmd 50 mid 10251. Au-delà des messages, toutes les manipulations de fichiers sur des partages Samba fonctionnaient curieusement : transferts de fichiers interrompus, créations de répertoires quand ça [...]]]></description>
				<content:encoded><![CDATA[<p>Sur une machine Debian Squeeze virtualisée, kernel 2.6.28, depuis quelques jours, une tonne de messages type <code>Oct 18 00:20:59 mamachine kernel: [1870080.158744]  CIFS VFS: No response for cmd 50 mid 10251</code>. Au-delà des messages, toutes les manipulations de fichiers sur des partages Samba fonctionnaient curieusement : transferts de fichiers interrompus, créations de répertoires quand ça voulait etc.</p>
<p>Sur Internet, on trouve de la prose indiquant que ça peut se régler en désactivant le &laquo;&nbsp;Opportunistic Locking&nbsp;&raquo;, concrètement en faisant un <code>echo 0 > /proc/fs/cifs/OplockEnabled</code> bien bourrin, moyennant une vague perte de performance (je n&rsquo;ai pas mesuré).<br />
Ca n&rsquo;aura pas suffit.</p>
<p>Comme j&rsquo;ai vu passer, il me semble, des mises à jour samba il y a peu de temps, ça sentait la modif récente (chez MS, ou pas et répercutée dans Samba) et le kernel un peu trop vieux pour que tout ça marche bien. Résultat, après une mise à jour du noyau en 2.6.39 (backport), en mettant tout de même le &laquo;&nbsp;OplockEnabled&nbsp;&raquo; à 0 (j&rsquo;avoue que je n&rsquo;ai pas testé sans), le problème a disparu.</p>
<p>Un copain me souffle de mettre <code>fs.cifs.OplockEnabled=0</code> dans <code>/etc/sysctl.d/local.conf</code> plutôt que l&rsquo;éternel <code>echo 0 > /proc...</code> dans le <code>rc.local</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/cifs-vfs-no-response-for-cmd-50-mid-xxx-1296/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freebox V6 1.1.0 &#8211; téléphonie &#8211; attention ça galère, mais y&#8217;a une solution</title>
		<link>http://michauko.org/blog/freebox-v6-1-1-0-telephonie-attention-ca-galere-mais-ya-une-solution-1266/</link>
		<comments>http://michauko.org/blog/freebox-v6-1-1-0-telephonie-attention-ca-galere-mais-ya-une-solution-1266/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 20:10:09 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[coup de gueule]]></category>
		<category><![CDATA[hors sujet]]></category>
		<category><![CDATA[DECT]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[freebox]]></category>
		<category><![CDATA[freebox v6]]></category>
		<category><![CDATA[téléphonie]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1266</guid>
		<description><![CDATA[Ce matin, nouvelle mise à jour de la freebox V6. Au programme officiel, plein de corrections sur la téléphonie (LE truc qui intéresse un cabinet médical dont je m&#8217;occupe). Après les déboires pas possibles de la téléphonie début 2011 (j&#8217;aurais bien tué un développeur ou 2), c&#8217;était à peu près stable depuis plusieurs mois. Avec [...]]]></description>
				<content:encoded><![CDATA[<p>Ce matin, nouvelle mise à jour de la freebox V6. Au programme officiel, plein de corrections sur la téléphonie (LE truc qui intéresse un cabinet médical dont je m&rsquo;occupe). Après les déboires pas possibles de la téléphonie début 2011 (j&rsquo;aurais bien tué un développeur ou 2), c&rsquo;était à peu près stable depuis plusieurs mois.<br />
Avec un répondeur sur la prise téléphonie derrière la freebox et 2 DECT finalement &laquo;&nbsp;associés&nbsp;&raquo; à la freebox et pas à leur base d&rsquo;origine, filaire, ça marchait à peu près. Il ne fallait que composer 3 fois les numéros pour que ça passe.</p>
<p>Ce matin, mise à jour donc, en priant (mais j&rsquo;aurais dû attendre, comme d&rsquo;hab). Et là : tu reçois les coups de téléphones, mais quand tu composes, pas de sonnerie, mais ça sonne chez le destinataire et dès qu&rsquo;il décroche ça coupe&#8230;.<br />
Une crise de nerfs plus tard + rererereboot de cette bouse + &laquo;&nbsp;désassociation&nbsp;&raquo; + réassociation + test de la base DECT filaire, pas mieux.<br />
Donc maintenant, j&rsquo;ai compris, je me rue vers <a href="http://bugs.freeplayer.org/task/7528" target="_blank">leur système de bugtracking et hop</a>, un mec a loggué le même incident et un type a trouvé une solution qui n&rsquo;explique rien mais qui marche, confirmé par plusieurs dont moi.</p>
<p>Il faut donc activer (si pas déjà fait) votre répondeur et autres fonctions depuis l&rsquo;interface de gestion &laquo;&nbsp;www.free.fr / mon compte&nbsp;&raquo;, sauvegarder, désactiver tout ça et sauvegarder à nouveau. Inutile, pas logique, débile, mais ça marche.<br />
Comme je disais sur le site des bugs : &laquo;&nbsp;Bon c&rsquo;est super hein, je peux enlever des dB machin truc à ma freebox et me pinouiller de qqs ko/s, mais pour téléphoner, faut aller sur ce site pour savoir faire. clap clap clap.&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/freebox-v6-1-1-0-telephonie-attention-ca-galere-mais-ya-une-solution-1266/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Migration de Firefox vers Chrome, des années après sa sortie&#8230;</title>
		<link>http://michauko.org/blog/migration-de-firefox-vers-chrome-des-annees-apres-sa-sortie-1258/</link>
		<comments>http://michauko.org/blog/migration-de-firefox-vers-chrome-des-annees-apres-sa-sortie-1258/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 15:41:28 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[windows]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[firegestures]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[tabmix plus]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1258</guid>
		<description><![CDATA[Et voilà, ce matin ça m&#8217;a pris comme une envie de&#8230; enfin, d&#8217;un coup. Firefox 6 m&#8217;ayant largement gonflé à mon retour de vacances, j&#8217;ai tenté la migration vers Chrome. Je consigne ici quelques remarques qui rassureront ceux qui hésitent depuis longtemps. Si à l&#8217;époque de la sortie de Chrome, il n&#8217;y avait rien pour [...]]]></description>
				<content:encoded><![CDATA[<p>Et voilà, ce matin ça m&rsquo;a pris comme une envie de&#8230; enfin, d&rsquo;un coup. Firefox 6 m&rsquo;ayant largement gonflé à mon retour de vacances, j&rsquo;ai tenté la migration vers Chrome. Je consigne ici quelques remarques qui rassureront ceux qui hésitent depuis longtemps. Si à l&rsquo;époque de la sortie de Chrome, il n&rsquo;y avait rien pour l&rsquo;arranger, les choses ont changé depuis le temps.</p>
<p>Avant de migrer, il y a 2 questions à se poser (à mon avis) :<br />
- quel intérêt ? nouvelles fonctions ? plus beau ? aimer le changement ?<br />
- y&rsquo;a-t-il toutes les fonctions / mes plugins ?</p>
<p>Pour la première question<span id="more-1258"></span>, entre le fait que Mozilla sorte ces dernières semaines une version plus vite que certains ne changent de slip et que la version 6 se viande trop souvent quoi que j&rsquo;y fasse (réinstall, vider tout ce que tu peux, en version portable ou pas, sur différents OS, en supprimant des plugins&#8230;) et que la réputation de Chrome, pour la rapidité, semble faite, c&rsquo;était l&rsquo;occasion de tester. Restait donc à trouver les plugins &laquo;&nbsp;manquants&nbsp;&raquo; au logiciel de base, à coup sûr le genre FireGestures, TabMix Plus etc&#8230;</p>
<p><em>Je propose d&rsquo;ailleurs à Mozilla de sauter tout de suite à la version &laquo;&nbsp;15 pro&nbsp;&raquo;. &laquo;&nbsp;firefox 15 pro&nbsp;&raquo;, ça serait tout de suite mieux que tous les autres logiciels, puisque le numéro est plus gros. Et c&rsquo;est pro.<br />
</em></p>
<p>Bon allez, on abrège :</p>
<h1>Premiers pas</h1>
<h2>Reprise de données</h2>
<p>Mes données firefox sont synchronisées par le logiciel Firefox lui-même et j&rsquo;utilise principalement (je vais pas m&rsquo;étendre là-dessus) un firefox &#8211; 5, donc &#8211; portable (et crypté).<br />
Première mission : reprendre tout ça. Chrome reprend tout (mots de passe, historique etc) d&rsquo;une version *installée* et *sans mot de passe principal*. J&rsquo;ai donc dû installer un firefox &laquo;&nbsp;normalement&nbsp;&raquo;, écraser le contenu du profil vierge (sous Windows, dans <code>C:\Docs&#038;Settings\moi\Mozilla....\profile....\</code>) en faisant en plus sauter le mot de passe principal.<br />
La reprise fonctionne alors très bien.<br />
Penser à effacer cette copie de profile devenue inutile.</p>
<h2>Proxy</h2>
<p>Au boulot, il y a le proxy officiel, et mon proxy au bout d&rsquo;un tunnel SSH. Dans les options de configuration, on s&rsquo;aperçoit que Chrome ne propose que le proxy paramétré dans le système (IE) ! Sans blague ???? quel choix débile : si c&rsquo;est sensé faciliter le fonctionnement pour un boulet lambda qui installe Chrome entreprise, bah il faut blâmer les administrateurs de ne pas l&rsquo;autoriser avec packaging à la clef. Sinon, il faut les blâmer de laisser faire. Et dernier choix, le particulier qui utilise un proxy ??? ça devient rare, ou alors il est au courant. Il reprendra sa conf.<br />
Bref, devant ce merveilleux choix, Google m&rsquo;expliqua que je devais mettre &#8211;proxy-server=mon.proxy:mon_port dans la ligne de commande. Pratique et hautement configurable. Enfin bon, ça me suffit et je suis sûr qu&rsquo;il y a un plugin pour améliorer ça <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Divers, impression, synchro multi-poste</h2>
<p>Bon ensuite c&rsquo;est parti ça marche, je note rapidement 2 choses : on peut &laquo;&nbsp;épingler&nbsp;&raquo; les sites, comme dans les firefox récents et il y a une fonction pour imprimer sur une imprimante d&rsquo;un autre PC avec Chrome. Il faudra que j&rsquo;essaye ça : sortir un papier trouvé chez soi pour le boulot et réciproquement. Pourquoi pas.<br />
Les onglets épinglés reviennent lorsqu&rsquo;on relance. Pas les autres. On peut faire ctrl-shift-T pour rappeler tous les onglets fermés, mais il va falloir vite trouver TabMix+ ou équivalent. Il faut dire que j&rsquo;avais un peu ignoré l&rsquo;option qui justement restaure les onglets après fermeture. Ca fait déjà une bonne partie de ce dont j&rsquo;ai besoin dans TMP.<br />
Ayant un compte Google et utilisant un bon panel de leurs applications, la synchro de mes paramètres (mdp etc) est tombée sous le sens. Ca marche bien et chose terrible : en installant un chrome &laquo;&nbsp;normal&nbsp;&raquo; (pas portable) sur un autre PC à moi, la synchro aura même redescendu les plugins ! Pas mal.</p>
<p>Bon bah voilà, reste à affiner avec des plug-ins.<br />
Ah, et les raccourcis clavier sont les mêmes, globalement.</p>
<h1>Equivalence des plugins</h1>
<h2>FireGestures => Mouse Stroke</h2>
<p>Pareil, voire mieux (paramétrable par application ?)<br />
Les raccourcis de base sont les mêmes <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h2><a href="https://chrome.google.com/webstore/detail/cfhdojbkjhnklbpkdaibdccddilifddb" title="AdBlock+" target="_blank">Adblock+ => inchangé</a></h2>
<p>Ne pas confondre avec la palanquée d&rsquo;autres outils qui ont presque la même icone.</p>
<h2>Fox To Phone => <a href="https://chrome.google.com/webstore/detail/oadboiipflhobonjjffjbfekfjcgkhco?hl=fr" title="Chrome To Phone" target="_blank">Chrome To Phone</a></h2>
<p>Pareil. Je crois que le plugin vient de Chrome au départ, de toute manière.</p>
<h2><a href="http://www.garmin.com/products/communicator/" title="Garmin communicator => inchangé&nbsp;&raquo; target=&nbsp;&raquo;_blank&nbsp;&raquo;>Garmin Communicator => inchangé</a></h2>
<p>OK, ça semble être fonctionnel mais je n&rsquo;ai pas mon GPS sur moi.</p>
<h2>gTranslate => <a href="https://chrome.google.com/webstore/detail/obgoiaeapddkeekbocomnjlckbbfapmk" title="Auto-Translate" target="_blank">Auto-Translate</a></h2>
<p>Pareil en mieux.</p>
<h2>Google + + (plus plus) => Publish Sync</h2>
<p>Google++ génial sur le papier (publications FB/G+/Twitter depuis l&rsquo;un des 3, vers les 3) n&rsquo;a jamais fonctionné pour moi. L&rsquo;extension Publish Sync, uniquement pour Chrome, était donc une belle occasion. Ben ça marche, nickel.</p>
<h2>NZBdStatus => <a href="https://chrome.google.com/webstore/detail/okphadhbbjadcifjplhifajfacbkkbod#" title="SABConnect++" target="_blank">SABConnect++</a></h2>
<p>Ca marche et c&rsquo;est même mieux que le NZBdStatus que j&rsquo;utilisais sur Firefox.</p>
<h2>ReadItLater => une page web</h2>
<p>Avec Chrome,  ça propose une page web. Finalement c&rsquo;est mieux que le bouton que j&rsquo;avais sur Firefox.</p>
<h2>TabMix + => <a href="https://chrome.google.com/webstore/detail/nmidkjogcjnnlfimjcedenagjfacpobb?hl=fr" title="FreshStart" target="_blank">FreshStart </a>/ <a href="https://chrome.google.com/webstore/detail/bbcnbpafconjjigibnhbfmmgdbbkcjfi?hl=fr" title="Session Manager" target="_blank">Session Manager</a> ?</h2>
<p>Gros sujets bloquant plein de personnes (dont moi).<br />
Je n&rsquo;utilise que :<br />
- la réouverture de la session, même en cas de crash<br />
- la sauvegarde de quelques ensembles d&rsquo;onglets pour faciliter l&rsquo;accès simultané à un paquet donné de sites.<br />
- la protection contre la fermeture / le changement d&rsquo;url d&rsquo;un onglet.<br />
Le premier point est disponible de base, sauf en cas de crash. Ca semble apporté par &laquo;&nbsp;FreshStart&nbsp;&raquo;, mais je n&rsquo;ai pas encore réussi à planter le navigateur. On verra, donc. A ce propos, chaque onglet semble donner naissance à un processus système différent, ça limite peut-être la casse en cas de plantage d&rsquo;un site.<br />
Le deuxième point vient avec FreshStart &#8211; j&rsquo;avais trouvé Session Manager au départ. Ca ne faisait que ça. A voir si tout ça remonte via la synchro Google sur un autre PC&#8230;.<br />
Troisième et dernier point : rien trouvé. Je m&rsquo;en passerai. Quand on ferme un onglet par erreur, on peut facilement le rouvrir.</p>
<p>Je ne dis rien sur les options de navigation : ouverture et placement des onglets car il y a longtemps que j&rsquo;ai arrêté de bidouiller tout ça. Je m&rsquo;adapte au logiciel. Avec chrome, ça ouvre un onglet juste à droite de l&rsquo;onglet courant. Bon, soit.</p>
<h2>Easy Youtube Video Downloader => <a href="http://www.chromeextensions.org/music-videos-photos/fastesttube/" title="FastestTube" target="_blank">FastestTube</a></h2>
<p>Ca marche, point. Intégration pareil : une liste déroulante sous la vidéo.<br />
Je n&rsquo;ai pas regardé d&rsquo;outils multi-site (dailymotion &#038; co)</p>
<h2>FireBug => ?</h2>
<p>Rien vu vite fait, à part que le bouton droit sur un élément puis &laquo;&nbsp;Inspect&nbsp;&raquo; sort déjà pas mal de choses. Au pire, vu les rares fois où j&rsquo;ai besoin de FireBug, je lancerai mon bon vieux &laquo;&nbsp;Firefox 27.2 pro limited edition&nbsp;&raquo;</p>
<h2>Nouveau : <a href="https://chrome.google.com/webstore/detail/khpcanbeojalbkpgpmjpdkjnkfcgfkhb?hl=fr" title="Chromium Wheel Smooth Scroller" target="_blank">Chromium Wheel Smooth Scoller</a></h2>
<p>Tombé dessus par hasard, c&rsquo;est vrai que le scroll à la souris est bien plus fluide. J&rsquo;adopte.</p>
<h2>Nouveau : <a href="https://chrome.google.com/webstore/detail/nlbjncdgjeocebhnmkbbbdekmmmcbfjd" title="Abonnement RSS" target="_blank">Abonnement RSS</h2>
<p>Ca rajoute l&rsquo;icone lorsqu&rsquo;un flux RSS est détecté sur une page, comme Firefox à une époque.</p>
<h2>Nouveau : <a href="https://chrome.google.com/webstore/detail/mmffncokckfccddfenhkhnllmlobdahm" title="FastestChrome" target="_blank">FastestChrome</a></h2>
<p>Sensé accélérer le chargement, précharger des pages, faire la cuisine etc. On me l&rsquo;a recommandé, j&rsquo;ai installé mais je verrai plus tard</p>
<p>Voilà pour ce tour d&rsquo;horizon rapide. Yapuka ne pas être déçu maintenant.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/migration-de-firefox-vers-chrome-des-annees-apres-sa-sortie-1258/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ampache, debian et le flash-pas-libre</title>
		<link>http://michauko.org/blog/ampache-debian-et-le-flash-pas-libre-1256/</link>
		<comments>http://michauko.org/blog/ampache-debian-et-le-flash-pas-libre-1256/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 13:02:57 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[ampache]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1256</guid>
		<description><![CDATA[Le lecteur flash incorporé à Ampache n&#8217;est pas dans le paquet officiel de Debian, pas compatible avec le DFSG. Bref. Pour l&#8217;ajouter, dézipper le contenu du sous-répertoire xspf jukebox de ce fichier ZIP (http://lacymorrow.com/projects/jukebox/source.zip) dans /usr/share/ampache/www/modules/flash et le lecteur flash incorporé fonctionnera.]]></description>
				<content:encoded><![CDATA[<p>Le lecteur flash incorporé à Ampache n&rsquo;est pas dans le paquet officiel de Debian, pas compatible avec le DFSG. Bref.<br />
Pour l&rsquo;ajouter, dézipper le contenu du sous-répertoire <code>xspf jukebox</code> de ce fichier ZIP (http://lacymorrow.com/projects/jukebox/source.zip) dans <code>/usr/share/ampache/www/modules/flash</code> et le lecteur flash incorporé fonctionnera.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/ampache-debian-et-le-flash-pas-libre-1256/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagios et contrôle du nombre de processus d&#8217;un Windows</title>
		<link>http://michauko.org/blog/nagios-et-controle-du-nombre-de-processus-dun-windows-1252/</link>
		<comments>http://michauko.org/blog/nagios-et-controle-du-nombre-de-processus-dun-windows-1252/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 07:05:40 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[supervision]]></category>
		<category><![CDATA[check_nt]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[NSClient++]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1252</guid>
		<description><![CDATA[Truc bête en vitesse : comment contrôler le plus simplement possible le nombre de processus d&#8217;une machine windows depuis Nagios ? J&#8217;ai trouvé plein de scripts en SNMP, assez lourdingue à mettre en place, ça ne me plaisait pas. Puis en relisant la doc de la commande &#171;&#160;check_nt&#160;&#187; (nécessitant un client NSClient++ en face), je [...]]]></description>
				<content:encoded><![CDATA[<p>Truc bête en vitesse : comment contrôler le plus simplement possible le nombre de processus d&rsquo;une machine windows depuis Nagios ?<br />
J&rsquo;ai trouvé plein de scripts en SNMP, assez lourdingue à mettre en place, ça ne me plaisait pas.<br />
Puis en relisant la doc de la commande &laquo;&nbsp;check_nt&nbsp;&raquo; (nécessitant un client NSClient++ en face), je suis tombé sur l&rsquo;option &laquo;&nbsp;COUNTER&nbsp;&raquo;. Alors voilà, à conserver dans un coin de tête :<br />
<code>/usr/lib/nagios/plugins/check_nt -H srv_windows -v COUNTER -p 12489 -l "\\Objects\Processes" -w 120 -c 150</code></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/nagios-et-controle-du-nombre-de-processus-dun-windows-1252/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>scp et SSH en PHP</title>
		<link>http://michauko.org/blog/scp-et-ssh-en-php-1244/</link>
		<comments>http://michauko.org/blog/scp-et-ssh-en-php-1244/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:36:49 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[pecl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssh2.so]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1244</guid>
		<description><![CDATA[Hop, J&#8217;ai eu besoin de faire un script un peu évolué pour jouer avec une base Oracle et des fichiers à ramener depuis un serveur distant. Bref, j&#8217;ai pensé au PHP pour faire un truc assez fin, mêlant Oracle et des transferts de fichiers en &#171;&#160;scp&#160;&#187;. Seule difficulté, installer le module SSH pour PHP. Ce [...]]]></description>
				<content:encoded><![CDATA[<p>Hop,<br />
J&rsquo;ai eu besoin de faire un script un peu évolué pour jouer avec une base Oracle et des fichiers à ramener depuis un serveur distant.<br />
Bref, j&rsquo;ai pensé au PHP pour faire un truc assez fin, mêlant Oracle et des transferts de fichiers en &laquo;&nbsp;scp&nbsp;&raquo;.</p>
<p>Seule difficulté, installer le module SSH pour PHP. Ce que je décris ici.<br />
Ensuite, les bouts de codes exemple sont sur <a href="http://www.php.net/manual/fr/book.ssh2.php" target="_blank">la doc de PHP</a>.</p>
<h1>Côté serveur Debian</h1>
<p>J&rsquo;étais parti de l&rsquo;installation PECL directement, ça plante, il manquait des petits bouts côté Debian<span id="more-1244"></span>. Je montre pour l&rsquo;exemple :</p>
<pre>srv:~# pecl install ssh2 "channel://pecl.php.net/ssh2-0.11.2"
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.11.2, stability "beta", use "channel://pecl.php.net/ssh2-0.11.2" to install
downloading ssh2-0.11.2.tgz ...
Starting to download ssh2-0.11.2.tgz (22,740 bytes)
........done: 22,740 bytes
[...]
checking for ssh2 files in default path... not found
configure: error: The required libssh2 library was not found.  You can obtain that package from http://sourceforge.net/projects/libssh2/
ERROR: `/tmp/pear/temp/ssh2/configure --with-ssh2' failed
</pre>
<p>Donc, il faut d&rsquo;abord installer tout ça :</p>
<pre>srv:~# apt-cache search libssh2
libnet-ssh2-perl - Perl module for the SSH 2 protocol
libssh2-1-dbg - SSH2 client-side library (debug package)
libssh2-1-dev - SSH2 client-side library (development headers)
libssh2-1 - SSH2 client-side library
libssh2-php - PHP Bindings for libssh2
python-libssh2 - Python binding for libssh2 library

srv:~# aptitude install libssh2-1-dev libssh2-php</pre>
<h1>Installation du module avec PECL</h1>
<p>On peut donc enfin installer le module :</p>
<pre>srv:~# pecl install ssh2 "channel://pecl.php.net/ssh2-0.11.2"
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.11.2, stability "beta", use "channel://pecl.php.net/ssh2-0.11.2" to install
[...]
Build process completed successfully
Installing '/usr/lib/php5/20090626+lfs/ssh2.so'
install ok: channel://pecl.php.net/ssh2-0.11.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=ssh2.so" to php.ini
aladdin:~# grep extension /etc/php5 -r
/etc/php5/conf.d/gd.ini:extension=gd.so
/etc/php5/conf.d/ssh2.ini:extension=ssh2.so
/etc/php5/conf.d/snmp.ini:extension=snmp.so</pre>
<p>L&rsquo;installation se charge toute seule d&rsquo;activer l&rsquo;extension ssh2.so dans les fichiers de conf PHP.</p>
<h1>Exemple de code d&rsquo;un transfert</h1>
<pre>define ("SSH_KEY","/path/to/.ssh/id_dsa");
define ("SSH_FINGERPRINT","BXXXXXXXXXXXXXXXXXXXXXX81"); # à récupérer la première fois
...
$ssh = ssh2_connect(SSH_SERVER,SSH_PORT);
if (ssh2_fingerprint ($ssh,SSH2_FINGERPRINT_MD5) != SSH_FINGERPRINT) { # bien penser à contrôler le fingerprint ; c'est dommage de s'en priver !
  echo "c'est mal";
}
if (!ssh2_auth_pubkey_file($ssh, SSH_LOGIN, SSH_KEY.".pub", SSH_KEY, '')) {
  echo "authentif par clef ratée";
}
...
if (@ssh2_scp_recv ($ssh, $fich_src, $fich_dest)) {
  echo "transfert OK";
}
...
</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/scp-et-ssh-en-php-1244/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mailing-lists multi-domaine avec mailman sur un postfix &#171;&#160;virtuel&#160;&#187; (mysql)</title>
		<link>http://michauko.org/blog/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql-1210/</link>
		<comments>http://michauko.org/blog/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql-1210/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 13:43:54 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[add_members]]></category>
		<category><![CDATA[list_lists]]></category>
		<category><![CDATA[mailman]]></category>
		<category><![CDATA[newlist]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postfix-mysql]]></category>
		<category><![CDATA[rmlist]]></category>
		<category><![CDATA[sympa]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1210</guid>
		<description><![CDATA[Nouvel article pour compléter tous ceux sur l&#8217;installation d&#8217;un serveur de mails bien complet (voir ces tags). Cette fois il s&#8217;agit d&#8217;ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc. Bref, au choix, je pensais à &#171;&#160;sympa&#160;&#187; (dont j&#8217;ai déjà un peu parlé) ou mailman, que je ne connaissais pas. &#171;&#160;sympa&#160;&#187; en [...]]]></description>
				<content:encoded><![CDATA[<p>Nouvel article pour compléter tous ceux sur l&rsquo;installation d&rsquo;un serveur de mails bien complet (voir <a href="http://michauko.org/blog/?s=virtuel+postfix" target="_blank">ces tags</a>).<br />
Cette fois il s&rsquo;agit d&rsquo;ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc.<br />
Bref, au choix, je pensais à &laquo;&nbsp;sympa&nbsp;&raquo; (<a href="http://michauko.org/blog/tag/sympa/" target="_blank">dont j&rsquo;ai déjà un peu parlé</a>) ou mailman, que je ne connaissais pas.</p>
<ul>
<li>
&laquo;&nbsp;sympa&nbsp;&raquo; en mode multi-domaine, arrêtez-moi si je me trompe, sur une installation postfix &laquo;&nbsp;virtuelle&nbsp;&raquo; (utilisateurs en base MySQL), c&rsquo;était loin d&rsquo;être gagné. Mal documenté à mon goût sur la partie multi-domaine.
</li>
<li>
&laquo;&nbsp;mailman&nbsp;&raquo; semblait pouvoir faire tout ça, avec une interface web (et ligne de commande) assez ancestrale, mais suffisante, efficace et qui marche <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
</ul>
<p>Deux points de détails à bien regarder, qui m&rsquo;ont fait faire cet article afin de ne pas oublier tout ça et que ça puisse resservir :</p>
<ul>
<li>
l&rsquo;interconnexion de mailman avec la partie Mysql de postfix
</li>
<li>
le multi-domaine, afin de pouvoir gérer des listes genre liste1@domaine1.fr et liste2@domaine2.com, ces 2 domaines étant hébergés sur la même machine, la même installation postfix
</li>
</ul>
<p>Allez hop, c&rsquo;est parti pour l&rsquo;installation et les détails de configuration.<br />
Voyez d&rsquo;abord mes articles sur l&rsquo;installation complète <a href="http://michauko.org/blog/?s=postfix" target="_blank">postfix/mysql/amavis/spamassassin</a>/etc histoire de situer de quoi je parle.<span id="more-1210"></span></p>
<h1>Contexte</h1>
<p>On installe ça sur une Debian Squeeze, appelée &laquo;&nbsp;monserveur.fr&nbsp;&raquo; ayant plusieurs noms de domaine : &laquo;&nbsp;serveur.fr&nbsp;&raquo; et aussi &laquo;&nbsp;autredomaine.fr&nbsp;&raquo;<br />
On voudra créer des mailing-lists sur l&rsquo;un ou l&rsquo;autre des domaines.</p>
<h1>Installation</h1>
<h2>aptitude</h2>
<p>J&rsquo;ai préféré opter pour la version packagée plutôt que la dernière version officielle en .tar.gz, histoire de simplifier les migrations de Debian. Ca commence comme bien souvent :</p>
<pre>monserveur:~# aptitude install mailman
Les NOUVEAUX paquets suivants vont être installés :
  mailman
0 paquets mis e jour, 1 nouvellement installés, 0 e enlever et 0 non mis e jour.
Il est nécessaire de télécharger 9 642 ko d'archives. Après dépaquetage, 44,3 Mo seront utilisés.
Prendre : 1 ftp://ftp.fr.debian.org/debian/ squeeze/main mailman amd64 1:2.1.13-5 [9 642 kB]
 9 642 ko téléchargés en 1s (8 576 ko/s)
Lecture des champs des paquets... Fait
Lecture de l'état des paquets... Fait
Récupération des rapports de bogue... Fait
Analyse des informations Trouvé/Corrigé... Fait
Bogues de gravité serious sur mailman (-> 1:2.1.13-5) <non corrigé>
 #611804 - Astonishing header mangling
Résumé :
 mailman(1 bogue)
Êtes-vous certain de vouloir installer/mettre e jour les paquets ci-dessus ? [Y/n/?/...]
Préconfiguration des paquets...
Sélection du paquet mailman précédemment désélectionné.
(Lecture de la base de données... 57308 fichiers et répertoires déje installés.)
Dépaquetage de mailman (e partir de .../mailman_1%3a2.1.13-5_amd64.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de mailman (1:2.1.13-5) ...
Looking for enabled languages (this may take some time) ... done.
Installing site language en ............................................ done.
Configuring mailman for domain monserveur.fr ...
Mise e jour de la version 0x0 vers 0x2010df0
suppression des anciens fichiers sources
Mise e jour de la liste de diffusion mailman
Mise e jour de la base de donnees des requetes en attente.
- mise e jour de l'ancien fichier mbox prive
Rien e faire.
- Mise e jour de l'ancien fichier mbox public
Rien e faire.
Reparation des modeles de langue : mailman

Mise e jour des filigranes Usenet
- rien e mettre e jour ici
Rien e faire.
mise e jour des anciens fichiers qfiles
Starting Mailman master qrunner: mailmanctl.</pre>
<p>Un seul écran à noter :</p>
<pre>
Pas de liste du site                                                                                                                                                      ¦
  ¦                                                                                                                                                                           ¦
  ¦ Mailman a besoin d'une liste du site (« site list »). Elle permet d'envoyer les rappels pour les mots de passe, etc. Elle doit être créée avant le lancement de Mailman.  ¦
  ¦                                                                                                                                                                           ¦
  ¦ Pour créer cette liste, exécuter « newlist mailman » et suivez les instructions qui apparaissent e l'écran. Il est ensuite nécessaire de redémarrer mailman avec la       ¦
  ¦ commande « /etc/init.d/mailman start ».</pre>
<p>L&rsquo;installation créera cette liste de diffusion appelée &laquo;&nbsp;mailman&nbsp;&raquo; (et j&rsquo;avoue que je ne comprends pas son utilité&#8230;)</p>
<h2>permissions</h2>
<p>Il faut vérifier/adapter les permissions qui ne semblent pas bonnes après installation :</p>
<pre>monserveur:~# check_perms
Les repertoires doivent etre au moins en 02775 : /var/lib/mailman/logs
Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl/LC_MESSAGES
Problemes trouves : 84
Re-executer en tant que list (ou root) avec l'option -f pour reparer</pre>
<p>On execute la même commande avec le paramètre <code>-f</code> et on recontrôle :</p>
<pre>Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Problemes trouves : 10</pre>
<p>MAIS : il s&rsquo;agit de liens symboliques et l&rsquo;outil contrôle les permissions des liens, pas des fichiers visés. Bref, c&rsquo;est bon.</p>
<h2>Conf mailman</h2>
<p><em>Une partie de la doc d&rsquo;installaiton est dans <code>/usr/lib/mailman/bin/postfix-to-mailman.py</code> qui est un lien vers <code>/etc/mailman/postfix-to-mailman.py</code>. Attention, cette doc doit être transposée au contexte &laquo;&nbsp;serveur virtuel avec conf en MySQL&nbsp;&raquo; &#8211; ce que je fais dans cet article.<br />
</em><br />
Dans <code>/etc/mailman/mm_cfg.py</code>, j&rsquo;adapte ces paramètres là :<br />
DEFAULT_SERVER_LANGUAGE = &lsquo;fr&rsquo;<br />
MTA=&rsquo;Postfix&rsquo;</p>
<h2>Codes d&rsquo;accès à mailman</h2>
<p>Remarque :<br />
<em>&laquo;&nbsp;mailman&nbsp;&raquo; peut s&rsquo;utiliser en ligne de commande, voir la liste des commandes possibles (éventuellement pratique pour scripter) : <code>dpkg -L mailman | grep bin</code>. Ca permet de découvrir la liste des outils : rmlist, list_lists, add_members, newlist etc&#8230;<br />
</em><br />
L&rsquo;accès à l&rsquo;interface mailman ne se fait pas avec un identifiant et un mot de passe, mais juste avec un mot de passe.<br />
Pour créer des &laquo;&nbsp;comptes&nbsp;&raquo; de la sorte, c&rsquo;est l&rsquo;outil <code>mmsitepass</code>.</p>
<h2>Conf apache</h2>
<p>Par défaut, le script mailman d&rsquo;interface web est accessible sur <code>http://votre.serveur/cgi-bin/mailman/admin/</code>. Si vous n&rsquo;aimez pas les répertoires standards, vous pouvez adapter le fichier <code>/etc/mailman/apache.conf</code> en adaptant <code>/cgi-bin/mailman/</code> et <code>/pipermail/</code> et en conséquence le fichier <code>/etc/mailman/postfix-to-mailman.py</code>, paramètres <code>DEFAULT_URL_PATTERN</code> et <code>PRIVATE_ARCHIVE_URL</code>.</p>
<h1>Configuration postfix</h1>
<h2>&laquo;&nbsp;pipe&nbsp;&raquo; postfix : interface postfix <-> binaires mailman</h2>
<p>En fait, tout est déjà OK à la base &#8211; avant même l&rsquo;installation de mailman !. C&rsquo;est marrant ça, l&rsquo;outil doit être bien ancré dans le monde UNIX&#8230;</p>
<pre>monserveur:~# grep mailman /etc/postfix/*
/etc/postfix/master.cf:mailman   unix  -       n       n       -       -       pipe
/etc/postfix/master.cf:  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py</pre>
<p>On voir qu&rsquo;on a un canal de communication &laquo;&nbsp;mailman&nbsp;&raquo; qui renvoie vers un script python qui fera le boulot</p>
<h2>transport : interface postfix <-> &laquo;&nbsp;pipe&nbsp;&raquo;</h2>
<p>Dans ma table &laquo;&nbsp;transport&nbsp;&raquo; (voir <a href="http://michauko.org/blog/2009/10/20/postfix-utilisateurs-virtuels-mysql-acces-pop3s-imaps-sasl-et-tls-quota-bingo-jai-tout-mis-dans-le-titre/" target="_blank">cet article</a>), j&rsquo;ajoute :</p>
<pre>insert into transport values ('list.serveur.fr','mailman'),('list.autredomaine.fr','mailman');</pre>
<p>Ceci prépare le terrain : si on écrit à une adresse @list.serveur.fr ou @list.autredomaine.fr (comme je disais au début de la doc), alors postfix passera le relai au &laquo;&nbsp;pipe&nbsp;&raquo; nommé &laquo;&nbsp;mailman&nbsp;&raquo; (issu du <code>master.cf</code> de <code>postfix</code>), donc aux scripts mailman.<br />
Rien de nécessaire dans la table &laquo;&nbsp;domains&nbsp;&raquo; ; comme pour le répondeur vacation (<a href="http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/" target="_blank">voir précédent article</a>).</p>
<h2>Multi-domaine</h2>
<p>J&rsquo;ai déclaré ceci dans le fichier <code>/etc/mailman/mm_cfg.py</code> :</p>
<pre>add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
add_virtualhost('list.serveur.fr','monserveur.fr')
add_virtualhost('list.autredomaine.fr','monserveur.fr')</pre>
<p>Pour gérer le multi-domaine, c&rsquo;est aussi simple que ça (et les bons transports SQL). J&rsquo;y reviendrai un peu plus tard tout de même.</p>
<h2>main.cf</h2>
<p>La doc dit d&rsquo;ajouter <code>mailman_destination_recipient_limit=1</code> dans <code>/etc/postfix/main.cf</code> ; soit.</p>
<h1>Relance de tout ça</h1>
<pre>reload apache
restart mailman
reload postfix</pre>
<p>Rien dans amavis, comme pour les répondeurs vacation</p>
<h1>Créer une liste</h1>
<p>On veut créer une liste &laquo;&nbsp;mesabonnes@serveur.fr&nbsp;&raquo;.</p>
<h2>Au niveau SQL</h2>
<p>On déclare tout ça :</p>
<pre>insert into forwardings values ('mesabonnes-admin@serveur.fr','mesabonnes-admin@list.serveur.fr');
insert into forwardings values ('mesabonnes-bounces@serveur.fr','mesabonnes-bounces@list.serveur.fr');
insert into forwardings values ('mesabonnes-confirm@serveur.fr','mesabonnes-confirm@list.serveur.fr');
insert into forwardings values ('mesabonnes-join@serveur.fr','mesabonnes-join@list.serveur.fr');
insert into forwardings values ('mesabonnes-leave@serveur.fr','mesabonnes-leave@list.serveur.fr');
insert into forwardings values ('mesabonnes-owner@serveur.fr','mesabonnes-owner@list.serveur.fr');
insert into forwardings values ('mesabonnes-request@serveur.fr','mesabonnes-request@list.serveur.fr');
insert into forwardings values ('mesabonnes-subscribe@serveur.fr','mesabonnes-subscribe@list.serveur.fr');
insert into forwardings values ('mesabonnes-unsubscribe@serveur.fr','mesabonnes-unsubscribe@list.serveur.fr');</pre>
<p>Et bien sûr :</p>
<pre>insert into forwardings values ('mesabonnes@serveur.fr','mesabonnes@list.serveur.fr');</pre>
<p>C&rsquo;est bien ici qu&rsquo;on voit comment le lien entre la liste et mailman est fait : les adresses sont renvoyées vers un domaine bidon (pas nécessaire de le déclarer dans un DNS, c&rsquo;est interne à postfix), domaine pour lequel un &laquo;&nbsp;transport&nbsp;&raquo; particulier est créé afin d&rsquo;envoyer le courrier vers le pipe unix => script mailman.</p>
<h2>Enfin, au niveau de mailman</h2>
<p>En tant que root, <code>newlist mesabonnes</code>. On met un responsable de la liste et un code d&rsquo;accès.</p>
<h2>Administration de la liste par le web (hors ligne de commande, donc)</h2>
<p>L&rsquo;outil principal listant toutes les listes est là : <code>http://serveur.fr/cgi-bin/mailman/admin/</code> si vous n&rsquo;avez pas changé les adresses. Une fois une liste sélectionnée, on obtient l&rsquo;interface suivante :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2011/06/mailman.png"><img src="http://michauko.org/blog/wp-content/uploads/2011/06/mailman-300x98.png" alt="interface mailman" title="interface mailman" width="300" height="98" class="aligncenter size-medium wp-image-1226" /></a><br />
Ensuite, c&rsquo;est le festival des options.<br />
Il faut bien les lire une fois et noter celles qui vous intéressent : masquer l&rsquo;expéditeur, limiter la taille des messages, fixer les règles de modération, éviter les doublons (lorsqu&rsquo;une personne de la liste répond à la liste, doit-elle recevoir le mail, simplement un accusé ?), Il y a des outils pour abonner des gens en masse (sans les prévenir ou en les prévenant) etc etc.<br />
La seule chose que je vais mentionner, par rapport au multi-domaine, c&rsquo;est l&rsquo;option &laquo;&nbsp;Le nom d&rsquo;hôte préféré par cette liste de diffusion pour le courriel.&nbsp;&raquo; du menu &laquo;&nbsp;[Options Générales]&nbsp;&raquo; afin d&rsquo;indiquer le vrai serveur sous lequel est utilisé la liste : serveur.fr et pas autredomaine.fr dans l&rsquo;exemple.</p>
<p>Voilà, normalement ça marche <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Remarques</h1>
<h2>multi-domaine</h2>
<p>On a vu rapidement que le multi-domaine marchait facilement : les transports dans la table SQL + quelques lignes dans mm_cfg.py et les alias qui vont bien.<br />
MAIS : l&rsquo;identifiant de la liste ne tient pas compte du nom de serveur. Donc les noms devront être différents d&rsquo;un domaine à l&rsquo;autre (je suppose), impossible donc d&rsquo;avoir liste1@serveur.fr et liste1@autredomaine.fr pointant vers la même installation mailman.<br />
On peut imaginer plein d&rsquo;autres méthodes pour contourner ça. J&rsquo;en mentionne une car je l&rsquo;ai testée et la contrainte d&rsquo;avoir des noms différents ne me gêne pas.<br />
Je peux passer par des noms de listes intermédiaires pour éviter les problèmes, exemple :<br />
- liste1@serveur.fr ==forward==> interne_liste1@list.monserveur.fr<br />
- liste1@autredomaine.fr == forward ==> interne_liste2@list.monserveur.fr<br />
Et donc avoir déclaré avec &laquo;&nbsp;newlist&nbsp;&raquo; les listes interne_liste1/2<br />
Ca marche. Sauf que mailman considère qu&rsquo;il y a une forme de redirection et tous les messages sont soumis à modération (même pour une liste non modérée) pour signaler à l&rsquo;administrateur que quelqu&rsquo;un a fait un alias de cette liste.<br />
Ici on s&rsquo;en fout, mais imaginons que quelqu&rsquo;un crée un simple alias &laquo;&nbsp;labandedabrutis@cabalance.fr&nbsp;&raquo; pointant vers votre liste, la bande d&rsquo;abrutis en question sera ravie de ne pas être connue sous ce nom là&#8230;</p>
<h2>lien avec spamassassin</h2>
<p>Je n&rsquo;ai pas cherché longtemps, c&rsquo;est bien fait de base (sûrement un paramétrage &#8211; ou l&rsquo;ordre ? &#8211; qui va bien dans <code>/etc/postfix/master.cf</code>) qui fait que le mail passe par toute la chaîne amavis/spamassassin/clamav. Ca se voit nettement dans les logs.</p>
<h2>générer les alias facilement</h2>
<p>Utilisez ce script :</p>
<pre>#!/bin/bash
if test -z $1
then
        echo Usage: $0 liste serveur
        exit -1
fi
if test -z $2
then
        echo Usage: $0 liste serveur
        exit -1
fi

for i in admin bounces confirm join leave owner request subscribe unsubscribe
do
        echo insert into forwardings values \(\'$1-$i@$2\',\'$1-$i@list.$2\'\)\;
done
echo insert into forwardings values \(\'$1@$2\',\'$1@list.$2\'\)\;</pre>
<p>Voilà, c&rsquo;est complet je pense. Amusez-vous bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql-1210/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>windows 7 : donner quelques permissions sur les services à un utilisateur non-admin</title>
		<link>http://michauko.org/blog/windows-7-donner-quelques-permissions-sur-les-services-a-un-utilisateur-non-admin-1205/</link>
		<comments>http://michauko.org/blog/windows-7-donner-quelques-permissions-sur-les-services-a-un-utilisateur-non-admin-1205/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 18:50:35 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[PS3]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[elevate]]></category>
		<category><![CDATA[PS3mediaserver]]></category>
		<category><![CDATA[setacl]]></category>
		<category><![CDATA[seven]]></category>
		<category><![CDATA[subinacl]]></category>
		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1205</guid>
		<description><![CDATA[Bon, ce fut long et pénible pour réussir à faire un truc simple avec ce joli Windows Seven : &#171;&#160;permettre à un utilisateur sans droit de relancer un service&#160;&#187;, en l&#8217;occurrence &#171;&#160;PS3 Media Server&#160;&#187; que je tente d&#8217;héberger sur un Windows plutôt qu&#8217;un Linux pour de sombres raisons. Donc je me fais un aide-mémoire qui [...]]]></description>
				<content:encoded><![CDATA[<p>Bon, ce fut long et pénible pour réussir à faire un truc simple avec ce joli Windows Seven : &laquo;&nbsp;permettre à un utilisateur sans droit de relancer un service&nbsp;&raquo;, en l&rsquo;occurrence &laquo;&nbsp;PS3 Media Server&nbsp;&raquo; que je tente d&rsquo;héberger sur un Windows plutôt qu&rsquo;un Linux pour de sombres raisons. Donc je me fais un aide-mémoire qui servira à d&rsquo;autres et à d&rsquo;autres cas similaires j&rsquo;en suis sûr.<br />
Bien sûr, hors de question de faire sauter l&rsquo;UAC (User Access Control = popup casse-pied pour dire &laquo;&nbsp;oui je veux être admin&nbsp;&raquo;) et encore moins donner les droits admin à un compte qui ne l&rsquo;est pas, ni le pass de l&rsquo;admin. Juste pour rallumer un service, ce serait trop.<span id="more-1205"></span></p>
<h1>Quelques pistes sans succès</h1>
<p>Pour ce qui est de faire un .bat contenant des &laquo;&nbsp;service stop/start MonService&nbsp;&raquo;, il faut être admin.<br />
Pour l&rsquo;option qui consiste à cocher la case &laquo;&nbsp;toujours lancer en admin&nbsp;&raquo; ? non, pas sur les .bat&#8230;<br />
Alors je le le compile en .exe avec n&rsquo;importe quel &laquo;&nbsp;bat2exe&nbsp;&raquo; ? bah non, le .exe n&rsquo;est pas signé par une autorité de certif. reconnue => blablablabla UAC encore<br />
Ok, je génère mes propres &laquo;&nbsp;root certif&nbsp;&raquo;, signe, compile, danse nu un soir de pleine lune et tout ça ??? non là c&rsquo;est trop (pas la danse, la génération/ajout de mes propres clefs de certifs). Je dégomme pas les mouches au bazooka.<br />
Bon, retour à l&rsquo;option .bat. Les gens parlent de créer une tâche planifiée contenant l&rsquo;appel à ce .bat, avec l&rsquo;option admin puis faire un raccourci vers la tâche. Ca marche, pas de confirmation via l&rsquo;UAC. Sauf que les tâches sont liées à l&rsquo;utilisateur. Donc mon utilisateur sans droit ne la voit pas&#8230; La planifier en son nom ou l&rsquo;inverse (dans son compte, planifier avec le compte et mot de passe de l&rsquo;admin), pas mieux.<br />
J&rsquo;ai aussi tenté l&rsquo;utilisation d&rsquo;un outil tiers, appelé &laquo;&nbsp;elevate&nbsp;&raquo;, pour lancer une commande avec des droits supérieurs. Oui, mais non, pour le non-admin, ça change rien, il faut obtenir ce droit, donc se signer.<br />
Bref, c&rsquo;est lourd.</p>
<h1>The solution : SubInACL</h1>
<p><a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&#038;displaylang=en">Chez Microsoft, il y a un bout de Resource Kit, la commande SubInACL.exe</a>. Elle permet de manipuler les permissions de n&rsquo;importe quel objet : fichiers, imprimantes, services etc. Youpiiii.<br />
La syntaxe est bien moisie, mais ça marche.<br />
Il faut :</p>
<ul>
<li>
<strong>Lancer une fenêtre DOS &laquo;&nbsp;en tant qu&rsquo;administrateur&nbsp;&raquo;</strong>
</li>
<li>
Taper la commande suivante (dans mon cas, lire la doc pour le reste) :<br />
<code>C:\Program Files\Windows Resource Kits\Tools>subinacl /service "PS3 Media Server" /GRANT=MAMACHINE\monutilisateursansdroit=TO</code><br />
la liste des codes est ici : <a href="http://www.eventlogblog.com/blog/2007/11/setting-service-permissions-wi.html">http://www.eventlogblog.com/blog/2007/11/setting-service-permissions-wi.html</a>
</li>
<li>
Réaliser que je ne sais quel droit générique de l&rsquo;admin tombe du coup. Je me suis retrouvé avec tout le monde capable de relancer ce service SAUF l&rsquo;admin <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &lsquo;suffit d&rsquo;appliquer la commande à lui-même
</li>
</ul>
<p>Et voilà</p>
<h1>Autre piste : SETACL</h1>
<p>Lorsque j&rsquo;ai essayé avec setacl, ça ne fonctionnait pas. Je n&rsquo;avais pas compris qu&rsquo;il fallait lancer la fenêtre DOS en admin, à ce moment là, comme je l&rsquo;ai fait pour SubInACL. Je pense que le problème venait de là. La syntaxe donnait un truc comme ça :<br />
<code>setacl -on "PS3 Media Server" -ot srv -ace "n:monutilisateursansdroit;p:start_stop,read" -actn ace</code></p>
<p>Voilà. Evidemment, un petit sudo, ce serait quand même plus simple. Mais avec un OS qui ne sait rien faire de base en ligne de commande&#8230; Ah quoi que, peut-être avec du powershell etc&#8230; Il aurait bien fallu une 20aine de ligne de baratin pour y arriver à mon avis.<br />
Amusez-vous bien.<br />
Ah oui, à la fin, un .bat tout bête faisant un net stop/start &laquo;&nbsp;PS3 Media Server&nbsp;&raquo; passe donc tout seul.</p>
<p>Ca doit marcher sous Vista aussi, voire Windows Server 2008.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/windows-7-donner-quelques-permissions-sur-les-services-a-un-utilisateur-non-admin-1205/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dépôts (repositories) Debian/Squeeze</title>
		<link>http://michauko.org/blog/depots-repositories-debiansqueeze-1200/</link>
		<comments>http://michauko.org/blog/depots-repositories-debiansqueeze-1200/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 07:10:31 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[/etc/apt/sources.list]]></category>
		<category><![CDATA[lenny]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[squeeze]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1200</guid>
		<description><![CDATA[Hop, Ca ne vous aura sûrement pas échappé, mais Debian a sorti sa nouvelle version majeure. Bye bye &#171;&#160;Lenny&#160;&#187;, bonjour &#171;&#160;Squeeze&#160;&#187;. Au passage, un changement important : le dépôt &#171;&#160;volatile&#160;&#187; n&#8217;existe plus, il est remplacé par une une branche squeeze-updates. Rappel : le dépôt &#171;&#160;volatile&#160;&#187; contient les mises à jour des paquets ne pouvant pas [...]]]></description>
				<content:encoded><![CDATA[<p>Hop,<br />
Ca ne vous aura sûrement pas échappé, mais Debian a sorti sa nouvelle version majeure. Bye bye &laquo;&nbsp;Lenny&nbsp;&raquo;, bonjour &laquo;&nbsp;Squeeze&nbsp;&raquo;.</p>
<p>Au passage, un changement important : le dépôt &laquo;&nbsp;volatile&nbsp;&raquo; n&rsquo;existe plus, il est remplacé par une une branche squeeze-updates.<br />
<strong>Rappel </strong>: le dépôt &laquo;&nbsp;volatile&nbsp;&raquo; contient les mises à jour des paquets ne pouvant pas attendre une nouvelle version Debian tous les 2 ou 3 ans <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Exemples : protocoles des clients de messagerie instantanée, outillage anti-spam etc.<br />
Alors je résume ici ce que doit être un fichier minimum correct de listes de dépôts pour Squeeze, fichier <code>/etc/apt/sources.list</code> :</p>
<pre>deb ftp://ftp.fr.debian.org/debian/ squeeze main contrib  non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
# avant squeeze : deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb ftp://ftp.fr.debian.org/debian/ squeeze-updates main contrib  non-free
#optionnel :
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
</pre>
<p>Merci à toute l&rsquo;équipe Debian, nous leur devons une reconnaissance éééééternelle <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/depots-repositories-debiansqueeze-1200/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>spamassassin : rulesemporium est mort</title>
		<link>http://michauko.org/blog/spamassassin-rulesemporium-est-mort-1194/</link>
		<comments>http://michauko.org/blog/spamassassin-rulesemporium-est-mort-1194/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 11:05:42 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[anti-spam]]></category>
		<category><![CDATA[rulesemporium]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1194</guid>
		<description><![CDATA[Hop, Je n&#8217;avais pas vu le truc avant qu&#8217;une mise à jour spamassassin me remonte une alerte, mais le site RulesEmporium a fermé. Plus d&#8217;activité, soit. Mais d&#8217;avoir supprimé le contenu, c&#8217;est dommage je trouve. Bon bref, toujours est-il que j&#8217;ai de nouveau un petit bout de l&#8217;outil de détection des textes &#171;&#160;cachés&#160;&#187; dans les [...]]]></description>
				<content:encoded><![CDATA[<p>Hop,<br />
Je n&rsquo;avais pas vu le truc avant qu&rsquo;une mise à jour spamassassin me remonte une alerte, mais le site RulesEmporium a fermé. Plus d&rsquo;activité, soit. Mais d&rsquo;avoir supprimé le contenu, c&rsquo;est dommage je trouve.<br />
Bon bref, toujours est-il que j&rsquo;ai de nouveau un petit bout de l&rsquo;outil de détection des textes &laquo;&nbsp;cachés&nbsp;&raquo; dans les images (spam viagra &#038; co) qui ne fonctionne plus.<br />
D&rsquo;ici à trouver quelque chose d&rsquo;autre, je laisse en plan et je supprime simplement les quelques règles de détection impactées.<span id="more-1194"></span><br />
Le symptôme est le suivant, issu d&rsquo;un <code>spamassassin --lint -D</code>, on obtient :</p>
<blockquote><p>
[30926] warn: rules: failed to run CG_FUJI_JPG test, skipping:<br />
[30926] warn:  (Can&rsquo;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 856.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_DOUBLEDOT_GIF test, skipping:<br />
[30926] warn:  (Can&rsquo;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 986.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_SONY_JPG test, skipping:<br />
[30926] warn:  (Can&rsquo;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 1602.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_CANON_JPG test, skipping:<br />
[30926] warn:  (Can&rsquo;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 2704.<br />
[30926] warn: )
</p></blockquote>
<p>Je commente l&rsquo;appel à ces règles dans <code>/etc/spamassassin/imageinfo.cf</code>.<br />
Et enfin je désactive la mise à jour via <code>sa-update</code>, en commentant mes lignes <code>/etc/spamassassin/channels.txt</code>.</p>
<p>A suivre.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/spamassassin-rulesemporium-est-mort-1194/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utilisation d&#8217;une clef 3g&#8230;</title>
		<link>http://michauko.org/blog/utilisation-dune-clef-3g-1179/</link>
		<comments>http://michauko.org/blog/utilisation-dune-clef-3g-1179/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 19:22:58 +0000</pubDate>
		<dc:creator>ours</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[clé]]></category>
		<category><![CDATA[clef]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[orange]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1179</guid>
		<description><![CDATA[Je jette pêle-mêle ici les informations nécessaire à l'utilisation d'une clef 3g Nokia CS-10 sous Debian (testing) avec un abonnement pro Orange.
]]></description>
				<content:encoded><![CDATA[<p>Je jette pêle-mêle ici les informations nécessaire à l&rsquo;utilisation d&rsquo;une clef 3g sous Debian (testing).<br />
Dans mon cas, il s&rsquo;agit d&rsquo;une clef Nokia CS-10, que j&rsquo;utilise avec la SIM jumelle de mon téléphone pro (orange).<br />
<span id="more-1179"></span></p>
<p><strong>Packages requis:</strong></p>
<ul>
<li><code>comgt</code> pour gérer la partie code PIN;</li>
<li><code>ppp</code> pour la partie connexion à Internet;</li>
<li><code>gsm-utils</code> pour la partie envoyer/recevoir des SMS</li>
</ul>
<p><strong>Problème standard avec les clefs 3g:</strong><br />
Quand on les sorts de l&rsquo;emballage et qu&rsquo;on les branche sur un linux, on ne trouve pas la clef (pas de /dev/ttyUSBX, pas de /dev/ttyACMX ou /dev/nzX ou &#8230;).<br />
Elles sont vues dans le meilleurs des cas comme un support de stockage ou un CD-ROM que l&rsquo;on peut monter pour y trouver en général le mode d&rsquo;emploi, les drivers windows et mac et les petits softs qui vous pourrissent le système.<br />
Avec la Nokia CS-10, on contre ça avec un script et une règle udev qui désactivent et &laquo;&nbsp;éjectent&nbsp;&raquo; ce périphérique non voulu:<br />
Le script (<code>nokia-zerocd</code>) se mets dans <code>/lib/udev</code> (avec les bons droits: <strong>0755</strong>), et est assez basique:</p>
<blockquote><p>#!/bin/sh<br />
if [ -f /etc/udev/nokia-zerocd-noeject ]<br />
then<br />
        exit 1<br />
fi<br />
minor=$(echo $2 | sed &lsquo;s/.[0-9]*\.//&rsquo;)<br />
major=$(echo $2 | sed &lsquo;s/\.[0-9]*$//&rsquo;)<br />
if [ "$major" -gt "0" ] || &laquo;&nbsp;$minor&nbsp;&raquo; -gt &laquo;&nbsp;10&Prime; ]<br />
then<br />
        exit 1<br />
fi<br />
exit 0</p></blockquote>
<p>La régle udev (<code>99-nokia-zerocd.rules</code>) se met dans <code>/etc/udev/rules.d</code> (avec les bons droits: <strong>0644</strong>):</p>
<blockquote><p>SUBSYSTEMS==&nbsp;&raquo;usb&nbsp;&raquo;, SYSFS{idVendor}==&nbsp;&raquo;0421&Prime;, SYSFS{idProduct}==&nbsp;&raquo;060c&nbsp;&raquo;, ACTION==&nbsp;&raquo;add&nbsp;&raquo;, PROGRAM==&nbsp;&raquo;nokia-zerocd %M %s{serial}&nbsp;&raquo;, RUN+=&nbsp;&raquo;/usr/bin/eject -s %k&nbsp;&raquo;, OPTIONS+=&nbsp;&raquo;last_rule&nbsp;&raquo;</p></blockquote>
<p>Il suffit ensuite de recharger les règles udev: <code>sudo /etc/init.d/udev restart</code>.</p>
<p>Maintenant, on peut brancher la clef (où l&rsquo;on a pensé à insérer la SIM), et elle devrait bien être détectée au bout de quelques secondes (on devrait trouver deux nouveaux <em>devices</em>: <code>/dev/ttyACM0</code> et <code>/dev/ttyACM1</code>).</p>
<p><strong>Activer/Connecter la carte au réseau 3g:</strong><br />
Cela se fait assez facilement, avec la commande <code>comgt</code>:</p>
<blockquote><p># comgt -d /dev/ttyACM0<br />
Enter PIN number: XXXX</p>
<p>Waiting for Regestration..(120 sec max)..<br />
Registered on Home network: &laquo;&nbsp;Orange F&nbsp;&raquo;,2<br />
Signal Quality: 19,0</p></blockquote>
<p>Maintenant, on peut se servir de la clef pour envoyer/recevoir des SMS ou se connecter à Internet.</p>
<p><strong>La partie simple: envoyer un SMS</strong></p>
<blockquote><p>gsendsms -d /dev/ttyACM0 0612345678 &laquo;&nbsp;mon message&nbsp;&raquo;</p></blockquote>
<p><strong>La partie plus &laquo;&nbsp;complexe&nbsp;&raquo;: se connecter à internet</strong></p>
<p>Cette partie est plus complexe parce qu&rsquo;il faut savoir que ces modems ne supportent pas tous le même jeu de commandes AT, donc, tout ce qui suit ne fonctionnera pas forcément avec d&rsquo;autres modem (il faudra sûrement adapter le nom du device et une partie des commandes AT qui permettent d&rsquo;initialiser le modem).</p>
<p>A la fin du fichier <code>/etc/ppp/pap-secrets</code>, ajouter une ligne (adapter en fonction de votre cas):</p>
<blockquote><p>orange * orange</p></blockquote>
<p>Créer le fichier /etc/ppp/peers/orange (vous pouvez l&rsquo;appelez autrement) en pensant à adapter le nom du <em>device</em>, le nom d&rsquo;utilisateur et le débit du <em>device</em> à votre cas:</p>
<blockquote><p>ipcp-restart 7<br />
lcp-echo-failure 99<br />
lcp-echo-interval 0<br />
lcp-restart 10<br />
connect &lsquo;/usr/sbin/chat -v -e -f /etc/ppp/peers/orange.chat&rsquo;<br />
<em>/dev/ttyACM0</em><br />
<em>460800</em><br />
crtscts<br />
noipdefault<br />
defaultroute<br />
ipcp-accept-local<br />
ipcp-accept-remote<br />
noipx<br />
noccp<br />
usepeerdns<br />
nodeflate<br />
novj<br />
novjccomp<br />
nobsdcomp<br />
nopredictor1<br />
nopcomp<br />
noaccomp<br />
noauth<br />
user <em>orange</em></p></blockquote>
<p>Créer le fichier <code>/etc/ppp/peers/orange.chat</code> (vous pouvez l&rsquo;appeler autrement, mais penser à modifier le fichier précédent):</p>
<blockquote><p>&nbsp;&raquo; ATZ<br />
OK-AT-OK &laquo;&nbsp;ATQ0 V1 E1 S0=0 &amp;C1 &amp;D2 +FCLASS=0&Prime;<br />
OK-AT-OK &lsquo;AT+CGDCONT=<em>1,&nbsp;&raquo;IP&nbsp;&raquo;,&nbsp;&raquo;orange-mib&nbsp;&raquo;,&nbsp;&raquo;",0,0</em>&lsquo;<br />
OK-AT-OK &lsquo;<em><strong>ATD</strong>*99***1#</em>&lsquo;<br />
CONNECT &lsquo;\d\c&rsquo;</p></blockquote>
<p><strong>ATTENTION!</strong><br />
Le numéro de téléphone n&rsquo;a manifestement pas d&rsquo;importance (<code>*99#</code>, <code>*99*1#</code> marcheraient aussi bien) et ne dépend manifestement pas de l&rsquo;opérateur (il est juste là parce qu&rsquo;il en faut un), par contre, la commande AT qui permet de le composer peut changer d&rsquo;une clef et d&rsquo;un opérateur à l&rsquo;autre (<code>ATD</code><em>num</em> ou <code>ATDT</code><em>num</em> en général).<br />
La ligne <code>CGDCONT</code> dépend de votre opérateur <strong>et</strong> de votre abonnement, à vous de trouver la bonne <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Celle de cette exemple marche bien pour un abonnement orange pro avec forfait data.<br />
La première ligne devrait être la même partout, par contre, entre la première et les 3 dernières, ça peut-être totalement différent <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Notes en vrac:</strong></p>
<ul>
<li>La même chose doit pouvoir marcher en branchant le téléphone en USB et en le configurant en mode modem</li>
<li>Si vous connecter le téléphone via <em>bluetooth</em>, le device devrait s&rsquo;appeller <code>/dev/rfcommX</code></li>
<li>En GPRS (2g), la vitesse du <em>device</em> est souvent <code>115200 bauds</code> (pas comme les <code>460800</code> de la 3g/umts/hsdpa)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/utilisation-dune-clef-3g-1179/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nagios : supervision d&#8217;une base Oracle</title>
		<link>http://michauko.org/blog/nagios-supervision-dune-base-oracle-1167/</link>
		<comments>http://michauko.org/blog/nagios-supervision-dune-base-oracle-1167/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 14:52:06 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[supervision]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[check_oracle_health]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[NRPE]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracletoolbox]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1167</guid>
		<description><![CDATA[Hop, j&#8217;ai trouvé ça : http://labs.consol.de/nagios/check_oracle_health/ repéré sur exchange.nagios.org. Y&#8217;a aussi le pendant pour MySQL, MSSQL etc. A voir à l&#8217;occasion. Ca permet de contrôler depuis Nagios tout un tas de choses dans une instance Oracle : hit ratio, nb de sessions, vitesse de remplissage des redo logs, espace libre des tablespaces etc. Avec ça [...]]]></description>
				<content:encoded><![CDATA[<p>Hop, j&rsquo;ai trouvé ça : <a href="http://labs.consol.de/nagios/check_oracle_health/">http://labs.consol.de/nagios/check_oracle_health/</a> repéré sur <a href="http://exchange.nagios.org/directory/Plugins/Databases/Oracle/check_oracle_health/details">exchange.nagios.org</a>.<br />
Y&rsquo;a aussi le pendant pour MySQL, MSSQL etc. A voir à l&rsquo;occasion.</p>
<p>Ca permet de contrôler depuis Nagios tout un tas de choses dans une instance Oracle : hit ratio, nb de sessions, vitesse de remplissage des redo logs, espace libre des tablespaces etc.<br />
Avec ça et <a href="http://michauko.org/blog/2010/02/03/oracletoolbox-sous-linux-pour-analyser-vos-perfs-oracle/">Oracle ToolBox que je décris là</a>, y&rsquo;a de quoi surveiller et optimiser.</p>
<p>L&rsquo;installation de ce plug-in est assez simple. Le plus dur est d&rsquo;avoir un environnement PERL/Oracle fonctionnel. Je le décris <a href="http://michauko.org/blog/2010/11/15/libdbd-oracle-perl-sur-debian/">dans un précédent article, car ça bug un peu</a>.</p>
<h1>Installation</h1>
<p>Ensuite, il faut simplement <span id="more-1167"></span>récupérer les sources (actuellement <a href="http://labs.consol.de/wp-content/uploads/2010/10/check_oracle_health-1.6.6.1.tar.gz">cette version</a>), lire le fichier &laquo;&nbsp;INSTALL&nbsp;&raquo;, ce qui revient à taper un classique configure/make/make check/make install et vérifier qu&rsquo;on obtient bien le binaire dans <code>/usr/local/nagios/libexec/</code>.<br />
Si vous devez créer un utilisateur Oracle dédié pour analyser ces indicateurs, la doc dit de lui donner ces permissions :</p>
<pre>serveur:~# sqlplus sys/manager_que_t_as_pas_change_gros_malin@MABASE as sysdba
CREATE user nagios IDENTIFIED BY super_motdepasse;
GRANT CREATE session TO nagios;
GRANT SELECT any dictionary TO nagios;
GRANT SELECT ON V_$SYSSTAT TO nagios;
GRANT SELECT ON V_$INSTANCE TO nagios;
GRANT SELECT ON V_$LOG TO nagios;
GRANT SELECT ON SYS.DBA_DATA_FILES TO nagios;
GRANT SELECT ON SYS.DBA_FREE_SPACE TO nagios;</pre>
<h1>Test en ligne de commande</h1>
<p>Enfin, on l&rsquo;essaye avec :<br />
<code>/usr/local/nagios/libexec/check_oracle_health</code><br />
Par exemple :</p>
<pre>serveur:~#/usr/local/nagios/libexec/check_oracle_health  --connect nagios/super_motdepasse@MABASE --mode sga-library-cache-hit-ratio
CRITICAL - SGA library cache hit ratio 53.51% | sga_library_cache_hit_ratio=53.51%;98:;95:
</pre>
<p>Houuuuu, la baffe !</p>
<h1>Intégration dans Nagios</h1>
<p>Et pour intégrer tout ça dans Nagios, il suffit de jouer avec NRPE en ajoutant les petites commandes qui vont bien dans le fichier <code>/etc/nagios/nrpe_local.cfg</code>. <a href="http://michauko.org/blog/2010/01/06/nrpe-monitorer-des-linux-avec-nagios/">J&rsquo;en parle déjà ici</a>. Et comme je suis sympa, j&rsquo;en donne un long exemple en fin de cet article.</p>
<p>Une fois lancé depuis Nagios, alors qu&rsquo;en utilisateur nagios et ligne de commande, ça marchait bien, je me suis récupéré l&rsquo;erreur ORA-24327 &laquo;&nbsp;need explicit attach before authenticating a user&nbsp;&raquo; en sortie de NRPE&#8230;<br />
Il manquait des variables d&rsquo;environnement à passer à l&rsquo;utilisateur nagios pour le daemon NRPE. Je n&rsquo;ai rien trouvé plus propre que de modifier le script de lancement du service&#8230; (si vous avez mieux, dites moi) :</p>
<pre>serveur_nrpe:~# head -30 /etc/init.d/nagios-nrpe-server
#! /bin/sh
#

### BEGIN INIT INFO
# Provides:          nagios-nrpe-server
# Required-Start:    $local_fs $remote_fs $syslog $named $network $time
# Required-Stop:     $local_fs $remote_fs $syslog $named $network
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop the Nagios remote plugin execution daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nrpe
NAME=nagios-nrpe
DESC=nagios-nrpe
CONFIG=/etc/nagios/nrpe.cfg

<strong>### JACQUES pour ORACLE/Nagios check_oracle_health
export ORACLE_HOME=/usr/lib/oracle/11.1/client
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
###
</strong>
test -x $DAEMON || exit 0

blablablababla...</pre>
<h1>Résultat</h1>
<p>A la fin, ouaaa, ça donne ça :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2010/11/20101116_152343.png"><img src="http://michauko.org/blog/wp-content/uploads/2010/11/20101116_152343-300x103.png" alt="check_oracle_health" title="check_oracle_health" width="300" height="103" class="aligncenter size-medium wp-image-1169" /></a><br />
Yapuka corriger la palanquée de problèmes. Où est mon DBA ? ah, y&rsquo;en a pas, ça promet. Allez, on ressort &laquo;&nbsp;Oracle for dummies&nbsp;&raquo;.</p>
<h1>Annexes</h1>
<h2>Conf NRPE de tous les tests</h2>
<p>Comme je suis sympa, je donne un bout de fichier de conf NRPE au cas où. J&rsquo;ai simplement fait cracher tous les &laquo;&nbsp;modes&nbsp;&raquo; (contrôles)  possibles en scriptant, histoire de générer ça facilement.</p>
<pre>#command[ORAOCTM_tnsping]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tnsping
command[ORAOCTM_connection-time]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode connection-time
command[ORAOCTM_connected-users]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode connected-users
command[ORAOCTM_sga-data-buffer-hit-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sga-data-buffer-hit-ratio
command[ORAOCTM_sga-library-cache-hit-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sga-library-cache-hit-ratio
command[ORAOCTM_sga-dictionary-cache-hit-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sga-dictionary-cache-hit-ratio
command[ORAOCTM_sga-latches-hit-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sga-latches-hit-ratio
command[ORAOCTM_sga-shared-pool-reload-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sga-shared-pool-reload-ratio
command[ORAOCTM_sga-shared-pool-free]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sga-shared-pool-free
command[ORAOCTM_pga-in-memory-sort-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode pga-in-memory-sort-ratio
command[ORAOCTM_invalid-objects]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode invalid-objects
command[ORAOCTM_stale-statistics]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode stale-statistics
command[ORAOCTM_tablespace-usage1]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-usage --tablespace BASEDATA
command[ORAOCTM_tablespace-usage2]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-usage --tablespace BASEIDX
command[ORAOCTM_tablespace-usage3]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-usage --tablespace SYSAUX
command[ORAOCTM_tablespace-usage4]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-usage --tablespace SYSTEM
command[ORAOCTM_tablespace-usage5]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-usage --tablespace TEMP
command[ORAOCTM_tablespace-usage6]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-usage --tablespace UNDOTBS1
#command[ORAOCTM_tablespace-free]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-free
### A séparer en plusieurs tablespace au besoin :
command[ORAOCTM_tablespace-remaining-time]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-remaining-time
###
command[ORAOCTM_tablespace-fragmentation1]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-fragmentation --tablespace BASEDATA
command[ORAOCTM_tablespace-fragmentation2]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-fragmentation --tablespace BASEIDX
command[ORAOCTM_tablespace-fragmentation3]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-fragmentation --tablespace SYSAUX
command[ORAOCTM_tablespace-fragmentation4]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-fragmentation --tablespace SYSTEM
#command[ORAOCTM_tablespace-fragmentatioN5]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-fragmentation --tablespace TEMP
command[ORAOCTM_tablespace-fragmentation6]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-fragmentation --tablespace UNDOTBS1
command[ORAOCTM_tablespace-io-balance1]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-io-balance --tablespace BASEDATA
command[ORAOCTM_tablespace-io-balance2]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-io-balance --tablespace BASEIDX
command[ORAOCTM_tablespace-io-balance3]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-io-balance --tablespace SYSAUX
command[ORAOCTM_tablespace-io-balance4]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-io-balance --tablespace SYSTEM
command[ORAOCTM_tablespace-io-balance5]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-io-balance --tablespace TEMP
command[ORAOCTM_tablespace-io-balance6]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-io-balance --tablespace UNDOTBS1
command[ORAOCTM_tablespace-can-allocate-next1]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-can-allocate-next --tablespace BASEDATA
command[ORAOCTM_tablespace-can-allocate-next2]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-can-allocate-next --tablespace BASEIDX
command[ORAOCTM_tablespace-can-allocate-next3]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-can-allocate-next --tablespace SYSAUX
command[ORAOCTM_tablespace-can-allocate-next4]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-can-allocate-next --tablespace SYSTEM
command[ORAOCTM_tablespace-can-allocate-next5]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-can-allocate-next --tablespace TEMP
command[ORAOCTM_tablespace-can-allocate-next6]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode tablespace-can-allocate-next --tablespace UNDOTBS1
command[ORAOCTM_datafile-io-traffic1]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode datafile-io-traffic --name INDEX01.DBF
command[ORAOCTM_datafile-io-traffic2]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode datafile-io-traffic --name SYSAUX01.DBF
command[ORAOCTM_datafile-io-traffic3]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode datafile-io-traffic --name SYSTEM01.DBF
command[ORAOCTM_datafile-io-traffic4]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode datafile-io-traffic --name TEMP01.DBF
command[ORAOCTM_datafile-io-traffic5]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode datafile-io-traffic --name UNDOTBS01.DBF
command[ORAOCTM_datafile-io-traffic6]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode datafile-io-traffic --name USERS01.DBF
command[ORAOCTM_soft-parse-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode soft-parse-ratio
command[ORAOCTM_switch-interval]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode switch-interval
command[ORAOCTM_retry-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode retry-ratio
command[ORAOCTM_redo-io-traffic]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode redo-io-traffic
command[ORAOCTM_roll-header-contention]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode roll-header-contention
command[ORAOCTM_roll-block-contention]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode roll-block-contention
command[ORAOCTM_roll-hit-ratio]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode roll-hit-ratio
command[ORAOCTM_roll-wraps]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode roll-wraps
command[ORAOCTM_roll-extends]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode roll-extends
command[ORAOCTM_roll-avgactivesize]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode roll-avgactivesize
command[ORAOCTM_seg-top10-logical-reads]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode seg-top10-logical-reads
command[ORAOCTM_seg-top10-physical-reads]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode seg-top10-physical-reads
command[ORAOCTM_seg-top10-buffer-busy-waits]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode seg-top10-buffer-busy-waits
command[ORAOCTM_seg-top10-row-lock-waits]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode seg-top10-row-lock-waits
command[ORAOCTM_event-waits]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode event-waits
command[ORAOCTM_event-waiting]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode event-waiting
command[ORAOCTM_enqueue-contention]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode enqueue-contention
command[ORAOCTM_enqueue-waiting]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode enqueue-waiting
command[ORAOCTM_latch-contention]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode latch-contention
command[ORAOCTM_latch-waiting]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode latch-waiting
command[ORAOCTM_sysstat]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sysstat
command[ORAOCTM_flash-recovery-area-usage]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode flash-recovery-area-usage
command[ORAOCTM_flash-recovery-area-free]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode flash-recovery-area-free
#command[ORAOCTM_sql]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode sql
#command[ORAOCTM_list-tablespaces]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-tablespaces
#command[ORAOCTM_list-datafiles]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-datafiles
#command[ORAOCTM_list-enqueues]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-enqueues
#command[ORAOCTM_list-latches]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-latches
#command[ORAOCTM_list-events]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-events
#command[ORAOCTM_list-background-events]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-background-events
#command[ORAOCTM_list-sysstats]=/usr/local/nagios/libexec/check_oracle_health --connect nagios/super_motdepasse@BASE --mode list-sysstats</pre>
<h2>Conf Nagios pour appeler ces tests NRPE</h2>
<p>La même chose pour le fichier Nagios appelant NRPE :</p>
<pre>define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_connection-time
        check_command check_nrpe_1arg!ORAOCTM_connection-time
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_connected-users
        check_command check_nrpe_1arg!ORAOCTM_connected-users
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sga-data-buffer-hit-ratio
        check_command check_nrpe_1arg!ORAOCTM_sga-data-buffer-hit-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sga-library-cache-hit-ratio
        check_command check_nrpe_1arg!ORAOCTM_sga-library-cache-hit-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sga-dictionary-cache-hit-ratio
        check_command check_nrpe_1arg!ORAOCTM_sga-dictionary-cache-hit-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sga-latches-hit-ratio
        check_command check_nrpe_1arg!ORAOCTM_sga-latches-hit-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sga-shared-pool-reload-ratio
        check_command check_nrpe_1arg!ORAOCTM_sga-shared-pool-reload-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sga-shared-pool-free
        check_command check_nrpe_1arg!ORAOCTM_sga-shared-pool-free
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_pga-in-memory-sort-ratio
        check_command check_nrpe_1arg!ORAOCTM_pga-in-memory-sort-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_invalid-objects
        check_command check_nrpe_1arg!ORAOCTM_invalid-objects
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_stale-statistics
        check_command check_nrpe_1arg!ORAOCTM_stale-statistics
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-usage1
        check_command check_nrpe_1arg!ORAOCTM_tablespace-usage1
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-usage2
        check_command check_nrpe_1arg!ORAOCTM_tablespace-usage2
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-usage3
        check_command check_nrpe_1arg!ORAOCTM_tablespace-usage3
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-usage4
        check_command check_nrpe_1arg!ORAOCTM_tablespace-usage4
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-usage5
        check_command check_nrpe_1arg!ORAOCTM_tablespace-usage5
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-usage6
        check_command check_nrpe_1arg!ORAOCTM_tablespace-usage6
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-remaining-time
        check_command check_nrpe_1arg!ORAOCTM_tablespace-remaining-time
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-fragmentation1
        check_command check_nrpe_1arg!ORAOCTM_tablespace-fragmentation1
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-fragmentation2
        check_command check_nrpe_1arg!ORAOCTM_tablespace-fragmentation2
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-fragmentation3
        check_command check_nrpe_1arg!ORAOCTM_tablespace-fragmentation3
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-fragmentation4
        check_command check_nrpe_1arg!ORAOCTM_tablespace-fragmentation4
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-fragmentation5
        check_command check_nrpe_1arg!ORAOCTM_tablespace-fragmentation5
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-fragmentation6
        check_command check_nrpe_1arg!ORAOCTM_tablespace-fragmentation6
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-io-balance1
        check_command check_nrpe_1arg!ORAOCTM_tablespace-io-balance1
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-io-balance2
        check_command check_nrpe_1arg!ORAOCTM_tablespace-io-balance2
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-io-balance3
        check_command check_nrpe_1arg!ORAOCTM_tablespace-io-balance3
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-io-balance4
        check_command check_nrpe_1arg!ORAOCTM_tablespace-io-balance4
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-io-balance5
        check_command check_nrpe_1arg!ORAOCTM_tablespace-io-balance5
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-io-balance6
        check_command check_nrpe_1arg!ORAOCTM_tablespace-io-balance6
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-can-allocate-next1
        check_command check_nrpe_1arg!ORAOCTM_tablespace-can-allocate-next1
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-can-allocate-next2
        check_command check_nrpe_1arg!ORAOCTM_tablespace-can-allocate-next2
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-can-allocate-next3
        check_command check_nrpe_1arg!ORAOCTM_tablespace-can-allocate-next3
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-can-allocate-next4
        check_command check_nrpe_1arg!ORAOCTM_tablespace-can-allocate-next4
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-can-allocate-next5
        check_command check_nrpe_1arg!ORAOCTM_tablespace-can-allocate-next5
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_tablespace-can-allocate-next6
        check_command check_nrpe_1arg!ORAOCTM_tablespace-can-allocate-next6
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_datafile-io-traffic1
        check_command check_nrpe_1arg!ORAOCTM_datafile-io-traffic1
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_datafile-io-traffic2
        check_command check_nrpe_1arg!ORAOCTM_datafile-io-traffic2
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_datafile-io-traffic3
        check_command check_nrpe_1arg!ORAOCTM_datafile-io-traffic3
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_datafile-io-traffic4
        check_command check_nrpe_1arg!ORAOCTM_datafile-io-traffic4
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_datafile-io-traffic5
        check_command check_nrpe_1arg!ORAOCTM_datafile-io-traffic5
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_datafile-io-traffic6
        check_command check_nrpe_1arg!ORAOCTM_datafile-io-traffic6
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_soft-parse-ratio
        check_command check_nrpe_1arg!ORAOCTM_soft-parse-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_switch-interval
        check_command check_nrpe_1arg!ORAOCTM_switch-interval
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_retry-ratio
        check_command check_nrpe_1arg!ORAOCTM_retry-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_redo-io-traffic
        check_command check_nrpe_1arg!ORAOCTM_redo-io-traffic
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_roll-header-contention
        check_command check_nrpe_1arg!ORAOCTM_roll-header-contention
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_roll-block-contention
        check_command check_nrpe_1arg!ORAOCTM_roll-block-contention
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_roll-hit-ratio
        check_command check_nrpe_1arg!ORAOCTM_roll-hit-ratio
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_roll-wraps
        check_command check_nrpe_1arg!ORAOCTM_roll-wraps
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_roll-extends
        check_command check_nrpe_1arg!ORAOCTM_roll-extends
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_roll-avgactivesize
        check_command check_nrpe_1arg!ORAOCTM_roll-avgactivesize
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_seg-top10-logical-reads
        check_command check_nrpe_1arg!ORAOCTM_seg-top10-logical-reads
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_seg-top10-physical-reads
        check_command check_nrpe_1arg!ORAOCTM_seg-top10-physical-reads
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_seg-top10-buffer-busy-waits
        check_command check_nrpe_1arg!ORAOCTM_seg-top10-buffer-busy-waits
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_seg-top10-row-lock-waits
        check_command check_nrpe_1arg!ORAOCTM_seg-top10-row-lock-waits
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_event-waits
        check_command check_nrpe_1arg!ORAOCTM_event-waits
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_event-waiting
        check_command check_nrpe_1arg!ORAOCTM_event-waiting
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_enqueue-contention
        check_command check_nrpe_1arg!ORAOCTM_enqueue-contention
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_enqueue-waiting
        check_command check_nrpe_1arg!ORAOCTM_enqueue-waiting
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_latch-contention
        check_command check_nrpe_1arg!ORAOCTM_latch-contention
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_latch-waiting
        check_command check_nrpe_1arg!ORAOCTM_latch-waiting
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_sysstat
        check_command check_nrpe_1arg!ORAOCTM_sysstat
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_flash-recovery-area-usage
        check_command check_nrpe_1arg!ORAOCTM_flash-recovery-area-usage
}
define service {
        use generic-service
        host_name srvnrpe
        service_description ORAOCTM_flash-recovery-area-free
        check_command check_nrpe_1arg!ORAOCTM_flash-recovery-area-free
}
</pre>
<h2>Remarques</h2>
<p>J&rsquo;ai fait le bourrin : un &laquo;&nbsp;service Nagios&nbsp;&raquo; = un &laquo;&nbsp;appel NRPE&nbsp;&raquo; = un &laquo;&nbsp;lancement de check_oracle_health&nbsp;&raquo;. On doit pouvoir fignoler avec des paramètres et le &laquo;&nbsp;check_nrpe&nbsp;&raquo; normal plutôt que le &laquo;&nbsp;1arg&nbsp;&raquo;-ument.</p>
<p>Enfin, vous pouvez détailler chaque test pour les problèmes de verrous, events etc. La liste est méga longue. Vous pourrez facilement scripter pour obtenir la liste de tous les test si vous êtes un bon gros psychopathe.<br />
A base de :</p>
<pre>check_oracle_health --blabla -mode list-events | awk ...</pre>
<p> et idem pour les sysstats, enqueues, latches etc.<br />
Attention, dans les 3000 tests (de mémoire) et des fichiers de conf Nagios de 10 km de long. C&rsquo;est passablement crétin de tout mettre d&rsquo;un coup (bon OK, je l&rsquo;ai fait quand même, histoire de voir <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) car le serveur Nagios accuse un peu le coup.<br />
Je crois de plus que les tests génériques, genre <code>check_oracle_health --mode event-waits</code> sortent en premier les erreur critiques les plus graves. Pas la peine de descendre dans un détail sans fin de <code>check_oracle_health --blabla --mode event-waits --name 687721825</code> par exemple, ou encore <code>/usr/local/nagios/libexec/check_oracle_health --connect bla/bla@BLA --mode enqueue-waiting --name XR</code>.</p>
<p>Voilà, vous devriez pouvoir sortir un reporting de votre base en 17 tomes, de quoi assomer n&rsquo;importe quel patron, emmerder un DBA et vous laisser du temps libre. <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/nagios-supervision-dune-base-oracle-1167/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>libdbd-oracle-perl sur Debian</title>
		<link>http://michauko.org/blog/libdbd-oracle-perl-sur-debian-1161/</link>
		<comments>http://michauko.org/blog/libdbd-oracle-perl-sur-debian-1161/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 16:43:58 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[supervision]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[DBD::Oracle]]></category>
		<category><![CDATA[DBI]]></category>
		<category><![CDATA[libdbd-oracle-perl]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracle-instantclient-basic]]></category>
		<category><![CDATA[Oracle.pm]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1161</guid>
		<description><![CDATA[J&#8217;ai besoin du module Oracle pour PERL. Fastoche, c&#8217;est le paquet &#171;&#160;libdbd-oracle-perl&#160;&#187;. Manque de bol, il dépend d&#8217;un paquet virtuel (qui n&#8217;existe pas, rapport aux licences non-libres, Debian, et toute cette philosophie). Ledit paquet est &#171;&#160;oracle-instantclient-basic&#160;&#187;. Pas de problème me direz-vous, c&#8217;est le genre de trucs qui traîne chez Oracle. Oui oui, d&#8217;ailleurs je décris [...]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai besoin du module Oracle pour PERL. Fastoche, c&rsquo;est le paquet &laquo;&nbsp;libdbd-oracle-perl&nbsp;&raquo;.<br />
Manque de bol, il dépend d&rsquo;un paquet virtuel (qui n&rsquo;existe pas, rapport aux licences non-libres, Debian, et toute cette philosophie). Ledit paquet est &laquo;&nbsp;oracle-instantclient-basic&nbsp;&raquo;.</p>
<p>Pas de problème me direz-vous, c&rsquo;est le genre de trucs qui traîne chez Oracle.<br />
Oui oui, d&rsquo;ailleurs <a href="http://michauko.org/blog/2009/05/07/installer-le-client-oracle-sur-debianlenny-interco-avec-php/">je décris son installation dans un précédent article</a>. Dommage, le paquet ainsi installé est nommé &laquo;&nbsp;oracle-instantclient11.1-basic&nbsp;&raquo; et non &laquo;&nbsp;oracle-instantclient-basic&nbsp;&raquo;.</p>
<p>Après un peu de Google, n&rsquo;arrivant pas à forcer l&rsquo;installation sans respecter la dépendance, j&rsquo;ai choisi d&rsquo;installer le module DBD::Oracle (de son petit nom) à la main depuis CPAN (la base des modules PERL pour les autistes adorant PERL <--- troll).<br />
Et là encore, c'est douloureux. Je décris donc ici en bref les commandes à taper pour que ça se fasse tout seul.<br />
Je considère que la doc mentionnée ci-dessus a été suivie, donc vous avez un client Oracle fonctionnel testé avec SQLPlus par exemple.<br />
Let's go.<span id="more-1161"></span></p>
<h1>Symptômes</h1>
<pre>serveur:/# aptitude install libdbd-oracle-perl
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Lecture des descriptions de tâches... Fait
Les paquets suivants sont CASSÉS :
  libdbd-oracle-perl
0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 392ko d'archives. Après dépaquetage, 995ko seront utilisés.
Les paquets suivants ont des dépendances non satisfaites :
  libdbd-oracle-perl: Dépend: oracle-instantclient-basic qui est un paquet virtuel
Impossible de trouver une solution à ces dépendances ! Abandon...
Les paquets suivants sont CASSÉS :
  libdbd-oracle-perl
0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 392ko d'archives. Après dépaquetage, 995ko seront utilisés.
Il n'a pas été possible de résoudre ces dépendances. Vous pouvez les résoudre vous-même ou taper « n » pour quitter.
Les paquets suivants ont des dépendances non satisfaites :
  libdbd-oracle-perl: Dépend: oracle-instantclient-basic qui est un paquet virtuel
Faut-il résoudre ces dépendances manuellement ? [N/+/-/_/:/?]</pre>
<p>J&rsquo;avoue, je n&rsquo;ai pas réussi à trouver comment forcer le truc &#8211; si c&rsquo;est possible. Car là c&rsquo;est bête, c&rsquo;est qu&rsquo;il ne cherche pas avec le bon nom, si je puis dire. Y&rsquo;a bien un bug Debian ouvert, je crois, mais à part 2 mecs qui s&rsquo;engueulent, je n&rsquo;ai rien vu de constructif.</p>
<h1>PERL : La partie totomatique</h1>
<p>En tant que root, je lance l&rsquo;installation de la couche DB de PERL :</p>
<pre>serveur:~# perl -MCPAN -e shell</pre>
<p>Dans ce shell &laquo;&nbsp;perl/cpan&nbsp;&raquo;, je vérifie et constate que mon module DBI n&rsquo;est pas installé :</p>
<pre>cpan[1]> m DBI
Module id = DBI
...
    INST_FILE    (not installed)</pre>
<p>Je l&rsquo;installe :</p>
<pre>cpan[2]> install DBI</pre>
<p>S&rsquo;en suit un long blabla, mais bon, ça s&rsquo;installe (normalement <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
Ensuite, je teste la présence du module DBD::Oracle :</p>
<pre>cpan[3]> m DBD::Oracle
Module id = DBD::Oracle
    DESCRIPTION  Oracle Driver for DBI
    CPAN_USERID  DBIML (DBI Mailing Lists <dbi-users@perl.org>)
    CPAN_VERSION 1.26
    CPAN_FILE    T/TI/TIMB/DBD-Oracle-1.26.tar.gz
    UPLOAD_DATE  2010-10-11
    DSLIP_STATUS MmcO? (mature,mailing-list,C,object-oriented,)
    MANPAGE      DBD::Oracle - Oracle database driver for the DBI module
    INST_FILE    (not installed)</pre>
<p>Et je ne l&rsquo;installe pas (car ça déconnera)&#8230; je me contente de le télécharger :</p>
<pre>cpan[4]> get DBD::Oracle
Running get for module 'DBD::Oracle'
CPAN: Data::Dumper loaded ok (v2.121_14)
'YAML' not installed, falling back to Data::Dumper and Storable to read prefs '/root/.cpan/prefs'
CPAN: Digest::SHA loaded ok (v5.45)
CPAN: Compress::Zlib loaded ok (v2.012)
Checksum for /root/.cpan/sources/authors/id/T/TI/TIMB/DBD-Oracle-1.26.tar.gz ok
Scanning cache /root/.cpan/build for sizes
............................................................................DONE
DBD-Oracle-1.26/
DBD-Oracle-1.26/Changes
et blablablablablabla</pre>
<p>On va le compiler juste après.</p>
<h1>Environnement Oracle</h1>
<p>D&rsquo;abord, on positionne quelques variables (à adapter suivant votre cas)</p>
<pre>serveur:~# export ORACLE_HOME=/usr/lib/oracle/11.1/client
serveur:~# export PATH=$PATH:$ORACLE_HOME/bin
serveur:~# export LD_LIBRARY_PATH=$ORACLE_HOME/lib</pre>
<h1>PERL : la partie manuelle</h1>
<p>Puis je vais compiler à la main le bestiau :</p>
<pre>serveur:~# cd ~/.cpan/build/&lt;le rep qui va bien où on voit les sources du module&gt;
serveur:~# perl Makefile.PL
serveur:~# make</pre>
<p>Normalement c&rsquo;est OK.<br />
On peut tester grâce à une règle Makefile sympatique :</p>
<pre>serveur:~# export ORACLE_USERID="user/pass@tns"
serveur:~# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01base................# Test loading DBI, DBD::Oracle and version
t/01base................ok
t/10general.............ok
        2/30 skipped: various reasons
t/12impdata.............ok
.... blablabla
Repetitive connect/open/close/disconnect:
1 2 3 4 5 6 7 8 9 10 (~0.027 seconds each)
test.pl complete.</pre>
<p>Youhou</p>
<p>On l&rsquo;installe et je vérifie que j&rsquo;ai enfin le fichier Oracle.pm :</p>
<pre>serveur:~# make install
serveur:~# find /usr/local/lib/perl/ -name "Oracle.pm"
/usr/local/lib/perl/5.10.0/DBD/Oracle.pm
</pre>
<p>Ayé, ça marche<br />
Tout ça pour quoi au fait ??? ah oui, installer un p&rsquo;tit plug-in 3rd-party pour Nagios, qui vérifie une palanquée d&rsquo;indicateurs Oracle.<br />
Oui, c&rsquo;est probablement le prochain article à venir.</p>
<p>A part ça, je n&rsquo;aime pas trop cette méthode car on installer un bout de PERL comme des cochons. Alors la logique des paquets Debian en prend forcément un coup. On verra ça à l&rsquo;upgrade. Quitte à refaire la même chose avec &laquo;&nbsp;la version à jour du moment&nbsp;&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/libdbd-oracle-perl-sur-debian-1161/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
