<?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 &#187; Ubuntu</title>
	<atom:link href="http://michauko.org/blog/category/ubuntu/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>Mon, 16 Apr 2012 10:10:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Apache, suhosin, wordpress et WP-Table Reloaded</title>
		<link>http://michauko.org/blog/2012/04/16/apache-suhosin-wordpress-et-wp-table-reloaded/</link>
		<comments>http://michauko.org/blog/2012/04/16/apache-suhosin-wordpress-et-wp-table-reloaded/#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&#8217;est son rôle) la taille de certains formulaires, longueurs de noms de variables etc, ou alors, il tronque certains tableaux.<br />
Seul l&#8217;import initial se passe bien. Ensuite, c&#8217;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&#8217;ai dû, à force d&#8217;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&#8217;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&#8217;illimité (0), mais des valeurs réalistes.<br />
Il restait un dernier blocage à 1000 lignes, cette fois la conf de base PHP, j&#8217;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/2012/04/16/apache-suhosin-wordpress-et-wp-table-reloaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ralentir le débit de postfix pour wanadoo/orange</title>
		<link>http://michauko.org/blog/2011/11/29/ralentir-le-debit-de-postfix-pour-wanadooorange/</link>
		<comments>http://michauko.org/blog/2011/11/29/ralentir-le-debit-de-postfix-pour-wanadooorange/#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&#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.<br />
