<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planète des utilisateurs Debian</title>
	<link>http://planet-fr.debian.net/users/</link>
	<language>en</language>
	<description>Planète des utilisateurs Debian - http://planet-fr.debian.net/users/</description>

<item>
	<title>Tuxicoman: Installer Debian</title>
	<guid isPermaLink="false">http://tuxicoman.jesuislibre.net/?p=4127</guid>
	<link>http://tuxicoman.jesuislibre.net/2013/05/installer-debian.html</link>
	<description>&lt;p&gt;Le site officiel &lt;a href=&quot;http://www.debian.org&quot;&gt;debian.org&lt;/a&gt; est connu pour être particulièrement abscon au profane informatique. Pour vous donner un exemple, lorsque l'on &lt;a href=&quot;http://www.debian.org/distrib/netinst#verysmall&quot;&gt;navigue sur le site pour télécharger une ISO d'installation pour clé USB&lt;/a&gt; on finit sur ça :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tuxicoman.jesuislibre.net/blog/wp-content/uploads/debian-installer2.jpg&quot;&gt;&lt;img src=&quot;http://tuxicoman.jesuislibre.net/blog/wp-content/uploads/debian-installer2-500x408.jpg&quot; alt=&quot;debian-installer2&quot; width=&quot;500&quot; class=&quot;aligncenter size-large wp-image-4128&quot; height=&quot;408&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ce qui doit &lt;a href=&quot;https://www.debian-fr.org/telechargement-de-debian-7-t43421.html&quot;&gt;laisser plus d'un utilisateur potentiel très perplexe&lt;/a&gt; ! Je me suis moi-même &lt;a href=&quot;http://tuxicoman.jesuislibre.net/tag/debian/2010/04/installation-de-debian-lenny-par-cle-usb.html&quot;&gt;creusé la tête en 2010&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quelle bonne surprise de voir qu'une lueur (verte) de démagogie est apparue dans le coin droit de la page d'accueil : un &lt;a href=&quot;http://cdimage.debian.org/debian-cd/7.0.0/multi-arch/iso-cd/debian-7.0.0-amd64-i386-netinst.iso&quot;&gt;lien vers une ISO net-install muti-arch(x86 x86-64)&lt;/a&gt; !!!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tuxicoman.jesuislibre.net/blog/wp-content/uploads/debian-installer.jpg&quot;&gt;&lt;img src=&quot;http://tuxicoman.jesuislibre.net/blog/wp-content/uploads/debian-installer-500x408.jpg&quot; alt=&quot;debian-installer&quot; width=&quot;500&quot; class=&quot;aligncenter size-large wp-image-4130&quot; height=&quot;408&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Encore un effort, et pour Debian 8 on aura &quot;une&quot; page expliquant en 3 étapes comment démarrer l'installeur Debian. Hé oui, l'utilisateur lambda ne sait pas &lt;a href=&quot;http://tuxicoman.jesuislibre.net/tag/debian/2011/02/installer-debian-squeeze-avec-une-cle-usb.html&quot;&gt;quoi faire avec son fichier ISO dans sa main gauche et sa clé USB dans sa main droite&lt;/a&gt;. Pourquoi ne pas proposer un &quot;easy mode&quot; qui propose par défaut une sorte de &lt;a href=&quot;http://unetbootin.sourceforge.net/&quot;&gt;UNetbootin&lt;/a&gt; ?&lt;/p&gt;
&lt;p&gt;C'est vraiment dommage car c'est l'une des distributions les plus faciles à utiliser au quotidien (très peu de bug, peu d'admin système à faire, pas de maj tous les 6 mois...)&lt;/p&gt;</description>
	<pubDate>Sat, 18 May 2013 16:59:41 +0000</pubDate>
        <enclosure url="http://cdimage.debian.org/debian-cd/7.0.0/multi-arch/iso-cd/debian-7.0.0-amd64-i386-netinst.iso" length="" type="text/html"/>
</item>
<item>
	<title>Carl Chenet: Les nouveautés de Python 3.3 (GLMF)</title>
	<guid isPermaLink="false">http://carlchenet.com/?p=1584</guid>
	<link>http://carlchenet.com/2013/05/16/les-nouveautes-de-python-3-3-glmf/</link>
	<description>&lt;p&gt;Suivez-moi &lt;a href=&quot;http://identi.ca/carlchenet&quot; target=&quot;_blank&quot; title=&quot;Carl Chenet sur Identi.ca&quot;&gt;aussi sur Identi.ca&lt;/a&gt; ou &lt;a href=&quot;http://twitter.com/carl_chenet&quot; target=&quot;_blank&quot; title=&quot;Carl Chenet sur Twitter&quot;&gt;sur Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://carlchenet.files.wordpress.com/2013/05/python-logo-master-v3-tm.png&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/05/python-logo-master-v3-tm.png?w=300&amp;amp;h=101&quot; alt=&quot;python-logo-master-v3-TM&quot; width=&quot;300&quot; class=&quot;alignnone size-medium wp-image-1639&quot; height=&quot;101&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mon article &lt;strong&gt;sur les nouveautés de Python 3.3&lt;/strong&gt; est paru dans le &lt;a href=&quot;http://www.ed-diamond.com/produit.php?ref=lmag159&amp;amp;id_rubrique=1&amp;amp;caracteristique=1-2-&amp;amp;caracdisp=2-3-&quot; target=&quot;_blank&quot; title=&quot;GLMF d'avril 2013&quot;&gt;Gnu/Linux Magazine France d’avril 2013&lt;/a&gt;. Voici le sommaire de ce long article détaillant &lt;strong&gt;les principales nouveautés&lt;/strong&gt; de la dernière mouture du langage Python, &lt;strong&gt;exemples à l’appui&lt;/strong&gt; le plus souvent. Avec l’accord de mon éditeur, je vous propose de découvrir le sommaire de ce long article :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. Installer Python 3.3&lt;/li&gt;
&lt;li&gt;2. &lt;strong&gt;Nouveautés du coeur de Python&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;2.1 Nouvelle syntaxe yield from&lt;/li&gt;
&lt;li&gt;2.2 Amélioration des chaînes Unicode&lt;/li&gt;
&lt;li&gt;2.3 Transition Unicode et retour de la syntaxe u’chaine’&lt;/li&gt;
&lt;li&gt;2.4 Optimisation de l’utilisation de mémoire liée à l’usage des dictionnaires&lt;/li&gt;
&lt;li&gt;2.5 Paquets d’espace de nommage implicites&lt;/li&gt;
&lt;li&gt;2.6 Standardisation de la fonction__import__ appelée par le mot-clé import&lt;/li&gt;
&lt;li&gt;2.7 Suppression du contexte d’une exception&lt;/li&gt;
&lt;li&gt;2.8 &lt;strong&gt;Nouveau comportement de la hiérarchie des exceptions OS et IO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;2.9 Nouveaux apports à des fonctions builtin importantes&lt;/li&gt;
&lt;li&gt;2.10 Verrou d’import amélioré&lt;/li&gt;
&lt;li&gt;2.11 Nom qualifié pour les fonctions et les classes&lt;/li&gt;
&lt;li&gt;2.12 Lanceur Python pour Windows&lt;/li&gt;
&lt;li&gt;2.13 Amélioration de memoryview&lt;/li&gt;
&lt;li&gt;3. Nouveaux modules&lt;/li&gt;
&lt;li&gt;3.1 &lt;strong&gt;Module ipaddress&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;3.2 &lt;strong&gt;Module lzma pour la compression et décompression&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;3.3 &lt;strong&gt;Module venv de création d’environnements virtuels&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;3.4 Module unittest.mock pour créer de faux objets durant les tests unitaires&lt;/li&gt;
&lt;li&gt;3.5 Module faulthandler pour l’extraction de la pile d’appel&lt;/li&gt;
&lt;li&gt;4. Nouveautés des modules existants&lt;/li&gt;
&lt;li&gt;4.1 &lt;strong&gt;Ré-écriture du module bz2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;4.2 Zéro-copie et popularisation des descripteurs pour le module os&lt;/li&gt;
&lt;li&gt;4.3 &lt;strong&gt;Support du lzma pour le module tarfile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;4.4 Nouvelles fonctions du module time&lt;/li&gt;
&lt;li&gt;4.5 Meilleur gestion de l’Unicode dans le module email&lt;/li&gt;
&lt;li&gt;4.6 Accélération du code C du module decimal&lt;/li&gt;
&lt;li&gt;4.7 Support de nouveaux navigateurs par le module webbrowser&lt;/li&gt;
&lt;li&gt;4.8 Information de l’interpréteur courant dans sys.implementation&lt;/li&gt;
&lt;li&gt;5. &lt;strong&gt;Fin de support de systèmes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien &lt;strong&gt;qu’il ne soit plus possible de trouver ce numéro du magazine en librairie&lt;/strong&gt;, vous pouvez passer &lt;a href=&quot;http://numerique.ed-diamond.com/produit/228/9786000050269/GNULinux%20Magazine%20n159%20%20Virtualisation%20avec%20les%20LinuX%20Containers&quot; target=&quot;_blank&quot; title=&quot;GLMF n°159 d'avril 2013 avec article Python 3.3&quot;&gt;par l’édition numérique de GNU/Linux Magazine France (format PDF)&lt;/a&gt; pour acquérir ce magazine si l’article vous intéresse &lt;img src=&quot;http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Pour les utilisateurs de Debian, le paquet &lt;a href=&quot;http://packages.debian.org/search?keywords=python3.3&quot; target=&quot;_blank&quot; title=&quot;Paquets Debian Python 3.3&quot;&gt;Python 3.3&lt;/a&gt; est disponible en &lt;a href=&quot;http://www.debian.org/releases/jessie&quot; target=&quot;_blank&quot; title=&quot;Debian Jessie 8.0&quot;&gt;Jessie &lt;/a&gt;et en &lt;a href=&quot;http://www.debian.org/releases/sid/&quot; target=&quot;_blank&quot; title=&quot;Debian Sid&quot;&gt;Sid&lt;/a&gt;. Si vous êtes dans l’une des deux versions, il suffit de taper la commande suivante :&lt;/p&gt;
&lt;pre&gt;# apt-get install python3.3&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Et vous, que pensez-vous de cette mouture de python et/ou de l’article ?&lt;/strong&gt; N’hésitez pas à faire un retour à ce sujet.&lt;/p&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;p&gt;N’hésitez pas à réagir à cet article en laissant un commentaire.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/carlchenet.wordpress.com/1584/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/carlchenet.wordpress.com/1584/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img width=&quot;1&quot; alt=&quot;&quot; src=&quot;http://stats.wordpress.com/b.gif?host=carlchenet.com&amp;amp;blog=7722010&amp;amp;post=1584&amp;amp;subd=carlchenet&amp;amp;ref=&amp;amp;feed=1&quot; border=&quot;0&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 15 May 2013 22:01:27 +0000</pubDate>
</item>
<item>
	<title>Rapha&amp;#235;l Hertzog: Mes activités libres en avril 2013</title>
	<guid isPermaLink="false">https://raphaelhertzog.fr/?p=1812</guid>
	<link>http://raphaelhertzog.fr/2013/05/13/mes-activites-libres-en-avril-2013/</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://raphaelhertzog.com/files/2012/07/activity-report-300x300.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; class=&quot;alignleft size-medium wp-image-2728&quot; height=&quot;300&quot; /&gt;Voici le récapitulatif mensuel de toutes mes activités gravitant autour du logiciel libre. Si vous faites partie des personnes ayant fait &lt;a href=&quot;http://raphaelhertzog.fr/go/donate/&quot;&gt;un don pour soutenir mon travail&lt;/a&gt; (102,70 €, merci à tous !), c’est l’occasion de constater ce que je fais de votre argent. Sinon, c’est toujours quelques nouvelles intéressantes sur l’avancement de mes différents projets.&lt;/p&gt;
