<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
    
        <title>philpep&#39;s blog</title>
        <atom:link href="http://blog.philpep.org/feed/rss2" rel="self" type="application/rss+xml" />
        <description>philpep&#39;s blog rss</description>
    <link>http://blog.philpep.org</link>
    <language>fr</language>
        <lastBuildDate>Thu, 04 Mar 2010 22:13:28 GMT</lastBuildDate>
    <generator>Pblog</generator>
        <item>
            <title>IPV6 step one two</title>
            <link>http://blog.philpep.org/post/IPV6-step-one-two</link>
            <guid>http://blog.philpep.org/post/IPV6-step-one-two</guid>
            <pubDate>Thu, 04 Mar 2010 22:13:28 GMT</pubDate>
            <description>&lt;p&gt;La semaine dernière, j&#39;expliquais &lt;a href=&#34;http://blog.philpep.org/post/IPV6-step-1&#34;&gt;comment j&#39;avais intégré l&#39;IPV6&lt;/a&gt; dans mon réseau. Depuis la donne à fortement changé puisque j&#39;ai mis ma freebox en mode &lt;strong&gt;non&lt;/strong&gt; routeur, et donc mon propre routeur sous FreeBSD (ma nouvelle carte wifi marche pas sous OpenBSD).&lt;/p&gt;
&lt;p&gt;Du coup on en arrive au problème de la freebox qui se comporte en routeur IPV6 même en mode &lt;strong&gt;non&lt;/strong&gt; routeur, voyez plutôt &lt;a href=&#34;http://www.mail-archive.com/frnog@frnog.org/msg03947.html&#34;&gt;cette discussion FRNOG&lt;/a&gt; ou on nous explique que ça va peut être changer bientôt. En attendant, pas moyen de router proprement l&#39;IPV6 de Free sans passer par un proxy ndp ou un bridge logiciel, sans compter qu&#39;il n&#39;est pas possible d&#39;avoir un reverse DNS avec l&#39;IPV6 de Free.&lt;/p&gt;
&lt;p&gt;Grâce à sieur &lt;a href=&#34;http://blog.bsdsx.fr/&#34;&gt;bsdsx&lt;/a&gt; j&#39;ai découvert &lt;a href=&#34;http://tunnelbroker.net/&#34;&gt;tunnelbrocker.net&lt;/a&gt; qui est un service type &lt;a href=&#34;http://en.wikipedia.org/wiki/Tunnel_broker&#34;&gt;tunnel broker&lt;/a&gt; en gros les paquet IPV6 sont encapsulés dans de l&#39;IPV4 entre chez vous et le bout du tunnel (plusieurs sont disponibles suivant votre localisation), ils fournissent un /64 ou un /48 et surtout la possibilité d&#39;avoir un reverse DNS.&lt;/p&gt;
&lt;p&gt;Sachez qu&#39;il y a encore une troisième façon d&#39;avoir une connectivité IPV6, basé sur la &lt;a href=&#34;http://www.ietf.org/rfc/rfc3068.txt&#34;&gt;RFC 3068&lt;/a&gt; ou encore &lt;a href=&#34;http://fr.wikipedia.org/wiki/6to4&#34;&gt;6to4&lt;/a&gt;, qui permet à n&#39;importe qui d&#39;obtenir un /48 sans demander rien à personne (c&#39;est la passerelle 6to4 la plus proche de vous qui prend en charge le routage de votre traffic), le prefixe est calculé à partir de votre IPV4 publique.&lt;/p&gt;
&lt;p&gt;J&#39;ai grosso modo donné les 3 manière communes d&#39;accéder au réseau IPV6 quand on est abonné chez Free. Chaque méthode à son avantage (ou pas), vous pouvez lire &lt;a href=&#34;http://www.culte.org/listes/linux-31/2008-08/msg00011.html&#34;&gt;ce mail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Perso j&#39;ai choisi le tunnel broker Huricane Electrics qui marche bien, il suffit de créer un compte et un tunnel, ils donnent même la config pour FreeBSD mais pour fixer ça en dur dans &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=rc.conf&#34;&gt;rc.conf&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;ipv6_enable=&amp;quot;YES&amp;quot;
ipv6_gateway_enable=&amp;quot;YES&amp;quot;
gif_interfaces=&amp;quot;gif0&amp;quot;
gifconfig_gif0=&amp;quot;82.229.137.130 216.66.84.46&amp;quot; # Mon IP publique suivie de l&amp;#39;IP du tunnel
ipv6_ifconfig_gif0=&amp;quot;2001:470:1f14:7bf::2 2001:470:1f14:7bf::1 prefixlen 128&amp;quot;
ipv6_defaultrouter=&amp;quot;2001:470:1f14:7bf::1&amp;quot;
# On relie le réseau local (sur l&amp;#39;interface vr1 chez moi)
ipv6_ifconfig_vr1=&amp;quot;2001:470:1f15:7bf:dead:c0de::1 prefixlen 96&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;La conf pf qui va avec :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;ext_if = &amp;quot;vr0&amp;quot;
int_if  = &amp;quot;vr1&amp;quot;
gif_if  = &amp;quot;gif0&amp;quot;
tun_end = &amp;quot;216.66.84.46&amp;quot; # Le bout du tunnel

localnet = $int_if:network

