<?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; Debian</title>
	<atom:link href="http://michauko.org/blog/category/debian/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>Tue, 29 Nov 2011 11:45:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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>CIFS VFS: No response for cmd 50 mid xxx</title>
		<link>http://michauko.org/blog/2011/10/18/cifs-vfs-no-response-for-cmd-50-mid-xxx/</link>
		<comments>http://michauko.org/blog/2011/10/18/cifs-vfs-no-response-for-cmd-50-mid-xxx/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 13:47:04 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[CIFS]]></category>
		<category><![CDATA[CIFS VFS]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[OplockEnabled]]></category>
		<category><![CDATA[samba]]></category>

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

		<guid isPermaLink="false">http://michauko.org/blog/?p=1256</guid>
		<description><![CDATA[Le lecteur flash incorporé à Ampache n&#8217;est pas dans le paquet officiel de Debian, pas compatible avec le DFSG. Bref. Pour l&#8217;ajouter, dézipper le contenu du sous-répertoire xspf jukebox de ce fichier ZIP (http://lacymorrow.com/projects/jukebox/source.zip) dans /usr/share/ampache/www/modules/flash et le lecteur flash incorporé fonctionnera.]]></description>
			<content:encoded><![CDATA[<p>Le lecteur flash incorporé à Ampache n&#8217;est pas dans le paquet officiel de Debian, pas compatible avec le DFSG. Bref.<br />
Pour l&#8217;ajouter, dézipper le contenu du sous-répertoire <code>xspf jukebox</code> de ce fichier ZIP (http://lacymorrow.com/projects/jukebox/source.zip) dans <code>/usr/share/ampache/www/modules/flash</code> et le lecteur flash incorporé fonctionnera.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/08/22/ampache-debian-et-le-flash-pas-libre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mailing-lists multi-domaine avec mailman sur un postfix &#171;&#160;virtuel&#160;&#187; (mysql)</title>
		<link>http://michauko.org/blog/2011/06/10/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql/</link>
		<comments>http://michauko.org/blog/2011/06/10/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 13:43:54 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[add_members]]></category>
		<category><![CDATA[list_lists]]></category>
		<category><![CDATA[mailman]]></category>
		<category><![CDATA[newlist]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postfix-mysql]]></category>
		<category><![CDATA[rmlist]]></category>
		<category><![CDATA[sympa]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1210</guid>
		<description><![CDATA[Nouvel article pour compléter tous ceux sur l&#8217;installation d&#8217;un serveur de mails bien complet (voir ces tags). Cette fois il s&#8217;agit d&#8217;ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc. Bref, au choix, je pensais à &#171;&#160;sympa&#160;&#187; (dont j&#8217;ai déjà un peu parlé) ou mailman, que je ne connaissais pas. &#171;&#160;sympa&#160;&#187; en [...]]]></description>
			<content:encoded><![CDATA[<p>Nouvel article pour compléter tous ceux sur l&#8217;installation d&#8217;un serveur de mails bien complet (voir <a href="http://michauko.org/blog/?s=virtuel+postfix" target="_blank">ces tags</a>).<br />
Cette fois il s&#8217;agit d&#8217;ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc.<br />
Bref, au choix, je pensais à &laquo;&nbsp;sympa&nbsp;&raquo; (<a href="http://michauko.org/blog/tag/sympa/" target="_blank">dont j&#8217;ai déjà un peu parlé</a>) ou mailman, que je ne connaissais pas.</p>
<ul>
<li>
&laquo;&nbsp;sympa&nbsp;&raquo; en mode multi-domaine, arrêtez-moi si je me trompe, sur une installation postfix &laquo;&nbsp;virtuelle&nbsp;&raquo; (utilisateurs en base MySQL), c&#8217;était loin d&#8217;être gagné. Mal documenté à mon goût sur la partie multi-domaine.
</li>
<li>
&laquo;&nbsp;mailman&nbsp;&raquo; semblait pouvoir faire tout ça, avec une interface web (et ligne de commande) assez ancestrale, mais suffisante, efficace et qui marche <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
</ul>
<p>Deux points de détails à bien regarder, qui m&#8217;ont fait faire cet article afin de ne pas oublier tout ça et que ça puisse resservir :</p>
<ul>
<li>
l&#8217;interconnexion de mailman avec la partie Mysql de postfix
</li>
<li>
le multi-domaine, afin de pouvoir gérer des listes genre liste1@domaine1.fr et liste2@domaine2.com, ces 2 domaines étant hébergés sur la même machine, la même installation postfix
</li>
</ul>
<p>Allez hop, c&#8217;est parti pour l&#8217;installation et les détails de configuration.<br />
Voyez d&#8217;abord mes articles sur l&#8217;installation complète <a href="http://michauko.org/blog/?s=postfix" target="_blank">postfix/mysql/amavis/spamassassin</a>/etc histoire de situer de quoi je parle.<span id="more-1210"></span></p>
<h1>Contexte</h1>
<p>On installe ça sur une Debian Squeeze, appelée &laquo;&nbsp;monserveur.fr&nbsp;&raquo; ayant plusieurs noms de domaine : &laquo;&nbsp;serveur.fr&nbsp;&raquo; et aussi &laquo;&nbsp;autredomaine.fr&nbsp;&raquo;<br />
On voudra créer des mailing-lists sur l&#8217;un ou l&#8217;autre des domaines.</p>
<h1>Installation</h1>
<h2>aptitude</h2>
<p>J&#8217;ai préféré opter pour la version packagée plutôt que la dernière version officielle en .tar.gz, histoire de simplifier les migrations de Debian. Ca commence comme bien souvent :</p>
<pre>monserveur:~# aptitude install mailman
Les NOUVEAUX paquets suivants vont être installés :
  mailman
0 paquets mis e jour, 1 nouvellement installés, 0 e enlever et 0 non mis e jour.
Il est nécessaire de télécharger 9 642 ko d'archives. Après dépaquetage, 44,3 Mo seront utilisés.
Prendre : 1 ftp://ftp.fr.debian.org/debian/ squeeze/main mailman amd64 1:2.1.13-5 [9 642 kB]
 9 642 ko téléchargés en 1s (8 576 ko/s)
Lecture des champs des paquets... Fait
Lecture de l'état des paquets... Fait
Récupération des rapports de bogue... Fait
Analyse des informations Trouvé/Corrigé... Fait
Bogues de gravité serious sur mailman (-> 1:2.1.13-5) <non corrigé>
 #611804 - Astonishing header mangling
Résumé :
 mailman(1 bogue)
Êtes-vous certain de vouloir installer/mettre e jour les paquets ci-dessus ? [Y/n/?/...]
Préconfiguration des paquets...
Sélection du paquet mailman précédemment désélectionné.
(Lecture de la base de données... 57308 fichiers et répertoires déje installés.)
Dépaquetage de mailman (e partir de .../mailman_1%3a2.1.13-5_amd64.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de mailman (1:2.1.13-5) ...
Looking for enabled languages (this may take some time) ... done.
Installing site language en ............................................ done.
Configuring mailman for domain monserveur.fr ...
Mise e jour de la version 0x0 vers 0x2010df0
suppression des anciens fichiers sources
Mise e jour de la liste de diffusion mailman
Mise e jour de la base de donnees des requetes en attente.
- mise e jour de l'ancien fichier mbox prive
Rien e faire.
- Mise e jour de l'ancien fichier mbox public
Rien e faire.
Reparation des modeles de langue : mailman

Mise e jour des filigranes Usenet
- rien e mettre e jour ici
Rien e faire.
mise e jour des anciens fichiers qfiles
Starting Mailman master qrunner: mailmanctl.</pre>
<p>Un seul écran à noter :</p>
<pre>
Pas de liste du site                                                                                                                                                      ¦
  ¦                                                                                                                                                                           ¦
  ¦ Mailman a besoin d'une liste du site (« site list »). Elle permet d'envoyer les rappels pour les mots de passe, etc. Elle doit être créée avant le lancement de Mailman.  ¦
  ¦                                                                                                                                                                           ¦
  ¦ Pour créer cette liste, exécuter « newlist mailman » et suivez les instructions qui apparaissent e l'écran. Il est ensuite nécessaire de redémarrer mailman avec la       ¦
  ¦ commande « /etc/init.d/mailman start ».</pre>
<p>L&#8217;installation créera cette liste de diffusion appelée &laquo;&nbsp;mailman&nbsp;&raquo; (et j&#8217;avoue que je ne comprends pas son utilité&#8230;)</p>
<h2>permissions</h2>
<p>Il faut vérifier/adapter les permissions qui ne semblent pas bonnes après installation :</p>
<pre>monserveur:~# check_perms
Les repertoires doivent etre au moins en 02775 : /var/lib/mailman/logs
Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl/LC_MESSAGES
Problemes trouves : 84
Re-executer en tant que list (ou root) avec l'option -f pour reparer</pre>
<p>On execute la même commande avec le paramètre <code>-f</code> et on recontrôle :</p>
<pre>Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Problemes trouves : 10</pre>
<p>MAIS : il s&#8217;agit de liens symboliques et l&#8217;outil contrôle les permissions des liens, pas des fichiers visés. Bref, c&#8217;est bon.</p>
<h2>Conf mailman</h2>
<p><em>Une partie de la doc d&#8217;installaiton est dans <code>/usr/lib/mailman/bin/postfix-to-mailman.py</code> qui est un lien vers <code>/etc/mailman/postfix-to-mailman.py</code>. Attention, cette doc doit être transposée au contexte &laquo;&nbsp;serveur virtuel avec conf en MySQL&nbsp;&raquo; &#8211; ce que je fais dans cet article.<br />
</em><br />
Dans <code>/etc/mailman/mm_cfg.py</code>, j&#8217;adapte ces paramètres là :<br />
DEFAULT_SERVER_LANGUAGE = &#8216;fr&#8217;<br />
MTA=&#8217;Postfix&#8217;</p>
<h2>Codes d&#8217;accès à mailman</h2>
<p>Remarque :<br />
<em>&laquo;&nbsp;mailman&nbsp;&raquo; peut s&#8217;utiliser en ligne de commande, voir la liste des commandes possibles (éventuellement pratique pour scripter) : <code>dpkg -L mailman | grep bin</code>. Ca permet de découvrir la liste des outils : rmlist, list_lists, add_members, newlist etc&#8230;<br />
</em><br />
L&#8217;accès à l&#8217;interface mailman ne se fait pas avec un identifiant et un mot de passe, mais juste avec un mot de passe.<br />
Pour créer des &laquo;&nbsp;comptes&nbsp;&raquo; de la sorte, c&#8217;est l&#8217;outil <code>mmsitepass</code>.</p>
<h2>Conf apache</h2>
<p>Par défaut, le script mailman d&#8217;interface web est accessible sur <code>http://votre.serveur/cgi-bin/mailman/admin/</code>. Si vous n&#8217;aimez pas les répertoires standards, vous pouvez adapter le fichier <code>/etc/mailman/apache.conf</code> en adaptant <code>/cgi-bin/mailman/</code> et <code>/pipermail/</code> et en conséquence le fichier <code>/etc/mailman/postfix-to-mailman.py</code>, paramètres <code>DEFAULT_URL_PATTERN</code> et <code>PRIVATE_ARCHIVE_URL</code>.</p>
<h1>Configuration postfix</h1>
<h2>&laquo;&nbsp;pipe&nbsp;&raquo; postfix : interface postfix <-> binaires mailman</h2>
<p>En fait, tout est déjà OK à la base &#8211; avant même l&#8217;installation de mailman !. C&#8217;est marrant ça, l&#8217;outil doit être bien ancré dans le monde UNIX&#8230;</p>
<pre>monserveur:~# grep mailman /etc/postfix/*
/etc/postfix/master.cf:mailman   unix  -       n       n       -       -       pipe
/etc/postfix/master.cf:  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py</pre>
<p>On voir qu&#8217;on a un canal de communication &laquo;&nbsp;mailman&nbsp;&raquo; qui renvoie vers un script python qui fera le boulot</p>
<h2>transport : interface postfix <-> &laquo;&nbsp;pipe&nbsp;&raquo;</h2>
<p>Dans ma table &laquo;&nbsp;transport&nbsp;&raquo; (voir <a href="http://michauko.org/blog/2009/10/20/postfix-utilisateurs-virtuels-mysql-acces-pop3s-imaps-sasl-et-tls-quota-bingo-jai-tout-mis-dans-le-titre/" target="_blank">cet article</a>), j&#8217;ajoute :</p>
<pre>insert into transport values ('list.serveur.fr','mailman'),('list.autredomaine.fr','mailman');</pre>
<p>Ceci prépare le terrain : si on écrit à une adresse @list.serveur.fr ou @list.autredomaine.fr (comme je disais au début de la doc), alors postfix passera le relai au &laquo;&nbsp;pipe&nbsp;&raquo; nommé &laquo;&nbsp;mailman&nbsp;&raquo; (issu du <code>master.cf</code> de <code>postfix</code>), donc aux scripts mailman.<br />
Rien de nécessaire dans la table &laquo;&nbsp;domains&nbsp;&raquo; ; comme pour le répondeur vacation (<a href="http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/" target="_blank">voir précédent article</a>).</p>
<h2>Multi-domaine</h2>
<p>J&#8217;ai déclaré ceci dans le fichier <code>/etc/mailman/mm_cfg.py</code> :</p>
<pre>add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
add_virtualhost('list.serveur.fr','monserveur.fr')
add_virtualhost('list.autredomaine.fr','monserveur.fr')</pre>
<p>Pour gérer le multi-domaine, c&#8217;est aussi simple que ça (et les bons transports SQL). J&#8217;y reviendrai un peu plus tard tout de même.</p>
<h2>main.cf</h2>
<p>La doc dit d&#8217;ajouter <code>mailman_destination_recipient_limit=1</code> dans <code>/etc/postfix/main.cf</code> ; soit.</p>
<h1>Relance de tout ça</h1>
<pre>reload apache
restart mailman
reload postfix</pre>
<p>Rien dans amavis, comme pour les répondeurs vacation</p>
<h1>Créer une liste</h1>
<p>On veut créer une liste &laquo;&nbsp;mesabonnes@serveur.fr&nbsp;&raquo;.</p>
<h2>Au niveau SQL</h2>
<p>On déclare tout ça :</p>
<pre>insert into forwardings values ('mesabonnes-admin@serveur.fr','mesabonnes-admin@list.serveur.fr');
insert into forwardings values ('mesabonnes-bounces@serveur.fr','mesabonnes-bounces@list.serveur.fr');
insert into forwardings values ('mesabonnes-confirm@serveur.fr','mesabonnes-confirm@list.serveur.fr');
insert into forwardings values ('mesabonnes-join@serveur.fr','mesabonnes-join@list.serveur.fr');
insert into forwardings values ('mesabonnes-leave@serveur.fr','mesabonnes-leave@list.serveur.fr');
insert into forwardings values ('mesabonnes-owner@serveur.fr','mesabonnes-owner@list.serveur.fr');
insert into forwardings values ('mesabonnes-request@serveur.fr','mesabonnes-request@list.serveur.fr');
insert into forwardings values ('mesabonnes-subscribe@serveur.fr','mesabonnes-subscribe@list.serveur.fr');
insert into forwardings values ('mesabonnes-unsubscribe@serveur.fr','mesabonnes-unsubscribe@list.serveur.fr');</pre>
<p>Et bien sûr :</p>
<pre>insert into forwardings values ('mesabonnes@serveur.fr','mesabonnes@list.serveur.fr');</pre>
<p>C&#8217;est bien ici qu&#8217;on voit comment le lien entre la liste et mailman est fait : les adresses sont renvoyées vers un domaine bidon (pas nécessaire de le déclarer dans un DNS, c&#8217;est interne à postfix), domaine pour lequel un &laquo;&nbsp;transport&nbsp;&raquo; particulier est créé afin d&#8217;envoyer le courrier vers le pipe unix => script mailman.</p>
<h2>Enfin, au niveau de mailman</h2>
<p>En tant que root, <code>newlist mesabonnes</code>. On met un responsable de la liste et un code d&#8217;accès.</p>
<h2>Administration de la liste par le web (hors ligne de commande, donc)</h2>
<p>L&#8217;outil principal listant toutes les listes est là : <code>http://serveur.fr/cgi-bin/mailman/admin/</code> si vous n&#8217;avez pas changé les adresses. Une fois une liste sélectionnée, on obtient l&#8217;interface suivante :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2011/06/mailman.png"><img src="http://michauko.org/blog/wp-content/uploads/2011/06/mailman-300x98.png" alt="interface mailman" title="interface mailman" width="300" height="98" class="aligncenter size-medium wp-image-1226" /></a><br />
Ensuite, c&#8217;est le festival des options.<br />
Il faut bien les lire une fois et noter celles qui vous intéressent : masquer l&#8217;expéditeur, limiter la taille des messages, fixer les règles de modération, éviter les doublons (lorsqu&#8217;une personne de la liste répond à la liste, doit-elle recevoir le mail, simplement un accusé ?), Il y a des outils pour abonner des gens en masse (sans les prévenir ou en les prévenant) etc etc.<br />
La seule chose que je vais mentionner, par rapport au multi-domaine, c&#8217;est l&#8217;option &laquo;&nbsp;Le nom d&#8217;hôte préféré par cette liste de diffusion pour le courriel.&nbsp;&raquo; du menu &laquo;&nbsp;[Options Générales]&nbsp;&raquo; afin d&#8217;indiquer le vrai serveur sous lequel est utilisé la liste : serveur.fr et pas autredomaine.fr dans l&#8217;exemple.</p>
<p>Voilà, normalement ça marche <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Remarques</h1>
<h2>multi-domaine</h2>
<p>On a vu rapidement que le multi-domaine marchait facilement : les transports dans la table SQL + quelques lignes dans mm_cfg.py et les alias qui vont bien.<br />
MAIS : l&#8217;identifiant de la liste ne tient pas compte du nom de serveur. Donc les noms devront être différents d&#8217;un domaine à l&#8217;autre (je suppose), impossible donc d&#8217;avoir liste1@serveur.fr et liste1@autredomaine.fr pointant vers la même installation mailman.<br />
On peut imaginer plein d&#8217;autres méthodes pour contourner ça. J&#8217;en mentionne une car je l&#8217;ai testée et la contrainte d&#8217;avoir des noms différents ne me gêne pas.<br />
Je peux passer par des noms de listes intermédiaires pour éviter les problèmes, exemple :<br />
- liste1@serveur.fr ==forward==> interne_liste1@list.monserveur.fr<br />
- liste1@autredomaine.fr == forward ==> interne_liste2@list.monserveur.fr<br />
Et donc avoir déclaré avec &laquo;&nbsp;newlist&nbsp;&raquo; les listes interne_liste1/2<br />
Ca marche. Sauf que mailman considère qu&#8217;il y a une forme de redirection et tous les messages sont soumis à modération (même pour une liste non modérée) pour signaler à l&#8217;administrateur que quelqu&#8217;un a fait un alias de cette liste.<br />
Ici on s&#8217;en fout, mais imaginons que quelqu&#8217;un crée un simple alias &laquo;&nbsp;labandedabrutis@cabalance.fr&nbsp;&raquo; pointant vers votre liste, la bande d&#8217;abrutis en question sera ravie de ne pas être connue sous ce nom là&#8230;</p>
<h2>lien avec spamassassin</h2>
<p>Je n&#8217;ai pas cherché longtemps, c&#8217;est bien fait de base (sûrement un paramétrage &#8211; ou l&#8217;ordre ? &#8211; qui va bien dans <code>/etc/postfix/master.cf</code>) qui fait que le mail passe par toute la chaîne amavis/spamassassin/clamav. Ca se voit nettement dans les logs.</p>
<h2>générer les alias facilement</h2>
<p>Utilisez ce script :</p>
<pre>#!/bin/bash
if test -z $1
then
        echo Usage: $0 liste serveur
        exit -1
fi
if test -z $2
then
        echo Usage: $0 liste serveur
        exit -1
fi

for i in admin bounces confirm join leave owner request subscribe unsubscribe
do
        echo insert into forwardings values \(\'$1-$i@$2\',\'$1-$i@list.$2\'\)\;
done
echo insert into forwardings values \(\'$1@$2\',\'$1@list.$2\'\)\;</pre>
<p>Voilà, c&#8217;est complet je pense. Amusez-vous bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/06/10/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Dépôts (repositories) Debian/Squeeze</title>
		<link>http://michauko.org/blog/2011/02/07/depots-repositories-debiansqueeze/</link>
		<comments>http://michauko.org/blog/2011/02/07/depots-repositories-debiansqueeze/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 07:10:31 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[/etc/apt/sources.list]]></category>
		<category><![CDATA[lenny]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[squeeze]]></category>

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

		<guid isPermaLink="false">http://michauko.org/blog/?p=1194</guid>
		<description><![CDATA[Hop, Je n&#8217;avais pas vu le truc avant qu&#8217;une mise à jour spamassassin me remonte une alerte, mais le site RulesEmporium a fermé. Plus d&#8217;activité, soit. Mais d&#8217;avoir supprimé le contenu, c&#8217;est dommage je trouve. Bon bref, toujours est-il que j&#8217;ai de nouveau un petit bout de l&#8217;outil de détection des textes &#171;&#160;cachés&#160;&#187; dans les [...]]]></description>
			<content:encoded><![CDATA[<p>Hop,<br />
Je n&#8217;avais pas vu le truc avant qu&#8217;une mise à jour spamassassin me remonte une alerte, mais le site RulesEmporium a fermé. Plus d&#8217;activité, soit. Mais d&#8217;avoir supprimé le contenu, c&#8217;est dommage je trouve.<br />
Bon bref, toujours est-il que j&#8217;ai de nouveau un petit bout de l&#8217;outil de détection des textes &laquo;&nbsp;cachés&nbsp;&raquo; dans les images (spam viagra &#038; co) qui ne fonctionne plus.<br />
D&#8217;ici à trouver quelque chose d&#8217;autre, je laisse en plan et je supprime simplement les quelques règles de détection impactées.<span id="more-1194"></span><br />
Le symptôme est le suivant, issu d&#8217;un <code>spamassassin --lint -D</code>, on obtient :</p>
<blockquote><p>
[30926] warn: rules: failed to run CG_FUJI_JPG test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 856.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_DOUBLEDOT_GIF test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 986.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_SONY_JPG test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 1602.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_CANON_JPG test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 2704.<br />
[30926] warn: )
</p></blockquote>
<p>Je commente l&#8217;appel à ces règles dans <code>/etc/spamassassin/imageinfo.cf</code>.<br />
Et enfin je désactive la mise à jour via <code>sa-update</code>, en commentant mes lignes <code>/etc/spamassassin/channels.txt</code>.</p>
<p>A suivre.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/01/25/spamassassin-rulesemporium-est-mort/feed/</wfw:commentRss>
		<slash:comments>2</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>2</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>3</slash:comments>
		</item>
		<item>
		<title>PS3mediaserver sur une Debian toute fraîche : serveur DLNA/uPNP/bidule pour la PS3</title>
		<link>http://michauko.org/blog/2010/09/29/ps3mediaserver-sur-une-debian-toute-fraiche-serveur-dlnaupnpbidule-pour-la-ps3/</link>
		<comments>http://michauko.org/blog/2010/09/29/ps3mediaserver-sur-une-debian-toute-fraiche-serveur-dlnaupnpbidule-pour-la-ps3/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 09:40:14 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[PS3]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[mencoder]]></category>
		<category><![CDATA[mplayer]]></category>
		<category><![CDATA[PS3mediaserver]]></category>
		<category><![CDATA[tsmuxer]]></category>
		<category><![CDATA[uPNP]]></category>
		<category><![CDATA[VLC]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1108</guid>
		<description><![CDATA[Hop, J&#8217;ai rangé mon NAS (qui trainait en terme de firmware et ne me permettait pas de lire des photos de + de 12 Mpixels&#8230;) au profit d&#8217;un vieux PC avec une Debian et PS3 Media Server (PMS) comme interface entre la PS3 et mes &#171;&#160;fichiers multimédia&#160;&#187;. Le principe de PMS est simple : utiliser [...]]]></description>
			<content:encoded><![CDATA[<p>Hop,</p>
<p>J&#8217;ai rangé mon NAS (qui trainait en terme de firmware et ne me permettait pas de lire des photos de + de 12 Mpixels&#8230;) au profit d&#8217;un vieux PC avec une Debian et PS3 Media Server (PMS) comme interface entre la PS3 et mes &laquo;&nbsp;fichiers multimédia&nbsp;&raquo;.</p>
<p>Le principe de PMS est simple : utiliser tous les outils standards du monde libre (ffmpeg, mplayer, mencoder, vlc, tsmuxer) qui font déjà bien le boulot et simplement ajouter une surcouche (en Java, why not) pour faire l&#8217;interface DLNA / uPNP (je confonds un peu les 2, on s&#8217;en tape). Le but est de lire tout ça depuis la PS3.<br />
Encore mieux, il permet de présenter à la PS3 des formats qu&#8217;elle ne sait pas lire en assurant derrière, à la volée, le transcodage ou le réencodage qui va bien. Attention : transcoder un mkv 1080p en réencodant la partie audio DTS à la volée ne se fait pas avec votre vieux PC pourri qui fait office de NAS&#8230; Là il faudra du multi-coeur qui envoie du gros !<br />
Et fin du fin, vous choisissez depuis la PS3 la méthode de transcodage/réencodage, la langue etc, depuis la PS3 via des menus spécifiques qui apparaissent.</p>
<p>A noter que Twonky Media Server est aussi un bon logiciel, mais payant.<br />
Je décris ici la procédure pour installer correctement l&#8217;outil, en partant d&#8217;une Debian Lenny absolument vide (ssh seulement, et wget). La &laquo;&nbsp;difficulté&nbsp;&raquo; est d&#8217;utiliser des outils un peu récents en Debian, côté multimedia. On ira voir du côté des dépôts <a href="http://www.debian-multimedia.org/">www.debian-multimedia.org</a>.<br />
A noter qu&#8217;en Squeeze, ce sera encore plus la fête, car les outils Lenny de &laquo;&nbsp;debian multimedia&nbsp;&raquo; datent aussi un peu, pour certains.<span id="more-1108"></span></p>
<p>J&#8217;ai installé l&#8217;outil sur un compte utilisateur dédié à cela. Afin d&#8217;avoir des permissions sur mes fichiers multimédia en cohérence et de ne pas faire tourner ça au nom du root, évidemment.</p>
<h1>Ajout du dépôt multimedia</h1>
<p>Le <a href="http://www.debian-multimedia.org/">site </a>décrit la procédure. Dans notre cas, on importe les clefs de signature des paquets :</p>
<pre>$ wget http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/
$ dpkg -i debian-multimedia-keyring_2008.10.16_all.deb</pre>
<p>Puis on ajoute le dépôt et on met à jour :</p>
<pre>$ cat >> /etc/apt/sources.list
deb http://www.debian-multimedia.org lenny main non-free
&lt;CTRL-D&gt;
$ aptitude update</pre>
<h1>Installation des outils</h1>
<p>On installe à la fois les outils vidéos et ce qu&#8217;il faut pour faire tourner le Java + 2/3 trucs annexes.</p>
<pre>$ aptitude install screen rar unrar zip unzip bzip2 vlc mplayer mencoder ffmpeg sun-java6-jre</pre>
<p>Là j&#8217;installe &laquo;&nbsp;screen&nbsp;&raquo;, voir plus bas ; rar/zip pour pouvoir lire directement certaines archives ; les outils vidéos ; le java SUN.<br />
A noter que tsMuxeR est fourni avec PMS.</p>
<h1>Installation de PMS</h1>
<p>En tant que l&#8217;utilisateur &laquo;&nbsp;pms&nbsp;&raquo; (appelons-le comme ça), j&#8217;installe PMS et règle 2/3 trucs.<br />
Récupérez le depuis <a href="http://code.google.com/p/ps3mediaserver/downloads/list">http://code.google.com/p/ps3mediaserver/downloads/list</a>, actuellement avec un <code>wget http://ps3mediaserver.googlecode.com/files/pms-linux-1.10.5.tgz</code><br />
Puis :</p>
<pre>pms@nas:~$ tar xzvf pms-linux-1.10.5.tgz
pms@nas:~$ ln -sf pms-linux-1.10.5 pms
pms@nas:~$ chmod u+x pms/PMS.sh pms/linux/tsMuxeR</pre>
<p>Les permissions d&#8217;exécution ne sont pas bonnes et il manquerait notamment tsmuxer dans le panel d&#8217;outil.</p>
<p>Voilà, normalement c&#8217;est fini. Pas compliqué <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Lancement graphique de PMS</h1>
<p>La première fois, il faut le lancer graphiquement pour paramétrer 2/3 choses. Ensuite, on va scripter ce qu&#8217;il faut pour qu&#8217;il démarre au boot, en mode texte, dans un &laquo;&nbsp;screen&nbsp;&raquo;.<br />
Si vous intervenez à distance, faites un tunnel SSH avec déport X11 pour récupérer l&#8217;interface graphique.<br />
<strong>Le principe de PMS est le suivant : soit il voit un serveur X qui répond, alors il part en mode graphique, soit il n&#8217;en voit pas, alors il part en mode texte.</strong></p>
<pre>pms@nas:$ cd pms ; ./PMS.sh</pre>
<p>Il faut faire 3 choses :</p>
<ul>
<li>
Passer dans tous les onglets (s&#8217;il ne voit pas votre PS3, sur le premier onglet, pensez à l&#8217;allumer&#8230; mais ce n&#8217;est pas nécessaire pour configurer) et réfléchir 2 minutes. Notez par exemple la génération des vignettes accompagnant les vidéos, vignettes générées en prenant l&#8217;image à la X-ième seconde du film grâce à mencoder&#8230;.
</li>
<li>
Aller obligatoirement dans l&#8217;onglet &laquo;&nbsp;Transcoding settings&nbsp;&raquo; pour vérifier que tout est vert, que tous les outils vidéo/audio sont installés. Sinon, lire ce que ça raconte.
</li>
<li>
Aller dans &laquo;&nbsp;Folders Sharing&nbsp;&raquo;, ajouter les répertoires qui vous intéressent et activer le partage, sans quoi, il ne va pas se passer grand chose&#8230;
</li>
</ul>
<p>D&#8217;avance, je précise que l&#8217;outil n&#8217;a pas besoin de parcourir à l&#8217;avance tous les répertoires, il génère à la volée lorsqu&#8217;on rentre dans un répertoire depuis la PS3. Enorme. Très dynamique.<br />
Voyez les photos d&#8217;écran sur le site officiel s&#8217;il faut : <a href="http://code.google.com/p/ps3mediaserver/">http://code.google.com/p/ps3mediaserver/</a></p>
<h1>Lancement en mode texte</h1>
<p>Enfin, une fois que tout est paramétré et que ça fonctionne depuis la PS3, on passe à l&#8217;industrialisation en mode texte <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Je recommande un petit script comme ceci :</p>
<pre>pms@nas:~$ cat ~/lance_pms.sh
#!/bin/sh
cd /home/pms/pms
screen -S pms -d -m ./PMS.sh</pre>
<p>Avec les permissions qui vont bien <code>chmod u+x ~/lance_pms.sh</code></p>
<p>Une fois lancé, prenez la main sur votre screen (<code>screen -r pms</code>) et vérifiez que ça ne gueule pas. Ca doit ressembler à :</p>
<pre>GUI environment no available
Switching to console mode
[main] TRACE 13:45:19.739 Starting Java PS3 Media Server v1.10.5
[main] TRACE 13:45:19.740 by shagrath / 2008-2009
[main] TRACE 13:45:19.740 http://ps3mediaserver.blogspot.com
[main] TRACE 13:45:19.740 http://code.google.com/p/ps3mediaserver
[main] TRACE 13:45:19.740
[main] TRACE 13:45:19.741 Java 1.6.0_20-Sun Microsystems Inc.
[main] TRACE 13:45:19.741 OS Linux i386 2.6.26-2-686
[main] TRACE 13:45:19.741 Encoding: UTF-8
[main] TRACE 13:45:19.748 Temp folder: /tmp/javaps3media
[main] TRACE 13:45:19.776 Registering transcoding engine FFmpeg Audio
[main] TRACE 13:45:19.789 Registering transcoding engine MEncoder
[main] TRACE 13:45:19.790 Registering transcoding engine MPlayer Audio
[main] TRACE 13:45:19.791 Registering transcoding engine MEncoder Web
[main] TRACE 13:45:19.791 Registering transcoding engine MPlayer Video Dump
[main] TRACE 13:45:19.792 Registering transcoding engine MPlayer Web
[main] TRACE 13:45:19.795 Registering transcoding engine TsMuxer
[main] TRACE 13:45:19.795 Registering transcoding engine Audio High Fidelity
[main] TRACE 13:45:19.796 Registering transcoding engine VideoLan Audio Streaming
[main] TRACE 13:45:19.796 Registering transcoding engine VideoLan Video Streaming
[main] TRACE 13:45:19.797 Registering transcoding engine Raws Thumbnailer
[main] TRACE 13:45:19.912 Scanning network interface eth0 / eth0
[main] TRACE 13:45:19.914 Using address /192.168.x.y found on network interface: name:eth0 (eth0) index: 2 addresses: /192.168.x.y;
[main] TRACE 13:45:19.915 Created socket: /192.168.x.y:5001
[Thread-1] TRACE 13:45:19.924 Starting DLNA Server on host 192.168.x.y and port 5001...
[main] TRACE 13:45:19.933 Using database located at : /home/pms/pms-linux-1.10.5/database
[main] TRACE 13:45:20.448 Sending ALIVE...
[main] TRACE 13:45:20.454 Using following UUID: 00a29-blabla-3e839
[main] TRACE 13:45:25.422 It's ready! You should see the server appears on XMB
[Thread-8] TRACE 13:45:35.420 Sending ALIVE...</pre>
<p>On voit qu&#8217;il a bien trouvé tous les outils </p>
<h1>Divers</h1>
<h2>&laquo;&nbsp;crontab&nbsp;&raquo; pour un lancement/relance automatique</h2>
<p>Ca vaut ce que ça vaut, mais au moins ça limite mes interventions du type &laquo;&nbsp;papaaaaaa, y&#8217;a les dessins animés qui marchent plus&nbsp;&raquo;. Dans la crontab de l&#8217;utilisateur &laquo;&nbsp;pms&nbsp;&raquo;, j&#8217;ai ceci :</p>
<pre>LANG=fr_FR.utf8
# m h  dom mon dow   command
* * * * * x=`ps u |grep java | grep -v grep` ; if [ "x$x" == "x" ]; then /home/pms/lance_pms.sh; fi</pre>
<p>J&#8217;insiste sur le &laquo;&nbsp;UTF8&#8243;, sinon il zappe tout ce qui contient des accents&#8230; et ça, on s&#8217;en rend compte avec la lancement automatique, pas le lancement depuis le compte utilisateur qui lui, a bien la variable LANG comme il faut dans son environnement utilisateur.</p>
<h2>bug</h2>
<p>J&#8217;avais noté un bug : attention si vous avez lancé l&#8217;outil avec un autre utilisateur, le répertoire /tmp/javaps3media reste, avec des permissions restreintes. Donc ça plante lorsque vous voulez le lancer depuis un autre utilisateur.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/09/29/ps3mediaserver-sur-une-debian-toute-fraiche-serveur-dlnaupnpbidule-pour-la-ps3/feed/</wfw:commentRss>
		<slash:comments>10</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>SFTP : mot de passe en ligne de commande</title>
		<link>http://michauko.org/blog/2010/08/24/sftp-mot-de-passe-en-ligne-de-commande/</link>
		<comments>http://michauko.org/blog/2010/08/24/sftp-mot-de-passe-en-ligne-de-commande/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:45:29 +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[reseau et sécu]]></category>
		<category><![CDATA[lftp]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[sftp]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1095</guid>
		<description><![CDATA[Petit souci du jour : utiliser sftp en ligne de commande, avec un mot de passe, en mode batch, MAIS sans passer par une authentification par clef. Sachant que sftp n&#8217;accepte pas de mot de passe en ligne de commande (ni via une redirection depuis STDIN). Pourquoi donc me direz-vous ? simplement parce-que dans l&#8217;éventualité [...]]]></description>
			<content:encoded><![CDATA[<p>Petit souci du jour : utiliser sftp en ligne de commande, avec un mot de passe, en mode batch, MAIS sans passer par une authentification par clef. Sachant que sftp n&#8217;accepte pas de mot de passe en ligne de commande (ni via une redirection depuis STDIN).</p>
<p>Pourquoi donc me direz-vous ? simplement parce-que dans l&#8217;éventualité où faire bouger le prestataire en face de vous (celui qui héberge le serveur SSH) coûterait trop d&#8217;énergie, on va supposer qu&#8217;on ne peut pas facilement faire avaler notre clef publique à l&#8217;hébergeur du serveur SSH.</p>
<p>Bref, la commande traditionnelle est :</p>
<pre>sftp utilisateur@serveur
Connecting to serveur...
utilisateur@serveur's password:
sftp&gt;</pre>
<p>J&#8217;ai trouvé une méthode simple : utiliser le client SFTP de &laquo;&nbsp;PuTTY&nbsp;&raquo;.<br />
Je pensais au départ utiliser celui de &laquo;&nbsp;lftp&nbsp;&raquo; et sauvegarder ma connexion (avec mot de passe) en bookmark, mais comme mon login dans l&#8217;histoire est un utilisateur de domaine windows (ouais, le serveur SSH en face est sous windows O_o), y&#8217;a un \ dans le login et même en le doublant, lftp semble mal le digérer, ben j&#8217;étais aussi bloqué.</p>
<p>Bref, en installant les outils de PuTTY :</p>
<pre>aptitude install putty-tools</pre>
<p>On peut alors taper :</p>
<pre>psftp -pw mon_pass utilisateur@serveur
Using username "utilisateur".
Remote working directory is /
psftp&gt;</pre>
<p><strong>Attention : le mot de passe est en clair dans la ligne de commande, donc dans les processus etc etc. Donc c&#8217;est pas idéal comme condition.</strong><br />
Enfin, je n&#8217;ai pas mis le paramètre -b pour mon batch, car ce n&#8217;est pas le propos là.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/08/24/sftp-mot-de-passe-en-ligne-de-commande/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>utilisateurs postfix virtuels : ajouter un répondeur &#171;&#160;vacation&#160;&#187;</title>
		<link>http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/</link>
		<comments>http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 08:30:27 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[master.cf]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[procmail]]></category>
		<category><![CDATA[vacation]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1047</guid>
		<description><![CDATA[Avec mes précédents articles ci-dessous, vous avez de quoi monter une architecture complète de mails avec utilisateurs virtuels. Pour faire simple. configurer postfix pour gérer des utilisateurs virtuels monter une architecture complète &#171;&#160;postfix / postgrey / amavisd-new / clamav / spamassassin&#160;&#187; Il manque cependant un morceau : la possibilité de faire appel à des &#171;&#160;procmail&#160;&#187; [...]]]></description>
			<content:encoded><![CDATA[<p>Avec mes précédents articles ci-dessous, vous avez de quoi monter une architecture complète de mails avec utilisateurs virtuels. Pour faire simple.</p>
<ul>
<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/">configurer postfix pour gérer des utilisateurs virtuels</a>
</li>
<li>
<a href="http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/">monter une architecture complète &laquo;&nbsp;postfix / postgrey / amavisd-new / clamav / spamassassin&nbsp;&raquo;</a>
</li>
</ul>
<p></p>
<p><strong>Il manque cependant un morceau : la possibilité de faire appel à des &laquo;&nbsp;procmail&nbsp;&raquo; personnalisés pour ces utilisateurs virtuels.</strong></p>
<p>Lorsqu&#8217;on n&#8217;est pas avec des utilisateurs virtuels, chaque utilisateur réel (ayant un compte utilisateur, donc) utilise généralement son <code>~/.procmailrc</code> pour trier un peu ou <strong>- cas qui m&#8217;intéresse particulièrement &#8211; activer son répondeur d&#8217;absence, &laquo;&nbsp;<code>vacation</code>&laquo;&nbsp;</strong> pour ne pas le nommer.<br />
Dans le cas d&#8217;utilisateurs virtuels, c&#8217;est sensiblement différent. C&#8217;est ce que je décrirai dans cet article. Ce n&#8217;est au final pas compliqué, mais il faut comprendre le rôle de chaque composant et les limites de fonctionnement de chaque outil.<br />
En effet, je n&#8217;ai pas trouvé de doc ultra-claire sur le sujet sur le web, surtout les bricoles de chacun. Avec un peu de recul, et, voyant ma propre solution, j&#8217;ai l&#8217;impression qu&#8217;il y a tellement de configurations possibles (maildrop et pas procmail, mes utilisateurs virtuels comme ci, pas comme ça, il utilise postfixadmin et pas moi etc) qu&#8217;il est impossible d&#8217;écrire un truc qui n&#8217;est pas spécifique.<br />
Le plus dur est donc de comprendre ce qu&#8217;on fait pour transposer à sa conf. Je tâcherai donc, comme d&#8217;hab, d&#8217;expliquer ce que je fais plutôt que de copier-coller les fichiers de conf.</p>
<p>Allez, let&#8217;s go pour la mise en place sur la base d&#8217;une archi postfix &#038; co comme décrite dans les docs mentionnées en début de cet article.</p>
<p><em>Ah, dernier point : à la base, et tel que je le décris, l&#8217;utilisateur ne pourra pas mettre lui même son répondeur en place. Dans mon cas, ce n&#8217;est pas important. En effet, j&#8217;utilise des utilisateurs virtuels car il s&#8217;agit d&#8217;un serveur frontal de mails (qui trie le spam, en gros), livre les messages dans des arborescences virtuelles en attendant d&#8217;être POPées depuis un backend de mails quelconque (un vilain Exchange <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Donc, le répondeur d&#8217;absence des utilisateurs &laquo;&nbsp;physiques&nbsp;&raquo; est géré par eux-mêmes dans Outlook &laquo;&nbsp;normalement&nbsp;&raquo;, et je n&#8217;applique ce principe de répondeur qu&#8217;exceptionnellement, à quelques boîtes mails IMAP génériques, qui n&#8217;ont pas vraiment de notion de &laquo;&nbsp;vacances&nbsp;&raquo;. Des boîtes partagées entre plusieurs personnes, si vous voulez, mais stockées sur le frontal et pas dans le backend, pour diverses raisons dont on se moque ici. Après vous pourrez toujours bricoler un truc pour que tout un chacun accède à son procmail ou son message d&#8217;asbence pour le mettre, l&#8217;enlever etc.</em><span id="more-1047"></span></p>
<h1>Le principe</h1>
<p>On veut activer le répondeur de toto@domaine.fr en utilisant l&#8217;outil &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; qui gère très bien les réponses. &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; ne joue qu&#8217;avec des comptes utilisateurs existants. Premier problème.</p>
<p>Pour y arriver, on va créer des alias pour ce compte virtuel &laquo;&nbsp;toto@domaine.fr&nbsp;&raquo; afin que postfix &laquo;&nbsp;forward&nbsp;&raquo; (du nom de la table &laquo;&nbsp;forwardings&nbsp;&raquo; gérant les alias des utilisateurs virtuels) tout mail à destination de toto@domaine.fr vers 2 endroits :</p>
<ul>
<li>
le réel toto@domaine.fr, histoire de délivrer le mail quand même, au final
</li>
<li>
et en plus vers un certain toto@vacation.domaine.fr qui n&#8217;existe pas
</li>
</ul>
<p><bR>Ce dernier nom &laquo;&nbsp;vacation.domaine.fr&nbsp;&raquo; n&#8217;a pas besoin d&#8217;exister au sens DNS et ne correspond pas non plus à un MX réel. On va juste créer un &laquo;&nbsp;transport&nbsp;&raquo; (du nom de la table MySQL qu&#8217;on a créée avec les docs précédentes) particulier afin de router les messages à destination du domaine &laquo;&nbsp;vacation.domaine.fr&nbsp;&raquo; vers un &laquo;&nbsp;<code>pipe</code>&nbsp;&raquo; particulier de postfix qu&#8217;on va créer pour l&#8217;occasion.<br />
Ce &laquo;&nbsp;<code>pipe</code>&nbsp;&raquo; UNIX, composant qu&#8217;on ajoute à la chaîne postfix, gèrera en fait l&#8217;appel à <code>procmail </code>configuré d&#8217;une manière globale (un gros <code>procmailrc </code>générique, si vous voulez).<br />
Ce <code>procmail </code>fera ensuite un tri sur le nom du destinaire et appellera &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; lorsqu&#8217;on le veut avec un message personnalisé.</p>
<p><i>C&#8217;est ce procmail global qu&#8217;il conviendrait de découper (avec des INCLUDE), ainsi que les fichiers de messages d&#8217;absence qui vont avec, si on voulait donner la main d&#8217;une manière pas super pratique (FTP ? samba ?) à des utilisateurs réels sur leur répondeur de compte virtuel&#8230;</i></p>
<p>Je me suis basé sur pas mal de docs bizarroïdes, et surtout sur les quelques explications <a href="http://lists.mailscanner.info/pipermail/mailscanner/2005-January/044873.html">trouvées ici</a>. Le cheminement y est, mais c&#8217;est pas détaillé sur le principe et le type propose son propre script de répondeur ; script qui peut générer une belle boucle infinie entre répondeurs, à mon humble avis. Ce risque n&#8217;existe pas avec &laquo;&nbsp;<code>vacation</code>&laquo;&nbsp;, car il garde une liste des gens &laquo;&nbsp;déjà répondus&nbsp;&raquo;, sauf si vous forcez à répondre à chaque fois.</p>
<h1>Mise en place</h1>
<h2>Paquets, utilisateur etc</h2>
<p>Au besoin, suivant l&#8217;état de votre installation :</p>
<pre>aptitude install procmail vacation</pre>
<p>Ensuite, j&#8217;ai expliqué que &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; ne travaillait que sur un compte réel. Je lui dédie donc un compte :</p>
<pre>useradd -m vacation -s /bin/nologin -c "Utilisateur vacation"</pre>
<h2>Création du pipe UNIX</h2>
<p>On crée le processus qui sera en charge de router (de manière interne à postfix) les messages arrivant dans un <code>pipe </code>qu&#8217;on nomme &laquo;&nbsp;repondeur&nbsp;&raquo; vers <code>procmail</code> (lui même appelant le cas échéant le programme de répondeur &laquo;&nbsp;<code>vacation</code>&laquo;&nbsp;).<br />
Dans <code>/etc/postfix/master.cf</code>, à la fin (peu importe), on définit ce pipe comme suit :</p>
<pre>#ajout d'un appel à procmail pour gérer certains 'vacation' sur les boites IMAP
#attention, l'appel à ce pipe est géré dans la table des transports virtuels + des forwardings qui vont bien
repondeur   unix    -       n       n       -       10      pipe
  flags=Rq user=vacation argv=/usr/bin/procmail -Y -m /etc/postfix/procmail-global-repondeur.rc ${sender} ${recipient}
</pre>
<p>Les espaces avant &laquo;&nbsp;flags&nbsp;&raquo; sont importants, c&#8217;est ce qui explique à postfix qu&#8217;il s&#8217;agit d&#8217;option du <code>pipe </code> nommé &laquo;&nbsp;repondeur&nbsp;&raquo;.<br />
Je décrirai le fichier <code>/etc/postfix/procmail-global-repondeur.rc</code> plus tard. C&#8217;est lui qui contiendra les appels aux &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; de tels et tels utilisateurs.<br />
J&#8217;avoue ne pas être super sûr des flags utilisés, voyez <code>man pipe</code> au besoin.</p>
<h2>transport virtuel</h2>
<p>Si votre base MySQL est exactement celle que je décris dans mes précédentes documentations, insérez une ligne dans la table &laquo;&nbsp;transport&nbsp;&raquo; afin d&#8217;avoir :</p>
<pre>mysql> select * from transport;
+---------------------+-----------+
| domain              | transport |
+---------------------+-----------+
| vacation.domaine.fr | repondeur |
+---------------------+-----------+
1 row in set (0.00 sec)</pre>
<p>Pour bien relier cette table à votre configuration &laquo;&nbsp;virtuelle&nbsp;&raquo;, la table &laquo;&nbsp;transport&nbsp;&raquo; dont je parle est celle décrite comme ça dans postfix :</p>
<pre>[extraits de fichiers]
main.cf:transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
mysql-virtual_transports.cf:query = SELECT transport FROM transport WHERE domain='%s'</pre>
<h2>Création des alias pour router vers le &laquo;&nbsp;pipe&nbsp;&raquo; &laquo;&nbsp;repondeur&nbsp;&raquo;</h2>
<p>Pour chaque utilisateur virtuel qui devra avoir un répondeur actif (ou potentiellement actif), il faudra ajouter 2 alias le concernant dans la table des alias (&laquo;&nbsp;forwardings&nbsp;&raquo; dans mon cas, là encore, ça dépend de votre conf de &laquo;&nbsp;postfix virtuel&nbsp;&raquo;). Ajoutez donc les lignes pour avoir :</p>
<pre>mysql> select * from forwardings where source like 'j%doma%';
+--------------------+-----------------------------+
| source             | destination                 |
+--------------------+-----------------------------+
| jacques@domaine.fr | jacques@domaine.fr          |
| jacques@domaine.fr | jacques@vacation.domaine.fr |
+--------------------+-----------------------------+
2 rows in set (0.00 sec)</pre>
<p>J&#8217;ai eu un souci pour insérer ces 2 lignes, car il y a une contrainte de clef primaire sur &laquo;&nbsp;source&nbsp;&raquo;, ce qui semble logique, mais qui est en fait bloquant pour nous et inutile dans un cas normal d&#8217;alias d&#8217;utilisateurs virtuels (on pourrait faire une liste de diffusion en créant plusieurs lignes pour une même source car postfix gère très bien le fait d&#8217;avoir plusieurs destination pour une même source).<br />
Bref, j&#8217;ai fait sauté la contrainte PK que j&#8217;avais mise dans mes docs précédents :</p>
<pre>ALTER TABLE forwardings
DROP PRIMARY KEY;</pre>
<p>Rassurez-vous, ça ne fait pas sauter les entrées déjà stockées dans la table si vous en avez.</p>
<h2>procmailrc et vacation</h2>
<p>On y est presque.<br />
Reste à définir le <code>procmail </code>global appelant vacation :<br />
Dans mon &laquo;&nbsp;<code>pipe</code>&laquo;&nbsp;, j&#8217;appelle ce fichier :</p>
<pre>servr:/etc/postfix# cat /etc/postfix/procmail-global-repondeur.rc
SHELL=/bin/sh

:0c
* ^(To|Cc).*jacques@domaine.fr
| vacation -f /home/vacation/jacques@domaine.fr.db -m /home/vacation/jacques@domaine.fr.msg -a jacques@domaine.fr vacation

:0c
* ^(To|Cc).*autre_type@domaine.fr
| vacation -f /home/vacation/autre_type@domaine.fr.db -m /home/vacation/autre_type@domaine.fr.msg -a autre_type@domaine.fr vacation

:0
/dev/null</pre>
<p><strong>Alors, c&#8217;est presque le plus compliqué car ce fichier est plein de petites ruses</strong>. Il vous montre comment procéder lorsque vous aurez plusieurs boîtes concernées par un vacation.<br />
<i>Je rappelle que de cette manière, c&#8217;est un peu pénible à maintenir car c&#8217;est l&#8217;admin qui gère. Là il s&#8217;agit de boîte IMAP partagées et peu nombreuses, donc c&#8217;est gérable.</i></p>
<p>Le détail est donc :</p>
<ul>
<li>
Je stocke tous mes messages de &laquo;&nbsp;vacances&nbsp;&raquo; dans ~vacation/
</li>
<li>
-f : pour indiquer dans quelle &laquo;&nbsp;base de données&nbsp;&raquo; on stocke les gens à qui on a déjà répondu</li>
<li>
</li>
<li>
-m : pour indiquer le mail de réponse d&#8217;un utilisateur donné, je le détaille plus bas
</li>
<li>
-a : <strong>hyper important </strong> : en effet, <code>vacation </code>ne travaille que sur un utilisateur réel. Donc obligé de spécifier un utilisateur réel en fin de commande <code>vacation</code>, c&#8217;est l&#8217;utilisateur &laquo;&nbsp;vacation&nbsp;&raquo; himself qui figure en dernier argument de la ligne de commande. Donc, pour que <code>vacation </code> travaille, j&#8217;explique aussi que cet utilisateur réel peut être connu sous l&#8217;alias (-a) jacques@domaine.fr (ou autre_type@domaine.fr dans la 2è règle). Sinon aucune règle ne s&#8217;appliquera jamais.
</li>
<li>
&laquo;&nbsp;:0c&nbsp;&raquo; : <strong>OUI : il faut activer le &laquo;&nbsp;carbon copy&nbsp;&raquo;</strong>. J&#8217;ai constaté ça à force de tests. En effet, un message arrivant dans postfix a un ID, il est dédoublé avec le même ID, l&#8217;un part vers l&#8217;utilisateur réel pour livraison, l&#8217;autre vers le &laquo;&nbsp;<code>pipe</code>&laquo;&nbsp;, puis <code>procmail</code>, puis <code>vacation</code>. &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; arrête les règles (si on ne met pas le &laquo;&nbsp;c&nbsp;&raquo; de carbon copy) dès que ça &laquo;&nbsp;match&nbsp;&raquo;. Si un expéditeur envoi un unique mail à en même temps jacques@domaine.fr et autre_type@domaine.fr, la première règle va marcher, donc procmail arrêtera de bosser. Résultat : pas de répondeur pour &laquo;&nbsp;autre_type&nbsp;&raquo;. On ne sait pas qu&#8217;il est en vacances.
</li>
<li>
Et enfin, le piège des &laquo;&nbsp;carbon copy&nbsp;&raquo; : si on ne fait pas une dernière règle virant vers /dev/null tout message au final, un message légitime auquel on aura répondu par &laquo;&nbsp;vacation&nbsp;&raquo; sortira de procmail et continuera sa route : il sera donc livré. Mais c&#8217;est un utilisateur complètement bidon, untel@vacation.domaine.fr, domaine inexistant => erreur de livraison => log dans <code>/var/log/mail.info</code> et <strong>surtout</strong>, mail d&#8217;erreur bien crade informant l&#8217;expéditeur&#8230;</li>
</ul>
<h2>fichier .msg de vacation</h2>
<p>Voici à quoi doit ressembler un fichier de réponse minimaliste :</p>
<pre>servr:/etc/postfix# cat ~vacation/jacques\@domaine.fr.msg
From: jacques@domaine.fr (Jacques)
Subject: Re: $SUBJECT
Precedence: Bulk

Votre mail a bien été reçu, blablablabla
-- Jacques
</pre>
<h2>reload postfix et tests</h2>
<p>A la fin, <code>/etc/init.d/postfix reload</code> et zou, testez des envois de mails, de réenvois de mails (pour n&#8217;avoir qu&#8217;une fois la réponse etc).<br />
Le plus risqué dans cette manip&#8217; sur un serveur en production, c&#8217;est que tout les adresses normales commencent à merdouiller. Le plus rapide pour annuler tout ça le temps de réfléchir, est de commenter les 2 lignes définissant le pipe et de rechargez postfix.</p>
<h1>Autres remarques</h1>
<h2>Réinit d&#8217;un répondeur</h2>
<p>A une époque, il me semblait qu&#8217;en modifiant le fichier .msg, <code>vacation </code>détectait le changement et donc ne tenait plus compte des expéditeurs &laquo;&nbsp;déjà répondus&nbsp;&raquo;. Après quelques tests, je n&#8217;en suis plus si sûr. Le plus simple pour relancer un répondeur &laquo;&nbsp;pour tous&nbsp;&raquo; : supprimez le fichier .db correspondant.</p>
<h2>Permissions</h2>
<p>Attention, j&#8217;ai interdit le login pour l&#8217;utilisateur vacation. Donc tout ce que vous créerez dans ~vacation/*msg sera sûrement au nom de &laquo;&nbsp;root&nbsp;&raquo;, par exemple. Pensez à changer les droits.<br />
Si vous avez raté un truc, les logs sont très explicites dans <code>/var/log/mail.info</code>.<br />
Je crois aussi me rappeler que si <code>vacation </code>ne voit pas le fichier .msg, il ne fera rien. A vérifier, mais c&#8217;est une méthode simple (et crade car ça va faire du log à coup sûr) pour activer/désactiver un répondeur <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>un log complet pour illustrer</h2>
<p>Si tout se passe bien, vous avez ça :<br />
Connexion du serveur expéditeur :</p>
<pre>Jun 14 17:10:21 servr postfix/smtpd[20107]: connect from expediteur.org[xx.yy.zz.tt]
Jun 14 17:10:21 servr postgrey[12166]: action=pass, reason=client AWL, client_name=expediteur.org, client_address=xx.yy.zz.tt, sender=exped@expediteur.org, recipient=jacques@domaine.fr
Jun 14 17:10:21 servr postfix/smtpd[20107]: C2B829C4081: client=expediteur.org[xx.yy.zz.tt]
Jun 14 17:10:21 servr postfix/cleanup[20065]: C2B829C4081: message-id=<20100614151021.AF0F0EEC57C@mail.expediteur.org>
Jun 14 17:10:21 servr postfix/qmgr[19547]: C2B829C4081: from=<exped@expediteur.org>, size=515, nrcpt=2 (queue active)
Jun 14 17:10:21 servr postfix/smtpd[20107]: disconnect from expediteur.org[xx.yy.zz.tt]
Jun 14 17:10:23 servr postfix/smtpd[20208]: connect from localhost.localdomain[127.0.0.1]
Jun 14 17:10:23 servr postfix/smtpd[20208]: 8A0E69C4085: client=localhost.localdomain[127.0.0.1]
Jun 14 17:10:23 servr postfix/cleanup[20065]: 8A0E69C4085: message-id=<20100614151021.AF0F0EEC57C@mail.expediteur.org>
Jun 14 17:10:23 servr postfix/smtpd[20208]: disconnect from localhost.localdomain[127.0.0.1]
Jun 14 17:10:23 servr postfix/qmgr[19547]: 8A0E69C4085: from=<exped@expediteur.org>, size=1045, nrcpt=3 (queue active)</pre>
<p>Pas de greylisting, car c&#8217;est un pote. Analyse par amavis OK, on dédouble le message vers jacques@domaine.fr et jacques@vacation.domaine.fr.<br />
Chaque file suivra alors sa route :</p>
<pre>Jun 14 17:10:23 servr amavis[18918]: (18918-18) Passed CLEAN, [xx.yy.zz.tt] [xx.yy.zz.tt] <exped@expediteur.org> -> <jacques@domaine.fr>,<jacques@vacation.domaine.fr>, Message-ID: <20100614151021.AF0F0EEC57C@mail.expediteur.org>, mail_id: uuW4XqNAoH7S, Hits: 1.714, size: 515, queued_as: 8A0E69C4085, 1902 ms
Jun 14 17:10:23 servr postfix/smtp[20190]: C2B829C4081: to=<jacques@domaine.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.03/0/0/1.9, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=18918-18, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 8A0E69C4085)
Jun 14 17:10:23 servr postfix/smtp[20190]: C2B829C4081: to=<jacques@vacation.domaine.fr>, orig_to=<jacques@domaine.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.03/0/0/1.9, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=18918-18, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 8A0E69C4085)
Jun 14 17:10:23 servr postfix/qmgr[19547]: C2B829C4081: removed</pre>
<p>La partie &laquo;&nbsp;utilisateur virtuel de postfix&nbsp;&raquo; traite le &laquo;&nbsp;mail normal&nbsp;&raquo; => &laquo;&nbsp;delivered to maildir&nbsp;&raquo;. Ca roule :</p>
<pre>Jun 14 17:10:23 servr postfix/virtual[20212]: 8A0E69C4085: to=<jacques@domaine.fr>, relay=virtual, delay=0.3, delays=0.15/0.01/0/0.14, dsn=2.0.0, status=sent (delivered to maildir)</pre>
<p>La partie &laquo;&nbsp;vacation&nbsp;&raquo; (pipe repondeur) route vers le &laquo;&nbsp;relay=repondeur&nbsp;&raquo;. Le job s&#8217;accomplit correctement &laquo;&nbsp;(delivered via repondeur service)&nbsp;&raquo;. Là on n&#8217;a pas d&#8217;autre erreur, sinon on pourrait voir vacation ou procmail pas content :</p>
<pre>Jun 14 17:10:23 servr postfix/pickup[19550]: ECF179C408A: uid=5001 from=<vacation>
Jun 14 17:10:23 servr postfix/pipe[20209]: 8A0E69C4085: to=<jacques@vacation.domaine.fr>, orig_to=<jacques@domaine.fr>, relay=repondeur, delay=0.41, delays=0.15/0/0/0.25, dsn=2.0.0, status=sent (delivered via repondeur service)
Jun 14 17:10:23 servr postfix/pipe[20209]: 8A0E69C4085: to=<jacques@vacation.domaine.fr>, relay=repondeur, delay=0.41, delays=0.15/0/0/0.25, dsn=2.0.0, status=sent (delivered via repondeur service)
Jun 14 17:10:23 servr postfix/cleanup[20065]: ECF179C408A: message-id=<20100614151023.ECF179C408A@domaine.fr>
Jun 14 17:10:23 servr postfix/qmgr[19547]: 8A0E69C4085: removed
Jun 14 17:10:24 servr postfix/qmgr[19547]: ECF179C408A: from=<vacation@domaine.fr>, size=343, nrcpt=1 (queue active)</pre>
<p>Deux secondes plus tard, &laquo;&nbsp;vacation&nbsp;&raquo; a détecté qu&#8217;il fallait répondre à &laquo;&nbsp;exped@expediteur.org&nbsp;&raquo;, donc on envoit un mail :<br />
(le champ From sera jacques@domaine.fr, seul Return-Path sera à vacation@domaine.fr)</p>
<pre>Jun 14 17:10:26 servr postfix/smtpd[20208]: connect from localhost.localdomain[127.0.0.1]
Jun 14 17:10:26 servr postfix/smtpd[20208]: 174A99C4081: client=localhost.localdomain[127.0.0.1]
Jun 14 17:10:26 servr postfix/cleanup[20065]: 174A99C4081: message-id=<20100614151023.ECF179C408A@domaine.fr>
Jun 14 17:10:26 servr postfix/qmgr[19547]: 174A99C4081: from=<vacation@domaine.fr>, size=770, nrcpt=1 (queue active)
Jun 14 17:10:26 servr amavis[20202]: (20202-01) Passed CLEAN, <vacation@domaine.fr> -> <exped@expediteur.org>, Message-ID: <20100614151023.ECF179C408A@domaine.fr>, mail_id: xw6dpgfdz+b5, Hits: -0.001, size: 343, queued_as: 174A99C4081, 2197 ms
Jun 14 17:10:26 servr postfix/smtp[20190]: ECF179C408A: to=<exped@expediteur.org>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.3, delays=0.14/0/0/2.2, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=20202-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 174A99C4081)
Jun 14 17:10:26 servr postfix/qmgr[19547]: ECF179C408A: removed
Jun 14 17:10:26 servr postfix/smtp[20219]: 174A99C4081: to=<exped@expediteur.org>, relay=mail.expediteur.org[xx.yy.zz.tt]:25, delay=0.21, delays=0.14/0/0.02/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 4337FEEC560)
Jun 14 17:10:26 servr postfix/qmgr[19547]: 174A99C4081: removed</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>dotProject &amp; LDAP (Active Directory plus précisemment)</title>
		<link>http://michauko.org/blog/2010/03/30/dotproject-ldap-active-directory-plus-precisemment/</link>
		<comments>http://michauko.org/blog/2010/03/30/dotproject-ldap-active-directory-plus-precisemment/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 13:36:14 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[dotProject]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1029</guid>
		<description><![CDATA[C&#8217;est pas que je sois fanatique des outils de ce genre là, mais bon, parfois, le boss veut ça pour hier. Ca permet de faire euh&#8230; de la gestion de projets, c&#8217;est open-source, tout ça. Voyez ici : http://www.dotproject.net/ Bon bref, on s&#8217;en fout. Si vous lisez cet article c&#8217;est que vous comptez l&#8217;installer, je [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est pas que je sois fanatique des outils de ce genre là, mais bon, parfois, le boss veut ça pour hier.<br />
Ca permet de faire euh&#8230; de la gestion de projets, c&#8217;est open-source, tout ça. Voyez ici : <a href="http://www.dotproject.net/">http://www.dotproject.net/</a><br />
Bon bref, on s&#8217;en fout. Si vous lisez cet article c&#8217;est que vous comptez l&#8217;installer, je suppose.<br />
Je donne 2/3 remarques d&#8217;installation, notamment la configuration au LDAP de Microsoft : Active Directory.<span id="more-1029"></span></p>
<h1>Dézip, install etc</h1>
<p>Pour monter le site, je passe en quelques mots.</p>
<ul>
<li>
Vous dézippez le .tar.gz (pas de paquet Debian ; et puis c&#8217;est généralement en retard de versions pour ce genre d&#8217;outils). Par exemple dans /var/www
</li>
<li>
Vous avez en amont un serveur MySQL et Apache en état. Et éventuellement créé un schéma de base dotproject, un admin DB dédié et tout le toutim. Exemple :</p>
<pre>create database dotproject;
create user 'dpadmin'@'localhost' identified by 'mon_passwd_qui_tache';
grant all on dotproject.* to 'dpadmin'@'localhost';</pre>
</li>
<li>
Bien sûr, le paquet php5-ldap est installé et LDAP activé dans votre conf PHP :</p>
<pre>votre.serveur:/srv/www/dotproject# grep -r ldap /etc/php5/
/etc/php5/conf.d/ldap.ini:extension=ldap.so
/etc/php5/cli/conf.d/ldap.ini:extension=ldap.so
/etc/php5/apache2/conf.d/ldap.ini:extension=ldap.so
</pre>
</li>
<li>
De même pour php5-mysql&#8230;
</li>
<li>
Vous accédez à http://votre.serveur/dotproject/install/
</li>
<li>
L&#8217;install se déroule paisiblement. Vérifiez que les modules qui vous intéressent sont bien détectés. Ajoutez les permissions sur /files et créez un fichier /includes/config.php vide, modifiable par www-data.<br />
Bref, du classique.
</li>
<li>
Une fois installé, le mot de passe par défaut du compte admin est passwd. J&#8217;ai cherché quelques temps <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .
</li>
</ul>
<p>A la fin, supprimez le répertoire d&#8217;&nbsp;&raquo;install&nbsp;&raquo;.</p>
<h1>Conf Active Directory</h1>
<p>Dans le menu d&#8217;admin, vous configurerez la connexion à l&#8217;AD comme suit (dans Administration Système -> Configuration système) &#8211; si votre LDAP est en clair (port 389) :<br />
<div id="attachment_1031" class="wp-caption aligncenter" style="width: 468px"><a href="http://michauko.org/blog/wp-content/uploads/2010/03/20100330_151648.png"><img src="http://michauko.org/blog/wp-content/uploads/2010/03/20100330_151648.png" alt="Conf dotproject Active Directory" title="Conf dotproject Active Directory" width="458" height="423" class="size-full wp-image-1031" /></a><p class="wp-caption-text">Conf dotproject Active Directory</p></div><br />
Remarques :</p>
<ul>
<li>
<strong>Méthode d&#8217;authentif</strong>&#8230; : LDAP
</li>
<li>
Avant d&#8217;oublier : BIEN COCHER LA CASE &laquo;&nbsp;LDAP autorise également les connexions standards&nbsp;&raquo;. Sinon, si vous ratez votre conf LDAP et déconnectez votre compte admin => Boum (probablement).
</li>
<li>
<strong>Hôte LDAP </strong>: j&#8217;ai galéré longtemps en mettant le FQDN, comme préconisé un peu partout. C&#8217;est passé lorsque j&#8217;ai mis l&#8217;IP ! Arg !
</li>
<li>
<strong>Base DN LDAP </strong>: le noeud racine des utilisateurs qui pourront se signer. Par exemple : <code>ou=Users,cn=domaine,cn=fr</code>
</li>
<li>
<strong>Filtre Utilisateur LDAP</strong>. Pour un AD : <code>(sAMAccountName=%USERNAME%)</code>. Ca veut dire : on comparera la variable %USERNAME% au champ LDAP sAMAccountName, qui est le login dans un AD.
</li>
<li>
<strong>Recherche Utilisateur LDAP </strong>: le chemin complet pour atteindre l&#8217;utilisateur capable de faire la recherche dans l&#8217;AD. Exemple : <code>CN=sonlogin,CN=Users,dc=domaine,dc=fr</code>
</li>
</ul>
<p>Mais d&#8217;où toute cette syntaxe sort-elle ???? non non, pas DT&#8230; Je vous recommande &laquo;&nbsp;<a href="http://technet.microsoft.com/en-us/sysinternals/bb963907.aspx">AD Explorer</a>&laquo;&nbsp;. Ca permet de vous promener dans votre AD et de connaître le DN (Distinguished Name) de n&#8217;importe quel élément.<br />
Le cas standard est que les utilisateurs sont dans <code>Ou=Users,dc=votredomaine,dc=com</code>. Mais bon, quelques fois, on ose le changement.</p>
<h1>Traduction</h1>
<p>Vous trouverez le paquet français sur le site officiel. Il faut dézipper dans /locales, ça crée un sous-répertoire &laquo;&nbsp;fr&nbsp;&raquo;. Reste à mettre le français par défaut aux utilisateurs dans un des menus d&#8217;admin.</p>
<p>Et voilà, c&#8217;était &laquo;&nbsp;j&#8217;ai pris aucune note d&#8217;installation ni de photo d&#8217;écran donc je torche un papier vite fait mais ça peut rendre service&nbsp;&raquo;.<br />
A+</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/03/30/dotproject-ldap-active-directory-plus-precisemment/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Monitoring (vite fait&#777;) du volume de mails</title>
		<link>http://michauko.org/blog/2009/12/09/monitoring-vite-fait-du-volume-de-mails/</link>
		<comments>http://michauko.org/blog/2009/12/09/monitoring-vite-fait-du-volume-de-mails/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 07:21:18 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[isoqlog]]></category>
		<category><![CDATA[mailgraph]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=991</guid>
		<description><![CDATA[Hop, juste pour y penser. Sur votre beau serveur de mails, pensez à mettre ces 2 outils (surtout mailgraph en fait) : aptitude install isoqlog mailgraph Il n&#8217;y a rien à dire sur le paramétrage de mailgraph. Dans le cas d&#8217;une installation standard de Debian, vous trouverez le rapport temps réel sur http://le.serveur/cgi-bin/mailgraph.cgi. Si vous [...]]]></description>
			<content:encoded><![CDATA[<p>Hop, juste pour y penser. Sur votre beau serveur de mails, pensez à mettre ces 2 outils (surtout mailgraph en fait) :</p>
<pre>aptitude install isoqlog mailgraph</pre>
<p>Il n&#8217;y a rien à dire sur le paramétrage de mailgraph. Dans le cas d&#8217;une installation standard de Debian, vous trouverez le rapport temps réel sur http://le.serveur/cgi-bin/mailgraph.cgi.</p>
<p>Si vous avez désactivé l&#8217;alias <code>/cgi-bin/</code> de la conf standard Apache, débrouillez-vous pour accéder au script <code>/usr/lib/cgi-bin/mailgraph.cgi</code>.<br />
Voici le genre de rapport que l&#8217;on obtient : <a href="http://www.stat.ee.ethz.ch/mailgraph.cgi">http://www.stat.ee.ethz.ch/mailgraph.cgi</a>.</p>
<p>Pour isoqlog, il ne vous demande que des choses faciles pendant l&#8217;installation : nom du domaine, type de logs (postfix, exim etc). Les rapports tournent en crontab journalière, résultats dans <code>/var/www/isoqlog/</code>. Par défaut, c&#8217;est donc http://le.serveur/isoqlog/ pour accéder.</p>
<p>Voilà, statistiquez bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/12/09/monitoring-vite-fait-du-volume-de-mails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Montage NTFS et CIFS en fstab</title>
		<link>http://michauko.org/blog/2009/12/02/montage-ntfs-et-cifs-en-fstab/</link>
		<comments>http://michauko.org/blog/2009/12/02/montage-ntfs-et-cifs-en-fstab/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 16:30:08 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[CIFS]]></category>
		<category><![CDATA[ntfs]]></category>
		<category><![CDATA[ntfs-3g]]></category>
		<category><![CDATA[samba]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=983</guid>
		<description><![CDATA[Ca peut s&#8217;avérer pratique parfois, et lors d&#8217;une automatisation d&#8217;un traitement quelconque, carrément indispensable. Voici un rapide aide-mémoire pour déclarer en /etc/fstab des montages CIFS (montage de répertoires partagés Windows via Samba) et NTFS (des partitions, disques USB etc, mais en lecture/écriture, pas lecture seule). D&#8217;abord, s&#8217;assurer que vous avez le paquet ntfs-3g (si besoin [...]]]></description>
			<content:encoded><![CDATA[<p>Ca peut s&#8217;avérer pratique parfois, et lors d&#8217;une automatisation d&#8217;un traitement quelconque, carrément indispensable. Voici un rapide aide-mémoire pour déclarer en <code>/etc/fstab</code> des montages CIFS (montage de répertoires partagés Windows via Samba) et NTFS (des partitions, disques USB etc, mais en lecture/écriture, pas lecture seule).</p>
<p>D&#8217;abord, s&#8217;assurer que vous avez le paquet <code>ntfs-3g</code> (si besoin d&#8217;écriture sur le disque/partition NTFS) et le paquet <code>smbfs</code> (Samba FileSystem) pour les partages CIFS.</p>
<p>Vous pouvez tester facilement avec des commandes genre <code>mount -t cifs</code> ou <code>mount -t ntfs-3g</code>. Dans le cas du CIFS, il  y a certaines options à passer, notamment l&#8217;utilisateur, le domaine etc. C&#8217;est presque plus simple dans <code>/etc/fstab</code>.</p>
<p>Bref, voici la chose illustrée par l&#8217;exemple :</p>
<pre>srv:/etc# cat fstab
###
# blabla habituel
### puis :
//srvwin1/partage1      /mnt/srv1prt1      cifs    uid=root,credentials=/etc/cifs.credentials,domain=MONDOM 0 0
//srvwin1/partage2      /mnt/srv1prt2      cifs    uid=root,credentials=/etc/cifs.credentials,domain=MONDOM 0 0
//srvwin2/blabla1       /mnt/srv2prt1      cifs    uid=root,credentials=/etc/cifs.credentials,domain=MONDOM 0 0
/dev/sdb1               /mnt/usbsdb1       ntfs-3g defaults,locale=fr_FR.utf8 0 0</pre>
<p>Dans cet exemple tout simple, on monte 3 partages CIFS, mappé sur l&#8217;utilisateur root de la machine linux, en se signant avec les informations contenues dans <code>/etc/cifs.credentials</code> (ci-dessous) sur le domaine NT &laquo;&nbsp;MONDOM&nbsp;&raquo;.<br />
Et dans /mnt/usbsdb1, on monte un disque USB (ou SCSI ou SATA d&#8217;ailleurs), en NTFS lecture/écriture.</p>
<p>Ensuite, de simples &laquo;&nbsp;<code>mount /mnt/celui_que_vous_voulez</code>&nbsp;&raquo; pour monter.</p>
<p>Le contenu de /etc/cifs.credentials est de la forme :</p>
<pre>username=mon_login_windows
password=mon_p4ss</pre>
<p>Il peut évidemment être différent pour chaque montage. Pensez à le protéger (<code>chmod 600 /etc/cifs.credentials</code>)</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/12/02/montage-ntfs-et-cifs-en-fstab/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