&lt;h3&gt;Debian France&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Travaux sur Galette&lt;/strong&gt;. J’ai passé pas mal de temps sur l’installation de Galette pour Debian France (l’application Web de gestion des membres), premièrement pour convertir sa base de données Postgres à l’UTF-8, ensuite pour la mettre à jour vers la version 0.7.4 tout en contournant plusieurs problèmes connus.&lt;/p&gt;
&lt;p&gt;J’ai également créé des paquets Debian pour trois plugins que nous utilisons : (&lt;a href=&quot;http://git.debian.org/?p=collab-maint/galette-plugin-paypal.git&quot;&gt;galette-plugin-paypal&lt;/a&gt;, &lt;a href=&quot;http://git.debian.org/?p=collab-maint/galette-plugin-admintools.git&quot;&gt;galette-plugin-admintools&lt;/a&gt; et &lt;a href=&quot;http://git.debian.org/?p=collab-maint/galette-plugin-fullcard.git&quot;&gt;galette-plugin-fullcard&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Ceci étant, chaque fois que j’utilise Galette, j’ai tendance à trouver quelque chose qui mérite d’être remonté. J’ai créé 5 tickets ce mois-ci :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://redmine.ulysses.fr/issues/588&quot;&gt;n°588&lt;/a&gt;: Galette devrait permettre l’envoi d’un mail de test lorsque les notifications mails sont paramétrées&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redmine.ulysses.fr/issues/589&quot;&gt;n°589&lt;/a&gt;: la page d’export CSV contient un lien de téléchargement invalide&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redmine.ulysses.fr/issues/590&quot;&gt;n°590&lt;/a&gt;: la page de confirmation d’un paiement PayPal réussi contient des champs vides&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redmine.ulysses.fr/issues/591&quot;&gt;n°591&lt;/a&gt;: problème de sélection des destinataires d’un publipostage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redmine.ulysses.fr/issues/595&quot;&gt;n°595&lt;/a&gt;: Galette devrait ajouter un destinataire correct dans le champ « A : » des mails générés automatiquement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’ai testé plusieurs corrections préparées par l’auteur amont (trois des bogues ci-dessus sont déjà corrigés), ce qui a conduit à la version corrective 0.7.4.1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Travaux préliminaires quant aux nouveaux statuts et règlement intérieur&lt;/strong&gt;. J’ai mis en place un &lt;a href=&quot;https://github.com/rhertzog/debian-france-textes-officiels&quot;&gt;dépôt Git&lt;/a&gt; afin de rendre plus facile la collaboration autour de nos nouveaux statuts et règlement intérieur. Le but étant de faire de Debian France une organisation reconnue par Debian (« trusted organization »), ainsi que de rendre l’ensemble compatible avec la loi 1901 relative aux associations (l’association a actuellement un statut spécial réservé aux associations d’Alsace/Lorraine).&lt;/p&gt;
&lt;h3&gt;Kali Linux&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Amélioration du support de l’accessibilité dans Debian Wheezy&lt;/strong&gt;. Offensive Security souhaitait que Kali Linux soit parfaitement accessible aux handicapés. Dans la mesure où &lt;em&gt;Wheezy&lt;/em&gt; souffrait de régressions importantes dans ce domaine, nous avons embauché Emilio Pozuelo Monfort afin de corriger les bogues &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680636&quot;&gt;n°680636&lt;/a&gt; et &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689559&quot;&gt;n°689559&lt;/a&gt; dans gdm3.&lt;/p&gt;
&lt;p&gt;De mon côté, j’ai mis à jour le paquet finish-install de debian-installer afin qu’il pré-configure correctement le système lorsque vous réalisez une installation avec la synthèse vocale (patch soumis dans le bogue &lt;a href=&quot;http://bugs.debian.org/705599&quot;&gt;n°705599&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Grâce à des responsables de la publication accomodants, ce travail a déjà été intégré dans Wheezy et ne devra pas attendre la première mise à jour majeure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrections de bogues dans l’installeur graphique de Debian’s live&lt;/strong&gt;. Nous avons également voulu activer l’installeur graphique dans le &lt;em&gt;live DVD&lt;/em&gt; de Kali. Tandis que nos premières tentatives d’il y a quelque mois avaient échoué, cela a marché ce coup-ci quasiment instantanément (ceci grâce à Ben Armstrong qui a réalisé les corrections nécessaires). J’ai quand même identifié quelques problèmes que j’ai corrigés dans &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=d-i/debian-installer-launcher.git;a=shortlog;h=36af7dd63a3811f877d48f32b527243f80f77946&quot;&gt;le dépôt Git de debian-installer-launcher&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Empaquetage et travaux Debian divers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;J’ai revu le travail de Charles Plessy qui a réalisé la première version d’une importante mise à jour de la charte Debian, afin de documenter les &lt;em&gt;triggers&lt;/em&gt; dpkg (&lt;em&gt;cf.&lt;/em&gt; &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=582109#57&quot;&gt;n°582109&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;J’ai revu le paquet libwebsockets préparé par Peter Pentchev (ITP &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=697671&quot;&gt;n°697671&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;J’ai découvert &lt;a href=&quot;http://tanglu.org/&quot;&gt;Tanglu&lt;/a&gt; et me suis inscrit à leur liste de diffusion afin de suivre son évolution (et peut-être l’utiliser comme banc de test pour de futurs développements d’infrastructure).&lt;/li&gt;
&lt;li&gt;J’ai revu et poussé un patch de Robert Spencer concernant debian-cd (voir &lt;a href=&quot;http://bugs.debian.org/703431&quot;&gt; n°703431&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;J’ai empaqueté la version 3.3 de cpputest (dans &lt;em&gt;experimental&lt;/em&gt;). J’ai testé un nouvel instantané amont converti à autotools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’ai également passé un nombre d’heures certain à répondre aux questions des étudiants souhaitant participer au &lt;em&gt;Google’s summer of code&lt;/em&gt; et qui sont intéressés par la &lt;a href=&quot;http://wiki.debian.org/SummerOfCode2013/Projects#PTS_rewrite_in_Django&quot;&gt;réécriture du Système de Suivi des Paquets à l’aide de Python et Django&lt;/a&gt;. Certaines de ces discussions ont eu lieu sur la liste de diffusion &lt;a href=&quot;http://lists.debian.org/debian-qa/2013/04/threads.html&quot;&gt;debian-qa@lists.debian.org&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Merci&lt;/h3&gt;
&lt;p&gt;Rendez-vous au mois prochain pour un nouveau résumé de mes activités !&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ceci est une traduction de mon article &lt;a href=&quot;http://raphaelhertzog.com/2013/05/01/my-free-software-activities-in-april-2013/&quot;&gt;My Free Software Activities in April 2013&lt;/a&gt; contribuée par Weierstrass01.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;font-size: smaller;&quot;&gt;&lt;a href=&quot;http://raphaelhertzog.fr/2013/05/13/mes-activites-libres-en-avril-2013/#comments&quot;&gt;Aucun commentaire pour le moment&lt;/a&gt; | Vous avez aimé ? &lt;a href=&quot;http://raphaelhertzog.fr/soutenir/&quot;&gt;Cliquez ici&lt;/a&gt;. | Ce blog utilise &lt;a href=&quot;http://flattr.com/thing/26572/Destination-Debian&quot; target=&quot;_blank&quot;&gt;Flattr&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Mon, 13 May 2013 07:31:27 +0000</pubDate>
</item>
<item>
	<title>Carl Chenet: Installer Debian Wheezy sur un Qnap TS-219 PII</title>
	<guid isPermaLink="false">http://carlchenet.com/?p=1616</guid>
	<link>http://carlchenet.com/2013/05/13/installer-debian-wheezy-sur-un-qnap-ts-219-pii/</link>
	<description>&lt;p&gt;Suivez-moi aussi &lt;a href=&quot;http://identi.ca/carlchenet&quot; target=&quot;_blank&quot; title=&quot;Carl Chenet sur Identi.ca&quot;&gt;sur Identi.ca : http://identi.ca/carlchenet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;À la recherche &lt;strong&gt;d’un petit serveur de sauvegarde&lt;/strong&gt; pour les besoins de ma société &lt;a href=&quot;http://www.mytux.fr&quot; target=&quot;_blank&quot; title=&quot;Site web de la société MyTux&quot;&gt;MyTux&lt;/a&gt;, j’ai été séduit par le hardware du &lt;a href=&quot;http://www.qnap.com/fr/index.php?lang=fr&amp;amp;sn=453&amp;amp;c=300&amp;amp;sc=553&amp;amp;t=562&amp;amp;n=3534&quot; target=&quot;_blank&quot; title=&quot;Qnap TS-219 PII sur le site du constructeur Qnap&quot;&gt;Qnap TS-219 PII&lt;/a&gt;, avec deux emplacements pour des disques. Mon seul pré-requis était&lt;strong&gt; la possibilité d’installer Debian Wheezy 7.0&lt;/strong&gt; dessus, voulant gérer moi-même toute la partie software.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://carlchenet.files.wordpress.com/2013/05/qnap-ts-219-p2.jpg&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/05/qnap-ts-219-p2.jpg?w=300&amp;amp;h=300&quot; alt=&quot;qnap-ts-219-p2&quot; width=&quot;300&quot; class=&quot;alignnone size-medium wp-image-1629&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;br /&gt; Le Qnap TS-219 PII utilise &lt;strong&gt;un processeur ARM Marvell 2.0 GHz&lt;/strong&gt;. Les autres caractéristiques hardware sont 512MB DDRIII de mémoire RAM, 8 TB de disque maximum, 1 port Gigabit Ethernet RJ-45 et 2 ports eSATA à l’arrière.&lt;/p&gt;
&lt;p&gt;L’utilisation du processeur ARM Marvell 2.0 &lt;strong&gt;a aiguisé ma curiosité&lt;/strong&gt; et motivé mon achat car j’étais intéressé depuis un moment à voir &lt;strong&gt;comment Debian se comportait sur une plateforme ARM&lt;/strong&gt;, ayant eu de très bon échos de la part d’utilisateurs réguliers de cette plateforme.&lt;/p&gt;
&lt;p&gt;J’ai également constaté que le constructeur Qnap &lt;strong&gt;était bien supporté par Debian&lt;/strong&gt; &lt;a href=&quot;http://www.cyrius.com/&quot; target=&quot;_blank&quot; title=&quot;Site web du développeur Debian Martin Michelmayr&quot;&gt;par le travail du développeur Debian Martin Michelmayr.&lt;/a&gt; Un hardware qui me plaît et la possibilité d’y installer simplement ma distribution préférée, je n’ai pas hésité longtemps &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://carlchenet.files.wordpress.com/2013/05/qnap-ts-219-p2-arriere.jpg&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/05/qnap-ts-219-p2-arriere.jpg?w=300&amp;amp;h=300&quot; alt=&quot;qnap-ts-219-p2-arriere&quot; width=&quot;300&quot; class=&quot;alignnone size-medium wp-image-1630&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Toutes les informations relatives à l’installation de Debian sur les appareils TS-21x de Qnap sont disponibles &lt;a href=&quot;http://www.cyrius.com/debian/kirkwood/qnap/ts-219/install/&quot; target=&quot;_blank&quot; title=&quot;Qnap TS-210x sur le site web de Martin Michelmayr&quot;&gt;sur la page du site web de Martin Michelmayr dédiée aux machines Qnap TS-21X&lt;/a&gt;. &lt;strong&gt;Un must-read&lt;/strong&gt; pour toutes personnes voulant effectuer cette installation. &lt;strong&gt;La procédure est très détaillée&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je confirme bien sûr le &lt;strong&gt;bon déroulement de l’opération&lt;/strong&gt; pour l’installation &lt;a href=&quot;http://carlchenet.com/2013/05/05/debian-wheezy-7-0-publiee-en-version-stable/&quot; target=&quot;_blank&quot; title=&quot;Debian wheezy 7.0 publiée en versions stable sur le blog de Carl Chenet&quot;&gt;de la toute nouvelle Debian Wheezy 7.0&lt;/a&gt;. Un travail impeccable pour l’installeur Debian qui démontre s’il le fallait encore &lt;strong&gt;sa grande souplesse&lt;/strong&gt; à s’adapter à différentes plateformes matérielles.&lt;/p&gt;
&lt;p&gt;Merci encore à Martin Michelmayr pour son travail&lt;strong&gt; sur l’intégration du matériel du constructeur Qnap au sein de Debian&lt;/strong&gt; (pour ma part, je me suis fendu&lt;a href=&quot;http://www.cyrius.com/debian/kirkwood/qnap/ts-219/install/&quot; target=&quot;_blank&quot; title=&quot;Installation de Debian Wheezy 7.0 sur un Qnap TS-21x &quot;&gt; d’un petit don à son encontre&lt;/a&gt;, voir le lien paypal en bas de la page) qui m’a permis &lt;strong&gt;d’installer Debian Wheezy 7.0 en un temps record&lt;/strong&gt; sur ce Qnap TS-219 PII.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Et vous&lt;/strong&gt;, avez-vous un retour à faire sur le matériel Qnap utilisé conjointement avec Debian ?&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/carlchenet.wordpress.com/1616/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/carlchenet.wordpress.com/1616/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img width=&quot;1&quot; alt=&quot;&quot; src=&quot;http://stats.wordpress.com/b.gif?host=carlchenet.com&amp;amp;blog=7722010&amp;amp;post=1616&amp;amp;subd=carlchenet&amp;amp;ref=&amp;amp;feed=1&quot; border=&quot;0&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 12 May 2013 22:22:12 +0000</pubDate>
</item>
<item>
	<title>Tuxicoman: Ajouter un OS au bootloader de Wheezy</title>
	<guid isPermaLink="false">http://tuxicoman.jesuislibre.net/?p=4087</guid>
	<link>http://tuxicoman.jesuislibre.net/2013/05/ajouter-un-os-au-bootloader-de-wheezy.html</link>
	<description>&lt;p&gt;J'ai du installer un disque avec Windows à coté de celui avec ma Debian Wheezy.&lt;br /&gt;
Windows faisant semblant d'ignorer qu'il existe d'autres OS, on ne peut pas compter sur lui pour s'intégrer à votre système existant.&lt;/p&gt;
&lt;p&gt;Déjà pour l'installer, &lt;a href=&quot;http://www.commentcamarche.net/forum/affich-12363726-probleme-lors-de-l-installation-windows-seven&quot;&gt;il faut lui donner le disque principal&lt;/a&gt; mais en plus, le bootloader de Windows se fout complètement que vous ayez un autre OS sur l'autre disque et ne vous le propose pas au démarrage.&lt;/p&gt;
&lt;p&gt;Heureusement, Debian Wheezy vient avec un outil magique pour rajouter automatiquement les autres OS à son bootloader. Vous avez juste 2 commandes à exécuter :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;# os-prober&lt;/strong&gt;&lt;br /&gt;
/dev/sda1:Windows 7 (loader):Windows:chain&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;# update-grub&lt;/strong&gt;&lt;br /&gt;
Generating grub.cfg ...&lt;br /&gt;
Found background image: /usr/share/images/desktop-base/desktop-grub.png&lt;br /&gt;
Found linux image: /boot/vmlinuz-3.2.0-4-amd64&lt;br /&gt;
Found initrd image: /boot/initrd.img-3.2.0-4-amd64&lt;br /&gt;
Found Windows 7 (loader) on /dev/sda1&lt;br /&gt;
done&lt;/p&gt;</description>
	<pubDate>Thu, 09 May 2013 01:47:35 +0000</pubDate>
</item>
<item>
	<title>St&amp;eacute;phane Blondon: Évolution du nombre de messages sur debian-l10n-fr et debian-users-fr avec pychart</title>
	<guid isPermaLink="false">http://ascendances.wordpress.com/?p=1111</guid>
	<link>http://ascendances.wordpress.com/2013/05/02/evolution-du-nombre-de-messages-sur-debian-l10n-fr-et-debian-users-fr-avec-pychart/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://home.gna.org/pychart/&quot; title=&quot;Site web de pychart&quot;&gt;Pychart&lt;/a&gt; est une bibliothèque Python permettant des graphiques directement en python. Un paquet Debian est disponible (nommé python-pychart) avec la dernière version 1.39 (qui date de 2006).&lt;/p&gt;
&lt;p&gt;Debian utilise massivement des listes de diffusion pour la collaboration de ses membres. Parmi les nombreuses listes existantes, trois sont francophones :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;debian-users-fr, dédiée aux questions des utilisateurs ;&lt;/li&gt;
&lt;li&gt;debian-l10n-fr, dédiée aux traductions en français ;&lt;/li&gt;
&lt;li&gt;debian-news-french, dédiée aux communiqués officiels. Elle est exclue du graphique car elle ne représente pas vraiment l’activité des listes de diffusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pychart est utilisé pour créer un graphique montrant l’évolution du volume de messages postés sur ces deux listes pendant une année glissante (soit d’avril 2012 à avril 2013).&lt;/p&gt;
&lt;h3&gt;Le graphique&lt;/h3&gt;
&lt;p&gt;Le graphique représente le nombre de messages électroniques envoyés sur les deux listes par jour.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ascendances.files.wordpress.com/2013/05/volume1.png&quot;&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/05/volume1.png?w=300&amp;amp;h=159&quot; alt=&quot;Volume des messages sur les listes de diffusion Debian francophones&quot; width=&quot;300&quot; class=&quot;aligncenter size-medium wp-image-1147&quot; height=&quot;159&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On constate que les pics et les creux se font sur les mêmes mois. Par contre, les tendances générales sont inversées : en hausse pour la liste utilisateur, en baisse pour la liste dédiée aux traductions.&lt;/p&gt;
&lt;h3&gt;Réalisation&lt;/h3&gt;
&lt;p&gt;Le code Python est fourni à la fin de l’article. Pychart s’appuie sur de nombreuses inventions anciennes mais solidement éprouvées :&lt;/p&gt;
&lt;h4&gt;Invention de la poubelle (1884)&lt;/h4&gt;
&lt;p&gt;Toute la &lt;a href=&quot;http://home.gna.org/pychart/doc/index.html&quot; title=&quot;documentation de Pychart&quot;&gt;documentation&lt;/a&gt; fait des imports globaux (&lt;code&gt;from pychart import *&lt;/code&gt;), comme beaucoup d’exemples disponibles sur le web. Pour éviter de polluer l’espace de nom, il suffit d’importer les différents sous-modules de manière classique (&lt;code&gt;import pychart.sousmodule&lt;/code&gt;). Je n’ai pas eu besoin d’importer certains sous-modules bien qu’ils soient utilisés dans le script.&lt;/p&gt;
&lt;h4&gt;Création de postscript (1982)&lt;/h4&gt;
&lt;p&gt;Plusieurs formats de sortie sont disponibles (ps, pdf, png et svg). Par défaut, le fichier sera en PostScript.&lt;br /&gt;
Pour le changer vers le format png :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;pychart.theme.output_format = &quot;png&quot;
&lt;/pre&gt;
&lt;p&gt;Pour avoir une sortie en png, ghostscript doit être installé sur le système. PIL n’est pas nécessaire.&lt;/p&gt;
&lt;h4&gt;Invention de la télévision couleur (1938)&lt;/h4&gt;
&lt;p&gt;Par défaut, les graphiques seront uniquement en nuances de gris. Si on souhaite avoir plein de couleurs, il faut le déclarer de la manière suivante :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;pychart.theme.use_color = True
&lt;/pre&gt;
&lt;h4&gt;Invention de l’écriture de travers (-3400)&lt;/h4&gt;
&lt;p&gt;Il est possible d’orienter le texte affiché (que ce soit pour les axes ou des boîtes de texte ad-hoc). Pour cela, il faut définir l’angle d’orientation (« /a » pour définir que l’on modifie l’angle, « -20 » pour baisser de 20 degrés par rapport à l’horizontale dans l’exemple ci-dessous) :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;pychart.axis.X(label=&quot;Date&quot;, format=&quot;/a-20/hL%s&quot;)
&lt;/pre&gt;
&lt;p&gt;La définition du formatage de la chaîne à afficher utilise le caractère « / » pour introduire un contrôle. Il est nécessaire de le doubler lorsque l’on souhaite l’afficher (pour une date par exemple).&lt;/p&gt;
&lt;h4&gt;Invention du dessin (Paléolithique)&lt;/h4&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;pychart.line_plot.T(label=u&quot;debian-user-french&quot;, #sert pour la légende
                    data=stats, #la structure des données à afficher
                    ycol=2, #la troisième colonne dans les données
                    line_style=_blue_line #le rendu des données
                    )
&lt;/pre&gt;
&lt;h4&gt;Invention du papier (IIième siècle avant JC)&lt;/h4&gt;
&lt;p&gt;La méthode draw() permet d’afficher les données sur la sortie standard. Il suffit simplement de la rediriger vers un fichier grâce au shell :&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;$ python volume.py  &amp;gt; volume.png
&lt;/pre&gt;
&lt;h3&gt;Code source et références&lt;/h3&gt;
&lt;p&gt;Le code qui a permis de créer le graphique :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;# -*- coding: utf-8 -*-

import pychart.area
import pychart.line_plot
import pychart.theme


pychart.theme.output_format = &quot;png&quot;
pychart.theme.use_color = True
pychart.theme.default_font_size = 14
pychart.theme.title = &quot;14&quot;


stats = ((&quot;04//2012&quot;, 12.27, 14.43),
        (&quot;05//2012&quot;, 10.71, 14.42),
        (&quot;06//2012&quot;, 11.77, 13.10),
        (&quot;07//2012&quot;, 10.19, 8.55),
        (&quot;08//2012&quot;, 11.65, 14.68),
        (&quot;09//2012&quot;, 13.00, 18.33),
        (&quot;10//2012&quot;, 10.32, 15.06),
        (&quot;11//2012&quot;, 6.87, 14.90),
        (&quot;12//2012&quot;, 5.48, 10.48),
        (&quot;01//2013&quot;, 5.29, 20.58),
        (&quot;02//2013&quot;, 10.25, 22.39),
        (&quot;03//2013&quot;, 9.74, 24.00),
        (&quot;04//2013&quot;, 8.3, 19.80))


_area = pychart.area.T(size = (700, 450),
            y_grid_interval=5,
            x_coord=pychart.category_coord.T(stats, 0),
            x_axis=pychart.axis.X(label=&quot;Date&quot;, format=&quot;/a-20/hL%s&quot;),
            y_axis=pychart.axis.Y(label=&quot;Nombre de messages par jour&quot;),
            legend=pychart.legend.T(),
            y_range=(0, None))

_red_line = pychart.line_style.T()
_red_line.width = 2
_red_line.dash = (5, 5)
_red_line.cap_style = 2
_red_line.join_style = 2
_red_line.color = pychart.color.red
_blue_line = pychart.line_style.T()
_blue_line.width = 2
_blue_line.color = pychart.color.royalblue
_l10n_plot = pychart.line_plot.T(label=u&quot;debian-l10n-french&quot;, data=stats, line_style=_red_line)
_user_plot = pychart.line_plot.T(label=u&quot;debian-user-french&quot;, data=stats, ycol=2, line_style=_blue_line)
_area.add_plot(_l10n_plot, _user_plot)

_area.draw()
&lt;/pre&gt;
&lt;p&gt;Les moyennes journalières ont été calculées préalablement. Elles sont exclues du code source pour ne pas l’alourdir inutilement. Voici les données brutes qui ont servi aux calculs des moyennes :&lt;br /&gt;
&lt;code&gt;date	debian-l10n-french	debian-user-french	nbre_jours&lt;br /&gt;
2012/04	368	433	30&lt;br /&gt;
2012/05	332	447	31&lt;br /&gt;
2012/06	353	393	30&lt;br /&gt;
2012/07	316	265	31&lt;br /&gt;
2012/08	361	455	31&lt;br /&gt;
2012/09	390	550	30&lt;br /&gt;
2012/10	320	467	31&lt;br /&gt;
2012/11	206	447	30&lt;br /&gt;
2012/12	170	325	31&lt;br /&gt;
2013/01	164	638	31&lt;br /&gt;
2013/02	287	627	28&lt;br /&gt;
2013/03	302	744	31&lt;br /&gt;
2013/04	190	594	30&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Les données ont été récupérées à partir des versions publiques des archives des listes de traductions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://lists.debian.org/debian-l10n-french/&quot; rel=&quot;nofollow&quot;&gt;http://lists.debian.org/debian-l10n-french/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lists.debian.org/debian-user-french/&quot; rel=&quot;nofollow&quot;&gt;http://lists.debian.org/debian-user-french/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La documentation de pychart est disponible à &lt;a href=&quot;http://home.gna.org/pychart/doc/pychart.html&quot; title=&quot;documentation de Pychart&quot;&gt;http://home.gna.org/pychart/doc/pychart.html&lt;/a&gt; ou dans le paquet python-pychart-doc.&lt;/p&gt;
&lt;p&gt;Enfin, &lt;a href=&quot;http://matplotlib.org/&quot; title=&quot;Site web de matplotlib&quot;&gt;Matplotlib&lt;/a&gt; répond au même besoin et semble être un projet plus vivant.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/1111/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/1111/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img width=&quot;1&quot; alt=&quot;&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;amp;blog=24442983&amp;amp;post=1111&amp;amp;subd=ascendances&amp;amp;ref=&amp;amp;feed=1&quot; border=&quot;0&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 02 May 2013 08:34:34 +0000</pubDate>
</item>
<item>
	<title>Florent Gallaire: Lucas Nussbaum élu DPL pour 2013</title>
	<guid isPermaLink="false">http://fgallaire.flext.net/?p=2456</guid>
	<link>http://fgallaire.flext.net/lucas-nussbaum-dpl-2013/</link>
	<description>&lt;p&gt;C’est &lt;a href=&quot;http://www.loria.fr/~lnussbau/&quot; target=&quot;_blank&quot;&gt;Lucas Nussbaum&lt;/a&gt; qui &lt;a href=&quot;http://lists.debian.org/debian-devel-announce/2013/04/msg00004.html&quot; target=&quot;_blank&quot;&gt;vient d’être élu Debian Project Leader&lt;/a&gt; (&lt;a href=&quot;http://www.debian.org/devel/leader&quot; target=&quot;_blank&quot;&gt;DPL&lt;/a&gt;) pour l’année 2013, succédant ainsi au triple mandat de &lt;a href=&quot;http://upsilon.cc/~zack/&quot; target=&quot;_blank&quot;&gt;Stefano Zacchiroli&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://free-electrons.com/pub/video/2009/rmll/rmll2009-nussbaum-methodes-de-vote.jpg&quot; alt=&quot;&quot; width=&quot;410&quot; class=&quot;aligncenter&quot; height=&quot;317&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Lucas Nussbaum devance Allan Moray et Gergely Nagy (déjà candidat malheureux en &lt;a href=&quot;http://www.debian.org/vote/2004/vote_001&quot; target=&quot;_blank&quot;&gt;2004&lt;/a&gt; et &lt;a href=&quot;http://www.debian.org/vote/2012/vote_001&quot; target=&quot;_blank&quot;&gt;2012&lt;/a&gt;). Voici une représentation du résultat du scrutin qui utilise la &lt;a href=&quot;http://fr.wikipedia.org/wiki/M%C3%A9thode_Condorcet&quot; target=&quot;_blank&quot;&gt;méthode Condorcet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://vote.debian.org/~secretary/leader2013/results.png&quot; alt=&quot;&quot; width=&quot;293&quot; class=&quot;aligncenter&quot; height=&quot;395&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bravo à toi Lucas, et bonne chance dans la mise en œuvre de ton &lt;a href=&quot;http://www.debian.org/vote/2013/platforms/lucas&quot; target=&quot;_blank&quot;&gt;programme&lt;/a&gt; à partir du 17 avril !&lt;/p&gt;
&lt;p class=&quot;wp-flattr-button&quot;&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://fgallaire.flext.net/?flattrss_redirect&amp;amp;id=2456&amp;amp;md5=fb9d2dd4c52a0d858956006e8bed787b&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img src=&quot;http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png&quot; alt=&quot;flattr this!&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 15 Apr 2013 01:41:11 +0000</pubDate>
</item>
<item>
	<title>Rapha&amp;#235;l Hertzog: Mes activités libres en mars 2013</title>
	<guid isPermaLink="false">https://raphaelhertzog.fr/?p=1785</guid>
	<link>http://raphaelhertzog.fr/2013/04/14/mes-activites-libres-en-mars-2013/</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://raphaelhertzog.com/files/2012/07/activity-report-300x300.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; class=&quot;alignleft size-medium wp-image-2728&quot; height=&quot;300&quot; /&gt;Voici le récapitulatif mensuel de toutes mes activités gravitant autour du logiciel libre. Si vous faites partie des personnes ayant fait &lt;a href=&quot;http://raphaelhertzog.fr/go/donate/&quot;&gt;un don pour soutenir mon travail&lt;/a&gt; (114,19 €, merci à tous !), c’est l’occasion de constater ce que je fais de votre argent. Sinon, c’est toujours quelques nouvelles intéressantes sur l’avancement de mes différents projets.&lt;/p&gt;
&lt;h3&gt;Simple-CDD et debian-cd&lt;/h3&gt;
&lt;p&gt;J’ai essayé d’utiliser les versions présentes dans &lt;em&gt;Wheezy&lt;/em&gt; de debian-cd et simple-cdd pour générer un installeur automatique. J’ai à cette occasion soumis plusieurs rapports de bogue concernant simple-cdd (&lt;a href=&quot;http://bugs.debian.org/701693&quot;&gt;n°701963&lt;/a&gt; : le paquet type-handling a disparu et ne devrait pas être listé dans default.downloads, ainsi que le &lt;a href=&quot;http://bugs.debian.org/701998&quot;&gt;n°701998&lt;/a&gt; : le paramètre &lt;code&gt;--keyboard&lt;/code&gt; ne fonctionne pas avec la version debian-installer de &lt;em&gt;Wheezy&lt;/em&gt;) et poussé quelques correctifs pour debian-cd :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-cd?view=revision&amp;amp;revision=2518&quot;&gt;r2518&lt;/a&gt;: ajuster le Makefile en fonction des nouveaux prérequis de xorriso ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-cd?view=revision&amp;amp;revision=2520&quot;&gt;r2520&lt;/a&gt;: ajouter les dépendances manquantes à dosfstools ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-cd?view=revision&amp;amp;revision=2521&quot;&gt;r2521&lt;/a&gt;: utiliser &lt;code&gt;--no-check-gpg&lt;/code&gt; lors de l’interrogation de debootstrap ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-cd?view=revision&amp;amp;revision=2522&quot;&gt;r2522&lt;/a&gt;: rendre debian-cd capable de fonctionner avec un miroir dépourvu de sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Debian France&lt;/h3&gt;
&lt;p&gt;J’ai achevé le &lt;a href=&quot;http://france.debian.net&quot;&gt;nouveau site web de Debian France&lt;/a&gt; et l’ai mis en ligne. J’y ai intégré par la suite plusieurs améliorations réalisées par Tanguy Ortolo (et lui ai donné les droits de pousser des changements via git par la même occasion).&lt;/p&gt;
&lt;p&gt;J’ai essayé de mettre à jour notre installation de Galette vers la dernière version amont, mais suis revenu à l’ancienne après avoir rencontré deux problèmes (consignés &lt;a href=&quot;http://redmine.ulysses.fr/issues/577&quot;&gt;ici&lt;/a&gt; and &lt;a href=&quot;http://redmine.ulysses.fr/issues/578&quot;&gt;ici&lt;/a&gt;). J’ai créé à cette occasion un paquet Debian pour ce logiciel (vous pouvez le récupérer sur &lt;a href=&quot;http://git.debian.org/?p=collab-maint/galette.git&quot;&gt;git.debian.org&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;J’ai également soumis une &lt;a href=&quot;http://redmine.ulysses.fr/issues/576&quot;&gt;proposition d’amélioration&lt;/a&gt; concernant l’extension de paiement par Paypal, qui a été rapidement implémentée. J’ai par la suite mis à jour ce module déjà utilisé sur france.debian.net.&lt;/p&gt;
&lt;h3&gt;Travaux en lien avec Kali&lt;/h3&gt;
&lt;p&gt;J’ai aidé pendant plusieurs mois l’équipe de Kali à préparer &lt;a href=&quot;https://raphaelhertzog.fr/2013/03/16/kali-linux-1-0-une-nouvelle-distribution-derivee-de-debian/&quot;&gt;cette nouvelle distribution dérivée de Debian&lt;/a&gt;. Maintenant qu’elle a été officiellement lancée, je peux déclarer certains de mes travaux Debian comme découlant de ma collaboration avec l’équipe de Kali.&lt;/p&gt;
&lt;p&gt;Ce mois-ci, j’ai contribué plusieurs fonctionnalités et corrections pour debian-installer et live-build :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://bugs.debian.org/702257&quot;&gt;n°702257&lt;/a&gt;: nouvelle entrée de préconfiguration pour désactiver les entrées CDROM ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bugs.debian.org/703072&quot;&gt;n°703072&lt;/a&gt;: le module hid-generic manque au niveau de udeb input-modules (n’affecte que les noyaux d’&lt;em&gt;experimental&lt;/em&gt;) ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://live.debian.net/gitweb/?p=live-build.git;a=commitdiff;h=8bcbda8&quot;&gt; Correction du support de win32-loader dans live-build.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Après le lancement, nous avons signalé Kali dans le &lt;a href=&quot;http://wiki.debian.org/Derivatives/Census&quot;&gt;recensement des dérivés Debian&lt;/a&gt;. Paul Wise a rapidement remonté certains bogues mal renseignés par les premiers utilisateurs de Kali, et j’ai découvert que reportbug ne fonctionnait pas comme prévu même après avoir correctement mis à jour base-files (&lt;em&gt;cf.&lt;/em&gt; &lt;a href=&quot;http://bugs.debian.org/703678&quot;&gt;le n°703678&lt;/a&gt; pour reportbug et &lt;a href=&quot;http://bugs.debian.org/703677&quot;&gt;le n°703677&lt;/a&gt; pour lsb-release).&lt;/p&gt;
&lt;h3&gt;Travaux d’empaquetage divers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;J’ai parrainé une &lt;a href=&quot;http://lists.debian.org/debian-devel-changes/2013/03/msg01455.html&quot;&gt;nouvelle version amont de dnsjava&lt;/a&gt;, car c’était requis par Jitsi ;&lt;/li&gt;
&lt;li&gt;J’ai préparé la version 0.4.1.1 de rebuild, et l’ai envoyée vers le dépôt &lt;em&gt;testing-proposed-updates&lt;/em&gt;, car elle corrige un bogue critique pour la publication ;&lt;/li&gt;
&lt;li&gt;J’ai envoyé Publican dans sa version 3.1.5 vers &lt;em&gt;experimental&lt;/em&gt;, et soumis le rapport de bogue &lt;a href=&quot;http://bugs.debian.org/703514&quot;&gt;n°703514&lt;/a&gt; demandant une nouvelle version amont de docbook-xsl requise par Publican ;&lt;/li&gt;
&lt;li&gt;J’ai créé le rapport de bogue &lt;a href=&quot;http://bugs.debian.org/703995&quot;&gt;n°703995&lt;/a&gt; pour corriger la gestion par apt-setup de l’option &lt;em&gt;preseed&lt;/em&gt; d’apt-setup/multiarch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Election du DPL&lt;/h3&gt;
&lt;p&gt;J’ai également passé pas mal de temps à lire et participer &lt;a href=&quot;https://lists.debian.org/debian-vote/2013/03/author.html#00053&quot;&gt;aux discussions sur la liste debian-vote&lt;/a&gt;, étant donné que les &lt;a href=&quot;http://www.debian.org/vote/2013/vote_001&quot;&gt;candidats au poste de DPL&lt;/a&gt; étaient en pleine campagne électorale. (Bravo à Lucas Nussbaum qui vient d’être élu!)&lt;/p&gt;
&lt;h3&gt;Merci&lt;/h3&gt;
&lt;p&gt;Ce mois a été plutôt bien rempli si l’on prend en compte le fait que j’ai eu un second fils (Lucas) le 6 mars dernier…&lt;/p&gt;
&lt;p&gt;Rendez-vous au mois prochain pour un nouveau résumé de mes activités !&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ceci est une traduction de mon article &lt;a href=&quot;http://raphaelhertzog.com/2013/04/07/my-free-software-activities-in-march-2013/&quot;&gt;My Free Software Activities in March 2013&lt;/a&gt; contribuée par Weierstrass01.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;font-size: smaller;&quot;&gt;&lt;a href=&quot;http://raphaelhertzog.fr/2013/04/14/mes-activites-libres-en-mars-2013/#comments&quot;&gt;Un commentaire&lt;/a&gt; | Vous avez aimé ? &lt;a href=&quot;http://raphaelhertzog.fr/soutenir/&quot;&gt;Cliquez ici&lt;/a&gt;. | Ce blog utilise &lt;a href=&quot;http://flattr.com/thing/26572/Destination-Debian&quot; target=&quot;_blank&quot;&gt;Flattr&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Sun, 14 Apr 2013 19:51:23 +0000</pubDate>
</item>
<item>
	<title>Vincent Bernat: Comptabilité d'une EURL avec GnuCash</title>
	<guid isPermaLink="false">http://www.luffy.cx/fr/blog/2013-gnucash-eurl.html</guid>
	<link>http://vincent.bernat.im/fr/blog/2013-gnucash-eurl.html</link>
	<description>&lt;p&gt;Afin de mener une activité de conseils, j’ai monté une &lt;abbr title=&quot;Entreprise Unipersonnelle à Responsabilité Limitée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;EURL&lt;/span&gt;&lt;/abbr&gt;. Une
comptabilité à jour est une des obligations majeures pour une entreprise.&lt;/p&gt;
&lt;p&gt;Dans le monde libre, il existe plusieurs solutions pour faire de la
comptabilité d’entreprise. Cela va de systèmes plutôt simples comme
&lt;a href=&quot;http://www.gnucash.org&quot; title=&quot;GnuCash&quot;&gt;GnuCash&lt;/a&gt; à des systèmes très compliqués comme &lt;a href=&quot;https://www.openerp.com/&quot; title=&quot;OpenERP&quot;&gt;OpenERP&lt;/a&gt;. Jonathan
Corbet, l’éditeur de &lt;a href=&quot;http://lwn.net&quot; title=&quot;Linux Weekly News&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LWN&lt;/span&gt;&lt;/a&gt; a écrit un article assez intéressant sur
l’état des
&lt;a href=&quot;http://lwn.net/Articles/496158/&quot; title=&quot;Accounting systems: a rant and a quest&quot;&gt;logiciels de comptabilité libres pour petites entreprises&lt;/a&gt;. Sa
conclusion était qu’il n’existait rien qui remplisse ses besoins. Il a
toutefois apprécié &lt;a href=&quot;http://ledger-cli.org/&quot; title=&quot;Ledger&quot;&gt;Ledger&lt;/a&gt;, un système qui se manipule en ligne de
commande et à travers un éditeur de texte classique. Il y a consacré
&lt;a href=&quot;http://lwn.net/Articles/501681/&quot; title=&quot;The accounting quest: Ledger&quot;&gt;un article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J’ai pour ma part opté pour &lt;a href=&quot;http://www.gnucash.org&quot; title=&quot;GnuCash&quot;&gt;GnuCash&lt;/a&gt;. Il existe un peu de
littérature sur le sujet, avec notamment le livre assez complet
&lt;a href=&quot;http://www.packtpub.com/gnucash-24-small-business-accounting-beginners-guide/book&quot; title=&quot;Gnucash 2.4 Small Business Accounting&quot;&gt;Gnucash 2.4 Small Business Accounting&lt;/a&gt;. Le très grande majorité des
ressources est orientée vers la comptabilité dans les pays
anglo-saxons. La comptabilité en France utilise des codes très différents.&lt;/p&gt;
&lt;p&gt;Je propose donc de livrer mon expérience sur &lt;em&gt;GnuCash&lt;/em&gt; dans le cadre suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gestion d’une &lt;strong&gt;&lt;abbr title=&quot;Entreprise Unipersonnelle à Responsabilité Limitée&quot;&gt;&lt;abbr title=&quot;Entreprise Unipersonnelle à Responsabilité Limitée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;EURL&lt;/span&gt;&lt;/abbr&gt;&lt;/abbr&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pas de salariés&lt;/strong&gt;. Étant gérant majoritaire, je me verse une
   indemnité et non un salaire.&lt;/li&gt;
&lt;li&gt;Activité de &lt;strong&gt;conseil en informatique&lt;/strong&gt;. Ni stock, ni marchandise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impôt sur les sociétés&lt;/strong&gt; au réel simplifié. &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; au réel simplifié également.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans ce cadre, &lt;em&gt;GnuCash&lt;/em&gt; est une solution tout à fait valable pour les
opérations courantes. Il a quelques lacunes mais effectue globalement
bien son boulot. Il dispose de plus d’une gestion des clients et des
fournisseurs plutôt correcte. Il peut sortir tout un tas de rapports
plus laids les uns que les autres.&lt;/p&gt;
&lt;p&gt;Les opérations de fin d’année sont par contre une autre paire de
manches. Il y a non seulement la complexité comptable mais également
toutes les démarches administratives. Il me semble préférable de
confier celles-ci à comptable&lt;sup id=&quot;fnref:comptable&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:comptable&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; et donc de vérifier que
celui-ci acceptera les données issues de &lt;em&gt;GnuCash&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;À noter que je ne suis pas comptable et donc certains conseils peuvent
être erronés.&lt;/p&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#introduction-a-la-comptabilite&quot;&gt;Introduction à la comptabilité&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#comptabilite-en-partie-double&quot;&gt;Comptabilité en partie double&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#plan-comptable-general&quot;&gt;Plan comptable général&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#ecritures-comptables&quot;&gt;Écritures comptables&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#operations-de-creation&quot;&gt;Opérations de création&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#capital-initial&quot;&gt;Capital initial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#publication-de-lannonce-legale&quot;&gt;Publication de l’annonce légale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#depot-des-statuts-au-greffe&quot;&gt;Dépôt des statuts au greffe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#operations-courantes&quot;&gt;Opérations courantes&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#repas-du-midi&quot;&gt;Repas du midi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#indemnites-kilometriques&quot;&gt;Indemnités kilométriques&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#abonnements-telephoniques-adsl&quot;&gt;Abonnements téléphoniques &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;ADSL&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#autres-frais-deductibles&quot;&gt;Autres frais déductibles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#achats-divers&quot;&gt;Achats divers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#facturation-et-paiement-dun-client&quot;&gt;Facturation et paiement d’un client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#facturation-avec-des-devises-etrangeres&quot;&gt;Facturation avec des devises étrangères&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#facturation-dun-fournisseur&quot;&gt;Facturation d’un fournisseur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#frais-bancaires&quot;&gt;Frais bancaires&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#paiement-de-la-tva&quot;&gt;Paiement de la &lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#remuneration-du-gerant&quot;&gt;Rémunération du gérant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#cotisations-urssaf-rsi&quot;&gt;Cotisations &lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt; &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;RSI&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#operations-de-fin-dexercice&quot;&gt;Opérations de fin d’exercice&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#provisions-pour-remuneration&quot;&gt;Provisions pour rémunération&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#provisions-pour-charges-sociales&quot;&gt;Provisions pour charges sociales&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#cloture-des-comptes&quot;&gt;Clôture des comptes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#calcul-de-limpot-sur-les-societes&quot;&gt;Calcul de l’impôt sur les sociétés&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#etablissement-du-compte-de-resultat-et-du-bilan&quot;&gt;Établissement du compte de résultat et du bilan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#affectation-du-resultat&quot;&gt;Affectation du résultat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#declaration-de-lis&quot;&gt;Déclaration de l’&lt;span class=&quot;caps&quot;&gt;IS&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h1 id=&quot;introduction-a-la-comptabilite&quot;&gt;Introduction à la comptabilité&lt;/h1&gt;
&lt;p&gt;La comptabilité est un outil permettant de recenser et d’évaluer tous
les événements qui influent sur la valeur de l’entreprise. Un
événement, cela peut être l’émission d’une créance vers un client,
l’achat d’une agrafeuse, le recouvrement de la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; collectée ou le
don d’un tracteur agricole.&lt;/p&gt;
&lt;h2 id=&quot;comptabilite-en-partie-double&quot;&gt;Comptabilité en partie double&lt;/h2&gt;
&lt;p&gt;En entreprise, la comptabilité s’effectue en &lt;a href=&quot;http://fr.wikipedia.org/wiki/Comptabilit%C3%A9_en_partie_double&quot; title=&quot;Comptabilité en partie double sur Wikipedia&quot;&gt;partie double&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La comptabilité en partie double est la base du système comptable
utilisé par toutes les entreprises et organisations. Elle est fondée
sur l’idée selon laquelle les opérations et la situation financière
d’une organisation peuvent être représentées par des comptes. Chaque
compte contient l’historique des modifications de la valeur
monétaire d’un aspect particulier de l’organisation. On parle de
partie double quand l’enregistrement d’écriture est inscrit dans
deux comptes (au moins) : un compte débité, et un compte crédité.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour chaque événement, il faut &lt;strong&gt;créditer&lt;/strong&gt; un certain nombre de
comptes et en &lt;strong&gt;débiter&lt;/strong&gt; d’autres. De plus, le total des crédits doit
être égal au total des débits.&lt;/p&gt;
&lt;p&gt;La notion de &lt;em&gt;débit&lt;/em&gt; et de &lt;em&gt;crédit&lt;/em&gt; est assez compliquée à appréhender
et peu intuitive. Ainsi, pour acheter une agrafeuse, on va &lt;em&gt;créditer&lt;/em&gt;
le compte bancaire et &lt;em&gt;débiter&lt;/em&gt; le compte recensant les petits
achats. Un événement implique toujours une &lt;strong&gt;ressource&lt;/strong&gt; et un
&lt;strong&gt;emploi&lt;/strong&gt;. La ressource permet de financer l’emploi. Elle est
toujours marquée au crédit d’un compte alors que l’emploi est toujours
marqué au débit. Dans notre exemple d’agrafeuse, l’achat se fait avec
l’argent du compte en banque qui est une ressource et il faut donc
créditer le compte. Inversement, quand on vend une prestation à un
client, la ressource est la prestation et l’emploi est le client. Il
faut donc débiter le compte du client et créditer le compte des prestations.&lt;/p&gt;
&lt;p&gt;Si vous êtes déjà perdus ici, pas de panique. L’important est d’être
attentif aux exemples. De plus, &lt;em&gt;GnuCash&lt;/em&gt; utilise par défaut des
termes plus compréhensibles selon le type de compte (mais parfois mal
francisés), à moins de choisir dans les préférences d’utiliser la
terminologie comptable.&lt;/p&gt;
&lt;p&gt;Chaque opération donne lieu à une écriture comptable qui va concerner
un ou plusieurs comptes. Sur papier, il fallait écrire la même
opération dans chaque compte. Profitant des progrés en informatique de
ces dernières années, &lt;em&gt;GnuCash&lt;/em&gt; gère cela tout seul. Si, si. Voici à
quoi ressemble notre achat d’agrafeuse&lt;sup id=&quot;fnref:ecriture&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:ecriture&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;Banque&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;35,88 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6063&lt;/td&gt;
&lt;td&gt;Petit matériel&lt;/td&gt;
&lt;td&gt;30,00 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4456&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;5,88 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cette transaction a mis en jeu trois comptes. L’écriture va donc se
trouver sur les trois comptes à la fois.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le compte bancaire de l’entreprise qui a été &lt;em&gt;crédité&lt;/em&gt; de 35,88 €
   qui est le prix toutes taxes comprises de notre agrafeuse. Le
   crédit de ce compte provoque un retrait de l’argent qui s’y
   trouvait et donc un appauvrissement de l’entreprise.&lt;/li&gt;
&lt;li&gt;Le compte recensant les achats de petit matériel. Il a été &lt;em&gt;débité&lt;/em&gt;
   de 30,00 € qui correspond au prix hors taxes de l’agrafeuse. Il
   s’agit d’une charge pour l’entreprise. L’agrafeuse ne rentre pas
   dans le patrimoine de l’entreprise.&lt;/li&gt;
&lt;li&gt;Le compte recensant la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; que l’on peut déduire de notre prochaine
   déclaration. L’État devient alors débiteur de la somme de 5,88 €
   qu’il devra nous rembourser lors de la prochaine déclaration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On remarque que la somme des débits est égal à la somme des
crédits. C’est obligatoire. Pour toute écriture, la &lt;strong&gt;balance doit
être équilibrée&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;plan-comptable-general&quot;&gt;Plan comptable général&lt;/h2&gt;
&lt;p&gt;Maintenant que vous avez vaguement compris comment marchait une
écriture comptable, vous vous demandez peut-être quels sont les
comptes qu’il faut utiliser. Le système comptable français définit
très précisément les comptes à utiliser dans le &lt;strong&gt;plan comptable
général&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Il existe en fait trois plans comptables :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;le système de base,&lt;/li&gt;
&lt;li&gt;le système abrégé comprenant &lt;em&gt;moins&lt;/em&gt; de comptes,&lt;/li&gt;
&lt;li&gt;le système développé comprenant &lt;em&gt;plus&lt;/em&gt; de comptes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le système à choisir dépend de la taille de l’entreprise. On choisit
généralement le système correspondant au bilan et au compte de
résultat demandé par les impôts en fin d’exercice. Pour une société au
réel simplifié, il est possible d’opter pour le système abrégé. Le
plan comptable général est disponible sur le site de
l’&lt;a href=&quot;http://www.anc.gouv.fr/sections/normes_privees/plans_comptables/plans_comptables/cpsdocument_view&quot; title=&quot;Plan comptable général français&quot;&gt;autorité des normes comptables&lt;/a&gt;. Il fait plus de 400
pages. L’&lt;a href=&quot;http://fr.wikipedia.org/wiki/Plan_comptable_g%C3%A9n%C3%A9ral_(France)&quot; title=&quot;Plan comptable général sur Wikipedia&quot;&gt;article correspondant de Wikipedia&lt;/a&gt; fournit la liste des comptes.&lt;/p&gt;
&lt;p&gt;Chaque compte est identifié par un nombre. Le premier chiffre indique
la classe du compte :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Les comptes de capitaux (capitaux propres, emprunts).&lt;/li&gt;
&lt;li&gt;Les comptes d’immobilisation (peu utilisés dans notre cas).&lt;/li&gt;
&lt;li&gt;Les comptes de stocks et d’en-cours (peu utilisés également).&lt;/li&gt;
&lt;li&gt;Les comptes de tiers (les fournisseurs, les clients, l’État, vous).&lt;/li&gt;
&lt;li&gt;Les comptes financiers (le compte en banque).&lt;/li&gt;
&lt;li&gt;Les comptes de charges (ce qui appauvrit votre entreprise).&lt;/li&gt;
&lt;li&gt;Les comptes de produits (ce qui enrichit votre entreprise).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les cinq premières classes de comptes sont les comptes de bilan. Ils
permettent de savoir ce que votre entreprise possède (l’actif et le
passif) à tout moment. Les deux dernières classes sont les comptes de
résultat. Ils sont remis à zéro après chaque exercice. Ils permettent
notamment de connaître le résultat d’une entreprise sur un exercice.&lt;/p&gt;
&lt;p&gt;Parmi les comptes les plus importants, on notera :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Le capital de la société.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;Les comptes des fournisseurs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;411&lt;/td&gt;
&lt;td&gt;Les comptes des clients.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;td&gt;Les comptes pour la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;Le compte de l’associé (pour se faire rembourser les frais).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;Le compte bancaire de l’entreprise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6063&lt;/td&gt;
&lt;td&gt;Le compte pour l’achat de fournitures dont la valeur ne dépasse pas 500 €.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;625&lt;/td&gt;
&lt;td&gt;Le compte pour les frais liés aux déplacements et aux missions. On y colle notamment les frais de restauration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6410&lt;/td&gt;
&lt;td&gt;Le compte permettant de verser une indemnité au gérant.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;706&lt;/td&gt;
&lt;td&gt;Le compte où sont crédités les revenus liés à des prestations de service.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Il en existe bien d’autres. Si un compte dispose d’un sous-compte, il
faut utiliser uniquement l’un des sous-comptes.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;GnuCash&lt;/em&gt; n’a pas le plan comptable général parmi les plans comptables
proposés par défaut. Vous pouvez soit télécharger le
&lt;a href=&quot;http://gnucash.entreprise.free.fr/page6.html&quot; title=&quot;Plan comptable pour les TPE&quot;&gt;plan comptable mis à disposition par Vincent Laure&lt;/a&gt;, soit
télécharger le &lt;a href=&quot;http://media.luffy.cx/files/PlanComptable.gnucash&quot; title=&quot;Plan comptable abrégé pour GnuCash&quot;&gt;plan comptable que j’utilise&lt;/a&gt; qui correspond au
système abrégé avec quelques comptes supplémentaires et certains
comptes retirés. Il comprend également un compte fournisseur et deux
comptes clients dont l’un en devises américaines.&lt;/p&gt;
&lt;h1 id=&quot;ecritures-comptables&quot;&gt;Écritures comptables&lt;/h1&gt;
&lt;p&gt;Pour chaque écriture comptable, il faut connaître les comptes à
débiter et les comptes à créditer. Généralement, cela n’a pas grand
chose à voir avec &lt;em&gt;GnuCash&lt;/em&gt;. Il est donc possible de se référer à
l’abondante littérature sur le sujet ainsi qu’aux nombreux forums
spécialisés dans la comptabilité.&lt;/p&gt;
&lt;p&gt;Généralement, je fais une recherche préfixée par « écriture
comptable » pour trouver mon bonheur. Je regarde les deux ou trois
premières réponses pour me faire une idée. Les numéros de comptes
indiqués sont généralement à cinq chiffres. Il n’est pas nécessaire de
créer le compte exact : il suffit d’utiliser le compte du système
abrégé ayant le même préfixe.&lt;/p&gt;
&lt;p&gt;Il est crucial de ne pas s’emmêler avec les débits et les
crédits. Dans une représentation en colonnes, les débits sont toujours
dans la colonne de gauche. Les crédits sont dans la colonne de droite.&lt;/p&gt;
&lt;p&gt;Enfin, &lt;em&gt;GnuCash&lt;/em&gt; propose d’associer un numéro à chaque requête. Je
scanne chaque pièce justificative et indique son numéro et une
description dans le nom de fichier.&lt;/p&gt;
&lt;h2 id=&quot;operations-de-creation&quot;&gt;Opérations de création&lt;/h2&gt;
&lt;p&gt;La création de l’entreprise entraîne un certain nombre d’écritures. Il
est important de noter que les écritures ne peuvent pas être
antérieures à la création de l’entreprise.&lt;/p&gt;
&lt;h3 id=&quot;capital-initial&quot;&gt;Capital initial&lt;/h3&gt;
&lt;p&gt;L’apport du capital initial se fait en deux fois. Chaque associé fait
d’abord une promesse d’apport en capital. Il devient alors débiteur du
capital promis sur un compte dédié à cet effet. Ensuite, lorsque
l’argent arrive sur le compte de l’entreprise, l’associé est crédité
de cet apport.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;456&lt;/td&gt;
&lt;td&gt;Promesse d’apport&lt;/td&gt;
&lt;td&gt;5000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;456&lt;/td&gt;
&lt;td&gt;Versement apport&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;publication-de-lannonce-legale&quot;&gt;Publication de l’annonce légale&lt;/h3&gt;
&lt;p&gt;Une des étapes de la création d’entreprise est la publication d’une
annonce légale. Généralement, un associé avance l’argent et est
remboursé après la création.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;623&lt;/td&gt;
&lt;td&gt;Annonce légale&lt;/td&gt;
&lt;td&gt;97,71 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;19,16 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;116,87 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;depot-des-statuts-au-greffe&quot;&gt;Dépôt des statuts au greffe&lt;/h3&gt;
&lt;p&gt;Le dépôt des statuts au greffe suit la même logique.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;622&lt;/td&gt;
&lt;td&gt;Greffe du tribunal&lt;/td&gt;
&lt;td&gt;72,08 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;14,13 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;86,21 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;operations-courantes&quot;&gt;Opérations courantes&lt;/h2&gt;
&lt;p&gt;Les opérations courantes impliquant un flux financier créditent soit
le compte bancaire de l’entreprise (512) ou celui de l’associé
(455). Dans ce sens, c’est généralement interchangeable. L’associé
peut être crédité de l’argent que l’entreprise lui doit par une
écriture débitant le compte de l’entreprise :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;Remboursement frais&lt;/td&gt;
&lt;td&gt;100 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;100 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;repas-du-midi&quot;&gt;Repas du midi&lt;/h3&gt;
&lt;p&gt;Une écriture courante est le remboursement du repas du midi. Il y a
beaucoup de théories à ce sujet. Il peut y avoir un plafond (environ
17 €), une somme forfaitaire à déduire (environ 4 €) et la
déductibilité ou non de la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;. À noter que le paiement d’une somme
forfaitaire pour le repas de midi ne semble pas admise. Tout repas
doit venir avec un justificatif.&lt;/p&gt;
&lt;p&gt;Pour ma part, je n’applique aucun plafond, je ne déduis aucune somme
forfaitaire mais je ne déduis pas la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;, à moins qu’il s’agisse d’une
invitation. Je paie toujours avec ma carte de crédit personnelle.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6256&lt;/td&gt;
&lt;td&gt;Repas du midi&lt;/td&gt;
&lt;td&gt;13,20 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;13,20 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;indemnites-kilometriques&quot;&gt;Indemnités kilométriques&lt;/h3&gt;
&lt;p&gt;Si vous vous déplacez avec votre véhicule personnel, vous pouvez vous
verser des indemnités kilométriques. Si le trajet est régulier, il
semble qu’il n’est pas nécessaire de tenir un journal des
déplacements. À noter que le barème évolue chaque année et dépend de
la distance parcourue dans l’année. Dans le cas de trajets réguliers,
je ne fais qu’une seule écriture par mois.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6251&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Indemnités kilométriques&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IK&lt;/span&gt;&lt;/abbr&gt; pour trajet de X à Y, 20 jours&lt;/td&gt;
&lt;td&gt;141,50 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;141,50 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le train, l’avion, le taxi, les voitures de location se notent de la
même façon. À noter dans ce cas qu’il n’est jamais possible de
récupérer la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; sur un transport de personnes.&lt;/p&gt;
&lt;h3 id=&quot;abonnements-telephoniques-adsl&quot;&gt;Abonnements téléphoniques &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;ADSL&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;S’il y a usage professionnel, il est possible de se faire rembourser
tout ou partie d’un abonnement téléphonique ou &lt;span class=&quot;caps&quot;&gt;ADSL&lt;/span&gt;. Il faudra pouvoir
justifier de l’usage professionnel. Certains indiquant que la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;
n’est normalement déductible que si la facture est au nom de
l’entreprise. Personnellement, je la déduis tout de même.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;626&lt;/td&gt;
&lt;td&gt;Abonnement &lt;span class=&quot;caps&quot;&gt;ADSL&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;10,89 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;2,14 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;13,03 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Je fais passer de la même façon les abonnements à des services Web
comme Amazon ou l’achat de noms de domaine.&lt;/p&gt;
&lt;h3 id=&quot;autres-frais-deductibles&quot;&gt;Autres frais déductibles&lt;/h3&gt;
&lt;p&gt;Si le siège de votre entreprise est votre domicile, il est également
possible de déduire au prorata de la surface utilisée :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une partie du loyer (je ne fais pas),&lt;/li&gt;
&lt;li&gt;une partie des factures &lt;span class=&quot;caps&quot;&gt;EDF&lt;/span&gt;, d’eau, des charges locatives (compte 6061),&lt;/li&gt;
&lt;li&gt;une partie de l’assurance locative (compte 616)&lt;/li&gt;
&lt;li&gt;une partie de la taxe d’habitation (compte 635)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;achats-divers&quot;&gt;Achats divers&lt;/h3&gt;
&lt;p&gt;Pour l’achat d’un bouquin, il faut utiliser le compte 6181. Pour
l’achat d’une fourniture ou d’un matériel dont la valeur n’excède pas
500 €, il faut utiliser le compte 6063. Je vous renvoie à l’exemple de
l’agrafeuse en introduction.&lt;/p&gt;
&lt;p&gt;Voici un autre exemple avec des frais de ports :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;35,88 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6063&lt;/td&gt;
&lt;td&gt;Petit matériel&lt;/td&gt;
&lt;td&gt;27,00 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;624&lt;/td&gt;
&lt;td&gt;Frais de ports&lt;/td&gt;
&lt;td&gt;3,00 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4456&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;5,88 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pour les montants supérieurs à 500 €, l’achat devient une
immobilisation et non une charge. Il faut de plus en gérer l’amortissement.&lt;/p&gt;
&lt;h3 id=&quot;facturation-et-paiement-dun-client&quot;&gt;Facturation et paiement d’un client&lt;/h3&gt;
&lt;p&gt;La principale source de revenus provient normalement des paiements des
clients. Il y a deux étapes :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Il faut d’abord adresser une facture au client. Celui-ci est alors
    débiteur du montant demandé.&lt;/li&gt;
&lt;li&gt;Quelques jours, mois, années plus tard, le client paie. On crédite
    alors son compte et s’il a payé exactement la somme facturée, son
    solde devient nul.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les deux opérations n’ont généralement pas lieu à la même date. Chaque
client dispose de son propre compte sous le compte 411 : il ne faut
pas utiliser directement le compte 411.&lt;/p&gt;
&lt;p&gt;On effectue de plus la collecte de la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; pour l’État. Si le client
est un professionnel, il récupérera la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; de son côté. Si le client
se trouve dans l’Union Européenne et qu’il fournit un numéro de &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;
intracommunautaire, il n’est pas nécessaire de lui faire payer la
&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;. Sinon, la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; française s’applique. Il semble être d’usage
d’utiliser un compte spécial (7062 au lieu de 706) dans ce cas. S’il
est hors Union Européenne, les prestations de service sont exonérées
de &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;GnuCash&lt;/em&gt; dispose d’un module d’édition des factures qui fait assez
bien son boulot. Je n’utilise toutefois pas la possibilité d’imprimer
la facture. Le rendu est assez désolant et je préfère donc faire mes
factures manuellement avec LaTeX.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;GnuCash&lt;/em&gt; gère aussi la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;, mais de manière partielle. L’entreprise
n’est redevable de la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; qu’au moment du paiement. Au moment de la
facturation, la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; est placée dans un compte de régularisation
(4458). &lt;em&gt;GnuCash&lt;/em&gt; va calculer automatiquement la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; et placer
l’écriture suivante au moment de valider la facture :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;411×&lt;/td&gt;
&lt;td&gt;Client Durant&lt;/td&gt;
&lt;td&gt;1196 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4458&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; à régulariser&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;196 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;706&lt;/td&gt;
&lt;td&gt;Prestation conseil&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Par contre, au moment du paiement, il va simplement créditer le compte
du client et débiter le compte en banque. Il faut alors penser à
ajouter manuellement le transfert de la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; au crédit du compte de la
&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; collectée (4457). L’écriture du paiement ressemble à ceci :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;411×&lt;/td&gt;
&lt;td&gt;Client Durant&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1196 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4457&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; collectée&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;196 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4458&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; à régulariser&lt;/td&gt;
&lt;td&gt;196 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1196 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;facturation-avec-des-devises-etrangeres&quot;&gt;Facturation avec des devises étrangères&lt;/h3&gt;
&lt;p&gt;Si votre client vous paie en devises étrangères, les choses se
compliquent énormément. En effet, votre client va disposer dans votre
système d’un compte en dollars (par exemple). Mais tous vos autres
comptes sont en euros. &lt;em&gt;GnuCash&lt;/em&gt; gère cette situation en permettant
d’indiquer un taux de change. Voici l’écriture qui apparaîtra dans le
compte du client :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;411×&lt;/td&gt;
&lt;td&gt;Client Scott&lt;/td&gt;
&lt;td&gt;1000 $&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;706&lt;/td&gt;
&lt;td&gt;Prestation conseil&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 $&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;GnuCash&lt;/em&gt; va vous demander le taux de change actuel. Du coup, dans le
compte 706, vous verrez :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;411×&lt;/td&gt;
&lt;td&gt;Client Scott&lt;/td&gt;
&lt;td&gt;767 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;706&lt;/td&gt;
&lt;td&gt;Prestation conseil&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;767 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Au moment du paiement, les choses se compliquent. Votre client vous
paie 1000 $. Toutefois, ce ne sont pas 767 € qui arrivent sur votre
compte, mais seulement 738 €. En effet, au moment du paiement, le
taux de change a évolué. Vous avez alors une perte de change. Cette
parte va s’inscrire au compte 666. S’il y avait eu gain, ce serait le
compte 766.&lt;/p&gt;
&lt;p&gt;Une façon simple de gérer le problème est de passer l’écriture en
euros de cette façon :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;738 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;666&lt;/td&gt;
&lt;td&gt;Perte de change&lt;/td&gt;
&lt;td&gt;29 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;411×&lt;/td&gt;
&lt;td&gt;Client Scott&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;767 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Il faut alors réutiliser le taux de change &lt;em&gt;initial&lt;/em&gt;. De cette façon,
on obtient dans le compte du client :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;960,00 $&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;666&lt;/td&gt;
&lt;td&gt;Perte de change&lt;/td&gt;
&lt;td&gt;40,00 $&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;411×&lt;/td&gt;
&lt;td&gt;Client Scott&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 $&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le problème de devises peut aussi se poser pour l’achat de
services. Toutefois, si la valeur est assez faible, il me semble plus
simple de passer ces services sous forme d’une charge en euros.&lt;/p&gt;
&lt;h3 id=&quot;facturation-dun-fournisseur&quot;&gt;Facturation d’un fournisseur&lt;/h3&gt;
&lt;p&gt;Si vous achetez des prestations à un fournisseur et que les montants
sont suffisamment élevés (sinon, vous pouvez les passer directement en
charges), vous pouvez créer un compte pour le fournisseur. Le schéma
est similaire à la facturation d’un client. Le fournisseur vous envoie
une facture, vous l’enregistrez et créditez le compte du fournisseur
et débitez le compte de charge correspondant. Au paiement, vous
débitez le fournisseur et créditez le compte en banque. Par exemple,
pour un serveur dédié en Allemagne (pas de &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;) :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;626&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;41 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;401x&lt;/td&gt;
&lt;td&gt;Fournisseur Albert&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;41 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Au paiement de la facture :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;401x&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;41 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;Paiement facture&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;41 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;frais-bancaires&quot;&gt;Frais bancaires&lt;/h3&gt;
&lt;p&gt;Tous les mois, la banque va vous adresser une facture pour ses
services. C’est généralement plus salé que lorsqu’on est un
particulier. Personne ne sait trop bien pourquoi.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;23,92 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;627&lt;/td&gt;
&lt;td&gt;Frais mensuels &lt;span class=&quot;caps&quot;&gt;XX&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;20,00 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4456&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;3,92 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;paiement-de-la-tva&quot;&gt;Paiement de la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;&lt;/h3&gt;
&lt;p&gt;Une fois par trimestre, il va falloir verser un accompte sur la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;
collectée pour l’État. On en profite aussi pour se faire rembourser la
&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible. Il semble d’usage de passer par deux écritures
comptables qui ont généralement lieu en même temps :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4457&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; collectée&lt;/td&gt;
&lt;td&gt;2500 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4456&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;100 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4455&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; à décaisser&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2400 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4455&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; à décaisser&lt;/td&gt;
&lt;td&gt;2400 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;Paiement &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2400 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le réglement se fait en ligne sur le site des impôts. Il y a deux cases à remplir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la base hors taxe des opérations imposables pour la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; à 19,6 %
   (12 755 € dans notre cas pour arriver à une &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; de 2500 €),&lt;/li&gt;
&lt;li&gt;la &lt;abbr title=&quot;Taxe sur la Valeur Ajoutée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TVA&lt;/span&gt;&lt;/abbr&gt; déductible sur les factures de 100 €.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En fin d’année, il y a un formulaire supplémentaire pour régulariser
la situation. Il me semble plus simple de toujours payer exactement ce
qu’il faut sur les accomptes. Cela ne vous dispense pas de remplir le
formulaire adéquat.&lt;/p&gt;
&lt;h3 id=&quot;remuneration-du-gerant&quot;&gt;Rémunération du gérant&lt;/h3&gt;
&lt;p&gt;De temps en temps, il est possible de vous verser une rémunération. Le
versement est net. Il faudra payer des cotisations &lt;abbr title=&quot;Unions de Recouvrement des Cotisations de Sécurité Sociale et d'Allocations Familiales&quot;&gt;&lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt;&lt;/abbr&gt; et &lt;abbr title=&quot;Régime social des indépendants&quot;&gt;&lt;span class=&quot;caps&quot;&gt;RSI&lt;/span&gt;&lt;/abbr&gt; par
la suite. Il ne s’agit pas d’un salaire.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6410&lt;/td&gt;
&lt;td&gt;Rémunération Juin&lt;/td&gt;
&lt;td&gt;3000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;cotisations-urssaf-rsi&quot;&gt;Cotisations &lt;abbr title=&quot;Unions de Recouvrement des Cotisations de Sécurité Sociale et d'Allocations Familiales&quot;&gt;&lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt;&lt;/abbr&gt; &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; &lt;abbr title=&quot;Régime social des indépendants&quot;&gt;&lt;span class=&quot;caps&quot;&gt;RSI&lt;/span&gt;&lt;/abbr&gt;&lt;/h3&gt;
&lt;p&gt;Lorsque vous payez vos cotisations &lt;abbr title=&quot;Unions de Recouvrement des Cotisations de Sécurité Sociale et d'Allocations Familiales&quot;&gt;&lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt;&lt;/abbr&gt; et &lt;abbr title=&quot;Régime social des indépendants&quot;&gt;&lt;span class=&quot;caps&quot;&gt;RSI&lt;/span&gt;&lt;/abbr&gt;, vous devez obtenir
un reçu indiquant la répartition des montants. Voici par exemple comme
régler la première cotisation forfaitaire de 448 € pour l’&lt;abbr title=&quot;Unions de Recouvrement des Cotisations de Sécurité Sociale et d'Allocations Familiales&quot;&gt;&lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt;&lt;/abbr&gt; :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;645&lt;/td&gt;
&lt;td&gt;Allocations familiales&lt;/td&gt;
&lt;td&gt;144 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution sociale généralisée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CSG&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;136 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution sociale généralisée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CSG&lt;/span&gt;&lt;/abbr&gt; non déductible&lt;/td&gt;
&lt;td&gt;64 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution pour le remboursement de la dette sociale&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CRDS&lt;/span&gt;&lt;/abbr&gt;&lt;/td&gt;
&lt;td&gt;13 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;Formation professionnelle&lt;/td&gt;
&lt;td&gt;91 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;448 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On notera qu’une partie de la &lt;abbr title=&quot;Contribution sociale généralisée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CSG&lt;/span&gt;&lt;/abbr&gt; est imputée en charges pour
l’entreprise tandis qu’une partie est payée par l’associé.&lt;/p&gt;
&lt;h2 id=&quot;operations-de-fin-dexercice&quot;&gt;Opérations de fin d’exercice&lt;/h2&gt;
&lt;p&gt;Les opérations courantes sont relativement simples à appréhender après
les premiers mois. Les opérations de fin d’exercice sont par contre
beaucoup plus complexes. Je vous conseillerais plutôt de prendre un
comptable pour cette partie. Ce qui suit est à prendre avec des
pincettes : personne n’est venu vérifier la validité de ma comptabilité.&lt;/p&gt;
&lt;p&gt;Toutes les écritures sont à passer à la date du dernier jour de
l’exercice. Elles doivent normalement régulariser les écritures
concernant l’exercice passé. On y trouve :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;régularisation du compte bancaire avec le relevé bancaire,&lt;/li&gt;
&lt;li&gt;régularisation des charges et des produits&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les charges (ou les produits) qui sont à cheval sur deux exercices
(comme le réglement d’une prime d’assurance, un abonnement de trois
mois, …) doivent faire l’objet d’une écriture pour charges
constatées d’avance. Dans le cas d’une petite entreprise, il semble
que l’exercice soit optionnel si les sommes mises en jeu sont faibles.&lt;/p&gt;
&lt;p&gt;Il existe d’autres écritures mais qui ne nous concernent pas s’il n’y
a pas eu d’écritures correspondantes dans l’année passée :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;régularisation des stocks&lt;/li&gt;
&lt;li&gt;régularisation des immobilisations&lt;/li&gt;
&lt;li&gt;régularisation des placements&lt;/li&gt;
&lt;li&gt;régularisation des amortissements&lt;/li&gt;
&lt;li&gt;régularisation des dépréciations&lt;/li&gt;
&lt;li&gt;régularisation des provisions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;provisions-pour-remuneration&quot;&gt;Provisions pour rémunération&lt;/h3&gt;
&lt;p&gt;C’est aussi le bon moment pour décider de compléter votre
rémunération. En effet, le bénéfice de l’entreprise peut être
distribuée en rémunérations (soumises à l’&lt;span class=&quot;caps&quot;&gt;IR&lt;/span&gt;) ou en dividendes. Dans
le second cas, la somme destinée à cet effet sera d’abord soumise à
l’impôt sur les sociétés. Le calcul peut être effectué via un
&lt;a href=&quot;http://www.entrepriseindividuelle.info/Calc_CharSoc.php&quot; title=&quot;Simulateur de répartition dividendes/rémunération pour un gérant&quot;&gt;simulateur&lt;/a&gt;. Les dividendes étant taxés comme des revenus à
partir de 2013 pour la part dépassant les 10 % du capital de la
société, il n’est pas très intéressant de se verser des dividendes.&lt;/p&gt;
&lt;p&gt;Si vous voulez compléter votre rémunération de 10 000 €, il suffirait
de passer l’écriture suivante au dernier jour de l’exercice :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6410&lt;/td&gt;
&lt;td&gt;Provision pour rémunération&lt;/td&gt;
&lt;td&gt;10 000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;10 000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Il faudra alors ensuite provisionner les charges correspondantes.&lt;/p&gt;
&lt;h3 id=&quot;provisions-pour-charges-sociales&quot;&gt;Provisions pour charges sociales&lt;/h3&gt;
&lt;p&gt;Il est possible de provisionner les sommes qui seront demandées par
les différents organismes sociaux (&lt;abbr title=&quot;Unions de Recouvrement des Cotisations de Sécurité Sociale et d'Allocations Familiales&quot;&gt;&lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt;&lt;/abbr&gt;, &lt;span class=&quot;caps&quot;&gt;CIPAV&lt;/span&gt;, &lt;abbr title=&quot;Régime social des indépendants&quot;&gt;&lt;span class=&quot;caps&quot;&gt;RSI&lt;/span&gt;&lt;/abbr&gt;) et de les
déduire du résultat. Il faut donc déterminer une approximation des
cotisations qui seront réclamées à l’aide d’un des &lt;a href=&quot;http://www.entrepriseindividuelle.info/Calc_CharSoc.php&quot; title=&quot;Simulateur de calcul des charges sociales&quot;&gt;nombreux&lt;/a&gt;
&lt;a href=&quot;http://www.guide-tns.fr/chargesprofessionnelliberal2012.html&quot; title=&quot;Simulateur de calcul des charges sociales&quot;&gt;simulateurs&lt;/a&gt; que l’on trouve sur le web. Ensuite, l’écriture
semble être la suivante&lt;sup id=&quot;fnref:provision&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:provision&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;645&lt;/td&gt;
&lt;td&gt;Maladie/Vieillesse/&lt;span class=&quot;caps&quot;&gt;AF&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;4000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution sociale généralisée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CSG&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;1000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;Provisions pour charges&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pour chaque paiement, il faudra débiter le compte 43 au lieu des
comptes 645 et 63. Par exemple, pour les cotisations &lt;abbr title=&quot;Unions de Recouvrement des Cotisations de Sécurité Sociale et d'Allocations Familiales&quot;&gt;&lt;span class=&quot;caps&quot;&gt;URSSAF&lt;/span&gt;&lt;/abbr&gt;, on ferait :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;Allocations familiales&lt;/td&gt;
&lt;td&gt;144 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution sociale généralisée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CSG&lt;/span&gt;&lt;/abbr&gt; déductible&lt;/td&gt;
&lt;td&gt;136 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution sociale généralisée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CSG&lt;/span&gt;&lt;/abbr&gt; non déductible&lt;/td&gt;
&lt;td&gt;64 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;455&lt;/td&gt;
&lt;td&gt;&lt;abbr title=&quot;Contribution pour le remboursement de la dette sociale&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CRDS&lt;/span&gt;&lt;/abbr&gt;&lt;/td&gt;
&lt;td&gt;13 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;Formation professionnelle&lt;/td&gt;
&lt;td&gt;91 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;448 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Si la provision s’avère trop importante en fin d’année suivante, il
faudra affecter le surplus au compte 787.&lt;/p&gt;
&lt;h3 id=&quot;cloture-des-comptes&quot;&gt;Clôture des comptes&lt;/h3&gt;
&lt;p&gt;Une fois les régularisations effectuées, on passe aux travaux de
clôture et de réouverture des comptes. Il s’agit de &lt;strong&gt;solder&lt;/strong&gt; tous
les comptes de charges (dont le numéro commence par 6) et de produits
(dont le numéro commence par 7). Solder signifie mettre la balance du
compte à zéro.&lt;/p&gt;
&lt;p&gt;Si le compte 709 est débiteur, il faut le solder manuellement dans un
autre compte (le 706 par exemple). Si les comptes 609, 619 ou 629 sont
créditeurs, il faut les solder avec l’un des voisins (par exemple,
6063, 6181 et 6251). Ces comptes sont particuliers car ils
fonctionnent dans le sens inverse des comptes de la même catégorie.&lt;/p&gt;
&lt;p&gt;Vient ensuite la clôture proprement dite. &lt;em&gt;GnuCash&lt;/em&gt; dispose d’une
fonction pour vous aider à la réaliser. Dans le menu « Outils »,
choisir la fonction « Clôturer le livre ». Indiquer la date de clôture
(dernier jour de l’exercice) et les comptes à utiliser pour les
revenus et les dépenses. Dans le cadre du système abrégé, il s’agit du
compte 12. On obtient l’écriture suivante :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;706&lt;/td&gt;
&lt;td&gt;Prestations conseil&lt;/td&gt;
&lt;td&gt;50 000 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;627&lt;/td&gt;
&lt;td&gt;Services bancaires&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;100 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;Impôts et taxes&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;200 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6251&lt;/td&gt;
&lt;td&gt;Voyages et déplacements&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6256&lt;/td&gt;
&lt;td&gt;Frais de missions&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6410&lt;/td&gt;
&lt;td&gt;Rémunération du gérant&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;20 000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;645&lt;/td&gt;
&lt;td&gt;Charges sociales&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;8000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6063&lt;/td&gt;
&lt;td&gt;Petit matériel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Transfert des charges&lt;/td&gt;
&lt;td&gt;31 300 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Transfert des produits&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;50000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On se retrouve avec un &lt;strong&gt;résultat bénéficiaire&lt;/strong&gt; de 18 700 €.&lt;/p&gt;
&lt;p&gt;Pour la réouverture des comptes, il était d’usage d’utiliser des
livres papiers différents pour chaque exercice. Certains préconisent
de faire de même en repartant de zéro pour le nouvel exercice. J’ai
personnellement choisi de garder tous les exercices dans un seul
fichier &lt;em&gt;GnuCash&lt;/em&gt;. Cela dispense de fastidieuses écritures de bilan.&lt;/p&gt;
&lt;h3 id=&quot;calcul-de-limpot-sur-les-societes&quot;&gt;Calcul de l’impôt sur les sociétés&lt;/h3&gt;
&lt;p&gt;Le bénéfice permet de calculer l’impôt dû pour l’exercice
précédent. Sur le bénéfice calculé précédemment, l’impôt dû est de
15 % pour la partie inférieure à 38 120 € et de 33,3 % pour le
reste. Dans notre exemple, l’impôt dû est donc de 2 805 €.&lt;/p&gt;
&lt;p&gt;Avec cette information, vous pouvez revenir quelques étapes en arrière
en annulant la clôture des comptes (il suffit d’effacer les deux
écritures) et en ajustant la provision pour rémunération. Dans le cas
contraire, vous pourrez toujours récupérer le résultat en dividendes
mais l’imposition est plutôt prohibitive.&lt;/p&gt;
&lt;p&gt;Une fois que votre calcul est définitif, il faut passer l’écriture suivante :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;695&lt;/td&gt;
&lt;td&gt;Paiement de l’&lt;abbr title=&quot;Impôt sur les sociétés&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IS&lt;/span&gt;&lt;/abbr&gt;&lt;/td&gt;
&lt;td&gt;2 805 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;444&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2 805 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Puis clôturer de nouveau le compte 695&lt;sup id=&quot;fnref:cloture&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:cloture&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Transfert des charges&lt;/td&gt;
&lt;td&gt;2 805 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;695&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2 805 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;etablissement-du-compte-de-resultat-et-du-bilan&quot;&gt;Établissement du compte de résultat et du bilan&lt;/h3&gt;
&lt;p&gt;Le compte de résultat s’intéresse à ce qui s’est passé durant
l’exercice au niveau des comptes de charges et de produits. Le bilan
donne une image des autres comptes au dernier jour de l’exercice.&lt;/p&gt;
&lt;p&gt;Le &lt;a href=&quot;http://www.anc.gouv.fr/sections/normes_privees/plans_comptables/plans_comptables/cpsdocument_view&quot; title=&quot;Plan comptable général français&quot;&gt;plan comptable général&lt;/a&gt; comprend
les modèles adéquats pour le compte de résultat et le bilan. Il existe
un notamment modèle adapté au système abrégé. On peut aussi le trouver
sous un &lt;a href=&quot;http://www.plancomptable.com/comptes_annuels/comptes_annuels.htm&quot; title=&quot;Bilan et compte de résultat au format Excel&quot;&gt;format exploitable par un tableur&lt;/a&gt;. Malheureusement, il n’y
a pas la correspondance entre les diverses cases à remplir et les
numéros de comptes.&lt;/p&gt;
&lt;p&gt;Le &lt;strong&gt;compte de résultat&lt;/strong&gt; est assez simple à remplir. Toutes les
informations nécessaires sont dans les écritures de clôture (celles
vers le compte 12). Il suffit donc de les inspecter et de les ventiler
dans les cases appropriées.&lt;/p&gt;
&lt;p&gt;J’ai reporté la ventilation que j’ai adoptée dans un
&lt;a href=&quot;http://media.luffy.cx/files/resultat-modele.pdf&quot; title=&quot;Modèle de compte de résultat et de bilan au format PDF&quot;&gt;modèle de compte de résultat&lt;/a&gt; (&lt;a href=&quot;http://media.luffy.cx/files/resultat-modele.tex&quot; title=&quot;Modèle de compte de résultat et de bilan au format TeX&quot;&gt;sources&lt;/a&gt;). Une fois le
total effectué, on en calcule la différence et on a le reporte soit
sur la ligne « solde créditeur » (en cas de bénéfices), soit sur la
ligne « solde débiteur » (en cas de pertes). Cette différence doit
être le solde du compte 12. Les totaux généraux sont alors équilibrés.&lt;/p&gt;
&lt;p&gt;Le &lt;strong&gt;bilan&lt;/strong&gt; est un peu plus délicat pour deux raisons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les comptes de tiers (4xx) mélangent à la fois l’actif et le passif&lt;/li&gt;
&lt;li&gt;les amortissements et les provisions doivent être déduits de l’actif&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le second point est pour moi tout théorique car je n’ai ni
amortissement, ni provision. Le premier point est plus problématique
et il faudra donc faire attention à bien comptabiliser les créances
des tiers au niveau de l’actif et vos dettes au niveau du passif. J’ai
indiqué la difficulté dans mon &lt;a href=&quot;http://media.luffy.cx/files/resultat-modele.pdf&quot; title=&quot;Modèle de compte de résultat et de bilan au format PDF&quot;&gt;modèle de bilan&lt;/a&gt; par une étoile.&lt;/p&gt;
&lt;p&gt;Pour établir le bilan, &lt;em&gt;GnuCash&lt;/em&gt; peut nous aider en demandant dans le
menu « Rapports » l’établissement du bilan. Il convient ensuite de
ventiler attentivement. Si tout se passe bien, les totaux généraux s’équilibrent.&lt;/p&gt;
&lt;h3 id=&quot;affectation-du-resultat&quot;&gt;Affectation du résultat&lt;/h3&gt;
&lt;p&gt;Une fois le bénéfice correctement calculé, le bilan dressé et le
compte de résultat établi, il est possible d’affecter le résultat si
celui-ci est créditeur&lt;sup id=&quot;fnref:débiteur&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn%3Ad%C3%A9biteur&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le résultat est diminué du report à nouveau de l’exercice précédent
   s’il est débiteur,&lt;/li&gt;
&lt;li&gt;si la &lt;strong&gt;réserve légale&lt;/strong&gt; n’est pas égale à au moins 10 % du capital
   social total, 5 % du résultat restant sont affectés à celle-ci,&lt;/li&gt;
&lt;li&gt;le résultat est augmenté du report à nouveau de l’exercice
   précédent s’il est créditeur,&lt;/li&gt;
&lt;li&gt;le résultat peut alors être distribué sous forme de dividendes s’il
   reste créditeur,&lt;/li&gt;
&lt;li&gt;le reste du résultat est crédité au compte du &lt;strong&gt;report à nouveau&lt;/strong&gt; (11).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sachant qu’il est désormais prohibitif de se distribuer le résultat en
dividendes en France (au-delà de la limite de 10 % du capital social),
il est donc peu intéressant d’avoir un résultat important. Voici un
exemple de distribution dans le cas où la réserve légale n’existe pas encore :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compte&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Débit&lt;/th&gt;
&lt;th&gt;Crédit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;Résultat 2012&lt;/td&gt;
&lt;td&gt;15 895 €&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1061&lt;/td&gt;
&lt;td&gt;Réserve légale&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;794 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;457&lt;/td&gt;
&lt;td&gt;Dividendes à payer&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Report à nouveau&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;14 101 €&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ces transactions sont datées au 31 décembre 2012. Lors du paiement
effectif des dividendes, il faudra penser à retirer les prélevements
sociaux (15,5 % pour 2013) et les créditer sur le compte 442 ou 447.&lt;/p&gt;
&lt;h3 id=&quot;declaration-de-lis&quot;&gt;Déclaration de l’&lt;abbr title=&quot;Impôt sur les sociétés&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IS&lt;/span&gt;&lt;/abbr&gt;&lt;/h3&gt;
&lt;p&gt;L’épreuve finale est désormais la déclaration de résultats auprès des
impôts. Dans l’optique de faire supporter les coûts de déclaration au
contribuable, l’administration impose désormais une télétransmission
au format &lt;span class=&quot;caps&quot;&gt;EDI&lt;/span&gt; via un partenaire tierce&lt;sup id=&quot;fnref:intermédiaire&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn%3Ainterm%C3%A9diaire&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; qu’il vous
faudra rétribuer. Comptez environ 200 €.&lt;/p&gt;
&lt;p&gt;L’intermédiaire peut demander les balances sous un certain
format. Dans mon cas, il est possible de fournir les balances au
format &lt;span class=&quot;caps&quot;&gt;CSV&lt;/span&gt;. Malheureusement, &lt;em&gt;GnuCash&lt;/em&gt; n’est pas particulièrement
brillant dans ce domaine. Il existe une &lt;a href=&quot;http://wiki.gnucash.org/wiki/FAQ#Q:_How_can_I_export_data.3F&quot; title=&quot;Export data from GnuCash&quot;&gt;entrée dans la &lt;span class=&quot;caps&quot;&gt;FAQ&lt;/span&gt;&lt;/a&gt; à
ce sujet, mais cela consiste généralement à effectuer des
manipulations complexes.&lt;/p&gt;
&lt;p&gt;J’ai simplement formaté manuellement la balance dans un fichier
&lt;span class=&quot;caps&quot;&gt;CSV&lt;/span&gt;. Il s’agit plus ou moins de refaire une nouvelle fois son
bilan car il faut donner les détails :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Recopier le détail du compte de résultat en s’aidant simplement
    des écritures des comptes de charges et de produits vers le
    compte 12.&lt;/li&gt;
&lt;li&gt;Recopier l’état des autres comptes tels qu’ils étaient avant
    l’écriture comptable de l’affectation du résultat. Ne pas recopier
    le compte 12 (sinon, il n’y a pas équilibre).&lt;/li&gt;
&lt;li&gt;Inclure l’écriture comptable du compte 695 vers le compte 444.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La balance est normalement équilibrée et le logiciel de saisie
retrouve le même résultat comptable.&lt;/p&gt;
&lt;p&gt;Il reste ensuite à compléter correctement les 11 formulaires de
déclaration. Chaque case peut faire l’objet d’une recherche
approfondie sur le sujet. Par exemple, sur le formulaire 2033—B,
faut-il reporter les charges sociales dans la case 380 ? Il semble que
dans le cas d’une &lt;abbr title=&quot;Entreprise Unipersonnelle à Responsabilité Limitée&quot;&gt;&lt;span class=&quot;caps&quot;&gt;EURL&lt;/span&gt;&lt;/abbr&gt; à l’&lt;abbr title=&quot;Impôt sur les sociétés&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IS&lt;/span&gt;&lt;/abbr&gt;, il n’y a pas d’exploitant et il faut
donc laisser cette case vide, malgré la remarque attachée à la
case 252.&lt;/p&gt;
&lt;p&gt;Bref, un comptable sera d’une grande aide.&lt;/p&gt;
&lt;div class=&quot;footnote&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:comptable&quot;&gt;
&lt;p&gt;Outre la vérification, le comptable pourra aussi prendre
          en charge la télétransmission qui est actuellement
          obligatoire pour l’&lt;abbr title=&quot;Impôt sur les sociétés&quot;&gt;&lt;abbr title=&quot;Impôt sur les sociétés&quot;&gt;&lt;abbr title=&quot;Impôt sur les sociétés&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IS&lt;/span&gt;&lt;/abbr&gt;&lt;/abbr&gt;&lt;/abbr&gt; et qui pourrait le devenir pour
          d’autres déclarations. Voir la section dédiée à cet
          effet. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:comptable&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:ecriture&quot;&gt;
&lt;p&gt;Une écriture comptable doit également comporter la date
         et une description. Je les omets ici pour ne pas
         surcharger la présentation. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:ecriture&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 2 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:provision&quot;&gt;
&lt;p&gt;À noter qu’il existe un compte de provisions pour les
          charges (681). Il peut sembler idéal pour ce type
          d’opération. Toutefois, ce compte ne doit être utilisé
          que pour une charge &lt;em&gt;probable&lt;/em&gt;. Si la charge est &lt;em&gt;certaine&lt;/em&gt;
          (comme c’est le cas ici), il n’y a pas lieu
          d’utiliser ce compte. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:provision&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 3 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:cloture&quot;&gt;
&lt;p&gt;Il semble que cette façon de faire soit
        contestable. Toutefois, je ne vois pas comment s’assurer
        que ce compte ne perturbe pas l’exercice suivant s’il
        n’est pas soldé. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:cloture&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 4 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:débiteur&quot;&gt;
&lt;p&gt;Si le résultat est débiteur, il est simplement enregistré
         au débit du report à nouveau. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref%3Ad%C3%A9biteur&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 5 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:intermédiaire&quot;&gt;
&lt;p&gt;Il est possible de devenir soi-même partenaire
              &lt;span class=&quot;caps&quot;&gt;EDI&lt;/span&gt;. Il suffit de passer une convention avec la
              direction des impôts qui peut accepter ou
              refuser. Il faudra ensuite vous palucher les specs
              du protocole basé sur le standard &lt;a href=&quot;http://en.wikipedia.org/wiki/UN/EDIFACT&quot; title=&quot;United Nations/Electronic Data Interchange For Administration, Commerce and Transport&quot;&gt;&lt;span class=&quot;caps&quot;&gt;EDIFACT&lt;/span&gt;&lt;/a&gt;,
              respecter le cahier des charges annuel et obtenir le
              label nécessaire pour pouvoir télétransmettre. Nul
              doute que l’ensemble est fait dans la plus totale
              obscurité. Nous vous attendez pas à trouver un dépôt
              GitHub. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref%3Ainterm%C3%A9diaire&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 6 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
	<pubDate>Sat, 06 Apr 2013 19:52:25 +0000</pubDate>
</item>
<item>
	<title>Tanguy Ortolo: Pré-compresser des fichiers statiques avec le Serveur HTTP Apache</title>
	<guid isPermaLink="true">http://tanguy.ortolo.eu/blog/article101/precompresser-apache</guid>
	<link>http://tanguy.ortolo.eu/blog/article101/precompresser-apache</link>
	<description>&lt;p&gt;Quand on publie un site Web constitué de fichiers statiques avec le
Serveur HTTP Apache, on peut réduire le débit utilisé pour servir ces
fichiers en activant la compression à la volée, avec le &lt;em class=&quot;software&quot;&gt;mod_deflate&lt;/em&gt;. Ainsi, si le client annonce qu'il
prend cela en charge, Apache compressera les fichiers avant de les lui
envoyer, et le client les décompressera à la réception.&lt;/p&gt;&lt;div style=&quot;text-align: center; margin: 1em;&quot;&gt;&lt;a href=&quot;http://httpd.apache.org/&quot; title=&quot;De la Fondation Apache, licence Apache&quot;&gt;&lt;img src=&quot;http://tanguy.ortolo.eu/blog/data/images/logos/apache.png&quot; alt=&quot;Plume&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;h2&gt;Pré-compression&lt;/h2&gt;

&lt;p&gt;L'inconvénient de cette approche, c'est que le serveur doit effectuer
la compression pour chaque requête ; il est plus efficace de
pré-compresser les fichiers une fois pour toute, en conservant le fichier
original pour les clients qui ne prennent pas en charge la
décompression :&lt;/p&gt;

&lt;pre class=&quot;cli&quot;&gt;$ ls
index.html
$ gzip &amp;lt; index.html &amp;gt; index.html.gz
$ ls
index.html index.html.gz&lt;/pre&gt;

&lt;p&gt;On peut ensuite servir ces fichiers directement en indiquant qu'ils
sont compressés. Cela se fait avec le &lt;em class=&quot;software&quot;&gt;mod_mime&lt;/em&gt;, en déclarant un nouvel « encodage » gzip
— terme désignant une encapsulation dans le langage de la &lt;a href=&quot;http://tools.ietf.org/html/rfc2616#section-3.5&quot;&gt;norme
HTTP&lt;/a&gt; :&lt;/p&gt;

&lt;pre class=&quot;config&quot;&gt;LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
AddEncoding x-gzip .gz .tgz&lt;/pre&gt;

&lt;h2&gt;Négociation de contenu&lt;/h2&gt;

&lt;p&gt;Cela suffit à servir des fichiers pré-compressés, mais &lt;em&gt;seulement
pour les clients qui les demandent explicitement,&lt;/em&gt; par exemple &lt;em class=&quot;url&quot;&gt;index.html.gz&lt;/em&gt;. Ce n'est pas très utile, on peut donc
utiliser le &lt;em class=&quot;software&quot;&gt;mod_negociation&lt;/em&gt; pour servir
automatiquement le fichier compressé en réponse à une requête normale,
&lt;em class=&quot;url&quot;&gt;index.html&lt;/em&gt; dans ce cas. Pour activer cette
fonctionnalité :&lt;/p&gt;

&lt;pre class=&quot;config&quot;&gt;LoadModule negotiation_module /usr/lib/apache2/modules/mod_negotiation.so
Options +MultiViews&lt;/pre&gt;

&lt;p&gt;Le problème, c'est que la « négociation de contenu », qui permet à
Apache de servir un fichier parmi plusieurs candidats selon la langue,
le codage et la compression pris en charge par le client, ne se
déclenche &lt;em&gt;que si aucun fichier ne correspond exactement à la
requête.&lt;/em&gt; Or, même si &lt;em class=&quot;filename&quot;&gt;index.html.gz&lt;/em&gt; serait
un bon candidat pour une requête sur &lt;em class=&quot;url&quot;&gt;index.html&lt;/em&gt;, il
y a justement un fichier &lt;em class=&quot;filename&quot;&gt;index.html&lt;/em&gt; qui
correspond à cette requête, et la négociation de contenu n'entre donc
pas en jeu. Il faut donc renommer le fichier original :&lt;/p&gt;

&lt;pre class=&quot;cli&quot;&gt;$ mv index.html index.html.raw
$ ls
index.html.gz index.html.raw&lt;/pre&gt;

&lt;p&gt;… et déclarer un nouveau type de (non-)compression :&lt;/p&gt;

&lt;pre class=&quot;config&quot;&gt;AddEncoding identity .raw&lt;/pre&gt;

&lt;p&gt;Avec cela, et en redémarrant le Serveur HTTP Apache, le fichier &lt;em class=&quot;filename&quot;&gt;index.html.raw&lt;/em&gt; sera servi aux clients qui ne
prennent pas en charge la compression, et le fichier &lt;em class=&quot;filename&quot;&gt;index.html.gz&lt;/em&gt; à ceux qui la prennent en
charge.&lt;/p&gt;</description>
	<pubDate>Fri, 29 Mar 2013 11:21:00 +0000</pubDate>
</item>
<item>
	<title>Olivier Berger (pro): Managing Python code with UTF-8 (french chars) in org-mode + babel + minted for LaTeX export</title>
	<guid isPermaLink="false">http://www-public.telecom-sudparis.eu/~berger_o/weblog/?p=1050</guid>
	<link>http://www-public.telecom-sudparis.eu/~berger_o/weblog/2013/03/29/managing-python-code-with-utf-8-french-chars-in-org-mode-babel-minted-for-latex-export/</link>
	<description>&lt;p&gt;
The goal of this article is to illustrate how to manage Python code which includes comments in UTF-8 characters inside a latin-1 source org-mode for LaTeX export.
&lt;/p&gt;
&lt;p&gt;Note that I’ve pasted in wordpress the HTML generated by org-mode, so I hope it isn’t broken too much.&lt;/p&gt;
&lt;p&gt;
My typical use case is a french lecture on Python where the text is written in french, as well as some of the code comments and examples
&lt;/p&gt;
&lt;p&gt;
We’ll use org-mode’s babel module to include and manage the Python&lt;br /&gt;
examples. The goal is to write the source of the Python programs&lt;br /&gt;
directly in the same org source as the class book’s text, and to extract them into a subdir (with the “tangle” feature), so that they can be shipped to the students to experiment with.
&lt;/p&gt;
&lt;p&gt;
The &lt;code&gt;minted&lt;/code&gt; LaTeX environment is used, for babel, to make the Python syntax highlighting.
&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-1050&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;outline-3&quot; id=&quot;outline-container-1-1&quot;&gt;
&lt;h3 id=&quot;sec-1-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; Issues&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;ul&gt;
&lt;li&gt;The source org-mode is in latin-1 so that it compiles with pdflatex
&lt;/li&gt;
&lt;li&gt;The examples source-code will be in UTF-8 so that Python 2.7 executes them well on a modern Linux desktop
&lt;/li&gt;
&lt;li&gt;Minted relies on pygmentize wich doesn’t seem to handle UTF-8 so well
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;outline-3&quot; id=&quot;outline-container-1-2&quot;&gt;
&lt;h3 id=&quot;sec-1-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; Solution&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
We’ll show how to “patch” minted’s use of pygmentize to take advantage&lt;br /&gt;
of its conversion capacity to convert the Python sources from UTF-8 to&lt;br /&gt;
latin-1 at document rendering time (LaTeX compilation).
&lt;/p&gt;
&lt;p&gt;
It’s a hack, but works.
&lt;/p&gt;
&lt;p&gt;
The current document’s source shows how this works
&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;outline-4&quot; id=&quot;outline-container-1-2-1&quot;&gt;
&lt;h4 id=&quot;sec-1-2-1&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.1&lt;/span&gt; Customization&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-1&quot;&gt;
&lt;p&gt;
The org document should contain the following headers :
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;#+LANGUAGE:  fr
#+LaTeX_HEADER: \usepackage[latin1]{inputenc}
#+LaTeX_HEADER: \usepackage[french]{babel}
#+LaTeX_HEADER: \usepackage{color}\usepackage{minted}
&lt;/pre&gt;
&lt;p&gt;
and the footers :
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;# Local Variables:
# coding: latin-1
# org-src-preserve-indentation: true
# tab-width: 4
# End:
&lt;/pre&gt;
&lt;p&gt;
Also note that pdflatex should use the &lt;code&gt;-shell-escape&lt;/code&gt; option necessary for minted
&lt;/p&gt;
&lt;p&gt;
Now, the document should also include the following “patch” for minted :
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;#+LATEX_HEADER: \makeatletter
#+LATEX_HEADER: \renewcommand\minted@pygmentize[2][\jobname.pyg]{
#+LATEX_HEADER:   \def\minted@cmd{pygmentize -l #2 -f latex -F tokenmerge
#+LATEX_HEADER:     \minted@opt{gobble} \minted@opt{texcl} \minted@opt{mathescape}
#+LATEX_HEADER:     \minted@opt{startinline} \minted@opt{funcnamehighlighting}
#+LATEX_HEADER:     \minted@opt{linenos} -P &quot;verboptions=\minted@opt{extra}&quot;
#+LATEX_HEADER:     -O encoding=UTF-8,outencoding=iso-8859-1 -o \jobname.out.pyg #1}
#+LATEX_HEADER:   \immediate\write18{\minted@cmd}
#+LATEX_HEADER:   % For debugging, uncomment:
#+LATEX_HEADER:   %\immediate\typeout{\minted@cmd}
#+LATEX_HEADER:   \ifthenelse{\equal{\minted@opt@bgcolor}{}}
#+LATEX_HEADER:    {}
#+LATEX_HEADER:    {\begin{minted@colorbg}{\minted@opt@bgcolor}}
#+LATEX_HEADER:   \input{\jobname.out.pyg}
#+LATEX_HEADER:   \ifthenelse{\equal{\minted@opt@bgcolor}{}}
#+LATEX_HEADER:    {}
#+LATEX_HEADER:    {\end{minted@colorbg}}
#+LATEX_HEADER:   \DeleteFile{\jobname.out.pyg}}
#+LATEX_HEADER: \makeatother
&lt;/pre&gt;
&lt;p&gt;
The important change is the addition of the &lt;code&gt;-O encoding=UTF-8,outencoding=iso-8859-1&lt;/code&gt; option of pygmentize, that will convert the UTF-8 source code to latin-1.
&lt;/p&gt;
&lt;p&gt;
Hopefully most of the characters will convert fine, for a document written in french.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;outline-2&quot; id=&quot;outline-container-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Examples&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;outline-3&quot; id=&quot;outline-container-2-1&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; Basic Python&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
This is a generic verbatim example, which doesn’t use babel / minted.
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;$ python
Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt; print &quot;Hello, world!&quot;
Hello, world!
&amp;gt;&amp;gt;&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;outline-3&quot; id=&quot;outline-container-2-2&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; Python source code for french speakers&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
Here, we first include the source code, so that it can be exported to&lt;br /&gt;
an &lt;code&gt;examples/&lt;/code&gt; subdir, with the following (note that the &lt;code&gt;#+ BEGIN_src&lt;/code&gt; / &lt;code&gt;#+ END_src&lt;/code&gt; should be changed to get rid of the space&lt;br /&gt;
character between &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;BEGIN&lt;/code&gt; / &lt;code&gt;END&lt;/code&gt;, and that the &lt;code&gt;:shebang&lt;/code&gt; and following text should be on the &lt;code&gt;BEGIN_SRC&lt;/code&gt; line… I seem to have not quoted&lt;br /&gt;
these properly in this document):
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;#+name: helloworld
#+ BEGIN_src python :tangle examples/helloworld.py :noweb yes \\
:shebang #!/usr/bin/python :padline no :exports none
# -*- coding: utf-8 -*-

# Ceci est un exemple d'affichage d'une chaîne accentuée

name = raw_input(&quot;Quel est vôtre nom ? &quot;)

print &quot;J'espère que ça va bien aujourd'hui&quot;, name
#+ END_src
&lt;/pre&gt;
&lt;p&gt;
Editing it with “C-c ‘” will open an UTF-8 buffer, so hopefully, this will be consistent with the &lt;code&gt;utf-8&lt;/code&gt; coding system declared on the second line.
&lt;/p&gt;
&lt;p&gt;
The regeneration of the &lt;code&gt;examples/helloworld.py&lt;/code&gt; file is made with &lt;code&gt;C-c C-v t&lt;/code&gt; (babel “tangling”).
&lt;/p&gt;
&lt;p&gt;
Note that we don’t add the &lt;code&gt;#!/usr/bin/python&lt;/code&gt; first line in the source, as we want it to be added by the tangling process (which will also make the script executable).
&lt;/p&gt;
&lt;p&gt;
Once this is done, the script may be run :
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;$ python examples/helloworld.py 
Quel est vôtre nom ? François
J'espère que ça va bien aujourd'hui, cher François
&lt;/pre&gt;
&lt;p&gt;
Now, to add the colorized rendering in the lecture book, we do (here again, remove the spaces):
&lt;/p&gt;
&lt;pre class=&quot;src src-org&quot;&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;# +BEGIN_latex&lt;/span&gt;
\inputminted{python}{examples/helloworld.py}
&lt;span style=&quot;color: #b22222;&quot;&gt;# +END_latex&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;
And here it is, rendered by minted:
&lt;/p&gt;
&lt;pre class=&quot;src src-python&quot;&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;

&lt;span style=&quot;color: #b22222;&quot;&gt;# Ceci est un exemple d'affichage d'une chaîne accentuée&lt;/span&gt;

&lt;span style=&quot;color: #a0522d;&quot;&gt;name&lt;/span&gt; = &lt;span style=&quot;color: #7a378b;&quot;&gt;raw_input&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;Quel est vôtre nom ? &quot;&lt;/span&gt;)

&lt;span style=&quot;color: #a020f0;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;J'espère que ça va bien aujourd'hui, cher&quot;&lt;/span&gt;, name
&lt;/pre&gt;
&lt;p&gt;Here are links to : &lt;a href=&quot;http://www-public.telecom-sudparis.eu/~berger_o/org-examples/post-managint-org-babel-python-french-minted.org&quot;&gt;the source&lt;/a&gt;, &lt;a href=&quot;http://www-public.telecom-sudparis.eu/~berger_o/org-examples/post-managint-org-babel-python-french-minted.pdf&quot;&gt;the PDF result&lt;/a&gt;, and &lt;a href=&quot;http://www-public.telecom-sudparis.eu/~berger_o/org-examples/examples/helloworld.py&quot;&gt;the generated Python program&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
	<pubDate>Fri, 29 Mar 2013 10:44:43 +0000</pubDate>
</item>
<item>
	<title>Tanguy Ortolo: Nouvelle planète auto-hébergement</title>
	<guid isPermaLink="true">http://tanguy.ortolo.eu/blog/article100/nouveau-planet-auto-hebergement</guid>
	<link>http://tanguy.ortolo.eu/blog/article100/nouveau-planet-auto-hebergement</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://tanguy.ortolo.eu/blog/article99/planet-auto-hebergement&quot; title=&quot;Annonce du remplacement de l'ancien Planet&quot;&gt;Comme prévu&lt;/a&gt;, je viens de remplacer l'ancien &lt;a href=&quot;https://fr.wikipedia.org/wiki/Planet&quot;&gt;Planet&lt;/a&gt; auto-hébergement par une &lt;a href=&quot;http://planet.auto-hebergement.fr/&quot; title=&quot;Planète auto-hébergement, des blogs francophones sur l'auto-hébergement&quot;&gt;nouvelle version&lt;/a&gt; basée sur &lt;a href=&quot;http://intertwingly.net/code/venus/&quot; title=&quot;Planet Vénus, un simple agrégateur publique de flux&quot;&gt;Planet Venus&lt;/a&gt; sur mon propre serveur.&lt;/p&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://tango.freedesktop.org/&quot; title=&quot;Du projet Tango Desktop, domaine public&quot;&gt;&lt;img src=&quot;http://tanguy.ortolo.eu/blog/data/images/icons/planet-128.png&quot; alt=&quot;La Terre entourée d'un petit maillage de fibres optiques&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Vous pouvez donc maintenant venir découvrir la nouvelle &lt;a href=&quot;http://planet.auto-hebergement.fr/&quot; title=&quot;Planète auto-hébergement, des blogs francophones sur l'auto-hébergement&quot;&gt;Planète auto-hébergement&lt;/a&gt;, qui propose :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://planet.auto-hebergement.fr/&quot; title=&quot;Planète auto-hébergement, des blogs francophones sur l'auto-hébergement&quot;&gt;une vue Web&lt;/a&gt; des articles récents des blogs affiliés ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://planet.auto-hebergement.fr/atom.xml&quot; title=&quot;Flux de syndication Atom de la Planète auto-hébergement&quot;&gt;des flux de syndication — Atom&lt;/a&gt; et &lt;a href=&quot;http://planet.auto-hebergement.fr/rss.xml&quot; title=&quot;Flux de syndication RSS de la Planète auto-hébergement&quot;&gt;RSS&lt;/a&gt; — pour suivre les nouveautés ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://planet.auto-hebergement.fr/opml.xml&quot; title=&quot;Liste des blogs affiliés à la Planète auto-hébergement&quot;&gt;une liste — OPML — des blogs affiliés&lt;/a&gt; pour les suivre individuellement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si vous tenez un blog ou vous parlez d'auto-hébergement, il n'est pas trop tard pour me l'indiquer !&lt;/p&gt;

&lt;p&gt;La configuration de &lt;a href=&quot;http://intertwingly.net/code/venus/&quot; title=&quot;Planet Vénus, un simple agrégateur publique de flux&quot;&gt;Planet Venus&lt;/a&gt; est intéressante, et il faudra sans doute que je rédige un article synthétisant mon expérience avec ce logiciel, mais j'attends d'abord que les débats actuels se calment un peu pour pouvoir finaliser un autre projet de Planète Catholique…&lt;/p&gt;</description>
	<pubDate>Thu, 28 Mar 2013 12:17:00 +0000</pubDate>
</item>
<item>
	<title>Olivier Berger (pro): Conférence “L’économie du logiciel libre et la percée d’OpenStack dans le cloud” le 27/03 à Évry</title>
	<guid isPermaLink="false">http://www-public.telecom-sudparis.eu/~berger_o/weblog/?p=1046</guid>
	<link>http://www-public.telecom-sudparis.eu/~berger_o/weblog/2013/03/18/conference-leconomie-du-logiciel-libre-et-la-percee-dopenstack-dans-le-cloud-le-2703-a-evry/</link>
	<description>&lt;p&gt;L’association Minet organise une conférence le 27/03 dans les locaux de Télécom SudParis et Télécom École de Management à Évry, qui promet d’être intéressante.&lt;/p&gt;
&lt;p&gt;Elle portera à la fois sur l’économie du logiciel libre et sur l’essort d’OpenStack dans le cloud.&lt;/p&gt;
&lt;p&gt;N’hésitez pas à venir nombreux sur le campus pour écouter les interventions de Jonathan Le Lous, Julien Brichard et Raphaël Ferreira, et rencontrer votre serviteur &lt;img src=&quot;http://www-public.telecom-sudparis.eu/~berger_o/weblog/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Plus de détails &lt;a href=&quot;http://conference.minet.net/2013&quot;&gt;sur le site de Minet&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Mon, 18 Mar 2013 12:49:40 +0000</pubDate>
</item>
<item>
	<title>Debian France: Debian France aux Solutions Linux/Open Source 2013</title>
	<guid isPermaLink="true">http://france.debian.net/posts/2013/Annonce_SL_2013/</guid>
	<link>http://france.debian.net/posts/2013/Annonce_SL_2013/</link>
	<description>&lt;h1&gt;Stand Debian France aux Solutions Linux/Open Source 2013&lt;/h1&gt;

&lt;p&gt;Le salon &lt;a href=&quot;http://www.solutionslinux.fr/&quot;&gt;Solutions Linux/Open Source&lt;/a&gt; aura lieu
les 28 et 29 mai 2013, au &lt;a href=&quot;http://www.openstreetmap.org/?mlat=48.8927&amp;amp;mlon=2.2395&amp;amp;zoom=15&quot;&gt;CNIT à La
Défense&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ce salon, essentiellement destiné aux professionnels, comporte comme chaque
année un « village associatif » qui regroupe différentes associations du monde
du logiciel libre. Debian France y tiendra un stand, où vous pourrez :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vous informer sur le système d'exploitation et la communauté Debian ;&lt;/li&gt;
&lt;li&gt;acheter des accessoires pour afficher votre attachement à Debian : polos,
autocollants…&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;img src=&quot;http://france.debian.net/blog/../posts/2013/Annonce_SL_2013/stand_2011.jpg&quot; alt=&quot;Stand Debian France aux SL 2011&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si vous souhaitez aider, &lt;a href=&quot;http://wiki.debian.org/DebianEvents/fr/2013/SL&quot;&gt;nous cherchons quelques
volontaires&lt;/a&gt; pour tenir le
stand.&lt;/p&gt;

&lt;p&gt;Pour plus d'informations :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.solutionslinux.fr/&quot;&gt;Solutions Linux/Open Source&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.debian.org/DebianEvents/fr/2013/SL&quot;&gt;stand Debian France&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://france.debian.net/&quot;&gt;Debian France&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://france.debian.net/mailman/listinfo/asso&quot;&gt;liste de distribution&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;irc://irc.oftc.net/#debian-france&quot;&gt;salon IRC&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Sat, 16 Mar 2013 18:41:41 +0000</pubDate>
</item>
<item>
	<title>Florent Gallaire: La syntaxe des sets en Python</title>
	<guid isPermaLink="false">http://fgallaire.flext.net/?p=1903</guid>
	<link>http://fgallaire.flext.net/la-syntaxe-des-sets-en-python/</link>
	<description>&lt;p&gt;Pour comprendre la génèse de la syntaxe des sets, il faut étudier celle des types conteneurs historiques de Python qui sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les listes, délimitées par les crochets &lt;code&gt;[&lt;/code&gt; et &lt;code&gt;]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;les tuples, délimités par les parenthèses &lt;code&gt;(&lt;/code&gt; et &lt;code&gt;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;les dictionnaires, délimités par les accolades &lt;code&gt;{&lt;/code&gt; et &lt;code&gt;}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces types conteneurs sont donc dotés d’une syntaxe légère et facilement utilisable :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; l = [1, 2, 3]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; l&lt;br /&gt;
[1, 2, 3]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; t = (1, 2, 3)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; t&lt;br /&gt;
(1, 2, 3)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; d = {1: '1', 2: '2', 3: '3'}&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; d&lt;br /&gt;
{1: '1', 2: '2', 3: '3'}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Les tuples, qui sont en fait des listes immutables et que l’on ne peut donc pas modifier, sont souvent oubliés car assez peu utilisés, en tout cas de manière consciente. En effet, une simple énumération sans syntaxe spécifique est en fait un tuple :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; e = 1, 2, 3&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; e&lt;br /&gt;
(1, 2, 3)&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Si l’on peut donc dire que globalement, les listes et les dictionnaires répondent à la grande majorité des besoins des programmeurs, un quatrième type conteneur s’est lentement mais sûrement fait une place au soleil des pythonistes : les sets.&lt;/p&gt;
&lt;p&gt;Un set est un ensemble, c’est-à-dire une collection non ordonnée d’éléments uniques, ce qui se révèle très pratique dans beaucoup d’usages courants. Ce nouveau type conteneur étant fourni en deux saveurs, l’une mutable (comme les listes), et l’autre immutable (comme les tuples).&lt;/p&gt;
&lt;p&gt;D’abord &lt;a href=&quot;http://www.python.org/getit/releases/2.3/highlights/&quot; target=&quot;_blank&quot;&gt;introduits dans Python 2.3&lt;/a&gt; sous la forme d’un nouveau module &lt;code&gt;sets&lt;/code&gt; ajouté à la bibliothèque standard. Il est ensuite devenu un type &lt;em&gt;built-in&lt;/em&gt; dans &lt;a href=&quot;http://docs.python.org/2/whatsnew/2.4.html#pep-218-built-in-set-objects&quot; target=&quot;_blank&quot;&gt;Python 2.4&lt;/a&gt;, ce qui représentait une amélioration syntaxique non négligeable. Plus besoin d’écrire :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import sets&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s_mutable = sets.Set([1, 2, 3])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s_immutable = sets.ImmutableSet([1, 2, 3])&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;On pouvait dorénavant se contenter de :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s_mutable = set([1,2,3])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s_immutable = frozenset([1,2,3])&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Et de bénéficier en plus d’une implémentation du type &lt;code&gt;set&lt;/code&gt; en C et non plus en Python, avec la belle augmentation de performance qui va avec.&lt;/p&gt;
&lt;p&gt;L’intégration des sets mutables (les plus utiles) dans le core du langage Python, au même niveau que les tuples, les listes et les dictionnaires, se heurtait encore à une limitation syntaxique : il fallait écrire &lt;code&gt;set([1, 2, 3])&lt;/code&gt;. En effet, il n’y a que trois signes de ponctuation &lt;a href=&quot;http://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#Table_des_128_caract.C3.A8res_ASCII&quot; target=&quot;_blank&quot;&gt;ASCII 7 bits&lt;/a&gt; fonctionnant par paire et facilement accessibles sur un clavier, les parenthèse, les crochets et les accolades, qui comme on l’a vu sont déjà utilisés respectivement par les tuples, les listes et les dictionnaires.&lt;/p&gt;
&lt;p&gt;Mais que pouvait-on alors faire pour mieux intégrer syntaxiquement les sets à Python ? C’est dans &lt;a href=&quot;http://docs.python.org/3.0/whatsnew/3.0.html&quot; target=&quot;_blank&quot;&gt;Python 3.0&lt;/a&gt; que la solution a été trouvée : si les tuples et les listes sont des énumérations que l’on ne pourrait distinguer des sets, les dictionnaires sont eux bien différents, et l’on peut donc utiliser les accolades &lt;code&gt;{&lt;/code&gt; et &lt;code&gt;}&lt;/code&gt; pour une énumération sans risque de confusion :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s = {1, 2, 3}&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s&lt;br /&gt;
{1, 2, 3}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Il reste cependant une petite exception qui rend cette solution syntaxique imparfaite, et potentiellement génératrice d’erreurs ou d’incompréhensions, c’est le cas de l’ensemble vide. En effet, &lt;code&gt;{}&lt;/code&gt; ne peut pas représenter à la fois le dictionnaire vide &lt;strong&gt;et&lt;/strong&gt; le set vide :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s = {}&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s&lt;br /&gt;
{}&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; isinstance(s, set)&lt;br /&gt;
False&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; isinstance(s, dict)&lt;br /&gt;
True&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;De manière logique et rétrocompatible, &lt;code&gt;{}&lt;/code&gt; représente donc toujours le dictionnaire vide, et c’est &lt;code&gt;set()&lt;/code&gt; qui permet de créer un set vide :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s = set()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s&lt;br /&gt;
set()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s.add(1)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; s&lt;br /&gt;
{1}&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Enfin, ce sucre syntaxique de Python 3 a été backporté dans &lt;a href=&quot;http://docs.python.org/dev/whatsnew/2.7.html&quot; target=&quot;_blank&quot;&gt;Python 2.7&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p class=&quot;wp-flattr-button&quot;&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://fgallaire.flext.net/?flattrss_redirect&amp;amp;id=1903&amp;amp;md5=14783a5cb30000b59835ea8a9331a9ce&quot; target=&quot;_blank&quot; title=&quot;Flattr&quot;&gt;&lt;img src=&quot;http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png&quot; alt=&quot;flattr this!&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 14 Mar 2013 01:45:27 +0000</pubDate>
</item>
<item>
	<title>Julien Vehent: DIY eMail @ Home</title>
	<guid isPermaLink="false">urn:md5:3f2400fe115a486da8a134e609ec6c72</guid>
	<link>http://jve.linuxwall.info/blog/index.php?post/2013/03/07/DIY-eMail-%40-Home</link>
	<description>&lt;p&gt;A few weeks ago, I presented my personal email architecture to PLUG, the Philadelphia Linux User Group. I have been using this setup for years now, and every time someone sends me an email at julien[at]linuxwall.info, it reaches one of these server.&lt;/p&gt;
&lt;p&gt;A lot of this is documented on http://wiki.linuxwall.info. Maybe some day I'll get around writing an actual documentation. In the meantime, check out the links in the slides below.&lt;/p&gt;
&lt;br /&gt;
&amp;lt;iframe allowfullscreen=&quot;allowfullscreen&quot; frameborder=&quot;0&quot; height=&quot;421&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;mozallowfullscreen&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/16989081?rel=0&quot; style=&quot;border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px&quot; webkitallowfullscreen=&quot;webkitallowfullscreen&quot; width=&quot;512&quot;&amp;gt; &amp;lt;/iframe&amp;gt; &lt;div style=&quot;margin-bottom: 5px;&quot;&gt; &lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/jvehent/di-ymail&quot; target=&quot;_blank&quot; title=&quot;DIY eMail@Home&quot;&gt;DIY eMail@Home&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/jvehent&quot; target=&quot;_blank&quot;&gt;jvehent&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;</description>
	<pubDate>Thu, 07 Mar 2013 01:13:00 +0000</pubDate>
</item>
<item>
	<title>Philippe Latu: Initiation au développement IPv4 + IPv6</title>
	<guid isPermaLink="true">http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html</guid>
	<link>http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html</link>
	<description>&lt;p&gt;La rubrique &lt;a href=&quot;http://www.inetdoc.net/dev/&quot;&gt;dev&lt;/a&gt; vient d'être
enrichie d'un nouveau support sur l'&lt;a href=&quot;http://www.inetdoc.net/dev/socket-c-4and6/&quot;&gt;Initiation au développement C
sur les sockets IPv4 &amp;amp; IPv6&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ce qui, au départ, ne devait être qu'un complément au précédent document
utilisant seulement IPv4 a finalement abouti à une progression en quatre étapes
ou programmes. J'ai conservé l'idée initiale d'échange de chaîne de caractères
entre un client et un serveur. Cette forme rudimentaire de &lt;i&gt;chat&lt;/i&gt; est très
bien accueillie par les étudiants.&lt;/p&gt;

&lt;p&gt;La première étape est un plagiat éhonté du programme &lt;tt&gt;showip&lt;/tt&gt; du
livre &lt;a href=&quot;http://beej.us/guide/bgnet/&quot;&gt;Beej's Guide to Network
Programming&lt;/a&gt;. La technique de parcours des enregistrements &lt;tt&gt;addrinfo&lt;/tt&gt;
issus de l'appel à &lt;tt&gt;getaddrinfo()&lt;/tt&gt; est ensuite reprise dans tous les
autres programmes du document. À la deuxième étape, le programme client se
contente d'ouvrir la première prise réseau ou &lt;i&gt;socket&lt;/i&gt; disponible. Jusque
là, tout va bien ! C'est avec le programme serveur que les choses se
compliquent. Faut-il utiliser une ou deux prises réseau ?&lt;/p&gt;

&lt;a href=&quot;http://www.inetdoc.net/dev/socket-c-4and6/socket-c-4and6.dual-what.html&quot;&gt;
&lt;img width=&quot;640&quot; alt=&quot;dual stack single socket&quot; src=&quot;http://www.inetdoc.net/dev/socket-c-4and6/images/dual-stack-single-socket.png&quot; /&gt;&lt;/a&gt;

&lt;p&gt;Franchement, je n'ai pas le recul nécessaire pour prendre parti sur cette
question. Ce qui est sûr, c'est que la solution «académique» est plus
séduisante pour un prof. Le code de la couche application est indépendant des
protocoles de la couche réseau et la quantité de code est plus réduite. Ça
n'empêche pas de souffrir un peu sur l'utilisation de l'option
&lt;tt&gt;bindv6only&lt;/tt&gt; et sur l'interprétation des codes d'erreurs associés. J'ai
fini par aboutir au tableau de tests suivant. Les deux étapes restantes
proposent les programmes serveurs avec une puis deux prises réseau.&lt;/p&gt;

&lt;table cellpadding=&quot;7&quot; style=&quot;border: 2px solid black; border-collapse: collapse;&quot; border=&quot;1&quot; summary=&quot;Protocole de couche réseau utilisé suivant les conditions de tests&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;client ou &lt;em class=&quot;wordasword&quot;&gt;talker&lt;/em&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;th style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;Serveur ou &lt;em class=&quot;wordasword&quot;&gt;listener&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em class=&quot;wordasword&quot;&gt;socket&lt;/em&gt; unique&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;option&quot;&gt;bindv6only = 0&lt;/code&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;th style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;Serveur ou &lt;em class=&quot;wordasword&quot;&gt;listener&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em class=&quot;wordasword&quot;&gt;socket&lt;/em&gt; double&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;option&quot;&gt;bindv6only = 1&lt;/code&gt; -&amp;gt; &lt;em class=&quot;wordasword&quot;&gt;socket&lt;/em&gt; &lt;acronym class=&quot;acronym&quot;&gt;IPv6&lt;/acronym&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;Client &lt;em class=&quot;wordasword&quot;&gt;dual stack&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;option&quot;&gt;disable_ipv6 = 0&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;&lt;acronym class=&quot;acronym&quot;&gt;IPv6&lt;/acronym&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;&lt;acronym class=&quot;acronym&quot;&gt;IPv6&lt;/acronym&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;Client &lt;em class=&quot;wordasword&quot;&gt;single stack&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;option&quot;&gt;disable_ipv6 = 1&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;&lt;acronym class=&quot;acronym&quot;&gt;IPv6&lt;/acronym&gt;&lt;/p&gt;
&lt;p&gt;&lt;em class=&quot;wordasword&quot;&gt;IPv4-mapped IPv6 addresses&lt;/em&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: .33em;&quot;&gt;
&lt;p&gt;&lt;acronym class=&quot;acronym&quot;&gt;IPv4&lt;/acronym&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Une fois la difficulté de gestion des options sur les &lt;i&gt;sockets&lt;/i&gt;
franchie, la dernière étape avec le codage d'un serveur &lt;i&gt;dual stack&lt;/i&gt; à
deux prises réseau permet de se familiariser avec l'utilisation de la fonction
&lt;tt&gt;select()&lt;/tt&gt; et des macros associées.&lt;/p&gt;

&lt;p&gt;Pour conclure, l'utilisation conjointe des deux protocoles &lt;tt&gt;IPv4&lt;/tt&gt; et
&lt;tt&gt;IPv6&lt;/tt&gt; entraîne un niveau de difficulté plus important dans la
manipulation des enregistrements d'adresses &lt;tt&gt;IP&lt;/tt&gt;. Ce pas supplémentaire
peut être délicat à franchir pour un public débutant. C'est certainement la
raison pour laquelle les enseignants préfèrent s'en remettre à des
bibliothèques de plus haut niveau pour aborder les &lt;i&gt;sockets&lt;/i&gt;. En Génie
Électrique, les développements sont très proches de l'espace noyau et le
langage C reste incontournable, ce qui rend le compromis délicat à
négocier.&lt;/p&gt;

&lt;p&gt;Comme d'habitude, si quelqu'un à le courage de s'attaquer à la lecture du
document, je serais très content de lire toutes les remarques ou critiques
!&lt;/p&gt;</description>
	<pubDate>Tue, 05 Mar 2013 20:54:58 +0000</pubDate>
</item>
<item>
	<title>Ulrich L.: Configuration de Bind9 avec wildcard et Apache2 avec VirtualHost dynamique</title>
	<guid isPermaLink="false">http://www.mon-code.net/feeds/rssTag/configuration-de-bind9-avec-wildcard-et-apache2-avec-virtualhost-dynamique</guid>
	<link>http://www.mon-code.net/article/62/configuration-de-bind9-avec-wildcard-et-apache2-avec-virtualhost-dynamique</link>
	<description>Je viens de refaire mon serveur de développement et j'en ai profité pour rendre sa configuration plus facile. Je travaille sur plusieurs projets et devoir configurer le DNS et le serveur apache pour chaque projet n'est pas des plus passionnant, surtout appliqué dans une entreprise avec une equipe d'une dizaine de développeurs, ou comment perdre 20 minutes. Dans cet article je vous présente la configuration que j'ai mis en place d'Apache et de Bind.</description>
	<pubDate>Mon, 04 Mar 2013 23:00:00 +0000</pubDate>
</item>
<item>
	<title>Vincent Bernat: lldpd 0.7.1</title>
	<guid isPermaLink="false">http://www.luffy.cx/fr/blog/2013-lldpd-0.7.1.html</guid>
	<link>http://vincent.bernat.im/fr/blog/2013-lldpd-0.7.1.html</link>
	<description>&lt;p&gt;Il y a quelques semaines, une nouvelle version de &lt;a href=&quot;http://vincentbernat.github.com/lldpd&quot; title=&quot;lldpd, an implementation of 802.1AB&quot;&gt;lldpd&lt;/a&gt;, une
implémentation de 802.&lt;span class=&quot;caps&quot;&gt;1AB&lt;/span&gt; (norme aussi connue sous le nom &lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt;&lt;/abbr&gt;), a été publiée.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol&quot; title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt;&lt;/abbr&gt;&lt;/abbr&gt;&lt;/a&gt; est un protocole destiné à remplacer d’autres protocoles de
niveau 2 tels que &lt;span class=&quot;caps&quot;&gt;EDP&lt;/span&gt; et &lt;span class=&quot;caps&quot;&gt;CDP&lt;/span&gt;. Son but est de fournir un mécanisme
standard pour envoyer des informations aux périphériques réseau voisins.&lt;/p&gt;
&lt;p&gt;De manière plus pragmatique, &lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt;&lt;/abbr&gt; permet de savoir exactement sur quel
port est branché un serveur (et réciproquement). Pour illustrer son
usage, j’ai réalisé quelques images à la &lt;a href=&quot;http://xkcd.com&quot; title=&quot;xkcd&quot;&gt;xkcd&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://d1g3mdmxf8zbo9.cloudfront.net/images/why-lldp.png&quot; alt=&quot;Exemple d'utilisation de LLDP&quot; title=&quot;Pourquoi utiliser LLDP ?&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pour plus d’informations sur &lt;em&gt;lldpd&lt;/em&gt;, rendez-vous sur le
&lt;a href=&quot;http://vincentbernat.github.com/lldpd&quot; title=&quot;lldpd, an implementation of 802.1AB&quot;&gt;nouveau site web qui lui est dédié&lt;/a&gt;. Ce journal est destiné à
présenter les grands &lt;strong&gt;changements techniques&lt;/strong&gt; qui ont affectés &lt;em&gt;lldpd&lt;/em&gt;
depuis la précédente version majeure sortie il y a un an.&lt;/p&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#version-journal-des-modifications&quot;&gt;Version &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; journal des modifications&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#version-automatique&quot;&gt;Version automatique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#construction-du-journal-des-modifications&quot;&gt;Construction du journal des modifications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#cur&quot;&gt;Cœur&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#c99&quot;&gt;C99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#journaux&quot;&gt;Journaux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#libevent&quot;&gt;libevent&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#client&quot;&gt;Client&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#serialisation&quot;&gt;Sérialisation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#bibliotheque&quot;&gt;Bibliothèque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#cli&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CLI&lt;/span&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#analyse-syntaxique-completion&quot;&gt;Analyse syntaxique &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; complétion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#readline&quot;&gt;Readline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#changements-specifiques-a-un-os&quot;&gt;Changements spécifiques à un &lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#netlink-sous-linux&quot;&gt;Netlink sous Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#support-des-bsd&quot;&gt;Support des &lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#support-dos-x&quot;&gt;Support d’&lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt; X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#support-de-upstart-et-systemd&quot;&gt;Support de upstart et systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fichiers-dentete-specifique-a-linux&quot;&gt;Fichiers d’entête spécifique à Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h1 id=&quot;version-journal-des-modifications&quot;&gt;Version &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; journal des modifications&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;MISE&lt;/span&gt; À &lt;span class=&quot;caps&quot;&gt;JOUR&lt;/span&gt; :&lt;/strong&gt; &lt;a href=&quot;http://www.hadrons.org/~guillem/&quot; title=&quot;Guillem Jover's Home Page&quot;&gt;Guillem Jover&lt;/a&gt; m’a indiqué comment il avait fait
pour &lt;a href=&quot;http://libbsd.freedesktop.org/wiki/&quot; title=&quot;libbsd&quot;&gt;libbsd&lt;/a&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sauvegarder la version issue de &lt;em&gt;git&lt;/em&gt; dans &lt;code&gt;.dist-version&lt;/code&gt; et la
    réutiliser si elle existe. Cela permet de pouvoir reconstruire le
    &lt;code&gt;./configure&lt;/code&gt; à partir de l’archive publiée sans perdre la
    version, ce qui permet de répondre à la
    &lt;a href=&quot;https://www.mirbsd.org/permalinks/wlog-10_e20130220-tg.htm#e20130220-tg_wlog-10&quot; title=&quot;GNU autotools generated files&quot;&gt;critique de Thorsten Glaser&lt;/a&gt; sans perdre en souplesse.&lt;/li&gt;
&lt;li&gt;Inclure le fichier &lt;code&gt;CHANGELOG&lt;/code&gt; dans &lt;code&gt;DISTCLEANFILES&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;C’est une meilleure façon de faire que j’ai donc
&lt;a href=&quot;https://github.com/vincentbernat/lldpd/commit/a888bea6f08687177330c2d95569864009e769d6&quot; title=&quot;build: use the same way as libbsd for version and changelog&quot;&gt;adoptée&lt;/a&gt;. Les deux sections suivantes sont donc en partie
obsolètes dans leur réalisation technique.&lt;/p&gt;
&lt;h2 id=&quot;version-automatique&quot;&gt;Version automatique&lt;/h2&gt;
&lt;p&gt;Le numéro de version était précédemment en dur dans le fichier
&lt;code&gt;configure.ac&lt;/code&gt;. Il fallait donc penser à modifier la ligne
correspondante avant chaque publication :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;err&quot;&gt;AC_INIT([lldpd], [0.5.7], [bernat@luffy.cx])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Cette information est déjà présente dans l’arbre &lt;em&gt;git&lt;/em&gt; et il est donc
possible de l’en extraire automatiquement de manière assez simple :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;err&quot;&gt;AC_INIT([lldpd],&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;        [m4_esyscmd_s([git describe --tags --always --match [0-9]* 2&amp;gt; /dev/null || date +%F])],&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;        [bernat@luffy.cx])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Si &lt;code&gt;HEAD&lt;/code&gt; est étiqueté &lt;code&gt;0.7.1&lt;/code&gt;, ce sera exactement ce numéro de
version qui sera utilisé. Sinon, l’étiquette la plus proche est
utilisée suivie du nombre de commits depuis celle-ci ainsi que du hash
courant. Par exemple : &lt;code&gt;0.7.1-29-g2909519&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour que cela fonctionne, il est donc nécessaire de générer le
&lt;code&gt;./configure&lt;/code&gt; depuis l’arbre &lt;em&gt;git&lt;/em&gt; et non depuis l’archive finale qui
ne contient plus cette information.&lt;/p&gt;
&lt;h2 id=&quot;construction-du-journal-des-modifications&quot;&gt;Construction du journal des modifications&lt;/h2&gt;
&lt;p&gt;La construction automatique du journal des modifications à partir de
l’arbre &lt;em&gt;git&lt;/em&gt; est une pratique assez répandue. Il y a toutefois
quelques subtilités pour l’intégrer correctement dans le processus de
publication. Voici ma tentative avec l’aide de &lt;code&gt;automake&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;dist_doc_DATA&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt;.md &lt;span class=&quot;caps&quot;&gt;NEWS&lt;/span&gt; ChangeLog

.&lt;span class=&quot;caps&quot;&gt;PHONY&lt;/span&gt;: &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;distdir&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/ChangeLog
dist-hook: &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;distdir&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/ChangeLog
&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;distdir&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/ChangeLog:
        &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;AM_V_GEN&lt;span class=&quot;k&quot;&gt;)if &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; -d &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;top_srcdir&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/.git; &lt;span class=&quot;k&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
          &lt;span class=&quot;nv&quot;&gt;prev&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;git describe --tags --always --match &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;0-9&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;* 2&amp;gt; /dev/null&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;tag in &lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;git tag | grep -E &lt;span class=&quot;s1&quot;&gt;'^[0-9]+(\.[0-9]+){1,}$$'&lt;/span&gt; | sort -rn&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; x&lt;span class=&quot;s2&quot;&gt;&quot;$$prev&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; x &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;; &lt;span class=&quot;k&quot;&gt;then &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;prev&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;tag ; &lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; x&lt;span class=&quot;s2&quot;&gt;&quot;$$prev&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; x&lt;span class=&quot;s2&quot;&gt;&quot;$$tag&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;; &lt;span class=&quot;k&quot;&gt;then continue&lt;/span&gt;; &lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$$prev [$$(git log $$prev -1 --pretty=format:'%ai')]:&quot;&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            git log --pretty&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;' - [%h] %s (%an)'&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;tag..&lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;prev ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
            &lt;span class=&quot;nv&quot;&gt;prev&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;tag ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt; &amp;gt; &lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt; ; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;        else \&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;          touch $@ ; \&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;        fi&lt;/span&gt;
ChangeLog:
        touch &lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Les entrées sont groupées par version. Je maintiens manuellement un
résumé des modifications les plus importantes dans un fichier &lt;code&gt;NEWS&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&quot;cur&quot;&gt;Cœur&lt;/h1&gt;
&lt;h2 id=&quot;c99&quot;&gt;C99&lt;/h2&gt;
&lt;p&gt;J’ai récemment lu le livre &lt;a href=&quot;http://oreilly.com/shop/product/0636920025108.html?bB=g&quot; title=&quot;21st Century C chez O'Reilly&quot;&gt;21st Century C&lt;/a&gt; qui est globalement très
positif. J’ai depuis adopté
l’&lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html&quot; title=&quot;Initialiser les membres d'une structure dans la documentation de GCC&quot;&gt;initialisation des membres d’une structure lors de la déclaration&lt;/a&gt;. Étant
donné qu’il s’agit également d’une extension de &lt;span class=&quot;caps&quot;&gt;GCC&lt;/span&gt; depuis longtemps,
cela ne représente pas un problème de compatibilité majeur.&lt;/p&gt;
&lt;p&gt;Sans cette fonctionnalité :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;netlink_req&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;iovec&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sockaddr_nl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;msghdr&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;memset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;memset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;memset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;memset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_len&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NLMSG_LENGTH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rtgenmsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RTM_GETLINK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_flags&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NLM_F_REQUEST&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NLM_F_DUMP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_seq&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_pid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getpid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rtgen_family&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AF_PACKET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov_base&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov_len&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nl_family&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AF_NETLINK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_iov&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_iovlen&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_namelen&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sockaddr_nl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et avec cette fonctionnalité :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;netlink_req&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;req&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_len&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NLMSG_LENGTH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rtgenmsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RTM_GETLINK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_flags&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NLM_F_REQUEST&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NLM_F_DUMP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_seq&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_pid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getpid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gen&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rtgen_family&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AF_PACKET&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;iovec&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov_base&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov_len&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hdr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nlmsg_len&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sockaddr_nl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nl_family&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AF_NETLINK&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;msghdr&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rtnl_msg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_iov&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iov&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_iovlen&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg_namelen&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sockaddr_nl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id=&quot;journaux&quot;&gt;Journaux&lt;/h2&gt;
&lt;p&gt;La journalisation de &lt;em&gt;lldpd&lt;/em&gt; était assez pauvre. Généralement, pour
répondre à un rapport de bug, je demandais à l’ateur d’ajouter
quelques &lt;code&gt;printf()&lt;/code&gt; par-ci, par-là. J’ai ajouté des appels à
&lt;code&gt;log_debug()&lt;/code&gt; à de nombreux endroits ainsi qu’une possibilité de
filtre. Par exemple, pour obtenir des informations détaillés sur la
découverte des interfaces, il est possible de lancer &lt;code&gt;lldpd&lt;/code&gt; avec les
arguments &lt;code&gt;-ddd -D interface&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;De plus, la sortie sur un terminal est faite en couleurs. Cela peut
paraître futile, mais il est beaucoup plus aisé de repérer rapidement
les erreurs et les avertissements de cette façon.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://d1g3mdmxf8zbo9.cloudfront.net/images/lldpd-logging.png&quot; alt=&quot;Sortie en couleurs de lldpd&quot; title=&quot;Exemple de sortie en couleurs de lldpd&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;libevent&quot;&gt;libevent&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;lldpd&lt;/em&gt; 0.5.7 utilisait sa propre boucle d’événements à base de
&lt;code&gt;select()&lt;/code&gt;. Cela ne posait pas de problèmes particuliers mais je ne
voulais pas étendre cette boucle pour aboutir à une boucle
d’événements complète alors qu’il existe des bibliothèques solides
dédiées à cet usage. J’ai donc remplacé celle-ci par &lt;a href=&quot;http://libevent.org/&quot; title=&quot;libevent, une bibliothèque événementielle&quot;&gt;libevent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La version minimale de &lt;em&gt;libevent&lt;/em&gt; requise est la 2.0.5. Le site
&lt;a href=&quot;http://upstream-tracker.org/versions/libevent.html&quot; title=&quot;Rapport de compatibilité de l'API de libevent&quot;&gt;Upstream Tracker&lt;/a&gt; permet de consulter les changements d’&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; et
d’&lt;span class=&quot;caps&quot;&gt;ABI&lt;/span&gt; d’une bibliothèque et donc de vérifier la version
nécessaire. Cette version de &lt;em&gt;libevent&lt;/em&gt; n’est pas disponible dans de
nombreuses distributions. Par exemple, Debian Squeeze et Ubuntu Lucid
n’ont que la version 1.4.13. Je tente également de maintenir la
compatibilité avec des distributions beaucoup plus anciennes, telles
que &lt;span class=&quot;caps&quot;&gt;RHEL&lt;/span&gt; 2, qui peuvent ne pas avoir &lt;em&gt;libevent&lt;/em&gt; du tout.&lt;/p&gt;
&lt;p&gt;Pour certains utilisateurs, compiler une bibliothèque tierce
préalablement à la compilation d’un logiciel est pénible. Aussi, j’ai
inclus le code source de &lt;em&gt;libevent&lt;/em&gt; dans &lt;em&gt;lldpd&lt;/em&gt; (en tant que
sous-module &lt;em&gt;git&lt;/em&gt;). Il n’est utilisé que si la version présente sur le
système n’est pas suffisamment récente.&lt;/p&gt;
&lt;p&gt;Jetez un œil à &lt;a href=&quot;https://github.com/vincentbernat/lldpd/blob/4c1a8c6152215b9c1320e04f6c811404f27f53c8/m4/libevent.m4&quot;&gt;&lt;code&gt;m4/libevent.m4&lt;/code&gt;&lt;/a&gt; et
&lt;a href=&quot;https://github.com/vincentbernat/lldpd/blob/0.7.1/src/daemon/Makefile.am&quot;&gt;&lt;code&gt;src/daemon/Makefile.am&lt;/code&gt;&lt;/a&gt; pour comprendre
comment est réalisée cette inclusion conditionnelle.&lt;/p&gt;
&lt;h1 id=&quot;client&quot;&gt;Client&lt;/h1&gt;
&lt;h2 id=&quot;serialisation&quot;&gt;Sérialisation&lt;/h2&gt;
&lt;p&gt;Afin d’afficher les voisins découverts par &lt;code&gt;lldpd&lt;/code&gt;, &lt;code&gt;lldpctl&lt;/code&gt;
communique avec ce dernier via une socket Unix. Chaque structure
devant être sérialisée était décrite avec une chaîne de
caractères. Par exemple :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;#define STRUCT_LLDPD_DOT3_MACPHY &quot;(bbww)&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpd_dot3_macphy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;u_int8_t&lt;/span&gt;                 &lt;span class=&quot;n&quot;&gt;autoneg_support&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;u_int8_t&lt;/span&gt;                 &lt;span class=&quot;n&quot;&gt;autoneg_enabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;u_int16_t&lt;/span&gt;                &lt;span class=&quot;n&quot;&gt;autoneg_advertised&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;u_int16_t&lt;/span&gt;                &lt;span class=&quot;n&quot;&gt;mau_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Je ne voulais pas utiliser de bibliothèques telles que
&lt;a href=&quot;http://code.google.com/p/protobuf/&quot; title=&quot;Protocol Buffers - Google data interchange format&quot;&gt;Protocol Buffers&lt;/a&gt; car elles nécessitent l’utilisation d’une structure
intermédiaire dans laquelle il aurait fallu copier les données.&lt;/p&gt;
&lt;p&gt;Toutefois, le processus de sérialisation de &lt;em&gt;lldpd&lt;/em&gt; ne permettait pas
de gérer les pointeurs vers d’autres structures, les listes ou les
références circulaires. J’ai donc écrit une version plus avancée
utilisant des annotations à l’aide de macros :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;TAILQ_ENTRY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_entries&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;u_int16_t&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;c_index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;u_int8_t&lt;/span&gt;         &lt;span class=&quot;n&quot;&gt;c_protocol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;u_int8_t&lt;/span&gt;         &lt;span class=&quot;n&quot;&gt;c_id_subtype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;              &lt;span class=&quot;n&quot;&gt;c_id_len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c_descr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;u_int16_t&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;c_cap_available&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;u_int16_t&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;c_cap_enabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;u_int16_t&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;c_ttl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;TAILQ_HEAD&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpd_mgmt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_mgmt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_BEGIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_TQE&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_entries&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_FSTR&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_id_len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_STR&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_STR&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_descr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_SUBTQ&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd_chassis&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpd_mgmt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c_mgmt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MARSHAL_END&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Seuls les pointeurs doivent être annotés. Le reste de la structure est
simplement copiée avec &lt;code&gt;memcpy()&lt;/code&gt;&lt;sup id=&quot;fnref:uint16t&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:uint16t&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Je suis encore assez
partagé sur le résultat et il est sans doute possible d’améliorer les
choses. En vrac : mettre les annotations directement dans la
structure, utiliser un &lt;a href=&quot;https://bitbucket.org/eliben/pycparser&quot; title=&quot;pycparser, un analyseur syntaxique du C écrit en Python&quot;&gt;parseur de code C&lt;/a&gt; ou utiliser la
sortie &lt;span class=&quot;caps&quot;&gt;AST&lt;/span&gt; de &lt;span class=&quot;caps&quot;&gt;LLVM&lt;/span&gt;…&lt;/p&gt;
&lt;h2 id=&quot;bibliotheque&quot;&gt;Bibliothèque&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;lldpd&lt;/em&gt; 0.5.7 disposait de deux points d’entrée pour interagir avec
&lt;code&gt;lldpd&lt;/code&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;À travers le support &lt;span class=&quot;caps&quot;&gt;SNMP&lt;/span&gt;. Seules les informations contenues dans
    la &lt;a href=&quot;http://www.ieee802.org/1/files/public/MIBs/LLDP-MIB-200505060000Z.txt&quot; title=&quot;LLDP-MIB&quot;&gt;&lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt;&lt;/abbr&gt;&lt;/abbr&gt;-&lt;span class=&quot;caps&quot;&gt;MIB&lt;/span&gt;&lt;/a&gt; sont alors exportées. Les aspects spécifiques à
    l’implémentation ne sont donc pas disponibles. De plus, le support
    est actuellement en lecture seulement.&lt;/li&gt;
&lt;li&gt;À travers &lt;code&gt;lldpctl&lt;/code&gt;. Grâce à une contribution de Andreas
    Hofmeister, la sortie peut être produite sous forme d’un document &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’intégration de &lt;em&gt;lldpd&lt;/em&gt; dans une pile réseau était donc limitée à l’un
de ces deux canaux. À titre d’exemple, il est possible de regarder
&lt;a href=&quot;http://git.vyatta.com/git/?p=vyatta-lldp.git;a=summary&quot; title=&quot;Intégration de lldpd dans Vyatta&quot;&gt;comment Vyatta a effectué cette intégration&lt;/a&gt;
à l’aide de la seconde solution.&lt;/p&gt;
&lt;p&gt;Afin de fournir une solution plus robuste, une bibliothèque partagée,
&lt;code&gt;liblldpctl&lt;/code&gt;, existe désormais. J’ai suivi les grandes directions
suivantes dans sa conception&lt;sup id=&quot;fnref:library&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:library&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une convention de nommage uniforme. Tous les symboles exportés sont
   préfixés par &lt;code&gt;lldpctl_&lt;/code&gt;. Pas de pollution de l’espace de nommage.&lt;/li&gt;
&lt;li&gt;Une convention des valeurs de retour uniforme. En cas d’erreurs, les
   fonctions retournant des pointeurs retournent &lt;code&gt;NULL&lt;/code&gt;, celles
   retournant des entiers retournent &lt;code&gt;-1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Pas de variables globales. Réentrant et possibilité d’utiliser des
   &lt;em&gt;threads&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Un &lt;a href=&quot;https://github.com/vincentbernat/lldpd/blob/0.7.1/src/lib/lldpctl.h&quot; title=&quot;lldpctl.h&quot;&gt;seul fichier d’entête&lt;/a&gt; bien documenté.&lt;/li&gt;
&lt;li&gt;Une &lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; asynchrone pour les entrées/sorties. La bibliothèque
   délègue ces dernières à l’utilisateur en lui demandant de fournir
   les fonctions nécessaires. Ces dernières peuvent retarder leurs
   effets. Dans ce cas, l’utilisateur doit appeler des fonctions
   particulières de la bibliothèque quand les données deviennent
   disponibles. L’intégration dans une boucle d’évènement existente
   est alors triviale. Une fine couche synchrone est également fournie.&lt;/li&gt;
&lt;li&gt;Des types opaques avec des fonctions d’accès.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’accès aux informations est fait à travers un « atome » qui est un
conteneur opaque de type &lt;code&gt;lldpctl_atom_t&lt;/code&gt;. D’un atome, il est possible
d’extraire des entiers, des chaînes de caractères, des tampons ou
d’autres atomes. La liste des ports est un atome, chaque port de cette
liste est également un atome, la liste des &lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt; présents sur ce port
est un atome ainsi que chaque &lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt; de cette liste. Le nom d’un &lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt;
est par contre une chaîne de caractères dont la validité est limitée
par la validité de l’atome englobant. Accéder à une propriété d’un
atome se fait via des fonctions génériques telles que
&lt;code&gt;lldpctl_atom_get_str()&lt;/code&gt; en spécifiant la clef correspondant à la
propriété voulue. Par exemple, voici comment afficher le nom et
l’identifiant de tous les &lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt; attachés à un port :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;vlans&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpctl_atom_get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpctl_k_port_vlans&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;lldpctl_atom_foreach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vlans&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;vlan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;vid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpctl_atom_get_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vlan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                               &lt;span class=&quot;n&quot;&gt;lldpctl_k_vlan_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpctl_atom_get_str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vlan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                &lt;span class=&quot;n&quot;&gt;lldpctl_k_vlan_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt; %d: %s&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;vid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;lldpctl_atom_dec_ref&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vlans&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;En interne, un atome est typé et maintient un compteur des
références. La taille de l’&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; est limitée grâce à ce
concept. Actuellement, il est possible d’extraire plus d’une centaine
de propriétés de &lt;code&gt;lldpd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;À terme, la bibliothèque doit également permettre la configuration
complète de &lt;code&gt;lldpd&lt;/code&gt; plutôt que d’utiliser des paramètres en ligne de
commande. Cette bibliothèque ne remplace pas &lt;code&gt;lldpctl&lt;/code&gt; qui est
toujours le client à utiliser dans la majeure partie des cas.&lt;/p&gt;
&lt;h2 id=&quot;cli&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CLI&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;La possibilité de configurer &lt;code&gt;lldpd&lt;/code&gt; via un fichier de configuration
était demandé depuis bien longtemps. Je ne voulais toutefois pas
inclure un analyseur syntaxique pour limiter l’inflation du nombre de
lignes de code. De plus, il était déjà possible de configurer divers
aspects liés à &lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt;&lt;/abbr&gt;-&lt;span class=&quot;caps&quot;&gt;MED&lt;/span&gt; via &lt;code&gt;lldpctl&lt;/code&gt;. Il m’a donc semblé naturel de
continuer dans cette voie : permettre à &lt;code&gt;lldpctl&lt;/code&gt; de lire un fichier
de configuration et d’en transmettre les effets à &lt;code&gt;lldpd&lt;/code&gt;. En bonus,
les instructions de configuration pourraient être entrées de manière
interactive à la façon d’un équipement réseau.&lt;/p&gt;
&lt;h3 id=&quot;analyse-syntaxique-completion&quot;&gt;Analyse syntaxique &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; complétion&lt;/h3&gt;
&lt;p&gt;Un analyseur syntaxique généré par &lt;span class=&quot;caps&quot;&gt;YACC&lt;/span&gt; limite les possibilités telles
que la complétion. Aussi, les commandes sont définies par un arbre
dont chaque nœud accepte un mot. Un nœud est défini ainsi :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_node&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_node&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_env&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpctl_conn_t&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;writer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_env&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On y trouve :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le nœud parent,&lt;/li&gt;
&lt;li&gt;optionnellement, le mot accepté,&lt;/li&gt;
&lt;li&gt;une description pour l’aide,&lt;/li&gt;
&lt;li&gt;optionnellement, une fonction de validation,&lt;/li&gt;
&lt;li&gt;optionnellement, une fonction qui sera exécutée si le mot est validé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le parcours de l’arbre est effectué en maintenant un environnement
contenant à la fois des associations clef-valeur arbitraires ainsi
qu’une pile des positions rencontrées dans l’arbre. La fonction de
validation peut s’aider de l’environnement pour juger de la validité
d’un mot (le mot clef &lt;code&gt;foo&lt;/code&gt; ne sera accepté que s’il n’a pas déjà été
rencontré, par exemple). La fonction d’exécution peut enregistrer la
valeur courante dans une association mais également remonter dans
l’arbre avant de continuer l’exécution.&lt;/p&gt;
&lt;p&gt;À titre d’exemple, voici comment les nœuds permettant de configurer la
localisation par coordonnées géographiques sont définis :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;/* Le nœud principal */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_node&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;configure_medloc_coord&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;configure_medlocation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;coordinate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;span class=&quot;caps&quot;&gt;MED&lt;/span&gt; location coordinate configuration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* Le nœud de sortie&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;   La fonction de validation vérifie si l'utilisateur&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;   a fourni latitude et longitude. */&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;configure_medloc_coord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NEWLINE&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Configure &lt;span class=&quot;caps&quot;&gt;MED&lt;/span&gt; location coordinates&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cmd_check_env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_medlocation_coordinate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;latitude,longitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* Stockage de la valeur de la latitude. On remonte ensuite&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;   de deux positions en arrière. La latitude ne peut être&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;   entrée qu'une fois. */&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;configure_medloc_coord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;&quot;latitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Specify latitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cmd_check_no_env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;latitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Latitude as xx.yyyyN or xx.yyyyS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_store_env_value_and_pop2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;latitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* De même pour la longitude */&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;commands_new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;configure_medloc_coord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;&quot;longitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Specify longitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cmd_check_no_env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;longitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Longitude as xx.yyyyE or xx.yyyyW&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd_store_env_value_and_pop2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;longitude&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Les définitions sont encore un peu verbeuses mais ce système semble
être un bon équilibre entre puissance et simplicité. Il couvre tous
les cas nécessaires.&lt;/p&gt;
&lt;h3 id=&quot;readline&quot;&gt;Readline&lt;/h3&gt;
&lt;p&gt;Face à une interface en ligne de commande, l’utilisateur s’attend
généralement à disposer d’un historique, d’une aide en ligne et de la
complétion. La bibliothèque la plus souvent utilisée pour cet usage
est la &lt;a href=&quot;http://www.gnu.org/software/readline/&quot; title=&quot;The GNU Readline Library&quot;&gt;bibliothèque &lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt; Readline&lt;/a&gt;. Toutefois,
en raison de sa licence (&lt;abbr title=&quot;GNU General Public License&quot;&gt;&lt;span class=&quot;caps&quot;&gt;GPL&lt;/span&gt;&lt;/abbr&gt;), j’ai d’abord cherché une alternative.
Il en existe de nombreuses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libedit/&quot; title=&quot;NetBSD libedit&quot;&gt;NetBSD Editline library&lt;/a&gt; (&lt;code&gt;libedit&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://thrysoee.dk/editline/&quot; title=&quot;Autotool port of libedit&quot;&gt;Autotool port of the NetBSD Editline library&lt;/a&gt; (encore &lt;code&gt;libedit&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://packages.qa.debian.org/e/editline.html&quot;&gt;Debian version of the Editline library&lt;/a&gt; (&lt;code&gt;libeditline&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/antirez/linenoise&quot; title=&quot;linenoise, a minimal readline replacement&quot;&gt;linenoise&lt;/a&gt;, une bibliothèque minimalistique.&lt;/li&gt;
&lt;li&gt;Beaucoup d’autres.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les trois premières bibliothèques supportent la même &lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; que &lt;em&gt;&lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt;
Readline&lt;/em&gt;. Elles disposent en sus d’une &lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; commune native. Cette
dernière gère également l’analyse lexicale. J’ai donc en premier lieu
adopté cette &lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt;&lt;sup id=&quot;fnref:libeditapi&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:libeditapi&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Malheureusement, j’ai remarqué par la suite que ces bibliothèques ne
sont pas beaucoup répandues dans le monde Linux. En utilisant l’&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt;
native, il n’est pas possible de se rabattre sur la &lt;em&gt;&lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt;
Readline&lt;/em&gt;. J’ai donc changé mon fusil d’épaule et opté pour l’&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; de
la &lt;em&gt;&lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt; Readline&lt;/em&gt;. Une
&lt;a href=&quot;http://www.gnu.org/software/autoconf-archive/ax_lib_readline.html&quot; title=&quot;ax_lib_readline in autoconf archive&quot;&gt;macro issue de l’archive Autoconf&lt;/a&gt; (légèrement
modifiée) règle les disparités en ce qui concerne la compilation et la liaison.&lt;/p&gt;
&lt;p&gt;L’absence d’analyseur lexical intégré m’a obligé à écrire le
mien. L’&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt; est également assez mal documentée et il est difficile de
savoir quels symboles sont disponibles dans quelle version. Je me suis
limité aux symboles suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;readline()&lt;/code&gt;, &lt;code&gt;addhistory()&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rl_insert_text()&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rl_forced_update_display()&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rl_bind_key()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rl_line_buffer&lt;/code&gt; et &lt;code&gt;rl_point&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Malheureusement, les implémentations de &lt;code&gt;libedit&lt;/code&gt; ne gèrent pas
correctement &lt;code&gt;rl_bind_key()&lt;/code&gt;. Aussi, la complétion et l’aide en ligne
ne sont pas disponibles avec celle-ci. La plupart des &lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt; viennent
avec la &lt;em&gt;&lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt; Readline&lt;/em&gt; préinstallée (elle bénéficie alors de
l’exception liée aux bibliothèques systèmes). Pour le reste, il est
toujours possible de se lier avec &lt;code&gt;libedit&lt;/code&gt; et éviter ainsi les
problèmes de licence. Dans ce cas, l’aide peut être obtenue avec la
commande &lt;code&gt;help&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&quot;changements-specifiques-a-un-os&quot;&gt;Changements spécifiques à un &lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt;&lt;/h1&gt;
&lt;h2 id=&quot;netlink-sous-linux&quot;&gt;Netlink sous Linux&lt;/h2&gt;
&lt;p&gt;Précédemment, la liste des interfaces était récupérée via
&lt;code&gt;getifaddrs()&lt;/code&gt;. &lt;em&gt;lldpd&lt;/em&gt; utilise désormais directement &lt;a href=&quot;http://en.wikipedia.org/wiki/Netlink&quot; title=&quot;Netlink dans Wikipedia&quot;&gt;Netlink&lt;/a&gt; sur
Linux. Ce n’est pas un changement majeur car la bibliothèque C
utilisait déjà &lt;em&gt;Netlink&lt;/em&gt; à cet effet. Les informations supplémentaires
que l’on peut obtenir par ce biais ne sont pour le moment pas
exploitées : elles sont toujours récupérées via &lt;em&gt;sysfs&lt;/em&gt; ou
&lt;code&gt;ioctl()&lt;/code&gt;. Toutefois, &lt;em&gt;lldpd&lt;/em&gt; est notifié lors du moindre changement.&lt;/p&gt;
&lt;p&gt;Comme beacoup d’autres projets, j’ai réécrit ma propre implémentation
de &lt;em&gt;Netlink&lt;/em&gt; au lieu d’utiliser des bibliothèques telles que &lt;a href=&quot;http://www.infradead.org/~tgr/libnl/&quot; title=&quot;Netlink Protocol Library Suite&quot;&gt;libnl&lt;/a&gt;
qui incluent tout le nécessaire et bien plus encore. Pourquoi ?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;La dernière version de &lt;a href=&quot;http://www.infradead.org/~tgr/libnl/&quot; title=&quot;Netlink Protocol Library Suite&quot;&gt;libnl&lt;/a&gt; est très jeune et n’est pas
    disponible dans de nombreuses distributions, dont par exemple
    Debian Squeeze. Comme pour &lt;em&gt;libevent&lt;/em&gt;, il aurait été possible de
    contourner la difficulté en incluant cette bibliothèque dans
    &lt;em&gt;lldpd&lt;/em&gt; et en l’utilisant lorsqu’il n’y a pas d’alternative dans
    le système. Mais…&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La licence de &lt;em&gt;libnl&lt;/em&gt; est la &lt;abbr title=&quot;GNU Lesser General Public License&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LGPL&lt;/span&gt;&lt;/abbr&gt; 2.1. La liaison statique est
    alors un exercice périlleux. Il n’est pas clair si le résultat est
    une œuvre dérivée ou non. L’interprétation la plus courante est
    que la liaison statique est autorisée suivant les mêmes termes que
    dans la &lt;abbr title=&quot;GNU Lesser General Public License&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LGPL&lt;/span&gt;&lt;/abbr&gt; 3. C’est un problème pour de nombreux projets. Par
    exemple, &lt;a href=&quot;http://vincent.bernat.im/fr/blog/&amp;quot;http://www.ogre3d.org/&amp;amp;quot&quot; title=&quot;OGRE: Open Source 3D Graphics Engine&quot;&gt;&lt;span class=&quot;caps&quot;&gt;OGRE&lt;/span&gt;&lt;/a&gt; a ajouté
    &lt;a href=&quot;http://www.ogre3d.org/2009/03/06/lgpl-exclusions-added-static-linking-now-simpler&quot; title=&quot;OGRE: static linking now simpler&quot;&gt;une exception pour autoriser la liaison statique&lt;/a&gt;
    dans sa version 1.6 puis s’est
    &lt;a href=&quot;http://www.ogre3d.org/2009/09/15/ogre-will-switch-to-the-mit-license-from-1-7&quot; title=&quot;OGRE will switch to the MIT license from 1.7&quot;&gt;tourné vers la licence &lt;span class=&quot;caps&quot;&gt;MIT&lt;/span&gt;&lt;/a&gt; dans sa
    version 1.7.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;J’ai eu une courte discussion avec Thomas Graf à propos de ce problème
et il semble disposé à ajouter une telle exception. Cela risque de
prendre un peu de temps mais une fois le changement réalisé,
j’utiliserai alors la &lt;em&gt;libnl&lt;/em&gt; et en profiterai pour mieux exploiter
&lt;em&gt;Netlink&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;support-des-bsd&quot;&gt;Support des &lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt;&lt;/h2&gt;
&lt;p&gt;La version 0.5.7 de &lt;em&gt;lldpd&lt;/em&gt; ne supportait que Linux. La réécriture
utilisant &lt;em&gt;Netlink&lt;/em&gt; a été l’occasion d’abstraire correctement le
traitement des interfaces et de porter le tout sous les différents
&lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt;. Le premier port a eu lieu pour &lt;a href=&quot;http://www.debian.org/ports/kfreebsd-gnu/&quot; title=&quot;Debian GNU/kFreeBSD&quot;&gt;Debian &lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt;/kFreeBSD&lt;/a&gt;, puis pour
&lt;a href=&quot;http://www.freebsd.org&quot; title=&quot;FreeBSD&quot;&gt;FreeBSD&lt;/a&gt;, &lt;a href=&quot;http://vincent.bernat.im/www.openbsd.org&quot; title=&quot;OpenBSD&quot;&gt;OpenBSD&lt;/a&gt; et &lt;a href=&quot;http://www.netbsd.org&quot; title=&quot;NetBSD&quot;&gt;NetBSD&lt;/a&gt;. La structure est la même pour
les trois &lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;getifaddrs()&lt;/code&gt; pour obtenir la liste des interfaces,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bpf(4)&lt;/code&gt; pour s’attacher à une interface et envoyer et recevoir des paquets,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PF_ROUTE&lt;/code&gt; pour être notifié lors d’un changement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chaque &lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt; utilise ses propres &lt;code&gt;ioctl()&lt;/code&gt; pour récupérer les
informations liées aux &lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt;, aux ponts et aux aggrégats mais ils sont
souvent assez similaires. Le code est généralement repris de
&lt;code&gt;ifconfig.c&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Les ports pour les &lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt; ont les mêmes fonctionnalités que le port pour
Linux, à l’exception de &lt;em&gt;NetBSD&lt;/em&gt; qui ne dispose pas du support pour
l’inventaire &lt;abbr title=&quot;Link Layer Discovery Protocol&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt;&lt;/abbr&gt;-&lt;span class=&quot;caps&quot;&gt;MED&lt;/span&gt; car je n’ai pas su comment récupérer ces informations.&lt;/p&gt;
&lt;p&gt;Le port d’OpenBSD offre de plus une plus grande sécurité en filtrant
les paquets envoyés et en interdisant le processus non privilégié de
retirer le filtre mis en place :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;/* Install write filter (optional) */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ioctl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BIOCSETWF&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;caddr_t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fprog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;rc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;errno&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;log_info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;privsep&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;unable to setup write &lt;span class=&quot;caps&quot;&gt;BPF&lt;/span&gt; filter for %s&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;goto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* Lock interface */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ioctl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BIOCLOCK&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;caddr_t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;enable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;rc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;errno&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;log_info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;privsep&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;unable to lock &lt;span class=&quot;caps&quot;&gt;BPF&lt;/span&gt; interface %s&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;goto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;C’est une fonctionnalité très appréciable. &lt;code&gt;lldpd&lt;/code&gt; est découpé en deux
processus. Un processus privilégié s’attache au port et transmet
celui-ci à un processus non privilégié. Sans cette fonctionnalité, le
second processus peut simplement retirer le filtre &lt;span class=&quot;caps&quot;&gt;BPF&lt;/span&gt;. J’ai porté la
&lt;a href=&quot;http://git.kernel.org/?p=linux/kernel/git/davem/net-next.git;a=commit;h=d59577b6ffd313d0ab3be39cb1ab47e29bdc9182&quot; title=&quot;Empêcher les retrait d'un filtre sur une socket&quot;&gt;possibilité d’interdire le retrait d’un filtre&lt;/a&gt;
sous Linux. Toutefois, il me reste toujours à écrire le nécessaire
pour le filtre des paquets sortants.&lt;/p&gt;
&lt;h2 id=&quot;support-dos-x&quot;&gt;Support d’&lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt; X&lt;/h2&gt;
&lt;p&gt;Une fois le support pour FreeBSD fonctionnel, celui d’&lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt; X fut assez
simple. J’ai obtenu de &lt;a href=&quot;http://xcloud.me/&quot; title=&quot;Xcloud - Mac cloud server&quot;&gt;xcloud.me&lt;/a&gt; une machine virtuelle sous &lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt; X
pour m’aider dans cette tâche. Le port n’a ensuite pris que deux jours
dont une partie du temps à chercher comment ne pas fournir un numéro
de carte de crédit à Apple pour pouvoir télécharger Xcode !&lt;/p&gt;
&lt;p&gt;Afin de faciliter l’installation de &lt;em&gt;lldpd&lt;/em&gt;, j’ai également écrit une
&lt;a href=&quot;https://github.com/mxcl/homebrew/pull/17052&quot; title=&quot;Formule pour installer lldpd via Homebrew&quot;&gt;formule&lt;/a&gt; pour &lt;a href=&quot;http://mxcl.github.com/homebrew/&quot; title=&quot;Homebrew: the missing package manager for OS X&quot;&gt;Homebrew&lt;/a&gt; qui semble le
gestionnaire de paquets le plus populaire actuellement pour &lt;span class=&quot;caps&quot;&gt;OS&lt;/span&gt; X.&lt;/p&gt;
&lt;h2 id=&quot;support-de-upstart-et-systemd&quot;&gt;Support de upstart et systemd&lt;/h2&gt;
&lt;p&gt;De nombreuses distributions proposent désormais &lt;a href=&quot;http://upstart.ubuntu.com/&quot; title=&quot;upstart, un init basé sur les événements&quot;&gt;upstart&lt;/a&gt; ou
&lt;a href=&quot;http://www.freedesktop.org/wiki/Software/systemd&quot; title=&quot;systemd, un autre init basé sur les événements&quot;&gt;systemd&lt;/a&gt; en remplacement ou en alternative au système d’init
historique. Comme de nombreux démons, &lt;code&gt;lldpd&lt;/code&gt; se détache du terminal
et tourne en tâche de fond en forkant deux fois lorsqu’il est prêt
(pour &lt;code&gt;lldpd&lt;/code&gt;, cela signifie simplement que la socket Unix a été mise
en place). Bien qu’il soit possible de garder ce comportement avec
&lt;em&gt;upstart&lt;/em&gt; et &lt;em&gt;systemd&lt;/em&gt;, il est préférable de ne plus forker. Comment
indiquer alors que le démon est prêt à remplir sa tâche ?&lt;/p&gt;
&lt;p&gt;Avec &lt;em&gt;upstart&lt;/em&gt;, &lt;code&gt;lldpd&lt;/code&gt; s’envoie le signal &lt;code&gt;SIGSTOP&lt;/code&gt;. &lt;em&gt;upstart&lt;/em&gt; va
détecter son état et lui envoyer le signal &lt;code&gt;SIGCONT&lt;/code&gt;. De plus, il va
considérer que le démon est prêt. Voici comment faire :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;upstartjob&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getenv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UPSTART_JOB&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;upstartjob&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strcmp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;upstartjob&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;lldpd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;log_debug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;running with upstart, don't fork but stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;raise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SIGSTOP&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;La configuration de &lt;em&gt;upstart&lt;/em&gt; ressemble à ceci :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# lldpd - &lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt; daemon&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;description&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt; daemon&quot;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;start&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;net&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;up&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IFACE&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lo&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;stop&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;runlevel&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;06&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stop&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;respawn&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;script&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;etc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lldpd&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lldpd&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;DAEMON_ARGS&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;script&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;em&gt;systemd&lt;/em&gt; emploie une socket sur laquelle le démon envoie la chaîne
&lt;code&gt;READY=1&lt;/code&gt; quand il est prêt. En utilisant la bibliothèque destinée à
cet effet, il suffit d’appeler &lt;code&gt;sd_notify(&quot;READY=1\n&quot;)&lt;/code&gt;. La fonction
&lt;code&gt;sd_notify()&lt;/code&gt; pouvant être réécrite en moins de 30 lignes, il m’a
semblé plus simple de le faire plutôt que d’ajouter une dépendance
externe. Voici la configuration de &lt;em&gt;systemd&lt;/em&gt; :&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;[Unit]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Description&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LLDP&lt;/span&gt; daemon&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Documentation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;man:lldpd(8)&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;[Service]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;notify&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;NotifyAccess&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;main&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;EnvironmentFile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;-/etc/default/lldpd&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ExecStart&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/usr/sbin/lldpd $DAEMON_ARGS&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;on-failure&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;[Install]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;WantedBy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;multi-user.target&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id=&quot;fichiers-dentete-specifique-a-linux&quot;&gt;Fichiers d’entête spécifique à Linux&lt;/h2&gt;
&lt;p&gt;Les fichiers d’entête issus du noyau ont toujours été très
problématiques. Ils peuvent contenir des erreurs les rendant difficile
à utiliser en espace utilisateur ou être simplement manquants. Il y a
longtemps, ils faisaient partie de la bibliothèque C et étaient
synchronisés très rarement. Ils ont ensuite été extraits du noyau sans
aucun changement et ne correspondaient pas forcément au noyau par
défaut de la distribution&lt;sup id=&quot;fnref:sarge&quot;&gt;&lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fn:sarge&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Il s’agit d’un problème qui tend à disparaître aujourd’hui. D’un côté,
les distributions empaquettent désormais les entêtes correspondant au
noyau par défaut. De l’autre, les développeurs noyau
&lt;a href=&quot;http://lwn.net/Articles/507794/&quot; title=&quot;The UAPI header file split&quot;&gt;séparent les entêtes propres au noyau des entêtes destinés à être utilisés par l’espace utilisateur&lt;/a&gt;. Toutefois,
il faut toujours gérer l’historique.&lt;/p&gt;
&lt;p&gt;Un bon exemple est &lt;code&gt;linux/ethtool.h&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il peut simplement être absent alors que les fonctionnalités
   associées sont supportées depuis très longtemps.&lt;/li&gt;
&lt;li&gt;Il peut utiliser les types &lt;code&gt;u8&lt;/code&gt;, &lt;code&gt;u16&lt;/code&gt; qui sont spécifiques au
   noyau. Pour contourner ce problème, il faut
   &lt;a href=&quot;https://github.com/vincentbernat/lldpd/blob/0.5.7/m4/ethtool.m4&quot; title=&quot;'Type munging' dans linux/ethtool.h&quot;&gt;altérer les types&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Certaines définitions telles que &lt;code&gt;SPEED_10000&lt;/code&gt; peuvent
   manquer. Dans ce cas, on peut soit compléter les définitions dans
   un autre fichier et se retrouver avec une copie du fichier d’entête
   dans laquelle les définitions sont entralacées avec des &lt;code&gt;#ifdef&lt;/code&gt;,
   soit n’utiliser les symboles que s’ils sont présents. La dernière
   solution n’est pas plus pratique et elle interdit d’utiliser des
   fonctionnalités qui sont pourtant présentes dans le noyau.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une solution très simple pour résoudre ce problème est simplement
d’inclure les fichiers d’entête dans l’arbre de source du
projet. Grâce à Google qui a recopié maladroitement ceux-ci pour sa
bibliothèque C &lt;em&gt;Bionic&lt;/em&gt;, nous savons désormais que
&lt;a href=&quot;http://lwn.net/Articles/434318/&quot; title=&quot;Has Bionic stepped over the GPL line?&quot;&gt;la copie des entêtes du noyau dans un programme ne constitue pas une œuvre dérivée&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;footnote&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:uint16t&quot;&gt;
&lt;p&gt;L’utilisation des types &lt;code&gt;u_int16_t&lt;/code&gt; et &lt;code&gt;u_int8_t&lt;/code&gt; est un
        reste du système précédent où le sérialiseur devait
        connaître la taille de chaque membre. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:uint16t&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:library&quot;&gt;
&lt;p&gt;Pour des conseils plus élaborés, jetez un œil sur
        &lt;a href=&quot;http://davidz25.blogspot.fr/2011/07/writing-c-library-intro-conclusion-and.html&quot; title=&quot;Writing a C library&quot;&gt;Writing a C library&lt;/a&gt;. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:library&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 2 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:libeditapi&quot;&gt;
&lt;p&gt;L’analyse lexicale n’est pas le seul avantage de cette
           &lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;abbr title=&quot;Application Programming Interface&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/abbr&gt;&lt;/abbr&gt;&lt;/abbr&gt; native. Elle est également beaucoup mieux conçue,
           ne repose pas sur des variables globales et est bien
           documentée. Ses implémentations sont de plus sous
           licence &lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;abbr title=&quot;Berkeley Software Distribution&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt;&lt;/abbr&gt;&lt;/abbr&gt;&lt;/abbr&gt;. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:libeditapi&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 3 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:sarge&quot;&gt;
&lt;p&gt;Par exemple, dans Debian Sarge, le noyau était un 2.6.8
      (2004) tandis que les entêtes du noyau provenaient d’un
      noyau antérieur au 2.6. &lt;a href=&quot;http://vincent.bernat.im/fr/blog/atom.xml#fnref:sarge&quot; rev=&quot;footnote&quot; title=&quot;Jump back to footnote 4 in the text&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
	<pubDate>Wed, 20 Feb 2013 08:28:19 +0000</pubDate>
</item>
<item>
	<title>Philippe Latu: Architecture système et initiation au développement réseau</title>
	<guid isPermaLink="true">http://www.inetdoc.net/archives/2013/02/07/architecture_système_et_initiation_au_développement_réseau/index.html</guid>
	<link>http://www.inetdoc.net/archives/2013/02/07/architecture_système_et_initiation_au_développement_réseau/index.html</link>
	<description>&lt;p&gt;Avant les séances de travaux pratiques sur &lt;a href=&quot;http://www.inetdoc.net/dev/socket-c/&quot;&gt;l'initiation au développement sur
les sockets&lt;/a&gt; avec les étudiants de seconde année de DUT GE2I, j'ai voulu
passer à une version &lt;i&gt;dual stack&lt;/i&gt; &lt;tt&gt;IPv4&lt;/tt&gt; et &lt;tt&gt;IPv6&lt;/tt&gt; des
programmes étudiés. L'évolution relativement récente consiste à remplacer les
appels à &lt;tt&gt;'gethostbyname'&lt;/tt&gt; par l'utilisation de &lt;tt&gt;'getaddrinfo'&lt;/tt&gt;
qui renvoie les adresses des deux versions du protocole &lt;tt&gt;IP&lt;/tt&gt; via des
pointeurs sur des enregistrements &lt;tt&gt;'addrinfo'&lt;/tt&gt; chaînés. Tout ceci
fonctionne très bien et la façon dont les données sont structurées est très
intéressante à étudier ... à mes yeux.&lt;/p&gt;

&lt;p&gt;On constate une fois de plus que le niveau requis pour accéder à la
compréhension d'une technique ou d'une technologie augmente sans cesse. Pour un
débutant complet, il devient de plus en plus difficile de se hisser à un niveau
permettant de s'accrocher au train en marche. L'argument qui vient
immédiatement consiste à dire que les étudiants actuels sont nés avec
l'intégration système et qu'ils utilisent très bien leur smartphone sans se
soucier de l'encapsulation des paquets &lt;tt&gt;IP&lt;/tt&gt; dans les réseaux radio
numériques. Mon point de vue repose sur le fait que le niveau correspondant à
«l'utilisation» des systèmes n'est pas suffisant pour accéder à un emploi et un
niveau de revenus décent. Je tente donc à nouveau ma chance en présentant
quelques &lt;a href=&quot;http://www.inetdoc.net/presentations/os-arch-hints/&quot;&gt;éléments
sur l'architecture système&lt;/a&gt;. L'idée est de montrer que les systèmes
d'exploitation des «dispositifs mobiles» dont les étudiants sont friands ont
une longue histoire chaotique mais continue. Suivant cette idée, les «petits
programmes pour débuter» viennent bien s'intégrer dans les technologies
utilisées au quotidien.&lt;/p&gt;

&lt;a href=&quot;http://www.inetdoc.net/presentations/os-arch-hints/&quot;&gt;
&lt;img width=&quot;630&quot; alt=&quot;Sous-système réseau du noyau Linux&quot; src=&quot;http://www.inetdoc.net/presentations/os-arch-hints/images/kernel-network-subsystem.png&quot; /&gt;&lt;/a&gt;

&lt;p&gt;La présentation est disponible aux formats &lt;a href=&quot;http://www.inetdoc.net/odp/os-arch-hints.odp&quot;&gt;ODP&lt;/a&gt; et &lt;a href=&quot;http://www.inetdoc.net/pdf/os-arch-hints.pdf&quot;&gt;PDF&lt;/a&gt;. Si vous avez
envie d'apporter des corrections, n'hésitez pas !&lt;/p&gt;</description>
	<pubDate>Thu, 07 Feb 2013 16:45:15 +0000</pubDate>
</item>
<item>
	<title>Rodolphe Quiédeville: PyDeb from PyPI to .deb</title>
	<guid isPermaLink="false">urn:md5:35a74e1f0d33a18df1a170bdb076c388</guid>
	<link>http://blog.rodolphe.quiedeville.org/index.php?post/2013/02/PyDeb-from-PyPI-to-deb</link>
	<description>&lt;p&gt;Dans mon précédent billet &lt;a href=&quot;http://blog.rodolphe.quiedeville.org/index.php?post/2013/01/Paquets-Debian-pour-Django&quot;&gt;&lt;/a&gt; j'évoquais les paquets debian que j'avais réalisé pour Django au sein du projet Pyrede. Cette activité de packaging ayant pris de l'ampleur les paquets seront désormais disponibles au sein du Projet Pydeb.&lt;/p&gt;


&lt;p&gt;Le projet PyDEB se compose d'un &lt;a href=&quot;http://packages.pydeb.eu&quot;&gt;dépôt de paquets&lt;/a&gt; et d'un &lt;a href=&quot;http://www.pydeb.eu&quot;&gt;blog&lt;/a&gt; sur lequel je publie les nouveaux paquets ainsi que leurs mises à jour.&lt;/p&gt;


&lt;p&gt;Les derniers paquets réalisés sont redis, hamlpy, vectorformats, ...&lt;/p&gt;


&lt;p&gt;Le projet &lt;a href=&quot;http://pyrede.quiedeville.org&quot;&gt;Pyrede&lt;/a&gt; d'analyse de fichier requirements.txt continue son activité avec PyDEB comme ressource bien évidemment.&lt;/p&gt;</description>
	<pubDate>Wed, 06 Feb 2013 12:01:00 +0000</pubDate>
</item>
<item>
	<title>Rodolphe Quiédeville: Paquets Debian pour Django</title>
	<guid isPermaLink="false">urn:md5:e473272383b19eb8f60ce8a398298ed6</guid>
	<link>http://blog.rodolphe.quiedeville.org/index.php?post/2013/01/Paquets-Debian-pour-Django</link>
	<description>&lt;p&gt;Si j'aime les virtualenv quand je code je reste attachés aux paquets pour le déploiement et j'essaye tant que faire se peut de résister aux 'pip install -r requirements.txt' sur mes machines de production.
C'est dans ce contexte que j'ai packagé quelques paquets relatifs à Django que je vais essayer de maintenir au sein du projet Pyrede.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://pyrede.quiedeville.org/debian/&quot;&gt;http://pyrede.quiedeville.org/debian/&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Le fichier &lt;em&gt;repo.key&lt;/em&gt; contient la signature utilisée pour signer les paquets.&lt;/p&gt;</description>
	<pubDate>Tue, 29 Jan 2013 12:23:00 +0000</pubDate>
</item>
<item>
	<title>David Curé: exFAT 1.0.0 et Debian squeeze</title>
	<guid isPermaLink="false">http://www.cure.nom.fr/blog/archives/229-guid.html</guid>
	<link>http://www.cure.nom.fr/blog/archives/229-exFAT-1.0.0-et-Debian-squeeze.html</link>
	<description>&lt;p&gt;Après mon &lt;a href=&quot;http://www.cure.nom.fr/blog/archives/228-Carte-SDXC,-exfat-0.9.8-et-Debian-Squeeze.html&quot;&gt;dernier billet&lt;/a&gt; sur la gestion du exfat pour les cartes SDXC, la version 1.0.0 du driver fuse supportant exfat est disponible.&lt;/p&gt; 
&lt;p&gt;J'ai mis à jour les paquets exfat-fuse et exfat-utils pour Debian squeeze amd64. Ils sont disponibles dans &lt;a href=&quot;http://www.cure.nom.fr/blog/archives/68-Depot-Debian.html&quot;&gt;mon dépôt&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt;</description>
	<pubDate>Fri, 25 Jan 2013 21:48:20 +0000</pubDate>
	<author>nospam@example.com (David)</author>
</item>
<item>
	<title>Debian France: Bilan de la deuxième Mini-Debconf Paris</title>
	<guid isPermaLink="true">http://france.debian.net/posts/2012/Mini_DebConf_Paris_2012/</guid>
	<link>http://france.debian.net/posts/2012/Mini_DebConf_Paris_2012/</link>
	<description>&lt;h1&gt;Bilan de la deuxième Mini-Debconf Paris&lt;/h1&gt;

&lt;p&gt;La deuxième édition de la Mini-Debconf Paris s'est tenue les 24 et 25
novembres 2012 dans les locaux de l'Epitech au Kremlin-Bicètre.&lt;/p&gt;

&lt;p&gt;Plus de 150 personnes se sont retrouvées pour &lt;a href=&quot;http://fr2012.mini.debconf.org/&quot;&gt;deux jours de
conférence&lt;/a&gt; assurées par des intervenants
venus de toute l'Europe. Plusieurs équipes Debian ont été présentées,
notamment &lt;a href=&quot;http://womble.decadent.org.uk/talks/mdcp2012-linux-kernel/&quot;&gt;l'équipe
noyau&lt;/a&gt; et
l'importante &lt;a href=&quot;http://fr2012.mini.debconf.org/slides/rt-minidebconf12.pdf&quot;&gt;release
team&lt;/a&gt;. L'installateur
Debian a été
&lt;a href=&quot;http://fr2012.mini.debconf.org/slides/re-discovering-d-i.pdf&quot;&gt;décortiqué&lt;/a&gt;.
GNOME a été à l'honneur avec une présentation des &lt;a href=&quot;http://fr2012.mini.debconf.org/slides/gnome-downstreams.pdf&quot;&gt;relations entre GNOME
et les
distributions&lt;/a&gt;
(dont Debian) mais aussi des explications sur &lt;a href=&quot;http://fr2012.mini.debconf.org/slides/LargeGnomeDeployment.pdf&quot;&gt;l'administration à grande
échelle&lt;/a&gt;
de postes bureautiques GNOME. Retrouvez les diapositives de toutes les
autres présentations sur le &lt;a href=&quot;http://fr2012.mini.debconf.org/&quot;&gt;site dédié&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://wiki.debconf.org/wiki/File:Mini-debconf-paris-2012-fdl-group-photo.jpg&quot; title=&quot;Photo de groupe&quot;&gt;&lt;img src=&quot;http://france.debian.net/blog/../posts/2012/Mini_DebConf_Paris_2012/photo-groupe.jpg&quot; alt=&quot;photo-groupe.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;L'association tenait un stand de merchandising où les visiteurs ont pu se
procurer polos, stickers, parapluie et autres t-shirts. Les futurs
contributeurs ont eu l'occasion de faire signer leurs clés GPG par les
développeurs Debian présents.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://wiki.debconf.org/wiki/File:Mini-debconf-paris-2012-fdl-key-signing-party-checking.jpg&quot; title=&quot;Key signing party dans la cour de l'Epitech&quot;&gt;&lt;img src=&quot;http://france.debian.net/blog/../posts/2012/Mini_DebConf_Paris_2012/ksp.jpg&quot; alt=&quot;ksp.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Merci aux nombreux sponsors qui ont soutenu l'événement:
&lt;a href=&quot;http://www.logilab.fr/&quot;&gt;Logilab&lt;/a&gt;,
&lt;a href=&quot;http://www.smartjog.com/en/?utm_source=debconf.org&amp;amp;utm_medium=link&amp;amp;utm_campaign=minidebconf2012&quot;&gt;SmartJog&lt;/a&gt;,
&lt;a href=&quot;http://bearstech.com/&quot;&gt;Bearstech&lt;/a&gt;, &lt;a href=&quot;http://www.irill.org/&quot;&gt;IRILL&lt;/a&gt;
et &lt;a href=&quot;http://www.evolix.fr/&quot;&gt;Evolix&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quelques photos supplémentaires sont disponibes sur la &lt;a href=&quot;https://wiki.debconf.org/wiki/Miniconf-Paris/2012#Pictures_of_the_event&quot;&gt;page wiki de
cette mini-debconf&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Thu, 17 Jan 2013 11:22:30 +0000</pubDate>
</item>
<item>
	<title>David Curé: Carte SDXC, exfat 0.9.8 et Debian Squeeze</title>
	<guid isPermaLink="false">http://www.cure.nom.fr/blog/archives/228-guid.html</guid>
	<link>http://www.cure.nom.fr/blog/archives/228-Carte-SDXC,-exfat-0.9.8-et-Debian-Squeeze.html</link>
	<description>&lt;p&gt;Ayant acquis une carte SDXC en pensant naïvement que c'était juste une simple évolution des SDHC, je fus une peu surpris en voyant que je n'arrivais pas à la lire. Après une recherche rapide, je vois que le format de la carte, exFAT, est une évolution du vénérable FAT et qu'il est incompatible.&lt;br /&gt;&lt;br /&gt;Je regarde alors ce qui est disponible pour Debian squeeze et installe à partir de squeeze-backport la version 0.9.7 de exfat-fuse et exfat-utils. Et pas de chance, cette version me renvoie un bug lors du montage de ma carte.&lt;br /&gt;&lt;br /&gt;Une nouvelle version 0.9.8 est disponible sur &lt;a href=&quot;http://code.google.com/p/exfat/&quot;&gt;le site de l'auteur&lt;/a&gt; mais aussi dans experimental. J'ai donc utilisé ces paquets pour en réaliser une version pour Debian squeeze amd64 et là je peux enfin lire ma carte SDXC &lt;img src=&quot;http://www.cure.nom.fr/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Les paquets exfat-fuse et exfat-utils en version 0.9.8 sont donc disponibles dans &lt;a href=&quot;http://www.cure.nom.fr/blog/archives/68-Depot-Debian.html&quot;&gt;mon dépôt&lt;/a&gt; pour squeeze amd64.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 13 Jan 2013 14:17:16 +0000</pubDate>
	<author>nospam@example.com (David)</author>
</item>
<item>
	<title>St&amp;eacute;phane Blondon: Déterminer quelle est la meilleure distribution grâce à Python et PIL</title>
	<guid isPermaLink="false">http://ascendances.wordpress.com/?p=930</guid>
	<link>http://ascendances.wordpress.com/2013/01/12/determiner-quelle-est-la-meilleure-distribution-grace-a-python-et-pil/</link>
	<description>&lt;p&gt;N’avez-vous jamais discuté des mérites de telle ou telle distribution Linux (ou BSD) avec d’autres personnes (chacun essayant de démontrer que celle qu’il utilise au quotidien est la meilleure) ? Grâce à cet article, vous n’aurez toujours pas La réponse mais vous aurez une réponse indiscutable : il s’agit de la jouer aux cartes. Les cartes sont créées avec &lt;code&gt;Python Imaging Library&lt;/code&gt;, une bibliothèque Python de manipulation d’image. L’article explique la façon de les réaliser.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/01/debian.png?w=497&quot; alt=&quot;Carte de jeu pour Debian&quot; class=&quot;aligncenter size-full wp-image-937&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Chaque carte possède un ensemble de caractéristiques, la plus forte remporte le pli. Ce principe de jeu existe depuis les années 70 (&lt;a href=&quot;http://en.wikipedia.org/wiki/Ace_Trumps&quot; title=&quot;Page wikipedia anglophone sur le jeu historique&quot;&gt;Ace_Trumps&lt;/a&gt;, Super Top Ass). L’ensemble des 26 cartes créées est visible &lt;a href=&quot;http://stephane.yaal.fr/cards/&quot; title=&quot;Voir les cartes&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;L’objectif de l’article est de montrer comment on peut concevoir la création de la carte, pas le détail des paramètres de chaque fonction. Pour cela, la documentation et de nombreuses explications foisonnent déjà sur le web. C’est pourquoi, par exemple, les calculs de dimensionnement ne seront pas expliqués.&lt;/p&gt;
&lt;h3&gt;Prérequis : installer PIL (ou Pillow)&lt;/h3&gt;
&lt;p&gt;Deux possibilités :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utiliser le système de paquet de votre distribution (python-imaging pour Debian) ;&lt;/li&gt;
&lt;li&gt;utiliser Pypi : PIL n’est pas disponible, il faut installer &lt;a href=&quot;http://pypi.python.org/pypi/Pillow&quot; title=&quot;documentation de Pillow sur PyPi&quot;&gt;Pillow&lt;/a&gt;. Cela ne change pas la façon d’utiliser la bibliothèque :
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;from PIL import Image, ImageDraw, ImageFont
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Image&lt;/code&gt; sert à instancier une image, &lt;code&gt;ImageDraw&lt;/code&gt; à la modifier, &lt;code&gt;ImageFont&lt;/code&gt; à choisir une police de caractère.&lt;/p&gt;
&lt;h3&gt;Créer une carte&lt;/h3&gt;
&lt;p&gt;La base consiste à instancier un objet image sur lequel les modifications vont être apportées. Une fois les modifications réalisées, on enregistre le résultat sur le disque :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;def draw_card(distrib):
    img = Image.open(BACKGROUND_PATH)
    #ajout des textes, images, etc.
    img.save(distrib[&quot;img_name&quot;] + &quot;.png&quot;)
&lt;/pre&gt;
&lt;p&gt;La carte est une superposition de couches, qui sont toutes fusionnées en une seule image. On a donc un fond sur lequel les autres éléments sont superposés.&lt;br /&gt;
Parmi les éléments remarquables :&lt;/p&gt;
&lt;h4&gt;Textes dans un cartouche&lt;/h4&gt;
&lt;p&gt;Le titre et les caractéristiques des distributions sont faits de la même manière. Il n’existe pas d’effet avec PIL pour dessiner automatiquement une bordure. Elle est réalisée en plaçant deux rectangles l’un sur l’autre, celui de dessous étant plus large et haut. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/01/carte_montage_titre.png?w=497&quot; alt=&quot;Montage du titre&quot; class=&quot;aligncenter size-full wp-image-953&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;def draw_title(img, title):
    &quot;&quot;&quot;
    pour dessiner le titre avec le fond et la bordure autour

    img est l'image PIL
    title est la chaine de caracteres a afficher (&quot;Distribution&quot;)
    &quot;&quot;&quot;
    draw = ImageDraw.Draw(img)
    draw_cartouche(draw, 25, 55)
    font = ImageFont.truetype(FONT_PATH, TITLE_FONT_SIZE)
    width, height = draw.textsize(title, font=font)
    x = center(width)
    draw.text((x, 29), title, font=font, fill=TEXT_COLOR)

def draw_cartouche(draw, upper_height, lower_height):
    &quot;&quot;&quot;pour dessiner les deux rectangles&quot;&quot;&quot;
    draw.rectangle(((MARGIN_LEFT, upper_height), (CARD_WIDTH - MARGIN_RIGHT, lower_height)),
                   fill=&quot;#8e6f32&quot;)
    BORDER = 5
    draw.rectangle(((MARGIN_LEFT + BORDER, upper_height + BORDER), (CARD_WIDTH - MARGIN_RIGHT - BORDER, lower_height - BORDER)),
                   fill=&quot;#e9b654&quot;)
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;draw.textsize()&lt;/code&gt; permet de connaître les dimensions que prendrait la chaîne passée en paramètre. Cela permet de faire un calcul (dans la fonction &lt;code&gt;center()&lt;/code&gt;, omise dans l’extrait ci-dessus) pour centrer le texte.&lt;/p&gt;
&lt;h4&gt;Le logo de la distribution&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://ascendances.files.wordpress.com/2013/01/carte_montage_image.png?w=497&quot; alt=&quot;Montage du logo&quot; class=&quot;aligncenter size-full wp-image-954&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L’affichage du logo suit la même logique en intercalant une image (nommée supernova.png) entre le fond et le logo de la distribution. Pour avoir un joli rendu , on décale simplement en hauteur l’image (&lt;code&gt;y&lt;/code&gt;) car les deux images n’ont pas la même taille.&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;def draw_logo(img, filename):
    &quot;&quot;&quot;on colle supernova
       puis le fichier correspondant au parametre filename&quot;&quot;&quot;
    image_path = SRC_IMGS_DIR + &quot;supernova.png&quot;
    nova = Image.open(image_path)
    nova_width, nova_height = nova.size
    x = center(nova_width)
    y = 60
    img.paste(nova.convert(&quot;RGBA&quot;),
              (x, y, x + nova_width, y + nova_height),
              mask=nova.convert('RGBA'))
    image_path = SRC_IMGS_DIR + filename + &quot;.png&quot;
    distro = Image.open(image_path)
    distro_width, distro_height = distro.size
    x = center(distro_width)
    y = 90
    img.paste(distro.convert(&quot;RGBA&quot;),
              (x, y, x + distro_width, y + distro_height),
              mask=distro.convert('RGBA'))
&lt;/pre&gt;
&lt;p&gt;L’exercice de factorisation de cette fonction est laissé aux lecteurs qui s’ennuient et qui ne sont pas partis faire autre chose (ce que je ne comprend pas d’ailleurs).&lt;/p&gt;
&lt;h4&gt;Le numéro de la carte&lt;/h4&gt;
&lt;p&gt;Le numéro de la carte en bas à gauche est affiché de biais. Si les images peuvent subir une rotation, les textes ne sont affichés qu’horizontalement. La solution est donc de coller le texte dans une image intermédiaire. Cette image subira une rotation puis sera collée sur l’image finale de la même manière que précédemment :&lt;/p&gt;
&lt;pre class=&quot;brush: python; title: ; notranslate&quot;&gt;def draw_card_index(img, number):
    &quot;&quot;&quot;pour dessiner 'number' de biais&quot;&quot;&quot;
    HEIGHT = WIDTH = 19
    num_img = Image.new(&quot;RGBA&quot;,
                        (WIDTH, HEIGHT),
                        (0, 0, 0, 0))
    num_draw = ImageDraw.Draw(num_img)
    font = ImageFont.truetype(SANS_PATH, TEXT_FONT_SIZE)
    num_draw.text((0, 0), number, font=font, fill=&quot;brown&quot;)
    n = num_img.rotate(-45)
    X, Y = 7, 378
    img.paste(n, (X, Y, X + WIDTH, Y + HEIGHT), mask=n)
&lt;/pre&gt;
&lt;p&gt;À noter que la rotation faite ici prend peu de précaution et les nombres à deux chiffres sont légèrement tronqués. Le paramètre &lt;code&gt;expand&lt;/code&gt; peut être ajouté à &lt;code&gt;rotate()&lt;/code&gt; pour éviter la perte, mais l’image est automatiquement agrandie.&lt;/p&gt;
&lt;h3&gt;Code source et ressources&lt;/h3&gt;
&lt;p&gt;La &lt;a href=&quot;http://www.pythonware.com/library/pil/handbook/index.htm&quot; title=&quot;Documentation de PIL sur le site de son éditeur&quot;&gt;documentation de PIL&lt;/a&gt; est précieuse.&lt;br /&gt;
Un &lt;a href=&quot;http://nadiana.com/pil-tutorial-basic-advanced-drawing&quot; title=&quot;un des nombreux tutoriels PIL existant sur le web (en anglais)&quot;&gt;tutoriel&lt;/a&gt; dont certains effets ont été réutilisés pour les cartes.&lt;/p&gt;
&lt;p&gt;Les données sur les cartes proviennent principalement de &lt;a href=&quot;http://distrowatch.com/&quot; title=&quot;Put the fun back into computing. Use Linux, BSD.&quot;&gt;Distrowatch&lt;/a&gt;. Les logos des distributions sont aussi ceux affichés sur Distrowatch. « first stable » représente la première version stable avec le nom actuel de la distribution ou ce qui pourrait être considéré comme équivalent. « based on » indique le nom de la distribution parente. La valeur « Indep. » signifie qu’elle n’est basée sur aucune autre distribution. Si elle est suivie d’une étoile, cela signifie qu’elle est maintenant indépendante mais a été basée sur une autre distribution par le passé.&lt;/p&gt;
&lt;p&gt;Le fond de carte et l’effet supernova ont été réalisés avec The Gimp.&lt;/p&gt;
&lt;p&gt;L’archive contenant le code source du script au cas où quelqu’un voudrait le réutiliser, ainsi que les logos et les cartes générées est &lt;a href=&quot;http://stephane.yaal.fr/cards/cards.tar.xz&quot; title=&quot;Archive cards.tar.xz&quot;&gt;fournie&lt;/a&gt; au format .tar.xz. Le code a été écrit dans un but de démo. Il est bien perfectible…&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ascendances.wordpress.com/930/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/ascendances.wordpress.com/930/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img width=&quot;1&quot; alt=&quot;&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ascendances.wordpress.com&amp;amp;blog=24442983&amp;amp;post=930&amp;amp;subd=ascendances&amp;amp;ref=&amp;amp;feed=1&quot; border=&quot;0&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Sat, 12 Jan 2013 09:39:02 +0000</pubDate>
</item>
<item>
	<title>David Mercereau: [rkhunter] Warning  The file properties have changed</title>
	<guid isPermaLink="false">http://www.mercereau.info/?p=466</guid>
	<link>http://www.mercereau.info/rkhunter-warning-the-file-properties-have-changed/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://rkhunter.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;Rkhunter&lt;/a&gt; sert à détecter les rootkits, portes dérobées et exploits. Il se base en partie sur les &lt;a href=&quot;http://fr.wikipedia.org/wiki/Inode&quot; target=&quot;_blank&quot;&gt;Inodes&lt;/a&gt; des exécutables. Après avoir fait des &lt;strong&gt;aptitude safe-upgrade&lt;/strong&gt;. vos exécutables changent…  Il faut donc en avertir Rkhunter…&lt;/p&gt;
&lt;p&gt;Après mon premier upgrade j’ai reçu le mail suivant :&lt;/p&gt;&lt;pre class=&quot;crayon-plain-tag&quot;&gt;Warning: The file properties have changed:
File: /bin/bash
Current inode: 21372580 Stored inode: 44044163

Warning: The file properties have changed:
File: /usr/sbin/cron
Current inode: 25046249    Stored inode: 44305975
[...]&lt;/pre&gt;&lt;p&gt;Il faut donc mettre la base Rkhunter à jour avec les nouveaux inodes.&lt;/p&gt;
&lt;h2&gt;Méthode manuel :&lt;/h2&gt;
&lt;p&gt;Lancer les commandes suivantes :&lt;/p&gt;&lt;pre class=&quot;crayon-plain-tag&quot;&gt;$ rkhunter --update
$ rkhunter --propupd&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Méthode automatique&lt;/h2&gt;
&lt;p&gt;Si comme moi, vous êtes un chouilla fainéant créer le script /etc/apt/apt.conf.d/98-rkhunter avec le contenu suivant :&lt;/p&gt;&lt;pre class=&quot;crayon-plain-tag&quot;&gt;$ cat /etc/apt/apt.conf.d/98-rkhunter 
DPkg::Post-Invoke {
    &quot;rkhunter --update;&quot;
    &quot;rkhunter --propupd&quot;;
};&lt;/pre&gt;&lt;p&gt;Ainsi la base Rkhunter sera remis à jour à chaque fois que vous utiliserez apt/aptitude.&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;Astuce trouvé sur le forum &lt;a href=&quot;http://www.debian-fr.org/warning-dans-le-daily-report-t37653.html#p379404&quot; target=&quot;_blank&quot;&gt;debian-fr.org&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 09 Jan 2013 06:00:00 +0000</pubDate>
</item>
<item>
	<title>David Mercereau: Script de sauvegarde Mysql par base “mysql_dump.sh”</title>
	<guid isPermaLink="false">http://www.mercereau.info/?p=470</guid>
	<link>http://www.mercereau.info/script-de-sauvegarde-mysql-par-base-mysql_dump-sh/</link>
	<description>&lt;p&gt;&lt;strong&gt;EDIT – 13/05/2013&lt;/strong&gt; : v0.3 du script avec prise en compte des &lt;a href=&quot;http://www.mercereau.info/script-de-sauvegarde-mysql-par-base-mysql_dump-sh/#comment-2010&quot;&gt;suggestions d’améliorations&lt;/a&gt; de &lt;a href=&quot;http://e-concept-applications.fr/&quot; target=&quot;_blank&quot;&gt;David M&lt;/a&gt; + Trap&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EDIT – 06/12/2012&lt;/strong&gt; : v0.2 du script avec prise en compte des commentaires de l’article&lt;/p&gt;
&lt;p&gt;Un énième script de sauvegarde à plat de bases Mysql sur internet. Celui-ci crée un fichier texte (&lt;em&gt;.sql&lt;/em&gt;) par base et compresse le tout ensuite.&lt;/p&gt;
&lt;p&gt;J’utilise ce script depuis plus de 3 ans, ça tourne bien et surtout ça dépanne bien !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt; : ce script est à coupler avec un système de sauvegarde complet et distant…&lt;/p&gt;
&lt;h2&gt;Préparation&lt;/h2&gt;
&lt;p&gt;Il faut créer un utilisateur Mysql (appelé &lt;em&gt;dump&lt;/em&gt;) avec des droits restreints en lecture sur toutes les bases :&lt;/p&gt;&lt;pre class=&quot;crayon-plain-tag&quot;&gt;$ mysql -u root -p -e &quot;CREATE USER 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE';&quot;
$ mysql -u root -p -e &quot;GRANT SELECT , SHOW DATABASES , LOCK TABLES , SHOW VIEW ON * . * TO 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;&quot;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Le script&lt;/h2&gt;
&lt;p&gt;Copier le contenu du script dans un fichier mysql_dump.sh puis faite un &lt;em&gt;chmod +x mysql_dump.sh&lt;/em&gt; afin de le rendre exécutable. Ajouter ensuite ce script dans vos &lt;strong&gt;tâches crons&lt;/strong&gt; pour qu’il s’exécute toutes les nuits (par exemple).&lt;/p&gt;
&lt;p&gt;Note : les remarques sont les bienvenus…&lt;/p&gt;&lt;pre class=&quot;crayon-plain-tag&quot;&gt;#!/bin/bash 

# Inspiré d'un script trouvé sur phpnews.fr (plus en ligne)
# Version 0.3 13/05/2013

# Script sous licence BEERWARE

set -eu

## Paramètres
USER='dump'
PASS='LEMOTDEPASSE' 
# Répertoire de stockage des sauvegardes
DATADIR=&quot;/var/backups/mysql&quot;
# Répertoire de travail (création/compression)
DATATMP=$DATADIR
# Nom du dump
DATANAME=&quot;dump_$(date +%d.%m.%y@%Hh%M)&quot;
# Compression
COMPRESSIONCMD=&quot;tar -czf&quot; 
COMPRESSIONEXT=&quot;.tar.gz&quot;
# Rétention / rotation des sauvegardes
RETENTION=30
# Exclure des bases
EXCLUSIONS='(information_schema|performance_schema)'
# Email pour les erreurs (0 pour désactiver
EMAIL=0
# Log d'erreur
exec 2&amp;gt; ${DATATMP}/error.log

## Début du script

ionice -c3 -p$$ &amp;amp;&amp;gt;/dev/null
renice -n 19 -p $$ &amp;amp;&amp;gt;/dev/null

function cleanup {
    if [ &quot;`stat --format %s ${DATATMP}/error.log`&quot; != &quot;0&quot; ] &amp;amp;&amp;amp; [ &quot;$EMAIL&quot; != &quot;0&quot; ] ; then
        cat ${DATATMP}/error.log | mail -s &quot;Backup MySQL $DATANAME - Log error&quot; ${EMAIL}
    fi
}
trap cleanup EXIT

# On crée sur le disque un répertoire temporaire
mkdir -p ${DATATMP}/${DATANAME}

# On place dans un tableau le nom de toutes les bases de données du serveur 
databases=&quot;$(mysql -u $USER -p$PASS -Bse 'show databases' | grep -v -E $EXCLUSIONS)&quot;

# Pour chacune des bases de données trouvées ... 
for database in ${databases[@]} 
do
    echo &quot;dump : $database&quot;
    mysqldump -u $USER -p$PASS --quick --add-locks --lock-tables --extended-insert $database  &amp;gt; ${DATATMP}/${DATANAME}/${database}.sql
done 

# On tar tous
cd ${DATATMP}
${COMPRESSIONCMD} ${DATANAME}${COMPRESSIONEXT} ${DATANAME}/
chmod 600 ${DATANAME}${COMPRESSIONEXT}

# On le déplace dans le répertoire
if [ &quot;$DATATMP&quot; != &quot;$DATADIR&quot; ] ; then
    mv ${DATANAME}${COMPRESSIONEXT} ${DATADIR}
fi

# Lien symbolique sur la dernier version
cd ${DATADIR}
set +eu
unlink last${COMPRESSIONEXT}
set -eu
ln ${DATANAME}${COMPRESSIONEXT} last${COMPRESSIONEXT}

# On supprime le répertoire temporaire 
rm -rf ${DATATMP}/${DATANAME}

echo &quot;Suppression des vieux backup : &quot;
find ${DATADIR} -name &quot;*${COMPRESSIONEXT}&quot; -mtime +${RETENTION} -print -exec rm {} \;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 05 Dec 2012 11:00:41 +0000</pubDate>
</item>
<item>
	<title>Benoit Peccatte: Signer ses logs</title>
	<guid isPermaLink="false">http://linux-attitude.fr/?p=1560</guid>
	<link>http://linux-attitude.fr/post/signer-ses-logs?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=signer-ses-logs</link>
	<description>&lt;p&gt;&lt;strong&gt;Niveau&lt;/strong&gt; : &lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;e&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Résumé&lt;/strong&gt; : syslog | openssl dgst&lt;/p&gt;


&lt;p&gt;Vous êtes vous déjà posé la question de la sécurisation de vos logs ? Sont-ils accessibles ? modifiables ? Peut-on détecter une falsification ?&lt;/p&gt;


&lt;p&gt;Comment faire pour que les logs ne soient pas altérés par une personne de peu de principes ? Je vous propose une solution qui n'est pas une solution miracle, mais c'est une solution qui sera une brique de plus dans votre défense en profondeur.&lt;/p&gt;


&lt;p&gt;Nous allons signer cryptographiquement les logs pour que tout altération devienne visible comme le nez au milieu de la figure.&lt;/p&gt;


&lt;h3&gt;Signature et validation des logs&lt;/h3&gt;


&lt;p&gt;Je vous au préparé pour cela deux programmes (lien en fin d'article), l'un pour signer les logs, l'autre pour les valider. Bien sûr, on ne va pas signer les fichiers de logs directement, ça laisserait tout le temps à un attaquant de les modifier avant la signature. Nous allons plutôt nous insérer dans le système syslog pour disposer des lignes au fur et à mesure. Mais nous n'allons pas non plus signer toutes les lignes, ce serait trop lourd. Nous allons plutôt signer des blocs de lignes, par exemple une signature toutes les 100 lignes, sans oublier un timeout pour éviter que 99 lignes restent en mémoire trop longtemps..&lt;/p&gt;


&lt;p&gt;Enfin une des fonctionnalités importante de ces outil est le chaînage. Le chaînage est le fait d'utiliser la signature du bloc précédent comme faisant partie du bloc suivant. Ceci garanti qu'il ne peut y avoir suppression ou ajout d'un bloc eu milieu d'une chaîne de blocs. Et tant qu'on y est nous pouvons aussi chaîner les fichiers pour obtenir le même résultat au niveau fichier.&lt;/p&gt;


&lt;p&gt;Au final toute modification, ajout ou suppression de ligne entraine l'invalidation de la signature. Toute modification, ajout ou suppression de bloc ou de fichier de log entraine l'invalidation de la signature.&lt;/p&gt;


&lt;p&gt;Voici donc un exemple d'usage sous forme de pipe :&lt;/p&gt;
&lt;pre&gt;$ openssl genrsa -out key.pem 1024 # il nous fait une clé de signature
$ echo &quot;Log important&quot; | signlogger -k key.pem -f logfile
&lt;/pre&gt;


&lt;p&gt;Notez que c'est utilisable avec syslog puisque celui-ci vous permet d'utiliser un pipe à la place d'un fichier. Je ne détaille pas cela ici car cela dépend du sylog que vous utilisez (syslogd, syslog-ng, rsyslog ...).&lt;/p&gt;


&lt;p&gt;Et pour vérifier que votre fichier de log n'a pas été modifié ?&lt;/p&gt;
&lt;pre&gt;$ openssl rsa -in key.pem -pubout &amp;gt; pubkey.pem # on récupère la version publique de la clé
$ signvalidator -k pubkey.pem -f logfile
&lt;/pre&gt;


&lt;p&gt;Si vous voulez utilisez cet outil avant logger ou avant l'envoi à un serveur centralisé, il faudra modifier signvalidator pour qu'il ignore les éléments ajoutés par syslog dans la vérification de la signature (date, pid, ...).&lt;/p&gt;


&lt;h3&gt;Usage&lt;/h3&gt;


&lt;p&gt;Dans la vraie vie quand on parle de sécurité, il faut se demander de quoi on veut se prémunir.&lt;/p&gt;


&lt;p&gt;Signer les logs a pour but d'éviter qu'on puisse modifier les logs a posteriori, puisqu'on n'empêche personne de transformer les logs avant qu'ils ne soient envoyés à syslog.
Mais toute personne qui a accès en écriture aux logs a posteriori, a les mêmes droits que le processus qui écrit les logs. Il a donc accès au système de signature.&lt;/p&gt;


&lt;p&gt;Mais alors qu'a-t-on gagné ?&lt;/p&gt;


&lt;p&gt;Tout d'abord, un difficulté légèrement accrue pour un attaquant, c'est pas grand chose, mais ça peut toujours servir. Ensuite, il nous suffit maintenant de séparer les droits du système de chiffrement de ceux du système d'écriture pour enfin détecter la modification par une personne possédant les droits d'écriture.&lt;/p&gt;


&lt;p&gt;Pour cela vous avez plusieurs moyens à votre disposition :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utiliser des pipes et des des utilisateurs séparés pour la signature et pour l'écriture&lt;/li&gt;
&lt;li&gt;utiliser l'attribut &lt;a href=&quot;http://linux-attitude.fr/post/gestion-des-attributs-d-un-fichier&quot;&gt;append only&lt;/a&gt; des fichiers de log pour interdire toute modification du fichier a posteriori (sauf par root qui peut retirer l'attribut)&lt;/li&gt;
&lt;li&gt;utiliser un medium read only pour écrire les logs&lt;/li&gt;
&lt;li&gt;utiliser un &lt;a href=&quot;https://fr.wikipedia.org/wiki/Hardware_Security_Module&quot; hreflang=&quot;fr&quot;&gt;HSM&lt;/a&gt; pour interdire la réutilisation de la clé&lt;/li&gt;
&lt;li&gt;déporter les logs vers un serveur syslog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou toute combinaison de ceux-ci.&lt;/p&gt;


&lt;p&gt;Vous remarquerez que ces techniques ont déjà pour but d'empêcher la modification des logs a posteriori. La signature n'apporte qu'une preuve supplémentaire.&lt;/p&gt;


&lt;p&gt;Mais prenez l'exemple du serveur syslog centralisé. On ne peut plus modifier les logs depuis le client, mais on le peut toujours depuis le serveur. La signature, si elle est effectuée côté client permet d'apporter une garantie supplémentaire puisqu'il faut cette fois un accès coté client ET côté serveur pour effecture la modification.&lt;/p&gt;


&lt;p&gt;Si on y ajoute l'append only, il faut être root, si on y ajoute le HSM, il faut disposer d'une carte à puce ou d'un mot de passe, si on y ajoute un media read only, il faut disposer d'un accès physique pour le modifier. Et chacun de ces éléments peut être géré par une personne différente pour rendre impossible toute modification par une unique personne malintentionnée.&lt;/p&gt;


&lt;p&gt;A vous de choisir votre niveau de sécurité !&lt;/p&gt;


&lt;h3&gt;En détail&lt;/h3&gt;


&lt;p&gt;Je vous colle ici l'usage complet des commandes (c'est du perl pour ceux qui veulent savoir)&lt;/p&gt;
&lt;pre&gt;$ signlogger --help
Usage:
    signlogger [options]

      Options
            --key|-k keyfile         Use private key for signing (PEM encoded)
            --file|-f file           Log to file instead of stdout
            --lastsig|-l line        Use line as last signature (used for chaining)
            --initfile|-i file       Use last line of file as last signature (used for chaining)
            --blocksize|-b lines     Insert signature each &quot;lines&quot; count (default 50)
            --timestamp|-t seconds   Insert signature each &quot;seconds&quot; seconds (default 30mn)
            --help|-h                This help

$ signvalidator --help
Usage:
    signvalidator [options]

      Options
            --key|-k keyfile        Use public key for validation (PEM encoded)
            --file|-f file          Read file instead of stdin
            --lastsig|-l line       Use line as last signature (used for chaining)
            --initfile|-i file      Use last line of file as last signature (used for chaining)
            --help|-h               This help

&lt;/pre&gt;


&lt;p&gt;Et pour les télécharger :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://linux-attitude.fr/public/Code/signlogger&quot;&gt;signlogger&lt;/a&gt; pour la signatrue des logs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://linux-attitude.fr/public/Code/signvalidator&quot;&gt;signvalidator&lt;/a&gt; pour la validation des logs&lt;/li&gt;
&lt;/ul&gt;
	Tags:&lt;a href=&quot;http://linux-attitude.fr/tag/logs&quot; rel=&quot;tag&quot; title=&quot;logs&quot;&gt;logs&lt;/a&gt;, &lt;a href=&quot;http://linux-attitude.fr/tag/systeme&quot; rel=&quot;tag&quot; title=&quot;Système&quot;&gt;Système&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;yarpp-related-rss&quot;&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Si vous avez aimé, il y a aussi : &lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://linux-attitude.fr/post/lire-les-logs-en-couleur&quot; rel=&quot;bookmark&quot; title=&quot;Lire les logs en couleur&quot;&gt;Lire les logs en couleur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://linux-attitude.fr/post/logs-locaux-et-distants&quot; rel=&quot;bookmark&quot; title=&quot;Logs locaux et distants&quot;&gt;Logs locaux et distants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://linux-attitude.fr/post/des-logs-des-logs-oui-mais-des-logs-amis&quot; rel=&quot;bookmark&quot; title=&quot;Des logs, des logs, oui mais des logs amis&quot;&gt;Des logs, des logs, oui mais des logs amis&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
	<pubDate>Fri, 02 Nov 2012 14:46:57 +0000</pubDate>
</item>
<item>
	<title>Benoit Peccatte: Log de l’historique</title>
	<guid isPermaLink="false">http://linux-attitude.fr/?p=1539</guid>
	<link>http://linux-attitude.fr/post/log-de-lhistorique?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=log-de-lhistorique</link>
	<description>&lt;p&gt;&lt;strong&gt;Niveau&lt;/strong&gt; : &lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;e&quot;&gt; &lt;/span&gt;&lt;span class=&quot;e&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Résumé&lt;/strong&gt; : trap DEBUG ; PROMPT_COMMAND&lt;/p&gt;


&lt;p&gt;Voici comment loguer l'activité d'un utilisateur.&lt;/p&gt;


&lt;p&gt;Mais tout d'abord, commençons par apprendre comment envoyer une ligne dans syslog. C'est simple, il suffit d'appeler logger avec les options qui vous intéressent (toutes optionnelles) et un message :&lt;/p&gt;
&lt;pre&gt;$ logger -i -p local5.info -t bash &quot;$(tty): Bonjour syslog&quot;
&lt;/pre&gt;


&lt;p&gt;On enregistre le pid (option -i) pour permettre la corrélation avec d'autres lignes de logs.&lt;/p&gt;


&lt;p&gt;On utilise la facility local5 qui est une sorte de tag utilisé par syslog pour savoir dans quelle catégorie mettre les logs. Les facilities servent essentiellement à faire des règles de tri des logs (par exemple il y a une facility authpriv pour tout ce qui est authentification). Il y a 8 facilities disponible pour les administrateur qui voudraient utiliser des valeurs qui ne sont pas standard. J'ai choisi local5.&lt;/p&gt;


&lt;p&gt;On utilise le niveau de log info qui est quelque chose de standard parmi les systèmes de logs en général et permet de filtrer facilement.&lt;/p&gt;


&lt;p&gt;On en profite pour loguer le tty en cours pour permettre une corrélation avec la commande &lt;strong&gt;last&lt;/strong&gt; (on ne sait jamais).&lt;/p&gt;


&lt;p&gt;Nous avons aussi besoin de la commande capable de nous donner la dernière commande tapée :&lt;/p&gt;
&lt;pre&gt;# lister la dernière commande sans son numéro
$ fc -ln -1
&lt;/pre&gt;


&lt;p&gt;Il n'y a plus qu'à mettre l'une de ces lignes dans le fichier &lt;strong&gt;/etc/profile&lt;/strong&gt; qui est lu par bash au lancement de sessions interactives :&lt;/p&gt;
&lt;pre&gt;# envoyer la commande dans syslog pour chaque commande AVANT exécution
$ trap 'logger -i -p local5.info -t bash &quot;$USER $(tty): $(fc -ln -1)&quot;' DEBUG

# envoyer la commande dans syslog pour chaque commande APRES exécution
$ PROMPT_COMMAND='logger -i -p local5.info -t bash &quot;$USER $(tty): $(history 1)&quot;'
# fc ne marche pas correctement dans PROMPT_COMMAND
&lt;/pre&gt;


&lt;h3&gt;Pourquoi&lt;/h3&gt;

&lt;p&gt;Enregistrer cette info peut être utile puisque les logs ne sont pas modifiables par un utilisateur simple. Et si vous avez un serveur syslog centralisé, ils ne le sont même pas par root depuis la machine d'origine.&lt;/p&gt;


&lt;p&gt;Mais ceci ne doit pas vous faire oublier eux choses.&lt;/p&gt;


&lt;p&gt;Tout d'abord le shell est un processus lancé par l'utilisateur, ce qui veut dire que l'enregistrement de cette information est nécessairement soumis à la bonne volonté de l'utilisateur. Un utilisateur peut supprimer le trap ou remplacer le PROMPT_COMMAND. Et supposons que vous trouviez un moyen pour l'en empêcher, l'utilisateur peut toujours tuer son propre shell, lui faire faire un exec vers un autre shell n'ayant pas de logs, tracer son shell pour modifier son activité etc.&lt;/p&gt;


&lt;p&gt;Ensuite il faut être bien conscient de ce qu'on enregistre. On enregistre l'activité interactive d'un shell. Ceci exclue les transferts de fichiers (scp,...), les exécutions automatiques (cron, ...), les exécutions via un code (vi script; ./script). Et si on regarde bien ce dernier cas, on comprend qu'à moins de loguer tous les appels systèmes avec tous leurs paramètres, il est impossible de garantir qu'un utilisateur malveillant n'a pas exécuté une commande.&lt;/p&gt;


&lt;p&gt;En conclusion ce système n'est pas là pour garantir l'enregistrement de toute activité d'un utilisateur plus ou moins malveillant, mais ça peut être une piste de recherche parmi d'autres lorsqu'un problème survient (qui a supprimé ma libc ?).&lt;/p&gt;
	Tags:&lt;a href=&quot;http://linux-attitude.fr/tag/commande&quot; rel=&quot;tag&quot; title=&quot;Commande&quot;&gt;Commande&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;yarpp-related-rss&quot;&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Si vous avez aimé, il y a aussi : &lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://linux-attitude.fr/post/lire-les-logs-en-couleur&quot; rel=&quot;bookmark&quot; title=&quot;Lire les logs en couleur&quot;&gt;Lire les logs en couleur&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
	<pubDate>Wed, 12 Sep 2012 19:03:13 +0000</pubDate>
</item>

</channel>
</rss>
