<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet-fr.debian.net/users/">
	<title>Planète des utilisateurs Debian</title>
	<link>http://planet-fr.debian.net/users/</link>
	<description>Planète des utilisateurs Debian - http://planet-fr.debian.net/users/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://carlchenet.com/?p=1839" />
			<rdf:li rdf:resource="https://raphaelhertzog.fr/?p=1838" />
			<rdf:li rdf:resource="http://carlchenet.com/?p=1816" />
			<rdf:li rdf:resource="http://tuxicoman.jesuislibre.net/?p=4154" />
			<rdf:li rdf:resource="http://tanguy.ortolo.eu/blog/article102/linkeo-menace-linuxfr" />
			<rdf:li rdf:resource="https://raphaelhertzog.fr/?p=1829" />
			<rdf:li rdf:resource="http://www.mon-code.net/feeds/rssTag/tip-pour-remplacer-du-texte-facilement-dans-vim-equivalent-au-ctrl-f" />
			<rdf:li rdf:resource="http://fgallaire.flext.net/?p=2475" />
			<rdf:li rdf:resource="http://www.inetdoc.net/archives/2013/05/21/nis_nfsv4_autofs5__38_dual_stack_ipv4__43_ipv6/index.html" />
			<rdf:li rdf:resource="http://tuxicoman.jesuislibre.net/?p=4127" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=1111" />
			<rdf:li rdf:resource="http://fgallaire.flext.net/?p=2456" />
			<rdf:li rdf:resource="http://www.luffy.cx/fr/blog/2013-gnucash-eurl.html" />
			<rdf:li rdf:resource="http://tanguy.ortolo.eu/blog/article101/precompresser-apache" />
			<rdf:li rdf:resource="http://www-public.telecom-sudparis.eu/~berger_o/weblog/?p=1050" />
			<rdf:li rdf:resource="http://www-public.telecom-sudparis.eu/~berger_o/weblog/?p=1046" />
			<rdf:li rdf:resource="http://france.debian.net/posts/2013/Annonce_SL_2013/" />
			<rdf:li rdf:resource="urn:md5:3f2400fe115a486da8a134e609ec6c72" />
			<rdf:li rdf:resource="http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html" />
			<rdf:li rdf:resource="http://www.mon-code.net/feeds/rssTag/configuration-de-bind9-avec-wildcard-et-apache2-avec-virtualhost-dynamique" />
			<rdf:li rdf:resource="http://www.luffy.cx/fr/blog/2013-lldpd-0.7.1.html" />
			<rdf:li rdf:resource="urn:md5:35a74e1f0d33a18df1a170bdb076c388" />
			<rdf:li rdf:resource="urn:md5:e473272383b19eb8f60ce8a398298ed6" />
			<rdf:li rdf:resource="http://www.cure.nom.fr/blog/archives/229-guid.html" />
			<rdf:li rdf:resource="http://france.debian.net/posts/2012/Mini_DebConf_Paris_2012/" />
			<rdf:li rdf:resource="http://www.cure.nom.fr/blog/archives/228-guid.html" />
			<rdf:li rdf:resource="http://ascendances.wordpress.com/?p=930" />
			<rdf:li rdf:resource="http://www.mercereau.info/?p=466" />
			<rdf:li rdf:resource="http://www.mercereau.info/?p=470" />
			<rdf:li rdf:resource="http://linux-attitude.fr/?p=1560" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://carlchenet.com/?p=1839">
	<title>Carl Chenet: Vrac de mini-messages n°5 : rhel7, PyPy, Prism, Debian Wheezy 7.1, docker, SSH, chromium</title>
	<link>http://carlchenet.com/2013/06/18/vrac-de-mini-messages-n5-rhel7-pypy-prism-debian-wheezy-7-1-docker-ssh-chromium/</link>
	<content:encoded>&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;Comme chaque semaine, voici les &lt;strong&gt;dents/tweets intéressants&lt;/strong&gt; de la semaine dernière que j’ai publiés &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&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;, revus et augmentés &lt;strong&gt;d’éventuels observations et commentaires&lt;/strong&gt; mûris au cours de la semaine passée. Au menu : contenu de RHEL7, la branche 3 de PyPy, question autour de Prism, sortie de Debian Wheezy 7.1, conteneurs Linux avec docker, sécurité autour des clés SSH et chromium 27&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;at &lt;a href=&quot;https://twitter.com/search?q=%23rhsummit&amp;amp;src=hash&quot;&gt;#rhsummit&lt;/a&gt; , rhel7 will come without mysql as it will be replaced with mariaDB; which is mysql api compatible. it will include mongodb too &lt;strong&gt;=&amp;gt;&lt;/strong&gt; un tweet très intéressant qui nous apprend que &lt;strong&gt;MariaDB&lt;/strong&gt;, le fork de &lt;a href=&quot;http://www.mysql.com&quot; target=&quot;_blank&quot; title=&quot;Site web officiel de MySQL&quot;&gt;MySQL &lt;/a&gt;lancé suite au rachat de MySQL par &lt;a href=&quot;http://www.oracle.com/fr/index.html&quot; target=&quot;_blank&quot; title=&quot;Site web officiel de Oracle&quot;&gt;Oracle&lt;/a&gt;, &lt;strong&gt;va remplacer&lt;/strong&gt; MySQL sur la nouvelle version de la distribution de &lt;a href=&quot;http://fr.redhat.com/&quot; target=&quot;_blank&quot; title=&quot;Site web officiel de Red Hat&quot;&gt;Red Hat&lt;/a&gt; RHEL 7. &lt;a href=&quot;http://www.mongodb.org/&quot; target=&quot;_blank&quot; title=&quot;Site web officiel de MongoDB&quot;&gt;MongoDB&lt;/a&gt;, la base de données non-sql orientée documents sera &lt;strong&gt;également incluse&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://carlchenet.files.wordpress.com/2013/06/red_hat_logo.png&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/06/red_hat_logo.png?w=150&amp;amp;h=48&quot; alt=&quot;Red_hat_logo&quot; width=&quot;150&quot; class=&quot;alignnone size-thumbnail wp-image-1841&quot; height=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/search?q=%23PyPy&amp;amp;src=hash&quot;&gt;#PyPy&lt;/a&gt; Py3k status #11 : très proche d’une première publication &lt;strong&gt;=&amp;gt;&lt;/strong&gt; PyPy est &lt;strong&gt;l’implémentation en pur Python d’un interpréteur Python&lt;/strong&gt;. La branche 2.x du projet vise à être entièrement compatible avec cpython 2.7. Le développement de la branche 3.x suit &lt;strong&gt;un rythme soutenu&lt;/strong&gt; et le blog de PyPy a publié une note très intéressante &lt;strong&gt;sur le travail en cours&lt;/strong&gt;. A lire pour tous les fans &lt;strong&gt;de Python pour Python&lt;/strong&gt; &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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://pypy.org/&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/06/pypy_logo.png?w=150&amp;amp;h=51&quot; alt=&quot;Pypy_logo&quot; width=&quot;150&quot; class=&quot;alignnone size-thumbnail wp-image-1842&quot; height=&quot;51&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prism : pour les particuliers : bigbrother mais pour les entreprises, espionnage industriel ? &lt;a href=&quot;https://twitter.com/search?q=%23guerre%C3%A9conomique&amp;amp;src=hash&quot;&gt;#guerreéconomique&lt;/a&gt; &lt;strong&gt;=&amp;gt;&lt;/strong&gt; un dent assez inhabituel de ma part, mais c’est une question que je trouve &lt;strong&gt;pertinente&lt;/strong&gt; dans le concert des protestations pro-liberté individuelle que nous avons entendu ces derniers jours. Quid de l’espionnage industriel que permet cette technologie ? Les Etats-Unis savent que leur avance technologique dans les nouvelles technologies est un atout de poids et un système comme Prism me paraît tout à fait approprié pour obtenir &lt;strong&gt;les informations nécessaires à sa conservation&lt;/strong&gt;. Pour les entreprises, plus que jamais, &lt;strong&gt;méfiance quant à vos données personnelles et stratégiques&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Première mise à jour mineure &lt;a href=&quot;https://twitter.com/search?q=%23Debian&amp;amp;src=hash&quot;&gt;#Debian&lt;/a&gt; &lt;a href=&quot;https://twitter.com/search?q=%23Wheezy&amp;amp;src=hash&quot;&gt;#Wheezy&lt;/a&gt; 7.1 normalement ce week-end &lt;a href=&quot;http://t.co/Yzm18IOgfo&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;http://ur1.ca/eb1kf&quot;&gt;http://ur1.ca/eb1kf &lt;/a&gt;&lt;strong&gt;=&amp;gt;&lt;/strong&gt; je l’avais annoncé &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 sur le blog de Carl Chenet&quot;&gt;dans ce billet&lt;/a&gt;, elle est arrivée &lt;strong&gt;à l’heure&lt;/strong&gt;. Dans le cadre de migrations complexes ou de parcs de serveurs importants, n’hésitez pas &lt;a href=&quot;http://carlchenet.com/about/&quot; target=&quot;_blank&quot; title=&quot;Offre de services de Carl Chenet&quot;&gt;à recourir à un professionnel&lt;/a&gt; pour mettre à jour &lt;strong&gt;vos parcs de serveurs Debian&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;width: 160px;&quot; class=&quot;wp-caption alignnone&quot; id=&quot;attachment_587&quot;&gt;&lt;a href=&quot;http://www.debian.org/releases/wheezy&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2010/09/toy-story-wheezy-001.jpg?w=150&amp;amp;h=112&quot; alt=&quot;Wheezy&quot; width=&quot;150&quot; class=&quot;size-thumbnail wp-image-587 &quot; height=&quot;112&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Wheezy&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;outil pour gérer facilement ses conteneurs &lt;a href=&quot;https://twitter.com/search?q=%23linux&amp;amp;src=hash&quot;&gt;#linux&lt;/a&gt; : docker &lt;a href=&quot;http://t.co/mni11nY9bi&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;http://www.docker.io/&quot;&gt;http://www.docker.io/ &lt;/a&gt; lu sur &lt;a href=&quot;https://twitter.com/GCUSquad&quot;&gt;@GCUSquad&lt;/a&gt; &lt;strong&gt;=&amp;gt;&lt;/strong&gt; on parle beaucoup de &lt;strong&gt;docker&lt;/strong&gt; en ce moment, application pour gérer vos conteneurs &lt;a href=&quot;http://www.linux.org/&quot; target=&quot;_blank&quot; title=&quot;Site web officiel du projet Linux&quot;&gt;Linux&lt;/a&gt;. Il faut au minimum regarder &lt;a href=&quot;http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=wW9CAH9nSLs#!&quot; target=&quot;_blank&quot; title=&quot;Vidéo de présentation de docker sur le site web officiel du projet docker.io&quot;&gt;la vidéo du site officiel&lt;/a&gt; pour bien comprendre ce qu’apporte docker.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://docker.io&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/06/docker_logo.png?w=150&amp;amp;h=54&quot; alt=&quot;docker_logo&quot; width=&quot;150&quot; class=&quot;alignnone size-thumbnail wp-image-1843&quot; height=&quot;54&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;améliorer la sécurité de vos clés SSH privées &lt;a href=&quot;http://t.co/XXD31stzwB&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;http://ur1.ca/e1de9&quot;&gt;http://ur1.ca/e1de9 &lt;/a&gt; lu sur &lt;a href=&quot;https://twitter.com/GCUSquad&quot;&gt;@GCUSquad&lt;/a&gt; &lt;strong&gt;=&amp;gt;&lt;/strong&gt; un petit plus &lt;strong&gt;simple à mettre en place&lt;/strong&gt; et qui apporte un gain réel au niveau sécurité. J’aime &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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://www.openssh.org&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/06/openssh_logo.jpg?w=150&amp;amp;h=49&quot; alt=&quot;openssh_logo&quot; width=&quot;150&quot; class=&quot;alignnone size-thumbnail wp-image-1844&quot; height=&quot;49&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paquet &lt;a href=&quot;https://twitter.com/search?q=%23debian&amp;amp;src=hash&quot;&gt;#debian&lt;/a&gt; chromium-browser 27 maintenant dans &lt;a href=&quot;https://twitter.com/search?q=%23debian&amp;amp;src=hash&quot;&gt;#debian&lt;/a&gt; testing (&lt;a href=&quot;https://twitter.com/search?q=%23Jessie&amp;amp;src=hash&quot;&gt;#Jessie&lt;/a&gt;) &lt;a href=&quot;http://t.co/wczqXeRUTB&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;http://b1t.it/doWB&quot;&gt;http://b1t.it/doWB &lt;/a&gt;&lt;strong&gt;=&amp;gt;&lt;/strong&gt; Marre &lt;strong&gt;des sites à la noix&lt;/strong&gt; qui vous indiquent que vous n’employez pas la dernière version de &lt;a href=&quot;http://www.google.fr/intl/fr/chrome/browser/&quot; target=&quot;_blank&quot; title=&quot;Google Chrome&quot;&gt;Chrome &lt;/a&gt;? Elle est &lt;strong&gt;désormais disponible&lt;/strong&gt; pour Debian Jessie.  A installer &lt;strong&gt;sans attendre&lt;/strong&gt; !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://www.chromium.org/&quot;&gt;&lt;img src=&quot;http://carlchenet.files.wordpress.com/2013/06/chromium_logo.png?w=500&quot; alt=&quot;chromium_logo&quot; class=&quot;alignnone size-full wp-image-1845&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Et vous ?&lt;/strong&gt; Que pensez-vous &lt;strong&gt;des technologies&lt;/strong&gt; et articles abordés ci-dessus ? N’hésitez pas à réagir dans les commentaires. Et &lt;strong&gt;à la semaine prochaine&lt;/strong&gt; pour la suite de cette série d’articles.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/carlchenet.wordpress.com/1839/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/carlchenet.wordpress.com/1839/&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=1839&amp;amp;subd=carlchenet&amp;amp;ref=&amp;amp;feed=1&quot; border=&quot;0&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-17T22:01:20+00:00</dc:date>
	<dc:creator>Carl Chenet</dc:creator>
