<?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>Geekfault &#187; Logiciel</title>
	<atom:link href="http://geekfault.org/categorie/logiciel/feed/" rel="self" type="application/rss+xml" />
	<link>http://geekfault.org</link>
	<description>If it doesn&#039;t segfault, you&#039;re doing it wrong.</description>
	<lastBuildDate>Tue, 08 May 2012 17:13:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Comment faire un Initram minimal avec mode rescue</title>
		<link>http://geekfault.org/2012/05/08/comment-faire-un-initram-minimal-avec-mode-rescue/</link>
		<comments>http://geekfault.org/2012/05/08/comment-faire-un-initram-minimal-avec-mode-rescue/#comments</comments>
		<pubDate>Mon, 07 May 2012 22:51:36 +0000</pubDate>
		<dc:creator>madx</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[initram]]></category>
		<category><![CDATA[initrd]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=6143</guid>
		<description><![CDATA[Aujourd&#8217;hui Geekfault vous propose d&#8217;apprendre à construire vous même votre initram, comme un grand. On ne parlera pas de splash ou autre eyecandy pour newbies, juste de choses utiles pour nous autres les geeks. Et on vous expliquera surtout comment ça marche, afin que vous puissiez devenir un Guru de la fabrication d&#8217;initram. Mais au [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/' rel='bookmark' title='La nouvelle mode Geek : avoir son domaine .42'>La nouvelle mode Geek : avoir son domaine .42</a></li>
<li><a href='http://geekfault.org/2009/05/19/authentification-avec-une-cle-usb/' rel='bookmark' title='S&#8217;authentifier avec une clé USB'>S&#8217;authentifier avec une clé USB</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction--><a href="http://geekfault.org/wp-content/uploads/2012/05/initram.png" title="initram" rel="lightbox.6143"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2012/05/initram-300x175.png" alt="" title="initram" width="300" height="175" class="alignleft size-medium wp-image-6193" /></a>Aujourd&#8217;hui Geekfault vous propose d&#8217;apprendre à <strong>construire vous même votre initram</strong>, comme un grand.<br />
On ne parlera <strong>pas de splash ou autre eyecandy</strong> pour newbies, juste de <strong>choses utiles </strong>pour nous autres les geeks.<br />
Et on vous expliquera surtout <strong>comment ça marche</strong>, afin que vous puissiez <strong>devenir un Guru de la fabrication d&#8217;initram</strong>.</p>
<p><!--more--></p>
<h3>Mais au fait, c&#8217;est quoi un initram ?</h3>
<p>Un initram est un <strong>fichier</strong> contenant un <strong>mini système</strong> sur lequel boot le kernel.<br />
Son utilisation la plus commune est de servir d&#8217;<strong>étape pour lancer le vrai système</strong>, c&#8217;est ce cas que nous verrons.</p>
<p><strong>Étapes d&#8217;un boot typique avec initram</strong></p>
<ul>
<li>La <strong>machine</strong> démarre.</li>
<li>Le <strong>BIOS</strong> se lance, lit sa conf, et passe la main au boot-loader <strong>Grub</strong> présent sur le <strong>MBR</strong>.</li>
<li><strong>Grub</strong> lit sa conf, copie en RAM le kernel et l&#8217;initram puis passe la main au <strong>kernel</strong>.</li>
<li>Le <strong>kernel</strong> s&#8217;initialise, détecte le hardware puis passe la main à l&#8217;<strong>initram</strong>.</li>
<li>L&#8217;<strong>initram</strong> fait son boulot et passe la main au vrai système, par exemple <strong>Gentoo</strong>.</li>
<li><strong>Gentoo</strong> s&#8217;initialise et vous demande de <strong>vous</strong> logger.</li>
</ul>
<h4>Dans quel cas l&#8217;utiliser ?</h4>
<p>Si le <strong>système</strong> est <strong>directement accessible</strong> par le kernel, un <strong>initram ne sert à rien</strong>, le kernel y arrivera tout seul.<br />
En revanche si le <strong>système</strong> n&#8217;est <strong>pas directement accessible</strong> (raid, cryptage, lvm, etc), alors <strong>il faut un initram</strong> pour y accéder.</p>
<h4>Autopsie d&#8217;un initram</h4>
<p>Un fichier d&#8217;initram n&#8217;est en fait qu&#8217;une <strong>archive cpio</strong>. cpio étant un format <strong>similaire à tar</strong>, mais plus basique.<br />
Dans cette archive on retrouve une <strong>arborescence de fichier similaire à celle d&#8217;un système classique</strong> (/dev, /etc, /bin, /lib, etc)<br />
Il doit aussi y avoir le fichier <strong>init</strong> à la racine de l&#8217;arborescence, c&#8217;est à ce fichier que le kernel passe la main et c&#8217;est presque toujours un <strong>script shell</strong>.<br />
On ne laisse évidemment dans cette arborescence que le <strong>strict nécessaire</strong> si bien qu&#8217;il ne reste souvent que /bin, /init et un ou deux autres dossiers.<br />
On peux également <strong>compresser</strong> ce fichier avec gzip, bzip2 ou xz si le kernel le supporte.</p>
<p>Voila pour un rappel de la technologie.</p>
<h4>Initram vs initrd</h4>
<p>On confond souvent les deux car <strong>ils servent à la même chose</strong> mais l&#8217;initrd est en fait le <strong>grand-père</strong> de l&#8217;initram.<br />
L&#8217;<strong>initrd</strong> est un fichier de <strong>taille fixe</strong>, <strong>formaté</strong> en ext2, copié en RAM et monté comme un disque dur.<br />
Alors que l&#8217;<strong>initram</strong> est une <strong>archive</strong> cpio dont le contenu est copié dans du <strong>tmpfs</strong>, (taille dynamique, pas besoin de formater).</p>
<p>Bref l&#8217;initrd est à l&#8217;initram ce que le Tam-tam est à Internet: un <strong>ancêtre archaïque</strong>.</p>
<h3>Construire son initram</h3>
<p>Pour éviter de rester vague, prenons un <strong>exemple concret</strong>: une Gentoo sur une partition cryptée avec dm-crypt, le tout sur Raid 1 software.<br />
En <strong>bonus</strong>, et pour le même prix, on rajoutera un <strong>mode rescue</strong>.</p>
<p>Il va nous falloir les ingrédients suivant:</p>
<ul>
<li>Un <strong>shell</strong> pour exécuter le script /init</li>
<li>Un moyen de remplir <strong>/dev</strong> pour avoir /dev/sda1, etc</li>
<li>L&#8217;exécutable <strong>mdadm</strong> pour monter le <strong>Raid</strong></li>
<li>L&#8217;exécutable <strong>cryptsetup</strong> pour <strong>décrypter</strong></li>
<li>Un moyen de passer le <strong>clavier</strong> en <strong>français</strong> pour taper le mot de passe</li>
<li>Un moyen de passer en mode <strong>rescue</strong></li>
<li>Un script <strong>/init</strong> pour orchestrer tout ça</li>
</ul>
<p>On mettra tout ces ingrédients dans un dossier appelé <em>DOSSIER</em> et on verra plus tard comment transformer ce dossier en initram.</p>
<h4>Shell: Busybox</h4>
<p><strong>Busybox</strong> est une sorte de <strong>couteau suisse</strong> qui fournit les <strong>commandes de base</strong> (sh, cd, ls, rm, mount, &#8230;), tout cela contenu dans <strong>un seul petit exécutable</strong>. Il contient bien évidement un <strong>shell</strong>.</p>
<p>Il existe deux méthodes pour accéder aux commandes de Busybox:</p>
<ul>
<li>l&#8217;appel direct<code>$ busybox ls -la /etc</code></li>
<li>le lien symbolique<code>$ ln -s busybox /bin/ls<br />
$ ls -la /etc</code></li>
</ul>
<p>On ajoute Busybox à notre initram:<br />
<code><br />
$ cd DOSSIER<br />
$ mkdir bin<br />
$ cp `which busybox` bin/<br />
$ ln -s busybox bin/sh<br />
</code><br />
<br/></p>
<p>Busybox est <strong>disponible sur toutes les distribution</strong> et, sauf exception, est toujours compilé en <em>static</em>.<br />
Vous pouvez vérifier avec la commande:<br />
<code>$ file `which busybox`<br />
/bin/busybox: ELF 64-bit LSB executable, x86-64, statically linked</code></p>
<p>Si il est <em>dynamically linked</em> alors il faut soit se débrouiller pour avoir une version <em>statically linked</em>, soit inclure dans l&#8217;initram (dans /lib) les librairies dont il a besoin (utiliser la commande <em>ldd</em> pour avoir la liste).<br />
Cela est valable pour tout exécutables que vous ajoutez à votre initram.</p>
<h4>/dev: Busybox</h4>
<p>La encore, <strong>busybox</strong> a ce qu&#8217;il faut: <strong>mdev</strong>, un mini udev.<br />
mdev marche <strong>différemment de udev</strong> qui pour rappel est un service qui tourne en permanence.<br />
mdev à l&#8217;inverse est à <strong>lancer quand on en a besoin</strong>, et on en a besoin de deux façon:</p>
<ul>
<li>pour remplir /dev avec tout ce qu&#8217;a <strong>trouvé</strong> le kernel <strong>jusque là</strong><code>$ mdev -s</code></li>
<li>pour que /dev soit mis à jour chaque fois que le kernel <strong>trouve un nouveau</strong> périphérique<code>ln -s busybox /bin/mdev<br />
echo '/bin/mdev' > /proc/sys/kernel/hotplug</code></li>
</ul>
<p>On utilisera mdev dans le script /init.</p>
<h4>mdadm et cryptsetup</h4>
<p>Pour vous faciliter la tache il vaut mieux les avoir en <strong>static</strong> sinon il faut inclure les <strong>librairies</strong> avec.</p>
<p>On ajoute mdadm et cryptsetup à notre initram:<br />
<code><br />
$ cp `which mdadm` bin/<br />
$ cp `which cryptsetup` bin/<br />
</code></p>
<p>On les utilisera dans le script /init</p>
<h4>Clavier Français: Busybox</h4>
<p>Décidément ce Busybox fait tout !<br />
En fait il ne sait pas vraiment configurer le clavier en français mais il sait <strong>sauver</strong> la <strong>configuration actuelle</strong> dans un fichier.</p>
<p>On crée le fichier avec:<br />
<code><br />
$ cd DOSSIER<br />
$ mkdir etc<br />
$ busybox dumpkmap > etc/kmap-fr<br />
</code><br />
Évidement il faut que le clavier soit <strong>déjà correctement configuré</strong> pour que cette opération ait un sens.<br />
On peux ensuite charger le fichier avec <strong>loadkmap</strong>, mais nous verrons cela dans le script /init.</p>
<h4>Rescue</h4>
<p>On a donc maintenant un <strong>shell</strong>, le <strong>clavier</strong> peut etre configuré, on a <strong>mdadm</strong> et <strong>cryptsetup</strong>, en plus de ça <strong>busybox est plein d&#8217;outils divers</strong> (ip, lspci, wget, ps, etc, &#8230;). tapez <em>busybox</em> pour voir la liste.<br />
Il y a donc <strong>tout ce qu&#8217;il faut pour un rescue</strong>, autant en profiter.<br />
Le <strong>mode rescue</strong> sera tout simplement de lancer un <strong>shell</strong> pour donner la main à l&#8217;utilisateur.</p>
<p>On pourra y arrivera de deux manières:</p>
<ul>
<li>le script <strong>/init</strong> rencontre une <strong>erreur</strong> et <strong>lance un shell</strong>.</li>
<li>On rajoute &#8220;<strong>rescue</strong>&#8221; aux <strong>paramètres du kernel</strong> et on configure le script /init pour qu&#8217;il lance un shell dans ce cas.</li>
</ul>
<p>On vera tout ca dans le script /init.</p>
<p>Pour info, rajouter un paramètre au kernel peux se faire directement depuis Grub:</p>
<ul>
<li>attendez de voir grub</li>
<li>appuyez sur une touche pour arrêter le compte à rebour</li>
<li>appuyez sur e, comme edit, vous verez alors plusieurs lignes, dont celle commencant par kernel</li>
<li>appuyez a nouveau sur e et ajoutez <em>rescue</em> à la fin de cette ligne</li>
<li>appuyez sur escape pour sortir du mode edition</li>
<li>appuyez sur b, comme boot, pour booter</li>
</ul>
<p>La modification n&#8217;est pas permanente.</p>
<h4>Script /init</h4>
<p>Le gros morceau, c&#8217;est lui qui fait le boulot.<br />
<code><br />
#!/bin/sh</p>
<p># on monte /sys et /proc<br />
# certains programmes en ont besoin et ça coûte rien<br />
mkdir /proc /sys<br />
mount -t proc proc /proc<br />
mount -t sysfs sysfs /sys</p>
<p># On crée /dev et on le remplit avec mdev<br />
mkdir -p /dev<br />
mount -t tmpfs none /dev<br />
ln -s busybox /bin/mdev<br />
echo '/bin/mdev' > /proc/sys/kernel/hotplug<br />
mdev -s</p>
<p># On charge la config clavier pour pouvoir taper le mdp correctement<br />
loadkmap < /etc/kmap-fr</p>
<p># on lance le shell si il y a "rescue" dans les paramètres du kernel<br />
grep -w rescue /proc/cmdline &#038;&#038; exec sh</p>
<p># on bloque l'output du kernel le temps de taper le mot de passe<br />
PRINTK=`cat /proc/sys/kernel/printk`<br />
echo 0 > /proc/sys/kernel/printk </p>
<p># On laisse mdadm se débrouiller pour monter le RAID<br />
# On lui donne juste les dev possible et l'UUID du RAID<br />
# L'UUID peut être obtenu avec la commande "mdadm -D /dev/mdX"<br />
echo 'DEVICE /dev/sd[abcd][2]' > /etc/mdadm.conf<br />
echo 'ARRAY /dev/md2 UUID=62121:a6a45:34d17:37d8e' >> /etc/mdadm.conf<br />
mdadm --assemble --scan || exec sh</p>
<p># on décrypte (il demande donc le mdp)<br />
cryptsetup luksOpen /dev/md2 vault || exec sh</p>
<p># on monte la partition décryptée<br />
mkdir /newroot<br />
mount -r /dev/mapper/vault /newroot || exec sh</p>
<p># on sauve les paramètres du kernel pour les donner au vrai init<br />
CMDLINE=`cat /proc/cmdline`</p>
<p># on nettoie le bordel qu'on a mis<br />
echo "${PRINTK}" > /proc/sys/kernel/printk<br />
echo '' > /proc/sys/kernel/hotplug<br />
umount /dev<br />
umount /sys<br />
umount /proc</p>
<p># et on passe la main au vrai système<br />
exec switch_root /newroot /sbin/init ${CMDLINE}<br />
</code></p>
<h4>Générer l&#8217;initam</h4>
<p>Ultra simple:<br />
<code><br />
$ cd DOSSIER<br />
$ find . | cpio --quiet -o -H newc | gzip --best > /boot/mon_initram<br />
</code><br />
Vous pouvez évidement utiliser <em>bzip2</em> ou <em>xz</em> pour compresser, assurez vous juste que votre kernel le supporte.</p>
<p>Et voila, <strong>votre initram est terminé</strong>.<br />
Il n&#8217;y a <strong>plus qu&#8217;à booter dessus</strong>, à vous les kernel panic !</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/' rel='bookmark' title='La nouvelle mode Geek : avoir son domaine .42'>La nouvelle mode Geek : avoir son domaine .42</a></li>
<li><a href='http://geekfault.org/2009/05/19/authentification-avec-une-cle-usb/' rel='bookmark' title='S&#8217;authentifier avec une clé USB'>S&#8217;authentifier avec une clé USB</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2012/05/08/comment-faire-un-initram-minimal-avec-mode-rescue/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Retrouver un laptop volé</title>
		<link>http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/</link>
		<comments>http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 10:10:26 +0000</pubDate>
		<dc:creator>Tito</dc:creator>
				<category><![CDATA[Geeklife]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[anti-vol]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[localisation]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[prey]]></category>
		<category><![CDATA[tracking]]></category>
		<category><![CDATA[vol]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=6103</guid>
		<description><![CDATA[Pour ne pas vous raconter ma vie, j&#8217;étais en vacances familiales en Floride et nous avons fait la grave erreur de laisser nos sacs dans la voiture, plus de deux heures sans surveillance. Les malfrats d&#8217;Orlando ne nous ont pas pardonné : 5 laptops volés ! (sans compter les disques durs et nos passeports). Le [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/' rel='bookmark' title='Linux &#8211; Laptop &#8211; Ultimate Powersaving !'>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</a></li>
<li><a href='http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/' rel='bookmark' title='Partager la connexion de son laptop'>Partager la connexion de son laptop</a></li>
<li><a href='http://geekfault.org/2009/05/27/internet-via-iphone/' rel='bookmark' title='Internet sur votre laptop via un iPhone'>Internet sur votre laptop via un iPhone</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2012/04/Burglar.jpg" title="Burglar" rel="lightbox.6103"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2012/04/Burglar-300x219.jpg" alt="" title="Burglar" width="300" height="219" class="alignleft size-medium wp-image-6115" /></a>Pour ne pas vous raconter ma vie, j&#8217;étais en vacances familiales en Floride et nous avons fait la grave erreur de laisser nos sacs dans la voiture, plus de deux heures sans surveillance. Les malfrats d&#8217;Orlando ne nous ont pas pardonné : <strong>5 laptops volés !</strong> (sans compter les disques durs et nos passeports).</p>
<p>Le policier qui dressait le constat nous a demandé s&#8217;il y avait un <strong>système de tracking</strong> sur un des laptops. Honte à moi, je prévoyais de l&#8217;installer à mon retour&#8230;<br />
<!--more--></p>
<h3>Mieux vaut prévenir&#8230;</h3>
<p>Évidemment, personne n&#8217;aimerait voir son laptop se faire voler. Mais si on ne s&#8217;y est pas préparé, le retrouver sera probablement impossible. Même si dans tous les cas la probabilité de le retrouver reste faible, <strong>pourquoi ne pas mettre toutes les chances de votre côté</strong> ?</p>
<h3>Identification</h3>
<p>La première information qui aurait pu être utile et que nous n&#8217;avons malheureusement pas pu communiquer aux policiers, c&#8217;est <strong>un moyen d&#8217;identifier l&#8217;ordinateur</strong> ! Prenez donc le temps de noter sur une feuille de papier et/ou quelque part dans le Cloud les informations discriminantes de votre laptop :</p>
<ul>
<li>Sa <strong>marque</strong> et <strong>modèle</strong></li>
<li>Son <strong>numéro de série</strong></li>
<li>Ses éventuels <strong>numéros tracking</strong> propres au constructeur</li>
<li>Ses <strong>adresses MAC</strong> (Ethernet, WiFi, WiMax, Bluetooth)</li>
</ul>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2012/04/Serial-Number.jpg" alt="" title="Serial-Number" width="258" height="193" class="alignright size-full wp-image-6117" />Ce n&#8217;est pas grand chose mais si la police venait à retrouver une centaine de laptops dans une cache, ils pourraient probablement vous restituer le vôtre.</p>
<p>Si votre laptop est volé, avoir son numéro de série va vous permettre de l&#8217;inscrire sur plusieurs listes :</p>
<ul>
<li><strong><a href="http://www.stolen-property.com/laptop-theft.php">Stolen-Property</a></strong>, <strong><a href="http://www.stolencomputers.org">StolenComputers</a></strong> et bien d&#8217;autres sont des <strong>bases de données de numéros de série d&#8217;ordinateurs volés</strong>. Un acheteur consciencieux devrait toujours obtenir le numéro de série avant d&#8217;acheter et l&#8217;entrer sur ces sites.</li>
<li>La <strong>hotline du constructeur</strong> garde généralement ce genre de listes. Si quelqu&#8217;un les contactait pour de l&#8217;assistance sur votre machine, ils pourraient vous en informer.</li>
</ul>
<p>Bien sûr, ces solutions sont des &#8220;long shot&#8221;. Si vous souhaitez être plus proactif dans la récupération de votre ordinateur, il va falloir s&#8217;orienter vers des solutions logicielles voire matérielles&#8230;</p>
<h3>Solutions logicielles</h3>
<p><a href="http://geekfault.org/wp-content/uploads/2012/04/Prey-Report.png" title="Prey-Report" rel="lightbox.6103"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2012/04/Prey-Report-188x580.png" alt="" title="Prey-Report" width="188" height="580" class="alignleft size-large wp-image-6106" /></a>Vous avez probablement déjà entendu parler de telles solutions : vous installez un logiciel de tracking sur votre machine et un site gratuit ou payant vous permet de le <strong>localiser</strong>, de prendre <strong>une photo webcam</strong> et de collecter d&#8217;autres informations.</p>
<p>La solution que je recommande parce qu&#8217;elle est aboutie, puissante et pourtant <strong>Open-Source</strong> est <a href="http://preyproject.com/">Prey</a>. Cette solution <strong>gratuite</strong> est disponible sur toutes les plateformes : Windows, MacOS, Linux et même iOS et Android !</p>
<p><a href="http://geekfault.org/wp-content/uploads/2012/04/Prey-Settings.png" title="Prey-Settings" rel="lightbox.6103"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2012/04/Prey-Settings-150x150.png" alt="" title="Prey-Settings" width="150" height="150" class="alignright size-thumbnail wp-image-6108" /></a>Par défaut Prey fonctionne de manière <strong>centralisée</strong> sur les serveurs du projets. Cela le rend très facile d&#8217;utilisation mais avec <strong>quelques options payantes</strong> heureusement achetables après le vol.</p>
<p>Dans sa version &#8220;geek&#8221;, Prey est entièrement décentralisé, se basant sur votre propre système, et donc sans aucun risque pour votre vie privée. Je vous recommande aussi de vous renseigner sur <a href="http://adeona.cs.washington.edu/">Adeona</a> une solution encore plus sûre mais toujours développement.</p>
<p>Attention tout de même : n&#8217;oubliez pas que ces solutions nécessitent que <strong>votre ordinateur se connecte à Internet</strong> ! Pour cette raison, je recommande de laisser un <strong>compte &#8220;invité&#8221;</strong> sans aucun droits d&#8217;accès mais qui suffira au voleur. Évidemment la solution logicielle ne survivra pas au formatage de l&#8217;ordinateur.</p>
<h3>Solution matérielle</h3>
<p>Mis à part essayer de faire tenir dans votre chassis <a href="http://shop.ebay.fr/i.html?_nkw=gps+gsm+tracking+system">un de ces appareils</a> servant à espionner votre femme/enfants/employé, je ne connais qu&#8217;une solution qui <strong>résiste à un reformatage du PC</strong> : Computrace.</p>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2012/04/Computrace1-300x139.jpg" alt="" title="Computrace" width="300" height="139" class="alignright size-medium wp-image-6128" />Très peu connue du grand public, <strong>Computrace</strong>, commercialisé sous le nom <strong>LoJack for Laptops</strong>, est une technologie d&#8217;Absolute Software inclue dans la plupart des ordinateurs récents (<a href="http://www.absolute.com/partners/bios-compatibility">liste de compatibilité</a>). Les mauvaises langues diront que Computrace est un <strong>trojan caché dans le BIOS</strong> de ces machines et ils n&#8217;auraient pas tout à fait tort. Puisqu&#8217;il est contenu dans le BIOS, ce petit script est <strong>impossible à supprimer</strong>. S&#8217;il le faut, il se réinstalle au démarrage ce qui le rend même immunisé à un changement du disque dur.</p>
<p>A la manière de Prey, il contacte toutes les 24 heures les serveurs de Computrace pour voir si la machine a été volée (puis toutes les 20 minutes si c&#8217;est le cas) et permet de localiser l&#8217;ordinateur ou en effacer les données si requis. Malheureusement, en plus de nécessiter <strong>Windows ou MacOS</strong> pour fonctionner,  c&#8217;est une solution commerciale qui nécessite de payer un <strong>abonnement annuel</strong> (minimum 30$/an) et de <strong>configurer la machine avant</strong> qu&#8217;elle ne soit volée.</p>
<p><em>(Petite note d&#8217;inquiétude pour le geek qui est en vous : Computrace semble contacter les serveurs d&#8217;Absolute Software même s&#8217;il n&#8217;a jamais été activé. Serions-nous trahis par notre BIOS ? Heureusement que leur technologie n&#8217;est pas compatible Linux&#8230;)</em></p>
<h3>Conclusion</h3>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2012/04/Laptop-secure.jpg" alt="" title="Laptop-secure" width="285" height="203" class="alignright size-full wp-image-6121" />Voilà j&#8217;espère que je vous aurai convaincu de prendre quelques minutes de votre temps pour préparer le pire. En tout cas, moi j&#8217;ai installé Prey sur tous les nouveaux laptops que nous avons dû acheter suite à nos mésaventures.</p>
<p>Pour pousser le vice plus loin, n&#8217;oubliez pas de chiffrer vos données sensibles et de révoquer vos clés et mots de passe si nécessaire.</p>
<p>Pour en savoir plus, je vous invite à <a href="http://preyproject.com/blog/cat/recoveries">lire les récits de récupérations</a> grâce à Prey ou, pourquoi pas, expliquer en commentaire comment vous sécurisez votre précieux PC.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/' rel='bookmark' title='Linux &#8211; Laptop &#8211; Ultimate Powersaving !'>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</a></li>
<li><a href='http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/' rel='bookmark' title='Partager la connexion de son laptop'>Partager la connexion de son laptop</a></li>
<li><a href='http://geekfault.org/2009/05/27/internet-via-iphone/' rel='bookmark' title='Internet sur votre laptop via un iPhone'>Internet sur votre laptop via un iPhone</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Lancer votre dual-booting Windows dans une VirtualBox</title>
		<link>http://geekfault.org/2011/10/14/lancer-votre-dual-booting-windows-dans-une-virtualbox/</link>
		<comments>http://geekfault.org/2011/10/14/lancer-votre-dual-booting-windows-dans-une-virtualbox/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 17:48:32 +0000</pubDate>
		<dc:creator>Tito</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[raw]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[virtualisation]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=6053</guid>
		<description><![CDATA[Mes études me forcent à utiliser des logiciels disponibles uniquement sous Microsoft Windows. Sur ma nouvelle machine j&#8217;ai donc décidé de laisser le Windows en dual-boot. Mais je souhaite aussi pouvoir le lancer virtualisé dans mon environnement Linux ! Avec un peu d&#8217;astuce c&#8217;est tout à fait possible, grâce au mode d&#8217;accès disque &#8220;raw&#8221;. Voici [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/08/14/faille-critique-dans-tous-les-noyaux-linux/' rel='bookmark' title='Faille critique dans tous les noyaux Linux'>Faille critique dans tous les noyaux Linux</a></li>
<li><a href='http://geekfault.org/2009/03/27/keymap-linux-sous-windows/' rel='bookmark' title='Keymap Linux sous Windows'>Keymap Linux sous Windows</a></li>
<li><a href='http://geekfault.org/2010/03/09/openvz-virtualisation-legere-performante-et-amusante/' rel='bookmark' title='OpenVZ : virtualisation légère, performante et amusante'>OpenVZ : virtualisation légère, performante et amusante</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2011/10/Windows-in-VirtualBox.png" title="Windows-in-VirtualBox" rel="lightbox.6053"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2011/10/Windows-in-VirtualBox-300x168.png" alt="" title="Windows-in-VirtualBox" width="300" height="168" class="alignleft size-medium wp-image-6057" /></a>Mes études me forcent à utiliser des logiciels disponibles uniquement sous Microsoft Windows. Sur ma nouvelle machine j&#8217;ai donc décidé de laisser le Windows en dual-boot. Mais je souhaite aussi pouvoir le lancer <strong>virtualisé</strong> dans mon environnement Linux !</p>
<p>Avec un peu d&#8217;astuce c&#8217;est tout à fait possible, grâce au mode d&#8217;accès disque &#8220;raw&#8221;. Voici comment j&#8217;ai réussi à lancer mon Windows physique à l&#8217;intérieur d&#8217;une VirtualBox.<br />
<!--more--></p>
<h3>Préparation</h3>
<p>Je présuppose que vous avez déjà une installation dual-boot fonctionnelle. Dans votre environnement Linux, installez VirtualBox ainsi que l&#8217;utilitaire mbr :<br />
<code># apt-get install virtualbox mbr</code><br />
Si vous souhaitez lancer cette machine virtuelle en tant qu&#8217;utilisateur, nous devons ajouter l&#8217;user aux groupes nécessaires :<br />
<code># gpasswd -a tito vboxusers<br />
# gpasswd -a tito disk</code><br />
Finalement, essayez de retrouver votre CD d&#8217;installation de Windows.</p>
<h3>Création du disque virtuel</h3>
<p>Pour permettre à VirtualBox de lancer Windows, nous devons créer un disque virtuel bootable. Pour cela on crée un Master Boot Record. Il faut d&#8217;abord identifier où se trouve votre Windows. Le mien, comme beaucoup d&#8217;installations constructeur de nos jours, tient en deux partitions : la boot sur /dev/sda1 et le système sur /dev/sda2. Je suppose que vous saurez aisément situer le vôtre.<br />
<code>$ mkdir Virtual7 &#038;&#038; cd Virtual7<br />
$ install-mbr -e12 --force ./vm.mbr</code><br />
Remarquez l&#8217;option -e12 qui signifie &#8220;partitions 1 et 2&#8243;, modifiez selon votre système!</p>
<p>Nous créons maintenant le disque virtuel :<br />
<code>$ VBoxManage internalcommands createrawvmdk -filename ./win7.vmdk -rawdisk /dev/sda -partitions 1,2 -mbr ./vm.mbr -relative</code><br />
À nouveau, modifiez les arguments rawdisk et partitions selon votre système.</p>
<h3>Création de la VirtualBox</h3>
<p>Vous pouvez maintenant lancer l&#8217;interface graphique de VirtualBox et créer une nouvelle machine virtuelle. Lorsque l&#8217;assistant demande le disque dur virtuel, allez chercher le fichier Virtual7/win7.vmdk.<br />
<a href="http://geekfault.org/wp-content/uploads/2011/10/Capture-Créer-une-nouvelle-machine-virtuelle.png"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2011/10/Capture-Créer-une-nouvelle-machine-virtuelle-580x365.png" alt="" title="Créer une nouvelle machine virtuelle" width="580" height="365" class="aligncenter size-large wp-image-6054" /></a></p>
<h3>Réparer Windows</h3>
<p>Si vous essayez de lancer la machine virtuelle maintenant, Windows vous gratifiera d&#8217;une jolie erreur vous demandant de démarrer sur le CD d&#8217;installation pour réparation. <strong>C&#8217;est tout à fait normal!</strong></p>
<p>Après avoir monté votre CD d&#8217;installation Windows dans VirtualBox, bootez à partir de celui-ci. Choisissez vos options linguistiques et cliquez sur &#8220;Réparer l&#8217;installation&#8221;. La machine virtuelle va redémarrer sous votre Windows!</p>
<h3>Problèmes divers</h3>
<ul>
<li>Dans certains cas, la configuration par défaut de VirtualBox ne permet pas de démarrer Windows 7, ni même son CD de réparation! (Erreur 0xc0000225) Pour régler le problème, dans la configuration de la machine virtuelle cochez &#8220;<strong>Activer les IO-APIC</strong>&#8221; sous l&#8217;onglet Système.</li>
<li>Étrangement, la réparation du démarrage de Windows a modifié le comportement vis-à-vis de GRUB. J&#8217;ai donc modifié mon /boot/grub/grub.conf pour que Windows démarre depuis (hd0,1) plutôt que (hd0,0).</li>
<li>Même s&#8217;il sont bien pratique en milieu virtualisé, les additions client (guest addons) de VirtualBox font planter Windows lorsqu&#8217;il est lancé physiquement. Ne les installez donc pas.</li>
</ul>
<h3>En savoir plus</h3>
<ul>
<li><a href="http://www.rajatarya.com/website/taming-windows-virtualbox-vm">Taming Windows 7 in a VM</a></li>
<li><a href="http://www.virtualbox.org/manual/ch09.html#rawdisk">VirtualBox raw host hard disk from a guest</a></li>
<li><a href="http://bbesnard.over-blog.com/article-virtualisation-erreur-0xc0000225-virtual-box-win2008-server-r2-59594322.html">Erreur 0xc0000225</a></li>
</ul>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/08/14/faille-critique-dans-tous-les-noyaux-linux/' rel='bookmark' title='Faille critique dans tous les noyaux Linux'>Faille critique dans tous les noyaux Linux</a></li>
<li><a href='http://geekfault.org/2009/03/27/keymap-linux-sous-windows/' rel='bookmark' title='Keymap Linux sous Windows'>Keymap Linux sous Windows</a></li>
<li><a href='http://geekfault.org/2010/03/09/openvz-virtualisation-legere-performante-et-amusante/' rel='bookmark' title='OpenVZ : virtualisation légère, performante et amusante'>OpenVZ : virtualisation légère, performante et amusante</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2011/10/14/lancer-votre-dual-booting-windows-dans-une-virtualbox/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Devbox KVM+Libvirt perfect setup.</title>
		<link>http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/</link>
		<comments>http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 17:55:56 +0000</pubDate>
		<dc:creator>jfp</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[libvirt]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5533</guid>
		<description><![CDATA[Dans le cadre de mon boulot chez Euro-Web j&#8217;ai été amené à monter une plate forme un peu particulière pour mon client Zenexity. Leur principale activité est le développement d&#8217;applications web basées sur une technologie maison open source ( framework Play! ). J&#8217;ai donc demandé l&#8217;autorisation de faire une documentation publique sur cette installation, car je [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
<li><a href='http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/' rel='bookmark' title='Allocation d&#8217;IPv6 over OpenVPN'>Allocation d&#8217;IPv6 over OpenVPN</a></li>
<li><a href='http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/' rel='bookmark' title='PXE : Y a-t-il un bootloader sur l&#8217;réseau ?'>PXE : Y a-t-il un bootloader sur l&#8217;réseau ?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2011/02/libvirtlogo.png" title="libvirtlogo" rel="lightbox.5533"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft size-medium wp-image-5542 noborder" title="libvirtlogo" src="http://geekfault.org/wp-content/uploads/2011/02/libvirtlogo-300x240.png" alt="" width="300" height="240" /></a>Dans le cadre de mon boulot chez <a href="http://fr.euroweb.com">Euro-Web</a> j&#8217;ai été amené à monter une plate forme un peu particulière pour mon client <a href="http://www.zenexity.com">Zenexity</a>. Leur principale activité est le développement d&#8217;applications web basées sur une technologie maison open source ( <a href="http://www.playframework.org/">framework Play!</a> ).</p>
<p>J&#8217;ai donc demandé l&#8217;autorisation de faire une documentation publique sur cette installation, car je la trouve intéressante, et je n&#8217;ai rien trouvé de similaire pour le moment sur la toile.</p>
<p>Le setup part d&#8217;un gros besoin en machines virtuelles :</p>
<ul>
<li>Les développeurs ont besoin de tester leurs applications sous toutes les coutures et sont plus plutôt allergiques à certains systèmes d&#8217;exploitation, même sous forme de machines virtuelles.</li>
<li>Certaines plates formes déjà en production ont besoin d&#8217;environnement de préproduction facilement ré-initialisables. Les développeurs ont besoin d&#8217;images/VM &#8220;template&#8221; afin de pouvoir réaliser leurs tests facilement.</li>
<li>Les architectes ont besoin de valider des setups en mode pré-production sur des technologies émergentes</li>
</ul>
<div style="background: #FFFABF; padding: 4px;"><strong>Avertissement :</strong> Cet article a pour but de partager des connaissances avec un public avisé.</div>
<p><!--more--></p>
<h3>Préambule</h3>
<ul>
<li>Le setup d&#8217;origine ayant été réalisé sous Debian 6.0 la documentation présenté tel qu&#8217;elle est ici, est bien sur basé sur la machine de production Debian 6.0. Il est à noter que j&#8217;ai réalisé très facilement un clone de cette machine sous gentoo, je vous donnerai en annexe les options de compilation des différents programmes utilisés.</li>
<li>L&#8217;installation + la configuration du serveur OpenVPN ne fait pas l&#8217;objet de cet article, vous pouvez donc pour cela vous reporter aux <a href="http://geekfault.org/tag/openvpn/">autres articles de Geekfault traitant du VPN</a>.</li>
<li>En fait, réaliser ce setup, est chose plutôt aisé pour tout adminsys chevronné, (chose qui vous vous en doutez je suis :p), le plus compliqué a été de trouver des contournements pour les multitudes de soucis rencontrés.</li>
</ul>
<h3>Cahier des charges</h3>
<p>Comme expliqué plus haut le système de VM est un système très utilisé chez mon client. J&#8217;avais dans le passé monté un serveur XEN pour eux, mais la flexibilité ne convenait plus, notamment pour les grid de test Windows.</p>
<p>Il fallait donc un nouveau serveur de VM. By design, les guest Windows ne seront pas accessible depuis l&#8217;internet, et n&#8217;auront donc pas d&#8217;IP publique. En outre, les développeurs devront pouvoir accéder de façon transparente à leur Windows de test, si possible de manière sécurisée.</p>
<p>Les guests GNU/Linux, quand à eux,  pourront être accessibles via une IP publique, via VPN ou les deux à la fois.</p>
<p>La création / les duplications / la maintenance / le démarrage / l&#8217;arrêt des VM devra être très simple. (Le client souhaite  garder la main sur cela, et être maitre de la situation en matière de création de VM).</p>
<h3>Choix de la technologie</h3>
<p>Nous avons finalement retenu l&#8217;idée d&#8217;un serveur étant capable de faire cela :</p>
<ul>
<li>N&#8217;importe qui doit  pouvoir ré-amorcer un système clean : toutes les VM tourneront sur des fichiers .img stockés dans /var</li>
<li>Les gestion des ressources réseau est automatisée au maximum : les VM devront obtenir leurs IP privées ou publiques automatiquement, par DHCP.</li>
<li>La technologie de virtualisation sera Qemu/Kvm, épaulée par Libvirt.</li>
<li>Certaines VM ne seront accessible que au travers d&#8217;un VPN, alors que d&#8217;autres devront pouvoir faire office de serveur de préproduction et devront avoir des IP publiques.</li>
<li>Ce serveur devra donc être &#8220;hub&#8221; VPN et permettre la communication entre les clients du VPN, et les VM.</li>
<li>Chaque VM qui ne sera que dans le LAN VPN, devra quand même pouvoir accéder à l&#8217;internet. Nous pensons donc utiliser un bridge ethernet sur eth0 ainsi que sur l&#8217;interface VPN.</li>
<li>Chaque VM devra donc être clonable et les developpeurs pourront s&#8217;y connecter à travers le VPN,  à l&#8217;aide de ssh, ou VNC / rdesktop pour les systèmes d&#8217;exploitation de seconde zone.</li>
<li>Ce serveur devra pouvoir faire tourner des VM : Gentoo / Debian 5.0 / Debian 6.0 / CentOS / Windows (avec différentes version d&#8217;Internet Explorer, nerf de la guerre des tests d&#8217;applications web sous plate-forme windows).</li>
</ul>
<h3>Prérequis Kernel</h3>
<p>Nous avons finalement utilisé le noyau 2.6.32.27. En effet les noyaux 2.6.36 présentent <a href="http://kerneltrap.org/mailarchive/linux-kernel/2010/8/29/4612871">un bug dans le support KVM</a> qui <a href="http://comments.gmane.org/gmane.comp.emulators.kvm.devel/65852">fait freezer la machine à la coupure des VM</a>. (Nous sommes à priori victimes d&#8217;une régression dans le kernel Linux).</p>
<p>http://comments.gmane.org/gmane.comp.emulators.kvm.devel/65852</p>
<p>Nous avons donc upgradé sur le 2.6.37 mais, nous nous sommes heurtés à un nouveau bug kernel.</p>
<h4>Bug kernel avec le 2.6.37</h4>
<p><code>[76529.274129] rmap_remove: ffff88017deb37f8 1-&gt;BUG<br />
[76529.274162] ------------[ cut here ]------------<br />
[76529.274189] kernel BUG at arch/x86/kvm/mmu.c:700!<br />
[76529.274217] invalid opcode: 0000 [#1] SMP<br />
[76529.274247] last sysfs file: /sys/devices/virtual/net/lo/operstate<br />
[76529.274276] CPU 2<br />
[76529.274302] Pid: 27193, comm: kvm Not tainted 2.6.37 #1 01V648/PowerEdge R410<br />
[76529.274333] RIP: 0010:[] [] drop_spte+0xb8/0x179<br />
[76529.274389] RSP: 0018:ffff88080d987b28 EFLAGS: 00010296<br />
[76529.274417] RAX: 000000000000003b RBX: ffff88017deb37f8 RCX: ffff8800000bc380<br />
[76529.274449] RDX: 000000000000c3c3 RSI: 0000000000000046 RDI: ffffffff81918a88<br />
[76529.274480] RBP: ffff88080d987b38 R08: 0000000000000000 R09: 000000000000000a<br />
[76529.274512] R10: ffff88102f819400 R11: ffff88102f819400 R12: ffff880fe7cb0000<br />
[76529.274544] R13: ffff88080d987b98 R14: 0000000000000000 R15: ffff88017deb37f8<br />
[76529.274576] FS: 0000000000000000(0000) GS:ffff88102fc20000(0000) knlGS:0000000000000000<br />
[76529.274623] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b<br />
[76529.274652] CR2: 00007fb91807f000 CR3: 000000100aa0d000 CR4: 00000000000026e0<br />
[76529.274684] DR0: 0000000000000090 DR1: 00000000000000a4 DR2: 00000000000000ff<br />
[76529.274715] DR3: 000000000000000f DR6: 00000000ffff0ff0 DR7: 0000000000000400<br />
[76529.274747] Process kvm (pid: 27193, threadinfo ffff88080d986000, task ffff8805a1d82630)<br />
[76529.274794] Stack:<br />
[76529.274815] ffff88080da10090 ffff880fe7cb0000 ffff88080d987b88 ffffffff8100ef8f<br />
[76529.274870] ffff8805a1d82630 000000ff8109702a ffff88080d987c08 ffff880fe7cb0000<br />
[76529.274925] ffff88080da10950 ffff88080d987b98 ffff880fe7cb2320 0000000000020d93<br />
[76529.274981] Call Trace:<br />
[76529.275006] [] kvm_mmu_prepare_zap_page+0x74/0x23c<br />
[76529.275038] [] kvm_mmu_zap_all+0x41/0x6b<br />
[76529.275069] [] kvm_arch_flush_shadow+0x11/0x1e<br />
[76529.275101] [] kvm_mmu_notifier_release+0x2c/0x3f<br />
[76529.275134] [] __mmu_notifier_release+0x49/0x74<br />
[76529.275166] [] exit_mmap+0x27/0x147<br />
[76529.275198] [] mmput+0x28/0xb4<br />
[76529.275226] [] exit_mm+0x124/0x131<br />
[76529.275254] [] do_exit+0x20f/0x6a7<br />
[76529.275283] [] do_group_exit+0x71/0x99<br />
[76529.275313] [] get_signal_to_deliver+0x2fa/0x315<br />
[76529.275346] [] do_signal+0x6d/0x673<br />
[76529.275375] [] ? kill_pid_info+0x3a/0x47<br />
[76529.275404] [] ? sys_kill+0x82/0x161<br />
[76529.275433] [] do_notify_resume+0x27/0x51<br />
[76529.275464] [] int_signal+0x12/0x17<br />
[76529.275491] Code: 48 d9 71 81 31 c0 e8 2b 7f 5c 00 0f 0b eb fe 40 f6 c6 01 75 26 48 39 f3 74 15 48 89 de 48 c7 c7 63 d9 71 81 31 c0 e8 0b 7f 5c 00 &lt;0f&gt; 0b eb fe 48 c7 00 00 00 00 00 e9 ac 00 00 00 48 83 e6 fe 31<br />
[76529.275720] RIP [] drop_spte+0xb8/0x179<br />
[76529.275752] RSP<br />
[76529.276109] ---[ end trace 2d814c5436296e34 ]---<br />
[76529.276177] Fixing recursive fault but reboot is needed!</code></p>
<p>Je vous renvoie à <a href="http://www.mail-archive.com/kvm@vger.kernel.org/msg47630.html">la mailing list de kernel.org à ce sujet</a>. Ça ressemble beaucoup, le gars a le même problème sur un 2.6.36. Le mainteneur des kernel 2.4.x a posté un patch pour 2.6.36 sur le thread.</p>
<h4>Voici ce qu&#8217;il faut activer dans le noyau pour que notre setup fonctionne :</h4>
<p><code>- Networking support<br />
-- Networking options<br />
--- 802.1d Ethernet Bridging<br />
--- Network Packet Filtering framework (netfilter)<br />
---- Core Netfilter configuration (les options dont vous aurez besoin pour vos propres régles de firewalling)<br />
---- IP: Netfilter Configuration<br />
----- IP tables support<br />
----- IPv4 Connection tracking support (required for NAT)<br />
----- Full NAT<br />
----- MASQUERADE target support</code><br />
(à compléter, j&#8217;ai certainement du oublier un truc).</p>
<h3>Installation des composants indispensables</h3>
<p>Voici la liste des composants indispensables à installer avec votre package manager (apt-get sous Debian; emerge sous Gentoo) :</p>
<ul>
<li>libvirt-bin</li>
<li>libvirt0</li>
<li>virt-top</li>
<li>virtinst</li>
<li>isc-dhcp-server</li>
<li>openvpn</li>
<li>iproute</li>
<li>iptables</li>
<li>ifupdown</li>
<li>kvm</li>
<li>build-essential + libncurses5-dev</li>
<li>qemu-kvm</li>
<li>rsync</li>
<li>munin-libvirt-plugins</li>
</ul>
<h4>Use flags sous Gentoo</h4>
<p><code>/etc/portage/package.use</code><br />
<code><br />
app-emulation/libvirt libvirtd qemu lvm network nfs virt-network<br />
</code></p>
<h3>Configuration du bridge (debian ways)</h3>
<p><code>/etc/network/interfaces</code><br />
<code><br />
auto lo<br />
iface lo inet loopback<br />
# The primary network interface</code></p>
<p><code>auto eth0<br />
iface eth0 inet static<br />
address 91.x.x.x<br />
netmask 255.255.255.0<br />
network 91.x.x.0<br />
broadcast 91.x.x.255<br />
gateway 91.x.x.1</code></p>
<p><code>auto br0<br />
iface br0 inet static<br />
address 91.x.x.x<br />
netmask 255.255.255.0<br />
network 91.x.x.0<br />
broadcast 91.x.x.255<br />
gateway 91.x.x.1<br />
bridge_ports eth0<br />
bridge_stp off<br />
bridge_maxwait 5</code></p>
<p><code>auto br1<br />
iface br1 inet static<br />
address 172.16.20.1<br />
netmask 255.255.255.0<br />
network 172.16.20.0<br />
broadcast 172.16.20.255<br />
bridge_ports tap0<br />
bridge_stp off<br />
bridge_maxwait 5</code></p>
<p><code>pre-up iptables-restore -c /etc/network/iptables</code></p>
<p><code>auto eth1<br />
iface eth1 inet static<br />
address 10.191.78.4<br />
netmask 255.255.0.0<br />
network 10.191.0.0<br />
broadcast 10.191.0.255</code></p>
<h3>libvirt setup</h3>
<p><code>/etc/default/libvirt-bin</code><br />
<code>start_libvirtd="yes"<br />
libvirtd_opts="-d"</code></p>
<p>Creation du fichier de l&#8217;image :<br />
<code># qemu-img create /var/VM/gentoo-x86_64.img 10G</code></p>
<p><code>/etc/sysctl.conf</code><br />
<code>net.bridge.bridge-nf-call-ip6tables = 0<br />
net.bridge.bridge-nf-call-iptables = 1<br />
net.bridge.bridge-nf-call-arptables = 0<br />
net.ipv4.conf.all.bootp_relay = 1</code></p>
<p>Attention à l&#8217;isolation reseau des VM : <a href="https://bugzilla.redhat.com/show_bug.cgi?id=512206">https://bugzilla.redhat.com/show_bug.cgi?id=512206</a></p>
<p>Le DHCP ne doit pas envoyer de requêtes sur le reseau :<br />
<code># iptables -t filter -A FORWARD -p udp --sport 68 --dport 67 -j DROP </code></p>
<h4>Sécuriser le VNC de qemu/kvm en le forçant sur l&#8217;interface sécurisée</h4>
<p><code>/etc/libvirt/qemu.conf</code><br />
<code>vnc_listen '172.16.20.1' </code></p>
<h4>Problème de keymap bug libvirt</h4>
<p><a href="http://www.arnebrodowski.de/blog/keymap-problems-with-virt-manager.html">http://www.arnebrodowski.de/blog/keymap-problems-with-virt-manager.html</a></p>
<h4>Iptables avec le bridge et la libvirt</h4>
<p><a href="http://ddevnet.net/wiki/index.php/How_KVM_or_libVirt_IPtables_work">http://ddevnet.net/wiki/index.php/How_KVM_or_libVirt_IPtables_work</a></p>
<h4>Mise en place du dhcpd</h4>
<p><code>/etc/dhcp/dhcpd.conf</code><br />
<code>ddns-update-style none;<br />
option domain-name "zenexity.fr";<br />
option domain-name-servers 81.93.xxx.xxx, 81.93.xx.xx;<br />
default-lease-time 3600;<br />
max-lease-time 7200;</code></p>
<p><code>log-facility local7;</code></p>
<p><code>subnet 91.xxx.xx.0 netmask 255.255.255.0 {<br />
range 91.xxx.xx.20 91.xxx.xx.50;<br />
option routers 91.xxx.xx.1;<br />
}</code></p>
<p><code>subnet 172.16.20.0 netmask 255.255.255.0 {<br />
range 172.16.20.128 172.16.20.254;<br />
option routers 172.16.20.1<br />
}</code></p>
<h4>Exemple de création de VM</h4>
<ul>
<li>Une machine virtuelle gentoo n&#8217;ayant qu&#8217;une seule interface réseau sur le VPN only<br />
<code># virt-install -n gentoo -r 512 -vcpus=1 -f /var/VM/gentoo-x86_64.img -b br1 --vnc --accelerate -v -c /var/iso/gentoo.iso --os-type=linux</code></li>
<li>Une machine virtuelle debian, ayant une interface reseau publique et une interface VPN<br />
<code># virt-install -n debian -r 512 -vcpus=1 -f /var/VM/debian-x86_64.img -b br0 -b br1 --vnc --accelerate -v -c /var/iso/debian-5.iso --os-type=linux</code></li>
</ul>
<p>libvirt stocke ses fichiers de description de VM dans /etc/libvirt/qemu. Voici un exemple de fichier xml généré par libvirt :<br />
<code>/etc/libvirt/qemu/debian-50.xml</code><br />
<code><br />
<domain type='kvm'><br />
  <name>debian-50</name><br />
  <uuid>ce5fe35a-703b-8291-9508-8a83f74eb110</uuid><br />
  <memory>524288</memory><br />
  <currentMemory>524288</currentMemory><br />
  <vcpu>1</vcpu><br />
  <os><br />
    <type arch='x86_64' machine='pc-0.12'>hvm</type><br />
    <boot dev='hd'/><br />
  </os><br />
  <features><br />
    <acpi/><br />
    <apic/></p>
<pae/>
  </features><br />
  <clock offset='utc'/><br />
  <on_poweroff>destroy</on_poweroff><br />
  <on_reboot>restart</on_reboot><br />
  <on_crash>restart</on_crash><br />
  <devices><br />
    <emulator>/usr/bin/kvm</emulator><br />
    <disk type='file' device='disk'><br />
      <driver name='qemu' type='raw'/><br />
      <source file='/var/VM/debian-50.img'/><br />
      <target dev='vda' bus='virtio'/></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk><br />
    <disk type='block' device='cdrom'><br />
      <driver name='qemu' type='raw'/><br />
      <target dev='hdc' bus='ide'/><br />
      <readonly/></p>
<address type='drive' controller='0' bus='1' unit='0'/>
    </disk><br />
    <controller type='ide' index='0'></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller><br />
    <interface type='bridge'><br />
      <mac address='22:54:01:03:93:38'/><br />
      <source bridge='br0'/><br />
      <model type='virtio'/></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface><br />
    <serial type='pty'><br />
      <target port='0'/><br />
    </serial><br />
    <console type='pty'><br />
      <target type='serial' port='0'/><br />
    </console></p>
<input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='fr'/><br />
    <video><br />
      <model type='cirrus' vram='9216' heads='1'/></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video><br />
    <memballoon model='virtio'></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon><br />
  </devices><br />
</domain><br />
</code></p>
<p>Attention, si vous changez à la main un fichier domain.xml vous devez lancer la commande ;<br />
<code># virsh define domain.xml</code></p>
<h4>Internet pour les VM n&#8217;ayant été bind que sur le bridge du VPN</h4>
<p><code># iptables -t filter -A FORWARD -i br1 -j MARK --set-mark 1<br />
# iptables -t nat -A POSTROUTING -m mark ! --mark 1 -o br0 -j MASQUERADE</code></p>
<p>Ou, moins fin :<br />
<code># iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE</code></p>
<h3>Commandes libvirt qui vous serviront avec KVM</h3>
<ul>
<li><strong>virsh start domain :</strong> Start le domaine spécifié</li>
<li><strong>virsh shutdown domain :</strong> Shutdown le domaine spécifié</li>
<li><strong>virsh reboot domain :</strong> just reboot a domain</li>
<li><strong>virsh destroy domain :</strong> Terminate a domain</li>
<li><strong>virsh autostart domain :</strong> Autostart a domain</li>
<li><strong>virsh list :</strong> List domains</li>
</ul>
<h3>Ordre de boot des services</h3>
<p>Cette partie est la pierre angulaire de ce setup :</p>
<ol>
<li>Il faut que dhcpd soit demarré après openvpn ! en effet sinon vous ne serai pas capable de diffuser des adresses ip sur votre interface br1 (bridgé avec l&#8217;interface tap0 du vpn) si le dhcpd ne demarre pas après openvpn.</li>
<li>Il faut que la libvirt soit demarré après dhcpd, sinon vous ne serez pas capable de donner des ip à vos VM si celles-ci sont en auto start.<code>/etc/init.d/.depend.start</code><br />
<code>TARGETS = rsyslog qemu-kvm killprocs openvpn apache2 isc-dhcp-server cron acpid ssh rsync dbus exim4 libvirt-bin bootlogs munin-node single rc.local stop-bootlogd rmnologin<br />
INTERACTIVE = openvpn apache2<br />
openvpn: rsyslog<br />
apache2: rsyslog<br />
isc-dhcp-server: rsyslog<br />
cron: rsyslog<br />
acpid: rsyslog<br />
ssh: rsyslog<br />
rsync: rsyslog<br />
dbus: rsyslog<br />
exim4: rsyslog<br />
libvirt-bin: rsyslog openvpn<br />
munin-node: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4<br />
single: killprocs bootlogs<br />
rc.local: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4<br />
stop-bootlogd: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4<br />
rmnologin: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4</code></li>
<li>/etc/network/interfaces sur Debian aura toujours tendance à se lancer AVANT la création de tap0 par le service openvpn, or votre interface br1 doit être bridge sur tap0, il est donc nécéssaire de lancer ce petit script  (J&#8217;ai rajouté ce script au script d&#8217;init de openvpn, ainsi celui est lancé juste après que le vpn soit lancé, ainsi le bridge entre br1 et tap0 est fonctionnel lorsque la libvirt se lancera) :<br />
<code>/etc/zenexity/fixebr1</code><br />
<code>sleep 10<br />
ifdown br1 &#038;&#038; echo 'bridge down' >> /var/tmp/bridge<br />
sleep 1<br />
ifup br1 &#038;&#038; echo 'bridge up' >> /var/tmp/bridge<br />
sleep 1<br />
/etc/init.d/isc-dhcp-server restart<br />
</code></li>
<h3>Plugin munin pour libvirt + KVM</h3>
<p><img src="http://honk.sigxcpu.org/projects/libvirt/monitor/screenshots/cputime.png" alt="virt-cpu" /><br />
<img src="http://honk.sigxcpu.org/projects/libvirt/monitor/screenshots/memory.png" alt="virt-memory" /></p>
<p>Je vous renvoie au <a href="http://honk.sigxcpu.org/projects/libvirt/">site du plugin LibVirt pour Munin</a>.</ol>
<h3>Schema de l&#8217;infrastructure</h3>
<p><a rel="attachment wp-att-5789" href="http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/torrylin911-setup/"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft size-full wp-image-5789" title="torrylin911-setup" src="http://geekfault.org/wp-content/uploads/2011/03/torrylin911-setup.png" alt="" width="960" height="720" /></a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
<li><a href='http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/' rel='bookmark' title='Allocation d&#8217;IPv6 over OpenVPN'>Allocation d&#8217;IPv6 over OpenVPN</a></li>
<li><a href='http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/' rel='bookmark' title='PXE : Y a-t-il un bootloader sur l&#8217;réseau ?'>PXE : Y a-t-il un bootloader sur l&#8217;réseau ?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sikuli : programmez avec des screenshots</title>
		<link>http://geekfault.org/2010/10/31/sikuli-automatisation-graphique/</link>
		<comments>http://geekfault.org/2010/10/31/sikuli-automatisation-graphique/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 16:53:56 +0000</pubDate>
		<dc:creator>Tito</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[automatisation]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sikuli]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5441</guid>
		<description><![CDATA[Il nous arrive souvent de devoir refaire la même chose encore et encore sur nos ordinateurs. Et pourtant, ce sont eux les machines! Évidemment les plus érudits ont déjà tout un tas de scripts bash (ou un autre langage obscur) pour leur simplifier la vie. Mais il reste toujours certaines interactions qu&#8217;on n&#8217;arrive pas à [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/' rel='bookmark' title='Libérez votre esprit avec Freemind'>Libérez votre esprit avec Freemind</a></li>
<li><a href='http://geekfault.org/2009/05/19/authentification-avec-une-cle-usb/' rel='bookmark' title='S&#8217;authentifier avec une clé USB'>S&#8217;authentifier avec une clé USB</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2010/10/Sikuli-Exemple4.png" title="Sikuli-Exemple4" rel="lightbox.5441"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/10/Sikuli-Exemple4-300x171.png" alt="" title="Sikuli-Exemple4" width="300" height="171" class="alignleft size-medium wp-image-5466" /></a>Il nous arrive souvent de devoir refaire la même chose encore et encore sur nos ordinateurs. Et pourtant, ce sont eux les machines! Évidemment les plus érudits ont déjà tout un tas de <strong>scripts bash</strong> (ou un autre langage obscur) <strong>pour leur simplifier la vie</strong>.</p>
<p>Mais il reste toujours certaines interactions qu&#8217;<strong>on n&#8217;arrive pas à automatiser</strong> : celles qui touchent aux <strong>interfaces graphiques</strong> (lorsqu&#8217;aucune API n&#8217;est présente/utile). Je vous présente donc <strong>Sikuli</strong>, le moyen d&#8217;automatiser simplement ce qu&#8217;on voit à l&#8217;écran à partir de screenshots.<br />
<!--more--></p>
<h3>Installation</h3>
<p>Sikuli est un programme open-source en Jython (un interpréteur Python en Java, silence dans le fond de la salle~) et dispose de versions compatibles avec Windows, MacOS et évidemment Linux (32 ou 64bits). Je vous renvoie donc sur <a href="http://groups.csail.mit.edu/uid/sikuli/download.shtml"><strong>la page de téléchargements du projet</strong></a> pour télécharger la dernière version.</p>
<p>Assurez-vous d&#8217;avoir toutes les dépendances:<br />
<code>sudo apt-get install sun-java6-jre libcv4 libcvaux4 libhighgui4</code></p>
<p>Rien à compiler, décompressez le tout et lancez <strong>sikuli-ide.sh</strong></p>
<h3>Scripts simples</h3>
<p>Je ne pense pas que tout vous expliquer soit réellement utile ici, l&#8217;application est très intuitive. Les instructions principales sont évidemment <strong>click(&#8230;)</strong>, <strong>rightClick(&#8230;)</strong> ou <strong>type(&#8220;&#8230;&#8221;)</strong>. Tout est renseigné dans la colonne de gauche.</p>
<p>Pour insérer un screenshot je vous recommande le raccourci clavier <strong>Ctrl+Maj+2</strong> ou, s&#8217;il ne fonctionne pas à l&#8217;endroit où vous souhaitez le faire, utilisez le bouton de screenshot de Sikuli qui a un <strong>délai</strong> configurable dans les préférences.</p>
<p>Voici par exemple <strong>un script qui change la résolution de mon écran</strong> (oui, je sais, je pourrais le faire avec xrandr mais ici c&#8217;est vraiment à la portée de n&#8217;importe qui) :<br />
<div id="attachment_5449" class="wp-caption aligncenter" style="width: 352px"><img src="http://geekfault.org/wp-content/uploads/2010/10/Sikuli-Exemple1.png" alt="" title="Sikuli-Exemple1" width="342" height="284" class="size-full wp-image-5449" /><p class="wp-caption-text">Remarquez que sur certains des screenshots il y a <strong>un point rouge</strong>. Il correspond à l'endroit précis qui sera cliqué, appelé <strong>Target Offset</strong> dans Sikuli et programmable en cliquant sur le bouton représentant le screenshot.</p></div></p>
<h3>Scripts un peu plus intelligents</h3>
<p>Bien sûr Sikuli est proche d&#8217;un vrai langage de programmation et permet donc <strong>des scripts plus puissants, plus intelligents</strong>. On peut faire des boucles, des conditions, des wait, etc.</p>
<p>Voici quelques exemples simples qui parlent d&#8217;eux-même.</p>
<p><code>value = input("Entre la bonne valeur : ")<br />
type(value + "\n")</code><br />
<img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/10/Sikuli-Exemple2.png" alt="" title="Sikuli-Exemple2" width="252" height="272" class="alignleft size-full wp-image-5450" /> <img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/10/Sikuli-Exemple3.png" alt="" title="Sikuli-Exemple3" width="273" height="127" class="alignleft size-full wp-image-5452" /></p>
<p>Beaucoup d&#8217;autres exemples sont consultables dans <a href="http://groups.csail.mit.edu/uid/sikuli/documentation.shtml"><strong>la documentation de Sikuli</strong></a>.</p>
<h3>C&#8217;est bien beau pour les n00bs, mais pour les geeks comme moi?</h3>
<p>Bon j&#8217;ai du me détruire le cerveau à trouver une utilité à Sikuli pour les geeks durs de dur qui savent tout faire en bash&#8230; Et j&#8217;ai trouvé!</p>
<p>Si vous développez des interfaces graphiques, Sikuli peut <a href="http://sikuli.org/documentation.shtml#/trac/wiki/UnitTesting"><strong>faire des unitTests sur celles-ci</strong></a> ! On peut aussi utiliser les possibilités de Sikuli <a href="http://sikuli.org/documentation.shtml#/trac/wiki/How%20to%20use%20Sikuli%20Script%20in%20your%20JAVA%20programs?">dans ses propres logiciels Java</a>.</p>
<p>On peut aussi interagir avec des grosses méchantes applications web en AJAX&#8230; Si vous trouvez d&#8217;autres utilités, laissez-les en commentaire <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Lancer un script</h3>
<p>On peut évidemment lancer un script depuis l&#8217;interface graphique de Sikuli mais le plus intéressant est de le faire depuis un terminal ou un raccourci. Rien de plus simple, il suffit d&#8217;appeler Sikuli avec le paramètre <strong>&#8211;run</strong> :<br />
<code>/chemin/vers/sikuli/sikuli-ide.sh --run /chemin/vers/script.sikuli</code></p>
<p>J&#8217;en ai même un assigné à un raccourcis clavier (Google est votre ami, les raccourcis clavier dépendent de votre environnement graphique)</p>
<h3>En savoir plus</h3>
<ul>
<li><a href="http://sikuli.org/index.shtml">Le site du projet</a></li>
<li><a href="http://groups.csail.mit.edu/uid/sikuli/documentation.shtml">Documentation par l&#8217;exemple</a></li>
</ul>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/' rel='bookmark' title='Libérez votre esprit avec Freemind'>Libérez votre esprit avec Freemind</a></li>
<li><a href='http://geekfault.org/2009/05/19/authentification-avec-une-cle-usb/' rel='bookmark' title='S&#8217;authentifier avec une clé USB'>S&#8217;authentifier avec une clé USB</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/10/31/sikuli-automatisation-graphique/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>wgetpaste, de la console au pastebin</title>
		<link>http://geekfault.org/2010/09/18/wgetpaste-de-la-console-au-pastebin/</link>
		<comments>http://geekfault.org/2010/09/18/wgetpaste-de-la-console-au-pastebin/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 12:20:53 +0000</pubDate>
		<dc:creator>roidelapluie</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[pastebin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5400</guid>
		<description><![CDATA[Utilisés pour le partage de logs, l&#8217;échange de patch, la diffusion de quotes, et des dizaines d&#8217;autres choses, les pastebin sont sans conteste des outils très important dans le monde des logiciels libres. Or, la plupart d&#8217;entre nous effectuent des démarches assez fastidieuses pour mettre du contenu sur ces fameux pastebin: copier le texte, ouvrir [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/' rel='bookmark' title='Libérez votre esprit avec Freemind'>Libérez votre esprit avec Freemind</a></li>
<li><a href='http://geekfault.org/2009/08/26/plowshare-megaupload-rapidshare-en-cli/' rel='bookmark' title='Plowshare : MegaUpload, RapidShare et autres en CLI'>Plowshare : MegaUpload, RapidShare et autres en CLI</a></li>
<li><a href='http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/' rel='bookmark' title='Zeroconf : Réseaux IP sans configuration'>Zeroconf : Réseaux IP sans configuration</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2010/09/wgetpaste3.png" title="wgetpaste3" rel="lightbox.5400"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/09/wgetpaste3-150x150.png" alt="" title="wgetpaste3" width="150" height="150" class="alignleft size-thumbnail wp-image-5431" /></a>Utilisés pour le partage de logs, l&#8217;échange de patch, la diffusion de quotes, et des dizaines d&#8217;autres choses, les pastebin sont sans conteste des outils très important dans le monde des logiciels libres.</p>
<p>Or, la plupart d&#8217;entre nous effectuent des démarches assez fastidieuses pour mettre du contenu sur ces fameux pastebin: copier le texte, ouvrir un navigateur, aller sur le pastebin, coller le texte, récupérer l&#8217;url. Ceci est long et peu pratique. Heureusement, un logiciel libre existe pour simplifier les choses: <a href="http://wgetpaste.zlin.dk/">wgetpaste</a>.<br />
<!--more--><br />
<a href="http://wgetpaste.zlin.dk/">Wgetpaste</a>, dont le site n&#8217;est pas vraiment explicite, va vous permettre, via un pipe &#8220;|&#8221;, d&#8217;envoyer aisément le résultat d&#8217;une commande vers un pastebin, et de récupérer l&#8217;URL de destination.</p>
<p>En voici quelques exemples d&#8217;utilisation, qui vous parleront surement plus:</p>
<h3>Le comportement par défault, utilisant paste.pocoo.org</h3>
<p>Le plus simple pour émettre sur un pastebin est d&#8217;utiliser &#8220;wgetpaste&#8221;, sans options. Le service par défaut est <a href="http://paste.pocoo.org">paste.pocoo.org</a>.<br />
<code>$ cat geekfault.txt | wgetpaste<br />
Your paste can be seen here: http://paste.pocoo.org/show/263519/</code><br />
De cette manière, nous avons l&#8217;URL directe où a été posté notre fichier.</p>
<p>Pour aller plus loin, nous pouvons donner l&#8217;option -r (&#8220;raw&#8221;) afin de recevoir l&#8217;URL du texte sans formatage ni fioriture:<br />
<code>$ cat geekfault.txt | wgetpaste -r<br />
Your raw paste can be seen here: http://paste.pocoo.org/raw/263520/</code></p>
<h3>Choisir un autre service de pastebin</h3>
<p>Vous pouvez obtenir la liste des services en utilisant l&#8217;option -S<br />
<code>$ wgetpaste -S<br />
Services supported: (case sensitive):<br />
   Name:    | Url:<br />
   =========|=================<br />
    ca      | http://pastebin.ca/<br />
    codepad | http://codepad.org/<br />
    dpaste  | http://dpaste.com/<br />
    osl     | http://pastebin.osuosl.org/<br />
   *pocoo   | http://paste.pocoo.org/</code></p>
<p>Ensuite, vous pouvez sélectionner le service avec l&#8217;option -s<br />
<code>$ cat geekfault.txt | wgetpaste -s ca<br />
Your paste can be seen here: http://pastebin.ca/1943411</code></p>
<h3>La coloration syntaxique</h3>
<p>La liste des syntaxes est disponible avec l&#8217;option -L (combinable avec l&#8217;option -s).</p>
<p>Voici un exemple de post d&#8217;un fichier python:<br />
<code>$ cat geekfault.py | wgetpaste -l Python<br />
Your paste can be seen here: http://paste.pocoo.org/show/263529/</code></p>
<h3>Aller plus loin</h3>
<p>Bien d&#8217;autres choses sont disponibles. La liste est disponible avec l&#8217;option -h&#8230; Je vous laisse découvrir tout cela!<br />
<code>$ wgetpaste -h<br />
Usage: /usr/bin/wgetpaste [options] [file[s]]</p>
<p>Options:<br />
    -l, --language LANG           set language (defaults to "Plain Text")<br />
    -d, --description DESCRIPTION set description (defaults to "stdin" or filename)<br />
    -n, --nick NICK               set nick (defaults to your username)<br />
    -s, --service SERVICE         set service to use (defaults to "pocoo")<br />
    -e, --expiration EXPIRATION   set when it should expire (defaults to "1 month")</p>
<p>    -S, --list-services           list supported pastebin services<br />
    -L, --list-languages          list languages supported by the specified service<br />
    -E, --list-expiration         list expiration setting supported by the specified service</p>
<p>    -u, --tinyurl URL             convert input url to tinyurl</p>
<p>    -c, --command COMMAND         paste COMMAND and the output of COMMAND<br />
    -i, --info                    append the output of `emerge --info`<br />
    -I, --info-only               paste the output of `emerge --info` only<br />
    -x, --xcut                    read input from clipboard (requires x11-misc/xclip)<br />
    -X, --xpaste                  write resulting url to the X primary selection buffer (requires x11-misc/xclip)<br />
    -C, --xclippaste              write resulting url to the X clipboard selection buffer (requires x11-misc/xclip)</p>
<p>    -r, --raw                     show url for the raw paste (no syntax highlighting or html)<br />
    -t, --tee                     use tee to show what is being pasted<br />
    -v, --verbose                 show wget stderr output if no url is received<br />
        --completions             emit output suitable for shell completions (only affects --list-*)<br />
        --debug                   be *very* verbose (implies -v)</p>
<p>    -h, --help                    show this help<br />
    -g, --ignore-configs          ignore /etc/wgetpaste.conf, ~/.wgetpaste.conf etc.<br />
        --version                 show version information</p>
<p>Defaults (DEFAULT_{NICK,LANGUAGE,EXPIRATION}[_${SERVICE}] and DEFAULT_SERVICE)<br />
can be overridden globally in /etc/wgetpaste.conf or /etc/wgetpaste.d/*.conf or<br />
per user in any of ~/.wgetpaste.conf or ~/.wgetpaste.d/*.conf.</code></p>
<p>Bon amusement!</p>
<p>Dans c&#8217;est article, nous n&#8217;avons utilisé que la commande &#8220;cat&#8221;. Mais ceci fonctionne avec n&#8217;importe quelle commande.</p>
<p>Attention! Wgetpaste ne prend en compte que ce qui sort sur la sortie standard (stdout). Pour prendre stderr en compte, vous pouvez utiliser 2>&#038;1. Par exemple:<br />
<code>$ cat file_not_found 2>&#038;1 | wgetpaste<br />
Your paste can be seen here: http://paste.pocoo.org/show/263533/</code></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/' rel='bookmark' title='Libérez votre esprit avec Freemind'>Libérez votre esprit avec Freemind</a></li>
<li><a href='http://geekfault.org/2009/08/26/plowshare-megaupload-rapidshare-en-cli/' rel='bookmark' title='Plowshare : MegaUpload, RapidShare et autres en CLI'>Plowshare : MegaUpload, RapidShare et autres en CLI</a></li>
<li><a href='http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/' rel='bookmark' title='Zeroconf : Réseaux IP sans configuration'>Zeroconf : Réseaux IP sans configuration</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/09/18/wgetpaste-de-la-console-au-pastebin/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Zeroconf : Réseaux IP sans configuration</title>
		<link>http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/</link>
		<comments>http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 21:10:43 +0000</pubDate>
		<dc:creator>Tito</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[avahi]]></category>
		<category><![CDATA[bonjour]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[protocole]]></category>
		<category><![CDATA[zeroconf]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5324</guid>
		<description><![CDATA[Zeroconf est un ensemble de protocoles permettant de créer des réseaux IP et y fournir plusieurs services sans aucune configuration. Zeroconf permet entre autres de : Allouer automatiquement des IP, sans configurer un serveur DHCP Résoudre des noms de domaines locaux, sans configurer de serveur DNS Annoncer et découvrir des services, sans serveur d&#8217;annuaire Aventurons-nous [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/' rel='bookmark' title='SSH sans mot de passe'>SSH sans mot de passe</a></li>
<li><a href='http://geekfault.org/2010/12/05/devenez-miroir-de-wikileaks-sans-risque/' rel='bookmark' title='Devenez miroir de Wikileaks sans risque (corrigé)'>Devenez miroir de Wikileaks sans risque (corrigé)</a></li>
<li><a href='http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/' rel='bookmark' title='Chromium, le Google Chrome sous Linux sans émulation'>Chromium, le Google Chrome sous Linux sans émulation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2010/07/Bonjour.jpg" title="Bonjour" rel="lightbox.5324"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/07/Bonjour-150x150.jpg" alt="" title="Bonjour" width="150" height="150" class="alignleft size-medium wp-image-5337 noborder" /></a>Zeroconf est un ensemble de protocoles permettant de créer des réseaux IP et y fournir plusieurs services <strong>sans aucune configuration</strong>. Zeroconf permet entre autres de :</p>
<ul>
<li><strong>Allouer automatiquement des IP</strong>, sans configurer un serveur DHCP</li>
<li><strong>Résoudre des noms de domaines locaux</strong>, sans configurer de serveur DNS</li>
<li><strong>Annoncer et découvrir des services</strong>, sans serveur d&#8217;annuaire</li>
</ul>
<p>Aventurons-nous donc un peu dans le monde du «&nbsp;<em>zOMG ça marche tout seul !</em>&nbsp;»<br />
<!--more--></p>
<h3>Les protocoles dits &#8220;Zeroconf&#8221;</h3>
<p>Zeroconf n&#8217;est qu&#8217;une appellation générique de différents protocoles. Sa première implémentation est imputable à Apple, qui l&#8217;appela Rendezvous puis <strong>Bonjour</strong>. Ensuite Microsoft a plus ou moins imposé son équivalent, l&#8217;<acronym title="Universal Plug and Play">UPnP</acronym>.</p>
<p>Sous Linux nous profitons d&#8217;une implémentation des protocoles d&#8217;Apple, sous le nom de <strong>Avahi</strong>. Contrairement aux protocoles Microsoft, ceux de <strong>Bonjour et Avahi sont promulgués par l&#8217;<acronym title="Internet Engineering Task Force">IETF</acronym></strong>, l&#8217;organisme établissant les standards de l&#8217;Internet. Ils ne sont toutefois pas encore admis en tant que standards, la plupart n&#8217;étant décrits que dans des <acronym title="Request For Comments">RFC</acronym> informels.</p>
<h3>Installation</h3>
<p>Avahi apparait généralement dans les gestionnaires de paquets comme une multitude de paquets. Bien que déjà présente dans <strong>Ubuntu</strong>, on peut ajouter quelques packages utiles :<br />
<code>sudo apt-get install avahi-daemon avahi-discover avahi-utils avahi-ui-utils avahi-dnsconfd libnss-mdns service-discovery-applet mdns-scan</code></p>
<p>Sous Gentoo, c&#8217;est un peu plus délicat : il faut d&#8217;abord ajouter les USE flags <span class="font-family: monospace;"><strong>avahi</strong></span> et <span class="font-family: monospace;"><strong>zeroconf</strong></span> à votre <span class="font-family: monospace;">/etc/make.conf</span>, recompiler les packages nécessaire et installer <span class="font-family: monospace;"><strong>net-dns/avahi</strong></span> ainsi que <span class="font-family: monospace;"><strong>net-misc/mDNSResponder</strong></span>.</p>
<h3>IPv4LL : Création d&#8217;un réseau IP sans DHCP</h3>
<p>IPv4LL, pour Local-Link, fait partie de Zeroconf mais est la partie moins poétique, souvent à l&#8217;origine d&#8217;erreurs de configurations IP&#8230; Elle consiste en fait en une <a href="http://tools.ietf.org/html/rfc3927">norme RFC</a> proposant l&#8217;allocation dynamique des adresses IP de <strong>169.254.0.0 à 169.254.254.254</strong> (fe80::/16 en IPv6) sur les réseaux ne possédant pas de serveur DHCP. Il y a évidemment un test évitant que deux ordinateurs prennent la même IP.</p>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/07/connectivite-limitee-xp-6.png" alt="" title="connectivite-limitee-xp-6" width="338" height="130" class="alignright size-full wp-image-5348" />Ce n&#8217;est pas très propre et ces IP sont haïes de pas mal d&#8217;administrateurs. Remarquons toutefois que les dernières versions de NetworkManager implémentent un mode &#8220;Partagé avec d&#8217;autres ordinateurs&#8221; lors de la création d&#8217;un réseau Ad-Hoc, ce qui crée un vrai serveur DHCP.</p>
<h3>Résolution de noms locale</h3>
<p>Si Avahi est correctement installé, vous pouvez commencer à résoudre des noms automatiquement. Chaque machine s&#8217;attibue un nom de domaine sous la forme <span class="font-family: monospace;"><strong>HOSTNAME</strong>.local</span>. Par exemple, ma machine s&#8217;appelant epsilon :<br />
<code>tito@epsilon:~$ ping epsilon.local<br />
PING epsilon.local (10.0.73.18) 56(84) bytes of data.</code><br />
<strong>epsilon.local</strong> a bien été résolu par Avahi !</p>
<p>Cette magie est amenée par Multicast DNS, ou mDNS : chaque machine membre du réseau Zeroconf maintient en fait un petit serveur avec ses propres enregistrements DNS. Lorsqu&#8217;un membre du réseau fait une requête (multicast vers 224.0.0.251 ou ff02::fb, port UDP 5353), la machine se reconnaissant répond.</p>
<h3>Découverte de services</h3>
<p><a href="http://geekfault.org/wp-content/uploads/2010/07/Avahi-discover.png" title="Avahi-discover" rel="lightbox.5324"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/07/Avahi-discover-300x295.png" alt="" title="Avahi-discover" width="300" height="295" class="alignright size-medium wp-image-5335" /></a>Tous les serveurs supportant Zeroconf peuvent <strong>annoncer qu&#8217;ils fournissent un service</strong>. On pourra ainsi détecter automatiquement des partages de fichiers, des serveurs VNC, des serveurs SSH et bien d&#8217;autres.</p>
<p>Ce système est lui aussi basé sur un serveur mDNS, sous forme d&#8217;enregistrements de type SRV, TXT et PTR.</p>
<p>Pour lister les services disponibles sur le réseau Zeroconf il existe plusieurs outils, je citerai juste <strong>avahi-discover</strong> qui est simple et complet.</p>
<h3>Quelques applications bien cools de Zeroconf</h3>
<h4>XMPP décentralisé</h4>
<p><a href="http://geekfault.org/wp-content/uploads/2010/07/Pidgin.jpg" title="Pidgin" rel="lightbox.5324"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/07/Pidgin-150x150.jpg" alt="" title="Pidgin" width="150" height="150" class="alignleft size-thumbnail wp-image-5364" /></a>Intégrée dans quelques clients Jabber, dont Pidgin (libpurple) entre autres, la <a href="http://xmpp.org/extensions/xep-0174.html">norme XMPP <strong>XEP-0174</strong></a> définit les communications XMPP sans serveur. Dans Pidgin, une fois le protocole Bonjour activé, <strong>vous verrez de nouveaux contacts apparaître</strong> comme par magie dès qu&#8217;ils se connectent&nbsp;!</p>
<p>C&#8217;est très pratique pour discuter sans aucune configuration avec ses collègues, sa famille ou même des inconnus <strong>sur un réseau Ad-Hoc</strong> dans un train ^_^</p>
<h4 style="clear:both;">PulseAudio</h4>
<p>Malheureusement PulseAudio n&#8217;a pas de bonne interface pour le présenter, mais exploite très bien ZeroConf en détectant facilement les autres serveurs PulseAudio. Il m&#8217;arrive souvent de <strong>streamer l&#8217;audio de mon laptop vers mon desktop</strong> afin de profiter d&#8217;une meilleure qualité sonore. Tout ça bien entendu <strong>sans configuration</strong> ni reconfiguration en cas de changements sur mon réseau.</p>
<h4>Over VPN</h4>
<p><a href="http://geekfault.org/wp-content/uploads/2010/07/VPN.png" title="VPN" rel="lightbox.5324"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/07/VPN-300x212.png" alt="" title="VPN" width="150" height="106" class="alignright size-medium wp-image-5352" /></a>Si vous êtes connecté sur un VPN (au sens propre du terme, pas un VPN de tunneling tel qu&#8217;IPredator) <strong>Zeroconf y passera normalement sans accroc</strong> ! Après tout, un VPN c&#8217;est aussi un réseau local.</p>
<p>Couplé au XMPP décentralisé, c&#8217;est un super moyen de discuter avec ses collègues facilement, ainsi que toutes les autres applications auxquelles vous pouvez penser.</p>
<h3>En savoir plus&#8230;</h3>
<ul>
<li><a href="http://www.zeroconf.org/">ZeroConf.org</a></li>
<li><a href="http://www.multicastdns.org/">MultiCast DNS</a></li>
<li>«&nbsp;Zero Configuration Networking: The Definitive Guide&nbsp;» de Daniel H Steinberg et Stuart Cheshire, O&#8217;Reilly, Décembre 2005.</li>
</ul>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/' rel='bookmark' title='SSH sans mot de passe'>SSH sans mot de passe</a></li>
<li><a href='http://geekfault.org/2010/12/05/devenez-miroir-de-wikileaks-sans-risque/' rel='bookmark' title='Devenez miroir de Wikileaks sans risque (corrigé)'>Devenez miroir de Wikileaks sans risque (corrigé)</a></li>
<li><a href='http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/' rel='bookmark' title='Chromium, le Google Chrome sous Linux sans émulation'>Chromium, le Google Chrome sous Linux sans émulation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCompose → Enlarge your keymap</title>
		<link>http://geekfault.org/2010/07/07/xcompose-%e2%86%92-enlarge-your-keymap/</link>
		<comments>http://geekfault.org/2010/07/07/xcompose-%e2%86%92-enlarge-your-keymap/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 16:05:17 +0000</pubDate>
		<dc:creator>Lord</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[clavier]]></category>
		<category><![CDATA[keymap]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=4494</guid>
		<description><![CDATA[Vous avez désormais un clavier ergonomique et utilisez un layout adapté au français. Et si on ajoutait des caractères plus exotiques à votre clavier ou plutôt votre keymap ? On va donc utiliser une touche méconnue de votre clavier : Compose. La touche Compose est une touche morte de fonction. Elle ne produit rien en [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/03/27/keymap-linux-sous-windows/' rel='bookmark' title='Keymap Linux sous Windows'>Keymap Linux sous Windows</a></li>
<li><a href='http://geekfault.org/2010/05/09/choisir-son-keymap-x-org-1-8-sans-xorg-conf-ni-hack/' rel='bookmark' title='Choisir son keymap X.org 1.8 sans xorg.conf ni hack'>Choisir son keymap X.org 1.8 sans xorg.conf ni hack</a></li>
<li><a href='http://geekfault.org/2009/03/21/synergy/' rel='bookmark' title='Synergy'>Synergy</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Vous avez désormais <a href="http://geekfault.org/2009/05/16/review-clavier-typematrix-ez-reach-2030/">un clavier ergonomique</a> et utilisez <a href="http://www.bepo.fr">un layout adapté au français</a>. Et si on ajoutait des caractères plus exotiques à votre clavier ou plutôt votre keymap ? On va donc utiliser une touche méconnue de votre clavier : Compose.</p>
<p>La touche Compose est une touche morte de fonction. Elle ne produit rien en elle-même mais suivies d&#8217;autres touches classiques, elle prend effet. Il devient possible d&#8217;écrire du grec λ , des flêches ← , des symboles mathématiques ½ , d&#8217;écrire en ᵉˣᵖᵒˢᵃⁿᵗ , des symboles (in)utiles ♥ ☭ ☺ ™ … en fait vous pouvez écrire tout les caractères existants d&#8217;unicode, vous aurez juste besoin d&#8217;une suffisamment bonne mémoire pour vous souvenir des enchaînements de touches. Le plus fort, c&#8217;est vous qui définissez ces enchaînements.</p>
<p><!--more--></p>
<h3>Mais où est cette fichue touche ?</h3>
<p>Bien qu&#8217;une réponse de trois lettres s&#8217;impose d&#8217;elle même, elle se situe en fait où vous la définissez. Oui oui pour ça aussi vous avez le choix. La touche Windows est souvent déclarée comme telle mais j&#8217;ai préféré utiliser la touche Ctrl droite. En définissant la touche Windows, vous rendez inaccessible les raccourcis qui lui sont liés alors qu&#8217;avec Ctrl droit il vous reste toujours Ctrl gauche … Enfin vous avez compris, de toute façon vous êtes libres. Pour ce faire tout dépend de votre environnement :</p>
<ul>
<li><strong>Gnome :</strong> Dans les options du clavier, rendez-vous sur l&#8217;onglet « layout » puis cliquez sur <em>Options</em>. Vous pourrez alors y définir la touche de votre choix.</li>
<li><strong>Xorg nature :</strong> La manipulation est un peu plus longue mais pas compliquée :<br />
Premièrement il faut déterminer le keycode de la touche que vous souhaitez utiliser. Pour cela lancez <em>xev</em>. Cet utilitaire vous affichera le keycode des touches que vous pressez. Mémorisez ce keycode. Créez ensuite un fichier <code>~/.xmodmap</code> <code>keycode 105 = Multi_key</code>105 correspondant à Ctrl droit. Il ne reste plus qu&#8217;à lancer la commande <code>$ xmodmap ~/.xmodmap</code> pour que le changement soit effectif (commande à lancer au lancement de X).</li>
</ul>
<p>Le dernier obstacle avant de pouvoir utiliser votre Compose personnalisé est la méthode de saisie. Seule la méthode dite <em>xim</em> permet cette petite fantaisie. La plupart des applications permettent de changer ce paramètres en faisant un clic droit dans les zones de texte. Il est également possible de la mettre par défaut grâce à la commande <em>im-switch -c</em> et de choisir <em>xim-default</em>.</p>
<h3>Make it big !</h3>
<p>Bon la touche est prête à être dégainée. Il faut maintenant définir votre fichier XCompose. Ce fichier est spécifique à chaque utilisateur de votre système et se trouve là → <em>/home/$user/.XCompose</em> . Voilà sa syntaxe :<br />
<code><br />
<$touche1> <$touche2> <$touche3> : "$résutat" $num<br />
</code><br />
Vous pouvez mettre plusieurs touches d&#8217;affilées. Le résultat ou le numéro ou les deux doivent être présents. Le résultat est le caractère escompté.</p>
<p>Le numéro est celui défini dans la <a href="http://fr.wikipedia.org/wiki/Unicode#Jeu_de_caract.C3.A8res_cod.C3.A9s_.28Coded_Character_Set.29">norme CCS d&#8217;unicode</a>.</p>
<p>Par exemple si vous voulez faire une flèche vers la droite en appuyant sur compose puis la flèche droite de votre clavier.<br />
<code><Multi_key> <Right> : "→" U2192</code><br />
Et voilà le chemin est tout tracé. Bon parce que je sais que vous êtes flemmards (si si ça se voit, la moitié n&#8217;a pas lu jusqu&#8217;à la fin et ne regarde que les images), sachez qu&#8217;il est possible d&#8217;inclure un fichier externe afin de ne pas avoir à recopier le ficher pour chaque utilisateurs ou alors carrément de réutiliser le boulot du paqueteur de votre distrib :<br />
<code>include "/usr/share/X11/locale/en_US.UTF-8/Compose"</code><br />
Ce fichier compte de très nombreuses lignes pas toujours intéressantes, à survoler vite fait pour voir un paquet de combinaisons déjà existantes.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/03/27/keymap-linux-sous-windows/' rel='bookmark' title='Keymap Linux sous Windows'>Keymap Linux sous Windows</a></li>
<li><a href='http://geekfault.org/2010/05/09/choisir-son-keymap-x-org-1-8-sans-xorg-conf-ni-hack/' rel='bookmark' title='Choisir son keymap X.org 1.8 sans xorg.conf ni hack'>Choisir son keymap X.org 1.8 sans xorg.conf ni hack</a></li>
<li><a href='http://geekfault.org/2009/03/21/synergy/' rel='bookmark' title='Synergy'>Synergy</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/07/07/xcompose-%e2%86%92-enlarge-your-keymap/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Redshift, ne vous abimez plus les yeux la nuit</title>
		<link>http://geekfault.org/2010/06/30/redshift-ne-vous-abimez-plus-les-yeux-la-nuit/</link>
		<comments>http://geekfault.org/2010/06/30/redshift-ne-vous-abimez-plus-les-yeux-la-nuit/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 11:23:16 +0000</pubDate>
		<dc:creator>roidelapluie</dc:creator>
				<category><![CDATA[Geeklife]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[environnement]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[nuit]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[X]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5245</guid>
		<description><![CDATA[Ne vous est-il jamais arrivé de passer des nuits ou des soirées devant votre pc? C&#8217;est une question rhétorique, bien sûr! Je vais vous présenter un logiciel libre qui pourrait améliorer sensiblement votre expérience nocturne. Ce logiciel s&#8217;appelle Redshift. Comme l&#8217;indique son site officiel, Redshift ajuste la température des couleurs de votre écran en fonction [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/03/21/minimeter-votre-quota-de-telechargement-en-permanence-sous-les-yeux/' rel='bookmark' title='Minimeter : votre quota de téléchargement en permanence sous les yeux'>Minimeter : votre quota de téléchargement en permanence sous les yeux</a></li>
<li><a href='http://geekfault.org/2009/03/28/ubuntu-jaunty-jackalope-9-04/' rel='bookmark' title='On a testé pour vous : Ubuntu Jaunty Jackalope 9.04'>On a testé pour vous : Ubuntu Jaunty Jackalope 9.04</a></li>
<li><a href='http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/' rel='bookmark' title='Libérez votre esprit avec Freemind'>Libérez votre esprit avec Freemind</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/06/30/redshift-ne-vous-abimez-plus-les-yeux-la-nuit/redshift-icon-128/" rel="attachment wp-att-5261"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/06/redshift-icon-128.png" alt="Icone de redshift" title="Redshift icon" width="128" height="128" class="alignright size-full wp-image-5261" /></a> Ne vous est-il jamais arrivé de passer des nuits ou des soirées devant votre pc? C&#8217;est une question rhétorique, bien sûr! Je vais vous présenter un logiciel libre qui pourrait améliorer sensiblement votre <strong>expérience nocturne</strong>.</p>
<p>Ce logiciel s&#8217;appelle <strong>Redshift</strong>.<br />
Comme l&#8217;indique son <a href="http://jonls.dk/redshift/">site officiel</a>, Redshift ajuste la température des couleurs de votre écran en fonction de votre environnement, et plus précisément de la position du soleil. Ce qui permettra d&#8217;avoir un écran blanc en journée, un écran orangé en soirée et un écran rougeâtre en pleine nuit. L&#8217;idéal étant que votre écran aie la même chaleur que la lampe de votre cave^Wchambre.<br />
<!--more--></p>
<h3>Paint it red</h3>
<p>Si vous vous demandez à quoi diable peut bien servir d&#8217;avoir un écran rougeâtre dans l&#8217;obscurité, sachez que dans de nombreux domaines, y compris l&#8217;aéronautique, les instruments sont faits de façon à être rétro-éclairés dans une teinte rouge la nuit.<br />
En effet, cette couleur, dans le bas de notre spectre visible est <strong>moins agressive</strong> à l&#8217;œil dans un environnement sombre.</p>
<p>De plus, non seulement l&#8217;éclat pâle de votre écran dans l&#8217;obscurité peut vous fatiguer la vue, mais des études ont démontré qu&#8217;il tenait éveillé, et provoquais des <strong>difficultés à trouver le sommeil</strong>.<br />
<br />Pour vos yeux, et pour votre productivité, <strong>aimez le rouge</strong> !</p>
<h3>Utilisation</h3>
<p>Afin de commencer à l&#8217;utiliser, entrez dans une console:</p>
<p><code>$ redshift -l 48.8:2.32</code></p>
<p>48.8:2.32 représente vos coordonnées (latitude et longitude). Si vous utilisez gnome, redshift pourra trouver votre position si vous l&#8217;avez encodée dans l&#8217;applet horloge. Il est également possible de passer une option -t afin e définir les différentes températures (jour:nuit). Exemple:</p>
<p><code>$ redshift -l 48.8:2.32 -t 5500:4500</code></p>
<p>Enfin, sachez qu&#8217;en envoyant le signal USR1 à redshift, on le désactive et réactive temporairement.</p>
<p><code>$ killall -USR1 redshift</code></p>
<p>Je vous renvoie à vos tests et au <a href="http://jonls.dk/redshift/">site officiel</a> afin de découvrir d&#8217;autres options et des explications plus poussées. </p>
<h3>installation</h3>
<p>Redshift est packagé dans les principales distributions, pour l&#8217;installer sous <strong>ubuntu</strong> :<br />
<code>$ sudo add-apt-repository ppa:jonls/redshift-ppa<br />
$ sudo apt-get update &#038;&#038; sudo apt-get install redshift</code><br />
sous <strong>gentoo</strong> :<br />
<code># emerge x11-misc/redshift</code><br />
sous <strong>exherbo</strong> :<br />
<code># cave resolve -x repository/roidelapluie<br />
# cave resolve -x x11-apps/redshift</code></p>
<p>Il peut être utilisé avec son interface iconifiée gtk minimaliste en apposant le préfixe &#8220;gtk-&#8221; à la commande redshift :<br />
<code>$ gtk-redshift -l 48.8:2.32 -t 5500:4500</code></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/03/21/minimeter-votre-quota-de-telechargement-en-permanence-sous-les-yeux/' rel='bookmark' title='Minimeter : votre quota de téléchargement en permanence sous les yeux'>Minimeter : votre quota de téléchargement en permanence sous les yeux</a></li>
<li><a href='http://geekfault.org/2009/03/28/ubuntu-jaunty-jackalope-9-04/' rel='bookmark' title='On a testé pour vous : Ubuntu Jaunty Jackalope 9.04'>On a testé pour vous : Ubuntu Jaunty Jackalope 9.04</a></li>
<li><a href='http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/' rel='bookmark' title='Libérez votre esprit avec Freemind'>Libérez votre esprit avec Freemind</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/06/30/redshift-ne-vous-abimez-plus-les-yeux-la-nuit/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>L&#8217;arche des mascottes du Libre</title>
		<link>http://geekfault.org/2010/06/13/larche-des-mascotes-du-libre/</link>
		<comments>http://geekfault.org/2010/06/13/larche-des-mascotes-du-libre/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 10:04:54 +0000</pubDate>
		<dc:creator>madx</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[animaux]]></category>
		<category><![CDATA[logos]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2622</guid>
		<description><![CDATA[Dans le monde du Logiciel Libre, on aime bien les animaux, ils sont partout ! C&#8217;est bien simple, on se croirait à un safari photo au Kenya.Vous vous êtes surement demandé un jour : &#8220;Pourquoi un dromadaire pour Perl ?&#8221; ou encore &#8220;C&#8217;est quoi ce poisson bizarre pour OpenBSD ?&#8220;. Autant de questions, et bien [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2009/08/19/echinus-wm/' rel='bookmark' title='Echinus, un WM, simplement.'>Echinus, un WM, simplement.</a></li>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction--></p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/teaser_animals.jpg" alt="Animaux" />Dans le monde du <strong>Logiciel Libre</strong>, on aime bien les <strong>animaux</strong>, ils sont partout ! C&#8217;est bien simple, on se croirait à un <strong>safari photo au Kenya</strong>.<br />Vous vous êtes surement demandé un jour : &#8220;<strong>Pourquoi un dromadaire pour Perl ?</strong>&#8221; ou encore &#8220;<strong>C&#8217;est quoi ce poisson bizarre pour OpenBSD ?</strong>&#8220;. Autant de questions, et bien d&#8217;autres encore que vous ne vous êtes même pas posées, auxquelles vous aurez la réponse dans cet article !<br /><!--more-->Cet article est relativement long (il y a <strong>beaucoup d&#8217;animaux</strong>) mais la bonne nouvelle c&#8217;est que vous pouvez le lire par n&#8217;importe quel bout donc n&#8217;hésitez pas à aller directement dans la section qui vous intéresse.</p>
<p><!--nextpage--></p>
<p><!--pagetitle:Programmation--></p>
<h3>
<p style="text-align: center"><a href="http://www.perl.org"><img style="vertical-align: middle" src="/wp-content/uploads/2010/05/perl_100.png" alt="Perl Camel" /></a>Perl &#8211; Le Dromadaire</p>
</h3>
<p><a href="/wp-content/uploads/2010/03/perl-book-cover.jpg" title="Couverture du livre Programming Perl" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/04/perl_cover_mini.png" alt="Perl book cover" title="Couverture du livre Programming Perl"/></a>Le dromadaire vient de la couverture du livre <a href="http://oreilly.com/catalog/9780596000271"><em>Programming Perl</em></a> écrit, entre autre, par Larry Wall himself (le créateur de Perl) et publié en 1991 par O&#8217;Reilly.</p>
<p>Il faut savoir qu&#8217;O'reilly a l&#8217;étrange coutume de mettre des dessins d&#8217;animaux, assez moches, sur les couvertures de ses livres et il se trouve que pour cet ouvrage en particulier, c&#8217;est un dromadaire qui a été choisi.<br />
Cela aurait pu être pire, on aurait pu avoir un serpent ou une connerie comme ça &#8230;</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/03/perl-onion.png" alt="Perl Onion" />A noter que ce n&#8217;est pas le logo <em>officiel</em> de Perl, celui-ci étant l&#8217;oignon, probablement pour sa propension à faire pleurer ceux qui s&#8217;y attaquent, à moins que ce ne soit sa structure qui rappelle la capacité de Perl à pouvoir emboiter les instructions comme des poupées russes jusqu&#8217;à ce que tout le programme tienne sur une seule ligne.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : the Perl Camel</td>
<td style="text-align: right"><strong>Apparition</strong> : 1991</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design</strong> : -</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.php.net"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/05/php_100.png" alt="PHP éléphant" /></a>PHP &#8211; L&#8217;Éléphant</p>
</h3>
<p>On doit l&#8217;éléphant à un français : Vincent Pontier, qui eu l&#8217;idée en 1998 (le 15 novembre pour être précis) à force de regarder les lettres PHP. Surement sous l&#8217;effet de la drogue, il trouvait que les lettres PHP ressemblaient à un éléphant.<img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   class="aligncenter" src="/wp-content/uploads/2010/06/php_to_elephant_100.png" alt="PHP vers éléphant" /></p>
<p>Il a aussi fait un petit film narrant cette invention majeure du XXieme siècle : <a href="http://www.elroubio.net/naissance_elephpant.php">ici en flash proprio caca</a> et ci-dessous en html5 libre de winner : <video class="aligncenter" src="/wp-content/uploads/2010/03/php-video_origin1.ogg" controls></video>
</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VF/VO)</strong> : l&#8217;éléPHPant / the elePHPant</td>
<td style="text-align: right"><strong>Apparition</strong> : 1998</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design</strong> :  Vincent Pontier</td>
</tr>
</tbody>
</table>
<h3>En bref</h3>
<table style="text-align: center">
<tr>
<td><a href="http://www.python.org"><img src="/wp-content/uploads/2010/05/python_80.png" alt="Python" /></a></td>
<td>
<h4>Python &#8211; Les Pythons</h4>
<p>Ça vous en bouche un coin tant d&#8217;originalité hein !<br />Quoi &#8220;non&#8221; ?<br />Plus sérieusement le nom, et par extension la mascotte, viens des Monty <em>Python</em>. </p>
</td>
</tr>
<tr>
<td><a href="http://golang.org"><img src="/wp-content/uploads/2010/05/go_80.png" alt="Google Go" /></a></td>
<td>
<h4>Google Go &#8211; La Marmotte</h4>
<p>Gordon, la (ridicule) mascotte du langage Go de Google.<br />Ça ne se voit probablement pas, mais c&#8217;est bien une marmotte (<em>go</em>pher en anglais).</p>
</td>
</tr>
<tr>
<td><a href="http://llvm.org"><img src="/wp-content/uploads/2010/06/llvm_80.png" alt="LLVM" /></a></td>
<td>
<h4>LLVM &#8211; La Wyverne</h4>
<p>La <a href="http://fr.wikipedia.org/wiki/Wyvern">wyverne</a>, cousin du dragon a été choisi pour les caractéristiques de dernier : puissance, rapidité &#8230; et sa présence sur la couverture d&#8217;un <a href="http://en.wikipedia.org/wiki/Dragon_Book_%28computer_science%29">livre sur les compilateurs</a>.</p>
</td>
</tr>
<tr>
<td><a href="http://www.mono-project.com"><img src="/wp-content/uploads/2010/05/mono_80.png" alt="Mono" /></a></td>
<td>
<h4>Mono &#8211; Le Singe</h4>
<p>Mono veut tout simplement dire singe en espagnol.</p>
</td>
</tr>
</table>
<p><!--nextpage--></p>
<p><!--pagetitle:Bases de données--></p>
<h3>
<p style="text-align: center"><a href="http://www.postgresql.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/05/postgresql_100.png" alt="PostegreSQL Elephant" /></a>PostgreSQL &#8211; L&#8217;Éléphant</p>
</h3>
<p>Encore un éléphant, bien que celui-ci soit légèrement plus ancien que celui de PHP. Il a été introduit en 1997 au moment où Postgres95 a intégré les commandes SQL et est devenu PostgreSQL.</p>
<p>Il fait référence au titre d&#8217;un <a href="http://fr.wikipedia.org/wiki/Elephants_Can_Remember">livre d&#8217;Agatha Christie</a> qui lui-même viens d&#8217;une propriété bien connue des éléphants et très pratique pour une base de données : ils n&#8217;oublient jamais.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/05/postgresql_old_80.png" alt="PostgreSQL turtle" />Petit détail amusant : au Japon c&#8217;est une tortue qui sert de logo. Apparemment là-bas des masques d&#8217;éléphants étaient portés lors de cérémonies par les adaptes de la secte qui a fait l&#8217;<a href="http://fr.wikipedia.org/wiki/Attentat_au_gaz_sarin_dans_le_m%C3%A9tro_de_T%C5%8Dky%C5%8D">attentat au gaz sarin dans le métro de Tokyo</a> en 1995.<br />Le JPUG (Japan Postgresql Users Group) a donc choisi de remplacer la tête d&#8217;éléphant par le logo original de Postgres quand il n&#8217;était encore qu&#8217;un projet de  l&#8217;Université de Berkeley : une tortue.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : Blue Elephant Head (BEH)</td>
<td style="text-align: right"><strong>Apparition</strong> : 1997</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Slonik</td>
<td style="text-align: right"><strong>Design</strong> : -</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.mysql.com"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/05/mysql_100.png" alt="MySQL Dolphin" /></a>MySQL &#8211; Le Dauphin</p>
</h3>
<p>Le dauphin MySQL, cette feignasse, est arrivé sur le tard en 2001, soit 6 ans après la création de MySQL (1995).<br />
Il a été <a href="http://www.mysql.com/news-and-events/generate-article.php?id=77">choisi</a> par Michael &#8220;Monty&#8221; Widenius, un des deux fondateurs de MySQL, car il trouvait que le dauphin, avec sa rapidité, sa puissance, sa précision et sa gentillesse représentait bien MySQL.</p>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/05/mysql_pink_50.png" alt="MySQL Dolphin Pink" />Il y eut ensuite en 2002 un <a href="http://www.mysql.com/news-and-events/generate-article.php?id=116">concours</a> pour lui trouver un nom et c&#8217;est Sakila qui a été retenu. Sakila est un prénom africain mais c&#8217;est aussi un prénom féminin ce qui fait donc de notre dauphin une dauphine.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/05/mysql_old_80.png" alt="MySQL old logo" />Pour votre culture, le dauphin a remplacé l&#8217;ancien logo MySQL qui était tout de même assez immonde comme vous pouvez le constater.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : the MySQL Dolphin</td>
<td style="text-align: right"><strong>Apparition</strong> : 2001</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Sakila</td>
<td style="text-align: right"><strong>Design</strong> : Renne Angelvuo</td>
</tr>
</tbody>
</table>
<h3>En bref</h3>
<table style="text-align: center">
<tr>
<td><a href="http://www.firebirdsql.org"><img src="/wp-content/uploads/2010/05/firebird_80.png" alt="Logo Firebird" /></a></td>
<td>
<h4>Firebird &#8211; Le Phœnix</h4>
<p>Cette base de données a connu son heure de gloire quand Mozilla voulu utiliser ce nom pour ce qui s&#8217;appellera finalement Firefox.</p>
</td>
</tr>
<tr>
<td><a href="http://askmonty.org/wiki/MariaDB"><img src="/wp-content/uploads/2010/05/mariadb_80.png" alt="Logo MariaDB" /></a></td>
<td>
<h4>MariaDB &#8211; Le Phoque</h4>
<p>Un fork de MySQL par Michael &#8220;Monty&#8221; Widenius (encore lui).<br />Comme la mascotte de MySQL était un dauphin, ils ont décidé de rester dans les mammifères marins et de prendre un phoque.</p>
</td>
</tr>
</table>
<p><!--nextpage--></p>
<p><!--pagetitle:OS/kernels--></p>
<h3>
<p style="text-align: center"><a href="http://kernel.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/05/linux_100.png" alt="Tux" /></a>Linux &#8211; Le Pingouin</p>
</h3>
<p>Le fameux pingouin (techniquement un <a href="http://fr.wikipedia.org/wiki/Manchot">manchot</a> mais bon) a été <a href="http://lkml.indiana.edu/hypermail/linux/kernel/9605/0855.html">inventé</a> par Linus Torvalds himself sur une <a href="http://lkml.indiana.edu/hypermail/linux/kernel/9605/0237.html">idée originale</a> d&#8217;Alan Cox himself et dessiné par Larry Ewing (pas <em>himself</em> parce que personne ne le connait) avec la première version publique de Gimp &#8230; itself.</p>
<p><a href="/wp-content/uploads/2010/05/tux_tuxedo.jpg" title="Pingouin en Smoking" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/05/tux_tuxedo_80.png" alt="Pingouin en Smoking" title="Pingouin en Smoking" /></a>Le nom <em>Tux</em> viens d&#8217;un certain James Hughes sur la LKML (Linux Kernel Mailing List) pour qui cela serait l&#8217;acronyme de <strong>T</strong>orvalds <strong>U</strong>ni<strong>X</strong>.<br />En vérité il a surement choisi ce nom car c&#8217;est comme cela qu&#8217;on appelle familièrement les smokings en anglais (<em>Tux</em>edo) et que ces derniers ont les mêmes couleurs que les pingouins.</p>
<p><a href="/wp-content/uploads/2010/04/ccpenguin.jpg" title="Inspiration que Linus donna pour les dessinateurs" rel="lightbox.2622"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/05/tux_inspiration_100.png" alt="Inspiration de Linus" title="Inspiration que Linus donna pour les dessinateurs"/></a><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/05/tuz_100.png" alt="Tuz le diable de Tasmanie" />Bonus : à gauche l&#8217;image que Linus a donné comme inspiration pour les dessinateurs. À droite Tuz, le diable de Tasmanie, qui remplaça temporairement Tux pour le kernel 2.6.29, afin de rappeler que le diable de Tasmanie pourrais bientôt rejoindre les dodos.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : The Linux Penguin</td>
<td style="text-align: right"><strong>Apparition</strong> : 1996</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Tux</td>
<td style="text-align: right"><strong>Design</strong> :  Larry Ewing</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.gnu.org"><img class="alignnone size-full" style="vertical-align: middle" src="/wp-content/uploads/2010/05/gnu_100.png" alt="GNU Head" /></a>GNU &#8211; Le Gnou</p>
</h3>
<p>Le gnou est la mascotte GNU pour une raison assez évidente, mais ce qui l&#8217;est moins c&#8217;est la raison pour laquelle <a href="http://fr.wikipedia.org/wiki/Richard_Stallman">Richard M. Stallman</a> (RMS pour les intimes) a choisi cet animal.<br />Cela viendrais d&#8217;une <a href="http://en.wikipedia.org/wiki/The_Gnu">obscure chanson comique</a>, mais sachant que le même Stallman a appelé son éditeur <em>emacs</em> car il voulait pouvoir le lancer juste en tapant son initiale et que <em>E</em> était libre à l&#8217;époque&#8230; il ne faut pas chercher trop loin.</p>
<p>Dans la plus pure tradition de l&#8217;esprit GNU, le logo a été successivement modifié par plusieurs dessinateurs, chacun apportant quelques améliorations.</p>
<table style="width: 100%;text-align:center">
<caption>Évolution du logo GNU</caption>
<tr>
<td><a href="/wp-content/uploads/2010/05/gnu-1_266.png" title="Logo original par Etienne Suvasa" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/gnu-1_120.png" alt="Logo original par Etienne Suvasa" title="Logo original par Etienne Suvasa"/></a></td>
<td><a href="/wp-content/uploads/2010/05/gnu-2_266.png" title="Modification de Peter Gerwinski (meilleure résolution)" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/gnu-2_120.png" alt="Modification de Peter Gerwinski" title="Modification de Peter Gerwinski (meilleure résolution)" /></a></td>
<td><a href="/wp-content/uploads/2010/05/gnu-3_266.png" title="Modification d'Aurélio A. Heckert (simplification)" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/gnu-3_120.png" alt="Modification d'Aurélio A. Heckert" title="Modification d'Aurélio A. Heckert (simplification)"/></a></td>
</tr>
<tr>
<td>Original<br />(Etienne Suvasa)</td>
<td>Meilleure définition<br />(Peter Gerwinski)</td>
<td>Simplification<br />(Aurélio A. Heckert)</td>
</tr>
</table>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : The GNU Head</td>
<td style="text-align: right"><strong>Apparition</strong> : 198?</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design original</strong> :  Etienne Suvasa</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.freebsd.org"><img class="alignnone size-full" style="vertical-align: middle" src="/wp-content/uploads/2010/05/bsd_100.png" alt="BSD Daemon" /></a>*BSD &#8211; Le Daemon</p>
</h3>
<p>Le daemon BSD n&#8217;est pas vraiment un animal mais avec ses cornes et sa queue on dira que c&#8217;est un cousin éloigné de la vache. Pour info daemon != démon, même si le daemon BSD y ressemble bigrement. Un daemon est plutôt comme un <em>esprit</em> ou un <em>génie</em> et n&#8217;est pas nécessairement du coté obscur de la force.</p>
<p><a href="/wp-content/uploads/2010/05/4daemons.jpg" title="Poster contenant la première apparition du daemon BSD" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/05/4daemons_100.png" alt="4 BSD Daemons" title="Poster contenant la première apparition du daemon BSD" /></a>Tout débute en 1976 avec un dev BSD qui travaille comme serrurier et qui se retrouve en train de forcer un coffre fort chez un artiste, oui ça commence bizarrement. Le dev (Mike O&#8217;Brien) parle à l&#8217;artiste (<a href="http://fr.wikipedia.org/wiki/Phil_Foglio">Phil Foglio</a>) des <a href="http://en.wikipedia.org/wiki/Daemon_%28computer_software%29">daemons</a> unix, des <a href="http://en.wikipedia.org/wiki/Pipeline_%28Unix%29">pipes</a> et des <a href="http://en.wikipedia.org/wiki/Fork_%28operating_system%29">forks</a> et l&#8217;artiste fait une image avec quatre daemons ressemblant à des démons tenant chacun un trident (<em>fork</em> veut dire <em>fourchette</em>, qui n&#8217;est jamais qu&#8217;un mini-trident) et jouant sur des tuyaux (pipes) devant un <a href="http://fr.wikipedia.org/wiki/PDP-11">PDP-11</a>.<br />L&#8217;image originale a été perdue depuis, ne restent que des photos des T-Shirts sur lesquels elle a été imprimée.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/05/freebsd_80.png" alt="FreeBSD logo" />
<p>Plus tard, en 1988, <a href="http://fr.wikipedia.org/wiki/John_Lasse">John Lasseter</a> dessinera la version la plus connue du daemon, celle avec les chaussures de sport (voir en haut), qui sera la mascotte de FreeBSD de longues années avant d&#8217;être remplacée par un logo abstrait (voir à gauche).<br />Le nom du daemon est Beastie, non pas en hommage aux <a href="http://fr.wikipedia.org/wiki/Beastie_Boys">Beastie Boys</a>, mais à la prononciation de <em>BSD</em> quand on est bourré (bi-hès-di → alcool → beastie).</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/05/openbsd_old_80.png" alt="Old OpenBSD logo" /><a href="/wp-content/uploads/2010/05/netbsd_old.jpg" title="Ancien logo NetBSD" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/05/netbsd_old_80.png" alt="Old NetBSD logo" title="Ancien logo NetBSD" /></a>Le daemon BSD se retrouvera par la suite dans le logo d&#8217;OpenBSD, avec un halo, ainsi que dans le logo de NetBSD, avec trois potes à lui et un drapeau en train de répliquer une <a href="http://fr.wikipedia.org/wiki/Raising_the_Flag_on_Iwo_Jima">célèbre photo</a>, nus.</p>
<p></p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : The BSD Daemon</td>
<td style="text-align: right"><strong>Apparition</strong> : 1976</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Beastie</td>
<td style="text-align: right"><strong>Design</strong> : -</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.openbsd.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/05/openbsd_100.png" alt="Puffy" /></a>OpenBSD &#8211; Le Poisson-hérisson</p>
</h3>
<p>Puffy est arrivé en même temps que l&#8217;algorithme Blowfish pour OpenSSH, comme pour Tux il y a une petite confusion entre le <a href="http://fr.wikipedia.org/wiki/Tetraodontidae">poisson-ballon</a> (blowfish) qui n&#8217;a pas d&#8217;épines et son cousin le <a href="http://fr.wikipedia.org/wiki/Diodon">poisson-hérisson</a> (porcupinefish) qui lui en a. Un autre nom du blowfish est pufferfish, d&#8217;où le nom Puffy.</p>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/05/openbsd_3heads_100.png" alt="OpenBSD Head" />Puffy est venu remplacer un daemon bsd classique (avec un halo), mais il est en fait le logo de plusieurs projets : OpenSSH, OpenNTPD, OpenBGPD, OpenCVS &#8230; et OpenBSD bien sûr.<br />Il apparait aussi dans de <a href="http://www.openbsd.org/older.html">nombreux posters</a> (et <a href="http://www.openbsd.org/lyrics.html" >fresques</a>), notamment à chaque nouvelle release d&#8217;OpenBSD (accompagné d&#8217;une chanson d&#8217;ailleurs).</p>
<table style="width: 100%;text-align:center">
<caption>Logos des projets OpenBSD (cliquez pour voir le logo en entier)</caption>
<tr>
<td><a href="/wp-content/uploads/2010/05/openssh.png" title="OpenSSH" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/openssh_120.png" alt="OpenSSH" title="OpenSSH" /></a></td>
<td><a href="/wp-content/uploads/2010/05/openbgpd.png" title="OpenBGPD" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/openbgpd_120.png" alt="OpenBGPD" title="OpenBGPD" /></a></td>
<td><a href="/wp-content/uploads/2010/05/openntpd.jpg" title="OpenNTPD" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/openntpd_120.png" alt="OpenNTPD" title="OpenNTPD" /></a></td>
</tr>
<tr>
<td>OpenSSH</td>
<td>OpenBGPD</td>
<td>OpenNTPD</td>
</tr>
<tr>
<td colspan="2"><a href="/wp-content/uploads/2010/05/opencvs.png" title="OpenCVS" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/opencvs_120.png" alt="OpenCVS" title="OpenCVS" /></a></td>
<td><a href="/wp-content/uploads/2010/05/openbsd47.jpg" title="OpenBSD 4.7" rel="lightbox.2622"><img src="/wp-content/uploads/2010/05/openbsd47_120.png" alt="OpenBSD 4.7" title="OpenBSD 4.7" /></a></td>
</tr>
<tr>
<td colspan="2">OpenCVS</td>
<td>OpenBSD 4.7</td>
</tr>
</table>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : 1999</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Puffy</td>
<td style="text-align: right"><strong>Design</strong> : -</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.gentoo.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/gentoo_100.png" alt="Gentoo" /></a>Gentoo &#8211; La Vache</p>
</h3>
<p>Un voile de mystère entoure l&#8217;origine de Larry la Vache (Larry the Cow), il <a href="http://www.realgeek.com/forums/gentoo-dev-heritage-440275-2.html">aurait</a> été &#8220;inventé&#8221; par <a href="http://fr.wikipedia.org/wiki/Daniel_Robbins">Daniel Robbins</a>, le créateur de Gentoo, un peu par hasard.</p>
<p><a href="/wp-content/uploads/2010/06/gentoo_poster.jpg" title="Poster Gentoo où apparait Larry the Cow" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/gentoo_poster_100.png" alt="Poster Gentoo" title="Poster Gentoo où apparait Larry the Cow" /></a>En fait l&#8217;image de la tête de vache viens d&#8217;une <a href="http://www.fonthead.com/fonts/Font-Heads">obscure font</a> et est bizarrement assignée à la lettre S.<br/>Daniel aurait utilisé cette image pour un poster ventant les mérites de Gentoo dans lequel le nom de la mascotte apparait.</p>
<p>Depuis il y a eu de nombreux débat sur le sexe réel de Larry, est-ce une vache, un taureau, un transsexuel ? Il y a même un <a href="http://bugs.gentoo.org/show_bug.cgi?id=27727">bug</a> pour cela sur bugs.gentoo.org. Il s&#8217;agirait en fait d&#8217;un taureau, &#8220;Cow&#8221; ne faisant référence qu&#8217;à son espèce.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : -</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Larry the Cow</td>
<td style="text-align: right"><strong>Design</strong> : The Fonthead Design Inc.</td>
</tr>
</tbody>
</table>
<h3>En bref</h3>
<table style="text-align: center">
<tr>
<td><a href="http://developer.apple.com/opensource/"><img src="/wp-content/uploads/2010/05/darwin_80.png" alt="Logo Darwin" /></a></td>
<td>
<h4>Darwin &#8211; L&#8217;ornithorynque</h4>
<p>Hexley la mascotte du cœur open source de Mac OS X a été choisi lors d&#8217;un concours en 2000, il porte un casque et un trident pour rappeler ses origines bsdiènes. Son nom aurait dû être H<em>u</em>xley, d&#8217;apres <a href="http://fr.wikipedia.org/wiki/Thomas_Henry_Huxley">un biologiste</a> fan de <a href="http://fr.wikipedia.org/wiki/Charles_Darwin">Charles Darwin</a>, mais l&#8217;erreur a été découverte trop tard et Hexley est resté.</p>
</td>
</tr>
<tr>
<td><a href="http://www.opensuse.org"><img src="/wp-content/uploads/2010/05/suse_80.png" alt="Logo SUSE" /></a></td>
<td>
<h4>SUSE &#8211; Le Caméléon</h4>
<p>Suite à un concours, la mascotte, un <a href="http://fr.wikipedia.org/wiki/Chamaeleo_calyptratus">caméléon casqué</a>, fut surnommée Geeko, un mix de Geek et Gecko (lézard en anglais).</p>
</td>
</tr>
<tr>
<td><a href="http://www.dragonflybsd.org"><img src="/wp-content/uploads/2010/05/dragonflybsd_80.png" alt="Logo DragonFlyBSD" /></a></td>
<td>
<h4>DragonFlyBSD &#8211; La libellule</h4>
<p>Lorsque <a href="http://en.wikipedia.org/wiki/Matthew_Dillon_%28computer_scientist%29">Matthew Dillon</a>, créateur de l&#8217;OS, cherchais un nom pour celui-ci, une libellule (dragonfly) se posa dans son jardin.<br />Le nom de la mascotte est Fred.</p>
</td>
</tr>
<tr>
<td><a href="http://plan9.bell-labs.com/plan9"><img src="/wp-content/uploads/2010/05/plan9_80.png" alt="Logo Plan9" /></a></td>
<td>
<h4>Plan 9 &#8211; Le Lapin</h4>
<p><a href="http://fr.wikipedia.org/wiki/Ed_Wood">Ed Wood</a>, déjà coupable de <a href="http://fr.wikipedia.org/wiki/Plan_9_from_Outer_Space">Plan 9 From Outer Space</a> qui a donné son nom à l&#8217;OS, est aussi responsable, avec <a href="http://fr.wikipedia.org/wiki/Glen_or_Glenda%3F">Glen or Glenda</a>, du nom de la lapine : Glenda.<br />Cette mascotte et celle de Google Go ont été dessinées par la femme de <a href="http://fr.wikipedia.org/wiki/Rob_Pike">Rob Pike</a> qui a travaillé sur les deux projets.</p>
</td>
</tr>
<tr>
<td><a href="http://www.minix3.org"><img src="/wp-content/uploads/2010/05/minix_80.png" alt="Logo Minix" /></a></td>
<td>
<h4>Minix &#8211; Le Raton-Laveur</h4>
<p>L&#8217;OS d&#8217;<a href="http://fr.wikipedia.org/wiki/Tanenbaum">Andy Tanenbaum</a> a pour mascotte un raton-laveur, car comme vous le savez tous (faites semblant), c&#8217;est un animal qui mange des insectes (bugs).</p>
</td>
</tr>
<tr>
<td><a href="http://www.freedos.org"><img src="/wp-content/uploads/2010/05/freedos_80.png" alt="Logo FreeDOS" /></a></td>
<td>
<h4>FreeDOS &#8211; Le Poisson</h4>
<p>D&#8217;espèce indéterminée le poisson de FreeDOS est arrivé un peu par hasard lorsque les devs cherchaient une mascotte pour leur projet. Un des devs voulais un lémurien, mais il était bien le seul, puis quelqu&#8217;un a parlé de poisson et Blinky est né.</p>
</td>
</tr>
</table>
<p><!--nextpage--></p>
<p><!--pagetitle:Web/Mails/IM--></p>
<h3>
<p style="text-align: center"><a href="http://www.firefox.com"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/firefox_100.png" alt="Firefox" /></a>Firefox &#8211; Le Renard Roux</p>
</h3>
<p>Au premier abord, en voyant le logo, on se dit que c&#8217;est un <a href="http://fr.wikipedia.org/wiki/Renard_roux">renard</a>, et puis inévitablement un petit malin vous dis que c&#8217;est en fait un <a href="http://fr.wikipedia.org/wiki/Panda_roux">panda roux</a>, car c&#8217;est ce que le mot <em>firefox</em> désigne en anglais.<br/>Et bien pas du tout, c&#8217;est bien un renard et ça vous apprendra à écouter les petits malins. En effet les designers du logo trouvaient que le panda roux, ça faisais <a href="http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox#Branding_and_visual_identity">pas assez &#8220;cool&#8221;</a>, et du coup, rusés comme ils sont, ils ont pris un <em>fox</em> classique.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/firefox_phoenix_80.png" alt="Logo original" />Mais le renard n&#8217;est pas la mascotte de base du projet, car firefox a changé plusieurs fois de nom.<br/>À sa création il s&#8217;appelait <em>Phoenix</em> et avait une mascotte correspondante (cf à gauche), mais ce nom était déjà utilisé par une <a href="http://fr.wikipedia.org/wiki/Phoenix_Technologies">boite qui fait des BIOS</a>. Il fut alors renommé <em>Firebird</em>, qui est juste un autre nom du phénix, mais là encore, déjà <a href="http://fr.wikipedia.org/wiki/Firebird_%28SGBDR%29">utilisé</a>. Il prit alors son nom final : <em>Firefox</em>, et le logo que l&#8217;on connait aujourd&#8217;hui. Ouf !</p>
<p><a href="http://wiki.debian.org/Iceweasel"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/iceweasel_80.png" alt="Iceweasel (Debian)" /></a><a href="http://www.gnu.org/software/gnuzilla"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/icecat_80.png" alt="Icecat (GNU)" /></a>Mozilla se réservant le droit de distribuer FIrefox sous ce nom et avec ce logo, des noms et logos alternatifs, libres, sont apparus pour palier à ce problème. À gauche Iceweasel (belette de glace) de debian, à droite Icecat (chat de glace) de GNU.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : 2004</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design</strong> : Daniel Burka/Stephen Desroches/Jon Hicks</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.mozilla.org/projects/thunderbird"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/thunderbird_100.png" alt="Thunderbird" /></a>Thunderbird &#8211; L&#8217;Oiseau-tonnerre</p>
</h3>
<p>Un Thunderbird est un <a href="http://fr.wikipedia.org/wiki/Oiseau-tonnerre">oiseau légendaire</a> de la culture indienne d&#8217;Amérique du Nord, un piaf qu&#8217;il ne fallait pas faire chier apparemment car il tirait des éclairs avec ses yeux.<br/>Au tout début, le projet avait un autre nom d&#8217;animal mythique : Minotaur, mais ce fut un flop. Un peu plus tard, quand Firebird (futur Firefox) commença à bien marcher, le projet fut relancé sous son nom actuel en intégrant certaines avancés de Firebird.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/thunderbird_old_80.png" alt="Ancien logo Thunderbird" /><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/icedove_80.png" alt="Logo Icedove" />Firebird et Thunderbird, ça sonnais bien à l&#8217;époque, une équipe aviaire de winners. À tel point qu&#8217;ils partageaient même leur logo, rouge pour <em>Fire</em>bird et bleu pour <em>Thunder</em>bird (voir à gauche). Comme pour Firefox, debian utilise un nom et un logo alternatif : Icedove (colombe de glace, à droite). Il n&#8217;y a en revanche pas d&#8217;alternatif GNU.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : 2004</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design</strong> : Stephen Desroches/Jon Hicks</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.seamonkey-project.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/seamonkey_100.png" alt="Seamonkey" /></a>Seamonkey &#8211; L&#8217;Artemia</p>
</h3>
<p>Quoi ? Vous ne savez pas ce qu&#8217;est un <a href="http://fr.wikipedia.org/wiki/Artemia_salina">artemia</a> ? Ah la la &#8230; bon ok moi non plus, mais heureusement il y a wikipedia ! C&#8217;est donc un petit crustacé dont les oeufs ont la particularité de pouvoir survivre des années en hibernation, un peu comme ceux d&#8217;<a href="http://fr.wikipedia.org/wiki/X%C3%A9nomorphe_%28alien%29">Alien</a> mais en moins violent pour votre cage thoracique.</p>
<p>Pour en revenir à Seamonkey, c&#8217;était le nom de code de la <a href="http://fr.wikipedia.org/wiki/Suite_Mozilla">Suite Mozilla</a> (celle avec browser + mail + éditeur html). Quand celle-ci fut abandonnée par Mozilla au profit de Firefox/Thunderbird, quelques courageux reprirent l&#8217;affaire avec le nouveau nom.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/iceape_80.png" alt="Iceape" />Tout comme pour Firefox et Thunderbird, pour des raisons de droit, debian utilise un nom et un logo alternatif : Iceape (singe de glace, à gauche). Ice<em>ape</em>, sea<em>monkey</em>, jeu de mot !</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : 2005</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design</strong> : Alex Butin</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.mozilla.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/mozilla_100.png" alt="Mozilla" /></a>Mozilla &#8211; Le Tyrannosaure</p>
</h3>
<p>Pour connaitre l&#8217;origine de cette mascotte, il faut remonter très loin en arrière. Au début il n&#8217;y avait qu&#8217;un énorme nuage de gaz qui s&#8217;est agrégé pour former le s&#8230; hum &#8230; peut être pas aussi loin.</p>
<p><a href="/wp-content/uploads/2010/06/mozilla_bbq.jpg" title="Mascotte de Netscape" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/mozilla_bbq_100.png" alt="Mozilla Netscape" title="Mascotte de Netscape"/></a>Au début donc, en 1993, il y avait le navigateur <a href="http://fr.wikipedia.org/wiki/Mosaic">Mosaic</a>, un des premiers navigateurs, qui faisait un tabac. Quelques-uns de ses créateurs décidèrent alors de faire un nouveau navigateur encore mieux, Netscape, dont le nom de code était Mozilla, un mix de <em>Mosaic Killer</em> et <em>Gozilla</em>, et dont la mascotte était un sympathique lézard vert et violet dénommé Mozilla. Le choix du lézard faisant là encore référence à Gozilla.</p>
<p><a href="/wp-content/uploads/2010/06/mozilla_soviet.png" title="Poster Mozilla dans le style des posters Soviétique" rel="lightbox.2622"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/mozilla_soviet_80.png" alt="Poster Mozilla" title="Poster Mozilla dans le style des posters Soviétique"/></a>En 1998 lorsque Netscape libéra le code du navigateur, un projet de navigateur open-source fut créé avec le nom de code de son ancêtre : Mozilla. La mascotte du nouveau projet, un tyrannosaure, est évidemment inspirée de celle de Netscape et (encore) de Gozilla. À l&#8217;époque le &#8220;ton graphique&#8221; de Mozilla était très &#8220;Soviétique&#8221;, ce qui explique la couleur rouge de la mascotte.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : the Mozilla lizard</td>
<td style="text-align: right"><strong>Apparition</strong> : 1998</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Mozilla</td>
<td style="text-align: right"><strong>Design</strong> : Shepard Fairey</td>
</tr>
</tbody>
</table>
<h3>En bref</h3>
<table style="text-align: center">
<tr>
<td><a href="http://www.mozilla.org/projects/calendar/sunbird"><img src="/wp-content/uploads/2010/06/sunbird_80.png" alt="Sunbird" /></a></td>
<td>
<h4>Sunbird &#8211; Le Nectariniidé</h4>
<p>Mozilla a choisi de rester dans le thème des oiseaux (Thunder<em>bird</em>, Fire<em>bird</em>) pour nommer son calendrier. Les <a href="http://fr.wikipedia.org/wiki/Nectariniidae">nectariniidés</a> sont de petits oiseaux qui se nourrissent, vous l&#8217;aurez deviné, de nectar. Sous debian il s&#8217;appelle Iceowl (Hibou de glace) mais n&#8217;a pas de logo.</p>
</td>
</tr>
<tr>
<td><a href="http://pidgin.im"><img src="/wp-content/uploads/2010/06/pidgin_80.png" alt="Pidgin" /></a></td>
<td>
<h4>Pidgin &#8211; Le Pigeon</h4>
<p>Pidgin désigne une <a href="http://fr.wikipedia.org/wiki/Pidgin">sorte de baragouin</a> basé sur de vraies langues, ce qui colle bien avec un client IM. En anglais <em>pidgin</em> sonne exactement comme <em>pigeon</em>, d&#8217;où la mascotte, sa couleur violette vient de l&#8217;utilisation de la libpurple qui gère les divers protocoles IM.</p>
</td>
</tr>
<tr>
<td><a href="http://adium.im"><img src="/wp-content/uploads/2010/06/adium_80.png" alt="Adium" /></a></td>
<td>
<h4>Adium &#8211; Le Canard</h4>
<p>Au départ c&#8217;était un pigeon voyageur, rien de bien original pour un client IM, puis le logo a bizarrement évolué en canard vert avec le temps. Son nom est Adiumy</p>
</td>
</tr>
</table>
<p><!--nextpage--></p>
<p><!--pagetitle:Autre/Misc--></p>
<h3>
<p style="text-align: center"><a href="http://www.kde.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/kde_100.png" alt="KDE" /></a>KDE &#8211; Le Dragon</p>
</h3>
<p><a href="/wp-content/uploads/2010/06/kde_kandalf.png" title="Kandalf le Sorcier" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/kde_kandalf_80.png" alt="Kandalf" title="Kandalf le Sorcier" /></a>KDE, qui a pour habitude de tout faire commencer par un K, avait pour mascotte originale Kandalf le Sorcier, qui distillait sa sagesse en donnant des trucs et astuces au lancement de KDE.<br/>Mais Kandalf ressemblait un peu trop au Gandalf de Tolkien et fut donc remplacé par Konqi le Dragon à la sortie de KDE 3.0. Le dragon apparaissait déjà dans les versions précédentes mais n&#8217;était pas la mascotte.</p>
<p><a href="/wp-content/uploads/2010/06/kde_katie.jpg" title="Katie, la petite amie de Konqi" rel="lightbox.2622"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/kde_katie_80.png" alt="Katie" title="Katie, la petite amie de Konqi" /></a>Konqi tire son nom de <em>Konque</em>ror, le navigateur de KDE, tout simplement. Et chose rare dans ce monde de geeks, il a une petite amie : Katie, qui est en fait la mascotte du groupe <a href="http://community.kde.org/KDE_Women">KDE Women</a>.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : the KDE Dragon</td>
<td style="text-align: right"><strong>Apparition</strong> : 1999</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Konqi</td>
<td style="text-align: right"><strong>Design</strong> : Stefan Spatz</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://www.blender.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/blender_100.png" alt="Blender" /></a>Blender &#8211; Le Chimpanzé</p>
</h3>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/utah_teapot_80.png" alt="Théière de l'Utah" />Vous connaissez surement la <a href="http://fr.wikipedia.org/wiki/Utah_teapot">Théière de l&#8217;Utah</a> qu&#8217;on utilise pour illustrer un effet ou une technique 3D quelconque, eh bien pour Blender c&#8217;est une tête de chimpanzé qui est utilisée.<br/>Suzanne, c&#8217;est son nom, est apparu comme <a href="http://fr.wikipedia.org/wiki/Easter_egg">easter-egg</a> dans la dernière version commerciale de Blender, juste avant qu&#8217;il ne passe en GPL, et elle est depuis devenue la mascotte. Elle doit son nom au film <a href="http://fr.wikipedia.org/wiki/Jay_and_Silent_Bob_Strike_Back">Jay et Bob contre-attaquent</a> dans lequel une orang-outan porte ce nom.</p>
<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/blender_logo_80.png" alt="Logo Blender" />Bonus: et le logo de Blender, c&#8217;est un animal ? Presque ! C&#8217;est dans le monde du vivant on va dire. C&#8217;est un mix d&#8217;une main (les 3 &#8220;doigts&#8221; qui dépassent) et d&#8217;un œil (bleu) qui symbolise la <em>hand-eye coordination</em>, que l&#8217;on pourrait traduire par <em>dextérité</em>, nécessaire à l&#8217;artiste.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : 2002</td>
</tr>
<tr>
<td><strong>Surnom</strong> : Suzanne</td>
<td style="text-align: right"><strong>Design</strong> : Willem-Paul van Overbruggen</td>
</tr>
</tbody>
</table>
<h3>
<p style="text-align: center"><a href="http://fr.wikipedia.org"><img class="alignnone" style="vertical-align: middle" src="/wp-content/uploads/2010/06/wikipedia_100.png" alt="Wikipedia" /></a>Wikipedia &#8211; <sup style="color:#002bb8;">[choix nécessaire]</sup></p>
</h3>
<p>En 2002 un concours fut lancé pour trouver une mascotte à Wikipedia, deux mascottes sont sorties du lot mais avec des scores trop proches pour les departager. À ce jour il n&#8217;y a toujours pas de mascotte officielle.</p>
<p><a href="/wp-content/uploads/2010/06/wikipedia_miwiki.png" title="Miwiki la fourmi" rel="lightbox.2622"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   class="alignright" src="/wp-content/uploads/2010/06/wikipedia_miwiki_80.png" alt="Miwiki" title="Miwiki la fourmi" /></a>Une des deux propositions de mascottes arrivée en tête est Miwiki, la fourmi coupe-feuille. Elle symbolise bien l&#8217;aspect collectiviste de Wikipedia mais certains ne la trouvaient pas assez individualiste (à la différence des fourmis, les contributeurs Wikipedia sont tous uniques et différents).</p>
<p><a href="/wp-content/uploads/2010/06/wikipedia_wikipede.png" title="Le Wikipede" rel="lightbox.2622"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft" src="/wp-content/uploads/2010/06/wikipedia_wikipede_80.png" alt="Wikipede" title="Le Wikipede" /></a>L&#8217;autre mascotte est un mille-pattes: le Wikipede (mille-pattes se dit centipede en anglais). On le voit en train de multi-tasker avec ses fameuses pattes dans une bibliothèque. Mais les mille-pattes n&#8217;ont pas une image très positive, voir même carrément négative.</p>
<table style="width: 100%">
<tbody>
<tr>
<td><strong>Nom (VO)</strong> : -</td>
<td style="text-align: right"><strong>Apparition</strong> : 2002</td>
</tr>
<tr>
<td><strong>Surnom</strong> : -</td>
<td style="text-align: right"><strong>Design</strong> : -</td>
</tr>
</tbody>
</table>
<h3>En bref</h3>
<table style="text-align: center">
<tr>
<td><a href="http://www.gimp.org"><img src="/wp-content/uploads/2010/06/gimp_80.png" alt="GIMP" /></a></td>
<td>
<h4>GIMP &#8211; Le &#8230; Gimp</h4>
<p>Dénommé Wilber, la mascotte de GIMP est un gimp, mais qu&#8217;est ce qu&#8217;un gimp me direz vous ?<br/>Un gimp un animal de la même espèce que Wilber. Exemple de gimp célèbre : Wilber.</p>
</td>
</tr>
<tr>
<td><a href="http://www.xfce.org"><img src="/wp-content/uploads/2010/06/xfce_80.png" alt="Xfce" /></a></td>
<td>
<h4>Xfce &#8211; La Souris</h4>
<p>La souris bondissante du logo représente la légèreté et la rapidité de Xfce. Probablement à comparer avec le poids du dragon KDE ainsi qu&#8217;avec les lourds &#8220;pas&#8221; de Gnome.</p>
</td>
</tr>
<tr>
<td><a href="http://www.xen.org"><img src="/wp-content/uploads/2010/06/xen_80.png" alt="Xen" /></a></td>
<td>
<h4>Xen &#8211; Le Panda</h4>
<p>Le panda en habit de moine bouddhiste fait évidemment référence au mot <em>zen</em>, très proche en prononciation de <em>Xen</em>.</p>
</td>
</tr>
<tr>
<td><a href="http://www.kame.net"><img src="/wp-content/uploads/2010/06/kame_80.png" alt="KAME" /></a></td>
<td>
<h4>KAME &#8211; La Tortue</h4>
<p>KAME était un projet pour implémenter l&#8217;ipv6 et IPsec dans les *BSD. Une mission terminée avec succès il y a un moment mais le site web est connu pour sa tortue qui s&#8217;anime quand on le visite en ipv6. Kame veut dire tortue en japonais.</p>
</td>
</tr>
</table>
<p><!--nextpage--></p>
<p><!--pagetitle:Logos en Vrac--></p>
<p>Rangé par ordre alphabetique.</p>
<table style="text-align: center;width: 100%">
<tr>
<td><a href="http://amarok.kde.org"><img src="/wp-content/uploads/2010/06/amarok_80.png" alt="Amarok" /></a></td>
<td><a href="http://www.backtrack-linux.org"><img src="/wp-content/uploads/2010/06/backtrack_80.png" alt="BackTrack" /></a></td>
<td><a href="http://www.bacula.org"><img src="/wp-content/uploads/2010/06/bacula_80.png" alt="Bacula" /></a></td>
</tr>
<tr>
<td>
<h5>Amarok &#8211; <a href="http://fr.wikipedia.org/wiki/Amarok_%28mythologie%29">Esprit de Loup</a></h5>
<p>Lecteur Multimedia</td>
<td>
<h5>Backtrack &#8211; Dragon</h5>
<p>Distrib Linux sécurité</td>
<td>
<h5>Bacula &#8211; Chauve-souris</h5>
<p>Backup</td>
</tr>
<tr>
<td><a href="http://beagle-project.org"><img src="/wp-content/uploads/2010/06/beagle_80.png" alt="Beagle" /></a></td>
<td><a href="http://www.bitlbee.org"><img src="/wp-content/uploads/2010/06/bitlbee_80.png" alt="BitlBee" /></a></td>
<td><a href="http://bluefish.openoffice.nl"><img src="/wp-content/uploads/2010/06/bluefish_80.png" alt="Bluefish" /></a></td>
</tr>
<tr>
<td>
<h5>Beagle &#8211; <a href="http://fr.wikipedia.org/wiki/Beagle">Beagle</a></h5>
<p>Indexeur de fichiers</td>
<td>
<h5>BitlBee &#8211; Abeille</h5>
<p>Passerelle IRC/IM</td>
<td>
<h5>Bluefish &#8211; <a href="http://fr.wikipedia.org/wiki/Tassergal">Tassergal</a></h5>
<p>IDE</td>
</tr>
<tr>
<td><a href="http://www.bugzilla.org"><img src="/wp-content/uploads/2010/06/bugzilla_80.png" alt="Bugzilla" /></a></td>
<td><a href="http://cairographics.org"><img src="/wp-content/uploads/2010/06/cairo_80.png" alt="Cairo" /></a></td>
<td><a href="http://camelbones.sourceforge.net"><img src="/wp-content/uploads/2010/06/camelbones_80.png" alt="CamelBones" /></a></td>
</tr>
<tr>
<td>
<h5>Bugzilla &#8211; Insecte (bug)</h5>
<p>Suivi de bug</td>
<td>
<h5>Cairo &#8211; Bousier sacré</h5>
<p>Librairie Graphique</td>
<td>
<h5>CamelBones &#8211; Dromadaire Mort</a></h5>
<p>Bindings Perl pour Objective-C</td>
</tr>
<tr>
<td><a href="http://caml.inria.fr"><img src="/wp-content/uploads/2010/05/caml_80.png" alt="Caml" /></a></td>
<td><a href="http://www.capros.org"><img src="/wp-content/uploads/2010/05/capros_80.png" alt="CapROS" /></a></td>
<td><a href="http://www.dragonplayer.net"><img src="/wp-content/uploads/2010/06/dragonplayer_80.png" alt="Dragon Player" /></a></td>
</tr>
<tr>
<td>
<h5>Caml &#8211; Dromadaire</h5>
<p>Langage</td>
<td>
<h5>CapROS &#8211; Ours Blanc</h5>
<p>Capability based OS</td>
<td>
<h5>Dragon Player &#8211; Dragon</h5>
<p>Lecteur Multimédia</td>
</tr>
<tr>
<td><a href="http://www.emule-project.net"><img src="/wp-content/uploads/2010/06/emule_80.png" alt="eMule" /></a></td>
<td><a href="http://felix-lang.org"><img src="/wp-content/uploads/2010/05/felix_80.png" alt="Felix" /></a></td>
<td><a href="http://getfirebug.com"><img src="/wp-content/uploads/2010/06/firebug_80.png" alt="Firebug" /></a></td>
</tr>
<tr>
<td>
<h5>eMule &#8211; Mulet</h5>
<p>Pirate2Pirate</td>
<td>
<h5>Felix &#8211; Chat</h5>
<p>Langage</td>
<td>
<h5>Firebug &#8211; <a href="http://fr.wikipedia.org/wiki/Gendarme_%28insecte%29">Gendarme</a></h5>
<p>Plugin Firefox pour dev web</td>
</tr>
<tr>
<td><a href="http://fireftp.mozdev.org"><img src="/wp-content/uploads/2010/06/fireftp_80.png" alt="FireFTP" /></a></td>
<td><a href="http://freemind.sourceforge.net"><img src="/wp-content/uploads/2010/06/freemind_80.png" alt="Freemind" /></a></td>
<td><a href="http://rsug.itd.umich.edu/software/fugu"><img src="/wp-content/uploads/2010/06/fugu_80.png" alt="Fugu" /></a></td>
</tr>
<tr>
<td>
<h5>FireFTP &#8211; Hippocampe </h5>
<p>Client FTP</td>
<td>
<h5>Freemind &#8211; Papillon</h5>
<p>Gestion de Projet</td>
<td>
<h5>Fugu &#8211; <a href="http://fr.wikipedia.org/wiki/Fugu">Fugu</a></h5>
<p>SFTP pour Mac</td>
</tr>
<tr>
<td><a href="http://gambas.sourceforge.net"><img src="/wp-content/uploads/2010/05/gambas_80.png" alt="Gambas" /></a></td>
<td><a href="http://gcc.gnu.org"><img src="/wp-content/uploads/2010/06/gcc_80.png" alt="GCC" /></a></td>
<td><a href="http://hadoop.apache.org"><img src="/wp-content/uploads/2010/06/hadoop_80.png" alt="Hadoop" /></a></td>
</tr>
<tr>
<td>
<h5>Gambas &#8211; Crevette</h5>
<p>VB-like</td>
<td>
<h5>GCC &#8211; Gnou</h5>
<p>Compilateur</td>
<td>
<h5>Hadoop &#8211; Éléphant</h5>
<p>Framework Java</td>
</tr>
<tr>
<td><a href="http://ichthux.com"><img src="/wp-content/uploads/2010/06/ichthux_80.png" alt="Ichthux" /></a></td>
<td><a href="http://jackrabbit.apache.org"><img src="/wp-content/uploads/2010/05/jackrabbit_80.png" alt="Jackrabbit" /></a></td>
<td><a href="http://l4ka.org"><img src="/wp-content/uploads/2010/05/l4ka_80.png" alt="L4KA" /></a></td>
</tr>
<tr>
<td>
<h5>Ichthux &#8211; Poisson de Jésus</h5>
<p>Distrib Linux pour Chrétiens</td>
<td>
<h5>Jackrabbit &#8211; Lapin</h5>
<p>Content Repository</td>
<td>
<h5>L4KA &#8211; Ecureuil</h5>
<p>Microkernel</td>
</tr>
<tr>
<td><a href="http://www.latex-project.org"><img src="/wp-content/uploads/2010/06/latex_80.png" alt="LaTeX" /></a></td>
<td><a href="http://www.mantisbt.org"><img src="/wp-content/uploads/2010/06/mantis_80.png" alt="Mantis" /></a></td>
<td><a href="https://www.mirbsd.org"><img src="/wp-content/uploads/2010/06/miros_bsd_80.png" alt="MirOS BSD" /></a></td>
</tr>
<tr>
<td>
<h5>LaTeX &#8211; Lion</a></h5>
<p>Composition de documents</td>
<td>
<h5>Mantis &#8211; Mante Religieuse</h5>
<p>Suivi de bug</td>
<td>
<h5>MirOS BSD &#8211; Daemon</h5>
<p>Fork OpenBSD</td>
</tr>
<tr>
<td><a href="http://www.monotone.ca"><img src="/wp-content/uploads/2010/06/monotone_80.png" alt="Monotone" /></a></td>
<td><a href="http://www.mutt.org"><img src="/wp-content/uploads/2010/06/mutt_80.png" alt="Mutt" /></a></td>
<td><a href="http://live.gnome.org/Nautilus"><img src="/wp-content/uploads/2010/06/nautilus_80.png" alt="Nautilus" /></a></td>
</tr>
<tr>
<td>
<h5>Monotone &#8211; Rat</h5>
<p>Gestionnaire de versions</td>
<td>
<h5>Mutt &#8211; Chien</h5>
<p>Client Mail</td>
<td>
<h5>Nautilus &#8211; Nautile</h5>
<p>Gestionnaire de fichiers</td>
</tr>
<tr>
<td><a href="http://www.nexenta.org"><img src="/wp-content/uploads/2010/05/nexenta_80.png" alt="Nexenta" /></a></td>
<td><a href="http://www.ogre3d.org"><img src="/wp-content/uploads/2010/06/ogre_80.png" alt="OGRE" /></a></td>
<td><a href="http://www.openoffice.org"><img src="/wp-content/uploads/2010/06/ooo_80.png" alt="OpenOffice.org" /></a></td>
</tr>
<tr>
<td>
<h5>Nexenta &#8211; Giraffe</h5>
<p>GNU/Solaris OS</td>
<td>
<h5>OGRE &#8211; Ogre</h5>
<p>Moteur 3D</td>
<td>
<h5>OpenOffice &#8211; Mouettes</h5>
<p>Suite Bureautique</td>
</tr>
<tr>
<td><a href="http://www.openswan.org"><img src="/wp-content/uploads/2010/06/openswan_80.png" alt="Openswan" /></a></td>
<td><a href="http://live.gnome.org/Orca"><img src="/wp-content/uploads/2010/06/orca_80.png" alt="Orca" /></a></td>
<td><a href="http://www.pardus.org.tr"><img src="/wp-content/uploads/2010/05/pardus_80.png" alt="Pardus" /></a></td>
</tr>
<tr>
<td>
<h5>Openswan &#8211; Cygne</h5>
<p>Pile IPsec</td>
<td>
<h5>Orca &#8211; Orque</h5>
<p>Truc pour myopes</td>
<td>
<h5>Pardus &#8211; Leopard</h5>
<p>Distrib Linux turque</td>
</tr>
<tr>
<td><a href="http://parrot.org"><img src="/wp-content/uploads/2010/06/parrot_80.png" alt="Parrot" /></a></td>
<td><a href="http://pike.ida.liu.se"><img src="/wp-content/uploads/2010/05/pike_80.png" alt="Pike" /></a></td>
<td><a href="http://www.postfix.org"><img src="/wp-content/uploads/2010/06/postfix_80.png" alt="Postfix" /></a></td>
</tr>
<tr>
<td>
<h5>Parrot &#8211; Perroquet</h5>
<p>Bytecode Compilalteur/VM</td>
<td>
<h5>Pike &#8211; Brochet</h5>
<p>Langage</td>
<td>
<h5>Postfix &#8211; Souris</h5>
<p>Serveur Mail</td>
</tr>
<tr>
<td><a href="http://puppylinux.org"><img src="/wp-content/uploads/2010/06/puppy_linux_80.png" alt="Puppy Linux" /></a></td>
<td><a href="http://www.nongnu.org/ratpoison"><img src="/wp-content/uploads/2010/06/ratpoison_80.png" alt="Ratpoison" /></a></td>
<td><a href="http://www.rssowl.org"><img src="/wp-content/uploads/2010/06/rssowl_80.png" alt="RSSOwl" /></a></td>
</tr>
<tr>
<td>
<h5>Puppy Linux &#8211; Chiot</h5>
<p>Distrib Linux</td>
<td>
<h5>Ratpoison &#8211; Rat</h5>
<p>Window Manager</td>
<td>
<h5>RSSOwl &#8211; Hibou</h5>
<p>Agrégateur RSS</td>
</tr>
<tr>
<td><a href="http://sawfish.wikia.com"><img src="/wp-content/uploads/2010/06/sawfish_41.png" alt="Sawfish" /></a></td>
<td><a href="http://www.scilab.org"><img src="/wp-content/uploads/2010/05/scilab_80.png" alt="Scilab" /></a></td>
<td><a href="http://www.sendmail.org"><img src="/wp-content/uploads/2010/06/sendmail_50.png" alt="Sendmail" /></a></td>
</tr>
<tr>
<td>
<h5>Sawfish &#8211; Poisson-scie</h5>
<p>Window Manager</td>
<td>
<h5>Scilab &#8211; Macareux</h5>
<p>MATLAB-like</td>
<td>
<h5>Sendmail &#8211; Chauve-Souris</h5>
<p>Serveur Mail</td>
</tr>
<tr>
<td><a href="http://shiira.jp/en"><img src="/wp-content/uploads/2010/06/shiira_80.png" alt="Shiira" /></a></td>
<td><a href="http://sidux.com"><img src="/wp-content/uploads/2010/05/sidux_80.png" alt="sidux" /></a></td>
<td><a href="http://slitaz.org"><img src="/wp-content/uploads/2010/06/slitaz_80.png" alt="SliTaz" /></a></td>
</tr>
<tr>
<td>
<h5>Shiira &#8211; <a href="http://fr.wikipedia.org/wiki/Mahi-mahi">Coryphène</a></h5>
<p>Browser WebKit pour Mac</td>
<td>
<h5>sidux &#8211; Scorpion</h5>
<p>Distrib Linux</td>
<td>
<h5>SliTaz &#8211; Araignée</h5>
<p>Distrib Linux</td>
</tr>
<tr>
<td><a href="http://www.snort.org"><img src="/wp-content/uploads/2010/06/snort_80.png" alt="Snort" /></a></td>
<td><a href="http://www.speex.org"><img src="/wp-content/uploads/2010/06/speex_80.png" alt="Speex" /></a></td>
<td><a href="http://www.spip.net"><img src="/wp-content/uploads/2010/06/spip_80.png" alt="spip" /></a></td>
</tr>
<tr>
<td>
<h5>Snort &#8211; Cochon</h5>
<p>Détection d&#8217;intrusion</td>
<td>
<h5>Speex &#8211; Perroquet</h5>
<p>Codec Audio</td>
<td>
<h5>Spip &#8211; Écureuil volant</h5>
<p>CMS</td>
</tr>
<tr>
<td><a href="http://www.squid-cache.org"><img src="/wp-content/uploads/2010/06/squid_80.png" alt="Squid" /></a></td>
<td><a href="http://squirrelmail.org"><img src="/wp-content/uploads/2010/06/squirrelmail_80.png" alt="Squirrelmail" /></a></td>
<td><a href="http://www.acme.com/software/thttpd"><img src="/wp-content/uploads/2010/06/thttpd_80.png" alt="thttpd" /></a></td>
</tr>
<tr>
<td>
<h5>Squid &#8211; Calamar</h5>
<p>Proxy Web</td>
<td>
<h5>Squirrelmail &#8211; Écureuil</h5>
<p>Webmail</td>
<td>
<h5>thttpd &#8211; Chat</h5>
<p>Serveur web</td>
</tr>
<tr>
<td><a href="http://tomcat.apache.org"><img src="/wp-content/uploads/2010/06/tomcat_80.png" alt="Tomcat" /></a></td>
<td><a href="http://www.webgui.org"><img src="/wp-content/uploads/2010/06/webgui_80.png" alt="Webgui" /></a></td>
<td><a href="http://www.windowmaker.info"><img src="/wp-content/uploads/2010/06/window_maker_80.png" alt="Window Maker" /></a></td>
</tr>
<tr>
<td>
<h5>Tomcat &#8211; Chat</h5>
<p>Conteneur de servlets</td>
<td>
<h5>Webgui &#8211; Pieuvre</h5>
<p>CMS</td>
<td>
<h5>Window Maker &#8211; Panda</h5>
<p>Window Manager</td>
</tr>
<tr>
<td><a href="http://www.wireshark.org"><img src="/wp-content/uploads/2010/06/wireshark_80.png" alt="Wireshark" /></a></td>
<td><a href="http://www.workrave.org"><img src="/wp-content/uploads/2010/06/workrave_80.png" alt="Workrave" /></a></td>
<td><a href="http://xiph.org"><img src="/wp-content/uploads/2010/06/xiph_80.png" alt="Xiph" /></a></td>
</tr>
<tr>
<td>
<h5>Wireshark &#8211; Requin</h5>
<p>Packet sniffer</td>
<td>
<h5>Workrave &#8211; Mouton</h5>
<p>Soft de santé</td>
<td>
<h5>Xiph &#8211; Poisson</h5>
<p>Vorbis/Theora/etc</td>
</tr>
</table>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2009/08/19/echinus-wm/' rel='bookmark' title='Echinus, un WM, simplement.'>Echinus, un WM, simplement.</a></li>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/06/13/larche-des-mascotes-du-libre/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>PXE : Y a-t-il un bootloader sur l&#8217;réseau ?</title>
		<link>http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/</link>
		<comments>http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/#comments</comments>
		<pubDate>Sat, 15 May 2010 14:02:25 +0000</pubDate>
		<dc:creator>Lord</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[diskless]]></category>
		<category><![CDATA[nfs]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[pxe]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=3993</guid>
		<description><![CDATA[
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/' rel='bookmark' title='Zeroconf : Réseaux IP sans configuration'>Zeroconf : Réseaux IP sans configuration</a></li>
<li><a href='http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/' rel='bookmark' title='Devbox KVM+Libvirt perfect setup.'>Devbox KVM+Libvirt perfect setup.</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Le PXE quoi que c'est ?--><a href="http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/diagram1/" rel="attachment wp-att-4379"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/05/Diagram1-300x176.png" alt="Graph du réseau" width="300" height="176" class="alignleft size-medium wp-image-4379" /></a>Comment installer un OS sur une machine sans lecteur CD et sans clé USB ? Comment utiliser le même nunux quelque soit votre PC sur votre réseau ? Comment avoir votre nunux de secours pour dépanner les machines de votre réseau ? C&#8217;est simple, le <strong>P</strong>reboot e<strong>X</strong>ecution <strong>E</strong>nvironment est une technique permettant de booter une machine par le réseau.<br />
On pourrait simplifier la chose en disant qu&#8217;il s&#8217;agit d&#8217;une sorte de grub téléchargé et exécuté par le réseau. </p>
<p><!--more--></p>
<p>Pour démarrer une machine sur le réseau, il faut tout d&#8217;abord que son bios supporte cette technologie (c&#8217;est le cas de la plupart des machines modernes). Il faut ensuite un serveur DHCP et un serveur TFTP configurés pour fournir un bail spécial ainsi que les fichiers nécessaires au boot. Cet article couvre donc la mise en place d&#8217;un système basique. On abordera ensuite le côté esthétique par un petit coup de maquillage, ensuite on ajoutera quelques fonctions parfois utiles et enfin la mise en place d&#8217;un système complètement <strong>diskless</strong>.</p>
<h3>Récupération du matos </h3>
<p>La grande majorité des serveurs DHCP est à même de faire tourner un PXE. J&#8217;aborderai ici <strong>Dnsmasq</strong> qui a l&#8217;avantage d&#8217;être très léger et de  pouvoir faire office de serveur DNS et TFTP. Nous n&#8217;aurons donc qu&#8217;un seul et unique serveur pour tout faire.<br />
<code>USE="dhcp tftp" emerge dnsmasq</code><br />
Il vous faudra également syslinux pour récupérer les précieux fichiers de boot ainsi que quelques petits utilitaires bonus.<br />
Vous trouverez la dernière version sur le très sérieux site de kernel.org:</p>
<p>http://www.kernel.org/pub/linux/utils/boot/syslinux/</p>
<p>Il ne manque plus que la distribution à booter et son kernel. Tout dépendra de ce que vous voulez proposer. Ici on va monter un installeur Debian :<br />
<code>wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/debian-installer/i386/linux /var/tftp/distros/debian/lenny/i386/linux<br />
wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz /var/tftp/distros/debian/lenny/i386/initrd.gz<br />
wget ftp://ftp.fr.debian.org/debian/dists/etch/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux /var/tftp/distros/debian/lenny/amd64/linux<br />
wget ftp://ftp.fr.debian.org/debian/dists/etch/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz /var/tftp/distros/debian/lenny/amd64/initrd.gz</code></p>
<h3>Configuration du serveur </h3>
<p>Je n&#8217;aborderai pas la configuration complète de Dnsmasq, uniquement les parties relatives à notre objecif.</p>
<p><code>/etc/dnsmasq.conf</code><br />
<code>dhcp-boot=pxelinux.0<br />
enable-tftp<br />
tftp-root=/var/tftp</code><br />
La première ligne fournit le nom du fichier de PXE, la seconde active le tftp et la troisième déclare le dossier qui sera la racine de notre TFTP. Ça suffit pour obtenir le fonctionnement désiré. Relancez Dnsmasq, désormais on n&#8217;y touchera plus.</p>
<h3>Mise en place basique </h3>
<p>Commençons par créer la racine du tftp et récupérer le fameux pxelinux.0<br />
<code># mkdir /var/tftp/pxelinux.cfg<br />
# tar xvf syslinux-3.81.tar.gz<br />
# cp syslinux-3.81/core/pxelinux.0 /var/tftp/</code></p>
<p>Créons maintenant un petit menu tout simple :<br />
<code>/var/tftp/menu.txt</code><br />
<code>-: PXE BOOT :-</p>
<p>lenny_i386_installer<br />
lenny_i386_expert<br />
lenny_amd64_installer<br />
lenny_amd64_expert</code></p>
<p>C&#8217;est ce menu qui s&#8217;affichera. C&#8217;est moche mais efficace. Il faut créer le fichier de configuration associé :<br />
<code>/var/tftp/pxelinux.cfg/default</code><br />
<code>DISPLAY menu.txt</p>
<p>DEFAULT lenny_i386_installer</p>
<p>LABEL lenny_i386_installer<br />
	kernel distros/debian/lenny/i386/linux<br />
	append vga=normal initrd=debian/lenny/i386/initrd.gz</p>
<p>LABEL lenny_i386_expert<br />
	kernel distros/debian/lenny/i386/linux<br />
	append priority=low vga=normal initrd=debian/lenny/i386/initrd.gz</p>
<p>LABEL lenny_amd64_linux<br />
	kernel distros/debian/lenny/amd64/linux<br />
	append vga=normal initrd=debian/lenny/amd64/initrd.gz</p>
<p>LABEL lenny_amd64_expert<br />
	kernel distros/debian/lenny/amd64/linux<br />
	append priority=low vga=normal initrd=debian/lenny/amd64/initrd.gz</p>
<p>PROMPT 1<br />
TIMEOUT 0</code><br />
Vous avez maintenant un PXE tout ce qu&#8217;il y a de plus simple. C&#8217;est assez brut mais ça fonctionne. Maintenant vous pouvez tester. La machine se verra attribé sa config réseau et vous devriez voir s&#8217;afficher le contenu de votre boot.txt . Vous n&#8217;aurez plus qu&#8217;à taper le « label » désiré pour lancer le boot.</p>
<p><!--nextpage--><!--pagetitle:Une petite beauté--></p>
<h3>Maquillage</h3>
<p>Bon c&#8217;est bien gentil mais d&#8217;une part c&#8217;est moche et d&#8217;autre part c&#8217;est pas vraiment super pratique. On va donc faire un menu ressemblant à un bon vieux GRUB.<br />
Tout d&#8217;abord on va tenter de faire les trucs proprement donc on va créer un petit dossier <em>/var/tftp/tools</em> qui contiendra les petits binaires et un autre <em>/var/tftp/menu</em> pour les menus.</p>
<p>On a donc cette arborescence :<br />
<code>/var/tftp<br />
		/distros<br />
			…<br />
		/menu<br />
		/tools<br />
		/pxelinux.0<br />
		/pxelinux.cfg<br />
			/default</code><br />
Il faut récupérer le binaire permettant de faire afficher un beau menu. Celui-ci se trouve dans syslinux.<br />
<code># cp syslinux-3.81/com32/menu/vesamenu.c32 /var/tftp/tools</code><br />
Il nous faut maintenant modifier le fichier <em>pxelinux.cfg/default</em> pour utiliser ce binaire et faire un truc plus classe :<br />
<code>DEFAULT tools/vesamenu.c32 menu/design.conf ~</p>
<p>MENU TITLE Mon PXE</p>
<p>LABEL Lenny I386<br />
	MENU LABEL Installer Lenny I386<br />
	KERNEL distros/debian/lenny/i386/linux<br />
	APPEND vga=normal initrd=distros/debian/lenny/i386/initrd.gz</p>
<p>LABEL Lenny I386 Expert<br />
	MENU LABEL Installer Lenny I386 en mode Expert<br />
	KERNEL distros/debian/lenny/i386/linux<br />
	APPEND priority=low vga=normal initrd=distros/debian/lenny/i386/initrd.gz</p>
<p>LABEL Lenny amd64 linux<br />
	MENU LABEL Installer Lenny AMD64<br />
	KERNEL distros/debian/lenny/amd64/linux<br />
	APPEND vga=normal initrd=distros/debian/lenny/amd64/initrd.gz</p>
<p>LABEL Lenny amd64 expert<br />
	MENU LABEL Installer Lenny AMD64 en mode Expert<br />
	KERNEL distros/debian/lenny/amd64/linux<br />
	APPEND priority=low vga=normal initrd=distros/debian/lenny/amd64/initrd.gz</p>
<p>TIMEOUT 0</code><br />
La première ligne appelle le binaire en lui fournissant en argument le fichier design.conf que l&#8217;on va créer de ce pas.<br />
<code>/var/tftp/menu/design.conf</code><br />
<code>MENU WIDTH	80<br />
MENU MARGIN	10<br />
MENU ROWS	12<br />
MENU TABMSGROW	18<br />
MENU CMDLINEROW	12<br />
MENU ENDROW	24<br />
MENU TIMEOUTROW 20<br />
MENU PASSWORDMARGIN	3<br />
MENU PASSWORDROW	11</p>
<p>menu background menu/background.png</code><br />
L&#8217;image de background doit être en png 24bits en 640*480 ce qui laisse <a href="http://www.google.com/images?as_q=&amp;um=1&amp;hl=en&amp;client=opera&amp;rls=en&amp;btnG=Google+Search&amp;as_epq=&amp;as_oq=&amp;as_eq=&amp;imgtype=&amp;imgsz=m&amp;imgw=640&amp;imgh=480&amp;imgar=&amp;as_filetype=png&amp;imgc=color&amp;as_sitesearch=&amp;as_rights=&amp;safe=off&amp;as_st=y">pas mal de choix de fond d&#8217;écran</a>.</p>
<p>Vous pouvez maintenant tester votre nouveau PXE tout en couleurs et bien plus fonctionnel. Vous avez maintenant un PXE ressemblant à un bon petit grub.</p>
<p><!--nextpage--><!--pagetitle:Le couteau suisse du boot--></p>
<h3>Ajouts de nouvelles fonctions</h3>
<p>Il est possible d&#8217;ajouter quelques fonctionnalités bien pratiques comme par exemple le fameux Memtest permettant de tester ses barettes de RAM ou bien ajouter HDT qui vous permettra d&#8217;obtenir de nombreuses informations concernant la machine sans même booter un OS.</p>
<h4>Un sous-menu</h4>
<p>Pour créer un sous-menu, il suffit de refaire appel à vesamenu.c32 et lui indiquer un autre fichier de conf :<br />
<code>/var/tftp/pxelinux.cfg/default</code><br />
<code>LABEL Outils systèmes<br />
	MENU LABEL Outils systèmes &gt;&gt;<br />
	KERNEL tools/vesamenu.c32<br />
	APPEND menu/design.conf menu/systemes.conf</code></p>
<p><code>/var/tftp/menu/systemes.conf</code><br />
<code>MENU TITLE Outils Systèmes</p>
<p>LABEL retour_menu<br />
	MENU LABEL &lt;- Retour menu principal<br />
	KERNEL tools/vesamenu.c32<br />
	APPEND menu/design.conf ~</p>
<p>LABEL</code><br />
Le ~ correspond au menu par défaut.</p>
<h4>MemTest</h4>
<p>On le récupère<br />
<code># wget http://www.memtest.org/download/4.00/memtest86+-4.00.bin.gz<br />
tar xvf memtest86+-4.00.bin.gz<br />
# cp memtest86+-4.00/precomp.bin /var/tftp/tools/memtest</code></p>
<p><code>/var/tftp/menu/systemes.conf</code><br />
<code>LABEL memtest<br />
	MENU LABEL ^MemTest 4.0<br />
	KERNEL tools/memtest</code></p>
<p>Et voilà MemTest est désormais intégré.</p>
<h4>HDT</h4>
<p>HDT fait partie de syslinux donc il faut le récupérer :<br />
<code># cp syslinux-3.81/com32/hdt/hdt.c32 /var/tftp/tools</code><br />
Il faut récupérer le fichier <a href="http://pciids.sourceforge.net/v2.2/pci.ids">pci.ids</a> qui se trouve sur sourceforge et le placer dans notre dossier <em>/var/tftp/tools</em> et enfin récupérer le fichier <em>/lib/modules/`uname -r`/modules.pcimap</em> à copier dans le même dossier.<br />
Maintenant que tout est en place éditons, le fameux<br />
<code>/var/tftp/menu/systemes.conf</code><br />
<code>LABEL HDT<br />
	MENU LABEL ^Hardware Detection Test<br />
	KERNEL tools/hdt.c32<br />
	APPEND modules=tools/modules.pcimap pciids=tools/pci.ids memtest=tools/memtest</code><br />
Et voili voilou</p>
<h4>Reboot</h4>
<p>Une petite option pour reboot pour le fun :<br />
<code># cp syslinux-3.81/com32/modules/reboot.c32 /var/tftp/tools/reboot.c32</code></p>
<p><code>/var/tftp/menu/systemes.conf</code><br />
<code>LABEL reboot<br />
	MENU LABEL ^Reboot<br />
	KERNEL tools/reboot.c32</code></p>
<h4>Boot Local</h4>
<p>Ajoutons une option pour tout de même booter sur son disque dur.<br />
<code># cp syslinux-3.81/com32/samples/localboot.c32 /var/tftp/tools/localboot.c32</code></p>
<p><code>/var/tftp/menu/systemes.conf</code><br />
<code>LABEL LocalBoot<br />
	MENU LABEL ^Boot Local<br />
	KERNEL tools/localboot.c32</code></p>
<p>On a au final ces deux écrans :<br />
<div id="attachment_4086" class="wp-caption alignnone" style="width: 648px"><a href="http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/boot1/" rel="attachment wp-att-4086"><img src="http://geekfault.org/wp-content/uploads/2010/05/boot1.png" alt="PXE main menu" width="638" height="477" class="size-full wp-image-4086" /></a><p class="wp-caption-text">Image du menu principale</p></div><br />
<div id="attachment_4097" class="wp-caption alignnone" style="width: 648px"><a href="http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/boot2-2/" rel="attachment wp-att-4097"><img src="http://geekfault.org/wp-content/uploads/2010/05/boot21.png" alt="Menu des fonctionnalités" width="638" height="480" class="size-full wp-image-4097" /></a><p class="wp-caption-text">Menu des fonctionnalités</p></div></p>
<p>Et maintenant que nous avons un PXE fonctionnel, pratique et regardable passons au choses sérieuses : un vrai linux par le réseau.</p>
<p><!--nextpage--><!--pagetitle:Du diskless what else ?--></p>
<h3>Du diskless par distribution « live »</h3>
<p>Concrètement qu&#8217;est-ce qu&#8217;il nous manque pour avoir du vrai diskless et non juste un installeur ? Il nous faut un kernel qui puisse récupérer son root (pas l&#8217;utilisateur mais son système de fichier) soit par le réseau soit par un initrd. Je vais commencer par la seconde possibilité avec Tiny Core Linux. Ce qu&#8217;on va faire c&#8217;est booter un kernel et lui fournir un initrd qui lui servira de racine. Les changements ne seront pas conservés après reboot, comme une distribution sur LiveCD.</p>
<p>On va donc faire ce système avec <strong>Tiny Core Linux</strong>. Il s&#8217;agit d&#8217;une toute petite distro avec interface graphique qui tient dans 10 Mo. Ça se récupère <a href="http://distro.ibiblio.org/pub/linux/distributions/tinycorelinux/">ici</a>. Et ça s&#8217;intègre en moins de deux sur votre PXE. Mettez le <em>bzImage</em> et le <em>tinycore.gz</em> dans (par exemple) <em>/var/tftp/distros/tinycore</em> et ajoutez ces quelques lignes à votre menu :<br />
<code>LABEL Tiny_Core_Linux<br />
         MENU LABEL Tiny Core Linux<br />
         KERNEL distros/tinycore/bzImage<br />
         APPEND initrd=distros/tinycore/tinycore.gz max_loop=256</code><br />
Et c&#8217;est bootable. Cette distrib est pratique quand on veux un shell vite fait. C&#8217;est juste dommage de ne pas avoir de client SSH pré-installé mais c&#8217;est une autre histoire.</p>
<h3>Un linux vrai de vrai avec root en nfs</h3>
<p>Maintenant au lieu de se limiter à un kernel et un initrd, on va fournir l&#8217;arborescence complète. En fait la racine sera un export NFS. Le système sera donc utilisable comme un nunux classique. Mieux encore, vous pourrez l&#8217;utiliser sur plusieurs PC (non simultanément). Allez c&#8217;est parti pour se monter une petite Debian en mois de deux.</p>
<p>D&#8217;abord on installe les paquets nécessaires :<br />
<code># emerge debootstrap nfs-utils</code><br />
Debootstrap est un script recréant une debian (ou ubuntu) à partir d&#8217;un miroir. Si vous voulez monter une autre distrib, pas la peine de le prendre. Nfs-utils apporte quelques outils pour la mise en place du serveur NFS. Il faut que votre kernel possède le module nfs-server.</p>
<p>Maintenant créons la Debian de toute pièce :<br />
<code># mkdir /var/exports/debian/lenny<br />
# debootstrap lenny /var/exports/debian/lenny</code><br />
Après une pause bien méritée, noyautons cette petite. Soit vous vous faites votre kernel aux petits oignons, soit vous prenez celui de la Debian qu&#8217;il faudra installer par chroot. Bien évidemment, le mieux est de le compiler soi-même en n&#8217;oubliant surtout pas <strong>filesystems/network file systems/root filesystems on nfs</strong>. vous placerez ce kernel non pas dans l&#8217;export NFS (enfin ce n&#8217;est pas indispensable) mais dans le tftp <em>/var/tftp/distros/debian/kernel_perso</em>.</p>
<p>Créez l&#8217;export NFS dans le fichier<br />
<code>/etc/exports</code><br />
<code>/var/exports/debian/lenny 10.0.0.0/8(rw,async,no_subtree_check,no_root_squash,no_all_squash)</code></p>
<p>Donc là je déclare tout le dossier contenant la lenny visible pour tout mon réseau local (en 10/8) avec des droits de lecture/écriture.<br />
Il ne reste plus qu&#8217;à ajouter une entrée dans le menu du PXE.<br />
<code>LABEL Debian<br />
MENU LABEL Debian NFS<br />
	KERNEL distros/debian/kernel_perso<br />
	APPEND ip=dhcp root=/dev/nfs nfsroot=10.0.0.1:/var/exports/debian/lenny</code></p>
<p>Et il ne reste plus qu&#8217;à booter et rebooter !</p>
<h3>What else ?</h3>
<p>Bon voilà vous avez vu comment monter votre joli PXE. Vous pouvez donc installer ure distrib sur ce petit EeePC sans lecteur CD. Vous pouvez réparer ce grub que vous venez de dégommer sans sortir votre clé USB bootable. Pour aller plus loin, sachez qu&#8217;il est possible par mesure de sécurité (ou commodité) de proposer un PXE différent pour chaque machine en fonction de sa MAC.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/07/15/zeroconf-reseaux-ip-sans-configuration/' rel='bookmark' title='Zeroconf : Réseaux IP sans configuration'>Zeroconf : Réseaux IP sans configuration</a></li>
<li><a href='http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/' rel='bookmark' title='Devbox KVM+Libvirt perfect setup.'>Devbox KVM+Libvirt perfect setup.</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</title>
		<link>http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/</link>
		<comments>http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/#comments</comments>
		<pubDate>Thu, 13 May 2010 12:52:48 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Geeklife]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[batterie optimisation]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[powertop]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=4331</guid>
		<description><![CDATA[Le but de cet article est de faire économiser de la batterie à votre laptop sous Linux. Avec quelques tips, c&#8217;est possible très facilement. On peut gagner 1h de batterie avec quelques méthodes simples. Follow the white rabbit Outils indispensable Déjà il va vous falloir vous munir d&#8217;un outils indispensable développé par intel nommé : [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/' rel='bookmark' title='Retrouver un laptop volé'>Retrouver un laptop volé</a></li>
<li><a href='http://geekfault.org/2009/08/14/faille-critique-dans-tous-les-noyaux-linux/' rel='bookmark' title='Faille critique dans tous les noyaux Linux'>Faille critique dans tous les noyaux Linux</a></li>
<li><a href='http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/' rel='bookmark' title='Partager la connexion de son laptop'>Partager la connexion de son laptop</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/attachment/308/" rel="attachment wp-att-4334"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/05/308-300x300.jpg" alt="" title="308" width="300" height="300" class="alignleft size-medium wp-image-4334" /></a></p>
<p>Le but de cet article est de faire économiser de la batterie à votre laptop sous Linux.</p>
<p>Avec quelques tips, c&#8217;est possible très facilement.<br />
On peut  gagner 1h de batterie avec quelques méthodes simples.</p>
<p>Follow the white rabbit</p>
<p><!--more--></p>
<h3> Outils indispensable </h3>
<p>Déjà il va vous falloir vous munir d&#8217;un outils indispensable développé par intel nommé : powertop<br />
Le gars qui cherche à économiser de la batterie et qui n&#8217;a pas installé powertop c&#8217;est vraiment un gros naz <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><code><br />
emerge -av powertop<br />
</code></p>
<p><code><br />
apt-get install powertop<br />
</code></p>
<p>Lancez powertop en root, et suivez le guide, tout est expliqué directement dans l&#8217;interface ncurses.</p>
<h3> Désactive le superflu dans l&#8217;bios petite loutre </h3>
<p>Il convient d&#8217;aller désactiver les choses dont vous ne vous servez jamais dans le bios.<br />
Exemple :</p>
<li>Désactiver le bluetooth</li>
<li>Désactiver le wake on lan sur eth0</li>
<li>Désactiver l&#8217;extension Wimax de votre carte wifi.</li>
<li>Désactiver le lecteur CD si vous ne vous en servez jamais.</li>
<p>Etc &#8230; etc &#8230;</p>
<p>ça permet d&#8217;économiser déjà pas mal de batterie.</p>
<h3> Modifies ton sysctl.conf petit castor </h3>
<p>Quelques réglages à avoir dans le sysctl.conf</p>
<p>modifier : /etc/sysctl.conf<br />
<code><br />
vm.laptop_mode = 5  # Activating laptop mode, power friendly I/Os<br />
vm.dirty_writeback_centisecs = 2000<br />
kernel.nmi_watchdog = 0<br />
vm.swappiness = 5<br />
</code></p>
<p>Le writeback du cache du système de fichiers sur le disque dur se fait assez fréquemment. Pour réduire la consommation, il suffit de le faire moins fréquemment.<br />
Par defaut le writeback est à 500</p>
<h3> fout ça dans ton /sys petit scarabée </h3>
<p><code><br />
echo 10 > /sys/module/snd_hda_intel/parameters/power_save<br />
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy<br />
echo min_power > /sys/class/scsi_host/host1/link_power_management_policy<br />
</code></p>
<h3> Actives le power management dans ta carte wifi Intel petite fourmis des bois </h3>
<p><code><br />
iwconfig wlan0 power on<br />
</code></p>
<h3>  Mon petit script à la con, lis ça petit phasmid </h3>
<p><code></p>
<p>#!/bin/bash</p>
<p>#echo 5 > /sys/bus/pci/drivers/iwlagn/*/power_level<br />
echo 5 > /sys/bus/pci/drivers/iwlagn/0000\:03\:00.0/power_level</p>
<p>echo 1 > /sys/devices/system/cpu/sched_mc_power_savings</p>
<p>echo 1500 > /proc/sys/vm/dirty_writeback_centisecs</p>
<p>echo 5 > /proc/sys/vm/laptop_mode</p>
<p># passe en economie d'energie la carte son<br />
echo 10 > /sys/module/snd_hda_intel/parameters/power_save<br />
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy<br />
# desactive le wake on lan sur eth0<br />
ethtool -s eth0 wol d<br />
# met la luminosité à 30%<br />
xbacklight -set 30<br />
# Passe le frequency scaling en "on demand"<br />
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor</p>
<p>## Spécifique thinkpad x300 ou equivalent<br />
# desactive le bluetooth<br />
echo disable > /proc/acpi/ibm/bluetooth<br />
# desactive le modem 3G<br />
echo disable > /proc/acpi/ibm/wan<br />
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy</p>
<p></code></p>
<p>Le paramètre sched_smt_power_savings sous /sys/devices/system/cpu/ contrôle le multithreading. Par défaut, il vaut 0 pour des performances optimales<br />
Mettez le à 1 pour avoir plus de batterie, ainsi vous ne vous servirez du second cœur de votre cpu qu&#8217;en cas de besoin ! :</p>
<p><code><br />
echo 1 > /sys/devices/system/cpu/sched_smt_power_savings<br />
</code></p>
<h3> Conclusion </h3>
<p>Cet article n&#8217;est pas complet car j&#8217;ai également des optimisations dans mon kernel, mais ça peut déjà vous donner une bonne base de travail.<br />
N&#8217;hésitez pas à faire des bench avec powertop à CHAQUE modification pour voir ce que ça change sur votre consommation en Watts.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/' rel='bookmark' title='Retrouver un laptop volé'>Retrouver un laptop volé</a></li>
<li><a href='http://geekfault.org/2009/08/14/faille-critique-dans-tous-les-noyaux-linux/' rel='bookmark' title='Faille critique dans tous les noyaux Linux'>Faille critique dans tous les noyaux Linux</a></li>
<li><a href='http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/' rel='bookmark' title='Partager la connexion de son laptop'>Partager la connexion de son laptop</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Photoshop CS5 content aware fill VS Gimp resynthesizer</title>
		<link>http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/</link>
		<comments>http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 14:23:24 +0000</pubDate>
		<dc:creator>madx</dc:creator>
				<category><![CDATA[comparatif]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[content aware fill]]></category>
		<category><![CDATA[gimp]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[resynthesizer]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=3638</guid>
		<description><![CDATA[Vous en avez forcement entendu parler, le content aware fill est la feature du futur Photoshop CS5 : on dessine vaguement les contours de l&#8217;objet qu&#8217;on veux enlever d&#8217;une photo, on lance la fonction et *pouf* l&#8217;objet disparait en laissant place à ce qui se trouve derrière. Vous avez aussi surement vu les démonstrations sur [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/06/13/larche-des-mascotes-du-libre/' rel='bookmark' title='L&#8217;arche des mascottes du Libre'>L&#8217;arche des mascottes du Libre</a></li>
<li><a href='http://geekfault.org/2009/08/19/echinus-wm/' rel='bookmark' title='Echinus, un WM, simplement.'>Echinus, un WM, simplement.</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction--><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/04/resynthesizer_title21.png" alt="resynthesizer_title" title="resynthesizer_title" width="200" height="300" class="alignleft" /></p>
<p>Vous en avez forcement entendu parler, le <i>content aware fill</i> est <b>la</b> feature du futur <strong>Photoshop CS5</strong> : on dessine vaguement les <strong>contours de l&#8217;objet</strong> qu&#8217;on veux enlever d&#8217;une photo, on lance la fonction et <b>*pouf*</b> l&#8217;objet disparait en laissant place à ce qui se trouve derrière.</p>
<p>Vous avez aussi surement vu les <a href="http://www.youtube.com/watch?v=NH0aEp1oDOI">démonstrations</a> sur youtube et les réactions de fanboys Photoshop telles que &#8220;<i>That&#8217;s beyond insane!</i>&#8220;, &#8220;<i>BLACK MAGIC</i>&#8220;, &#8220;<i>I will buy this over everything i&#8217;ve ever wanted ever</i>&#8220;, ou encore &#8220;<i>And then i, JIZZED, IN MY PANTS</i>&#8221; (tous absolument véridiques).</p>
<p>On ne vas pas s&#8217;éterniser sur le comment (de l&#8217;extrapolation mixé avec du random) mais sur le fait que <strong>Gimp possède cette fonction depuis &#8230; 2004</strong>. Oui, 6 ans.</p>
<p><!--more--></p>
<h3>6 ans après, Photoshop rattrape Gimp</h3>
<p>Au cas ou vous n&#8217;auriez pas vu les démonstrations et pour bien comprendre de quoi on parle, rien de mieux qu&#8217;une photo, ou deux pour le coup.</p>
<div style="text-align:center">
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Avant</th>
</tr>
<tr>
<td>
<a href="http://geekfault.org/wp-content/uploads/2010/04/rust_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/rust_original-300x225.jpg" alt="Original" title="Original" width="300" height="225" class="aligncenter size-medium wp-image-3434" /></a></td>
</tr>
</table>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Après</th>
</tr>
<tr>
<td>
<a href="http://geekfault.org/wp-content/uploads/2010/04/rust_gimp.jpg" title="Résultat" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/rust_gimp-300x225.png" alt="Gimp" title="Résultat" width="300" height="225" class="aligncenter size-medium wp-image-3435" /></a></td>
</tr>
</table>
</div>
<p>A noter que cette fonction n&#8217;est pas de série dans Gimp, mais sous forme de plug-in (en licence GPL), disponible dans toutes les bonnes distributions sous le nom de <i>gimp-resynthesizer</i> ou quelque chose de proche.</p>
<p><!--nextpage--></p>
<p><!--pagetitle:Démo avec gimp--></p>
<h3>Mais comment on s&#8217;en sert ?</h3>
<p>L&#8217;utilisation est enfantine, vraiment, un enfant de 5 ans pourrais le faire.</p>
<div style="text-align:center">
<b>1/ Dessiner vaguement les contour de l&#8217;objet à effacer, ici un employé d&#8217;Adobe</b><br />
<a href="http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/step2/" rel="attachment wp-att-3471"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/step2-580x491.png" alt="" title="step2" width="580" height="491" class="aligncenter size-large wp-image-3471" /></a><br />
<b>2/ Filters > Enhance > Heal selection<b><br />
<a href="http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/step3/" rel="attachment wp-att-3474"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/step3.png" alt="" title="step3" width="677" height="574" class="aligncenter size-full wp-image-3474" /></a><br />
<b>3/ Texture radius, laissez la valeur par défaut qui marche très bien dans 95% des cas</b><br />
<a href="http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/step4/" rel="attachment wp-att-3482"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/step4-580x491.png" alt="" title="step4" width="580" height="491" class="aligncenter size-large wp-image-3482" /></a><br />
<b>4/ BAM !</b><br />
<a href="http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/step6/" rel="attachment wp-att-3481"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/step6-580x491.png" alt="" title="step6" width="580" height="491" class="aligncenter size-large wp-image-3481" /></a>
</div>
<p><!--nextpage--></p>
<p><!--pagetitle:Gallerie Photoshop VS Gimp--></p>
<h3>Photoshop VS Gimp</h3>
<p>Tout ca c&#8217;est bien gentil, mais les fanboys Photoshop dirons fatalement &#8220;<i>Oui mais Photoshop il le fait beaucoup mieux, c&#8217;est des années de développement par une des boites les &#8230; bla bla bla &#8230; industrie spatiale &#8230; bla bla bla &#8230; dieu lui même ne &#8230; bla bla bla &#8230; leur donnerais un rein si &#8230; bla bla, etc &#8230;</i>&#8221; (je coupe parce que les fanboys, une fois lancés on les arrête plus).</p>
<p>J&#8217;ai donc sillonné le web pour trouver <a href="http://www.extremetech.com/article2/0,2845,2362423,00.asp">des</a> <a href="http://blogs.adobe.com/rjacquez/2010/04/content-aware_fill_in_photosho.html">exemples</a> du <i>content aware fill</i> de Photoshop CS5 et j&#8217;ai juste utilisé Gimp pour faire à peut près la même chose.</p>
<p>Je précise que ma connaissance de Gimp est très basique et que je n&#8217;ai utilisé que le lasso et le resynthesizer. Parfois j&#8217;ai ressayé le resynthesizer plusieurs fois, le résultat étant basé sur pas mal d&#8217;aléatoire, la qualité peut varier d&#8217;un essais à l&#8217;autre.</p>
<div style="text-align:center">
<h4>Bunker</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/bunker_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/bunker_original-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3495" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/bunker_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/bunker_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3496" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/bunker_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/bunker_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3498" /></a></td>
</tr>
</table>
<h4>Démolition</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/demolition_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/demolition_original-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3531" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/demolition_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/demolition_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3532" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/demolition_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/demolition_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3533" /></a></td>
</tr>
</table>
<h4>Canards</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/ducks_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/ducks_original-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3538" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/ducks_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/ducks_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3539" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/ducks_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/ducks_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3540" /></a></td>
</tr>
</table>
<h4>Voiture rouillée</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/rust_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/rust_original1-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3545" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/rust_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/rust_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3546" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/rust_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/rust_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3547" /></a></td>
</tr>
</table>
<h4>Glace</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/ice_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/ice_original-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3550" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/ice_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/ice_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3551" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/ice_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/ice_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3552" /></a></td>
</tr>
</table>
<h4>Mare</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/pond_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/pond_original-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3557" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/pond_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/pond_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3558" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/pond_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/pond_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3559" /></a></td>
</tr>
</table>
<h4>Marché</h4>
<table style="margin-left:auto; margin-right:auto;">
<tr>
<th style="text-align:center">Original</th>
<th style="text-align:center">Photoshop</th>
<th style="text-align:center">Gimp</th>
</tr>
<tr>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/market_original.jpg" title="Original" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/market_original-150x150.jpg" alt="Original" title="Original" width="150" height="150" class="aligncenter size-thumbnail wp-image-3562" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/market_cs5.jpg" title="Photoshop" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/market_cs5-150x150.jpg" alt="Photoshop" title="Photoshop" width="150" height="150" class="aligncenter size-thumbnail wp-image-3563" /></a></td>
<td><a href="http://geekfault.org/wp-content/uploads/2010/04/market_gimp.jpg" title="Gimp" rel="lightbox.3638"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/market_gimp-150x150.jpg" alt="Gimp" title="Gimp" width="150" height="150" class="aligncenter size-thumbnail wp-image-3564" /></a></td>
</tr>
</table>
</div>
<p><!--nextpage--></p>
<p><!--pagetitle:Bonus--></p>
<h3>Bonus !</h3>
<p>On a vu qu&#8217;on pouvais enlever des objets, mais pour le même prix, on peux aussi faire d&#8217;autres trucs (qu&#8217;on verra peut être dans CS6, qui sait)</p>
<p>Dans l&#8217;exemple ci dessous, où vous aurez bien sur tous reconnus le jeu <a href="http://fr.wikipedia.org/wiki/Total_Annihilation">Total Annihilation</a>, j&#8217;ai sélectionné toute l&#8217;interface et je l&#8217;ai resynthesized, le résultat est impressionnant pour un algorithme automatique.</p>
<p style="text-align:center"><i>(cliquez à vos risques et périls pour voir en detail, les images sont en 1600&#215;1200)</i><br />
<a target='_blank' href="http://geekfault.org/wp-content/uploads/2010/04/totala_quadruple_vulcan.jpg"><img src="http://geekfault.org/wp-content/uploads/2010/04/totala_quadruple_vulcan-580x435.jpg" width="580" height="435" /></a><br />
<a target='_blank' href="http://geekfault.org/wp-content/uploads/2010/04/totala_quadruple_vulcan_r.jpg"><img src="http://geekfault.org/wp-content/uploads/2010/04/totala_quadruple_vulcan_r-580x435.jpg" width="580" height="435" /></a></p>
<p><!--nextpage--></p>
<p><!--pagetitle:Conclusion--></p>
<h3>Conclusion</h3>
<p>Ma conclusion tient en quatre mots : <b>Adobe can suck it !</b> <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/06/13/larche-des-mascotes-du-libre/' rel='bookmark' title='L&#8217;arche des mascottes du Libre'>L&#8217;arche des mascottes du Libre</a></li>
<li><a href='http://geekfault.org/2009/08/19/echinus-wm/' rel='bookmark' title='Echinus, un WM, simplement.'>Echinus, un WM, simplement.</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/04/24/photoshop-cs5-content-aware-fill-vs-gimp-resynthesizer/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Filtrer ses mails ! Un cauchemard !</title>
		<link>http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/</link>
		<comments>http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 17:18:10 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2808</guid>
		<description><![CDATA[Le but de ce howto est de vous présenter ma façon de filtrer mes mails de tous mes comptes pop/imap, afin de les centraliser dans une même interface. Afin de filtrer les mails qui arrivent nous allons utiliser &#8220;sieve&#8221; un merveilleux ajout disponible dans le packet dovecot, qui permet de filtrer les messages directement AVANT [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/04/09/maildir-mbox-la-migration/' rel='bookmark' title='Maildir mbox &#8211; La migration'>Maildir mbox &#8211; La migration</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction et objectifs--><a href="http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/casserole3/" rel="attachment wp-att-2887"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/04/casserole3-300x200.jpg" alt="" title="casserole3" width="300" height="200" class="alignleft size-medium wp-image-2887" /></a>Le but de ce howto est de vous présenter <strong>ma</strong> façon de filtrer mes mails de tous mes comptes pop/imap, afin de les centraliser dans une même interface.<br />
Afin de filtrer les mails qui arrivent nous allons utiliser &#8220;sieve&#8221; un merveilleux ajout disponible dans le packet dovecot, qui permet de filtrer les messages directement <strong> AVANT </strong> qu&#8217;ils arrivent dans la casserole IMAP.<br />
<!--more--></p>
<h3>Les mails sans rangement c&#8217;est immangeable, ceci est une petite recette d&#8217;assaisonnement </h3>
<p>Centraliser mes mails m&#8217;apporte plusieurs choses :<br />
<strong><br />
- Faciliter le filtrage.<br />
- Faciliter le rangement dans différents dossiers.<br />
- Effectuer un backup de tous mes comptes IMAP/POP.<br />
- Faire apprendre à mon antispam mes différents réglages.<br />
</strong></p>
<p>Cette recette ne couvre pas l&#8217;installation de Apache + php + MySQL<br />
Nous supposons ici que vous savez faire ce type d&#8217;installation.</p>
<p>Cette recette ne couvre pas non plus l&#8217;utilisation de mutt (je mettrai tout de même en ligne ma configuration).<br />
En effet, l&#8217;utilisation de mutt mérite un article à lui seul !</p>
<p>Postulat1 : Les mails seront stockés dans cette recette ici : /home/utilisateur/.maildir<br />
Postulat2 : Nous supposons que vous avez plusieurs comptes email à rapatrier.<br />
Postulat3 : Nous supposons que vous disposez d&#8217;une machine GNU/Linux sous Gentoo et/ou Debian pour effectuer ce howto.<br />
Postulat4 : Nous supposons que vous stockez vos mails dans le format Maildir ! (se reporter au Howto Sur la conversion mbox => maildir en cas de soucis) Allez lire : <a href="http://geekfault.org/2010/04/09/maildir-mbox-la-migration/">http://geekfault.org/2010/04/09/maildir-mbox-la-migration/</a></p>
<h3> Résultat une fois que la recette est en place </h3>
<p><a href="http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/filtermail-2/" rel="attachment wp-att-2969"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/filtermail1.jpeg" alt="" title="filtermail" width="662" height="945" class="aligncenter size-full wp-image-2969" /></a></p>
<p><!--nextpage--><!--pagetitle:Aux fourneaux !-->  </p>
<h3> Logiciels nécessaires pour &#8220;MailFiltrés&#8221; </h3>
<li> MySQL-5 </li>
<li> Apache-2.2 </li>
<li> Php-5.2 </li>
<li> RoundCube + plugins &#8220;Report Junk&#8221; et &#8220;Manage Sieve&#8221; </li>
<li> Dovecot (pop/imap) + Sieve + ManageSieve </li>
<li> SpamAssassin + MySQL </li>
<li> Postfix </li>
<li> mutt + sidebar </li>
<li> Fetchmail </li>
<h3> Remplir la casserole </h3>
<p>Pour trier le manger dans la casserole nous devons tout d&#8217;abord la remplir !</p>
<p>Pour effectuer ce howto il nous faut tout d&#8217;abord des emails.<br />
Il va donc nous falloir configurer fetchmail.<br />
Attention ne pas lancer fetchmail de suite ! Sinon vous risquez de rapatrier les emails sans même les faire passer dans la moulinette avant de les déposer dans les bons compartiments de la casserole !</p>
<h4> Récupérer les ingrédients et les mettre dans la casserole </h4>
<p>* Gentoo<br />
<code><br />
USE="ssl" emerge -av net-mail/fetchmail<br />
</code></p>
<p>* Debian<br />
<code><br />
apt-get install fetchmail<br />
</code></p>
<p>* .fetchmailrc</p>
<p><code><br />
## les mails mondomaine.info<br />
poll pop.geekmx.org<br />
protocol pop3<br />
username bragon@mondomaine.info<br />
password ""<br />
#mda '/usr/bin/procmail -d %T' ### petit commentaire pour vous faire voir comment faire pour faire passer vos mails dans la moulinette procmail avant de les donner à manger à dovecot !!<br />
mda "/usr/libexec/dovecot/deliver"<br />
is 'bragon' here ### Nom de l'utilisateur local pour déposer les mails.<br />
keep ### Laisses mes mails sur l'imap distant ! Mechant !</p>
<p>## ensuite on recup les mails geeknode<br />
poll pop.geekmx.org<br />
protocol pop3<br />
username utilisateurvalide@g33kn0de.org<br />
password ""<br />
mda "/usr/libexec/dovecot/deliver"<br />
is 'bragon' here<br />
keep</p>
<p>## apres on passe au compte gmail<br />
poll imap.gmail.com<br />
proto imap<br />
user "bragon.unuser@gmail.com"<br />
password ""<br />
ssl<br />
keep<br />
mda "/usr/libexec/dovecot/deliver"<br />
is 'bragon' here</p>
<p>## On synchronise le compte blackberry pour virification<br />
#poll imap.geekmx.org<br />
#proto imap<br />
#user "unuser@undomaine.info"<br />
#password ""<br />
#ssl<br />
#keep<br />
#mda "/usr/libexec/dovecot/deliver"<br />
#is 'bragon' here</p>
<p>## preparation pour les mails EW<br />
#<br />
poll trucmail.euro-web.fr<br />
protocol imap<br />
username "truc.plop[_at_]euro-web[point_dot]fr" ## Mettre ici une vraie adresse mail<br />
password "" ## Mettre ici un vrai mot de passe.<br />
folder 'INBOX.sdf' ## Recupère spécifiquement un dossier IMAP<br />
folder 'INBOX.task'<br />
folder 'INBOX.sysadmin'<br />
folder 'INBOX.netavous'<br />
folder 'INBOX.frnog'<br />
folder 'INBOX.TODO'<br />
folder 'INBOX' ## Recupère le dossier imap principal<br />
keep ## Laisse les mails sur le serveur<br />
mda "/usr/libexec/dovecot/deliver" ## Utilise dovecot en tant que deliver local<br />
is 'bragon' here ## Mets les mails dans le répertoire courant de l'utilisateur bragon.</p>
<p></code></p>
<h3> Filtrer / Découper  les ingrédients Juste avant la casserole </h3>
<p><code><br />
emerge -av =net-mail/dovecot-1.2.6<br />
</code><br />
ou<br />
<code><br />
apt-get install dovecot  # Je crois que de base dans Debian dovecot est compilé avec sieve.<br />
</code></p>
<p>* Flag de compilation nécéssaire pour dovecot : &#8220;berkdb bzip2 ipv6 maildir managesieve mysql pam sieve ssl zlib -caps -cydir -dbox -doc -kerberos -ldap -mbox -postgres -sqlite -suid -vpopmail&#8221;</p>
<p>Via ces directives de compilation dovecot supporte maintenant les fichiers de filtrage &#8220;.sieve&#8221;<br />
Il vous suffit de déposer n&#8217;importe quel fichier sieve dans /home/utilisateur/sieve pour que dovecot utilise vos filtres.</p>
<p>Voici un exemple de syntaxe :  tamereenshortsurunCISCO7603.sieve</p>
<p><code><br />
# rule:[cron]<br />
elsif anyof (header :contains "Subject" "root@gn",<br />
        header :contains "From" "root@astaroth",<br />
        header :contains "From" "bragon@tobold",<br />
        header :contains "From" "root@aec-ri.com",<br />
        header :contains "From" "root@mail.geekmx.org",<br />
        header :contains "From" "root@bender")<br />
{<br />
        fileinto "cron";<br />
}<br />
</code></p>
<p>Second exemple de syntaxe : tonpapaesttellementvieuxque&#8230;.sieve</p>
<p><code><br />
# rule:[SYSADMIN ML]<br />
elsif anyof (header :contains "From" "sysadmin@domaine.net",<br />
        header :contains "Subject" "Liste Franophone Administrateur systeme")<br />
{<br />
        fileinto "boulot.sysadmin";<br />
        redirect "smartphone[at]bragon[point]info"; ## Mettre ici une adresse mail valide<br />
}<br />
# rule:[Debian Security Advertise]<br />
elsif anyof (header :contains "Subject" "[SECURITY][DSA")<br />
{<br />
        fileinto "boulot.dsa";<br />
}<br />
</code></p>
<h3> Virer les ingrédients moisis en les mettant dans un compartiment de la casserole </h3>
<p><code><br />
emerge -av =mail-filter/spamassassin-3.2.5-r2<br />
</code></p>
<p>* Flag de compilation nécessaire pour spamassassin : "berkdb ipv6 mysql ssl -doc -ldap -postgres -qmail -sqlite -tools"</p>
<p>* Voir les configurations de spamd ci-après.</p>
<h3> Renvoyer certains ingrédients au cuisinier </h3>
<p><code><br />
emerge -av =mail-mta/postfix-2.6.5<br />
</code></p>
<p>* Flag de compilation nécessaire pour postfix : "dovecot-sasl ipv6 mysql pam ssl -cdb -hardened -ldap -mbox -nis -postgres -sasl (-selinux) -vda"</p>
<p>* Voir le fichier de configuration main.cf ci-après.</p>
<p>Le postfix me sert uniquement pour transférer certaines régles sieve vers une autre adresse mail.<br />
Cette adresse mail est popé via mon smartphone.<br />
Ainsi je reçois <strong> N'importe ou </strong> Certains mails qui "matchent" une régle de filtrage spécifique !</p>
<p>Le postfix peut me servir également à faire réply dans l'interface roundcube ou mutt . (mais je l'utilise rarement car ce postfix n'a ni domainkeys ni spf pour mes domaines pro / geeknode / gmail) Et le mail bien que délivré arrivera dans la boite à spam du correspondant fréquemment.</p>
<p>Ce postfix n'est là que pour dépanner, et pour transférer mes mails super important via mon smartphone.</p>
<h3> Faire mijoter à feu doux ! </h3>
<p>Placer ce crontab pour l'utilisateur qui va devoir récupérer les mails.</p>
<p><code><br />
crontab -e<br />
*/10 * * * * /usr/bin/fetchmail > /dev/null 2>&#038;1<br />
</code></p>
<p>Les mails vont donc être récupérés toutes les dix minutes, et directement déposés dans le MDA ( Mail Délivery Agent).<br />
Le MDA de ma configuration fetchmail étant dovecot, et dovecot lisant tous mes filtres, cela devrait bien se passer <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><!--nextpage--><!--pagetitle:Exemple de présentation--></p>
<h3> Présentation sur un joli plat du résultat. </h3>

<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/mailfilter_indesirable/' title='MailFilter_Indésirable'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/MailFilter_Indésirable-150x150.png" class="attachment-thumbnail" alt="MailFilter_Indésirable" title="MailFilter_Indésirable" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/spam_roundcube/' title='Spam_Roundcube'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/Spam_Roundcube-150x150.png" class="attachment-thumbnail" alt="Spam_Roundcube" title="Spam_Roundcube" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/ultimate_mailfilter_roundcube-3/' title='Ultimate_Mailfilter_Roundcube'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/Ultimate_Mailfilter_Roundcube2-150x150.png" class="attachment-thumbnail" alt="Ultimate_Mailfilter_Roundcube" title="Ultimate_Mailfilter_Roundcube" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/filtre_roundcube/' title='Filtre_Roundcube'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/Filtre_Roundcube-150x150.png" class="attachment-thumbnail" alt="Filtre_Roundcube" title="Filtre_Roundcube" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/casserole3/' title='casserole3'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/casserole3-150x150.jpg" class="attachment-thumbnail" alt="casserole3" title="casserole3" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/mutt-screenshot/' title='mutt-screenshot'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/mutt-screenshot-150x150.png" class="attachment-thumbnail" alt="mutt-screenshot" title="mutt-screenshot" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/filtermail-2/' title='filtermail'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/filtermail1-150x150.jpg" class="attachment-thumbnail" alt="filtermail" title="filtermail" /></a>

<p><!--nextpage--><!--pagetitle:Finition et garnitures--></p>
<h3> La configuration de dovecot aka "Le déversoir"</h3>
<p><code><br />
base_dir = /var/run/dovecot/<br />
protocols = imap managesieve ## Je suppose que vous n'avez pas besoin de pop pour votre interface centralisé.<br />
shutdown_clients = yes<br />
disable_plaintext_auth = no<br />
ssl = no       ## ce howto ne couvre pas la sécurité de l'imap</p>
<p># Si vous désirez utiliser seulement TLS<br />
## Pour le moment ce HowTo n'a pas été pensé pour le SSL, mais on peut très facilement l'ajouter.<br />
## disable_plaintext_auth = yes<br />
## ssl = yes<br />
## ssl_cert_file = /var/qmail/control/servercert.pem<br />
## ssl_key_file = /var/qmail/control/servercert.pem</p>
<p>login_dir = /var/run/dovecot/login<br />
login_process_per_connection = yes<br />
login_greeting = Imap ready.<br />
mail_debug = no<br />
mail_uid = 1000<br />
mail_gid = 100<br />
first_valid_uid = 1000 ### Premier utilisateur système<br />
last_valid_uid = 1001 ### Vous pouvez mettre en place cet imap pour plus de deux utilisateurs en augmentant cette directive.<br />
first_valid_gid = 100<br />
last_valid_gid = 1000<br />
mail_location = maildir:~/.maildir ### Expliqué dans le postulat de l'introduction</p>
<p>## on active le deliver local</p>
<p>protocol lda {<br />
  postmaster_address = bragon[at_at_at]bragon[dot_point_dot]info ### Mettre ici une adresse mail valide !!!<br />
  # remember to give proper permissions for these files as well<br />
  log_path = /var/log/dovecot-deliver-errors.log<br />
  info_log_path = /var/log/dovecot-deliver.log<br />
  #auth_socket_path = /var/run/dovecot/auth-master<br />
mail_plugins = sieve<br />
}</p>
<p>## On log correctement<br />
##<br />
## Logging<br />
##<br />
# Log file to use for error messages, instead of sending them to syslog.<br />
# /dev/stderr can be used to log into stderr.<br />
log_path = /var/log/dovecot/error</p>
<p># Log file to use for informational and debug messages.<br />
# Default is the same as log_path.<br />
info_log_path = /var/log/dovecot/info</p>
<p>protocol imap {<br />
         listen = 81.93.247.***:143 ### Mettre l'ip de la machine ici<br />
        login_executable = /usr/libexec/dovecot/imap-login<br />
        mail_max_userip_connections = 10<br />
        mail_plugin_dir = /usr/lib/dovecot/imap<br />
        mail_plugins = quota imap_quota<br />
}</p>
<p>plugin {<br />
        quota = maildir:User quota<br />
          # Used by both the Sieve plugin and the ManageSieve protocol<br />
          sieve=~/.dovecot.sieve ## Répertoire ou serons stockés les regles de filtrage de dovecot.<br />
          sieve_dir=~/sieve         ## Répertoire ou serons stockés les regles de filtrage de l'utilisateur  (elles sont lu par dovecot)        </p>
<p>}</p>
<p>protocol managesieve {<br />
  # Specify an alternative address:port the daemon must listen on<br />
  # (default: *:2000)<br />
listen = 81.93.247.***:2000 ## ip de votre box à mettre ici</p>
<p>  managesieve_logout_format = bytes ( in=%i : out=%o )<br />
}</p>
<p>plugin {<br />
  # Used by both the Sieve plugin and the ManageSieve protocol<br />
  sieve=~/.dovecot.sieve<br />
  sieve_dir=~/sieve<br />
}</p>
<p>auth_verbose = yes<br />
auth_debug = yes</p>
<p>auth default {                  ### On se log ici directement à la base d'utilisateur unix du système courant.<br />
        mechanisms = plain login</p>
<p>passdb pam { args = "*"<br />
}</p>
<p>userdb passwd { args = blocking=yes </p>
<p>}</p>
<p>}</p>
<p></code></p>
<h3> Configuration de .muttrc aka le rouleau à patisserie </h3>
<p>Placer ce fichier .muttrc à la racine du répertoire utilisateur : </p>
<p><code></p>
<p>### pour voir les sous dossiers</p>
<p>set spoolfile="/home/bragon/.maildir/"<br />
set folder="/home/bragon/.maildir/"<br />
set mask="!^\\.[^.]"<br />
set record="+.Sent"<br />
set postponed="+.Drafts"</p>
<p>mailboxes ! + `\<br />
for file in /home/bragon/.maildir/.*; do \<br />
  box=$(basename "$file"); \<br />
  if [ ! "$box" = '.' -a ! "$box" = '..' -a ! "$box" = '.customflags' \<br />
      -a ! "$box" = '.subscriptions' ]; then \<br />
    echo -n "\"+$box\" "; \<br />
  fi; \<br />
done`</p>
<p>### activer la sidebar de mutt<br />
macro index c "<change-folder>?<toggle-mailboxes>" "open a different folder"<br />
macro pager c "<change-folder>?<toggle-mailboxes>" "open a different folder"</p>
<p># Sidebar<br />
set sidebar_visible=yes<br />
set sidebar_width=50<br />
color sidebar_new yellow default</p>
<p># ctrl-n, ctrl-p to select next, prev folder<br />
# ctrl-o to open selected folder<br />
bind index \Cp sidebar-prev<br />
bind index \Cn sidebar-next<br />
bind index \Cb sidebar-open<br />
bind pager \Cp sidebar-prev<br />
bind pager \Cn sidebar-next<br />
bind pager \Cb sidebar-open</p>
<p>## mon editeur est emacs et je t'emmerde !!!<br />
set editor="emacs -nw"</p>
<p></code></p>
<h3> Configuration de postfix aka "Le renvoyeur" </h3>
<p><code><br />
queue_directory = /var/spool/postfix<br />
command_directory = /usr/sbin<br />
daemon_directory = //usr/lib/postfix<br />
data_directory = /var/lib/postfix<br />
mail_owner = postfix<br />
myhostname = tobold.mondomaine.info<br />
mydomain = tobold.mondomaine.info<br />
myorigin = $myhostname</p>
<p>unknown_local_recipient_reject_code = 550</p>
<p>debug_peer_level = 2</p>
<p>debugger_command =<br />
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin<br />
         ddd $daemon_directory/$process_name $process_id &#038; sleep 5</p>
<p>sendmail_path = /usr/sbin/sendmail</p>
<p>newaliases_path = /usr/bin/newaliases</p>
<p>mailq_path = /usr/bin/mailq</p>
<p>setgid_group = postdrop</p>
<p>html_directory = /usr/share/doc/postfix-2.6.5/html</p>
<p>manpage_directory = /usr/share/man</p>
<p>sample_directory = /etc/postfix</p>
<p>readme_directory = /usr/share/doc/postfix-2.6.5/readme<br />
home_mailbox = .maildir/</p>
<p></code></p>
<h3> Configuration SpamAssassin/MySQL </h3>
<p>* Afin de générer un bon local.cf utilisez : <a href="http://www.yrex.com/spam/spamconfig.php">http://www.yrex.com/spam/spamconfig.php</a></p>
<p>* Insérer dans une base MySQL<br />
<code><br />
CREATE TABLE userpref (<br />
username varchar(100) NOT NULL default '',<br />
preference varchar(50) NOT NULL default '',<br />
value varchar(100) NOT NULL default '',<br />
prefid int(11) NOT NULL auto_increment,<br />
PRIMARY KEY (prefid),<br />
KEY username (username)<br />
);<br />
  CREATE TABLE bayes_expire (<br />
          id                    int(11)         NOT NULL default '0',<br />
          runtime               int(11)         NOT NULL default '0',<br />
          KEY bayes_expire_idx1 (id)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE bayes_global_vars (<br />
          variable              varchar(30)     NOT NULL default '',<br />
          value                 varchar(200)    NOT NULL default '',<br />
          PRIMARY KEY           (variable)<br />
          ) TYPE=MyISAM;</p>
<p>      INSERT INTO bayes_global_vars VALUES ('VERSION','3');</p>
<p>      CREATE TABLE bayes_seen (<br />
          id                    int(11)         NOT NULL default '0',<br />
          msgid                 varchar(200) binary NOT NULL default '',<br />
          flag                  char(1)         NOT NULL default '',<br />
          PRIMARY KEY           (id,msgid)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE bayes_token (<br />
          id                    int(11)         NOT NULL default '0',<br />
          token                 char(5)         NOT NULL default '',<br />
          spam_count            int(11)         NOT NULL default '0',<br />
          ham_count             int(11)         NOT NULL default '0',<br />
          atime                 int(11)         NOT NULL default '0',<br />
          PRIMARY KEY           (id, token),<br />
          INDEX (id, atime)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE bayes_vars (<br />
          id                    int(11)         NOT NULL AUTO_INCREMENT,<br />
          username              varchar(200)    NOT NULL default '',<br />
          spam_count            int(11)         NOT NULL default '0',<br />
          ham_count             int(11)         NOT NULL default '0',<br />
          token_count           int(11)         NOT NULL default '0',<br />
          last_expire           int(11)         NOT NULL default '0',<br />
          last_atime_delta      int(11)         NOT NULL default '0',<br />
          last_expire_reduce    int(11)         NOT NULL default '0',<br />
          oldest_token_age      int(11)         NOT NULL default '2147483647',<br />
          newest_token_age      int(11)         NOT NULL default '0',<br />
          PRIMARY KEY           (id),<br />
          UNIQUE bayes_vars_idx1 (username)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE awl (<br />
          username              varchar(100)    NOT NULL default '',<br />
          email                 varchar(200)    NOT NULL default '',<br />
          ip                    varchar(10)     NOT NULL default '',<br />
          count                 int(11)         default '0',<br />
          totscore              float           default '0',<br />
          PRIMARY KEY           (username,email,ip)<br />
          ) TYPE=MyISAM;</p>
<p></code></p>
<p>* secret.cf</p>
<p><code></p>
<p>##(Tell Spamassassin to use MySQL for bayes data<br />
bayes_store_module              Mail::SpamAssassin::BayesStore::SQL<br />
bayes_sql_dsn                   DBI:mysql:sa:localhost:3306<br />
bayes_sql_username              sa<br />
bayes_sql_password              somepwd</p>
<p>##(Tell Spamassassin to use MySQL for AWL data<br />
auto_whitelist_factory          Mail::SpamAssassin::SQLBasedAddrList<br />
user_awl_dsn                    DBI:mysql:sa:localhost:3306<br />
user_awl_sql_username           sa<br />
user_awl_sql_password           somepwd</p>
<p></code></p>
<p>* local.cf</p>
<p><code><br />
# SpamAssassin config file for version 3.x<br />
# NOTE: NOT COMPATIBLE WITH VERSIONS 2.5 or 2.6<br />
# See http://www.yrex.com/spam/spamconfig25.php for earlier versions<br />
# Generated by http://www.yrex.com/spam/spamconfig.php (version 1.50)</p>
<p># How many hits before a message is considered spam.<br />
required_score           5.0</p>
<p># Change the subject of suspected spam<br />
rewrite_header subject         [SPAM]</p>
<p># Encapsulate spam in an attachment (0=no, 1=yes, 2=safe)<br />
report_safe             1</p>
<p># Enable the Bayes system<br />
use_bayes               1</p>
<p># Enable Bayes auto-learning<br />
bayes_auto_learn              1</p>
<p># Enable or disable network checks<br />
skip_rbl_checks         0<br />
use_razor2              1<br />
#use_dcc                 1<br />
use_pyzor               1</p>
<p># Mail using languages used in these country codes will not be marked<br />
# as being possibly spam in a foreign language.<br />
# - english french<br />
#ok_languages            en fr </p>
<p># Mail using locales used in these country codes will not be marked<br />
# as being possibly spam in a foreign language.<br />
#ok_locales              en fr<br />
</code></p>
<h3> Ajouter les clous de girofles dans RoundCube </h3>
<p><a href="http://www.tehinterweb.co.uk/roundcube/#pisieverules">http://www.tehinterweb.co.uk/roundcube/#pisieverules</a></p>
<p>Il vous faut installer les plugins ManageSieve et ReportasJunk<br />
Suivez la documentation officielle, elle s'en sortira mieux que moi afin de vous expliquer tout cela.</p>
<ul>
<li><a href=http://www.tehinterweb.co.uk/roundcube/plugins/sieverules.README.txt>http://www.tehinterweb.co.uk/roundcube/plugins/sieverules.README.txt</a></li>
<li><a href=http://www.tehinterweb.co.uk/roundcube/plugins/sauserprefs.README.txt>http://www.tehinterweb.co.uk/roundcube/plugins/sauserprefs.README.txt</a></li>
<li><a href=http://www.tehinterweb.co.uk/roundcube/plugins/markasjunk2.README.txt>http://www.tehinterweb.co.uk/roundcube/plugins/markasjunk2.README.txt</a></li>
</ul>
<h3> Laissez refroidir </h3>
<p><strong>Voilà c'est prêt  !</strong></p>
<p>Awesome non ?</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/04/09/maildir-mbox-la-migration/' rel='bookmark' title='Maildir mbox &#8211; La migration'>Maildir mbox &#8211; La migration</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Maildir mbox &#8211; La migration</title>
		<link>http://geekfault.org/2010/04/09/maildir-mbox-la-migration/</link>
		<comments>http://geekfault.org/2010/04/09/maildir-mbox-la-migration/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 17:16:18 +0000</pubDate>
		<dc:creator>pistache</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[maildir]]></category>
		<category><![CDATA[mbox]]></category>
		<category><![CDATA[pam_mail.so]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2754</guid>
		<description><![CDATA[Traditionellement, les serveurs UNIX utilisent mbox pour stocker les mails. Pour mbox, chaque dossier de votre boîte mail (Reçu, Envoyés, Archive, Corbeille, etc) est representé par un fichier, ou tout les mails sont enregistrés à la suite, séparés par une ligne vide. Ce format, très simple à utiliser, pose de nombreux problèmes. Premièrement, on ne [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2009/05/19/migration-de-geekfault/' rel='bookmark' title='Migration de Geekfault'>Migration de Geekfault</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2010/04/illustration-maildir.jpg" title="illustration-maildir" rel="lightbox.2754"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/04/illustration-maildir-300x270.jpg" alt="" title="illustration-maildir" width="300" height="270" class="alignleft size-medium wp-image-3040" /></a>
<p>Traditionellement, les serveurs UNIX utilisent <a href="http://fr.wikipedia.org/wiki/Mbox">mbox</a> pour stocker les mails. Pour mbox, chaque dossier de votre boîte mail (Reçu, Envoyés, Archive, Corbeille, etc) est representé par un fichier, ou tout les mails sont enregistrés à la suite, séparés par une ligne vide.</p>
</p>
<p>Ce format, très simple à utiliser, pose de nombreux problèmes. Premièrement, on ne peut pas faire d&#8217;accès parallèles, même sur des mails différents, puisque le fichier est le même (problème de verrou). Deuxièment, les serveurs POP/IMAP (comme Dovecot) ont souvent un support limité de mbox. Dovecot est obligé de placer un mail &#8220;interne&#8221; dans la boîte, pour garder l&#8217;arborescence et l&#8217;organisation des dossiers. Courier ne supporte pas mbox.</p>
<p>L&#8217;avantage principal de mbox, c&#8217;est le fait qu&#8217;il soit très répandu. Il est supporté par tout les MUA (mailutils/mail, bsd-mailx, mutt, emacs, Kmail, thunderbird, evolution). Mais les problèmes récurrents qu&#8217;il pose ont poussé <a href="http://en.wikipedia.org/wiki/Daniel_J._Bernstein">le principal développeur de qmail</a> a créer un nouveau format : <a href="http://fr.wikipedia.org/wiki/Maildir">Maildir</a>.</p>
<p><!--more--></p>
<h3>Maildir</h3>
<p>Avec Maildir, chaque mail est <b>un</b> fichier, et chaque dossier de la boîte mail, un répertoire. Attention, c&#8217;est un peu plus compliqué que ça. Les mails ne sont pas directement enregistrés dans <b>boîte/mail</b> :</p>
<ul>
<li>Le <a href="http://fr.wikipedia.org/wiki/Mail_Delivery_Agent">MDA</a> enregistre le mail dans <b>boîte/tmp/unique</b> (&#8220;unique&#8221; est un nom de fichier unique généré a partir de données pseudo-aléatoires)</li>
<li>Une fois que le mail est écrit, le MDA le déplace dans <b>boîte/new/unique</b></li>
<li>Le <a href="http://fr.wikipedia.org/wiki/Mail_User_Agent">MUA</a> le déplace dans <b>boîte/cur/unique</b> une fois qu&#8217;il voit qu&#8217;un nouveau message est arrivé dans <b>boîte/new/</b></li>
</ul>
<p><b>Pourquoi ? </b>Ce comportement est utilisé pour éviter que le MUA voit un mail incomplet (car le MDA est encore en train de l&#8217;écrire), ce qui peut arriver si la machine est surchargée, si le Maildir est sur un serveur distant (NFS,FTP), voire même si le mail est gigantesque.</p>
<h3>Maildir et procmail</h3>
<p>Le but de cet article n&#8217;est pas d&#8217;expliquer comment configurer un MDA pour qu&#8217;il enregistre les mails en Maildir,  mais malgré tout je fais une petite encartade pour les gens qui utilisent procmail. Le code suivant dans /etc/procmailrc permet de dire à procmail de mettre <b>par défaut</b> (cela peut donc être supplanté par une directive contraire dans le ~/.procmailrc) :<br />
<code>DEFAULT=$HOME/Maildir/</code><br />
Aussi, si vous n&#8217;utilisez pas encore procmail je vous conseille d&#8217;y migrer rapidement :</p>
<ul>
<li>Plus besoin de toucher à la configuration du MTA pour changer les méthodes de livraison des mails</li>
<li>Les utilisateurs peuvent écrire leurs propres règles pour leurs boîtes mails (pour avoir des boîtes séparées pour certains mails, par exemple)</li>
<li>Si vous changez de MTA vous pouvez toujours garder la même configuration, à condition de dire à votre MTA d&#8217;utiliser procmail</li>
</ul>
<h3>Configuration de mutt</h3>
<p>mutt gère très bien les Maildirs, mais il faut le configurer. Dans le .muttrc, rajoutez :<br />
<code><br />
# pour dire à mutt de que mbox est un Maildir<br />
set mbox_type=Maildir<br />
# pour dire à mutt que les chemins relatifs (avec +) sont dans "~/Maildir/"<br />
set folder="~/Maildir/"<br />
# pour dire à mutt que les mails arrivent dans Maildir/<br />
set spoolfile="~/Maildir/"<br />
# les mails archivés (pas nouveau) seront envoyés dans +Mailbox<br />
# (+ est remplacé par la variable folder).<br />
set mbox="+Mailbox"</p>
<p># remplacez par votre propre choix (ce n'est pas un tutorial de la configuration de mutt)<br />
# on indique à mutt d'envoyer les mails de ~/Maildir/ dans la boîte indiquée par la variable "mbox"<br />
set move="ask-yes"</p>
<p># ce code montre la puissance de mutt (inclure des scripts shell dans sa configuration)<br />
# ouvrir tous les dossiers qu'il trouve dans ~/Maildir/<br />
mailboxes ! + `\<br />
for file in ~/Maildir/.*; do \<br />
  box=$(basename "$file"); \<br />
  if [ ! "$box" = '.' -a ! "$box" = '..' -a ! "$box" = '.customflags' \<br />
      -a ! "$box" = '.subscriptions' ]; then \<br />
    echo -n "\"+$box\" "; \<br />
  fi; \<br />
done`<br />
</code><br />
On note qu&#8217;il faut créer les boîtes mails dans ~/Maildir/, ainsi que le Maildir en lui-même (même si procmail peut le créer tout seul, et que si vous avez converti vos mbox il existe déjà). On va créer la boîtes &#8220;Mailbox&#8221; (utilisé par mutt avec <i>set mbox=&#8221;+Mailbox&#8221;</i>).<br />
<code><br />
cd # on se place dans $HOME<br />
mkdir Maildir # on crée Maildir (ça sera peut-être déjà fait)<br />
cd Maildir<br />
mkdir cur new tmp # on crée une arborescence Maildir<br />
mkdir .Mailbox # on crée une nouvelle boite<br />
cd .Mailbox<br />
mkdir cur new tmp<br />
</code><br />
On note que :</p>
<ul>
<li>La boîte principale, ou les mails entrants sont enregistrés par le MDA, est à la racine du Maildir</li>
<li>Les sous-dossiers de la boîte, <b>commencent tous par un .</b></li>
</ul>
<p>Vous pouvez maintenant démarrer mutt, et exploiter votre mbox (pour naviguer dans les boîtes, utilisez &#8220;y&#8221;)
</p>
<h3>Migrer des boîtes mbox en Maildir</h3>
<p>Pour migrer les mbox en Maildir, le script <a href="http://perfectmaildir.home-dn.net/">perfect_maildir.pl</a> est parfait, et son usage est simple :<br />
<code>./perfect_maildir.pl path_to_Maildir/ < mbox</code></p>
<h3>pam_mail.so et You have new mail</h3>
<p>Vous avez peut-être déjà remarqué que quand vous vous ouvrez un shell, vous avez un beau message "You have new mail" qui indique de nouveaux mail dans /var/mail/$USER. Cet avertissement est geré par pam_mail.so, un module de PAM qui permet de faire ça. Si on utilise Maildir il est intéressant de dire à pam_mail.so d'aller vérifier les nouveaux mails dans le Maildir. Cette configuration se fait dans <b>/etc/pam.d/</b> sous Debian et Gentoo. Tout d'abord éditer le fichier <b>login</b>, et trouver cette ligne :<br />
<code><br />
session    optional   pam_mail.so standard<br />
</code><br />
Remplacer par :<br />
<code><br />
session optional pam_mail.so standard dir=~/Maildir<br />
</code><br />
Je recommande d'effectuer aussi la manipulation pour le fichier "ssh".</p>
<p>Normalement PAM devra modifier la variable d'environnement MAIL à Maildir/, si par hasard ce comportement ne marche pas (en fonction de la configuration de PAM) il y a toujours moyen d'ajouter<br />
<code>MAIL=Maildir/</code><br />
dans /etc/environment.</p>
<h3>Faire fonctionner la commande "mail"</h3>
<p>La commande mail est le moyen le plus simple de lire ses mails sous unix. Vous constaterez probablement que votre commande mail ne marche plus (même avec MAIL=Maildir/), car elle ne supporte pas Maildir. Mais il y a plusieurs versions de cette commande, la plus répandue étant celle de bsd (bsd-mailx avec Debian). Je vous conseille d'installer <a href="http://heirloom.sourceforge.net/mailx.html">une autre version</a>, appellée "heirloom-mailx" (sous Debian), voire "nail", qui supporte très bien les Maildir.<br />
<img src="http://pistaches.net/~pistache/stuff/maildir.png"/></p>
<h3>Liens relatifs</h3>
<ul>
<li><a href="http://wiki.dovecot.org/MailLocation/Maildir">Configurer Maildir et Dovecot</a></li>
<li><a href="http://linux.die.net/man/8/pam_mail">man pam_mail</a></li>
<li><a href="http://cr.yp.to/proto/maildir.html">la première spécification de Maildir</a> (a changé depuis)</li>
</ul>
<p>Ironiquement j'ai trouvé beaucoup de mes renseignements sur <a href="http://bugs.debian.org/">bugs.debian.org</a> :</p>
<ul>
<li><a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=421010">libpam-modules: pam_mail doesn't set MAIL enviroment variable when .hushlogin exists.</a></li>
<li><a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=109279">login.defs: QMAIL_DIR problems</a></li>
</ul>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2009/05/19/migration-de-geekfault/' rel='bookmark' title='Migration de Geekfault'>Migration de Geekfault</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/04/09/maildir-mbox-la-migration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>L&#8217;email : un vilain petit cafardeur !</title>
		<link>http://geekfault.org/2010/03/13/lemail-un-vilain-petit-cafardeur/</link>
		<comments>http://geekfault.org/2010/03/13/lemail-un-vilain-petit-cafardeur/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 18:49:26 +0000</pubDate>
		<dc:creator>ckg</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[mta]]></category>
		<category><![CDATA[mua]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[thunderbird]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2436</guid>
		<description><![CDATA[Votre architecture réseau ne regarde pas vos correspondants, cependant vous avez donné aux plus curieux d’entre eux quelques bribes d’information à votre insu : ip interne, dns interne, chaîne de mta…

Nous allons voir un exemple récent, déterminer quels logiciels font les pies et finir par quelques réglages de ces derniers.
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/02/24/denyhosts-pour-empecher-le-bruteforce-sur-ssh/' rel='bookmark' title='DenyHosts pour empêcher le bruteforce sur SSH'>DenyHosts pour empêcher le bruteforce sur SSH</a></li>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction et lecture des headers d'un email--><br />
<a href="http://geekfault.org/wp-content/uploads/2010/03/geekfault-art01.png" title="geekfault-art01" rel="lightbox.2436"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/03/geekfault-art01.png" alt="geekfault inspectant un email" title="geekfault-art01" width="128" height="128" class="alignleft size-full wp-image-2473" /></a>Votre architecture réseau ne regarde pas vos correspondants, cependant vous avez donné aux plus curieux d&#8217;entre eux quelques bribes d&#8217;information à votre insu : ip interne, <abbr title="Domain Name Server">dns</abbr> interne, chaîne de <abbr title="Mail Transfert Agent">mta</abbr>&#8230;</p>
<p>Nous allons voir un exemple récent, déterminer quels logiciels font les pies et finir par quelques réglages de ces derniers.<br />
<!--more--></p>
<h3></h3>
<p>Quelques définitions rapides :</p>
<ul>
<li>MUA : Mail User Agent, c&#8217;est l&#8217;agent coté utilisateur. Thunderbird que j&#8217;évoque dans cet article, Evolution, KMail, mutt, mail et sendEmail sont quelques exemples.</li>
<li>MTA : Mail Transfer Agent, le serveur smtp. Sendmail que j&#8217;évoque dans cet article, postfix, qmail, exim sont les plus connus, mais ssmtp et OpenSMTPd sont des alternatives montant en puissance.</li>
<li>MDA : Mail Delivery Agent, c&#8217;est le logiciel qui remet les emails dans les comptes utilisateurs. Procmail est le plus connu.</li>
<li>RFC : Request For Comment, un texte de référence. Le texte nous intéressant ici est la RFC 5321 <a href="http://tools.ietf.org/html/rfc5321">http://tools.ietf.org/html/rfc5321</a></li>
</ul>
<h3></h3>
<h1>Cas concret</h1>
<p></br><br />
Décortiquons ensemble un email envoyé par un de mes fournisseurs. Il n&#8217;y a rien d&#8217;exceptionnel dans cette section qui n&#8217;ait déjà été maintes fois abordé dans la presse informatique vulgarisée.</p>
<h4>L&#8217;email en question</h4>
<p><code>From - Mon Jan 18 17:07:56 2010<br />
(…)<br />
Return-Path: <monsieur@correspondant.fr><br />
Received: from smtp20.msg.oleane.net (smtp20.mail.priv [172.17.20.138])<br />
        by mail03.msg.oleane.net with LMTP id H7q6321w;<br />
        Mon, 18 Jan 2010 17:07:52 +0100<br />
Received: from smtp20.msg.oleane.net (localhost [127.0.0.1])<br />
        by smtp20.msg.oleane.net (MX-ASAV) with ESMTP id o0IG7pk9022097;<br />
        Mon, 18 Jan 2010 17:07:51 +0100<br />
Received: from abc.correspondant.com (abc.correspondant.com [81.211.11.111])<br />
        by smtp20.msg.oleane.net (MX) with ESMTP id o0IG7ndC021964;<br />
        Mon, 18 Jan 2010 17:07:49 +0100<br />
Received: from PC1.correspondant.fr ([192.168.69.50])<br />
        (authenticated user monsieur@correspondant.fr)<br />
        by abc.correspondant.com (Kerio MailServer 6.7.0 patch 1);<br />
        Mon, 18 Jan 2010 17:10:15 +0100<br />
Subject: RE: GeekFault<br />
Date: Mon, 18 Jan 2010 17:07:48 +0100<br />
Message-ID: <xxxx@correspondant.fr><br />
In-Reply-To: <xxxxdestinataire.fr><br />
From: "Monsieur CORRESPONDANT" <monsieur@correspondant.fr><br />
Sender: "Monsieur CORRESPONDANT" <monsieur@correspondant.fr><br />
To: "Monsieur DESTINATAIRE" <monsieur@destinataire.fr><br />
Importance: Normal<br />
X-Priority: 3<br />
X-MSMail-Priority: Normal<br />
User-Agent: Kerio Outlook Connector (6.7.0.7695)<br />
MIME-Version: 1.0<br />
X-MimeOLE: Produced by Kerio Outlook Connector (6.7.0.7695)<br />
Content-Type: multipart/mixed; boundary=MIXED-MIME-355913937-24773-delim<br />
X-Spam-Flag: NO<br />
X-PMX-Spam: Probability=13%<br />
X-Spam-Level: X<br />
X-PFSI-Info: PMX 5.5.5.374460, Antispam-Engine: 2.7.1.369594, Antispam-Data: 2010.1.18.155416 (no virus found)</code></p>
<h3>Comment le lire ?</h3>
<p>La <a href="http://tools.ietf.org/html/rfc5321#section-4.4">RFC 5321 section 4.4</a> précise que le Mail Transfert Agent (mta) se DOIT, et avant toutes autres opérations de transfert, d&#8217;inclure une trace « Received » ou « timestamp ». L&#8217;ordre des « Received » se lit donc de bas en haut.</p>
<p>Nous apprenons que notre « correspondant » a émis son email depuis son « PC1 » 192.168.69.50 (IPV4) . On devine aisément son système d&#8217;exploitation, c&#8217;est celui qui donne des noms de machines en majuscules. </p>
<h3>Jouons au jean-kevin</h3>
<p>On déduit du mix « .fr »/ « .com » que notre sujet d&#8217;étude n&#8217;est pas très familier avec les dns et c&#8217;est sans doute la raison pour laquelle il n&#8217;en a pas en interne. Il n&#8217;est pas non plus familier avec <abbr title="Network Time Protocol">ntp</abbr>. Visiblement notre sujet d&#8217;étude n&#8217;est pas familier avec certains services réseaux.</p>
<p>Attardons nous quelques secondes sur le 3ème mta rencontré, OBS utilise un mta du nom de « localhost [127.0.0.1] », nous sommes dans une application minimaliste de la section 4.4 de la RFC 5321. Pourquoi être resté a minima, contrairement aux autres mta ? Le terme MX-ASAV nous donne un indice : AntiSpam AntiVirus &#8230; ce mta est vraisemblablement inaccessible il n&#8217;y a aucune raison de fournir plus de détails.</p>
<h3>Que retenir de cette partie ?</h3>
<p><em>Nous n&#8217;avons donc rien appris de bien intéressant car nous ne cherchons rien de particulier. Détails à priori inintéressants, mais avez-vous vraiment envie d&#8217;en faire profiter le reste de vos correspondants ?</em></p>
<p><!--nextpage--><!--pagetitle:Dompter son MTA--><br />
<a href="http://geekfault.org/wp-content/uploads/2010/03/logosendmail.png" title="sendmail-logo" rel="lightbox.2436"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/03/logosendmail.png" alt="" title="sendmail-logo" width="149" height="82" class="aligncenter size-full wp-image-2482" /></a></p>
<h3></h3>
<h1>Dompter son Mail Transfer Agent (<a href="http://fr.wikipedia.org/wiki/Mail_Transfer_Agent">mta</a>)</h1>
<p></br><br />
Je suis un utilisateur satisfait de sendmail (<a href="www.sendmail.org">www.sendmail.org</a>) depuis quelques années maintenant. Je vais donc vous parler de ce <del>magnifique et ô combien trollifère</del> mta.</p>
<h3>Quel périmètre et que dit la RFC ?</h3>
<p>Comme précisé dans la première partie, notre périmètre d&#8217;action est restreint : du <abbr title="Mail User Agent">(mua)</abbr> jusqu&#8217;au dernier mta sous notre responsabilité.<br />
La RFC précise que pour des raisons de traçabilité un mta ne doit pas procéder à de la destruction de « Received »/« timestamp ». Comprenez qu&#8217;en prenant la responsabilité de couper une partie de la chaîne de réponse vous devez vous engager à garder une trace dans votre système.</p>
<h3></h3>
<h4>Ne modifiez rien si :</h4>
<ul>
<li>Vous n&#8217;avez pas d&#8217;outils de logs fiables</li>
<li>Vous n&#8217;êtes pas sûr de toutes les machines en amont de votre mta</li>
<li>Vous êtes backup-MX</li>
<li>Vous n&#8217;êtes pas sûr de toutes les utilisateurs en amont de votre mta</li>
<li>Vous n&#8217;êtes pas sûr de toutes les logiciels en amont de votre mta</li>
<li>Vous n&#8217;êtes pas sûr de ce que votre mta va supprimer, il serait DOMMAGE de supprimer des informations concernant les mails entrants (ceux venant du Great Ternet)</li>
</ul>
<p>Pesez-bien cette décision, agissez en responsable. Si vous êtes sous <a href="www.freebsd.org">FreeBSD</a> vous pouvez recevoir une synthèse par mail quotidienne et la coupler à un daemon syslog sur une autre machine.</p>
<h3>`hostname`.cf &amp; `hostname`.mc</h3>
<p>Nous allons jeter un oeil dans la configuration de sendmail (`hostname`.cf ) au niveau de la gestion du HEADER. Nous trouvons sans difficulté ceci :<br />
<code>HReceived: $?sfrom $s $.$?_($?s$|from $.$_)<br />
$.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.)<br />
$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}<br />
(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u for $u; $|;<br />
$.$b$?g<br />
(envelope-from $g)$.</code></p>
<p>Que nous pouvons réduire à :<br />
<code>HReceived: id $i; $b</code></p>
<p>Modifier `hostname`.cf est généralement une mauvaise idée, sendmail vous propose l&#8217;utilisation de macro m4, autant en profiter. Voici donc la correspondance dans `hostname`.mc<br />
<code>define(`confRECEIVED_HEADER',`id $i; $b')</code></p>
<h3>Comparaisons de configurations</h3>
<p>Commençons par faire un email vide de test :<br />
<code>$ cat mail.txt<br />
helo toi<br />
mail from:<qualite@bidule.ath.cx><br />
rcpt to:<x@machin.ath.cx><br />
data<br />
subject:Ok<br />
ok<br />
.</code><br />
Que nous utilisons comme ceci :<br />
<code>$ nc localhost 25 < mail.txt</code><br />
Avec un sendmail en configuration par défaut, le correspondant reçoit :<br />
<code>Received: by machin.ath.cx  with ESMTP id o2BK1BKu031170; Thu, 11 Mar 2010 21:01:11 +0100<br />
Received: from toi (localhost [127.0.0.1])<br />
        by bidule.ath.cx (8.14.3/8.14.3) with SMTP id o2BK13FB043209<br />
        for <x@machin.ath.cx>; Thu, 11 Mar 2010 21:01:03 +0100 (CET)<br />
        (envelope­ from qualite@bidule.ath.cx)<br />
Date: Thu, 11 Mar 2010 21:01:03 +0100 (CET)<br />
From: Qualite <qualite@bidule.ath.cx><br />
Message­Id: <201003112001.o2BK13FB043209@bidule.ath.cx><br />
</code><br />
Avec le nouveau HReceived nous obtenons :<br />
<code>Return­Path: <qualite@bidule.ath.cx><br />
Received: by machin.ath.cx  with ESMTP id o2BJxVBK031165; Thu, 11 Mar 2010 20:59:31 +0100<br />
Received: id o2BJxOpC042941; Thu, 11 Mar 2010 20:59:24 +0100 (CET)<br />
Date: Thu, 11 Mar 2010 20:59:24 +0100 (CET)<br />
From: Qualite <qualite@bidule.ath.cx><br />
</code></p>
<h3>Que retenir de cette partie ?</h3>
<p><em>Vous conviendrez que notre mta est devenu moins bavard.<br />
Nous avons ici abordé sendmail, mais il existe par exemple postfix qui, dixit <a href="http://geekfault.org/author/bragon/">bragon</a>, "Tout ce que fait sendmail, postfix le fait en mieux". Je pense que vous n'aurez pas de difficulté a porter cette modification dans le conf de postfix, peut-être que <a href="http://geekfault.org/author/LeCoyote/">LeCoyote</a> nous honorera d'un commentaire à ce sujet <img src='http://geekfault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
Autre point à noter, il n'a été question QUE de `hostname`.(mc|cf) et pas de `hostname`.submit.(mc|cf) qui n'est en aucune manière concerné par cet article.</em><br />
<!--nextpage--><br />
<!--pagetitle:Dompter son MUA--></p>
<h3></h3>
<h1>Dompter son Mail User Agent (<a href="http://fr.wikipedia.org/wiki/Mail_User_Agent">mua</a>)</h1>
<p></br><br />
Dompter son mta, c'est bien, mais que fait-on lorsque nous n'avons pas la main dessus ?</p>
<h3>Thunderbird</h3>
<p>Mes mails pros sont gérés par <abbr title="Mandarine Business Service">OBS</abbr> et j'utilise comme mua Thunderbird qui a la mauvaise idée de transmettre l'ip ou le hostname lors du HELO (ou EHLO) ce qui donne par exemple ceci :<br />
<code>Received: from [192.168.5.12] (*.fr [217.1.2.3]) (authenticated)<br />
by smtp05.msg.oleane.net (MTA) with ESMTP id o1QB4km3010343<br />
for <x@truc.org> Fri, 26 Feb 2010 12:04:46 +0100</code><br />
Que l'on peut transformer en :<br />
<code>Received: from truc.org (*.fr [217.1.2.3]) (authenticated)<br />
by smtp06.msg.oleane.net (MTA) with ESMTP id o2BGsI5N007702<br />
for <x@truc.org> Thu, 11 Mar 2010 17:54:18 +0100</code><br />
Grâce à la clef de configuration de type string :<br />
<code>mail.smtpserver.smtp1.hello_argument</code><br />
Que vous devrez créer dans le about:config du Thunderbird, et ceci pour tous vos mail.smtpserver bien entendu.</p>
<h3>Que retenir de cette partie ?</h3>
<p><em>Votre mua aussi peut donner des informations à votre insu. C'est inutilement idiot, une ip locale ne peut en aucun cas être une information pertinente pour le mta à l'autre bout de la connexion.</em><br />
<!--nextpage--><br />
<!--pagetitle:Conclusion--></p>
<h3></h3>
<h1>Conclusion</h1>
<p></br><br />
De manière générale les réglages par défaut des applications concernées ne sont pas pertinents sur le point abordé dans ce billet. Il est très important de pouvoir changer comme bon nous semble certains réglages que nous trouvons inappropriés.<br />
Très logiquement, les mua/mta à sources fermées, certains cités de-ci de-là dans l'article, ne sont pas les plus simples à dompter.<br />
Certains réglages ne sont pas prévus par les développeurs initiaux et ne le seront probablement jamais. Utilisons-en d'autres qui nous garantissent la liberté n°1 ! </p>
<h3>Les mauvaises pratiques chez les autres mua/mta populaires</h3>
<p>Ils sont bavards :</p>
<ul>
<li>Mail.app</li>
<li>Entourage</li>
<li>Live Mail</li>
<li>
<li>Yahoo</li>
</ul>
<h3>Les bonnes pratiques chez les autres mua/mta populaires</h3>
<p>Ils sont discrets :</p>
<ul>
<li>Gmail</li>
<li>mutt</li>
<li>Thunderbird en changeant un réglage</ul>
<p><em>Cette liste n'est pas exhaustive, il s'agit des logiciels utilisés ou par moi ou par mes correspondants.</em></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/02/24/denyhosts-pour-empecher-le-bruteforce-sur-ssh/' rel='bookmark' title='DenyHosts pour empêcher le bruteforce sur SSH'>DenyHosts pour empêcher le bruteforce sur SSH</a></li>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/03/13/lemail-un-vilain-petit-cafardeur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx et python &#8211; le perfect setup</title>
		<link>http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/</link>
		<comments>http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 11:47:32 +0000</pubDate>
		<dc:creator>pistache</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[gunicorn]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wsgi]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2272</guid>
		<description><![CDATA[Python est devenu assez à la mode, pour le développement web, ces dernières années avec l&#8217;arrivée de frameworks web comme Django, Pylons et web.py. On le voit souvent utilisé sur apache2, avec mod_python, ou sur des serveurs Python dediés à ça (CherryPy, etc) Je cherche depuis longtemps un moyen de faire du Python sur HTTP. [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/' rel='bookmark' title='Devbox KVM+Libvirt perfect setup.'>Devbox KVM+Libvirt perfect setup.</a></li>
<li><a href='http://geekfault.org/2010/04/09/maildir-mbox-la-migration/' rel='bookmark' title='Maildir mbox &#8211; La migration'>Maildir mbox &#8211; La migration</a></li>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/nginx_logo/" rel="attachment wp-att-2406"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/03/nginx_logo-300x206.gif" alt="" title="nginx_logo" width="300" height="206" class="alignleft size-medium wp-image-2406" /></a></p>
<p><strong>Python est devenu assez à la mode, pour le développement web, ces dernières années avec l&#8217;arrivée de frameworks web comme </strong><a title="Django" href="http://djangoproject.com/"><strong>Django</strong></a><strong>, </strong><a title="Pylons" href="http://pylonshq.com/"><strong>Pylons</strong></a><strong> et </strong><a title="webpy" href="http://webpy.org"><strong>web.py</strong></a><strong>. On le voit souvent utilisé sur apache2, avec mod_python, ou sur des serveurs Python dediés à ça (CherryPy, etc)</strong></p>
<p>Je cherche depuis longtemps un moyen de faire du Python sur HTTP. J&#8217;ai mis pas mal de temps mais je pense avoir trouvé une configuration sympa.</p>
<p>Je vous propose ici d&#8217;essayer <a title="nginx" href="http://nginx.org/">nginx</a>, un serveur HTTP (entre autres), très performant et  <strong>beaucoup</strong> plus léger/rapide que apache2. Il est très efficace pour faire du reverse-proxy (c&#8217;est à dire être utilisé en frontal/load-balancer devant un serveur HTTP, et lui transmettre les requêtes en faisant du cache et le cas échéant du load-balancing).</p>
<p><!--more--></p>
<p>La configuration de nginx est très simple, et la documentation est très complète : <a href="http://wiki.nginx.org/Main">wiki.nginx.org</a>. L&#8217;installation de nginx est facile, il est inclus dans la plupart des distributions actuelles, donc à vos emerge/apt-get.</p>
<p> <code>apt-get install nginx</code>
<p>nginx ne gère pas le python nativement. Il y a plusieurs solutions cependant :</p>
<ul>
<li>Faire du proxy vers un serveur qui gère le python, comme apache2. On perd la majeure partie de l&#8217;intêret de nginx, cependant.</li>
<li>Faire du FastCGI vers un serveur FastCGI. C&#8217;est la solution la plus fréquente, en utilisant fcgi.py ou <a title="Flup" href="http://trac.saddi.com/flup">flup</a></li>
<li>Faire du WSGI. C&#8217;est un protocole de communication entre serveurs HTTP et applications Python. Solution aussi assez fréquente.</li>
<li>Faire du proxy vers un serveur qui gère le python de manière <strong>native</strong>. C&#8217;est une solution moins fréquente mais très pratique.</li>
</ul>
<p>Avant même de penser à choisir une des solutions ici présentes, il faut les comparer entre elles.</p>
<p><strong><br /> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h4>nginx =&gt; apache2 =&gt; python</h4>
<p>L&#8217;ennui de cette solution c&#8217;est : apache2. Utiliser nginx pour forwarder à apache2 est presque inutile. Presque ? Oui, car on peut dire à nginx de garder les fichiers statiques pour lui. Cependant, le gain de cette méthode est assez minime, et ce n&#8217;est intéressant que pour faire du load balancing sur plusieurs apaches.</p>
<p><strong><br /> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h4>le FastCGI</h4>
<p>FastCGI c&#8217;est une norme, pour faire traiter du contenu dynamique par une application externe. Donc le support du FastCGI tout seul est inutile, il faut aussi quelque chose pour gérer derrière.</p>
<p>J&#8217;ai testé <a href="http://trac.saddi.com/flup">flup</a>, un framework Python léger. Le résultat : ça marche, méééé c&#8217;est lent. Je tournais autour de 35/50 requêtes par seconde, et l&#8217;utilisation en mémoire vive était phénoménale, 150 mégas pour 1000 requêtes. (bien sur ces chiffres n&#8217;auront de valeur que lorsqu&#8217;ils seront comparés aux autres).</p>
<p>FastCGI est sympa pour faire une configuration &#8220;vite&#8221;. C&#8217;est d&#8217;ailleurs la seule solution viable, à ma connaissance pour faire du PHP sur nginx, à part le proxy vers un autre serveur HTTP.</p>
<p>Bref, FastCGI ne m&#8217;a pas convaincu. Et mes tests avec les autres solutions m&#8217;ont donné raison. Toujours avec moi ? On passe au WSGI !</p>
<p><strong><br /> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h4>le WSGI</h4>
<p> <em>WSGI is the Web Server Gateway Interface. It is a specification for web servers and application servers to communicate with web applications (though it can also be used for more than that). It is a Python standard, described in detail in PEP 333.</em>
<p>le WSGI, c&#8217;est le standard pour le Web Python. Il n&#8217;y a qu&#8217;à consulter <a title="WSGI" href="http://wsgi.org">wsgi.org</a> pour se rendre compte que c&#8217;est tout un monde. Il consiste en un ensemble de normes (nom de variables, par exemple) pour permettre au serveur d&#8217;exécuter  un fichier codé en Python.</p>
<p>Le standard pour le WSGI sur les serveurs HTTP grand public, c&#8217;est le mod_wsgi de apache2. Il a été porté sur nginx, mais c &#8216;est une #@!## infame, qui ne marche que sur les vieilles versions et qui n&#8217;a pas été mise à jour depuis bientôt 2 ans et demi (cf. <a href="http://hg.mperillo.ath.cx/nginx/mod_wsgi/">hg.mperillo.ath.cx/nginx/mod_wsgi/</a>). J&#8217;ai obtenu des performances d&#8217;environ 133 requêtes par seconde avec, ce qui est déjà mieux que FastCGI, pour ceux qui suivent <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Par contre, dès que j&#8217;ai voulu avancer un peu avec (toucher à la configuration, et surtout, passer à une version supérieure de nginx), j&#8217;ai été confronté à ses limites (et aux #@!## de faute de frappe dans le code source)</p>
<p>D&#8217;autant plus que l&#8217;auteur de mod_wsgi pour apache2 et l&#8217;auteur de mod_wsgi pour nginx reconnaissent ses limitations, respectivement <a href="http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html">ici</a> et <a href="http://blogg.ingspree.net/blog/2007/11/24/nginx-mod-wsgi-vs-fastcgi/">ici</a>. Le premier document est très intéressant pour comprendre un peu l&#8217;architecture de nginx et ses différences avec apache2. En effet, le mod_wsgi pour nginx a été codé à partir de celui pour apache2, et il subit les différences d&#8217;architecture entre apache2 et nginx.</p>
<p>Attention, je ne remet absolument pas à cause le WSGI ici, juste l&#8217;implémentation de mod_wsgi dans nginx.</p>
<p>Parce que justement, un projet super récent, c&#8217;est&#8230;. uWSGI ! uWSGI sert à combler le manque de support du WSGI dans nginx, en rajoutant un module, meilleur que mod_wsgi. Il nécessite donc de recompiler nginx. Il y a encore une autre solution, nommée gunicorn, qui ne nécessite pas de recompiler nginx. C&#8217;est un serveur HTTP minimal qui gère le WSGI nativement. uwsgi offre plus de fonctionalitées que gunicorn, mais gunicorn a l&#8217;air assez dynamique (dans le développement), et est plus facile à utiliser (pas de recompilation, support de Django natif). Au niveau des performances, je me suis amusé à faire cette comparaison :</p>
<p> </p>
<p><div class="wp-caption alignnone" style="width: 434px"><img title="Comparaison des performances entre uwsgi et gunicorn en fonction du niveau de parallélisme" src="http://pistaches.net/~pistache/stuff/patch1.png" alt="Comparaison des performances entre uwsgi et gunicorn en fonction du niveau de parallélisme" width="424" height="313" /><p class="wp-caption-text">Comparaison des performances entre uwsgi et gunicorn en fonction du niveau de parallélisme</p></div>
<p> </p>
<p>On constate plusieurs choses :</p>
<ul>
<li>Les performances augmentent en utilisant 2 workers à la place d&#8217;un, mais au delà, le gain est ridicule, puis inexistant. Le nombre 2 est dépendant du nombre de coeurs de la machine, et le nombre de workers à utiliser ne sera pas le même sous un bi-socket octocore, bien évidemment. Les meilleures performances étaient obtenues en utilisant gunicorn+3workers.</li>
<li>La différence est vraiment minime, gunicorn est en moyenne légèrement au dessus de uwsgi.</li>
<li>Ces tests sont réalisés sur une application <strong>Django</strong>. Les performances augmentent en utilisant des frameworks plus légers comme <strong>web.py</strong>, bien évidemment.</li>
</ul>
<p>uwsgi dispose de plus de fonctionalitées, comme par exemple une interface d&#8217;administration de serveur wsgi dans Django. Je vais ici expliquer l&#8217;installation et la configuration des deux solutions.</p>
<p>Ici je vais couvrir l&#8217;installation et la configuration de uwsgi et gunicorn avec <strong>Django</strong> et <strong>web.py</strong>, même si c&#8217;est bien sur adaptable avec d&#8217;autres frameworks supportant le <strong>wsgi </strong>(liste sur <a href="http://wsgi.org/wsgi/Frameworks">wsgi.org/wsgi/Frameworks</a>).</p>
<h3>Installation et configuration de <strong>uwsgi</strong></h3>
<p><strong><br /> </strong></p>
<h4>Sous Debian :</h4>
<p>1) Rajouter les dépots source, par exemple :</p>
<p> <code>deb-src http://ftp.gr.debian.org/debian/ squeeze main contrib non-free</code>
<p>2) Télécharger la source</p>
<p> <code>apt-get source nginx<br />
tar -zxvf nginx_*.orig.tar.gz<br />
cd nginx-*<br />
tar -zxvf nginx_*.debian.tar.gz</code>
<p>2) Télécharger uwsgi</p>
<p> <code>cd ..</p>
<p>wget http://projects.unbit.it/downloads/uwsgi-0.9.4.2.tar.gz</p>
<p>tar -zxvf uwsgi-0.9.4.2.tar.gz</code>
<p>3) Modifier le paquet source de nginx pour y ajouter uwsgi. Il faut éditer le fichier nginx-*/debian/rules, trouver le bloc qui commence par ./configure et ou se trouvent toutes les options de compilation, et y ajouter</p>
<p> <code>--add-module=$(CURDIR)/../uwsgi-0.9.4.2/nginx/</code>
<p>$(CURDIR)/../uwsgi-0.9.4.2/nginx/ est le chemin vers le dossier du module dans la source de uwsgi</p>
<p>4) maintenant, dans le dossier de la source de nginx, faites (pas besoin de root) :</p>
<p> <code>dpkg-buildpackage</code>
<p>5) installer le .deb généré ainsi (en tant que root maintenant)</p>
<p> <code>dpkg -i ../nginx-*.deb</code>
<p>6) Dernière étape : compiler uWSGI (le binaire en lui-même, qui va communiquer avec nginx par le biais du module)</p>
<p> <code>cd ../uwsgi-0.9.4.2/ &amp;&amp; make &amp;&amp; make install &amp;&amp; cp uwsgi_params /etc/nginx/</code>
<p>Cette dernière commande (le cp uwsgi_params&#8230;) sert à placer un fichier de configuration du module uwsgi exemple dans le repertoire de nginx.</p>
<h4>Sous les autres distributions :</h4>
<p>Il faut télécharger la source de nginx et de uwsgi, compiler nginx avec le module uwsgi (dans le répertoire nginx de la source de uwsgi), puis compiler uwsgi.﻿</p>
<p>On a maintenant un serveur uWSGI et un nginx avec  le module uwsgi. Il va maintenant falloir dire à nginx de transférer les requêtes au serveur uWSGI, avec une commande uwsgi_pass. Par exemple, dans la section server d&#8217;un de vos vhost (/etc/nginx/sites-enabled/default, par exemple, sous Debian) :</p>
<p> <code>location / {<br />
include uwsgi_params;<br />
uwsgi_pass unix:///tmp/uwsgi.sock;<br />
}</code>
<p>Il faut ensuite créer une application WSGI, par exemple, pour le framework web.py :</p>
<p> <code>import web</p>
<p>urls = (<br />
    '/.*', 'hello',<br />
    )</p>
<p>class hello:<br />
    def GET(self):<br />
        return "Hello, world."</p>
<p>application = web.application(urls, globals()).wsgifunc()<br />
applications = {'/': application }</code>
<p>Pour Django :</p>
<p> <code>import django.core.handlers.wsgi<br />
application = django.core.handlers.wsgi.WSGIHandler()<br />
applications = {'/': application }</code>
<p>Nommez ce fichier wsgi.py et placez le dans le repertoire ou vous allez placer votre code (pour Django, dans le repertoire du projet, évidemment).  Si vos nerfs n&#8217;ont pas encore lâché ici, allez prendre une petite pause de 5 minutes à titre préventif, et reprenez.  Maintenant, on va démarrer un serveur uWSGI. Placez vous dans le répertoire de votre fichier wsgi.py, et faites :</p>
<p> <code>uwsgi -s /tmp/uwsgi.sock -C -w wsgi -p2 -L</code>
<p>Explications : le -s indique ou placer le socket (ça pourrait aussi être une adresse au format hôte:port, pour un usage distant). Le -w wsgi indique de charger le fichier wsgi(.py), le -p2 indique de démarrer 2 processus, et le -L désactive l&#8217;envoi des requêtes à stdout (=&gt;flood).</p>
<p>Si vous allez à l&#8217;adresse de votre serveur web, vous devriez voir votre application Python en face de vous ! Vous voilà en train d&#8217;utiliser <strong>nginx+uwsgi+python</strong>.</p>
<p>En annexe, je rappelle que uwsgi est aussi utilisable avec apache et lighttpd.</p>
<p>Aussi, dans le dossier source de uwsgi, vous trouverez des templates pour un module d&#8217;administration de Django, à installer dans le repertoire des templates de l&#8217;administration de Django (si, si).</p>
<h3>Installation et configuration de gunicorn</h3>
<p>gunicorn est <strong>carrèment</strong> plus facile à installer. Il est codé en python, donc pas de compilation, seulement un <strong>easy_install</strong> :</p>
<p> <code>easy_install gunicorn</code>
<p>La configuration est tout aussi facile, il suffit de cela dans la configuration du vhost dans nginx :</p>
<p> <code>location / {<br />
proxy_pass http://unix:/tmp/gunicorn.sock<br />
}</code>
<p>On démarre ensuite gunicorn. Pour Django, gunicorn dispose d&#8217;un support intégré, il vous suffit de vous placer dans le répertoire de votre projet, puis :</p>
<p> <code>gunicorn_django -b unix:/tmp/gunicorn.sock --workers=2</code>
<p>Pour web.py, il faut créer un module :</p>
<p> <code>import web</p>
<p>urls = (<br />
    '/.*', 'hello',<br />
    )</p>
<p>class hello:<br />
    def GET(self):<br />
        return "Hello, world."</p>
<p>application = web.application(urls, globals()).wsgifunc()</code>
<p>Il faut ensuite démarrer le serveur Gunicorn. En étant dans le repertoire ou se trouve le module web.py (le fichier donc le code vient avant, là, au-dessus, oui), :</p>
<p> <code>gunicorn -b unix:/tmp/gunicorn.sock --workers=2 wsgi</code>
<p>Je vous invite à consulter ce lien : <a href="http://gunicorn.org/tuning.html"><span style="color: #000000;">gunicorn.org/tuning.html</span></a>, pour vous permettre d&#8217;augmenter les performances de gunicorn.</p>
<h3>Annexe</h3>
<h4><span style="font-weight: normal;">Fichiers statiques</span></h4>
<p> <code>location /admin-media {alias /usr/lib/pymodules/python2.5/django/contrib/admin/media;}</p>
<p>location /static {root /var/www/byteflow;}</code>
<p>Ces deux lignes, à rajouter après le &#8220;location /&#8221; avec uwsgi_pass ou proxy_pass (selon votre configuration) indiquent à nginx de traiter les fichiers statiques directement. Il faut bien évidemment adapter à votre configuration.</p>
<h4><span style="font-weight: normal;">Munin</span></h4>
<p><span style="font-weight: normal;">Vous pouvez trouver des plugins nginx pour munin <a href="http://muninexchange.projects.linpro.no/?search=&amp;cid=54&amp;pid=51">ici</a>. Je n&#8217;ai pas trouvé de plugin munin pour uwsgi/gunicorn, mais je pourrais peut-être en faire un si je trouve le temps.</span></p>
<h4><span style="font-weight: normal;">Plusieurs serveurs</span></h4>
<p><span style="font-weight: normal;">Si par hasard vous avez plusieurs serveurs gunicorn/uwsgi répartis sur plusieurs machines , vous pouvez les utiliser en déclarant une section </span></p>
<p> <code><span style="font-weight: normal;">upstream <em>nom</em> {} </span></code>
<p><span style="font-weight: normal;">dans nginx, contenant les adresses des serveurs distant (hôte:port ou emplacement du socket) et en utilisant &#8220;<em>nom</em>&#8221; comme argument à <em>uwsgi_pass</em> et <em>proxy_pass</em>.</span></p>
<h3>Conclusion</h3>
<p>Ces deux architectures sont très pratiques pour faire tourner du python dans un serveur web, ici nginx. uwsgi dispose de plus de fonctionalités, mais la plupart (template d&#8217;admin Django, memory profiling) pourraient facilement être ajoutées à gunicorn, qui est beaucoup plus léger à installer/configurer/maintenir (2 commandes et 3 lignes de configuration dans nginx). J&#8217;ai les deux personellement sur mon serveur, j&#8217;ai eu à alterner entre les deux pour écrire cet article, et c&#8217;est pas bien dur, un daemon à arrêter, un autre à démarrer, et changer une ligne dans la configuration de nginx.</p>
<h4>Liens</h4>
<p><a href="http://wsgi.org">wsgi.org</a></p>
<p><a href="http://gunicorn.org/">gunicorn.org/</a></p>
<p><a href="http://projects.unbit.it/uwsgi/">projects.unbit.it/uwsgi/</a></p>
<p><a href="irc://irc.freenode.org/#gunicorn">irc.freenode.org/#gunicorn</a></p>
<p><a href="http://nginx.org/">nginx.org/</a></p>
<p><a href="http://djangoadvent.com/">djangoadvent.com/</a></p>
<p><a href="http://www.django-fr.org/">www.django-fr.org/</a></p>
<p><a href="http://www.djangoproject.com/">www.djangoproject.com/</a></p>
<p><a href="http://webpy.org/">webpy.org/</a></p>
<p>Je tiens à remercier la communauté Geek{node|fault}, le chan irc #gunicorn, les développeurs de gunicorn qui sont très aimables, ainsi que Amandarn qui m&#8217;a aidé pour certains détails.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/' rel='bookmark' title='Devbox KVM+Libvirt perfect setup.'>Devbox KVM+Libvirt perfect setup.</a></li>
<li><a href='http://geekfault.org/2010/04/09/maildir-mbox-la-migration/' rel='bookmark' title='Maildir mbox &#8211; La migration'>Maildir mbox &#8211; La migration</a></li>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Chromium: l&#8217;adolescence de l&#8217;enfant de google.</title>
		<link>http://geekfault.org/2010/02/27/chromium-ladolescence-de-lenfant-de-google/</link>
		<comments>http://geekfault.org/2010/02/27/chromium-ladolescence-de-lenfant-de-google/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 22:39:55 +0000</pubDate>
		<dc:creator>koolfy</dc:creator>
				<category><![CDATA[comparatif]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[chromium]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[navigateur]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=1934</guid>
		<description><![CDATA[Un écosystème de plugins en bonne santé. La principale lacune de Chromium, c&#8217;était l&#8217;absence d&#8217;un système de plugins. Quand il fut implémenté, la question restait entière : est ce que l&#8217;API de plugins permettrait une intégration aussi efficace qu&#8217;avec Firefox ? Allait-elle parvenir à créer une communauté de développeurs de plugins comparable à la communauté [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/' rel='bookmark' title='Chromium, le Google Chrome sous Linux sans émulation'>Chromium, le Google Chrome sous Linux sans émulation</a></li>
<li><a href='http://geekfault.org/2009/08/13/maturation-de-chromium/' rel='bookmark' title='La maturation de Chromium'>La maturation de Chromium</a></li>
<li><a href='http://geekfault.org/2009/08/17/exit-google/' rel='bookmark' title='La recherche web… sans Google!'>La recherche web… sans Google!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Un peu d'histoire subjective.--><a href="http://geekfault.org/wp-content/uploads/2010/02/Chromium_Logo.png" title="Chromium_Logo" rel="lightbox.1934"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/Chromium_Logo-300x300.png" alt="" title="Chromium_Logo" width="150" height="150" class="alignleft size-medium wp-image-2331" /></a><a href="http://dev.chromium.org/Home"><strong>Chromium</strong></a> (Chrome pour la version estampillée Google) est un projet né dans le buzz absolu, mais aussi dans le plus simple appareil. Lors de sa <strong>naissance</strong>, tout lui manquait: le support de flash, un support java, des plugins (et donc un moyen de se prémunir des publicités envahissantes), des thèmes, un semblant de stabilité et surtout une version linux native !</p>
<p>Attentifs à son existence post-buzz, nous avons déjà couvert sa <a href="http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/"><strong>naissance sur Linux</strong></a>, le <strong><a href="http://geekfault.org/2009/08/13/maturation-de-chromium/">début de son apprentissage</strong></a>, et le moment semble venu de marquer un nouveau chapitre dans l&#8217;évolution du navigateur : l&#8217;<strong>adolescence</strong>.<br />
<!--more--><br />
Au risque de synthétiser les deux premiers articles, il semble nécessaire de ré-établir le contexte et la genèse de ce projet, afin de mieux en comprendre le parcours.</p>
<div style="background: #FFFABF; -moz-border-radius: 6px; padding: 4px;"><strong>Attention :</strong> Cette page reprends ma <strong>vision personnelle</strong> du contexte de la sortie de Chrome/Chromium et a pour objectif de poser le décor pour la suite de l&#8217;article. Cette page <strong>n&#8217;engage donc que moi </strong>et n&#8217;est pas nécessaire à la suite de l&#8217;article, si vous n&#8217;êtes pas d&#8217;accord avec mon point de vue, ne vous énervez pas : passer à la <a href="http://geekfault.org/2010/02/27/chromium-ladolescence-de-lenfant-de-google/2/">page 2</a> <img src='http://geekfault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<h3>Avant la conception</h3>
<p>Le monde des navigateurs n&#8217;était pas rose, Internet Explorer avait le rôle du père violent, un échec total qui ne parvenait à maintenir son autorité que par la force de son poing et la violence de ses pratiques anti-concurrentielles, Safari était ignoré par au moins 90% du marché, Opera était un refuge obscur que l&#8217;on trouve presque par hasard, une sorte de soupe de bonnes idées (très) mal arrangées, et de choix intéressants, mais pas concluants.</p>
<p><a href="http://geekfault.org/wp-content/uploads/2010/02/4browsers.jpg" title="4browsers" rel="lightbox.1934"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/02/4browsers-300x200.jpg" alt="" title="4browsers" width="300" height="200" class="alignright size-medium wp-image-2339" /></a></p>
<p>Et <strong>Firefox</strong> là-dedans ? Il fut d&#8217;abord envoyé par la <a href="http://www.mozilla.org/"><strong>Mozilla Foundation</strong></a> en tant que messie venu se dresser contre l&#8217;hégémonie d&#8217;Internet Explorer, et prêcher la bonne parole du Logiciel Libre et des standards dans cet océan de code propriétaire.</p>
<p>Firefox fut rapide, Firefox fut efficace, Firefox fut puissant, Firefox fut multi-plateforme, Firefox fut meilleur. Il engrangea ainsi à juste titre des utilisateurs par poignées, une solide réputation, un écosystème de plugins et devint même le porte-flambeau de la lute pour la percée du Logiciel libre au delà de Linux, au delà des geeks : dans la vie quotidienne du grand public, au nez et à la barbe des logiciels propriétaires.<br />
(petit <a href="http://xkcd.com/198/"><strong>témoignage humoristique</strong></a> représentant la place de Firefox dans nos esprits en ces temps-là)</p>
<p>Mais ce qui s&#8217;apparenta d&#8217;abord à de l&#8217;adoration et à de l&#8217;amour inconditionnel, commença à perdre de sa fraicheur à partir et au delà de Firefox 2.0. Il commença à perdre de sa légèreté, à traîner la patte, à s&#8217;approprier toute la mémoire RAM de nos systèmes et la retenir en otage, et à ne plus convenir à de plus en plus d&#8217;utilisateurs. Alors, tout naturellement (et surtout sous Linux), chacun partit <strong>en quête d&#8217;un navigateur plus léger</strong>, plus rapide, quitte à sacrifier quelques avantages de Firefox, mais à travers les 4 ou 5 petits projets inaboutis, chacun revint bredouille et se rendit à deux évidences : &#8220;Firefox reste un excellent navigateur&#8221;, et &#8220;Il n&#8217;existe pas d&#8217;alternative viable à l&#8217;Alternative.&#8221;</p>
<p>Et peu à peu, les utilisateurs se rendirent compte que <strong>la concurrence au sein des alternatives à Internet Explorer</strong> et aux navigateurs propriétaires <strong>était tout simplement inexistante</strong>, et que chacun avait un choix simple à faire : &#8220;Le mal, ou Firefox.&#8221;</p>
<h3>naissance d&#8217;un navigateur, d&#8217;un buzz et d&#8217;un imparfait.</h3>
<p><a href="http://geekfault.org/wp-content/uploads/2010/02/chrome.jpg" title="chrome" rel="lightbox.1934"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/chrome-300x281.jpg" alt="" title="chrome" width="100" height="95" class="alignleft size-medium wp-image-2344" /></a>L&#8217;annonce et la sortie initiale de la toute première mouture du navigateur firent un fracas monumental. Ce que Google annonçait était purement et simplement une <strong>alternative à Firefox</strong>, et ses points forts et principaux arguments étaient très exactement les reproches faits à Firefox : la gestion de la mémoire RAM, la réactivité, la vitesse des rendus, le moteur JavaScript. Chrome les réalisait d&#8217;emblée.</p>
<p>Les frustrés et les curieux se jetèrent sur Chrome et déclarèrent dans les premiers jours avoir définitivement abandonné Firefox, et fait de Chrome leur navigateur par défaut. Dans les premiers jours seulement car comme notre <a href="http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/"><strong>premier article sur l&#8217;arrivée de Chromium </strong></a>(le parent/jumeau Opensource de chrome) sur Linux l&#8217;indiquait, même plus d&#8217;un an après la sortie du navigateur, ses carences en faisaient plus une <strong>PoC (Proof of Concept) </strong>qu&#8217;un navigateur viable dans la vie de tous les jours, c&#8217;est ainsi que le buzz s&#8217;éteignit, et que seuls les utilisateurs les moins exigeants continuèrent de l&#8217;utiliser quotidiennement.<br />
Le pic d&#8217;utilisation de Chrome retomba largement, et tout le monde ou presque se retourna vers Firefox.</p>
<p>Malgré les désenchantements, Chromium était là, et alors qu&#8217;il luttait contre l&#8217;oubli, certains, dont une partie de la rédaction de Geekfault, restaient persuadés qu&#8217;il devait être suvi car il n&#8217;avait pas seulement sa place, mais était une <strong>nécessité</strong> dans l&#8217;équilibre concurrentiel des navigateurs.</p>
<p><!--nextpage--><!--pagetitle:Chromium, la fin de l'enfance.--></p>
<h3>Un écosystème de plugins en bonne santé.</h3>
<p>La principale lacune de Chromium, c&#8217;était l&#8217;absence d&#8217;un système de plugins. Quand il fut implémenté, la question restait entière : est ce que l&#8217;API de plugins permettrait une intégration aussi efficace qu&#8217;avec Firefox ? Allait-elle parvenir à créer une communauté de développeurs de plugins comparable à la communauté de Firefox ?</p>
<p>Aujourd&#8217;hui, la réponse est claire : <strong>oui.</strong><br />
Au 26 février 2010, le <a href="https://chrome.google.com/extensions?hl=fr"><strong>site de référencement des plugins Chromium</strong></a> recense 2990 plugins, et évolue à une vitesse régulière d&#8217;à peu près 30-40 plugins par semaine.<br />
Leur intégration au browser est parfaite et prévue pour ne pas affecter l&#8217;ergonomie ni les preformances du browser, on sent qu&#8217;un réel effort a été fait dans ce sens, contrairement par exemple au système de Widgets d&#8217;Opera (qui m&#8217;a <strong>traumatisé</strong>.)<br />
<a href="http://geekfault.org/wp-content/uploads/2010/02/pluginbar.png" title="pluginbar" rel="lightbox.1934"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/pluginbar-580x18.png" alt="" title="pluginbar" width="580" height="18" class="aligncenter size-large wp-image-2352" /></a><br />
Les plugins rencontrés sont assez variés, il en existe forcément pour checker vos mails google, ou servir d&#8217;interface intégrée à des sites comme Picasa, Twitter, Facebook, Slashdot, Google Buzz, Icanhascheezburger, il en existe pour &#8220;rendre plus esthétique/ergonomique&#8221; des sites comme Facebook ou Netvibes, et biensur la catégorie des plugins qui imitent des plugins déjà existants et très prisé sur Firefox.</p>
<p>Cependant, si cet écosystème évolue rapidement et est en bonne santé, il faut être réaliste : il en est à ses <strong>balbutiements</strong>. En effet, la plupart des extensions pour Chromium sont très basiques, il en existe un très grand nombre qui ne sont qu&#8217;un script .js de 15 lignes ne s&#8217;appliquant qu&#8217;au site l&#8217;ayant créé. Ça gonfle le nombre de plugins listés sur le site, mais ça ne pousse pas leur qualité globale vers de haut. Il est vrai qu&#8217;il existe quelques plugins ayant évolué très vite, et donc qui sont à la fois stables, utiles, efficaces et complets, mais il faut encore les chercher attentivement, et parcourir la liste de tous les plugins vous révèlera que 80% des plugins sont encore des petits scripts baclés à l&#8217;utilité douteuse.</p>
<p>Geekfault ne vous oublie pas, et prévoit un article reprenant les 10 plugins les plus indispensables de Chromium, Stay Tuned !</p>
<h3>Déjà un plugin d&#8217;ad blocking puissant, efficace et en évolution constante</h3>
<p><a href="http://geekfault.org/wp-content/uploads/2010/02/adblock.jpg" title="adblock" rel="lightbox.1934"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/adblock.jpg" alt="" title="adblock" width="55" height="55" class="alignleft size-full wp-image-2354" /></a>Même s&#8217;il en existe plusieurs, celle qui se démarque est <a href="https://chrome.google.com/extensions/detail/gighmmpiobklfepjocnamgkkbiglidom"><strong>AdBlock</strong></a> (accompagné de son &#8220;<a href="https://chrome.google.com/extensions/detail/picdndbpdnapajibahnnogkjofaeooof"><strong>tray-icon</strong></a>&#8221; séparé du moteur).</p>
<p>Il permet un filtrage efficace des publicités, même très agressivement incrustées dans les pages, non seulement grâce à une intégration parfaite des &#8220;Filter List Suscriptions&#8221; comme l&#8217;<strong>Easylist</strong> (plus une liste particulière propre à Chromium), mais également grâce à un système un peu particulier de filtrage manuel des pubs récalcitrantes.<br />
<a href="http://geekfault.org/wp-content/uploads/2010/02/adblock_lists.png" title="adblock_lists" rel="lightbox.1934"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/adblock_lists-150x150.png" alt="" title="adblock_lists" width="150" height="150" class="aligncenter size-thumbnail wp-image-2361" /></a><br />
<a href="http://geekfault.org/wp-content/uploads/2010/02/adblock_bar.jpg" title="adblock_bar" rel="lightbox.1934"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/02/adblock_bar-150x150.jpg" alt="" title="adblock_bar" width="150" height="150" class="alignright size-thumbnail wp-image-2356" /></a>Si une pub est passée à travers les mailles du filet, vous pouvez bien évidemment l&#8217;indiquer à AdBlock, qui vous présentera alors un petit cadre avec une &#8220;SlideBar&#8221; à faire glisser vers la droite jusqu&#8217;à ce que la pub disparaisse. AdBlock va dès lors appliquer des règles de filtrages de plus en plus violentes sur l&#8217;élément jusqu&#8217;à atteindre le parfait <strong>compromis</strong> entre le filtrage de la pub et l&#8217;affichage correct du reste de la page. Une fois l&#8217;élément filtré et les nouvelles règles enregistrées, elles deviennent disponibles dans la page de configuration du plugin, éditables  à tout moment. Il en va de même pour les exceptions de type &#8220;Whitelist&#8221;.</p>
<p>Vous trouverez également plusieurs options sympatiques, comme la possibilité de laisser passer les pubs textuelles qui ne vous dérangent pas (comme celle de Google), ou de filtrer les pubs incrustées dans les vidéos de Youtube (option encore en Beta)<br />
<a href="http://geekfault.org/wp-content/uploads/2010/02/adblock_conf1.png" title="adblock_conf1" rel="lightbox.1934"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/adblock_conf1-300x106.png" alt="" title="adblock_conf1" width="300" height="106" class="aligncenter size-medium wp-image-2358" /></a><br />
Son principal défaut actuellement est de ne pas empêcher les pubs de se charger: en effet, en l&#8217;absence de règles de blocking intégrées à Chromium, les plugins de filtrage de pubs en sont actuellement réduites à les &#8220;cacher&#8221; par des règles de CSS. Si ce procédé épargne vos yeux et votre CPU, il n&#8217;en est pas de même pour votre <a href="http://code.google.com/p/adblockforchrome/wiki/FrequentlyAskedQuestions#Does_this_actually_prevent_ads_from_downloading?"><strong>bande passante</strong></a>.<br />
Heureusement, (et contrairement à ce que beaucoup de paranoïaques prédisaient) Google ne compte pas mettre de bâtons dans les roues des plugins de filtrage de pubs, <a href="http://www.theregister.co.uk/2009/12/16/google_on_adblockers/"><strong>au contraire</strong></a>, et pour les plus sceptiques d&#8217;entre vous, un simple coup d&#8217;oeil au <a href="http://code.google.com/p/chromium/"><strong>site du projet Chromium</strong></a> vous apprendra que la fonction en question est en <a href="http://code.google.com/p/chromium/issues/detail?id=16932"><strong>développement actif</strong></a>.</p>
<p>L&#8217;équipe d&#8217;AdBlock est donc bien évidemment à l&#8217;affût, et n&#8217;attends que son implémentation définitive pour l&#8217;intégrer dans son procédé de filtrage.</p>
<h3>Un plugin de type &#8220;Firebug&#8221; ? Mieux, un outil intégré au Navigateur !</h3>
<p>Beaucoup de Web Developpers ont peur de quitter Firefox par crainte de perdre leur meilleur ami : Firebug.</p>
<p>Il n&#8217;en est rien ! Chromium a intégré un outil de développement surpuissant au navigateur.<br />
Celui-ci intègre entre-autres une console javascript, un affichage structuré de la source d&#8217;une page, des outils de chronométrage des chargement des différents éléments d&#8217;une page, de profiling des ressources consommées par chaque élément de la page, ainsi que plusieurs outils que je ne comprends pas du tout, n&#8217;ayant aucune notion de développement web <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a href="http://geekfault.org/wp-content/uploads/2010/02/devtool1.png" title="devtool1" rel="lightbox.1934"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/devtool1-150x150.png" alt="" title="devtool1" width="150" height="150" class="alignleft size-thumbnail wp-image-2367" /></a><a href="http://geekfault.org/wp-content/uploads/2010/02/devtool3.png" title="devtool3" rel="lightbox.1934"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2010/02/devtool3-150x150.png" alt="" title="devtool3" width="150" height="150" class="alignright size-thumbnail wp-image-2369" /></a><a href="http://geekfault.org/wp-content/uploads/2010/02/devtool2.png" title="devtool2" rel="lightbox.1934"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/devtool2-150x150.png" alt="" title="devtool2" width="150" height="150" class="aligncenter size-thumbnail wp-image-2368" /></a><br />
Bien que toujours inférieur à Firebug, cet outil est déjà très complet, en évolution constante, et totallement suffisant pour ne pas se retrouver &#8220;tout nu&#8221;.<br />
Il existe déjà quelques petites extensions permettant de le compléter un peu, mais celles-ci sont anecdotiques et encore très minimalistes.</p>
<h3>Un développement (trop ?) dynamique</h3>
<p>Le développement de Chromium est tout sauf lent. Avec un rythme d&#8217;environ 100 révisions par jour, se tenir à jour est une mission quotidienne… et dangereuse.</p>
<p>En effet, Chromium étant une version &#8220;git&#8221; permanente, se ruer sur la toute dernière révision n&#8217;est pas forcément une bonne idée.<br />
Au menu : erreurs de rendu, régressions dans l&#8217;interface graphique, corruption occasionnelle de certains plugins, boucles infinies dans le CPU, fuites de mémoire (parfois de l&#8217;ordre de la fontaine, voire du Titanic), ou simplement disparition de certaines fonctionnalités le temps de les recoder complètement (comme par exemple les &#8220;pin tab&#8221;)…</p>
<p>Heureusement, les distributions font souvent leur packaging de façon intelligente et proposent des versions snapshot reconnues &#8220;stables&#8221;, plus ou moins à jour, permettant un compromis tout à fait convenable. Il est toutefois déconseillé de s&#8217;aventurer hors de ces packages, si on veut pouvoir continuer à utiliser Chromium comme navigateur principal.</p>
<p>La communauté autour du développement est abondante, et les développeurs réactifs, même s&#8217;ils ne peuvent pas être partout à la fois et qu&#8217;ils ont beaucoup de travail rien qu&#8217;avec l&#8217;énorme quantité de patch à webkit que Chromium intègre.<br />
Cependant leur ordre de priorité fait que souvent les bugs spécifiques à Linux sont plus coriaces et trainent plus longtemps, ou simplement que les features sont d&#8217;abord achevées sur les versions Windows, quelques jours/semaines avant les versions Linux.</p>
<p><!--nextpage--><!--pagetitle:Myth busting--></p>
<h3>Google Chrome vs Chromium, une fois pour toutes.</h3>
<p>Deux ans après, je croise tous les jours des gens qui attribuent à Chromium des reproches de Chrome, et qui n&#8217;ont toujours pas clairement assimilé la <strong>distinction</strong> entre les deux.</p>
<p>Sur la <a href="http://code.google.com/p/chromium/wiki/ChromiumBrowserVsGoogleChrome"><strong>page de clarification</strong> </a>des deux projets :<br />
<div id="attachment_2330" class="wp-caption aligncenter" style="width: 452px"><a href="http://geekfault.org/wp-content/uploads/2010/02/ChromevsChromium.png" title="ChromevsChromium" rel="lightbox.1934"><img src="http://geekfault.org/wp-content/uploads/2010/02/ChromevsChromium.png" alt="" title="ChromevsChromium" width="442" height="566" class="size-full wp-image-2330" /></a><p class="wp-caption-text">Tableau comparatif des deux navigateurs</p></div></p>
<p>Pour faire simple :<br />
 Google héberge le projet <strong>Chromium</strong>, et paye une équipe de développeurs centraux sur le projet <strong>Chromium</strong>. Ceux-ci (aidés de la communauté) font des patch webkit, des ajouts de fonctionnalités, des améliorations de performances, de réactivité, de l&#8217;interface graphique… en bref : font avancer le navigateur.<br />
Ce navigateur (<strong>Chromium</strong>), est sous licence libre (BSD pour la plupart).</p>
<p>Une fois que tous les objectifs nécessaires à une <strong>Milestone</strong> (déterminée par l&#8217;équipe de dev de Google) sont atteint, Google fait un Copier/Coller de tout le code de <strong>Chromium</strong>, &#8220;fork&#8221; le projet <strong>Chromium</strong>, y ajoute le code qui attribue un identifiant unique à chaque installation du navigateur, qui envoie les données de navigation à Google, et ce genre d&#8217; &#8220;améliorations&#8221; made in Google, y ajoute des codecs propriétaires (h.264, mp3, etc), et enfin, fait une annonce de la sortie de la nouvelle version de <strong>Chrome</strong> : Chrome-[version_antérieure ++] !<br />
Puis on lance le développement de Chromium-[version_de_Chrome ++], et le cycle recommence.<br />
Le tout distribué sous licence <strong>propriétaire</strong> (comme le permet la licence BSD de Chromium).</p>
<p>En résumé, Chromium n&#8217;envoie pas vos informations de navigation à votre insu à Google, c&#8217;est Chrome qui s&#8217;en charge !<br />
D&#8217;ailleurs Google met un point d&#8217;honneur à se détacher «le plus possible» du développement de Chromium : ils hébergent le projet (comme beaucoup d&#8217;autres sur code.google.com), salarient les développeurs principaux, et évidemment décident de la direction que le projet prends (vu que c&#8217;est à fortiori la direction que Chrome prendra), mais c&#8217;est «tout» !<br />
Dans le code de <strong>Chromium</strong> il n&#8217;apparait <strong>aucune mention</strong> à Google ni à Chrome, aucune information n&#8217;est envoyée à Google, ces liens sont établis dans <strong>Chrome</strong>.</p>
<p>Le <a href="http://dev.chromium.org/chromium-os/building-chromium-os/getting-the-chromium-os-source-code"><strong>code source</strong></a> est disponible en téléchargement, les développeurs sont ouverts aux contributions, aux suggestions et même aux réclamations de la communauté autour du site du projet, ce ne sont <strong>pas des nazis ayant vendu leur âme</strong> et leurs principes à Google (enfin, ils sont payés par google mais) ils sont plus préoccupés par la qualité et l&#8217;efficacité de leur navigateur que par l&#8217;hégémonie de leur employeur.</p>
<p>Les seuls moments où on sent l&#8217;influence de Google derrière eux résident dans les choix d&#8217;implémentation orientés vers la branche Chrome OS du projet, ou dans les objectifs du navigateur (ex: quand un dev refuse un patch qui ralentit le lancement du navigateur de 100ms <strong>(!)</strong>).</p>
<p>J&#8217;espère que la distinction est désormais claire dans l&#8217;esprit de chacun.<br />
<!--nextpage--><!--pagetitle:Conclusion--></p>
<h3>Chromium, prêt à voler de ses propres ailes.</h3>
<p><a href="http://geekfault.org/wp-content/uploads/2010/02/flying_browser.png" title="flying_browser" rel="lightbox.1934"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/flying_browser.png" alt="" title="flying_browser" width="208" height="121" class="alignleft size-full wp-image-2374" /></a>Après avoir utilisé Chromium pendant plusieurs mois, et vécu tous les constats faits en <a href="http://geekfault.org/2010/02/27/chromium-ladolescence-de-lenfant-de-google/2/">page 2</a>, je peux maintenant affirmer que <strong>Chromium a enfin ce qu&#8217;il faut pour être un navigateur principal</strong> pour l&#8217;utilisateur moyen à avancé.</p>
<p>Biensur il est encore inférieur à Firefox en plusieurs points (souvent la maturité des plugins proposés), mais il a enfin gagné sa place parmi les navigateurs principaux, et surtout, est enfin sorti de son aura de &#8220;Projet inachevé&#8221; et de &#8220;Proof of Concept&#8221; qui l&#8217;aura suivi pendant près de deux années.</p>
<p>Pour toutes ces raisons, je le conseille à beaucoup de gens qui se plaignent de Firefox, ou simplement qui ont d&#8217;autres priorités dans leurs exigences, tout en reconnaissant que pour beaucoup de gens encore, <strong>Firefox reste le meilleur choix</strong>.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/' rel='bookmark' title='Chromium, le Google Chrome sous Linux sans émulation'>Chromium, le Google Chrome sous Linux sans émulation</a></li>
<li><a href='http://geekfault.org/2009/08/13/maturation-de-chromium/' rel='bookmark' title='La maturation de Chromium'>La maturation de Chromium</a></li>
<li><a href='http://geekfault.org/2009/08/17/exit-google/' rel='bookmark' title='La recherche web… sans Google!'>La recherche web… sans Google!</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/02/27/chromium-ladolescence-de-lenfant-de-google/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>DenyHosts pour empêcher le bruteforce sur SSH</title>
		<link>http://geekfault.org/2010/02/24/denyhosts-pour-empecher-le-bruteforce-sur-ssh/</link>
		<comments>http://geekfault.org/2010/02/24/denyhosts-pour-empecher-le-bruteforce-sur-ssh/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:31:35 +0000</pubDate>
		<dc:creator>Lord</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2206</guid>
		<description><![CDATA[Ras le bol de voir des tentatives de connexion sur votre SSH ? Il existe plusieurs logiciel pour vous en prémunir avec en tête de liste le célèbre Fail2ban qui permet de protéger SSH ainsi que la plupart des autres serveurs logguant l&#8217;authentification. Mais alors pourquoi choisir DenyHosts ? DenyHosts se limite à la protection [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/' rel='bookmark' title='SSH sans mot de passe'>SSH sans mot de passe</a></li>
<li><a href='http://geekfault.org/2009/03/28/ubuntu-jaunty-jackalope-9-04/' rel='bookmark' title='On a testé pour vous : Ubuntu Jaunty Jackalope 9.04'>On a testé pour vous : Ubuntu Jaunty Jackalope 9.04</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-2207" href="http://geekfault.org/2010/02/24/denyhosts-pour-empecher-le-bruteforce-sur-ssh/denyhosts/"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft size-full wp-image-2207" title="denyhosts" src="http://geekfault.org/wp-content/uploads/2010/02/denyhosts.png" alt="" width="347" height="73" /></a>Ras le bol de voir des tentatives de connexion sur votre SSH ? Il existe plusieurs logiciel pour vous en prémunir avec en tête de liste le célèbre Fail2ban qui permet de protéger SSH ainsi que la plupart des autres serveurs logguant l&#8217;authentification. Mais alors pourquoi choisir DenyHosts ? DenyHosts se limite à la protection SSH mais sa force provient de deux fonctionnalités :  utiliser un système de synchronisation entre plusieurs DenyHosts ( je ne l&#8217;aborde pas ), mais également le partage des IP incriminées. Afin de récupérer des IP à blacklister et de d&#8217;offrir les siennes afin de se fabriquer une blacklist évolutive.</p>
<p>Un attaquant vera son adresse IP inscrite dans le fichier <em>/etc/hosts.deny</em> l&#8217;empêchant de se logguer.</p>
<p><!--more--></p>
<h3>Installation</h3>
<p>Gentoo</p>
<p><code>emerge denyhosts</code></p>
<p>Debian et dérivés</p>
<p><code>aptitude install denyhosts</code></p>
<p>Red Hat et consorts</p>
<p><code>yum install denyhosts</code></p>
<h3>Configuration</h3>
<p><em>/etc/denyhosts</em></p>
<p><code>#Doit pointer vers votre fichier logguant les tentatives de connexions<br />
SECURE_LOG = /var/log/auth.log</p>
<p>#Doit pointer vers votre fichier de blacklist<br />
HOSTS_DENY = /etc/hosts.deny<br />
BLOCK_SERVICE  = sshd</p>
<p>#Nombre d'essai avant d'être bloqué pour une connexion non root<br />
DENY_THRESHOLD_INVALID = 5<br />
DENY_THRESHOLD_VALID = 5</p>
<p>#Nombre d'essai avant d'être bloqué pour une connexion en temps que root<br />
DENY_THRESHOLD_ROOT = 3<br />
DENY_THRESHOLD_RESTRICTED = 1<br />
WORK_DIR = /var/lib/denyhosts<br />
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES<br />
HOSTNAME_LOOKUP=YES<br />
LOCK_FILE = /var/run/denyhosts.pid</p>
<p>#Vers quelle adresse email signaler une attaque infructueuse<br />
ADMIN_EMAIL = votre@mail<br />
SMTP_HOST = localhost<br />
SMTP_PORT = 25<br />
SMTP_FROM = DenyHosts <denyhosts@localhost><br />
SMTP_SUBJECT = DenyHosts Report<br />
SYSLOG_REPORT=YES</p>
<p>#temps avant la remise à zéro du compteur<br />
AGE_RESET_VALID=5d<br />
AGE_RESET_ROOT=10d<br />
AGE_RESET_RESTRICTED=25d<br />
AGE_RESET_INVALID=10d<br />
RESET_ON_SUCCESS = yes<br />
DAEMON_LOG = /var/log/denyhosts<br />
DAEMON_LOG_TIME_FORMAT = %b %d %H:%M:%S<br />
DAEMON_LOG_MESSAGE_FORMAT = %(asctime)s - %(name)-12s: %(levelname)-8s %(message)s<br />
DAEMON_SLEEP = 30s<br />
DAEMON_PURGE = 1h</p>
<p>#Ces dernières lignes permettent d'utiliser le partage d'IP. On peut se limiter au partage montant ou descendant<br />
#C'est purement facultatif mais je vous le recommande.<br />
SYNC_SERVER = http://xmlrpc.denyhosts.net:9911<br />
SYNC_UPLOAD = yes<br />
SYNC_DOWNLOAD = yes</code></p>
<p>Puis pour le lancer :<br />
<code>/et/init.d/denyhosts start</code></p>
<p>Sous Gentoo pour le lancer automatiquement au boot vous devez l&#8217;ajouter à votre « rc par défaut » :<br />
<code>rc-update add denyhosts default</code></p>
<h3>Logs</h3>
<p>Allons faire un tour dans les logs de DenyHosts pour voir à quoi s&#8217;attendre.</p>
<p>Exemple de synchro où l&#8217;on récupère des IP à blacklister :</p>
<p><code>Feb 20 04:42:43 - denyhosts   : INFO     received new hosts: ['217.10.117.161', '194.185.200.156', '91.75.180.114', '202.141.132.50', '60.248.91.64', '211.100.42.83', '202.165.    177.203', '211.155.227.171', '58.221.34.18', '88.191.15.133', '210.51.36.162', '220.165.28.66', '91.205.74.41', '61.178.74.43', '202.117.54.134', '74.127.18.195', '195.250.39.6    6', '216.229.160.194', '122.70.147.103', '200.195.168.194', '202.44.11.60', '94.190.187.113', '213.5.64.164', '201.116.98.210', '163.13.175.44', '119.149.189.199', '93.152.156.    13', '125.7.209.4', '210.51.48.71', '88.117.234.162', '217.97.185.35', '217.20.183.73', '117.41.228.195', '201.20.186.222', '79.39.6.98', '221.165.162.4', '211.72.171.76', '209    .255.67.10', '80.203.122.116', '12.152.124.2', '70.169.201.74', '202.5.95.205', '217.219.67.131', '65.98.97.98', '218.241.155.144', '80.14.186.105', '96.31.68.39', '218.108.247    .138', '61.138.217.19', '82.230.95.10']</code></p>
<p>Ajout d&#8217;un attaquant + upload au serveur central :</p>
<p><code>Feb 21 09:25:31 - denyhosts   : INFO     new denied hosts: ['81.7.171.15']<br />
Feb 21 09:43:01 - sync        : INFO     sent 1 new host</code></p>
<p>Reset du compteur en cas de login réussi :</p>
<p><code>Feb 21 11:35:03 - loginattempt: INFO     resetting count for: 10.0.0.3</code></p>
<h3>Liens</h3>
<p><a href="http://www.denyhosts.sourceforge.net">Site officiel</a><br /> <a href="http://stats.denyhosts.net/stats.html">Statistiques mondiales de DenyHosts</a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
<li><a href='http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/' rel='bookmark' title='SSH sans mot de passe'>SSH sans mot de passe</a></li>
<li><a href='http://geekfault.org/2009/03/28/ubuntu-jaunty-jackalope-9-04/' rel='bookmark' title='On a testé pour vous : Ubuntu Jaunty Jackalope 9.04'>On a testé pour vous : Ubuntu Jaunty Jackalope 9.04</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/02/24/denyhosts-pour-empecher-le-bruteforce-sur-ssh/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Libérez votre esprit avec Freemind</title>
		<link>http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/</link>
		<comments>http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 02:32:55 +0000</pubDate>
		<dc:creator>koolfy</dc:creator>
				<category><![CDATA[Geeklife]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Organisation]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[projets]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2139</guid>
		<description><![CDATA[Ça semble évident : dans le monde de l&#8217;OpenSource, de la programmation ou de l&#8217;informatique en général, s&#8217;il est un besoin omniprésent, c&#8217;est bien celui de structurer une pensée, schématiser une procédure, ou hierarchiser un projet. Combien de projets sont-ils morts ou ont-ils été paralysés par un défaut de structure, d&#8217;ordre et de clarté dans [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2011/10/14/lancer-votre-dual-booting-windows-dans-une-virtualbox/' rel='bookmark' title='Lancer votre dual-booting Windows dans une VirtualBox'>Lancer votre dual-booting Windows dans une VirtualBox</a></li>
<li><a href='http://geekfault.org/2010/10/31/sikuli-automatisation-graphique/' rel='bookmark' title='Sikuli : programmez avec des screenshots'>Sikuli : programmez avec des screenshots</a></li>
<li><a href='http://geekfault.org/2009/03/21/faire-planter-le-weechat-de-votre-correspondant/' rel='bookmark' title='Faire planter le Weechat de votre correspondant'>Faire planter le Weechat de votre correspondant</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Un projet sain, dans un esprit sain.--><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/freemind.jpg" alt="" title="freemind" width="300" height="199" class="alignleft size-full wp-image-2140" /><br />
Ça semble évident : dans le monde de l&#8217;<strong>OpenSource</strong>, de la programmation ou de l&#8217;informatique en général, s&#8217;il est un besoin omniprésent, c&#8217;est bien celui de structurer une pensée, schématiser une procédure, ou hierarchiser un projet.</p>
<p>Combien de projets sont-ils morts ou ont-ils été paralysés par un défaut de structure, d&#8217;ordre et de clarté dans la manière de procéder ?</p>
<p><a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"><strong>Freemind</strong></a>, ce n&#8217;est pas un nouveau procédé de méditation New-Age à la mode, mais c&#8217;est tout de même la <strong>solution à ce problème</strong> !<br />
<!--more--><br />
<h3></h3>
<p>Freemind est un logiciel de création de <strong>schémas</strong> et d&#8217;<strong>organigrames</strong> de type WYSIWYG permettant de structurer graphiquement des idées ou des procédures, c&#8217;est à dire à peu près tout ce qui passe par votre tête.</p>
<p>Nous allons ici voir les avantages, pas toujours triviaux, et pourquoi il peut réellement être important de se forcer à représenter ses pensées schématiquement.</p>
<h3>Freemind : comment regarder son cerveau dans un miroir, et y mettre un peu d&#8217;ordre !</h3>
<p>Dans une citation célèbre, souvent attribuée à Einstein, il est dit que &#8220;Si tu n&#8217;es pas en mesure d&#8217;expliquer un concept à un enfant de 8 ans, c&#8217;est que tu ne maitrises pas ce concept correctement.&#8221;</p>
<p>Le premier intérêt d&#8217;une représentation graphique, au delà de tout autre utilité, est d&#8217;<strong>appréhender ses pensées</strong>.<br />
Cela peut paraître stupide, ou inutile, mais la réalité est que, si on prenait la peine de se représenter correctement à soi-même ses propres pensées, avant de tenter de les appliquer ou de les expliquer à quelqu&#8217;un, on éviterait souvent de perdre <strong>beaucoup</strong> de temps à tenter d&#8217;expliquer un raisonnement qu&#8217;on n&#8217;appréhende et donc ne peut exprimer clairement, ou à tenter d&#8217;implémenter une procédure qui, sur un schéma correct, se révèle <strong>irréalisable</strong>, et dont les failles apparaissent comme des guirlandes de noël.</p>
<h4>Une preuve ? Un exemple ? Mieux : un témoignage !</h4>
<p>Pas plus tard que cette nuit, j&#8217;ai tenté de me mettre sérieusement à utiliser les services de réseaux sociaux dont on entends tant parler actuellement.<br />
<strong>Mes 4 nominés ?</strong> <a href="http://www.google.com/buzz">Google Buzz</a>, <a href="http://www.facebook.com">Facebook</a>, <a href="http://identi.ca">Identi.ca</a> et <a href="http://twitter.com">Twitter</a>.<br />
<strong>Mon objectif ?</strong> Parvenir à tous les utiliser en même temps, avec un moindre effort, et qu&#8217;ils se synchronisent correctement entre-eux le plus possible.</p>
<p>Ceux qui se sont déjà lancés dans ce genre d&#8217;initiatives savent à quel point les procédés pour relier deux services qui refusent de se parler (concurrents, par exemple) peuvent être tordus, mais surtout à quel point une structuration sans faille des interactions de ces réseaux est <strong>vitale</strong> pour éviter des redondances ou des boucles infinies.</p>
<p>Après avoir cassé les dents de mon petit esprit inférieur sur ce problème épineux, j&#8217;ai décidé de le représenter sur un bout de papier, ou mieux, sur &#8220;ce logiciel dont je dois faire un article Geekfault depuis des mois&#8221;, comment je voulais structurer mon réseau.</p>
<p>Ci-jointe, donc, la première itération de mon schéma logique des interactions entre ces différents services.<br />
<div id="attachment_2169" class="wp-caption aligncenter" style="width: 580px"><a href="http://geekfault.org/wp-content/uploads/2010/02/SocialNetwork_Wrong.png" title="SocialNetwork_Wrong" rel="lightbox.2139"><img src="http://geekfault.org/wp-content/uploads/2010/02/SocialNetwork_Wrong.png" alt="" title="SocialNetwork_Wrong" width="570" height="411" class="size-full wp-image-2169" /></a><p class="wp-caption-text">You're doing it wrong !</p></div><br />
Je vous mets au <strong>défi</strong> de jeter un coup d&#8217;œil rapide à ce schéma, et à ensuite tenter de vous persuader que vous avez compris la structure exacte de ce dispositif, ou pire : de l&#8217;expliquer à quelqu&#8217;un.<br />
C&#8217;est quasiment impossible sans y passer au moins 5 bonnes minutes. 5 précieuses minutes pour un concept qui n&#8217;en mérite qu&#8217;une maximum, car un schéma d&#8217;organisation plus complexe pourrait facilement vous prendre 30 minutes pour comprendre un concept qui pourrait être décrit et défini en 5 minutes.</p>
<p>Il ne s&#8217;agit pas ici (uniquement) d&#8217;une inaptitude à utiliser un logiciel de schématisation. J&#8217;ai d&#8217;ailleurs <strong>très exactement</strong> reproduit le concept que j&#8217;avais en tête.<br />
Là est précisément le problème.<br />
Ce n&#8217;est qu&#8217;après avoir à moitié schématisé mon plan de pensée, que j&#8217;ai compris que si je n&#8217;arrivais pas à comprendre mon propre schéma, c&#8217;était tout simplement parce qu&#8217;il était déjà totalement bordélique dans ma tête, et qu&#8217;il devait être repensé <strong>from scratch</strong>.</p>
<p>C&#8217;est ainsi que, en quelques minutes seulement (voire quelques dizaines de secondes), j&#8217;ai recommencé mon schéma, en repensant, non seulement sa schématisation, mais également sa structure dans ma tête, et que je suis parvenu à ce simple mais efficace résultat :<br />
<div id="attachment_2177" class="wp-caption aligncenter" style="width: 590px"><a href="http://geekfault.org/wp-content/uploads/2010/02/SocialNetwork.png" title="SocialNetwork" rel="lightbox.2139"><img src="http://geekfault.org/wp-content/uploads/2010/02/SocialNetwork-580x402.png" alt="" title="SocialNetwork" width="580" height="402" class="size-large wp-image-2177" /></a><p class="wp-caption-text">La différence est frappante !</p></div><br />
S&#8217;il semble un peu déconcertant à première vue (de par l&#8217;absence de légendes), quelques secondes d&#8217;observation seulement vous feront déjà réaliser les trois principaux points importants du dispositif :</p>
<ul>
<li> Twitter occupe une position <strong>centrale</strong>, et est celui qui se charge de propager les mises à jours aux autres services. (flèches <strong>bleues</strong>)</li>
<li> Identi.ca est le <strong>seul</strong> service qui poste des mises à jours à Twitter (flèche <strong>rouge</strong>)</li>
<li> Chaque service est en contact avec chaque autre service via Twitter (flèches <strong>vertes</strong>, représentant des liens indirects)</li>
</ul>
<p>Une fois qu&#8217;on a compris ça, on peut déjà mettre en place le dispositif de façon ordonnée, méthodique et productive, et on peut déjà très clairement apercevoir les implications plus abstraites :</p>
<ul>
<li> Tout ce qui est posté par Identi.ca est correctement propagé à tous les services, il doit donc être le service utilisé pour poster des mises à jour.
</li>
<li> On peut poster des mises à jours sur Facebook et Buzz sans qu&#8217;elles ne soient répercutées partout à la fois, ces deux services peuvent donc être utilisés pour poster des mises à jours plus personnelles/privées, ou simplement n&#8217;ayant pas la prétention de devoir être propagées sur tous les moyens de communications et «spamées» inutilement.</li>
</ul>
<p>Cette expérience illustre parfaitement que même si je <strong>croyais</strong> avoir saisi la structure à appliquer, et avoir compris mon raisonnement, une représentation graphique m&#8217;a évité de me gratter la tête pendant des heures, et m&#8217;a permis de reprendre mes erreurs, qui apparaissaient évidentes en comparant les deux schémas.</p>
<p><strong>Quelques minutes plus tard, mon dispositif était en place, et marchait du tonnerre de dieu. Ils vécurent heureux et eurent beaucoup de followers !</strong></p>
<p><!--nextpage--><!--pagetitle:Communiquer--></p>
<h3>La communication, ça compte.</h3>
<p>Un autre gros frein dans un projet collaboratif, c&#8217;est la <strong>communication</strong> de la structure ou des objectifs qu&#8217;on a en tête avec les autres participants, pour être sur et certain qu&#8217;on va tous dans le même sens, vers le même résultat.</p>
<p>Et pour ça, Freemind est équipé !<br />
Il intègre une pléthore de mini logos associables aux éléments (nœuds), de couleurs, d&#8217;annotations et de possibilités diverses de clarifier une structure, attirer l&#8217;attention sur un élément, constituer des listes hierarchisées et décrire avec clarté la direction qu&#8217;on veut prendre dans un projet.</p>
<p>Voici un exemple de brouillon réalisé pour les besoins de l&#8217;article, il y a quelques mois, représentant une vue d&#8217;ensemble du statut des différents pôles de Geekfault, de mon point de vue.<div id="attachment_2189" class="wp-caption aligncenter" style="width: 590px"><a href="http://geekfault.org/wp-content/uploads/2010/02/Geekfault-Freemind.png" title="Geekfault-Freemind" rel="lightbox.2139"><img src="http://geekfault.org/wp-content/uploads/2010/02/Geekfault-Freemind-580x447.png" alt="" title="Geekfault-Freemind" width="580" height="447" class="size-large wp-image-2189" /></a><p class="wp-caption-text">Ceci est totalement obsolète et non représentatif du statut du Geekfault actuel.</p></div></p>
<p>Réalisé en <strong>moins de 5 minutes</strong>, sans aucune expérience de schématisation préalable, ce schéma est parfaitement clair pour quiconque, facile et rapide à parcourir.<br />
Il décrit pourtant le statut d&#8217;un projet collaboratif de manière<strong> complète et détaillée</strong>, de telle façon que cette seule image peut servir d&#8217;ordre du jour pour une réunion de décideurs Geekfault, car elle premet de communiquer en 20 secondes ce qui nécessiterais 30 messages sur IRC et 10 bonnes minutes d&#8217;explication.<br />
Mais aussi et surtout, servir de <strong>pense-bête</strong>, et de repère fixé du paysage et de la santé du projet, incluant une TODO-List subtile avec une hierarchie de priorité, et indiquant implicitement mais intuitivement les prochaines actions à mettre en œuvre pour faire avancer le projet.<br />
<!--nextpage--><!--pagetitle:Infos utiles--></p>
<h3>Comment l&#8217;installer</h3>
<p>Sous gentoo :<br />
<code> # emerge app-misc/freemind</code><br />
Sous ubuntu :<br />
<code> $ sudo apt-get install freemind</code></p>
<p>Le projet étant écrit en Java, il est multi-plateforme et des versions pour les autres OS sont disponibles sur le site officiel du projet.</p>
<h3>À noter</h3>
<p>Le projet, à défaut d&#8217;évoluer rapidement, avance par bonds, et il est donc très conseillé de se tourner vers l&#8217;absolue dernière version disponible, car par exemple, la version 0.9.0 se trouve être incomparablement plus aboutie que la version 0.8.0</p>
<p>De plus, un fork de ce projet, au développement plus dynamique, existe déjà. Il se nomme <a href="http://fr.wikipedia.org/wiki/Freeplane"><strong>freeplane</strong></a>, se montre prometteur, et est à surveiller attentivement, voir à privilégier.</p>
<h3>Liens utiles</h3>
<ul>
<li> <a href="http://www.freemindparlexemple.fr"><strong>Blog francophone autour de Freemind</strong></a></li>
<li> <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"><strong>Le site officiel du projet Freemind</strong></a></li>
<li><a href="http://fr.wikipedia.org/wiki/FreeMind"> <strong>L&#8217;article wikipedia du projet Freemind</strong></a></li>
<li><a href="http://freeplane.sourceforge.net/wiki/index.php/Main_Page"><strong> Le site officiel du projet Freeplane</strong></a></li>
<li> <a href="http://fr.wikipedia.org/wiki/Freeplane"><strong>L&#8217;article wikipedia du projet Freeplane</strong></a></li>
</ul>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2011/10/14/lancer-votre-dual-booting-windows-dans-une-virtualbox/' rel='bookmark' title='Lancer votre dual-booting Windows dans une VirtualBox'>Lancer votre dual-booting Windows dans une VirtualBox</a></li>
<li><a href='http://geekfault.org/2010/10/31/sikuli-automatisation-graphique/' rel='bookmark' title='Sikuli : programmez avec des screenshots'>Sikuli : programmez avec des screenshots</a></li>
<li><a href='http://geekfault.org/2009/03/21/faire-planter-le-weechat-de-votre-correspondant/' rel='bookmark' title='Faire planter le Weechat de votre correspondant'>Faire planter le Weechat de votre correspondant</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/02/21/liberez-votre-esprit-avec-freemind/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