block log all
pass inet proto icmp all icmp-type { echoreq unreach }
pass inet6 proto icmp6 all icmp6-type { echoreq unreach timex toobig neighbrsol neighbradv }
pass out proto { tcp udp } all
pass out on $ext_if from $ext_if to $tun_end
# On peut filtre ici (là tout passe sans filtrage)
pass in on $gif_if inet6 proto { tcp udp icmp6 } to $localnet
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;En cas de doutes, vous pouvez faire des nmap depuis l&#39;interface web de tunnelbroker.net.&lt;/p&gt;
&lt;p&gt;Pour la config du reverse DNS c&#39;est pas plus compliqué qu&#39;en IPV4 (juste plus long) :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;; master/local6.rev
$TTL 3600 ; 1 heure
f.b.7.0.5.1.f.1.0.7.4.0.1.0.0.2.ip6.arpa.   IN  SOA ns.philpep.org. root.philpep.org. (
            2010022601  ; serial
            8H          ; refresh
            4H          ; retry
            4W          ; expire
            1D )        ; Min TTL

@       IN       NS ns.philpep.org.
1.0.0.0.0.0.0.0.e.d.0.c.d.a.e.d     IN      PTR solo.philpep.org.
; et named.conf
zone &amp;quot;f.b.7.0.5.1.f.1.0.7.4.0.1.0.0.2.ip6.arpa&amp;quot; {
    type master;
    file &amp;quot;master/local6.rev&amp;quot;;
};
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Autre chose à savoir, l&#39;IPV6 c&#39;est pas encore ça puisqu&#39;on est encore obligé à un moment ou un autre d&#39;encapsuler l&#39;IPV6 dans l&#39;IPV4 et de passer par des tunnels plus ou moins loin, la connectivité sortante en souffre énormément (allez faire un tour sur youtube.com en IPV6 en passant par un tunnel broker...), du coup ça peut être une bonne idée de préférer l&#39;IPV4 sur la machine où il y a le browser :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;/etc/rc.d/ip6addrctl prefer_ipv4
# ou alors QUE pour firefox about:config
network.dns.disableIPv6
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Si quelqu&#39;un à déjà mis en place son réseau IPV6 en 6to4 avec &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=stf&#34;&gt;stf(4)&lt;/a&gt;, j&#39;ai lu que la connectivité entrante était moins fiable qu&#39;avec un tunnel broker, je voudrais que quelqu&#39;un m&#39;explique ??&lt;/p&gt;
&lt;p&gt;Quelques liens :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.gcu-squad.org/2006/02/aaah-mais-si-mais-ah-ah-bien-sur-mais-oui-savait/&#34;&gt;Découverte du 6to4 chez gcu.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fr.wikipedia.org/wiki/6to4&#34;&gt;6to4 wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Tunnel_broker&#34;&gt;Tunnel broker wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/List_of_IPv6_tunnel_brokers&#34;&gt;Liste de Tunnel Broker wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.mail-archive.com/frnog@frnog.org/msg03947.html&#34;&gt;Il a free mais il a pas tout compris FRNOG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.culte.org/listes/linux-31/2008-08/msg00011.html&#34;&gt;IPV6 au CULTE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
        </item>
        <item>
            <title>Astuce pf du jour</title>
            <link>http://blog.philpep.org/post/Astuce-pf-du-jour</link>
            <guid>http://blog.philpep.org/post/Astuce-pf-du-jour</guid>
            <pubDate>Tue, 23 Feb 2010 14:09:07 GMT</pubDate>
            <description>&lt;p&gt;J&#39;ai la chance d&#39;avoir une bibliothèque avec un rayon informatique bien rempli dans mon Université, dernièrement j&#39;y ai emprunté &lt;a href=&#34;http://www.eyrolles.com/Informatique/Livre/le-livre-de-packet-filter-9782212125160&#34;&gt;ce bouquin&lt;/a&gt;. Là dedans j&#39;y ai vu une syntaxe pour décrire le réseau local que j&#39;avais raté quand j&#39;ai lu &lt;a href=&#34;http://www.openbsd.org/faq/pf/fr/index.html&#34;&gt;la doc&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;ext_if = &amp;quot;rl0&amp;quot;
# Au lieu de
localnet = &amp;quot;{ 192.168.0.0/24, 2a01:e35:2e58:9820::/64 }&amp;quot;
# On peut mettre
localnet = $ext_if:network
# Ou encore
localnet = rl0:network
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href=&#34;http://blog.philpep.org/tag/Packet%20Filter&#34;&gt;Pf&lt;/a&gt; va lui même calculer le réseau local à l&#39;aide de l&#39;IP du netmask et du prefixe.&lt;/p&gt;
&lt;p&gt;Attention tout de même si vous avez plusieurs IP (v4 et v6) sur l&#39;interface, ça peut produire des règles redondantes, en cas de doute :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;pfctl -sr
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;EDIT (27/02/10) : En fait quand il y a des alias sur l&#39;IP il va les évaluer mais pour ne spécifier que l&#39;adresses (sans les alias) on peut mettre $ext_if:network:0 &lt;/p&gt;</description>
        </item>
        <item>
            <title>IPV6 step 1</title>
            <link>http://blog.philpep.org/post/IPV6-step-1</link>
            <guid>http://blog.philpep.org/post/IPV6-step-1</guid>
            <pubDate>Sun, 21 Feb 2010 23:31:21 GMT</pubDate>
            <description>&lt;p&gt;Je viens de passer tout (ou presque) mes services en IPV6 (en gardant IPV4 of course) :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% host blog.philpep.org