</item>
<item rdf:about="https://raphaelhertzog.fr/?p=1838">
	<title>Rapha&amp;#235;l Hertzog: Mes activités libres en mai 2013</title>
	<link>http://raphaelhertzog.fr/2013/06/17/mes-activites-libres-en-mai-2013/</link>
	<content:encoded>&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; (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;Cahier de l’Admin Debian&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Traduction espagnole complète&lt;/strong&gt;. L’équipe espagnole a fini la traduction du livre. Le processus de compilation PDF n’était pas encore prêt pour les traductions, ce que j’ai du corriger. J’ai également amélioré en parallèle le script de compilation Mobipocket, afin de pouvoir utiliser KindleGen d’Amazon lorsque disponible (car Amazon requiert maintenant que cet outil soit utilisé pour générer les fichiers Mobipocket destinés à être distribués sur leur plateforme).&lt;/p&gt;
&lt;p&gt;Une fois ces problèmes corrigés, j’ai &lt;a href=&quot;http://debian-handbook.info/2013/the-debian-administrators-handbook-is-available-in-spanish/&quot;&gt;fait la promotion de cette traduction, qui est la première à avoir été menée à terme&lt;/a&gt;. Les traducteurs méritent bien toutes nos félicitations !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Projets pour la traduction française&lt;/strong&gt;. Vous savez que le livre &lt;em&gt;Debian Administrator’s Handbook&lt;/em&gt; est venu au monde en tant que traduction anglaise du &lt;em&gt;Cahier de l’Admin Debian&lt;/em&gt; (publié par Eyrolles). Ce qui signifie que nous avons actuellement une traduction libre d’un livre propriétaire. Ce qui est une situation plutôt étrange, à laquelle je souhaite remédier depuis le début.&lt;br /&gt;
J’ai donc discuté avec Eyrolles pour trouver un compromis permettant de publier le livre original sous les mêmes licences que celles utilisées pour le livre anglais…et le résultat n’est autre que le lancement d’une nouvelle campagne de financement communautaire, visant à libérer le livre original et le faire devenir une traduction du &lt;em&gt;Debian Administrator’s Handbook&lt;/em&gt; à part entière.&lt;/p&gt;
&lt;p&gt;[&lt;strong&gt;Mise à jour du 17 juin 2013&lt;/strong&gt;: en moins d'une semaine, la campagne a été couronnée de succès, puisque l'objectif de 15 KEUR pour la libération a été atteint. De nouveaux objectifs ont été fixés et atteints entre temps (donnant droit à des livres électroniques supplémentaires). Il reste un dernier objectif à 25 KEUR pour que 15% des bénéfices soient reversés à Debian.]&lt;/p&gt;
&lt;p&gt;Apprenez en plus et apportez-nous votre soutien sur &lt;a href=&quot;http://www.ulule.com/liberation-cahier-admin-debian/&quot;&gt;la page Ulule du projet&lt;/a&gt; (Ulule étant l’équivalent de Kickstarter pour les personnes ne résidant pas aux États-Unis). &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ulule.com/liberate-cahier-admin-debian/&quot;&gt;&lt;img src=&quot;http://raphaelhertzog.fr/files/2013/05/liberation-cads-300px.png&quot; alt=&quot;Liberate the Debian Handbook&quot; width=&quot;300&quot; class=&quot;aligncenter&quot; height=&quot;286&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Debian France&lt;/h3&gt;
&lt;p&gt;J’ai mis à jour notre application de gestion des adhésions de nos membres vers la version 0.7.4.1, qui comporte de nombreuses corrections de bogues. Mais le vrai événement ce mois-ci fut la tenue du salon “Solutions Libres et Opensource” à Paris où Tanguy Ortolo, moi-même et d’autres volontaires (Cédric Boutillier, Arnaud G., et d’autres dont j’ai oublié le nom, merci à eux !) avons tenu le stand Debian deux jours consécutifs (28-29 mai). Pour une fois nous avions un tas de goodies à vendre (buffs, tapis de souris, polos, stickers, etc.), et notre stand fut particulièrement fréquenté.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://raphaelhertzog.com/files/2013/06/stand-debian-small.jpg&quot;&gt;&lt;img src=&quot;http://raphaelhertzog.com/files/2013/06/stand-debian-small-300x225.jpg&quot; alt=&quot;The Debian Booth (Tanguy on the left, Raphaël on the right)&quot; width=&quot;300&quot; class=&quot;aligncenter size-medium wp-image-2930&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Google’s Summer of Code&lt;/h3&gt;
&lt;p&gt;J’ai été submergé le mois dernier par des demandes d’étudiants intéressés par la « réécriture du système de suivi des paquets », pour laquelle je me suis proposé d’être le tuteur, dans le cadre du &lt;em&gt;Google’s Summer of Code&lt;/em&gt;. J’ai retenu au final six candidatures intéressantes, que Stefano et moi avons étudiés. C’est &lt;a href=&quot;http://wiki.debian.org/SummerOfCode2013/StudentApplications/MarkoLalic&quot;&gt;Marko Lalic&lt;/a&gt; qui a été retenu.&lt;/p&gt;
&lt;p&gt;La période de « tissage de liens » communautaires (&lt;em&gt;« Community Bonding Period »&lt;/em&gt;) commence tout juste et nous sommes en train de détailler plus précisément la manière dont nous allons organiser le travail. Nous allons essayer le canal IRC #debian-qa sur OFTC pour les questions et réponses, ainsi que les revues hebdomadaires.&lt;/p&gt;
&lt;h3&gt;Travaux d’empaquetages divers&lt;/h3&gt;
&lt;p&gt;J’ai empaqueté zim 0.60 et, avec la publication de &lt;em&gt;Wheezy&lt;/em&gt;, j’ai envoyé vers &lt;em&gt;unstable&lt;/em&gt; tous les paquets que j’avais préparé dans &lt;em&gt;experimental&lt;/em&gt; (cpputest, publican). J’ai également parrainé l’envoi de libmicrohttpd en version 0.9.27-1.&lt;/p&gt;
&lt;p&gt;J’ai créé quelques rapports de bogues que j’ai rencontrés avec la prochaine version de dpkg 1.17.0 (n°709172 et n°709009). Dans les deux cas, le paquet utilisait un mauvais chemin d’accès (codé en dur) vers dpkg-divert (le binaire a été déplacé de /usr/sbin/ vers /usr/bin/ il y a un bout de temps, et le lien symbolique assurant la rétrocompatibilité n’est plus maintenu à présent). Je me suis également occupé du bogue n°709064, où l’utilisateur a rapporté des problèmes de montée de version liés à multiarch.&lt;/p&gt;
&lt;p&gt;J’ai également créé un autre rapport de bogue directement en amont &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=966143&quot;&gt;concernant publican&lt;/a&gt;, afin de demander qu’un moyen soit trouvé pour éviter la duplication d’autant de fichiers (je l’ai créé comme réponse au bogue Debian n°708705 que j’ai reçu).&lt;/p&gt;
&lt;h3&gt;Travail sur Kali&lt;/h3&gt;
&lt;p&gt;J’ai du mettre à jour OpenVAS pour Kali, mais la compilation a échoué dans un environnement Debian 7 pour certaines parties. J’ai diagnostiqué le problème et soumis un &lt;a href=&quot;https://wald.intevation.org/tracker/index.php?func=detail&amp;amp;aid=6426&amp;amp;group_id=29&amp;amp;atid=220&quot;&gt;patch directement en amont&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J’ai également été en contact avec le mainteneur Debian d’OpenVAS car je souhaitais contribuer en retour au paquet Debian, mais des problèmes de temps ont renvoyé ça à un peu plus tard.&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/06/04/my-free-software-activities-in-may-2013/&quot;&gt;My Free Software Activities in May 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/06/17/mes-activites-libres-en-mai-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;&lt;img width=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/RaphaelHertzogFr/~4/bpozidntWg0&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-17T14:13:23+00:00</dc:date>
	<dc:creator>Raphaël Hertzog</dc:creator>
</item>
<item rdf:about="http://carlchenet.com/?p=1816">
	<title>Carl Chenet: Première mise à jour mineure Debian Wheezy 7.1 normalement ce week-end</title>
	<link>http://carlchenet.com/2013/06/13/premiere-mise-a-jour-mineure-debian-wheezy-7-1-normalement-ce-week-end/</link>
	<content:encoded>&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;La première &lt;strong&gt;mise à jour mineure&lt;/strong&gt; de &lt;a href=&quot;http://carlchenet.com/2013/05/05/debian-wheezy-7-0-publiee-en-version-stable/&quot; title=&quot;Debian Wheezy 7.&quot;&gt;Debian Wheezy&lt;/a&gt;, à savoir &lt;strong&gt;la version 7.1&lt;/strong&gt; est normalement prévue &lt;strong&gt;pour ce week-end&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Au menu&lt;/strong&gt; des mises à jour pour (sauf modifications de dernière minute) :&lt;/p&gt;
&lt;p&gt;Niveau &lt;strong&gt;noyaux&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Noyau Linux 3.2.46&lt;/li&gt;
&lt;li&gt;Noyau kfreebsd-9 9.0-10&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Niveau &lt;strong&gt;serveurs&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL 5.5.31&lt;/li&gt;
&lt;li&gt;modsecurity-apache 2.6.6.6&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Niveau &lt;strong&gt;langages&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PHP 5.4.4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Niveau &lt;strong&gt;bureau utilisateur&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xorg 1.7.7&lt;/li&gt;
&lt;li&gt;Chromium-browser 27&lt;/li&gt;
&lt;li&gt;Iceweasel 17 ESR&lt;/li&gt;
&lt;li&gt;Libreoffice 3.5.4&lt;/li&gt;
&lt;li&gt;nvidia-graphics-drivers&lt;/li&gt;
&lt;li&gt;subversion 1.6.17&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Outils &lt;strong&gt;Debian&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apt 0.9.7.9&lt;/li&gt;
&lt;li&gt;debootstrap 1.0.48&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et bien d’autres paquets encore ! Le contenu du dépôt &lt;a href=&quot;http://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/&quot; target=&quot;_blank&quot; title=&quot;le dépôt Debian wheezy-proposed-updates&quot;&gt;stable-proposed-updates&lt;/a&gt; appelé à être poussé dans le dépôt &lt;a href=&quot;http://ftp.fr.debian.org/debian/dists/wheezy-updates/&quot; target=&quot;_blank&quot; title=&quot;Dépôt officiel wheezy-proposed-updates&quot;&gt;wheezy-updates&lt;/a&gt; &lt;strong&gt;lors de la publication de la mise à jour&lt;/strong&gt; est disponible sur &lt;a href=&quot;http://release.debian.org/proposed-updates/stable.html&quot; target=&quot;_blank&quot; title=&quot;la page des paquets dans le dépôt Debian proposed-updates&quot;&gt;la page des paquets dans proposed-updates&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les mises à jour mineures jalonneront la vie de Debian Wheezy, mais la première est particulièrement importante pour &lt;strong&gt;corriger les changements advenus rapidement&lt;/strong&gt; après la publication de Wheezy 7.0. C’est aussi pour moi &lt;strong&gt;un signal fort de mise à jour&lt;/strong&gt; car, rappelons-le, &lt;a href=&quot;http://www.debian.org/releases/squeeze&quot; target=&quot;_blank&quot; title=&quot;Debian Squeeze&quot;&gt;la vieille stable Squeeze&lt;/a&gt; ne sera encore maintenue &lt;strong&gt;qu’un an&lt;/strong&gt; à partir de la date de sortie de Debian Wheezy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Et vous ?&lt;/strong&gt; Qu’attendez-vous &lt;strong&gt;de cette mise à jour&lt;/strong&gt; et que pensez-vous de &lt;strong&gt;ce fonctionnement&lt;/strong&gt; ? N’hésitez pas à réagir dans les commentaires.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/carlchenet.wordpress.com/1816/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/carlchenet.wordpress.com/1816/&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=1816&amp;amp;subd=carlchenet&amp;amp;ref=&amp;amp;feed=1&quot; border=&quot;0&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-12T22:01:00+00:00</dc:date>
	<dc:creator>Carl Chenet</dc:creator>
</item>
<item rdf:about="http://tuxicoman.jesuislibre.net/?p=4154">
	<title>Tuxicoman: Debian Wheezy passe à Iceweasel 17 !</title>
	<link>http://tuxicoman.jesuislibre.net/2013/06/4154.html</link>
	<content:encoded>&lt;p&gt;Debian vient d'&lt;a href=&quot;http://lists.debian.org/debian-security-announce/2013/msg00107.html&quot;&gt;annoncer un changement dans politique de mise à jour de sécurité des logiciels Mozilla (Iceweasel, Icedove et Iceape)&lt;/a&gt;. Désormais, les corrections de trous de sécurité ne donneront plus lieu à un backport vers la version stable de Debian, mais à une mise à jour de la version stable de Debian vers la plus vieille version &lt;a href=&quot;http://www.mozilla.org/en-US/firefox/organizations/faq/&quot;&gt;ESR (Extended Support Release)&lt;/a&gt; maintenue par Mozilla qui contient la correction.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mozorg.cdn.mozilla.net/media/img/firefox/organizations/release-overview.png&quot; alt=&quot;&quot; width=&quot;725&quot; class=&quot;aligncenter&quot; height=&quot;400&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cette décision est due à un manque de ressources de Debian pour porter seule les corrections de sécurité vers Iceweasel 10.&lt;/p&gt;
&lt;p&gt;Donc, à ce jour, les trous de sécurité dans Wheezy concernant Iceweasel 10 vont donner lieu à une mise à jour vers Iceweasel 17 et Iceweasel 24 avant la fin du cycle de vie de Wheezy. Hourra !&lt;/p&gt;
&lt;p&gt;Je pense que ça va rendre heureux ceux qui veulent profiter des dernières avancées des standards du web sans s'embêter avec un dépôt tiers comme &lt;a href=&quot;http://mozilla.debian.net/&quot;&gt;http://mozilla.debian.net/&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-08T09:55:36+00:00</dc:date>
	<dc:creator>Tuxicoman</dc:creator>
</item>
<item rdf:about="http://tanguy.ortolo.eu/blog/article102/linkeo-menace-linuxfr">
	<title>Tanguy Ortolo: Linkeo menace LinuxFr par avocat interposé</title>
	<link>http://tanguy.ortolo.eu/blog/article102/linkeo-menace-linuxfr</link>
	<content:encoded>&lt;p&gt;Avis à toute la population : la société Linkeo vient de
&lt;a href=&quot;https://linuxfr.org/news/premiere-mise-en-demeure-pour-l-association-linuxfr&quot; title=&quot;L'affaire sur LinuxFr&quot;&gt;menacer et de tenter d'extorquer un dédommagement à LinuxFr&lt;/a&gt;
pour un commentaire envoyé par un visiteur suite à une annonce d'offre d'emploi.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://linuxfr.org/&quot; title=&quot;LinuxFrenchPage&quot;&gt;&lt;img src=&quot;https://linuxfr.org/images/logos/top2_.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Linkeo, au cas où vous passeriez par ici :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Les menaces, c'est mal. Le chantage, c'est mal. L'extorsion, c'est mal.&lt;/li&gt;
&lt;li&gt;Entre gens civilisés, on peut envisager de régler ses comptes directement et avec
courtoisie.&lt;/li&gt;
&lt;li&gt;LinuxFr est un site &lt;em&gt;Web&lt;/em&gt;, pas un « site Internet », nom d'un yak !&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fr.wikipedia.org/wiki/Man_%28Unix%29&quot; title=&quot;Définition de la commande man sur Wikipédia, au cas où vous ne la connaîtriez pas&quot;&gt;man&lt;/a&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Effet_Streisand&quot; title=&quot;Définition de l'effet Streisand sur Wikipédia&quot;&gt;Streisand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changez d'avocat. Le votre n'est pas capable de chercher les mentions légales sur un site
Web et ne respecte visiblement pas les
&lt;a href=&quot;http://www.maitre-eolas.fr/post/2008/03/25/909-que-faire-quand-on-recoit-un-courrier-d-avocat&quot; title=&quot;Un article de Maître Eolas, cherchez le mot « déontologie »&quot;&gt;règles de déontologies&lt;/a&gt;
de sa profession.&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2013-05-31T11:48:00+00:00</dc:date>
	<dc:creator>Tanguy</dc:creator>
</item>
<item rdf:about="https://raphaelhertzog.fr/?p=1829">
	<title>Rapha&amp;#235;l Hertzog: Libérons le Cahier de l’Admin Debian</title>
	<link>http://raphaelhertzog.fr/2013/05/28/liberons-le-cahier-admin-debian/</link>
	<content:encoded>&lt;p&gt;Rappelez-vous, il y a 18 mois je lançais le &lt;a href=&quot;http://debian-handbook.info/liberation/&quot;&gt;projet de traduction du Cahier de l’Admin Debian en anglais&lt;/a&gt;, et nous avions fait d’une pierre deux coups puisque, grâce à votre soutien, le livre traduit a été placé sous licence libre.&lt;/p&gt;
&lt;p&gt;J’ai toujours été très fier de ce que nous avons déjà accompli mais je ne pouvais m’empêcher d’avoir un sentiment de projet inachevé… En effet, le cahier de l’admin Debian original — en Français — restait sous licence propriétaire selon les termes de mon contrat original avec les éditions Eyrolles.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://fr.ulule.com/liberation-cahier-admin-debian/&quot;&gt;&lt;img src=&quot;http://raphaelhertzog.fr/files/2013/05/liberation-cads-300px.png&quot; alt=&quot;Campagne de libération du livre&quot; width=&quot;300&quot; class=&quot;alignright size-full wp-image-1830&quot; height=&quot;286&quot; /&gt;&lt;/a&gt;Je savais aussi que pour convaincre mon éditeur de changer d’approche, il me fallait des éléments pour leur montrer qu’une licence libre pouvait être bénéfique à la diffusion du livre (et donc à ses ventes).&lt;/p&gt;
&lt;p&gt;Il y quelques mois j’ai donc repris contact avec mon éditrice (coucou Muriel !), sachant parfaitement que l’éventuelle publication d’une nouvelle édition pour Debian 7.0 était l’occasion rêvée de changer les termes du contrat. Avec mon retour d’expérience sur le livre en anglais, et la morosité des ventes du livre actuel, j’ai donc pu convaincre Eyrolles de tenter l’expérience d’une publication sous licence libre.&lt;/p&gt;
&lt;p&gt;J’ai donc travaillé avec Eyrolles pour mettre en place un projet permettant &lt;strong&gt;la libération du livre actuel, sa mise à jour pour Debian 7.0, et la mise en place d’une nouvelle édition en librairie&lt;/strong&gt; (c’est important de continuer d’exister ailleurs que sur Internet !).&lt;/p&gt;
&lt;p&gt;En fin de compte, ce projet prend désormais la forme d’une campagne de financement sur Ulule.com où vous pouvez obtenir diverses contreparties comme le livre actuel (électronique et papier) ainsi qu’un superbe autocollant Debian détouré, en fonction du montant de votre soutien.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rendez-vous sur &lt;a href=&quot;http://fr.ulule.com/liberation-cahier-admin-debian/&quot;&gt;fr.ulule.com/liberation-cahier-admin-debian/&lt;/a&gt; pour enregistrer votre soutien&lt;/strong&gt; et découvrir les récompenses proposées !&lt;/p&gt;
&lt;p&gt;Nous avons jusqu’au 24 juin pour atteindre l’objectif des 15 000 €, faute de quoi le projet entier tombe à l’eau. Ce montant peut paraître élevé mais une fois que vous avez retiré la TVA, les frais Ulule, le coût des récompenses et de leur expédition, il en reste bien moins. Et ce reste sera partagé également entre les auteurs et Eyrolles, pour financer la mise à jour du livre et la publication d’une nouvelle édition.&lt;/p&gt;
&lt;p&gt;Si vous pensez comme moi qu’il est important d’aller au bout de cette démarche de libération, &lt;a href=&quot;http://fr.ulule.com/liberation-cahier-admin-debian/&quot;&gt;cliquez-ici pour aller soutenir ce projet&lt;/a&gt; et partagez cet article avec tous vos contacts susceptibles de soutenir ce projet. D’avance, merci !&lt;/p&gt;
&lt;p style=&quot;font-size: smaller;&quot;&gt;&lt;a href=&quot;http://raphaelhertzog.fr/2013/05/28/liberons-le-cahier-admin-debian/#comments&quot;&gt;2 commentaires&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;&lt;img width=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/RaphaelHertzogFr/~4/gCXYwYsCKu8&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-28T14:48:27+00:00</dc:date>
	<dc:creator>Raphaël Hertzog</dc:creator>
</item>
<item rdf:about="http://www.mon-code.net/feeds/rssTag/tip-pour-remplacer-du-texte-facilement-dans-vim-equivalent-au-ctrl-f">
	<title>Ulrich L.: Tip pour remplacer du texte facilement dans VIM équivalent au Ctrl + F</title>
	<link>http://www.mon-code.net/article/67/tip-pour-remplacer-du-texte-facilement-dans-vim-equivalent-au-ctrl-f</link>
	<content:encoded>Vim est un super éditeur sur Linux, mais malheureusement les raccourcis clavier habituel tel que Crtl + F pour remplacer du texte n'existe pas. Dans ce tip j'explique la commande permettant de faire un remplacement de texte dans VIM.</content:encoded>
	<dc:date>2013-05-27T22:00:00+00:00</dc:date>
</item>
<item rdf:about="http://fgallaire.flext.net/?p=2475">
	<title>Florent Gallaire: [MàJ] Lua et Erlang</title>
	<link>http://fgallaire.flext.net/maj-lua-erlang/</link>
	<content:encoded>&lt;p&gt;Je viens de légèrement mettre à jour deux articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dans &lt;a href=&quot;http://fgallaire.flext.net/comparaison-langage-balisage-markup-lightweight-leger-txt2tags-pandoc-docutils-asciidoc-deplate-stx2any-aft-markdown-textile/&quot; target=&quot;_blank&quot;&gt;Comparaison des langages de balisage (markup) léger (lightweight) : Txt2tags, Pandoc, Docutils, AsciiDoc, Deplate, Stx2any, AFT, Markdown et Textile&lt;/a&gt;, ajout dans le tableau comparatif des logiciels de balisage léger de &lt;a href=&quot;http://jgm.github.io/lunamark/doc/&quot; target=&quot;_blank&quot;&gt;Lunamark&lt;/a&gt; en &lt;a href=&quot;http://www.lua.org&quot; target=&quot;_blank&quot;&gt;Lua&lt;/a&gt; et de &lt;a href=&quot;https://github.com/evanmiller/jerome&quot; target=&quot;_blank&quot;&gt;Jerome&lt;/a&gt; en &lt;a href=&quot;http://www.erlang.org&quot; target=&quot;_blank&quot;&gt;Erlang&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Dans &lt;a href=&quot;http://fgallaire.flext.net/perl-6-10-ans-deja/&quot; target=&quot;_blank&quot;&gt;Perl 6, 10 ans déjà…&lt;/a&gt;, ajout des machines virtuelles &lt;a href=&quot;http://www.lua.org/doc/jucs05.pdf&quot; target=&quot;_blank&quot;&gt;Lua 5&lt;/a&gt; et Erlang &lt;a href=&quot;http://www.cs-lab.org/historical_beam_instruction_set.html&quot; target=&quot;_blank&quot;&gt;BEAM&lt;/a&gt; qui sont, tout comme &lt;a href=&quot;http://www.parrot.org&quot; target=&quot;_blank&quot;&gt;Parrot&lt;/a&gt; pour Perl 6 et &lt;a href=&quot;http://fr.wikipedia.org/wiki/Machine_virtuelle_Dalvik&quot; target=&quot;_blank&quot;&gt;Dalvik&lt;/a&gt; pour Java sur Android , des machines virtuelles à registre.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ceci est symptomatique de mon intérêt pour ces deux langages. Et si celui pour Lua est assez récent, celui pour Erlang est plus ancien et plus profond.&lt;/p&gt;
&lt;p&gt;J’espère donc écrire bientôt sur ce blog quelques articles sur Erlang, et sur sa formidable machine virtuelle BEAM, et aussi contribuer à des logiciels libres en Erlang. Même si, aujourd’hui, Python reste encore de loin le langage que je maîtrise le mieux et avec lequel je suis le plus productif.&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=2475&amp;amp;md5=a32be73f8997714781bcf491aa026304&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;</content:encoded>
	<dc:date>2013-05-27T18:26:54+00:00</dc:date>
	<dc:creator>fgallaire</dc:creator>
</item>
<item rdf:about="http://www.inetdoc.net/archives/2013/05/21/nis_nfsv4_autofs5__38_dual_stack_ipv4__43_ipv6/index.html">
	<title>Philippe Latu: NIS, NFSv4, autofs5 &amp; dual stack IPv4 + IPv6</title>
	<link>http://www.inetdoc.net/archives/2013/05/21/nis_nfsv4_autofs5__38_dual_stack_ipv4__43_ipv6/index.html</link>
	<content:encoded>&lt;p&gt;Pour employer une formule marketing à 2€cts, la collection des acronymes
donnés dans le titre constitue un «savoureux mélange» entre anachronisme et
modernité. Ceci-dit, je me doute bien qu'à la lecture du même titre, d'aucuns
auront déjà trouvé que la mixture est on ne peut plus indigeste ! Enfin,
n'ayant plus du peur du ridicule, voici une petite introduction sur ce
faux-nouveau support : &lt;a href=&quot;http://www.inetdoc.net/travaux_pratiques/index.html#sysadm-net.autofs-nis-nfs&quot;&gt;Association
NIS, NFSv4 et autofs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Après avoir adapté les supports de la &lt;a href=&quot;http://www.inetdoc.net/dev/&quot;&gt;rubrique développement&lt;/a&gt; à IPv6, je me
suis posé la question de faire le même travail sur les autres supports de
travaux pratiques. Écrire une version IPv6 séparée pour chaque séance de
travaux pratiques obligerait à maintenir deux versions pour un même document.
Au delà de la quantité de travail, il y a fort à parier qu'une version IPv6
isolée ne serait jamais utilisée vu ce que l'on sait de l'engouement général
pour adopter rapidement ce protocole. Il restait donc l'option du document
unique double pile ou &lt;i&gt;dual stack&lt;/i&gt; dans le jargon. À titre d'entraînement,
j'ai repris &lt;a href=&quot;http://www.inetdoc.net/travaux_pratiques/index.html#sysadm-net.autofs-nis-nfs&quot;&gt;un
vieux support abandonné&lt;/a&gt; qui associe trois services.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Network Information Service&lt;/i&gt;&lt;/b&gt; (NIS) permet le partage des
  paramètres de compte utilisateur. C'est un service démodé qui ne fonctionne
  qu'avec la pile IPv4 ; ce qui le rend intéressant dans le contexte
  présent.&lt;/li&gt;

  &lt;li&gt;&lt;b&gt;&lt;i&gt;Network File System&lt;/i&gt;&lt;/b&gt; (NFS) est le système de fichiers réseau
  de prédilection dans le monde Unix. Sa version 4 fonctionne très bien avec la
  pile IPv6.&lt;/li&gt;

  &lt;li&gt;&lt;b&gt;&lt;i&gt;Automounter&lt;/i&gt;&lt;/b&gt; (autofs) permet l'accès transparent au système
  de fichiers réseau. On l'utilise lors de la connexion d'un utilisateur pour
  accéder simplement à son répertoire. Normalement, ce service fonctionne avec
  IPv6. J'ai découvert avec surprise que son utilisation d'IPv6 est assez
  singulière puisqu'il semble s'appuyer exclusivement sur les enregistrements
  DNS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Même si le but recherché était de «croiser» les usages des deux piles de
protocole de couche réseau, le résultat a dépassé mes attentes puisqu'en trois
services on dispose de trois modes opératoires distincts.&lt;/p&gt;

&lt;p&gt;Pour être complet, il faut ajouter les appels de procédures distants (RPC)
sur lesquels sont basés NIS et NFS. C'est justement ce mécanisme qui autorise
le mixage entre les deux piles &lt;span style=&quot;color: green;&quot;&gt;IPv4&lt;/span&gt; et &lt;span style=&quot;color: red;&quot;&gt;IPv6&lt;/span&gt;.&lt;/p&gt;

&lt;pre&gt;# rpcinfo -s ip6-srvr.fake.domain
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,&lt;span style=&quot;color: green;&quot;&gt;udp,tcp,&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;udp6,tcp6&lt;/span&gt;          portmapper  superuser
    100004  1,2       &lt;span style=&quot;color: green;&quot;&gt;tcp,udp&lt;/span&gt;                          ypserv      superuser
    100009  1         &lt;span style=&quot;color: green;&quot;&gt;udp&lt;/span&gt;                              yppasswdd   superuser
    100003  4,3,2     &lt;span style=&quot;color: red;&quot;&gt;udp6,tcp6&lt;/span&gt;,udp,tcp                nfs         superuser
    100227  3,2       udp6,tcp6,udp,tcp                -           superuser
    100021  4,3,1     &lt;span style=&quot;color: red;&quot;&gt;tcp6,udp6&lt;/span&gt;,tcp,udp                nlockmgr    superuser
 600100069  1         &lt;span style=&quot;color: green;&quot;&gt;tcp,udp&lt;/span&gt;                          fypxfrd     superuser
    100007  1,2       &lt;span style=&quot;color: green;&quot;&gt;tcp,udp&lt;/span&gt;                          ypbind      superuser
    100005  3,2,1     tcp6,udp6,tcp,udp                mountd      superuser&lt;/pre&gt;

&lt;h3&gt;&lt;i&gt;autofs troubleshooting&lt;/i&gt;&lt;/h3&gt;

&lt;p&gt;Comme je l'ai dit plus haut la version du paquet &lt;b&gt;autofs&lt;/b&gt; fourni dans
la branche &lt;i&gt;testing&lt;/i&gt; semble se baser uniquement sur les enregistrements
DNS. Voyons comment je suis parvenu à cette conclusion.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;On commence par un montage statique de l'arborescence depuis le poste
  client.

&lt;pre&gt;# mount -t nfs4 &lt;span style=&quot;color: red;&quot;&gt;[2001:db8:feb2:10::12]&lt;/span&gt;:/home /ahome
root@clnt:/home/etu# ls -lAh /ahome/etu-nis/
total 16K
-rw------- 1 etu-nis etu-nis  385 mai   21  2013 .bash_history
&amp;lt;snip/&amp;gt;

# mount | grep nfs4
&lt;span style=&quot;color: red;&quot;&gt;[2001:db8:feb2:10::12]&lt;/span&gt;://home on /ahome type nfs4 \
  (rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp6, \
   timeo=600,retrans=2,sec=sys,clientaddr=&lt;span style=&quot;color: red;&quot;&gt;2001:db8:feb2:10::11&lt;/span&gt;,minorversion=0, \
   local_lock=none,addr=&lt;span style=&quot;color: red;&quot;&gt;2001:db8:feb2:10::12&lt;/span&gt;)&lt;/pre&gt;

  Le montage statique utilisant les adresses &lt;span style=&quot;color: red;&quot;&gt;IPv6&lt;/span&gt; fonctionne. Rien d'original.
  &lt;/li&gt;
  
  &lt;li&gt;On passe à l'utilisation du démon &lt;b&gt;automount&lt;/b&gt; avec des fichiers de
  configuration complétés directement sur le poste client, toujours avec une
  adresse IPv6 numérique.

&lt;pre&gt;# cat /etc/auto.master
/ahome          /etc/auto.home

# cat /etc/auto.home 
* -port=2049,-fstype=nfs4 &lt;span style=&quot;color: red;&quot;&gt;[2001:db8:feb2:10::12]&lt;/span&gt;:/home/&amp;amp;

# service autofs start
[ ok ] Starting automount....
# automount -m

autofs dump map information
===========================

global options: none configured

Mount point: /ahome

source(s):

  instance type(s): file 
  map: /etc/auto.home

  * | -port=2049,-fstype=nfs4 &lt;span style=&quot;color: red;&quot;&gt;[2001:db8:feb2:10::12]&lt;/span&gt;:/home/&amp;amp;&lt;/pre&gt;

  La configuration a bien été prise en compte par le démon ...

&lt;pre&gt;# ls -lAh /ahome/etu-nis
ls: impossible d'accéder à /ahome/etu-nis: Aucun fichier ou dossier de ce type

# tail -3 /var/log/syslog 
clnt automount[3652]: attempting to mount entry /ahome/etu-nis
clnt automount[3652]: &lt;span style=&quot;color: purple;&quot;&gt;mount(nfs): no hosts available&lt;/span&gt;
clnt automount[3652]: failed to mount /ahome/etu-nis&lt;/pre&gt;

  &lt;span style=&quot;color: purple;&quot;&gt;Catastrophe !&lt;/span&gt; Le montage automatique échoue.
  &lt;/li&gt;

  &lt;li&gt;On reprend la même expérience avec un nom d'hôte DNS dont les
  enregistrements AAAA et PTR sont valides.

&lt;pre&gt;# service autofs start
[ ok ] Starting automount....
# automount -m

autofs dump map information
===========================

global options: none configured

Mount point: /ahome

source(s):

  instance type(s): file 
  map: /etc/auto.home

  * | -port=2049,-fstype=nfs4 &lt;span style=&quot;color: red;&quot;&gt;vm2.fake.domain&lt;/span&gt;:/home/&amp;amp;

# dig +short aaaa vm2.fake.domain
&lt;span style=&quot;color: red;&quot;&gt;2001:db8:feb2:10::12&lt;/span&gt;
root@clnt:/home/etu# dig +short -x &lt;span style=&quot;color: red;&quot;&gt;2001:db8:feb2:10::12&lt;/span&gt;
vm2.fake.domain.&lt;/pre&gt;
  
  L'adresse IPv6 utilisée est bien identique à celle du test précédent.

&lt;pre&gt;# ls -lAh /ahome/etu-nis
total 16K
-rw------- 1 etu-nis etu-nis  385 mai   21 23:44 .bash_history
&amp;lt;snip/&amp;gt;

# tail -3 /var/log/syslog 
clnt automount[3759]: mounted indirect on /ahome with timeout 300, freq 75 seconds
clnt automount[3759]: attempting to mount entry /ahome/etu-nis
clnt automount[3759]: &lt;span style=&quot;color: purple;&quot;&gt;mounted /ahome/etu-nis&lt;/span&gt;&lt;/pre&gt;

  &lt;span style=&quot;color: purple;&quot;&gt;Bingo !&lt;/span&gt; Cette fois-ci le montage se fait
  correctement. Enfin, si les paramètres de configuration sont publiés via NIS,
  ça fonctionne aussi.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Voilà. On peut considérer que le choix consistant à associer les trois
services est pertinent puisqu'il illustre des usages distincts de la pile IPv6.
À mon niveau de connaissances, je ne sais pas si le fait d'imposer
l'utilisation des enregsitrements DNS par le démon &lt;b&gt;automount&lt;/b&gt; est
volontaire.&lt;/p&gt;

&lt;p&gt;Dans tous les cours sur IPv6, il est courant de dire que comme le format
numérique des adresses IPv6 est très difficile à retenir, l'usage des
enregistrements DNS est impératif. Pour généraliser l'utilisation de la double
pile réseau, il semble qu'il faille revoir la séquence des travaux pratiques.
Je vais devoir aborder le service DNS au tout début de façon à en bénéficier
pour le cycle sur le stockage et les systèmes de fichiers réseau. En
conclusion, le support de travaux pratiques DNS est le prochain sur la liste
!&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-21T20:17:06+00:00</dc:date>
	<dc:creator>Philippe Latu</dc:creator>
</item>
<item rdf:about="http://tuxicoman.jesuislibre.net/?p=4127">
	<title>Tuxicoman: Installer Debian</title>
	<link>http://tuxicoman.jesuislibre.net/2013/05/installer-debian.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-05-18T16:59:41+00:00</dc:date>
	<dc:creator>Tuxicoman</dc:creator>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=1111">
	<title>St&amp;eacute;phane Blondon: Évolution du nombre de messages sur debian-l10n-fr et debian-users-fr avec pychart</title>
	<link>http://ascendances.wordpress.com/2013/05/02/evolution-du-nombre-de-messages-sur-debian-l10n-fr-et-debian-users-fr-avec-pychart/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-05-02T08:34:34+00:00</dc:date>
	<dc:creator>ascendances</dc:creator>
</item>
<item rdf:about="http://fgallaire.flext.net/?p=2456">
	<title>Florent Gallaire: Lucas Nussbaum élu DPL pour 2013</title>
	<link>http://fgallaire.flext.net/lucas-nussbaum-dpl-2013/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-04-15T01:41:11+00:00</dc:date>
	<dc:creator>fgallaire</dc:creator>
</item>
<item rdf:about="http://www.luffy.cx/fr/blog/2013-gnucash-eurl.html">
	<title>Vincent Bernat: Comptabilité d'une EURL avec GnuCash</title>
	<link>http://vincent.bernat.im/fr/blog/2013-gnucash-eurl.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-04-06T19:52:25+00:00</dc:date>
	<dc:creator>Vincent Bernat</dc:creator>
</item>
<item rdf:about="http://tanguy.ortolo.eu/blog/article101/precompresser-apache">
	<title>Tanguy Ortolo: Pré-compresser des fichiers statiques avec le Serveur HTTP Apache</title>
	<link>http://tanguy.ortolo.eu/blog/article101/precompresser-apache</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-03-29T11:21:00+00:00</dc:date>
	<dc:creator>Tanguy</dc:creator>
</item>
<item rdf:about="http://www-public.telecom-sudparis.eu/~berger_o/weblog/?p=1050">
	<title>Olivier Berger (pro): Managing Python code with UTF-8 (french chars) in org-mode + babel + minted for LaTeX export</title>
	<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>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-03-29T10:44:43+00:00</dc:date>
	<dc:creator>Olivier Berger</dc:creator>
</item>
<item rdf:about="http://www-public.telecom-sudparis.eu/~berger_o/weblog/?p=1046">
	<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>
	<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>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-03-18T12:49:40+00:00</dc:date>
	<dc:creator>Olivier Berger</dc:creator>
</item>
<item rdf:about="http://france.debian.net/posts/2013/Annonce_SL_2013/">
	<title>Debian France: Debian France aux Solutions Linux/Open Source 2013</title>
	<link>http://france.debian.net/posts/2013/Annonce_SL_2013/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-03-16T18:41:41+00:00</dc:date>
</item>
<item rdf:about="urn:md5:3f2400fe115a486da8a134e609ec6c72">
	<title>Julien Vehent: DIY eMail @ Home</title>
	<link>http://jve.linuxwall.info/blog/index.php?post/2013/03/07/DIY-eMail-%40-Home</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-03-07T01:13:00+00:00</dc:date>
	<dc:creator>Julien Vehent</dc:creator>
</item>
<item rdf:about="http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html">
	<title>Philippe Latu: Initiation au développement IPv4 + IPv6</title>
	<link>http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-03-05T19:54:58+00:00</dc:date>
	<dc:creator>Philippe Latu</dc:creator>
</item>
<item rdf:about="http://www.mon-code.net/feeds/rssTag/configuration-de-bind9-avec-wildcard-et-apache2-avec-virtualhost-dynamique">
	<title>Ulrich L.: Configuration de Bind9 avec wildcard et Apache2 avec VirtualHost dynamique</title>
	<link>http://www.mon-code.net/article/62/configuration-de-bind9-avec-wildcard-et-apache2-avec-virtualhost-dynamique</link>
	<content:encoded>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.</content:encoded>
	<dc:date>2013-03-04T23:00:00+00:00</dc:date>
</item>
<item rdf:about="http://www.luffy.cx/fr/blog/2013-lldpd-0.7.1.html">
	<title>Vincent Bernat: lldpd 0.7.1</title>
	<link>http://vincent.bernat.im/fr/blog/2013-lldpd-0.7.1.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-02-20T08:28:19+00:00</dc:date>
	<dc:creator>Vincent Bernat</dc:creator>
</item>
<item rdf:about="urn:md5:35a74e1f0d33a18df1a170bdb076c388">
	<title>Rodolphe Quiédeville: PyDeb from PyPI to .deb</title>
	<link>http://blog.rodolphe.quiedeville.org/index.php?post/2013/02/PyDeb-from-PyPI-to-deb</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-02-06T12:01:00+00:00</dc:date>
	<dc:creator>Rodolphe Quiédeville</dc:creator>
</item>
<item rdf:about="urn:md5:e473272383b19eb8f60ce8a398298ed6">
	<title>Rodolphe Quiédeville: Paquets Debian pour Django</title>
	<link>http://blog.rodolphe.quiedeville.org/index.php?post/2013/01/Paquets-Debian-pour-Django</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-01-29T12:23:00+00:00</dc:date>
	<dc:creator>Rodolphe Quiédeville</dc:creator>
</item>
<item rdf:about="http://www.cure.nom.fr/blog/archives/229-guid.html">
	<title>David Curé: exFAT 1.0.0 et Debian squeeze</title>
	<link>http://www.cure.nom.fr/blog/archives/229-exFAT-1.0.0-et-Debian-squeeze.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-01-25T21:48:20+00:00</dc:date>
	<dc:creator>David</dc:creator>
</item>
<item rdf:about="http://france.debian.net/posts/2012/Mini_DebConf_Paris_2012/">
	<title>Debian France: Bilan de la deuxième Mini-Debconf Paris</title>
	<link>http://france.debian.net/posts/2012/Mini_DebConf_Paris_2012/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-01-17T11:22:30+00:00</dc:date>
</item>
<item rdf:about="http://www.cure.nom.fr/blog/archives/228-guid.html">
	<title>David Curé: Carte SDXC, exfat 0.9.8 et Debian Squeeze</title>
	<link>http://www.cure.nom.fr/blog/archives/228-Carte-SDXC,-exfat-0.9.8-et-Debian-Squeeze.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-01-13T14:17:16+00:00</dc:date>
	<dc:creator>David</dc:creator>
</item>
<item rdf:about="http://ascendances.wordpress.com/?p=930">
	<title>St&amp;eacute;phane Blondon: Déterminer quelle est la meilleure distribution grâce à Python et PIL</title>
	<link>http://ascendances.wordpress.com/2013/01/12/determiner-quelle-est-la-meilleure-distribution-grace-a-python-et-pil/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-01-12T09:39:02+00:00</dc:date>
	<dc:creator>ascendances</dc:creator>
</item>
<item rdf:about="http://www.mercereau.info/?p=466">
	<title>David Mercereau: [rkhunter] Warning  The file properties have changed</title>
	<link>http://www.mercereau.info/rkhunter-warning-the-file-properties-have-changed/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2013-01-09T06:00:00+00:00</dc:date>
	<dc:creator>David</dc:creator>
</item>
<item rdf:about="http://www.mercereau.info/?p=470">
	<title>David Mercereau: Script de sauvegarde Mysql par base “mysql_dump.sh”</title>
	<link>http://www.mercereau.info/script-de-sauvegarde-mysql-par-base-mysql_dump-sh/</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2012-12-05T11:00:41+00:00</dc:date>
	<dc:creator>David</dc:creator>
</item>
<item rdf:about="http://linux-attitude.fr/?p=1560">
	<title>Benoit Peccatte: Signer ses logs</title>
	<link>http://linux-attitude.fr/post/signer-ses-logs?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=signer-ses-logs</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2012-11-02T14:46:57+00:00</dc:date>
	<dc:creator>peck</dc:creator>
</item>

</rdf:RDF>