C&#8217;est ce qui m&#8217;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&#8217;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&#8217;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&#8217;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 (&#8216;wanadoo.fr&#8217;,'slow&#8217;),<br />
VALUES (&#8216;wanadoo.com&#8217;,'slow&#8217;),<br />
VALUES (&#8216;orange.fr&#8217;,'slow&#8217;),<br />
VALUES (&#8216;orange.com&#8217;,'slow&#8217;)<br />
;</p></blockquote>
<p>Enfin, on relance postfix et la file d&#8217;attente avec ses X messages bloqués avec un <code>postqueue -f</code>.</p>
<h2>Monitoring de la file d&#8217;attente sous Nagios</h2>
<p>Du coup, j&#8217;ai trouvé qu&#8217;il me manquait une surveillance de la file d&#8217;attente &laquo;&nbsp;postqueue&nbsp;&raquo; d&#8217;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&#8217;ajout d&#8217;un contrôle via NRPE ne vous est pas familier.</p>
<p>Et voilà.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/11/29/ralentir-le-debit-de-postfix-pour-wanadooorange/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Utilisation d&#8217;une clef 3g&#8230;</title>
		<link>http://michauko.org/blog/2010/12/02/utilisation-dune-clef-3g/</link>
		<comments>http://michauko.org/blog/2010/12/02/utilisation-dune-clef-3g/#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&#8217;utilisation d&#8217;une clef 3g sous Debian (testing).<br />
Dans mon cas, il s&#8217;agit d&#8217;une clef Nokia CS-10, que j&#8217;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&#8217;emballage et qu&#8217;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&#8217;on peut monter pour y trouver en général le mode d&#8217;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 &#8216;s/.[0-9]*\.//&#8217;)<br />
major=$(echo $2 | sed &#8216;s/\.[0-9]*$//&#8217;)<br />
if [ "$major" -gt "0" ] || &laquo;&nbsp;$minor&nbsp;&raquo; -gt &laquo;&nbsp;10&#8243; ]<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&#8243;, 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&#8217;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&#8217;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&#8217;autres modem (il faudra sûrement adapter le nom du device et une partie des commandes AT qui permettent d&#8217;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&#8217;appelez autrement) en pensant à adapter le nom du <em>device</em>, le nom d&#8217;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 &#8216;/usr/sbin/chat -v -e -f /etc/ppp/peers/orange.chat&#8217;<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&#8217;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&#8243;<br />
OK-AT-OK &#8216;AT+CGDCONT=<em>1,&nbsp;&raquo;IP&nbsp;&raquo;,&nbsp;&raquo;orange-mib&nbsp;&raquo;,&nbsp;&raquo;",0,0</em>&#8216;<br />
OK-AT-OK &#8216;<em><strong>ATD</strong>*99***1#</em>&#8216;<br />
CONNECT &#8216;\d\c&#8217;</p></blockquote>
<p><strong>ATTENTION!</strong><br />
Le numéro de téléphone n&#8217;a manifestement pas d&#8217;importance (<code>*99#</code>, <code>*99*1#</code> marcheraient aussi bien) et ne dépend manifestement pas de l&#8217;opérateur (il est juste là parce qu&#8217;il en faut un), par contre, la commande AT qui permet de le composer peut changer d&#8217;une clef et d&#8217;un opérateur à l&#8217;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&#8217;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/2010/12/02/utilisation-dune-clef-3g/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nagios : supervision d&#8217;une base Oracle</title>
		<link>http://michauko.org/blog/2010/11/16/nagios-supervision-dune-base-oracle/</link>
		<comments>http://michauko.org/blog/2010/11/16/nagios-supervision-dune-base-oracle/#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&#8217;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&#8217;a aussi le pendant pour MySQL, MSSQL etc. A voir à l&#8217;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&#8217;a de quoi surveiller et optimiser.</p>
<p>L&#8217;installation de ce plug-in est assez simple. Le plus dur est d&#8217;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&#8217;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&#8217;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&#8217;en parle déjà ici</a>. Et comme je suis sympa, j&#8217;en donne un long exemple en fin de cet article.</p>
<p>Une fois lancé depuis Nagios, alors qu&#8217;en utilisateur nagios et ligne de commande, ça marchait bien, je me suis récupéré l&#8217;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&#8217;environnement à passer à l&#8217;utilisateur nagios pour le daemon NRPE. Je n&#8217;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&#8217;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&#8217;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&#8217;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&#8217;est passablement crétin de tout mettre d&#8217;un coup (bon OK, je l&#8217;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&#8217;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/2010/11/16/nagios-supervision-dune-base-oracle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>libdbd-oracle-perl sur Debian</title>
		<link>http://michauko.org/blog/2010/11/15/libdbd-oracle-perl-sur-debian/</link>
		<comments>http://michauko.org/blog/2010/11/15/libdbd-oracle-perl-sur-debian/#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&#8217;ai besoin du module Oracle pour PERL. Fastoche, c&#8217;est le paquet &laquo;&nbsp;libdbd-oracle-perl&nbsp;&raquo;.<br />
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 &laquo;&nbsp;oracle-instantclient-basic&nbsp;&raquo;.</p>
<p>Pas de problème me direz-vous, c&#8217;est le genre de trucs qui traîne chez Oracle.<br />
Oui oui, d&#8217;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&#8217;arrivant pas à forcer l&#8217;installation sans respecter la dépendance, j&#8217;ai choisi d&#8217;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&#8217;avoue, je n&#8217;ai pas réussi à trouver comment forcer le truc &#8211; si c&#8217;est possible. Car là c&#8217;est bête, c&#8217;est qu&#8217;il ne cherche pas avec le bon nom, si je puis dire. Y&#8217;a bien un bug Debian ouvert, je crois, mais à part 2 mecs qui s&#8217;engueulent, je n&#8217;ai rien vu de constructif.</p>
<h1>PERL : La partie totomatique</h1>
<p>En tant que root, je lance l&#8217;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&#8217;est pas installé :</p>
<pre>cpan[1]> m DBI
Module id = DBI
...
    INST_FILE    (not installed)</pre>
<p>Je l&#8217;installe :</p>
<pre>cpan[2]> install DBI</pre>
<p>S&#8217;en suit un long blabla, mais bon, ça s&#8217;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&#8217;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&#8217;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&#8217;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&#8217;installe et je vérifie que j&#8217;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&#8217;tit plug-in 3rd-party pour Nagios, qui vérifie une palanquée d&#8217;indicateurs Oracle.<br />
Oui, c&#8217;est probablement le prochain article à venir.</p>
<p>A part ça, je n&#8217;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&#8217;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/2010/11/15/libdbd-oracle-perl-sur-debian/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Lancer un binaire 32 bits sur une Debian 64 bits</title>
		<link>http://michauko.org/blog/2010/10/31/lancer-un-binaire-32-bits-sur-une-debian-64-bits/</link>
		<comments>http://michauko.org/blog/2010/10/31/lancer-un-binaire-32-bits-sur-une-debian-64-bits/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 18:57:49 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[32 bits]]></category>
		<category><![CDATA[64 bits]]></category>
		<category><![CDATA[ia32-libs]]></category>
		<category><![CDATA[tsmuxer]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1157</guid>
		<description><![CDATA[Hop, J&#8217;ai un serveur assez puissant sous la main, pratique pour &#171;&#160;remuxer&#160;&#187; du gros fichier rapidement. Je vous passe les détails Bref, voilà que je lance tsMuxerGUI à distance (via un déport d&#8217;affichage) et plouf, rien. Pas un message d&#8217;erreur, rien dans les logs, j&#8217;ai mis quelques instants à comprendre pourquoi le programme ne se [...]]]></description>
			<content:encoded><![CDATA[<p>Hop,</p>
<p>J&#8217;ai un serveur assez puissant sous la main, pratique pour &laquo;&nbsp;remuxer&nbsp;&raquo; du gros fichier rapidement. Je vous passe les détails <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Bref, voilà que je lance <a href="http://www.google.fr/search?q=tsmuxer">tsMuxerGUI</a> à distance (via un déport d&#8217;affichage) et plouf, rien. Pas un message d&#8217;erreur, rien dans les logs, j&#8217;ai mis quelques instants à comprendre pourquoi le programme ne se lançait pas. Alors que le même binaire tourne habituellement bien sur mes autres machines.<br />
Avant de me rappeler que le serveur était en 64 bits. Bah oui, du 32 bits sur une machine 64 bits, de base, ça passe pas hyper bien <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Mais je tenais à trouver une solution simple.<span id="more-1157"></span></p>
<p>Alors, la chance dans l&#8217;histoire est que le binaire en question est &laquo;&nbsp;linké&nbsp;&raquo; statiquement (donc il embarque toutes ses éventuelles bibliothèques), la malchance est qu&#8217;il n&#8217;est pas fourni par l&#8217;éditeur en précompilé 64 bits. Reste l&#8217;option où je compile le truc (ahah, c&#8217;est [potentiellement] chiant), car les sources sont accessibles.</p>
<p>Donc, après un peu de Google, j&#8217;ai trouvé les merveilleux paquets &laquo;&nbsp;ia32-libs&nbsp;&raquo; et, dans le doute, ia32-libs-gtk (vu qu&#8217;il s&#8217;agit d&#8217;une application graphique en GTK, je crois). Ces paquets apportent le minimum pour lancer des binaires 32 bits sur un OS 64 bits, type amd64 ou ia64. Là j&#8217;ai un Xeon machin 64 et la Debian qui va avec.<br />
Ca a suffit pour que le binaire tourne. Hop, joie !</p>
<p>Gardez donc ces paquets dans un coin de vos têtes <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/10/31/lancer-un-binaire-32-bits-sur-une-debian-64-bits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>postfix, utilisateurs virtuels et appels à procmail</title>
		<link>http://michauko.org/blog/2010/10/25/postfix-utilisateurs-virtuels-et-appels-a-procmail/</link>
		<comments>http://michauko.org/blog/2010/10/25/postfix-utilisateurs-virtuels-et-appels-a-procmail/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 09:30:33 +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[master.cf]]></category>
		<category><![CDATA[NEXTHOP]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[procmail]]></category>
		<category><![CDATA[procmailrc]]></category>
		<category><![CDATA[vacation]]></category>
		<category><![CDATA[virtuel]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1139</guid>
		<description><![CDATA[Hello, Dans un précédent article, j&#8217;avais expliqué comment faire en sorte qu&#8217;une installation postfix/amavis/&#8230;/mysql &#8211; avec donc des domaines et des utilisateurs virtuels &#8211; puisse faire appeler &#171;&#160;procmail&#160;&#187; afin de passer le relai à &#171;&#160;vacation&#160;&#187;, l&#8217;outil de répondeur automatique d&#8217;absence. Depuis, j&#8217;ai trouvé plus élégant pour passer des règles plus complètes à procmail (quitte à [...]]]></description>
			<content:encoded><![CDATA[<p>Hello,<br />
Dans un précédent article, j&#8217;avais expliqué comment faire en sorte qu&#8217;une installation postfix/amavis/&#8230;/mysql &#8211; avec donc des domaines et des utilisateurs virtuels &#8211; puisse faire appeler &laquo;&nbsp;procmail&nbsp;&raquo; afin de passer le relai à &laquo;&nbsp;vacation&nbsp;&raquo;, l&#8217;outil de répondeur automatique d&#8217;absence.<br />
Depuis, j&#8217;ai trouvé plus élégant pour passer des règles plus complètes à procmail (quitte à envoyer à vacation ensuite). C&#8217;est juste beaucoup plus joli et mieux construit. J&#8217;explique &#8211; toujours en partant d&#8217;une conf postfix/amavis/mysql comme celle que je décris dans <a href="http://michauko.org/blog/?s=postfix">des précédents articles</a>.<span id="more-1139"></span></p>
<h1>Principe</h1>
<p>On va créer une voie de transport dans postfix afin de &laquo;&nbsp;router&nbsp;&raquo; les messages de certains utilisateurs vers un pipe particulier appelant procmail dans sa forme à peu près basique.<br />
&laquo;&nbsp;procmail&nbsp;&raquo; tournera au nom de l&#8217;utilisateur gérant les &laquo;&nbsp;Maildir&nbsp;&raquo; virtuels, utilisateur &laquo;&nbsp;vmail&nbsp;&raquo; (dans mes docs précédentes) et lira un procmail général avant de passer le relai à un procmail par utilisateur (si besoin), pour trier. En décrivant proprement l&#8217;environnement pour procmail, on livrera où il faut dans un Maildir sous &laquo;&nbsp;vmail&nbsp;&raquo;, donc dans un Maildir d&#8217;un domain virtuel pour un utilisateur virtuel dans un sous-répertoire de sa boîte Maildir.<br />
Mouais, bon, c&#8217;est pas hyper clair, mais ça va le devenir <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>pipe postfix</h1>
<p>Dans <code>/etc/postfix/master.cf</code>, on déclare le &laquo;&nbsp;pipe suivant&nbsp;&raquo; :</p>
<pre>procmailpipe    unix    -       n       n       -       10      pipe
  flags=ROq user=vmail argv=/usr/bin/procmail --m USER=${user} EXTENSION=${extension} NEXTHOP=${nexthop} /etc/postfix/procmail.global.rc</pre>
<p>Bien noter le &laquo;&nbsp;NEXTHOP&nbsp;&raquo; qui nous indiquera le domaine (pratique lorsqu&#8217;on en gère plusieurs en virtuel.<br />
Je rappelle que dans ma conf, l&#8217;utilisateur hébergeant les boites mails est &laquo;&nbsp;vmail&nbsp;&raquo;, dont le home est <code>/vmailboxes/</code>. On trouve donc là-dedans des répertoires comme <code>/vmailboxes/mon_domaine.com/mon_user/cur|tmp|new</code> et autres sous répertoires commençant par <code>.sous-rep/[cur|new|tmp]/</code>.<br />
Pour accompagner le flag &laquo;&nbsp;O&nbsp;&raquo; dans ce pipe, la doc postfix indique de bien positionner dans le <code>/etc/postfix/main.cf</code> :</p>
<pre>procmail_destination_recipient_limit = 1</pre>
<h1>Alias d&#8217;un utilisateur vers son procmail</h1>
<p>Dans mes tables SQL (à priori &laquo;&nbsp;transport&nbsp;&raquo; et &laquo;&nbsp;forwardings&nbsp;&raquo;), j&#8217;indique ceci :</p>
<pre>transport : procmail.mon_domaine.com => procmailpipe
forwardings : mon_user@mon_domaine.com => mon_user@procmail.mon_domaine.com</pre>
<p>Ainsi, un mail arrive à mon_user@mon_domaine.com suivra vers mon_user@procmail.mon_domaine.com (qui n&#8217;existe pas au sens DNS) et sera donc routé vers le &laquo;&nbsp;pipe&nbsp;&raquo; postfix nommé &laquo;&nbsp;procmailpipe&nbsp;&raquo; décrit dans <code>master.cf</code>.</p>
<h1>procmailrc global</h1>
<p>Le &laquo;&nbsp;pipe&nbsp;&raquo; postfix ira lire <code>/etc/postfix/procmail.global.rc</code> en passant quelques variables comme on l&#8217;a vu.<br />
Dans ce fichier, on trouve exactement ça :</p>
<pre>serveur:~# cat /etc/postfix/procmail.global.rc
SHELL=/bin/sh
MAILDIR="$HOME/$NEXTHOP/$USER"
DEFAULT="$MAILDIR/"
#VERBOSE=ON
#LOGFILE="$HOME/procmail/$NEXTHOP.$USER.log"
NL="
"
WS=" "
SWITCHRC="$HOME/procmail/$NEXTHOP.$USER.rc"
</pre>
<p>Pour NL et WS, c&#8217;est une question de séparateur de mot, de ligne etc. (je crois <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
Pour VERBOSE et LOGFILE, vous activerez au début quand ça ne fonctionnera pas, afin de pouvoir déverminer.<br />
<strong>Toute la beauté du bazar réside en fait dans le &laquo;&nbsp;MAILDIR&nbsp;&raquo; et &laquo;&nbsp;SWITCHRC&nbsp;&raquo;.</strong><br />
Dans mon exemple, MAILDIR vaudra :</p>
<pre>$HOME = home de vmail = <code>/vmailboxes</code>
$NEXTHOP = procmail.mon_domaine.com
$USER = mon_user
</pre>
<p>Enfin, on ira lire un fichier procmailrc par utilisateur. Si on ne trouve pas de fichier &laquo;&nbsp;<code>/vmailboxes/procmail/procmail.mon_domaine.com.mon_user.rc</code>&laquo;&nbsp;, on finira donc directement dans une MAILDIR nommée &laquo;&nbsp;<code>/vmailboxes/procmail.mon_domaine.com/mon_user/</code>&nbsp;&raquo; (attention au &laquo;&nbsp;/&nbsp;&raquo; de fin dans DEFAULT pour indiquer un format Maildir et pas mailbox). Presque parfait me direz-vous car dans mes domaines virtuels hébergés, j&#8217;avais prévu &laquo;&nbsp;<code>/vmailboxes/mon_domaine.com</code>&nbsp;&raquo; et pas &laquo;&nbsp;<code>procmail.mon_domaine</code>&laquo;&nbsp;.<br />
Je n&#8217;ai pas trouvé de variable type NEXTHOP rappelent le domaine d&#8217;origine. Par contre un lien symbolique de &laquo;&nbsp;<code>/vmailboxes/procmail.mon_domaine.com/</code>&nbsp;&raquo; vers &laquo;&nbsp;<code>/vmailboxes/mon_domaine.com/</code>&nbsp;&raquo; règle joliment le problème.</p>
<h1>Enfin, procmailrc par utilisateur</h1>
<p>J&#8217;ai donc regroupé mes différents procmailrc dans <code>/vmailboxes/procmail/</code><br />
Ces fichiers contiendront donc des règles procmail habituelles, en considérant pour &laquo;&nbsp;MAILDIR/DEFAULT&nbsp;&raquo; de travail, qu&#8217;on est bien placé dans &laquo;&nbsp;<code>/vmailboxes/[procmail.]mon_domaine.com/mon_user/</code>&laquo;&nbsp;. Ainsi :</p>
<pre>:0
* Subject:.*testprocmail
.test/</pre>
<p>&#8230;ira bien placer votre mail dans le sous-répertoire &laquo;&nbsp;test&nbsp;&raquo; de l&#8217;utilisateur. Donc dans &laquo;&nbsp;<code>/vmailboxes/mon_domaine.com/mon_user/.test/new/</code>&nbsp;&raquo;</p>
<h1>Débuggage</h1>
<p>Pendant la phase de tests, notez que les mails allant dans des Maildir n&#8217;existant pas finiront dans le home de l&#8217;utilisateur &laquo;&nbsp;vmail&nbsp;&raquo;. Donc, vous verrez peut-être apparaître <code>/vmailboxes/[cur|new|tmp]</code> et pourrez aller à la pêche.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/10/25/postfix-utilisateurs-virtuels-et-appels-a-procmail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Changer son mot de passe dans roundcubemail+postfix+utilisateurs virtuels</title>
		<link>http://michauko.org/blog/2010/10/07/changer-son-mot-de-passe-dans-roundcubemailpostfixutilisateurs-virtuels/</link>
		<comments>http://michauko.org/blog/2010/10/07/changer-son-mot-de-passe-dans-roundcubemailpostfixutilisateurs-virtuels/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 15:42:02 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[roundcube]]></category>
		<category><![CDATA[webmail]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1126</guid>
		<description><![CDATA[Dans la lignée des articles suivant : Montage d&#8217;un serveur complet postfix et outils annexes &#8230;en y ajoutant des domaines et utilisateurs virtuels &#8230;et à la limite un répondeur (vacation) sur des utilisateurs virtuels &#8230;en oubliant la partie roundcubemail (facile à installer, j&#8217;ai pas fait d&#8217;article, désolé) Voici maintenant comment &#171;&#160;configurer et activer le plugin [...]]]></description>
			<content:encoded><![CDATA[<p>Dans la lignée des articles suivant :</p>
<ul>
<li>
<a href="http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/">Montage d&#8217;un serveur complet postfix et outils annexes</a>
</li>
<li>
<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/">&#8230;en y ajoutant des domaines et utilisateurs virtuels</a>
</li>
<li>
<a href="http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/">&#8230;et à la limite un répondeur (vacation) sur des utilisateurs virtuels</a>
</li>
<li>
&#8230;en oubliant la partie roundcubemail (facile à installer, j&#8217;ai pas fait d&#8217;article, désolé)
</li>
</ul>
<p>Voici maintenant comment &laquo;&nbsp;<strong>configurer et activer le plugin de changement de mot de passe dans roundcubemail (actuellement v0.4) sur des utilisateurs virtuels (SQL)</strong>&laquo;&nbsp;. Depuis la 0.4, le plugin est intégré et propre. Pas la peine d&#8217;ajouter du code PHP un peu partout.<br />
Notez que le plugin est modulaire et gère des &laquo;&nbsp;drivers&nbsp;&raquo; pour l&#8217;authentification : sql, ldap, poppassd, cyrus/SASL etc.<br />
Allez, let&#8217;s go!<span id="more-1126"></span></p>
<p>Vu que j&#8217;avais eu quelques déboires avec les vieilles versions de roundcube, je suis parti sur la dernière release stable du site officiel, pas d&#8217;une version packagée Debian.</p>
<p>Toute la doc tient dans un README simpliste, dans vos sources roundcubemail, fichier <code>/plugins/password/README</code>. Mon article applique ceci en expliquant un peu plus&#8230;</p>
<p>Je considère que vous partez d&#8217;une configuration d&#8217;utilisateurs virtuels comme décrite dans mes docs mentionnés en haut de l&#8217;article. Sinon il faut adapter et je ne peux pas prédire ce que vous devez écrire <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
Dans vos sources roundcube, renommez/copiez le fichier <code>/plugins/password/config.inc.php.dist</code> en <code>/plugins/password/config.inc.php</code> et modifiez uniquement ce qui suit :</p>
<pre>$rcmail_config['password_db_dsn'] = 'mysql://admin:son_pass@localhost/ma_base';
$rcmail_config['password_query'] = 'UPDATE ma_base.users SET password=ENCRYPT(%p) WHERE email=%u LIMIT 1';</pre>
<p>Dans <code>password_db_dsn</code>, on indique la base de données des utilisateurs virtuels. Puisque l&#8217;outil roundcube bosse sur SA base de données, il faudra bien qu&#8217;il aille voir autre part. A vous de voir si vous lui donnez l&#8217;accès admin à votre base ou un compte sur mesure capable de faire des UPDATE uniquement sur la table des utilisateurs. Ca ou tous les droits, c&#8217;est pas foncièrement différent me direz-vous.<br />
Dans <code>password_query</code>, on indique la requête d&#8217;UPDATE. Remarques :</p>
<ul>
<li>
Non, pas la peine d&#8217;ajouter un &laquo;&nbsp;WHERE&#8230; AND password = ENCRYPT(%o)&nbsp;&raquo; pour soit disant contrôler que l&#8217;ancien pass est le bon. D&#8217;une part c&#8217;est contrôlé au niveau de la session PHP via une fonction &laquo;&nbsp;decrypt&nbsp;&raquo; (cherchez dans le code) et d&#8217;autre part, ENCRYPT ne produit pas nécessairement le même résultat pour un pass donné, l&#8217;histoire du &#8216;salt&#8217;, aléatoire lorsqu&#8217;on ne le précise pas (amha).
</li>
<li>
On limite à 1 par sécurité et aussi car le plugin gueule s&#8217;il n&#8217;a pas modifié qu&#8217;une ligne. En même temps, il a raison <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
<li>
Je préfère forcer le nom complet &laquo;&nbsp;ma_base.users&nbsp;&raquo; pour éviter une erreur, si 2 tables avaient le même nom dans les 2 bases, je pense</li>
</ul>
<p>J&#8217;ai passé sous silence ces 2 paramètres déjà OK de base :</p>
<pre>$rcmail_config['password_driver'] = 'sql';
$rcmail_config['password_confirm_current'] = true;</pre>
<p>Enfin, on active le plugin dans la conf principale, fichier <code>config/main.inc.php</code> :</p>
<pre>$rcmail_config['plugins'] = array('password');</pre>
<p>Voilà, c&#8217;est tout. Rechargez la page des préférences sur roundcube. Tout ceci étant en PHP, c&#8217;est dynamique et vous verrez l&#8217;onglet de changement de mot de passe, et il devrait fonctionner <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://michauko.org/blog/wp-content/uploads/2010/10/rcube_password.png"><img src="http://michauko.org/blog/wp-content/uploads/2010/10/rcube_password.png" alt="" title="rcube_password" width="636" height="241" class="aligncenter size-full wp-image-1134" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/10/07/changer-son-mot-de-passe-dans-roundcubemailpostfixutilisateurs-virtuels/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Accéder à un serveur linux en partage Windows, vite fait</title>
		<link>http://michauko.org/blog/2010/09/29/acceder-a-un-serveur-linux-en-partage-windows-vite-fait/</link>
		<comments>http://michauko.org/blog/2010/09/29/acceder-a-un-serveur-linux-en-partage-windows-vite-fait/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 09:40:08 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[samba]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1115</guid>
		<description><![CDATA[Petit besoin simple : un joli serveur Debian qui fait ce qu&#8217;il a à faire. Mais un besoin d&#8217;accéder simplement et rapidement à quelques répertoires depuis des PC Windows en domaine. L&#8217;idée est d&#8217;installer Samba sur ce serveur en le limitant à une configuration minimaliste donnant un accès en lecture. Attention, on est loin d&#8217;une [...]]]></description>
			<content:encoded><![CDATA[<p>Petit besoin simple : un joli serveur Debian qui fait ce qu&#8217;il a à faire. Mais un besoin d&#8217;accéder simplement et rapidement à quelques répertoires depuis des PC Windows en domaine.<br />
L&#8217;idée est d&#8217;installer Samba sur ce serveur en le limitant à une configuration minimaliste donnant un accès en lecture.<br />
Attention, on est loin d&#8217;une vraie conf Samba. Mais pour vous éviter beaucoup de lecture, si votre besoin est celui-ci, suivez le guide, c&#8217;est rapide&#8230;<span id="more-1115"></span></p>
<pre>aptitude install samba</pre>
<p>L&#8217;installation demande si vous faites partie d&#8217;un domaine et si vous obtenez des informations sur les WINS via le serveur DHCP<br />
C&#8217;est tout.</p>
<p>Ensuite, on configure 3 endroits dans <code>/etc/samba/smb.conf</code>.<br />
Le nom du serveur :</p>
<pre>server string = mon super serveur</pre>
<p>Le mode d&#8217;authentification simpliste :</p>
<pre>security = share</pre>
<p>Et enfin, on crée nos partages, à la fin du fichier :</p>
<pre>[logs]
        comment = Mes logs
        path = /home/user1/logs
        read only = yes
        guest only = yes
</pre>
<p>Répétez autant de blocs que vous avez de partages.</p>
<p>On recharge samba un coup, et on teste &#8211; un reload doit être suffisant :</p>
<pre>/etc/init.d/samba reload</pre>
<p>Depuis votre Windows, vous accéderez donc à \\le_serveur\logs</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/09/29/acceder-a-un-serveur-linux-en-partage-windows-vite-fait/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SFTP, chroot et pas de SSH : bloquer un utilisateur dans un répertoire</title>
		<link>http://michauko.org/blog/2010/09/27/sftp-chroot-et-pas-de-ssh-bloquer-un-utilisateur-dans-un-repertoire/</link>
		<comments>http://michauko.org/blog/2010/09/27/sftp-chroot-et-pas-de-ssh-bloquer-un-utilisateur-dans-un-repertoire/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 08:15:21 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[chroot]]></category>
		<category><![CDATA[rssh]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1099</guid>
		<description><![CDATA[Salut, Un petit article sur ce sujet récurrent car il y a plein de méthodes, dont une assez simple, mais avec 2/3 points de paramétrage précis. Le but est de permettre à un client/fournisseur d&#8217;envoyer/récupérer des fichiers sur un serveur, en SFTP, sans pour autant lui donner accès en SSH (exécuter des commandes) et sans [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,<br />
Un petit article sur ce sujet récurrent car il y a plein de méthodes, dont une assez simple, mais avec 2/3 points de paramétrage précis.<br />
Le but est de permettre à un client/fournisseur d&#8217;envoyer/récupérer des fichiers sur un serveur, en SFTP, sans pour autant lui donner accès en SSH (exécuter des commandes) et sans voir autre part que son &laquo;&nbsp;home&nbsp;&raquo;.<br />
Le tout sur un serveur SSH déjà monté et par ailleurs utilisé pour du SSH normal en interne, avec du SFTP normal aussi.</p>
<p>Il y a 3 méthodes courantes pour commencer à jouer avec les chroot ssh/sftp :</p>
<ul>
<li>
Héberger un serveur SSH en chroot normal : c&#8217;est chiant. Créer un &laquo;&nbsp;home&nbsp;&raquo;, reproduire un minimum d&#8217;arborescence standard, d&#8217;utilisateurs etc.
</li>
<li>
Utiliser rssh comme shell alternatif, c&#8217;est un shell qui limite l&#8217;utilisateur à du SFTP, SCP, CVS, RSYNC etc. On choisit ce qu&#8217;on veut tolérer. Mais, l&#8217;utilisateur peut quand même se promener dans le système (tout &laquo;&nbsp;/&nbsp;&raquo;).
</li>
<li>
Enfin, ce que je vais décrire : utiliser la fonctionnalité de &laquo;&nbsp;chroot&nbsp;&raquo; intégrée aux serveurs SSH (serveur ssh >= 4.8, donc n&#8217;importe quel SSH d&#8217;une Debian stable de nos jours). On va simplement brider quelques comptes et mettre quelques permissions bien senties.
</li>
</ul>
<p><span id="more-1099"></span></p>
<h1>Adaptation d&#8217;un utilisateur</h1>
<p>Le mieux est de prévoir large : on risque d&#8217;avoir plusieurs clients/fournisseurs qui voudront accéder.<br />
On va donc créer un groupe des utilisateurs SFTP seulement, nommé &laquo;&nbsp;sftpusers&nbsp;&raquo;.<br />
Je crée un utilisateur pour mon client, nommé xfer1, en changeant son home :</p>
<pre>xfer1:x:1011:1012:Transfert client1,,,:/transferts_partenaires/xfer1/:bin/bash</pre>
<p>Notez que le groupe 1012 est le groupe &laquo;&nbsp;sftpusers&nbsp;&raquo; :</p>
<pre>$ id xfer1
uid=1011(xfer1) gid=1012(sftpusers) groupes=1012(sftpusers)</pre>
<h1>Création du répertoire d&#8217;échange, permissions</h1>
<p>On crée l&#8217;arborescence qui va servir de home bidon à tout ces utilisateurs :</p>
<pre>$ mkdir --parents /transferts_partenaires/xfer1/
$ chown -R root:sftpusers /transferts_partenaires/
$ chmod -R 750 /transferts_partenaires/</pre>
<p>Les permissions ci-dessus sont hyper importantes. Le serveur SFTP refusera la connexion si le home de ces utilisateurs n&#8217;est pas en <strong>écriture uniquement pour le root </strong>! Donc oui, en l&#8217;état, notre utilisateur <code>xfer1:sftpusers</code> ne peut pas écrire dans son home. Il pourra lire, ce qui peut être suffisant si vous lui mettez simplement des fichiers à disposition. Mais pour écrire, il faudra créer un sous-répertoire, genre &laquo;&nbsp;upload&nbsp;&raquo;.</p>
<pre>mkdir /transferts_partenaires/xfer1/upload/
chown xfer1:sftpusers /transferts_partenaires/xfer1/upload/
chmod 700 /transferts_partenaires/xfer1/upload/</pre>
<h1>Déclaration du compte en SFTP uniquement</h1>
<p>Enfin, on paramètre le serveur SSH comme suit. Modifiez votre fichier <code>/etc/ssh/sshd_config</code> :</p>
<pre># param par défaut, on change : Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem     sftp   internal-sftp -f AUTH -l VERBOSE

# plus loin...
Match Group sftpusers
        ChrootDirectory /transferts_partenaires/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no</pre>
<p>A noter que les AllowUsers/DenyUsers s&#8217;appliquent toujours. L&#8217;utilisateur xfer1 &#8211; ou plutôt les utilisateurs du groupe sftpusers &#8211; doivent être autorisés d&#8217;une manière ou d&#8217;une autre.<br />
A noter aussi la beauté du geste avec le &laquo;&nbsp;%u&nbsp;&raquo; pour indiquer le nom de l&#8217;utilisateur.</p>
<p>Ensuite vous recharger le serveur SSH et testez les connexions SFTP et SSH-qui-passent-pas, sans oublier la distinction lecture/écriture.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/09/27/sftp-chroot-et-pas-de-ssh-bloquer-un-utilisateur-dans-un-repertoire/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>netcat : je &#171;&#160;déTAR&#160;&#187; d&#8217;une machine vers l&#8217;autre</title>
		<link>http://michauko.org/blog/2009/10/01/netcat-je-detar-dune-machine-vers-lautre/</link>
		<comments>http://michauko.org/blog/2009/10/01/netcat-je-detar-dune-machine-vers-lautre/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 14:03:09 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[scp]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=669</guid>
		<description><![CDATA[&#171;&#160;déTAR&#160;&#187; à distance Pense-bête : j&#8217;ai un gros .tar sur un serveur, je dois l&#8217;extraire sur un autre serveur. MAIS, sur cet autre serveur, je n&#8217;ai pas la place pour récupérer le .tar puis le décompresser, c&#8217;est-à-dire stocker deux fois en terme d&#8217;espace. Donc j&#8217;utilise netcat pour faire un &#171;&#160;pipe&#160;&#187; entre commande d&#8217;une machine à [...]]]></description>
			<content:encoded><![CDATA[<h1>&laquo;&nbsp;déTAR&nbsp;&raquo; à distance</h1>
<p>Pense-bête : j&#8217;ai un gros .tar sur un serveur, je dois l&#8217;extraire sur un autre serveur. MAIS, sur cet autre serveur, je n&#8217;ai pas la place pour récupérer le .tar puis le décompresser, c&#8217;est-à-dire stocker deux fois en terme d&#8217;espace.<br />
Donc j&#8217;utilise netcat pour faire un &laquo;&nbsp;pipe&nbsp;&raquo; entre commande d&#8217;une machine à l&#8217;autre.</p>
<p>Une fois le programme netcat installé, peu importe par quel biais, et en considérant que vous n&#8217;avez pas de restriction réseau entre les 2 machines (sinon ouvrez le port ci-dessous en UDP), vous faites ceci :<span id="more-669"></span></p>
<p>Sur la machine cible, on prépare une socket en écoute, ici sur le port 12345 :</p>
<pre>moi@destination:/ou/je/veux/ecrire$ netcat -l -p 12345 | tar xvf -</pre>
<p>Sur la machine émettrice, on balance la purée dans le tuyau :</p>
<pre>moi2@source:~$ cat monfichier.tar | netcat aladdin 12345</pre>
<p>A adapter dans le cas d&#8217;un fichier .bz2 ou .gz, par exemple.</p>
<h1>Recopie d&#8217;arborescence d&#8217;un serveur à l&#8217;autre</h1>
<p>Une autre utilisation très courante est la suivante : recopier une arborescence d&#8217;un serveur à l&#8217;autre, sans utiliser rsync, scp etc. Pourquoi se passer de ces outils ? il y a des cas où on ne les a pas. Et puis là on évite le cryptage, tout ça, charge CPU, blablabla.<br />
Ca donne :</p>
<pre>dest$ nc -l p 12345 | tar x</pre>
<pre>src$ tar cvf - mon_arborescence | nc dest 12345</pre>
<h1>EDIT : truc bien crade : ça marche aussi pour injecter du SQL&#8230;</h1>
<pre>dest$ nc -l p 12345 | mysql -u monlogin -p</pre>
<pre>src$ cat test.sql | nc dest 12345</pre>
<p>Attention à ce que vous faites là quand même.<br />
Notez qu&#8217;au lancement de la commande sur la machine de destination, le mot de passe mysql est demandé tout de suite.</p>
<p>Voilà<br />
A+</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/10/01/netcat-je-detar-dune-machine-vers-lautre/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pidgin 2.6.1 &amp; OpenFire (Jabber) 3.6.* =&gt; bug</title>
		<link>http://michauko.org/blog/2009/08/27/pidgin-2-6-1-openfire-jabber-3-6-bug/</link>
		<comments>http://michauko.org/blog/2009/08/27/pidgin-2-6-1-openfire-jabber-3-6-bug/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 07:32:03 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[bureautique]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[libpurple.dll]]></category>
		<category><![CDATA[openfire]]></category>
		<category><![CDATA[pidgin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=576</guid>
		<description><![CDATA[Ca peut resservir à d&#8217;autres je pense. Depuis mon passage en Pidgin 2.6.1 (version portable, sous windows), la connexion au serveur Jabber OpenFire 3.6.4 (sous Debian) ne marchait plus, voire faisait planter Pidgin. Le fix est décrit ici, il faut remplacer votre libpurple.dll par celle-ci. En attendant un repackaging officiel (de Pidgin je suppose, pas [...]]]></description>
			<content:encoded><![CDATA[<p>Ca peut resservir à d&#8217;autres je pense.<br />
Depuis mon passage en Pidgin 2.6.1 (version portable, sous windows), la connexion au serveur Jabber OpenFire 3.6.4 (sous Debian) ne marchait plus, voire faisait planter Pidgin.</p>
<p>Le fix est <a href="http://developer.pidgin.im/ticket/10095">décrit ici</a>, il faut remplacer votre libpurple.dll par <a href="http://pidgin.im/~nosnilmot/2.6.1/srvfix/libpurple.dll">celle-ci</a>. En attendant un repackaging officiel (de Pidgin je suppose, pas d&#8217;OpenFire).</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/08/27/pidgin-2-6-1-openfire-jabber-3-6-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer un mail après un commit sur un repository SVN</title>
		<link>http://michauko.org/blog/2009/08/04/envoyer-un-mail-apres-un-commit-sur-un-repository-svn/</link>
		<comments>http://michauko.org/blog/2009/08/04/envoyer-un-mail-apres-un-commit-sur-un-repository-svn/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 14:24:06 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[commit]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=419</guid>
		<description><![CDATA[Voici la manip à faire, sauce Debian, où tout est prévu, tout est packagé Contexte Je suppose que vous avez un SVN qui tourne. Vous voulez qu&#8217;à chaque &#171;&#160;commit&#160;&#187;, un mail soit envoyé à une personne (ou une liste de personnes), contenant tout ce qu&#8217;on peut en attendre : message, fichiers impactés etc. Sur Internet, [...]]]></description>
			<content:encoded><![CDATA[<p>Voici la manip à faire, sauce Debian, où tout est prévu, tout est packagé <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Contexte</h1>
<p>Je suppose que vous avez un SVN qui tourne. Vous voulez qu&#8217;à chaque &laquo;&nbsp;commit&nbsp;&raquo;, un mail soit envoyé à une personne (ou une liste de personnes), contenant tout ce qu&#8217;on peut en attendre : message, fichiers impactés etc.<br />
Sur Internet, tout le monde y va de son script en perl, ruby, bash etc. Debian propose un truc tout fait. J&#8217;aime bien <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Le principe est le suivant : l&#8217;outil SVN a déjà tout prévu. Il y a des &laquo;&nbsp;hooks&nbsp;&raquo; (grappin = bout de code appelable à un instant donné d&#8217;une commande SVN) qu&#8217;il suffit d&#8217;activer. Un tout petit peu de paramétrage et ça roule.<span id="more-419"></span></p>
<h1>Installez le script-qui-va-bien</h1>
<p>Le paquet <code>subversion-tools</code> vous apporte tout un tas de scripts pré-machés (voir <code>/usr/share/subversion/hook-scripts</code>), notamment un pour envoyer un mail bien propre.</p>
<h1>Activez le &laquo;&nbsp;hook&nbsp;&raquo;</h1>
<p>Il y a un modèle dans <code>/votre/repo/svn/hooks/</code>, nommé <code>post-commit.tmpl</code>. Copiez-le en <code>post-commit</code>, avec les bonnes permissions (idéalement via <code>cp post-commit.tmpl post-commit</code>).<br />
Editez-le, lisez le baratin et enfin adaptez la dernière ligne indiquant quelle adresse mail est destinatrice <em>(je considère que le serveur hébergeant SVN est capable d&#8217;envoyer des mails).</em><br />
Exemple :</p>
<pre>svnsrv:/svn/monrepo/hooks# tail post-commit
# the Subversion repository at
# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/

REPOS="$1"
REV="$2"

/usr/share/subversion/hook-scripts/commit-email.pl \
  "$REPOS" "$REV" <strong>mon.adresse@mail.com</strong>
</pre>
<p>Si votre serveur est capable d&#8217;envoyer des mails, vous n&#8217;avez rien à faire de plus, sinon, il faudra jouer avec la définition des variables $sendmail et $smtp_server (<strong>l&#8217;une ou l&#8217;autre</strong>, lisez les commentaires) dans le script <code>/usr/share/subversion/hook-scripts/commit-email.pl</code>.</p>
<p>Enfin, si vous voulez, la ligne de commande accepte plusieurs destinataires (au moins 2, je n&#8217;ai pas testé plus ni lu le code pour savoir).</p>
<h1>Testez</h1>
<p>Normalement, c&#8217;est tout. Faire un commit quelconque et voyez le résultat.<br />
J&#8217;utilise TortoiseSVN comme client, sous Windows ; ça marche nickel. Si vous vous plantez dans la configuration, Tortoise vous remonte l&#8217;erreur indiquant par exemple que le script <code>/usr/share/subversion/hook-scripts/commit-email.pl</code> est KO.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/08/04/envoyer-un-mail-apres-un-commit-sur-un-repository-svn/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Concept de &#171;&#160;Port knocking&#160;&#187;</title>
		<link>http://michauko.org/blog/2009/07/28/concept-de-port-knocking/</link>
		<comments>http://michauko.org/blog/2009/07/28/concept-de-port-knocking/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 16:02:39 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=411</guid>
		<description><![CDATA[Je ne vais pas plagier, je profite de ce qui est écrit là : http://www.commandlinefu.com/commands/view/2785/port-knocking pour résumer en quelques mots et surtout faire connaître ce site (www.commandlinefu.com) qui rassemble des commandes parfois bien sympathiques. On découvre des choses. A vos aggrégateurs RSS, voici son flux. Port knocking : - tant que votre poste client n&#8217;a [...]]]></description>
			<content:encoded><![CDATA[<p>Je ne vais pas plagier, je profite de ce qui est écrit là : <a href="http://www.commandlinefu.com/commands/view/2785/port-knocking">http://www.commandlinefu.com/commands/view/2785/port-knocking</a> pour résumer en quelques mots et surtout faire connaître ce site (<a href="http://www.commandlinefu.com/">www.commandlinefu.com</a>) qui rassemble des commandes parfois bien sympathiques. On découvre des choses.<br />
A vos aggrégateurs RSS, <a href="http://feeds2.feedburner.com/Command-line-fu">voici son flux</a>.</p>
<p>Port knocking :<br />
- tant que votre poste client n&#8217;a pas fait une bonne séquence au guichetier (knock-daemon <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , tel ou tel service est bloqué pour votre IP, via iptables.<br />
- à la fin, vous jouez une séquence pour fermer, ou pas.</p>
<p>Bon j&#8217;avoue, je n&#8217;ai pas testé. M&#8217;enfin, ça doit marcher tout ça. A voir, comme avec le genre fail2ban, si ça ne peut pas être utilisé pour provoquer des dénis de service &#8211; le genre je fais bannir/fermer telle IP que je ne suis pas, évidemment.</p>
<p>Ca + du changement de port sur certains services (SSH notamment), et votre machine devrait être une tombe, normalement. Reste les services publics (http&#8230;) pour chercher une faille.</p>
<p>(et puis si vous adorez mon site, ce dont je ne doute pas, voici <a href="http://michauko.org/blog/feed/rss/">mon flux</a> &#8211; façon de parler ; mais je doute que vous aviez besoin de mon aide pour le trouver)</p>
<p>Bonnes vacances</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/07/28/concept-de-port-knocking/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress 2.8 et plug-ins</title>
		<link>http://michauko.org/blog/2009/06/30/wordpress-28-et-plug-ins/</link>
		<comments>http://michauko.org/blog/2009/06/30/wordpress-28-et-plug-ins/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 15:54:58 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[nextgen-gallery]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-table]]></category>
		<category><![CDATA[wp-table-reloaded]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=367</guid>
		<description><![CDATA[Petit retour d&#8217;expérience suite au passage en WordPress 2.8 &#8211; en fait il s&#8217;agissait d&#8217;installations directe en 2.8 par rapport à une en 2.7, mais ça revient au même. Sur certains sites que j&#8217;ai créés sous WordPress, j&#8217;utilise certains plugins assez géniaux, comme NextGen-Gallery pour des galeries de photos faciles et jolies et aussi wp-table [...]]]></description>
			<content:encoded><![CDATA[<p>Petit retour d&#8217;expérience suite au passage en WordPress 2.8 &#8211; en fait il s&#8217;agissait d&#8217;installations directe en 2.8 par rapport à une en 2.7, mais ça revient au même.<span id="more-367"></span></p>
<p>Sur certains sites que j&#8217;ai créés sous WordPress, j&#8217;utilise certains plugins assez géniaux, comme <a href="http://wordpress.org/extend/plugins/nextgen-gallery/">NextGen-Gallery</a> pour des galeries de photos faciles et jolies et aussi wp-table (et maintenant <a href="http://wordpress.org/extend/plugins/wp-table-reloaded/">wp-table-reloaded</a>) pour gérer des tableaux facilement et sans pondre un code bancal (sans compter les fonctions d&#8217;import depuis fichiers CSV, tri par colonne etc)</p>
<p>Sur un de mes sites, j&#8217;ai hésité à passer en 2.8 suite à une remarque lue par rapport à NextGen-Gallery indiquant qu&#8217;on risquait de péter une limite mémoire. Je n&#8217;ai donc pas encore testé (manque de temps histoire d&#8217;éviter le gros downtime sur le site&#8230;)<br />
<strong>C&#8217;est sur wp-table que j&#8217;ai eu un problème, </strong>je vous en fais part car la solution est triviale, alors que le problème est de taille.</p>
<p>Lorsqu&#8217;on cherche un plug-in pour gérer les tables facilement, sous wordpress, on tombe en premier lieu sur un plug-in nommé wp-table. Si on ne fait pas gaffe, on ne voit pas qu&#8217;il est validé pour WordPress 2.3 max&#8230; Bon, à part ça, jusqu&#8217;à wordpress 2.7 (et même 2.8 bleeding edge), ça tourne bien.<br />
Mais en 2.8 officielle, ça tourne de manière bancale : les tables sont bien intégrées (bonnes balises dans le code) lorsqu&#8217;on les voit dans un article. Mais si on les voit en naviguant dans les &laquo;&nbsp;catégories&nbsp;&raquo; ou &laquo;&nbsp;tags&nbsp;&raquo; d&#8217;article, les balises HTML/CSS ne sont pas positionnées. Résultat, un tableau dégueulasse, du ligne à ligne sans aucune mise en page.</p>
<p><strong>Grosso-modo </strong>: le code appelant les vues par catégories et par tags a dû fortement changer et le plug-in n&#8217;est pas inséré où il faut en 2.8&#8230;</p>
<p><strong>Panique </strong>: il faut vite trouver un plug-in correct et exporter/réimporter tout. L&#8217;horreur en perspective.<br />
En recherchant cette fois un plug-in potable en 2.8 p our les tables, on tombe sur &laquo;&nbsp;wp-table Reloaded&nbsp;&raquo; valide en 2.8. Tiens tiens&#8230;<br />
C&#8217;est carrément extra : après l&#8217;installation (wget+unzip+activate, comme d&#8217;hab), le menu d&#8217;import trouve tout seul les tables crées par le vieux wp-table dont il semble être issu. Vu le nom, remarquez, ça semble presque logique.<br />
Résultat, à part une réindexation des numéros de tables (on recommence à 1) et la balise &laquo;&nbsp;table&nbsp;&raquo; entre crochets qui change un peu (donc tous les &laquo;&nbsp;posts&nbsp;&raquo; et &laquo;&nbsp;pages&nbsp;&raquo; à modifier un peu), le boulot est vite torché.<br />
Reste que le CSS par défaut des tables me semble un peu light.<br />
Le tri par colonne existe toujours, mais il nécessite un plugin JQuery. Je ne l&#8217;ai pas encore mis en place, mais ça ne semble pas compliqué.</p>
<p>Si vous connaissez mieux comme plug-ins de galerie photos et de gestion de tables, n&#8217;hésitez pas à en faire part. Les notations sur la page de plug-ins de WordPress sont assez légères (en général plusieurs dizaines de votes pour des dizaines de milliers de download), il est donc difficile parfois de voir si un plug-in tient la route ou pas&#8230;</p>
<p>Bloggez bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/06/30/wordpress-28-et-plug-ins/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SquidGuard : filtre d&#8217;URL et listes à jour (le plus dur)</title>
		<link>http://michauko.org/blog/2009/05/20/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur/</link>
		<comments>http://michauko.org/blog/2009/05/20/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur/#comments</comments>
		<pubDate>Wed, 20 May 2009 07:53:27 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[filtre]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[squidguard]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=313</guid>
		<description><![CDATA[Edit 02/02/2011 : l&#8217;auteur de Squidguard précise : Bonjour à tous, Suite à une demande récurrente, et visiblement partagée par un certain nombre d'organisme, nous créons une nouvelle catégorie : "social_networks". Elle permettra de filtrer plus spécifiquement les sites de réseaux sociaux, en ne les incluant pas dans des catégories finalement inadaptées. Nous essayerons, tant [...]]]></description>
			<content:encoded><![CDATA[<hr />
<strong>Edit 02/02/2011 : l&#8217;auteur de Squidguard précise :</strong></p>
<pre>    Bonjour à tous,

    Suite à une demande récurrente, et visiblement partagée par un certain nombre d'organisme, nous créons une nouvelle catégorie : "social_networks".

    Elle permettra de filtrer plus spécifiquement les sites de réseaux sociaux, en ne les incluant pas dans des catégories finalement inadaptées.

    Nous essayerons, tant que faire ce peut, de sortir les sites complets des autres catégories (par exemple facebook de la catégorie blog).

    Cordialement </pre>
<p><strong>FIN</strong></p>
<hr />
<p>Pour faire suite à l&#8217;article sur la mise en place de <a href="http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/">Privoxy pour faire sauter les pubs</a> dans toute votre société (ou chez vous sur votre petit réseau local), voici un complément : le filtre d&#8217;URL par catégorie.<span id="more-313"></span></p>
<p>J&#8217;ai eu l&#8217;occasion de jouer avec SquidGuard à travers un serveur IPCOP mis en place par mes soins dans l&#8217;école primaire de mon village, avec la bénédiction du Ministère de l&#8217;Education. Ca marche pas mal, il faut avouer. N&#8217;ayant pas de moyen, une école optera certainement pour des listes de filtrages gratuites. Si une seule était à retenir, ce serait <a href="http://cri.univ-tlse1.fr/blacklists/">celle de l&#8217;Université de Toulouse</a>.</p>
<p><strong>Deux objectifs possibles :</strong></p>
<ul>
<li>éviter les abus en entreprises :sites sociaux à la facebook, vidéos à gogos, porno et autres contre-productivités sur le clavier etc&#8230;</li>
<li>filtrer les sites pour vos enfants (<a href="http://cri.univ-tlse1.fr/documentations/cache/protection_enfance.html">lisez ça aussi, ça donnera d&#8217;autres pistes</a>)</li>
</ul>
<h1>Mise en place sur Debian</h1>
<h2>Installation et docs de base</h2>
<p>Contrairement à pas mal d&#8217;outils sous Debian, l&#8217;installation ne fait rien en soit, elle amène simplement de l&#8217;outillage et la plus grosse part est après.<br />
Commencez par installer le logiciel, via un classique <code>aptitude install squidguard</code>.<br />
Evidemment, votre squid est déjà en place et fonctionnel.</p>
<p>Pensez à lire le fichier <code>/usr/share/doc/squidguard/README.Debian</code> ; c&#8217;est d&#8217;ailleurs une règle générale après une installation de paquet Debian, mais surtout pour SquidGuard qui, après l&#8217;installation, ne fait rien tout seul.</p>
<h2>Principes de fonctionnement</h2>
<p>Je décris le principe avant de foncer la tête dans le guidon.</p>
<p>SquidGuard est simplement une sorte d&#8217;extension à base de scripts et d&#8217;ACL Squid pour filtrer des URL en se basant sur des domaines et des expressions régulières d&#8217;URL<br />
Lui même n&#8217;apporte aucun niveau de filtrage et il faudra aller chercher une liste à jour de sites. C&#8217;est là toute la difficulté.<br />
J&#8217;arrête tout de suite ceux qui pensent bloquer facebook.com en écrivant une ACL bidon genre <code>deny blabla facebook.com</code> dans Squid. Entre les sites genre how-to-un-unblock-facebook.com et les &laquo;&nbsp;redirectors&nbsp;&raquo; genre proxies anonymes, ce sera impossible. D&#8217;où l&#8217;aide de listes, payantes ou non, robotisées ou non, mises à jour régulièrement ou non.<br />
Soit vous payez une liste type urlblacklist.com, soit vous optez pour une gratuite, mais néanmoins efficace, comme celle de l&#8217;Université de Toulouse, cf. plus haut. Sinon, <a href="http://www.squidguard.org/blacklists.html">allez voir là</a> &#8211; je n&#8217;ai pas testé les 2 premiers liens.</p>
<p>La README évoqué ci-dessus parle d&#8217;un paquet &laquo;&nbsp;chastity-list&nbsp;&raquo;, <code>apt-cache search chastity</code> n&#8217;ayant rien donné, je n&#8217;ai pas cherché plus loin.</p>
<p>Une fois la liste choisie, vous obtiendrez généralement des fichiers textes, classés par catégories. Il faut les transformer en base de données type Berkeley-machin (fichiers .db) pour qu&#8217;ils soient efficaces en mémoire.<br />
Ce sera évidemment à scripter automatiquement toutes les nuits (nouvelles listes => nouveaux .db => rechargement de Squid).<br />
A noter que les fichiers .db seront générés par SquidGuard <strong>uniquement lorsqu&#8217;il verra que vous utilisez telle ou telle catégorie dans <code>/etc/squid/squidGuard.conf</code></strong>. SquidGuard n&#8217;ira pas compiler les bases inutilisées (ce qui prend du temps sur des grosses listes, genre &laquo;&nbsp;adult&nbsp;&raquo; (=porno))</p>
<p>Enfin, vous ajouterez les catégories qui vous intéressent en ayant pris soin de créer une belle page qui indique à l&#8217;utilisateur pourquoi tel site est bloqué (je suis sympa, je vous fournis un tel script minimaliste ; en gros une correction de celui fourni dans le package SquidGuard qui est passablement foireux)</p>
<p>Je ne parle pas des aspects communication en entreprise : filtrer les sites aura sûrement un impact important sur le moral des troupes, fonction du gain de bande passante, fonction de la productivité <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Mise en place pratique</h2>
<p>J&#8217;illustre la suite par le blocage de la catégorie &laquo;&nbsp;hacking&nbsp;&raquo;, où l&#8217;on pourra tester par exemple www.warez.com, à partir des listes de l&#8217;Université de Toulouse</p>
<h3>Récupération de la liste de l&#8217;Université de Toulouse</h3>
<p>La base : récupérez soit <a href="ftp://ftp.univ-tlse1.fr/blacklist/">une catégorie</a>, soit <a href="ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz">la totalité</a> (je pars sur cette option). Voyez <a href="http://cri.univ-tlse1.fr/blacklists/">l&#8217;explication de chaque catégorie ici</a>.</p>
<pre>mkdir /root/squidguard
cd /root/squidguard
wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
tar xzvf blacklists.tar.gz
mv blacklists/* /var/lib/squidguard/db/
chown -R  proxy:proxy /var/lib/squidguard/db/
</pre>
<h3>Choix d&#8217;une catégorie</h3>
<p>Dans <code>/etc/squid/squidGuard.conf</code>, on va toucher le minimum. Ajoutez n&#8217;importe où :</p>
<pre>dest hacking {
   domainlist hacking/domains
   urllist hacking/
   log guard_hacking.log
}
</pre>
<p>Pour savoir si une catégorie contient des &laquo;&nbsp;domaines&nbsp;&raquo;, des &laquo;&nbsp;URL&nbsp;&raquo; ou des &laquo;&nbsp;expressions&nbsp;&raquo;, allez voir dans <code>/var/lib/squidguard/db/la_categorie/</code>. En effet, seules quelques catégories ont des &laquo;&nbsp;expressions&nbsp;&raquo;, il s&#8217;agit avant tout des catégories de pubs. Je considère que <a href="http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/">privoxy</a> est là pour ça. Donc je n&#8217;ajoute pas <code>expression hacking/expressions</code> (même pas sûr de la syntaxe). Pour m&#8217;assurer que les &laquo;&nbsp;expressions&nbsp;&raquo; sont utilisées uniquement pour la pub, j&#8217;ai fait ça et vu des fichiers de taille 0 ou non-existant pour la plupart des catégories :</p>
<pre>srv:/var/lib/squidguard/db# ls -l */expres*
-rwxr-xr-x 1 proxy proxy  57 2006-05-10 07:47 ads/expressions
-rw-r--r-- 1 proxy proxy   0 2005-10-18 16:51 adult/expressions
-rw-r----- 1 proxy proxy   0 2002-11-06 14:08 aggressive/expressions
-rw-r----- 1 proxy proxy   0 2002-11-06 14:08 agressif/expressions
-rw-r--r-- 1 proxy proxy   0 1999-03-04 08:07 forums/expressions
-rw-r--r-- 1 proxy proxy   0 1999-03-04 08:07 mail/expressions
-rw-r--r-- 1 proxy proxy  42 2009-03-19 10:42 malware/expression
-rw-r--r-- 1 proxy proxy  47 2009-03-20 13:30 malware/expressions
-rw-r--r-- 1 proxy proxy   0 2005-10-18 16:51 porn/expressions
-rw-r--r-- 1 proxy proxy   0 1999-10-06 17:37 proxy/expressions
-rwxr-xr-x 1 proxy proxy  57 2006-05-10 07:47 publicite/expressions
-rw-r--r-- 1 proxy proxy   0 1999-10-06 17:37 redirector/expressions
-rw-r--r-- 1 proxy proxy 123 2005-06-14 21:33 strict_redirector/expressions
-rw-r--r-- 1 proxy proxy 505 2006-05-23 22:05 strong_redirector/expressions
-rw-r----- 1 proxy proxy   0 2002-11-06 14:08 violence/expressions
-rw-r--r-- 1 proxy proxy   0 1999-04-19 14:04 warez/expressions</pre>
<p>Ensuite, on indique à SquidGuard (donc à Squid) comment réagir pour cette catégorie. Modifier la section <code>acl {}</code> du fichier <code>/etc/squid/squidGuard.conf</code> pour qu&#8217;il y ait ça (gardez ou non la palanquée de lignes de commentaires) :</p>
<pre>acl {
   default {
      pass !hacking all
      redirect http://srv/cgi-bin/squidGuard-simple.cgi?clientaddr=%a&#038;srcclass=%s&#038;targetclass=%t&#038;url=%u
   }
}
</pre>
<p>Si vous voulez bloquer plusieurs catégories, ce sera à base de <code>pass !hacking !adult !blabla all</code>.<br />
Notez dans la section <code>acl {}</code> l&#8217;adresse de redirection utilisée : une page spéciale hébergée sur le serveur, nommée <code>squidGuard-simple.cgi</code>. Il faut maintenant la mettre en place.<br />
A noter aussi, il me semble que de base, la ligne &laquo;&nbsp;redirect&nbsp;&raquo; contient des &laquo;&nbsp;+&nbsp;&raquo; à la place des &laquo;&nbsp;&&nbsp;&raquo; pour passer les arguments. J&#8217;ai pas bien pigé, j&#8217;ai toujours vu des &laquo;&nbsp;&&nbsp;&raquo; et avec les &laquo;&nbsp;+&nbsp;&raquo;, ça ne marchait pas.</p>
<h3>Redirection vers une page spéciale</h3>
<ul>
<li>Attention, j&#8217;ai ouï dire que si le script n&#8217;était pas là, ça passait silencieusement et la requête aboutissait malgré la demande de blocage. Je n&#8217;ai pas testé, j&#8217;ai surtout testé une URL de chaque catégorie que je suis censé bloqué.
</li>
<li>Je considère que votre site web est configuré pour que /cgi-bin/ soit en un &laquo;&nbsp;Alias&nbsp;&raquo; de &laquo;&nbsp;/usr/lib/cgi-bin/&nbsp;&raquo;, c&#8217;est en général défini dans la configuration par défaut d&#8217;Apache2 et vous pouvez vous en assurer rapidement avec cette commande <code>grep cgi-bin /etc/apache2/sites-enabled/*</code> pour voir si ça répond &#8211; en gros.</li>
<li>La liste des variables que l&#8217;on peut passer au script de redirection est donnée dans la doc HTML, <code>/usr/share/doc/squidguard/CONFIGURATION.html</code></li>
</ul>
<p>Deux scripts sont fournis par le mainteneur du paquet Debian pour nous donner une trame pour l&#8217;écriture du script de redirection &#8211; le script qui dira &laquo;&nbsp;accès bloqué blabla, si vous pensez que c&#8217;est une erreur, contactez l&#8217;administrateur blabla&nbsp;&raquo;. Ils sont là :</p>
<pre>srv:/var/lib/squidguard/db# dpkg -S squidGuard*.cgi
squidguard: /usr/share/doc/squidguard/examples/squidGuard.cgi.gz
squidguard: /usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz</pre>
<p>Le premier est apparement plus complet, prévu pour du multi-langues etc, <strong>mais récupère comme un pied les variables qu&#8217;on lui passe</strong>. J&#8217;ai opté pour l&#8217;autre car rapidement, j&#8217;ai pu mettre en place une page qui indiquait clairement et simplement le site bloqué, la catégorie, l&#8217;IP du demandeur et donnait le mail de contact de l&#8217;administrateur.<br />
Donc soit vous optez pour ces scripts, soit pour le <a href='http://michauko.org/blog/wp-content/uploads/2009/05/squidguard-simple.zip'>mien fourni ici</a>, basé sur le 2è script, traduit en français et épuré de certains trucs inutiles. Voyez :</p>
<p><a href="http://michauko.org/blog/wp-content/uploads/2009/05/20090520_092614.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/05/20090520_092614-300x213.png" alt="squidguard" title="squidguard" width="300" height="213" class="aligncenter size-medium wp-image-336" /></a></p>
<p>On est fin prêt pour un test grandeur nature.</p>
<h3>Relance de Squid via la compilation des listes de blocage</h3>
<p>Lancez la commande <code>/usr/sbin/update-squidguard</code> pour contrôler les droits sur les fichiers de <code>/var/lib/squidguard/db/</code> et générer les .db.<br />
Attention, sur la liste &laquo;&nbsp;adult&nbsp;&raquo; (environ 1 million de domaines), ça peut prendre quelques minutes.<br />
Ce script recharge Squid.<br />
Testez un site de la catégorie &laquo;&nbsp;hacking&nbsp;&raquo;, exemple www.warez.com</p>
<h2>Script de mise à jour automatiques des listes</h2>
<p>Voici un script que j&#8217;ai mis en crontab pour automatiser la récupération de la liste de l&#8217;Université de Toulouse (si mise à jour), la mise à jour qui va bien, création de .db et relance de Squid.</p>
<pre>srv:~# cat /root/squidguard/update_toulouse.sh
#!/bin/sh
cd /root/squidguard
wget -N ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
rm -rf blacklists
rm -rf /var/lib/squidguard/db/*
tar -xzvf blacklists.tar.gz
# proprio et perm fixées de toute manière par update-squidguard
chown -R proxy:proxy blacklists
mv blacklists/* /var/lib/squidguard/db/
/usr/sbin/update-squidguard
# A priori, si le site est down ou connx internet HS, on reutilisera le .tar.gz actuel
# donc pas de risque de se retrouver avec une base vide
</pre>
<p>Mettez les droits d&#8217;exécution via <code>chmod u+x /root/squidguard/update_toulouse.sh</code> et collez ça dans la crontab :</p>
<pre>0 3 * * 1-5     root    /root/squidguard/update_toulouse.sh</pre>
<p>Ca devrait rouler !</p>
<h2>Divers</h2>
<h3>Log des accès interdits</h3>
<p>J&#8217;ai passé sous silence la ligne &laquo;&nbsp;log guard_hacking.log&nbsp;&raquo;. Elle est optionnelle et permet de garder ou non une trace des accès interdit, par catégorie. A voir, vie privée des gens, tout ça. J&#8217;ai choisi de la nommer quelque_chose.log car ce fichier ira directement dans <code>/var/log/squid/</code> et sera donc &laquo;&nbsp;logrotaté&nbsp;&raquo; naturellement comme tous les logs Squid, via ce qu&#8217;on trouve en standard dans le logrotate de Squid, <code>/etc/logrotate.d/squid</code>, à savoir : <code>/var/log/squid/*.log</code><br />
Vu ?</p>
<h3>Plages horaires</h3>
<p>Vous noterez que la conf simpliste ici peut être étoffée, dans le fichier <code>/etc/squid<br />
/squidGuard.conf</code>, vous avez tous les commentaires nécessaires,  notamment pour faire du [dé]blocage par plages horaires.</p>
<h3>D&#8217;autres compléments pour Squid ?</h3>
<p>Après <a href="http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/">Privoxy</a>, il faudrait un 3è article maintenant sur HAVP. Je vais y penser éventuellement.</p>
<h3>Générer la conf pour toutes les catégories</h3>
<p>Ne réutilisez pas le résultat brutalement, vous bloqueriez même Google, car il est listé dans ce qui ressemble plus à une whiteliste propre à l&#8217;Université de Toulouse, la catégorie &laquo;&nbsp;liste_bu&nbsp;&raquo;.<br />
Afin d&#8217;obtenir la liste complète des déclarations de catégories pour squidGuard.conf, vous pouvez utiliser celà :</p>
<pre>srv:/var/lib/squidguard/db# for i in `find . -maxdepth 1 -type d|awk -F'/' '{print $2}' | sort`
do
	echo -e dest $i {
	echo -e \\t"domainlist $i/domains"
	echo -e \\t"urllist $i/urls"
	echo -e \\t"log guard_$i.log"
	echo }
done</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/05/20/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Privoxy sur Squid : virer les pubs pour tout le monde</title>
		<link>http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/</link>
		<comments>http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/#comments</comments>
		<pubDate>Tue, 19 May 2009 14:57:52 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[privoxy]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=299</guid>
		<description><![CDATA[Sur mon firefox, j&#8217;utilise &#171;&#160;AdBlock Plus&#160;&#187; pour filtrer les pubs. Mais dans une société où IE est le maître (pour cause d&#8217;intranets pas compatibles, de pas de droit d&#8217;admins et d&#8217;utilisateurs contents avec IE (!)), amuse toi pour faire sauter les pubs pour tout le monde. J&#8217;ai entendu parler de IE7pro, une extension pour IE [...]]]></description>
			<content:encoded><![CDATA[<p>Sur mon firefox, j&#8217;utilise &laquo;&nbsp;<a href="https://addons.mozilla.org/fr/firefox/addon/1865">AdBlock Plus</a>&nbsp;&raquo; pour filtrer les pubs. Mais dans une société où IE est le maître (pour cause d&#8217;intranets pas compatibles, de pas de droit d&#8217;admins et d&#8217;utilisateurs contents avec IE (!)), amuse toi pour faire sauter les pubs pour tout le monde.<br />
J&#8217;ai entendu parler de IE7pro, une extension pour IE (je ne savais même pas que ça existait). Je l&#8217;ai donc installé et désinstallé dans la foulée. C&#8217;est naze.<br />
D&#8217;où l&#8217;idée de déterrer ce bon vieux <a href="http://www.privoxy.org/">privoxy</a> que j&#8217;utilisais localement sur mon PC avant que &laquo;&nbsp;Adblock Plus&nbsp;&raquo; n&#8217;existe. Il peut se chaîner avec un autre proxy, notamment Squid, afin de filtrer toutes les pubs. (toutes = le mieux possible)</p>
<p>Allez zou, mise en place de la chose sur un serveur avec Squid, pour en faire profiter tout le monde.<span id="more-299"></span></p>
<h1>Quelques remarques par rapport à Debian</h1>
<p>Je ne connais pas trop le rythme d&#8217;update des règles de privoxy. Ce que j&#8217;en ai compris, c&#8217;est qu&#8217;elles sont intégrées au package privoxy. A mon sens, ça devrait être dissocié, par exemple dans le dépôt &laquo;&nbsp;volatile&nbsp;&raquo;.<br />
Ca ne l&#8217;est pas. Et comme les pubs évoluent, j&#8217;ai un peu hésité.</p>
<blockquote><p>EDIT : j&#8217;ai changé d&#8217;avis sur ce qui suit : j&#8217;ai pris la version officielle Debian. Cf. les commentaires</p></blockquote>
<p><em>Finalement, j&#8217;ai opté pour la <a href="http://sourceforge.net/project/showfiles.php?group_id=11118">version packagée Debian sur le site de privoxy</a> plutôt que la version officielle dans la &laquo;&nbsp;stable&nbsp;&raquo;. Moins pratique pour mettre à jour, mais je n&#8217;aimerais pas qu&#8217;un nouveau genre de pubs ne soit pas filtré ou à l&#8217;inverse, trop de coups de haches sur certains sites.<br />
</em> En &laquo;&nbsp;stable&nbsp;&raquo;, on est en 3.0.9 si je ne dis pas de bêtise, contre 3.0.12 en .deb sur le site.</p>
<p>J&#8217;ai aussi essayé de trouver une méthode facile pour convertir les expressions régulières d&#8217;Adblock Plus pour privoxy. J&#8217;ai lâché l&#8217;affaire. Si quelqu&#8217;un sait faire, ça peut être intéressant.</p>
<h1>Quelques chiffres après 2 semaines d&#8217;utilisation</h1>
<p>Histoire de mettre l&#8217;eau à la bouche. 100 personnes surfant raisonnablement ont vus (façon de parler) 10% de leurs requêtes bloquées par privoxy. C&#8217;est toujours ça d&#8217;économisé, mais c&#8217;est surtout le gain sur la pollution visuelle qui vaut le coup.<br />
Je n&#8217;ai pas vu de différences sur quelques sites où j&#8217;avais l&#8217;habitude d&#8217;aller via &laquo;&nbsp;Firefox+AdBlockPlus&nbsp;&raquo; par rapport à &laquo;&nbsp;n&#8217;importe quel navigateur+privoxy sans adblock plus évidemment&nbsp;&raquo;.</p>
<h1>Mise en place sur Debian</h1>
<h2>Installation</h2>
<p>Installez donc le <a href="http://sourceforge.net/project/showfiles.php?group_id=11118">package Debian </a>, précédemment téléchargé, avec la commande suivante :</p>
<pre>dpkg -i privoxy_3.0.12-1_i386.deb</pre>
<h2>Paramétrage et tests de base</h2>
<p>Tout se passe dans <code>/etc/privoxy/config</code>. Vous n&#8217;avez qu&#8217;une chose à modifier pour tester votre privoxy en direct :</p>
<pre>listen-address  localhost:8118</pre>
<p>Si le service est sur un serveur (et pas votre PC), changez &laquo;&nbsp;localhost&nbsp;&raquo; en &laquo;&nbsp;*&nbsp;&raquo; ou l&#8217;IP de la machine sur le LAN et relancez via <code>/etc/init.d/privoxy restart</code><br />
Bien sûr, il faut indiquer à votre navigateur d&#8217;utiliser le proxy sur cette machine, port 8118.<br />
<strong>A la fin : faites bien attention à la valeur choisie (ou à vos règles de firewall si elles filtrent l&#8217;accès au serveur squid/privoxy), il ne faudrait pas qu&#8217;un utilisateur puisse adresser en direct privoxy en court-circuitant squid&#8230;</strong></p>
<h2>Interco avec Squid</h2>
<p>La doc officielle de privoxy dit de chaîner dans l&#8217;ordre : PC -> squid -> privoxy<br />
Il doit y avoir une raison, peut-être pour ne pas court-circuiter les éventuelles ACL de Squid, qui permettraient par exemple un certain traitement suivant l&#8217;IP source de la requête.<br />
Bon bref, c&#8217;est donc au niveau de Squid qu&#8217;il faut paramétrer. Cherchez le mot &laquo;&nbsp;squid&nbsp;&raquo; dans la doc <a href="http://www.privoxy.org/user-manual/config.html">http://www.privoxy.org/user-manual/config.html</a>. En résumé, ajoutez où il faut dans <code>/etc/squid/squid.conf</code> :</p>
<pre>cache_peer 127.0.0.1 parent 8118 7 no-query
acl ftp proto FTP
always_direct allow ftp
never_direct allow all</pre>
<p>Dans l&#8217;exemple, 127.0.0.1 indique que privoxy est sur la même machine que squid, sinon mettez l&#8217;IP de privoxy, et son port, par défaut 8118.<br />
A noter que squid fait proxy FTP dans mon exemple, sinon adaptez.<br />
Relancez squid, un <code>/etc/init.d/squid reload</code> doit suffire.</p>
<h1>Pour voir les stats vite fait</h1>
<p><a href="http://p.p/">http://p.p/</a><br />
Ca peut servir pour configurer l&#8217;outil aussi, si vous avez activé ce qu&#8217;il faut<br />
Evidemment, vous serez gentils de whitelister michauko.org. Je me suis pas tapé la mise en place de Google AdSense pour rien <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ouais bon, ça va&#8230; c&#8217;est pour financer un jour quelques mois de mon serveur&#8230;</p>
<h1>A suivre</h1>
<p>L&#8217;article SquidGuard, l&#8217;ami de Squid quand l&#8217;accès Internet est un peu trop surchargé par 99% d&#8217;inutile.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Joujou avec les encodages 8859-1, UTF-8 etc</title>
		<link>http://michauko.org/blog/2009/05/12/joujou-avec-les-encodages-8859-1-utf-8-etc/</link>
		<comments>http://michauko.org/blog/2009/05/12/joujou-avec-les-encodages-8859-1-utf-8-etc/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:50:49 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[iso-8859-1]]></category>
		<category><![CDATA[od]]></category>
		<category><![CDATA[rxp]]></category>
		<category><![CDATA[tcs]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=295</guid>
		<description><![CDATA[A l&#8217;occasion de l&#8217;écriture d&#8217;un script Python pour convertir un CSV-dégueu en XML-UTF8, le tout en environnement windows+linux et partant d&#8217;un CSV issu d&#8217;un Excel issu de copier-coller dégueulasses, j&#8217;ai eu à jouer avec des conversions de charset, de formats UNIX/Windows etc etc Ca m&#8217;a permis de découvrir 2/3 outils, objet de cet article ; [...]]]></description>
			<content:encoded><![CDATA[<p>A l&#8217;occasion de l&#8217;écriture d&#8217;un script Python pour convertir un CSV-dégueu en XML-UTF8, le tout en environnement windows+linux et partant d&#8217;un CSV issu d&#8217;un Excel issu de copier-coller dégueulasses, j&#8217;ai eu à jouer avec des conversions de charset, de formats UNIX/Windows etc etc<br />
Ca m&#8217;a permis de découvrir 2/3 outils, objet de cet article ; je passe sur la multitude d&#8217;autres problèmes de nettoyage du contenu issu du copier-coller : guillemets relookés par je ne sais qui (Word ?), tirets relookés aussi etc&#8230;<span id="more-295"></span></p>
<p>Les basiques :</p>
<ul>
<li>file : permet d&#8217;identifier un type de fichier, notamment, pour du texte brut, s&#8217;il est encodé en ISO-machin ou en UTF-8. A noter, si le texte en question est à l&#8217;intérieur d&#8217;un script, enfin bref, de quelque chose enrobant ce texte, &laquo;&nbsp;file&nbsp;&raquo; se limitera à détecter le type de script, par exemple. Dans ce cas, extraire le texte en question dans un fichier à part (via des &laquo;&nbsp;grep&nbsp;&raquo;) afin d&#8217;analyser l&#8217;encodage de ce texte. J&#8217;ai pas trouvé plus simple</li>
<li>dos2unix : conversion des fins de lignes DOS (2 octets \010\013 (ou l&#8217;inverse) en un seul (\010 ou l&#8217;autre, je ne sais jamais <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Si vous êtes passés par un transfert FTP type ASCII, c&#8217;est fait totomatiquement. Mais en SFTP ou autre chose, niet.</li>
<li>unix2dos : devinez</li>
</ul>
<p>Ensuite :</p>
<ul>
<li>tcs : permet de convertir un fichier encodé avec un charset vers un autre, exemple : <code>tcs -f 8859-1 -t utf source > dest</code>. Faites des &laquo;&nbsp;file&nbsp;&raquo; ensuite pour voir.</li>
<li>rxp : valide la syntaxe XML (et l&#8217;encodage utilisé) d&#8217;un fichier XML</li>
<li>od : affiche en hexa, ascii, octal (etc) un fichier. On peut cumuler et mettre en parallèle l&#8217;ascii avec l&#8217;hexa, par exemple</li>
</ul>
<p>Voilà, c&#8217;est tout.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/05/12/joujou-avec-les-encodages-8859-1-utf-8-etc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installer un serveur Jabber (OpenFire) sur Linux (Debian), connecté à un Active Directory (Windows, donc)</title>
		<link>http://michauko.org/blog/2009/04/29/installer-un-serveur-jabber-openfire-sur-linux-debian-connecte-a-un-active-directory-windows-donc/</link>
		<comments>http://michauko.org/blog/2009/04/29/installer-un-serveur-jabber-openfire-sur-linux-debian-connecte-a-un-active-directory-windows-donc/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 15:19:13 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[AD]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[openfire]]></category>
		<category><![CDATA[pidgin]]></category>
		<category><![CDATA[spark]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=258</guid>
		<description><![CDATA[(pour les lecteurs planet-libre, oui, openfire en java ça-pue-c-est-pas-libre &#8482; et active-directory-c-est-le-mal-incarné &#8482;, néanmoins openfire est à des années lumières d&#8217;ejabberd, et un paysage avec un AD pour le parc Windows et néanmoins certains serveurs d&#8217;infrastructure et applicatifs sous Linux, ça existe et si vous êtes pas content, banissez-moi, merci) Présentation du contexte Le but [...]]]></description>
			<content:encoded><![CDATA[<p><em>(pour les lecteurs planet-libre, oui, openfire en java ça-pue-c-est-pas-libre &#8482; et active-directory-c-est-le-mal-incarné &#8482;, néanmoins openfire est à des années lumières d&#8217;ejabberd, et un paysage avec un AD pour le parc Windows et néanmoins certains serveurs d&#8217;infrastructure et applicatifs sous Linux, ça existe et si vous êtes pas content, banissez-moi, merci)</em></p>
<h2>Présentation du contexte</h2>
<p><strong>Le but de cet article de montrer à des noob&#8217; de l&#8217;Active Directory (comme moi) comment connecter un outil sous Linux à un AD, sans trop connaître la structure d&#8217;un AD. Ca peut s&#8217;avérer pratique dans bien des cas d&#8217;outils très performants sous Linux mais pour lesquels on a besoin de &laquo;&nbsp;la base des utilisateurs Windows pour éviter la double déclaration des comptes et les mots de passes différents pour chaque appli&nbsp;&raquo;. Vous voyez le principe ?</strong><br />
L&#8217;autre but est de montrer un outil qui permet de s&#8217;y retrouver facilement dans un AD.</p>
<p>J&#8217;ai choisi OpenFire car mes dernières expériences avec ejabberd ne m&#8217;ont pas convaincues. OpenFire (anciennement WildFire) est super propre d&#8217;interface et est distribué par une entreprise, &laquo;&nbsp;<a href="http://www.igniterealtime.org/">Jive Software</a>&nbsp;&raquo;<br />
Connectable sans peine à des LDAP, dont AD (et OpenLDAP, Novell etc), c&#8217;est un bon cas d&#8217;école.<br />
Pour les psychos, ça reste une application publiée sous licence GPL tout de même.<span id="more-258"></span></p>
<p>Sur le <a href="http://www.igniterealtime.org/">site de l&#8217;éditeur</a>, ils proposent le serveur OpenFire packagé pour Redhat, Debian, Windows, Mac etc.<br />
Je passe sur l&#8217;installation, (sous Debian <code>dpkg -i openfire*deb</code>)<br />
Ensuite tout se passe par le web, à l&#8217;adresse http://votre.serveur:9090/</p>
<h2>La conf AD, LE outil merveilleux pour ne pas s&#8217;y perdre</h2>
<p>Quelques remarques :</p>
<ul>
<li>Les étapes de configuration sont relativement simples, je zoome uniquement sur la partie AD</li>
<li>J&#8217;ai opté pour une base de données embarquées, &laquo;&nbsp;volatile&nbsp;&raquo;</li>
<li>A noter d&#8217;ailleurs que pour sauvegarder la conf de votre serveur OpenFire, vous n&#8217;aurez besoin &#8211; si je ne dis pas d&#8217;ânerie &#8211; que de <code>/etc/openfire/</code> et de <code>/var/lib/openfire/embedded-db/openfire.script</code> qui est le script de création de base à la volée (au lancement du service). Attention, il contient des mots de passe sensibles en clair, comme l&#8217;admin AD&#8230;. de base, le package Debian est propre et prive les accès à openfire:openfire, chmod à base de 770/660</li>
</ul>
<p>Bon, une fois l&#8217;installation un peu déroulée, arrivent les premières étapes de configuration de l&#8217;AD. Et là, je ne saurais trop vous recommander l&#8217;excellent outil de <del datetime="2009-04-29T13:37:40+00:00">l&#8217;excellent sysinternals.com</del> Microsoft nommé &laquo;&nbsp;<a href="http://technet.microsoft.com/en-us/sysinternals/bb963907.aspx">Active Directory explorer</a>&laquo;&nbsp;, qui, pour chaque noeud que vous visitez dans l&#8217;AD, vous donne sa syntaxe complète et pour chaque élement, les noms des attributs, pas leur libellé. Du bonheur en barre. Exemple, je localise mes utilisateurs :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_081259.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_081259-300x221.png" alt="openfire1" title="openfire1" width="300" height="221" class="aligncenter size-medium wp-image-260" /></a></p>
<p>J&#8217;injecte ça dans la conf OpenFire :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_081451.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_081451-300x242.png" alt="openfire2" title="openfire2" width="300" height="242" class="aligncenter size-medium wp-image-261" /></a></p>
<p>Ensuite, sur l&#8217;écran suivant qui consiste à indiquer quel sous-ensemble des utilisateurs pourra s&#8217;authentifier, j&#8217;utilise encore l&#8217;&nbsp;&raquo;AD Explorer&nbsp;&raquo;, je repère quel champ caractérise mes utilisateurs réels des comptes systèmes et autres comptes qui ne sont pas des gens de la vraie vie :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_081625.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_081625-263x300.png" alt="openfire3" title="openfire3" width="263" height="300" class="aligncenter size-medium wp-image-262" /></a></p>
<p>L&#8217;idée était ensuite dans mon cas de restreindre l&#8217;accès au service à un certain groupe d&#8217;utilisateurs, à savoir les &laquo;&nbsp;Correspondants Informatiques&nbsp;&raquo;, j&#8217;ai modifié la valeur standard de filtre utilisateur pour refléter mes choix :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_083841.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_083841-220x300.png" alt="openfire4" title="openfire4" width="220" height="300" class="aligncenter size-medium wp-image-263" /></a><br />
Pour celà, vous repérerez que le champ &laquo;&nbsp;memberOf&nbsp;&raquo; indique tous les groupes d&#8217;appartenance des utilisateurs, bref, vous modifiez le filtre pour y ajouter un (memberOf=CN=blabla,blabla,DC=blabla,DC=com).<br />
Ainsi, seuls les utilisateurs de ce groupe seront pris en compte lors de l&#8217;authentification par AD.<br />
Enfin, le bas du tableau permet de &laquo;&nbsp;mapper&nbsp;&raquo; les champs de l&#8217;utilisateur aux infos personnelles visibles via Jabber. Faites votre marché, utilisez le bouton &laquo;&nbsp;test&nbsp;&raquo; en bas pour voir si ça récupère ce qu&#8217;il faut comme il faut.</p>
<p>Ensuite, dans mon cas, le tri des utilisateurs en groupe était le bon par défaut :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_084916.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/04/20090429_084916-300x202.png" alt="openfire5" title="openfire5" width="300" height="202" class="alignnone size-medium wp-image-264" /></a></p>
<p>Et, dernière étape, déclarer des comptes admin parmi les comptes AD existant. Mettez votre compte <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  car la modif à la main est moins simple (éditer le champ <code>admin.authorizedJIDs</code> dans les fichiers de conf de la base embarquée)</p>
<p>Voilà&#8230;<br />
Une fois connecté à la console d&#8217;admin, allez voir la liste d&#8217;utilisateurs, vous devriez trouver uniquement le sous-ensemble sélectionné, &laquo;&nbsp;Correspondants Informatiques&nbsp;&raquo; dans mon cas.</p>
<h2>Les clients</h2>
<p>Vous pourrez utiliser pidgin ou le client de l&#8217;éditeur d&#8217;OpenFire, Spark &#8211; ou même sa version web pour éviter de déployer la moindre application. Ou tout autre client XMPP.<br />
Ou faites votre choix là : <a href="http://en.wikipedia.org/wiki/List_of_XMPP_client_software">http://en.wikipedia.org/wiki/List_of_XMPP_client_software</a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/04/29/installer-un-serveur-jabber-openfire-sur-linux-debian-connecte-a-un-active-directory-windows-donc/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Réseau non reconnu : 82567LM-3, comment faire ?</title>
		<link>http://michauko.org/blog/2009/04/28/reseau-non-reconnu-82567lm-3-comment-faire/</link>
		<comments>http://michauko.org/blog/2009/04/28/reseau-non-reconnu-82567lm-3-comment-faire/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 14:43:03 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[82567]]></category>
		<category><![CDATA[82567LM-3]]></category>
		<category><![CDATA[e1000e]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[noyau]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=253</guid>
		<description><![CDATA[Cet article s&#8217;applique à coup sûr à la dernière Debian stable (Lenny) ; probablement à quelques Ubuntu, au moins la LTS actuelle (8.04), je n&#8217;en sais rien pour les versions suivantes (8.10&#8230;). Le principe que j&#8217;expose reste le même ; il faudra simplement adapter pour de l&#8217;Ubuntu. J&#8217;ai eu l&#8217;idée de consigner ça par écrit [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article s&#8217;applique à coup sûr à la dernière Debian stable (Lenny) ; probablement à quelques Ubuntu, au moins la LTS actuelle (8.04), je n&#8217;en sais rien pour les versions suivantes (8.10&#8230;). Le principe que j&#8217;expose reste le même ; il faudra simplement adapter pour de l&#8217;Ubuntu.<br />
J&#8217;ai eu l&#8217;idée de consigner ça par écrit pour les gens qui tomberaient sur le même problème et aussi car la méthode utilisée peut être utile dans d&#8217;autres cas (changement de noyau en allant chercher un .deb plus récent ; simple pour beaucoup, mystérieux pour d&#8217;autres)<span id="more-253"></span></p>
<h2>Le contexte</h2>
<p><strong>J&#8217;installe une Debian stable (Lenny) par le réseau (netinst) sur une machine &laquo;&nbsp;trop récente&nbsp;&raquo; (DELL Optiplex 760) équipée du dernier chipset Intel ICH10 (ou ICH9, j&#8217;ai trouvé des infos contradictoires sur Google, à vrai dire, je m&#8217;en cogne). Souci : carte réseau non gérée, ce qui est passablement gênant pour une installation par le réseau.</strong></p>
<p>Je décris ici 3 méthodes pour s&#8217;en sortir (2 méthodes théoriques et celle que j&#8217;ai utilisée pour s&#8217;en sortir facilement).</p>
<h2>Méthode 1 : je compile</h2>
<p>Sur Google, on tombe rapidement sur des types expliquant comment compiler le driver fourni par Intel sur son site (driver e1000e, dernier en date : e1000e-0.5.18.3.tar.gz)<br />
Le problème dans le cas qui m&#8217;intéresse est que je n&#8217;ai pas tous les outils de compilation sur une &laquo;&nbsp;Lenny netinst&nbsp;&raquo;, il manque &laquo;&nbsp;make&nbsp;&raquo; par exemple. Déjà on a les &laquo;&nbsp;headers&nbsp;&raquo; du noyau, c&#8217;est bien.<br />
J&#8217;ai voulu compiler sur une autre machine Lenny Stable, mais, elle avait un minimum de vécu et notamment un kernel 2.6.28 mis à jour (le -2 et pas le -1 du dernier CD Lenny officiel en date).<br />
Donc j&#8217;avais des doutes sur la simplicité de la manip, genre : rebooter la machine de compilation en 2.6.28-1, compiler, injecter ce driver sur ma machine cible, mettre à jour l&#8217;OS (donc le noyau en 2.6.28-2) en descendant les outils de compilation et rebooter en 2.6.28-2 pour recompiler à nouveau. Chiantissime.</p>
<p>A noter aussi qu&#8217;on tombe sur des articles flippants comme quoi les noyaux avant 2.6.27-14 (de tête) ont un driver pourri et on risque de tout casser (physiquement, si j&#8217;ai bien lu en diagonale)</p>
<h2>Méthode 2 : je cherche un .deb</h2>
<p>Je ne connais pas de liste super géniale de paquets non-officiels pour Debian (à part les classiques backports, apt-get.org etc). Bref, je n&#8217;ai pas trouvé un mec sympa pour me filer un .deb qu&#8217;il aurait fait pour le noyau qui m&#8217;intéresse / pour les noyaux en fait, puisqu&#8217;il y a un upgrade qui guette (cf. méthode 1)<br />
Bref, pénible là aussi.</p>
<h2>Méthode 3 recommandée : je change de noyau</h2>
<p>L&#8217;autre méthode fût de voir que le noyau disponible en &laquo;&nbsp;SID unstable&nbsp;&raquo; (noyau 2.6.29-xxx) contenait un driver à jour pour ma carte réseau.<br />
Comme le noyau n&#8217;a pas beaucoup de dépendances à respecter et qu&#8217;il y a un meta-paquet englobant le noyau (linux-image-2.6-686), ça m&#8217;a paru être une bonne méthode pour installer facilement ce driver tout en restant dans les clous vis-à-vis des outils d&#8217;update du système.<br />
Solution plus propre que de créer son .deb à l&#8217;arrache je trouve</p>
<p>J&#8217;ai donc été cherché les paquets suivants : <a href="http://packages.debian.org/sid/linux-image-2.6-686">linux-image-2.6-686 pour SID</a> (un meta-paquet) et le noyau, le vrai, le <a href="http://packages.debian.org/sid/linux-image-2.6.29-1-686">2.6.29-1 à ce jour sur SID</a></p>
<p>Ensuite, j&#8217;ai ramené ça par clef USB (forcément, le réseau est mort&#8230;) et ai exécuté un <code>dpkg -i linux-image*deb</code> dans le répertoire où j&#8217;avais stocké tout ça.<br />
GRUB a fait le reste automatiquement.</p>
<p>Enfin, une fois rebooté, comme j&#8217;avais forcément un peu zappé la configuration réseau lors de l&#8217;installation, il faudra aller injecter le minimum, par exemple :</p>
<pre>user@opti:~$ cat /etc/network/interfaces
[...]
auto eth0
iface eth0 inet dhcp</pre>
<p>puis initialiser la carte réseau : <code>ifup eth0</code><br />
Voilà, ça devrait le faire</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/04/28/reseau-non-reconnu-82567lm-3-comment-faire/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