blog.philpep.org is an alias for lenine.philpep.org.
lenine.philpep.org has address 82.229.137.130
lenine.philpep.org has IPv6 address 2a01:e35:2e58:9820::5
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Donc l&#39;idée c&#39;est de faire un récit de mon passage étant donné le nombre de modifications que j&#39;ai du faire sur la configurations des machines, des softs et des pare feu. Je vais faire tout ça en 2 ou 3 billets.&lt;/p&gt;
&lt;p&gt;Mon FAI (free) me fournis un préfixe IPV6 2a01:e35:2e58:9820::/64, et ma topologie réseau permet sans se casser la tête de faire fonctionner tout ça. Le réseau est composé de 3 machines (+ quelques intrus en wifi), un routeur OpenBSD, un serveur FreeBSD avec 4 jails et mon laptop FreeBSD. Le mode routeur est activé sur la freebox (sans DHCP) et elle installe un 192.168.0.0/24 sur lequel sont toutes les machines (jails y compris) sont configurés, ainsi toutes les machines sont reliés physiquement sur la freebox ce qui permet d&#39;éviter les problèmes de &lt;a href=&#34;http://fr.wikipedia.org/wiki/Internet_Control_Message_Protocol_V6&#34;&gt;neighbor solicitation&lt;/a&gt; si seul mon routeur serait physiquement relié à la freebox (on peut passer outre avec &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=ndp&#34;&gt;ndp(8)&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;En ipv4 :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;+-------------+      +----------------+       +---------+
| SRV + jails |&amp;lt;-----|     Routeur    |&amp;lt;------| Freebox |
+-------------+      +----------------+       +---------+
                      Filtrage/Routage

    En IPV4 tout le trafic passe par le routeur qui dispatche sur les jails.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et en ipv6 :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;+-------------+
| SRV + jails |&amp;lt;------+
+-------------+       |
                      |    +---------+
                      +----| Freebox |
                      |    +---------+
+------------+        |
|  Routeur   |&amp;lt;-------+
+------------+

En IPV6 le traffic est distribué par la freebox,
le routeur ne sert plus (à part les services qui
sont dessus).
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;La configuration ipv6 des machines sous FreeBSD :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# /etc/rc.conf
ipv6_enable=&amp;quot;YES&amp;quot;
ipv6_ifconfig_rl0=&amp;quot;2a01:e35:2E58:9820::2 prefixlen 64&amp;quot;
ipv6_defaultrouter=&amp;quot;2a01:e35:2E58:9820::1&amp;quot;

# ... La config jail
jail_lenine_ip=&amp;quot;192.168.0.5,2a01:e35:2E58:9820::5&amp;quot;
# ...
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Un petit reboot (où un &lt;code&gt;/etc/rc.d/pleins_de_trucs restart&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Sur OpenBSD :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# /etc/hostname.vr0
inet 192.168.0.1 255.255.255/0
inet6 2a01:e35:2E58:9820::3 64
# /etc/mygate (freebox)
192.168.0.254
2a01:e35:2E58:9820::1
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Après il faut modifier votre &lt;code&gt;pf.conf&lt;/code&gt; en supprimant &lt;code&gt;inet&lt;/code&gt; de vos règles de filtrage comme ça on sous entend &lt;code&gt;inet&lt;/code&gt; et &lt;code&gt;inet6&lt;/code&gt;, concernant icmp c&#39;est plus délicat parce qu&#39;il y a deux protocoles.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# /etc/pf.conf
pass in inet proto icmp
pass in inet6 proto icmp6
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite ça devrait tourner :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% ping6 -c 2 www.google.com
PING6(56=40+8+8 bytes) 2a01:e35:2e58:9820::2 --&amp;gt; 2a00:1450:8002::67
16 bytes from 2a00:1450:8002::67, icmp_seq=0 hlim=54 time=49.177 ms
16 bytes from 2a00:1450:8002::67, icmp_seq=1 hlim=54 time=53.867 ms

--- www.l.google.com ping6 statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 49.177/51.522/53.867/2.345 ms

% traceroute6 www.google.com
traceroute6: Warning: www.l.google.com has multiple addresses; using 2a00:1450:8002::6a
traceroute6 to www.l.google.com (2a00:1450:8002::6a) from 2a01:e35:2e58:9820::2, 64 hops max, 12 byte packets
 1  2a01:e35:2e58:9820::1  0.589 ms  0.530 ms  0.480 ms
 2  6to4-b8-e3.intf.routers.proxad.net  35.128 ms  33.359 ms  38.152 ms
....
# HO LE VILAIN TUNEL ! :&amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Vous voilà en IPV6, la première chose à faire c&#39;est reconfigurer votre parre feu, normalement vous n&#39;aurez pas à doubler chaque lignes, enlevez juste &lt;code&gt;inet&lt;/code&gt; là où il faut et ça passe. Les seules lignes à doubler sont les redirections (&lt;code&gt;rdr&lt;/code&gt;), parce qu&#39;il faut envoyer sur une adresse IPV4 ou sur une adresse IPV6.&lt;/p&gt;
&lt;p&gt;Dans le prochain billet j&#39;expliquerais comment passer petit à petit ses softs sur IPV6.&lt;/p&gt;</description>
        </item>
        <item>
            <title>Dual screen avec X.org : the right way</title>
            <link>http://blog.philpep.org/post/Dual-screen-avec-X.org-%3A-the-right-way</link>
            <guid>http://blog.philpep.org/post/Dual-screen-avec-X.org-%3A-the-right-way</guid>
            <pubDate>Sun, 14 Feb 2010 23:02:19 GMT</pubDate>
            <description>&lt;p&gt;Sur mon laptop, j&#39;ai deux écrans, l&#39;écran par defaut LVDS (en 1280x800) et un autre en VGA (en 1024x768), jusqu&#39;ici pour avoir un dual screen je mettais un :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;SubSection &amp;quot;Display&amp;quot;
    Virtual 2304 800
EndSubSection
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dans mon xorg.conf (2304 = 1280 + 1024 et 800 = max(800, 768)) et la configuration dans mon &lt;code&gt;.xinitrc&lt;/code&gt; avec xrandr :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;xrandr --output VGA --pos 1280x0 --mode 1024x768
xrandr --output LVDS --pos 0x0 --mode 1280x800
xrandr --output LVDS --left-of VGA
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ça pose quelques problèmes, par exemple quand je n&#39;utilise pas le deuxième écran je suis obligé de commenter tout ça, il y a moyen de faire plus propre :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;Section &amp;quot;ServerLayout&amp;quot;
    Identifier      &amp;quot;Single&amp;quot;
    Screen          &amp;quot;Screen0&amp;quot;
EndSection

Section &amp;quot;Screen&amp;quot;
    Identifier &amp;quot;Screen0&amp;quot;
    Device     &amp;quot;Card0&amp;quot;
    Monitor    &amp;quot;Monitor0&amp;quot;
EndSection

Section &amp;quot;Device&amp;quot;
    Identifier  &amp;quot;Card0&amp;quot;
    Driver      &amp;quot;intel&amp;quot;
    VendorName  &amp;quot;Intel Corporation&amp;quot;
    BoardName   &amp;quot;Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller&amp;quot;
    BusID       &amp;quot;PCI:0:2:0&amp;quot;
EndSection

Section &amp;quot;Monitor&amp;quot;
    Identifier  &amp;quot;Monitor0&amp;quot;
    Option      &amp;quot;Position&amp;quot;  &amp;quot;0 0&amp;quot;
    Option      &amp;quot;PreferredMode&amp;quot; &amp;quot;1280x800&amp;quot;
EndSection

Section &amp;quot;ServerLayout&amp;quot;
    Identifier      &amp;quot;Dual&amp;quot;
    Screen          &amp;quot;Screen1&amp;quot;
EndSection

Section &amp;quot;Screen&amp;quot;
    Identifier  &amp;quot;Screen1&amp;quot;
    Device      &amp;quot;Card1&amp;quot;
    Monitor     &amp;quot;Monitor0&amp;quot;
    SubSection &amp;quot;Display&amp;quot;
        Virtual 2304    800
    EndSubSection
EndSection

Section &amp;quot;Device&amp;quot;
    Identifier  &amp;quot;Card1&amp;quot;
    Driver      &amp;quot;intel&amp;quot;
    VendorName  &amp;quot;Intel Corporation&amp;quot;
    BoardName   &amp;quot;Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller&amp;quot;
    BusID       &amp;quot;PCI:0:2:0&amp;quot;
    Option      &amp;quot;monitor-LVDS&amp;quot;  &amp;quot;Monitor0&amp;quot;
    Option      &amp;quot;monitor-VGA&amp;quot;   &amp;quot;Monitor1&amp;quot;
EndSection

Section &amp;quot;Monitor&amp;quot;
    Identifier  &amp;quot;Monitor1&amp;quot;
    Option      &amp;quot;Position&amp;quot; &amp;quot;1280 0&amp;quot;
    Option      &amp;quot;RighOf&amp;quot; &amp;quot;Monitor0&amp;quot;
    Option      &amp;quot;PreferredMode&amp;quot; &amp;quot;1024x768&amp;quot;
EndSection
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ici je spécifie deux &lt;code&gt;ServerLayout&lt;/code&gt; : Single et Dual, je déclare les deux moniteurs avec les résolutions qui vont bien et leur place respective (VGA en 1024x768+1280+0 et LVDS en 1280x800+0+0)&lt;/p&gt;
&lt;p&gt;Ainsi au démarrage je choisis mon layout (par défaut il prendra le premier : Single) : &lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;startx -- -layout Dual
&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
            <title>Jouons avec kvm</title>
            <link>http://blog.philpep.org/post/Jouons-avec-kvm</link>
            <guid>http://blog.philpep.org/post/Jouons-avec-kvm</guid>
            <pubDate>Sat, 13 Feb 2010 02:31:41 GMT</pubDate>
            <description>&lt;p&gt;J&#39;ai codé un petit programme tout simple qui fait clignoter les leds de mon routeur dès qu&#39;un service est par terre. Ma méthode (qui ne doit pas être la meilleure mais je m&#39;en fout un peu) consiste à regarder régulièrement la liste des processus et détecter l&#39;arrêt d&#39;un service quand le processus associé n&#39;existe plus. J&#39;ai commencé avec un script shell, puis étant assez mauvais pour tout ce qui ressemble de près ou de loin à du script j&#39;ai décidé de le faire en C (langage d&#39;excellence n&#39;est ce pas...?).&lt;/p&gt;
&lt;p&gt;Je me suis volontairement compliqué la tache en utilisant des fonctions très proches du système, ainsi s&#39;il est possible d&#39;obtenir une liste de processus via &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=ps&#34;&gt;ps(1)&lt;/a&gt; avec un &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=popen&#34;&gt;popen(3)&lt;/a&gt; super crade ou encore &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=sysctl&amp;amp;sektion=3&#34;&gt;sysctl(3)&lt;/a&gt; j&#39;ai voulu utiliser &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=kvm&#34;&gt;kvm(3)&lt;/a&gt; &lt;code&gt;kernel memory interface&lt;/code&gt; qui est en programmation système la méthode la plus appropriée (d&#39;ailleurs &#39;ps&#39; est codé avec ça), c&#39;est juste une interface qui va nous permettre d&#39;accéder au données du kernel (une copie bien entendu), ici la liste des processus en cours.&lt;/p&gt;
&lt;p&gt;Le hic c&#39;est que si les fonctions de kvm sont très standard l&#39;implémentation est très différente suivant les systèmes, comme à peu près toute implémentation, l&#39;important c&#39;est que l&#39;interface soit standard. Ainsi à la lecture de la structure qui décrit les processus &lt;code&gt;kinfo_proc&lt;/code&gt; de &lt;a href=&#34;http://svn.freebsd.org/viewvc/base/head/sys/sys/user.h?view=markup&#34;&gt;sys/user.h&lt;/a&gt; on se dit chouette pleins d&#39;info à disposition, sauf que sur OpenBSD c&#39;est pas du tout la même forme (ni le même fichier d&#39;ailleurs). D&#39;où l&#39;importance d&#39;une interface riche et c&#39;est ce que nous promet &lt;code&gt;kvm&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Assez causé passons au code (je n&#39;explique pas ou peu le code en dehors des fonctions kvm)&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;string.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;err.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;libgen.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;limits.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;paths.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;kvm.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;sys/param.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;sys/sysctl.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;sys/wait.h&amp;gt;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;#include &amp;lt;sys/user.h&amp;gt;&lt;/span&gt;

&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;start_leds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;cm&#34;&gt;/* Ici on execute /usr/sbin/gioctl -q gpio0 led3 (on|off)&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;     * suivant la parité du conteur statique &amp;#39;i&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;     * 60 fois avec une pause d&amp;#39;une seconde. */&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fork&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;:
            &lt;span class=&#34;n&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;fork&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;:
            &lt;span class=&#34;n&#34;&gt;execl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/usr/sbin/gpioctl&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;gpioctl&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;-q&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;gpio0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                    &lt;span class=&#34;s&#34;&gt;&amp;quot;led3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;on&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;off&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
            &lt;span class=&#34;n&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;execl&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
            &lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_leds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[])&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;kvm_t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;berr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_POSIX2_LINE_MAX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kinfo_proc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;procs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pargv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;errx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;Usage check_proc procs ...&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

    &lt;span class=&#34;cm&#34;&gt;/* On accède aux données du kernel qui tourne actuellement (NULL) */&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kvm_open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;O_RDONLY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;berr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;errx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;%s&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;berr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

    &lt;span class=&#34;cm&#34;&gt;/* On demande la liste des processus, kinfo_proc est décrite&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;     * dans sys/sysctl.h sur OpenBSD et sys/user.h sur FreeBSD.&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;     * Il nous la donne dans un tableau continu de pointeurs de&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;     * taille qu&amp;#39;on récupère dans &amp;#39;n&amp;#39;. */&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;procs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kvm_getprocs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KERN_PROC_ALL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;kvm_getprocs: %s&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kvm_geterr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;procs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
            &lt;span class=&#34;cm&#34;&gt;/* On accède à la liste des arguments du programme qui a&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;             * généré le processus courant. */&lt;/span&gt;
            &lt;span class=&#34;n&#34;&gt;pargv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kvm_getargv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pargv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pargv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
                    &lt;span class=&#34;n&#34;&gt;strstr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pargv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;
                &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
                    &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
                &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kvm_close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;quot;kvm_close&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;start_leds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et l&#39;exécution, on veut tester si un processus du nom de &#39;dhcpd&#39; tourne sur le système, si ce n&#39;est pas le cas on lance le clignotement de la led pendant une minute :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# gcc -o check_proc check_proc.c -lkvm
# ./check_proc dhcpd
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Le mien s&#39;exécute dans un cron toute les minutes :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;* * * * * /root/bin/check_proc named dhcpd adsuck ntpd
&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
            <title>Adsuck pour remplacer privoxy</title>
            <link>http://blog.philpep.org/post/Adsuck-pour-remplacer-privoxy</link>
            <guid>http://blog.philpep.org/post/Adsuck-pour-remplacer-privoxy</guid>
            <pubDate>Thu, 11 Feb 2010 02:27:05 GMT</pubDate>
            <description>&lt;p&gt;Sur les trois machines clientes chez moi (dont deux avec l&#39;OS à la pomme et de browsers douteux), filtrer les pubs du web au niveau du réseau tout entier est vital, puis il m&#39;arrive de tester des browsers autres que firefox (dans le genre webkit-gtk/bindings vim) et là adblock ne m&#39;est d&#39;aucuns secours.&lt;/p&gt;
&lt;p&gt;Pendant un temps j&#39;utilisais &lt;a href=&#34;http://www.privoxy.org&#34;&gt;privoxy&lt;/a&gt; sur &lt;a href=&#34;/tag/alix&#34;&gt;mon routeur OpenBSD&lt;/a&gt;, mais je lui ai trouvé plusieurs defauts :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les regexp de base sont très éfficaces mais il y a malheureusement beaucoup de faux positifs.&lt;/li&gt;
&lt;li&gt;Le temps de traitement amène une lenteur parfois perceptible.&lt;/li&gt;
&lt;li&gt;Je l&#39;avais en proxy transparent, donc y&#39;a toujours quelqu&#39;un au bout du &#39;telnet machin 80&#39; (ça peut être génant)&lt;/li&gt;
&lt;li&gt;Configuration et maintenance pas franchement agréable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du coup en &lt;a href=&#34;/post/Alix-fail-et-OpenWrt&#34;&gt;reinstallant&lt;/a&gt; le routeur j&#39;ai cherché une alternative, et j&#39;ai trouvé &lt;a href=&#34;http://www.peereboom.us/adsuck/&#34;&gt;adsuck&lt;/a&gt;. C&#39;est du filtrage dns, assez violent mais beaucoup plus rapide et tout aussi éfficace.&lt;/p&gt;
&lt;p&gt;Pour le moment ce soft est codé par et pour OpenBSD, mais ça doit pas être méchant à compiler sur autre chose.&lt;/p&gt;
&lt;p&gt;L&#39;install :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# export PKG_PATH=ftp://ftp.fr.openbsd.org/pub/OpenBSD/4.6/packages/i386/
# pkg_add adsuck
# cat &amp;gt;&amp;gt; /etc/rc.local &amp;lt;&amp;lt; EOF
if [ &amp;quot;&amp;quot; != &amp;quot;NO&amp;quot; -a -x /usr/local/sbin/adsuck ]; then
    echo -n &amp;#39; adsuck&amp;#39;; /usr/local/sbin/adsuck $adsuck_flags
fi
EOF
# cat &amp;gt;&amp;gt; /etc/rc.conf.local &amp;lt;&amp;lt; EOF
adsuck_flags=&amp;quot;-c /var/adsuck -l 127.0.0.1 -p 54 -f /files/resolv.conf /files/hosts.small /files/Hosts.pub /files/local.pub&amp;quot;
EOF
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Comme j&#39;ai un vrai serveur DNS (pour le réseau local mais aussi pour mes domaines), j&#39;ai lancé adsuck sur le port 54 (dns normal c&#39;est 53) et fait une redirection pour le réseau local avec &lt;a href=&#34;/tag/Packet%20filter&#34;&gt;pf&lt;/a&gt;, adsuck va lui même servir de proxy entre le réseau local et le serveur DNS qui tourne sur localhost en particulier.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# echo &amp;quot;nameserver 127.0.0.1&amp;quot; &amp;gt; /var/adsuck/files/resolv.conf
# touch /var/adsuck/files/local.pub
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On lance une première fois :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# adsuck -c /var/adsuck -l 127.0.0.1 -p 54 -f /files/resolv.conf /files/hosts.small /files/Hosts.pub /files/local.pub
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Si ça se lance, on peut rediriger le traffic du réseau local vers adsuck :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;table &amp;lt;local&amp;gt; const { 192.168.0.0/24 }
rdr pass on $ext_if proto udp from &amp;lt;local&amp;gt; to $ext_if port domain -&amp;gt; lo0 port 54
# Si vous êtes vraiment méchant vous pouvez enlever le 2ème $ext_if :)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Maintenant sur une machine du réseau local :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% host www.smartadserver.com dns1.proxad.net
www.smartadserver.com has address 91.103.138.65
% host www.smartadserver.com
Host www.smartadserver.com not found: 3(NXDOMAIN)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et vous voilà avec un net plus très neutre mais épuré de toute publicité. Pour rajouter des sites, je vous ai fait créer un &lt;code&gt;/var/adsuck/files/local.pub&lt;/code&gt;, la syntaxe est simple :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;127.0.0.1 domaine_moisi.com
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et pour faire relire les listes à adsuck :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;# kill -USR1 `pgrep adsuck`
&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
            <title>Alix fail et OpenWrt</title>
            <link>http://blog.philpep.org/post/Alix-fail-et-OpenWrt</link>
            <guid>http://blog.philpep.org/post/Alix-fail-et-OpenWrt</guid>
            <pubDate>Mon, 08 Feb 2010 14:46:46 GMT</pubDate>
            <description>&lt;p&gt;Ce week end j&#39;ai essuyé pas mal  d&#39;échecs en tout genres, j&#39;ai une superbe &lt;a href=&#34;/tag/alix&#34;&gt;alix&lt;/a&gt; qui tourne sur &lt;a href=&#34;/tag/OpenBSD&#34;&gt;OpenBSD&lt;/a&gt; et j&#39;ai une carte wifi en minipci dessus qui marche passablement mal sur OpenBSD (tous les modes ne marchent pas et beaucoup de pertes de paquets quand ça marche).&lt;/p&gt;
&lt;p&gt;Du coup je me mis en tête le fait que ça tournera mieux sous un autre OS, j&#39;ai donc essayé dans l&#39;ordre &lt;a href=&#34;/tag/FreeBSD&#34;&gt;FreeBSD&lt;/a&gt;, Debian et &lt;a href=&#34;http://openwrt.org&#34;&gt;OpenWrt&lt;/a&gt;. Aucuns n&#39;a su faire tourner ma carte même avec les derniers drivers, j&#39;avais même pas d&#39;interface, comme quoi le support matériel sur OpenBSD est pas aussi mauvais qu&#39;on le pense.&lt;/p&gt;
&lt;p&gt;Donc si quelqu&#39;un à réussi à faire tourner convenablement la carte &lt;a href=&#34;http://linitx.com/viewproduct.php?prodid=11331&#34;&gt;Engenius NMP-8602+ 400mW a/b/g miniPCI&lt;/a&gt; sur un OS libre merci de me faire signe.&lt;/p&gt;
&lt;p&gt;J&#39;ai donc remis OpenBSD dessus et enlevé la carte wifi (si quelqu&#39;un est intéressé je suis prêt à la céder d&#39;ailleurs, toute neuve jamais servie :&amp;gt;)&lt;/p&gt;
&lt;p&gt;J&#39;ai quand même beaucoup joué avec le boot pxe sur sortie série Linux/BSD donc je suis bien rodé là dessus maintenant. Et surtout j&#39;ai découvert OpenWrt, une toute petite distribution linux pour l&#39;embarqué, faite à la base pour flasher les firmware proprio sur les routeurs du marché elle tourne aussi bien sur tout autre matériel et c&#39;est un projet très dynamique et original. L&#39;installation par pxe est super simple, il suffit de compiler un &lt;a href=&#34;http://en.wikipedia.org/wiki/RAM_disk&#34;&gt;ramdisk&lt;/a&gt; et de démarrer dessus.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;$ ls -l /usr/local/pxe/
total 1796
-rw-r--r--  1 phil  phil   1786396 Feb  7 15:41 openwrt-x86-vmlinuz
-rwxr-xr-x  1 root  wheel    16466 Feb  6 21:31 pxelinux.0
drwxr-xr-x  2 root  wheel      512 Feb  7 15:41 pxelinux.cfg
$ cat /usr/local/pxe/pxelinux.cfg/default
# Simplement spécifier la vitesse du port série
# 38400 ici
serial 0 38400 0
console 0
label linux
kernel openwrt-x86-vmlinuz
append init=/etc/preinit console=tty0 console=ttyS0,38400n8 reboot=bios
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Après c&#39;est du pxe classique, tftp et dhcpd et ça démarre :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;openwrt&#34; src=&#34;/static/pub/openwrt.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Après il suffit d&#39;envoyer l&#39;image sur le disque dur (soit la votre, soit celle qui est distribuée) :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;root@Solo:/# wget http://downloads.openwrt.org/kamikaze/8.09.2/x86/openwrt-x86-squashfs.image
root@Solo:/# dd if=openwrt-x86-squashfs.image of=/dev/hda
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et &lt;em&gt;c&#39;est tout&lt;/em&gt; !&lt;/p&gt;
&lt;p&gt;À coté de ça vous avez une interface de configuration web convi, un petit sshd &lt;a href=&#34;http://matt.ucc.asn.au/dropbear/dropbear.html&#34;&gt;dropbear&lt;/a&gt; et pleins de packages disponible (très orienté réseau bien sûr). Ça doit être encore plus réjouissant quand on flashe un routeur wifi proprio :)&lt;/p&gt;
&lt;p&gt;Mais bon, alix mérite qu&#39;on l&#39;exploite plus que ça, j&#39;aime bien l&#39;interface web mais j&#39;aime mieux éditer mon &lt;a href=&#34;/tag/Packet%20Filter&#34;&gt;pf.conf&lt;/a&gt; avec &lt;a href=&#34;/tag/vim&#34;&gt;vim&lt;/a&gt;.&lt;/p&gt;</description>
        </item>
        <item>
            <title>Lancer lighttpd dans un environnement propre</title>
            <link>http://blog.philpep.org/post/Lancer-lighttpd-dans-un-environnement-propre</link>
            <guid>http://blog.philpep.org/post/Lancer-lighttpd-dans-un-environnement-propre</guid>
            <pubDate>Thu, 28 Jan 2010 00:45:29 GMT</pubDate>
            <description>&lt;p&gt;Cela fait quelque temps que je vois mes &lt;a href=&#34;http://fr.wikipedia.org/wiki/Common_Gateway_Interface&#34;&gt;scripts cgi&lt;/a&gt; sous &lt;a href=&#34;http://www.lighttpd.net/&#34;&gt;lighttpd&lt;/a&gt; hériter de l&#39;environnement root (vous savez, les &lt;code&gt;export&lt;/code&gt; et autres &lt;code&gt;setenv&lt;/code&gt; dans votre &lt;code&gt;~/.$SHELLrc&lt;/code&gt;). Et si vous êtes un peu parano comme moi ou que vous avez des données sensibles dans votre environnement il peut s&#39;avérer utile de les cacher du script cgi.&lt;/p&gt;
&lt;p&gt;Pour cela j&#39;ai modifié mon &lt;code&gt;/usr/local/etc/rc.d/lighttpd&lt;/code&gt;, du coup j&#39;en ai même fait &lt;a href=&#34;http://www.freebsd.org/cgi/query-pr.cgi?pr=143302&#34;&gt;un bug report&lt;/a&gt; chez FreeBSD histoire que tout le monde en profite. Il permet même de spécifier certaines des variables d&#39;environnement que l&#39;on veut conserver (comme PATH qui est souvent utilisé dans les script cgi).&lt;/p&gt;
&lt;p&gt;Avec un peu de chance (et beaucoup de temps :&amp;gt;) il le prendrons et vous l&#39;aurez bientôt dans vos ports. Sinon faite le vous même à partir &lt;a href=&#34;http://www.philpep.org/pub/lighttpd_rc.patch&#34;&gt;du patch&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;cd /root
fetch http://www.philpep.org/pub/lighttpd_rc.patch
cd /usr/local/etc/rc.d/
patch -p0 &amp;lt; /root/lighttpd_rc.patch
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;L&#39;inconvénient c&#39;est qu&#39;il faut le refaire à chaque mise à jours de lighttpd.&lt;/p&gt;</description>
        </item>
        <item>
            <title>git-daemon sous FreeBSD</title>
            <link>http://blog.philpep.org/post/git-daemon-sous-FreeBSD</link>
            <guid>http://blog.philpep.org/post/git-daemon-sous-FreeBSD</guid>
            <pubDate>Tue, 26 Jan 2010 21:09:39 GMT</pubDate>
            <description>&lt;p&gt;Si vous avez un serveur git sous FreeBSD, vous aurez très rapidement des problèmes avec &lt;code&gt;/usr/local/etc/rc.d/git_daemon&lt;/code&gt;, genre il démarre mal, et refuse de redémarrer.&lt;/p&gt;
&lt;p&gt;En fait il suffit d&#39;utiliser l&#39;option &lt;code&gt;--reuseaddr&lt;/code&gt; qui passe SO_REUSEADDR à &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=setsockopt&#34;&gt;setsockopt&lt;/a&gt; pendant la création du socket serveur. Du coup il peut redémarrer même si il y avait une connexion active sur le port.&lt;/p&gt;
&lt;p&gt;En lisant le script &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=rc&#34;&gt;rc&lt;/a&gt;, on peut même éviter de le modifier et devoir le refaire à chaque mise à jours de git, dans &lt;code&gt;/etc/rc.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;git_daemon_enable=&amp;quot;YES&amp;quot;
git_daemon_directory=&amp;quot;--reuseaddr --base-path=/usr/home/git/repositories&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;EDIT : ce n&#39;est plus nécessaire maintenant &lt;a href=&#34;http://www.freebsd.org/cgi/query-pr.cgi?pr=143275&#34;&gt;PR ports/143275&lt;/a&gt;&lt;/p&gt;</description>
        </item>
        <item>
            <title>Dont be trop evil</title>
            <link>http://blog.philpep.org/post/Dont-be-trop-evil</link>
            <guid>http://blog.philpep.org/post/Dont-be-trop-evil</guid>
            <pubDate>Tue, 19 Jan 2010 04:03:12 GMT</pubDate>
            <description>&lt;p&gt;J&#39;ai toujours eu du mal à me positionner par rapport à google et les faits récents viennent renforcer l&#39;opinion de Benjamin Bayard de chez &lt;a href=&#34;http://fdn.fr&#34;&gt;fdn&lt;/a&gt; qui dit (en très gros) que Google n&#39;a pas à nous inquiéter pour l&#39;instant parce que ce sont encore les fondateurs qui sont aux manettes et l&#39;esprit originel est encore là.&lt;/p&gt;
&lt;p&gt;Pourtant les raisons d&#39;avoir peur et de commencer le boycot sont bien là puisqu&#39;il s&#39;agit sans doute de la plus grande centralisation de données de l&#39;Internet. Moteur de recherche, service mail, serveurs DNS récursifs ouverts, vidéo (youtube), service de blog (blogspot), creation de documents (Google Docs) et pour aller avec tout ça une énorme régie publicitaire (AdSense). Ils savent manipuler les données dans tous les sens, mais comme ils disent : &#34;&lt;code&gt;c&#39;est pour mieux satisfaire le client&lt;/code&gt;&#34;. Moi qui n&#39;utilise que le moteur de recherche (et un compte gmail qui sert de poubelle), j&#39;ai déjà super peur à l&#39;idée de croiser mon dossier chez Google qui je le rappelle est autorisé à vous tracer (en france) pendant 9 mois. Mais imaginez celui de ceux qui utilisent &lt;em&gt;tous&lt;/em&gt; les services de google (et j&#39;en connais). Ajoutez à cela deux faits marquants&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google.cn en chine censure son moteur de recherche parce qu&#39;ils y sont forcés par la loi. (ce n&#39;est plus le cas aujourd&#39;hui cf plus bas)&lt;/li&gt;
&lt;li&gt;Gros, gros dérapage d&#39;Eric Schmidt président de google, sur la vie privée&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Je pense qu&#39;il faut faire preuve de jugeotte. &lt;strong&gt;S&#39;il y a quelque chose que vous faites et que personne ne doit savoir, peut-être qu&#39;il faudrait commencer par ne pas le faire&lt;/strong&gt;. Si vous avez besoin qu&#39;on respecte à ce point votre vie privée, le fait est que les moteurs de recherche – y compris Google – enregistrent et conservent des informations pendant un certain temps. Il faut bien réaliser que nous, aux USA, sommes soumis au Patriot Act et donc qu&#39;il est possible que toutes ces informations soient mises à la disposition des autorités à leur demande.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;Don&amp;apos;t be evil&#34; src=&#34;/static/pub/evil.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Et pourtant&lt;/strong&gt;, si vous suivez un peu les actualités récentes, Google suite à une vaste opération de piratage  de comptes gmails de dissidents chinois (supposée venant des autorités chinoises), vient d&#39;enlever la censure sur google.cn et menace de quitter le pays. On peut lire beaucoup d&#39;informations à ce sujet allez voir sur &lt;a href=&#34;http://www.numerama.com/&#34;&gt;Numérama&lt;/a&gt; si vous êtes vraiment à la ramasse. &lt;/p&gt;
&lt;p&gt;Personnellement je n&#39;ai pas compris comment une entreprise aussi menaçante se met soudain à faire pression sur un gouvernement quitte à perdre un max de pognon, juste pour protéger son image de marque et pour être du coté des gentils. En fait ça rappelle une vielle histoire où &lt;strong&gt;Yahoo!&lt;/strong&gt; avait collaboré avec les autorités chinoises pour espionner les boites mails de dissidents. Google essaye de ne pas reproduire cette erreur qui a beaucoup coûté à l&#39;image de Yahoo!. Et cette décision &lt;a href=&#34;http://www.ecrans.fr/Google-un-patron-sabre-au-clair,8972.html&#34;&gt;viendrait directement d&#39;un des deux co-fondateurs de google&lt;/a&gt;. Ce portrait très flatteur de l&#39;homme (Sergey Brin) qui vient d&#39;un journal à peu près fiable (Libération) renforce donc l&#39;idée d&#39;une éthique chez Google malgré les enjeux financier, &lt;a href=&#34;http://www.numerama.com/magazine/14867-microsoft-n-a-aucune-intention-de-quitter-le-marche-chinois.html&#34;&gt;ce qui n&#39;a pas l&#39;air d&#39;inspirer Microsoft (Bing)&lt;/a&gt; qui reste en chine et collabore du moment qu&#39;on les arrose de pognon. Le patron de Mozilla &lt;a href=&#34;http://www.zdnet.fr/actualites/internet/0,39020774,39711467,00.htm&#34;&gt;s&#39;était donc un peu emporté quand il invitait les utilisateurs de firefox à passer à Bing.&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Difficile, vraiment difficile de se faire un avis, la solution est peut être de commencer à se passer totalement de moteur de recherche, ou encore mieux de &lt;a href=&#34;http://www.csquad.org/2010/01/11/nutch/&#34;&gt;faire votre propre moteur de recherche&lt;/a&gt; (hein rhaamo :&amp;gt;)&lt;/p&gt;</description>
        </item>
    </channel>
</rss>
