<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Normation Blog</title>
	<atom:link href="http://blog.normation.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.normation.com</link>
	<description>Le blog de Normation</description>
	<lastBuildDate>Mon, 20 Feb 2012 21:19:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Barcamp Rudder 2.4.0 &#8211; Portes ouvertes</title>
		<link>http://blog.normation.com/2012/02/20/barcamp-rudder-2-4-0-portes-ouvertes/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=barcamp-rudder-2-4-0-portes-ouvertes</link>
		<comments>http://blog.normation.com/2012/02/20/barcamp-rudder-2-4-0-portes-ouvertes/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 18:06:03 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[CFEngine]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[Rudder]]></category>
		<category><![CDATA[BarCamp]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[New features]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Paris]]></category>
		<category><![CDATA[Portes ouvertes]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=554</guid>
		<description><![CDATA[Cette semaine, de mercredi à mercredi (du 22 au 29 février donc), Normation va faire son premier Barcamp Rudder ! Mais qu&#8217;est-ce qu&#8217;un barcamp ? D&#8217;après Wikipedia : Un BarCamp est une rencontre, une non-conférence ouverte qui prend la forme d&#8217;ateliers-événements participatifs où le contenu est fourni par les participants qui doivent tous, à un [...]]]></description>
			<content:encoded><![CDATA[<p>Cette semaine, de <strong>mercredi à mercredi</strong> (du 22 au 29 février donc), Normation va faire son premier <strong>Barcamp Rudder</strong> !</p>
<p>Mais qu&#8217;est-ce qu&#8217;un barcamp ? D&#8217;après Wikipedia :<em><br />
</em></p>
<blockquote><p><em>Un <strong>BarCamp</strong> est une rencontre, une non-conférence ouverte qui prend la forme d&#8217;ateliers-événements participatifs où le contenu est fourni par les participants qui doivent tous, à un titre ou à un autre, apporter quelque chose au Barcamp. </em><em>C&#8217;est le principe </em>pas de spectateur, tous participants<em>.</em></p></blockquote>
<p>(Source et plus d&#8217;infos : <a title="BarCamp sur Wikipedia" href="http://fr.wikipedia.org/wiki/BarCamp" target="_blank">http://fr.wikipedia.org/wiki/BarCamp</a>)</p>
<p>L&#8217;objectif de cette semaine c&#8217;est d&#8217;améliorer <a title="Rudder Project" href="http://www.rudder-project.org/" target="_blank">Rudder</a>, de faire qu&#8217;il nous plaît à tous, avant la sortie de la version 2.4.0 début mars, et travailler sur les sujets qu&#8217;on néglige parfois : communication, communauté, documentation, tests, qualité, ergonomie&#8230;</p>
<p>On profite de l&#8217;occasion pour faire une <strong>opération portes ouvertes</strong> : vous êtes les bienvenus chez nous tous les jours de 9h jusqu&#8217;à tard&#8230; Passez-nous faire un petit coucou, tester la dernière version de Rudder, nous donner votre avis, grignoter un morceau&#8230; Promis, on ne vous demandera pas vraiment de travailler <img src='http://blog.normation.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>L&#8217;équipe de Normation au grand complet (9 personnes) vous donne donc rendez-vous tous les jours au <a title="Plan pour venir au 87 rue de Turbigo, 75003 Paris" href="http://g.co/maps/5m2tw" target="_blank">87 rue de Turbigo, 75003 Paris</a> ! C&#8217;est au métro Temple sur la ligne 3 ou République sur les lignes 5, 8, 9 ou 11.</p>
<p>En particulier, un évènement communautaire autour de Rudder / CFEngine aura lieu <strong>jeudi soir</strong> pour se rencontrer et discuter (ou troller) autour d&#8217;un verre (ou deux).</p>
<p>Ca nous ferait très plaisir de vous voir ici alors <strong>n&#8217;hésitez pas à passer !</strong> Si vous ne pouvez pas venir, rejoignez-nous sur IRC (#rudder sur FreeNode) ou suivez-nous sur Twitter (<a title="Normation sur Twitter" href="http://twitter.com/Normation" target="_blank">@normation</a> et <a title="RudderProject sur Twitter" href="http://twitter.com/RudderProject" target="_blank">@RudderProject</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2012/02/20/barcamp-rudder-2-4-0-portes-ouvertes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rudder presentation at FOSDEM</title>
		<link>http://blog.normation.com/2012/02/13/rudder-presentation-at-fosdem/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rudder-presentation-at-fosdem</link>
		<comments>http://blog.normation.com/2012/02/13/rudder-presentation-at-fosdem/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 16:58:54 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Rudder]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[FOSDEM]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=542</guid>
		<description><![CDATA[We&#8217;ve been back from the latest FOSDEM in Brussels for a week now, but are only just recovering from the freezing-cold weather they had there&#8230; As always, FOSDEM was a great event, with thousands of open source users, contributors and developers all mixing together and sharing their findings, software and thoughts. A real spirit of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.normation.com/wp-content/uploads/2012/01/logo-transp.png"><img class="alignright size-medium wp-image-520" title="FOSDEM Logo (transp)" src="http://blog.normation.com/wp-content/uploads/2012/01/logo-transp-300x74.png" alt="FOSDEM" width="300" height="74" /></a>We&#8217;ve been back from the latest <a href="http://fosdem.org/">FOSDEM</a> in Brussels for a week now, but are only just recovering from the freezing-cold weather they had there&#8230;</p>
<p>As always, FOSDEM was a great event, with thousands of open source users, contributors and developers all mixing together and sharing their findings, software and thoughts. A real spirit of collaboration and possibility always reigns at FOSDEM, and this year was no exception.</p>
<p><img class="alignleft size-small wp-image-509" title="04.Logo Rudder complet 2b" src="http://blog.normation.com/wp-content/uploads/2012/01/04.Logo-Rudder-complet-2b-300x81.png" alt="" width="220" height="59" />For our part, we introduced <a href="http://www.rudder-project.org/">Rudder</a>, our open source configuration management tool in the Configuration Management <a href="http://fosdem.org/2012/schedule/track/configuration_and_systems_management_devroom">devroom</a> on the Sunday (see the <a href="http://fosdem.org/2012/schedule/event/cfgmgmtrudder">official talk page</a>). Our talk was well received, with many interesting questions. Thanks to those who were there, and those who made it possible!</p>
<p>Our <a title="Rudder presentation slides from FOSDEM" href="http://www.slideshare.net/normation/rudder-configuration-management-benefits-for-everyone-fosdem-2012" target="_blank">slides are available on SlideShare</a>, or you can just view them here:</p>
<div id="__ss_11426619" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Rudder - Configuration management benefits for everyone (FOSDEM 2012)" href="http://www.slideshare.net/normation/rudder-configuration-management-benefits-for-everyone-fosdem-2012" target="_blank">Rudder &#8211; Configuration management benefits for everyone (FOSDEM 2012)</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11426619" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/normation" target="_blank">Normation</a></div>
</div>
<p>We also did our share of collaborating, and plan-making. Developers from three of the main components of Rudder, <a title="CFEngine" href="http://www.cfengine.com/" target="_blank">CFEngine</a>, <a title="FusionInventory" href="http://fusioninventory.org/" target="_blank">FusionInventory</a> and <a title="OpenLDAP" href="http://www.openldap.org" target="_blank">OpenLDAP</a>, were at FOSDEM, and we got together to discuss each project, their integration into Rudder and ways to improve both our use of them and the community&#8217;s experience of them.</p>
<p>Some promising ideas were thrown around, hopefully you&#8217;ll hear more about them here soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2012/02/13/rudder-presentation-at-fosdem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Normation and Rudder at FOSDEM</title>
		<link>http://blog.normation.com/2012/01/23/normation-and-rudder-at-fosdem/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=normation-and-rudder-at-fosdem</link>
		<comments>http://blog.normation.com/2012/01/23/normation-and-rudder-at-fosdem/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 17:06:07 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Rudder]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=503</guid>
		<description><![CDATA[Just like every year, once the holiday season is over, we start looking forward to FOSDEM the first weekend in February! This year, four of us from Normation will be attending, all the way through, from the world-famous, record-breaking beer event to the last talks on the Sunday. We&#8217;ll be introducing Rudder, our open source [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.normation.com/wp-content/uploads/2012/01/logo-transp.png"><img class="alignright size-medium wp-image-520" title="FOSDEM Logo (transp)" src="http://blog.normation.com/wp-content/uploads/2012/01/logo-transp-300x74.png" alt="FOSDEM" width="300" height="74" /></a>Just like every year, once the holiday season is over, we start looking forward to <a href="http://fosdem.org/">FOSDEM</a> the first weekend in February!</p>
<p>This year, four of us from <a href="http://www.normation.com/">Normation</a> will be attending, all the way through, from the world-famous, record-breaking <a href="http://fosdem.org/2012/beerevent">beer event</a> to the last talks on the Sunday.</p>
<p><img class="alignleft size-small wp-image-509" title="04.Logo Rudder complet 2b" src="http://blog.normation.com/wp-content/uploads/2012/01/04.Logo-Rudder-complet-2b-300x81.png" alt="" width="220" height="59" />We&#8217;ll be introducing <a href="http://www.rudder-project.org/">Rudder</a>, our open source configuration management tool in the Configuration Management <a href="http://fosdem.org/2012/schedule/track/configuration_and_systems_management_devroom">devroom</a> on the Sunday. Our talk will show how Rudder&#8217;s approach enables everyone in the IT department to benefit from the advantages of configuration management, without necessarily needing to learn a complex tool, or even get their hands dirty. We&#8217;ll describe and demonstrate how this is possible, and dive into the technical architecture that makes it work. Read more on the <a href="http://fosdem.org/2012/schedule/event/cfgmgmtrudder">official talk page</a>.</p>
<p><img class="alignright size-full wp-image-507" title="Rudder t-shirts for FOSDEM" src="http://blog.normation.com/wp-content/uploads/2012/01/tshirts-transparentbg.png" alt="" width="250" height="250" />We&#8217;re always interested in meeting new people and discussing configuration management, tools like CFEngine, open source&#8230; or even LDAP and Scala, for the more adventurous <img src='http://blog.normation.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Come and have a chat, we&#8217;ll be easily recognisable in our flashy black t-shirts with the Rudder logo!</p>
<p>Just before FOSDEM, we&#8217;re giving a <a href="http://cfengine-training-brussels-february-2012-eorg.eventbrite.com/">CFEngine 3 training session</a>. Some seats are still available, so why not come and kill two birds with one stone &#8211; some professional training at the end of the week, and a good open source event at the weekend!</p>
<p>Looking forward to seeing you in Brussels!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2012/01/23/normation-and-rudder-at-fosdem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CFEngine training course in Brussels &#8211; 1-2-3 February (before FOSDEM)</title>
		<link>http://blog.normation.com/2012/01/04/cfengine-training-course-in-brussels-1-2-3-february-before-fosdem/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cfengine-training-course-in-brussels-1-2-3-february-before-fosdem</link>
		<comments>http://blog.normation.com/2012/01/04/cfengine-training-course-in-brussels-1-2-3-february-before-fosdem/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 14:16:51 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=460</guid>
		<description><![CDATA[Need to automate your system administration tasks like installing and configuring servers? Want to ensure policy compliance across your IT infrastructure? Already using CFEngine but interested in learning more? Going to Brussels for FOSDEM already and could spare a few days before hand to learn a new skill? Or just need a good reason to [...]]]></description>
			<content:encoded><![CDATA[<p>Need to automate your system administration tasks like installing and configuring servers? Want to ensure policy compliance across your IT infrastructure? Already using <a href="http://www.cfengine.com" title="CFEngine">CFEngine</a> but interested in learning more?</p>
<p>Going to Brussels for <a href="http://www.fosdem.org/">FOSDEM</a> already and could spare a few days before hand to learn a new skill? Or just need a good reason to go to Brussels and then stay on for FOSDEM?</p>
<p>Whatever your interest, you may want to attend our <a href="http://cfengine-training-brussels-february-2012-eorg.eventbrite.com/">CFEngine training session in Brussels</a> on February 1,2 and 3 (that&#8217;s Wednesday-Friday before FOSDEM)!<br />
<span id="more-460"></span></p>
<h3>Flexible course programme</h3>
<p>These 3 days can be split up as follows, so that you can build your own training content, depending on your expectations and requirements:</p>
<ul>
<li><strong>Day 1 morning:</strong> What is configuration management? CFEngine architecture and the &#8220;desired state&#8221; approach</li>
<li><strong>Day 1 afternoon and Day 2:</strong> CFEngine Fundamentals: hands-on training covering basic CFEngine installation, syntax and features through examples. At the end of the course, attendees will have an understanding and recommended best practices for designing a CFEngine-based configuration management system.</li>
<li><strong>Day 3:</strong> CFEngine Industrialization: Moving on from elementary examples to real-world requirements, including complex parameters, reporting, interaction with other tools and planning changes.
</ul>
<p>Except the first morning, all of this course is very hands-on, and attendees will be expected to bring a laptop so that they can get CFEngine up and running in their own environment. All courses are given by a trainer who is a recognized CFEngine expert, community contributor and has received training certification from CFEngine AS. The course language is English.</p>
<h3>Interesting in participating?</h3>
<p>To sign up visit <a href="http://cfengine-training-brussels-february-2012-eorg.eventbrite.com/">http://cfengine-training-brussels-february-2012-eorg.eventbrite.com/</a> (payment by credit card or PayPal accepted), or email commercial AT normation.com to get an official quote or submit a purchase order.</p>
<h3>Any questions?</h3>
<p>Just ask us by email (contact AT normation.com), Twitter (<a href="http://twitter.com/Normation">@normation</a>) or IRC (#normation on FreeNode).</p>
<p>Looking forward to seeing you in Brussels!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2012/01/04/cfengine-training-course-in-brussels-1-2-3-february-before-fosdem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interactive key exchange with CFEngine</title>
		<link>http://blog.normation.com/2012/01/03/interactive-key-exchange-with-cfengine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=interactive-key-exchange-with-cfengine</link>
		<comments>http://blog.normation.com/2012/01/03/interactive-key-exchange-with-cfengine/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 18:24:21 +0000</pubDate>
		<dc:creator>Nicolas CHARLES</dc:creator>
				<category><![CDATA[CFEngine]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[cf-runagent]]></category>
		<category><![CDATA[CFEngine3]]></category>
		<category><![CDATA[key exchange]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=364</guid>
		<description><![CDATA[Here at Normation, we use CFEngine 3 extensively for configuration management across Linux and Windows servers. CFEngine 3 is a very secure tool, that relies on keys to identify hosts and authorize connections. To set up a secure CFEngine infrastructure, you ought to exchange keys between hosts (note that if you don&#8217;t have confidential data [...]]]></description>
			<content:encoded><![CDATA[<p>Here at Normation, we use <a href="http://www.cfengine.com">CFEngine 3</a> extensively for configuration management across Linux and Windows servers.</p>
<p>CFEngine 3 is a very secure tool, that relies on keys to identify hosts and authorize connections. To set up a secure CFEngine infrastructure, you ought to exchange keys between hosts (note that if you don&#8217;t have confidential data on your promises, you can skip the security offered by the public key system).</p>
<p><span id="more-364"></span></p>
<h2>Key exchange</h2>
<p>The client-server communication is based on keys (very much like ssl). Each node must have a copy of the other public keys, obtained either via a remote copy (with scp), by trusting keys automatically, or using the bootstrap system introduced in Cfengine 3.2.0 (that would still require the server to accept automatically keys).</p>
<p>If you don’t want to accept keys based on <em>automatic trust</em>, you need to manually exchange them to set up the system. This article will show you how to do this using the <em>cf-runagent</em> tool, by connecting to each host from the main CFEngine server.</p>
<p>Assume a server with the following ip : <strong>192.168.56.150</strong><br />
Assume a client with the following ip : <strong>192.168.56.152</strong></p>
<h3>Client side</h3>
<p>The initial promises on the client will need to configure the <em>cf-serverd</em> to run on it, and try to fetch its real promises from the policy server :<br />
<script type="text/javascript" src="https://gist.github.com/1058864.js?file=gistfile1.c"></script><br />
 <strong>Note</strong> that the client trusts keys from the server</p>
<h3>Server side</h3>
<p>On the server, you&#8217;d have the following promise for the server component, authorizing hosts to connect, but <strong>not</strong> trusting their keys<br />
<script type="text/javascript" src="https://gist.github.com/1058881.js?file=gistfile1.c"></script></p>
<p><strong>Note:</strong> only the server itself is accepted on trust, hosts from the subnetwork 192.168.56.* can connect but their keys are not automatically trusted, and their DNS name is not deemed as reliable.</p>
<h3>First execution (without prior key exchange)</h3>
<p>If the agent on the client tries to connect to the server, without previous key exchange, you&#8217;ll have the following output on the server :<br />
<script type="text/javascript" src="https://gist.github.com/1058916.js?file=gistfile1.txt"></script></p>
<p>To relieve the burden of copying keys with scp, or the risk of trusking keys of every hosts, you can do a manual key exchange, from the server, using the <strong>cf-runagent</strong> interactive mode</p>
<h3>Interactive key exchange</h3>
<p>The interactive key exchange will happen <strong>from</strong> the server <strong>to</strong> the client. It will ask for the user to trust the key, and execute the remote promises of the client (in this case, the initial promises fetch the real promises from the server)</p>
<p><script src="https://gist.github.com/1555650.js?file=gistfile1.txt"></script></p>
<p>Here we accepted the key of 192.168.56.152 on the server, and the client could connect to download its new promises, and then apply them</p>
<p><strong>Note:</strong> To prevent any risks, the new promises should not have 192.168.56.150 in the <em>trustkeyfrom</em></p>
<p><strong>Note 2:</strong> Since the <strong>version 3.2.0</strong>, if you are willing to automatically accept keys from the clients on the servers, you don&#8217;t need to copy any promises on the client, the bootstrap procedure from the <a href="http://cfengine.com/pages/nova">Nova</a> edition has been backported in the community edition; and it uses its own embedded promises</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2012/01/03/interactive-key-exchange-with-cfengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A quick initiation to the Debian package construction</title>
		<link>http://blog.normation.com/2011/12/22/a-quick-initiation-to-the-debian-package-construction/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-quick-initiation-to-the-debian-package-construction</link>
		<comments>http://blog.normation.com/2011/12/22/a-quick-initiation-to-the-debian-package-construction/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 17:58:24 +0000</pubDate>
		<dc:creator>Matthieu CERDA</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[lucas]]></category>
		<category><![CDATA[nussbaum]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[quick]]></category>
		<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=388</guid>
		<description><![CDATA[While attenting at this year&#8217;s RMLL conferences, I had the opportunity to listen to a great presentation of the APT package management system by Lucas Nussbaum. I then had the idea to create this post as a quick reference on how to quickly build someone&#8217;s first Debian package. You are kindly invited to take a [...]]]></description>
			<content:encoded><![CDATA[<p>While attenting at this year&#8217;s RMLL conferences, I had the opportunity to listen to a great presentation of the APT package management system by Lucas Nussbaum. I then had the idea to create this post as a quick reference on how to quickly build someone&#8217;s first Debian package.</p>
<p>You are kindly invited to take a glance at the complete presentation hosted <a href="http://www.blop.info/pub/pkg.pdf">here</a> if you want to learn more about this exciting part of the Debian systems.</p>
<h3>Your first Debian package</h3>
<p>First, you will need to pull all the required dependencies required to build any package &#8211; please ensure that you have some deb-src entries in your sources.list (using Synaptic or your good old fashioned CLI editor) or else you will get a &#8220;E: You must put some &#8216;source&#8217; URIs in your sources.list&#8221; error.</p>
<pre class="brush: shell">
apt-get update
apt-get install build-essential devscripts debhelper
</pre>
<p><span id="more-388"></span></p>
<p>Then we will try to build a simple package, with minimal dependencies :</p>
<pre class="brush: shell">
apt-get build-dep dash
apt-get source dash
cd dash-(version)
debuild -us -uc (No package signing)
</pre>
<p>After a while, you hopefully get your fresh debian package(s) in the upper directory :</p>
<pre class="brush: shell">
# ls -l ../*.deb
ash_0.5.5.1-7ubuntu1_all.deb
dash_0.5.5.1-7ubuntu1_i386.deb
</pre>
<p>Now, here are some few tips about the debian packaging system:</p>
<p>Every package to be built has the same structure:</p>
<ul>
<li>A plain sources directory, sometimes patched with debian specific code bits, </li>
<li>a &#8220;debian&#8221; directory. </li>
</ul>
<p>Inside this &#8220;debian&#8221; directory you get all the files that will describe how to build the package and every meta informations about it. </p>
<p>For example, you have regular version attached to the source directory, plus a Debian specific one, in dash&#8217;s case :</p>
<ol>
<li>0.5.5.1 is the source version, called &#8220;upstream&#8221; version</li>
<li>-1 is the Debian specific patch level (relative to the patches in the Debian bugtracker)</li>
</ol>
<p>Let&#8217;s see some important components of the &#8220;debian&#8221; directory :</p>
<h3>The &#8220;compat&#8221; file</h3>
<p>This file specifies the compatibility level of the package definition, the current level is 7.</p>
<h3>The &#8220;control&#8221; file</h3>
<p>This file describes the place that this package will take in the APT ecosystem, with key metadata that help the system to identify the target architecture, the dependencies &#8230; the format is based on the rfc-822, which you can also see in HTTP and Mail headers.</p>
<p>Essential: yes</p>
<p>For example, the Architecture definition, which defines on which architecture this package will work:</p>
<ul>
<li>any : Will build on any architecture</li>
<li>all : This package is architecture independant</li>
<li>amd64, hurd-i386 : Will only build and run on these platforms</li>
</ul>
<p>You can also encounter entries like $(shlibs:dep), that automatically analyse on which libraries depends the build binaries and automatically fill the dependencies list with the associated packages, or the Essential entry (found in the dash package) which specifies that this package is critical for correct system operation. (trying to delete it will trigger the following warning)</p>
<pre class="brush: shell">
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  bash dash (due to bash)
0 upgraded, 0 newly installed, 5 to remove and 60 not upgraded.
After this operation, 6756 kB disk space will be freed.
You are about to do something potentially harmful.
To continue type in the phrase &#039;Yes, do as I say!&#039;
 ?]
</pre>
<h3>The &#8220;rules&#8221; file</h3>
<p>This file is the bridge between the APT system and the upstream/patched sources and it is basically a GNU Makefile, it specifies how the binaries/bytecodes are to be build before packaging them, basically specifying options for the configure script or triggering a make task.</p>
<p>There are five mandatory targets :</p>
<ul>
<li>build : How to configure and build the package</li>
<li>binary, binary-arch, binary-indep : How to compile the binaries</li>
<li>clean : How to clean up the rubbish</li>
</ul>
<p>Hopefully, you will try someday to build something much more complex than dash. And you will be very limited by the syntax of a basic makefile to do your work.</p>
<p>This is where the helpers save the day, the most used one being debhelper : Its objective is to factor the most common tasks used for binary compilation and source preparation, like configure scripts runs, documentation preparation &#8230;</p>
<p>Debhelper is used in the rules files with keywords like package.dirs and package.docs, the helpers being called are redacted in various languages, and there are some more modern implementations of it: CDBS (critisized for his complexity and slowness) and dh (created in 2008 to &#8220;kill&#8221; CDBS, identifiable by all his commands prefix : dh_*)</p>
<p>Here is a sample of a trivial dh usage :</p>
<pre class="brush: shell">
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_configure :
dh_auto_configure --with-kitchen-sink
override_dh_auto_build :
make world
</pre>
<p>and a quick reference of some useful dh_* statements :</p>
<ul>
<li>binary &#8211; arch : build install</li>
<li>dh_testdir : Test directories according to parameters</li>
<li>dh_testroot : Test the sources according to parameters</li>
<li>dh_installchangelogs : Install changelogs</li>
<li>dh_installexamples : Install examples (in /usr/share/doc/package/examples)</li>
<li>dh_link : Create links</li>
<li>dh_strip : Strip binaries</li>
<li>dh_compress : Compress files</li>
<li>dh_fixperms : Adjust permissions</li>
<li>dh_installdeb : Install deb files</li>
<li>dh_shlibdeps : Build shared libs dependencies</li>
<li>dh_gencontrol : Generate a control file</li>
<li>dh_md5sums : Generate md5 sums</li>
<li>dh_builddeb : Build the deb file</li>
</ul>
<p>According to statistics, dh grows rapidly comparing to plain debhelper, while CDBS stays stable. The current consensus is: use dh if you can, you might also want to get some documentation about schroot and sbuild if you have complex needs (which enables you to build packages using LVM snapshots to always have a clean build environment), or about package maintenance using VCS systems (See the Vcs-Git: http://smarden.org/git/dash.git/ entry in dash&#8217;s control file)</p>
<p>You are now encouraged to play around with simple packages like dash, like bumping versions using the changelog file or creating your own simple package !</p>
<h3>Get involved !</h3>
<p>When you will be a little more experienced, you might consider to get involved in the Debian project, you will then have multiples possibilities to do so:</p>
<ul>
<li>Adopt an unmaintained package (using wnpp-alert or <a href="http://www.debian.org/devel/wnpp">http://www.debian.org/devel/wnpp</a>)</li>
<li>Get involved in a packaging team (<a href="http://wiki.debian.org/Teams">http://wiki.debian.org/Teams</a>), which is recommended for new contributors, teams are often happy to share experience</li>
<li>Get some new softwares in Debian (Please, only useful and non-redundant things, we don&#8217;t want another <a href="http://lwn.net/Articles/113644/">hot-babe</a> scandal)</li>
<li>Try to ease Debian-Ubuntu collaboration (Launchpad teams)</li>
<li>Find a mentor : http://mentors.debian.net</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2011/12/22/a-quick-initiation-to-the-debian-package-construction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuration management tools for cloud computing (Open World Forum 2011)</title>
		<link>http://blog.normation.com/2011/09/28/configuration-management-tools-for-cloud-computing-open-world-forum-2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=configuration-management-tools-for-cloud-computing-open-world-forum-2011</link>
		<comments>http://blog.normation.com/2011/09/28/configuration-management-tools-for-cloud-computing-open-world-forum-2011/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 07:54:04 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[CFEngine]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Rudder]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=411</guid>
		<description><![CDATA[The Open World Forum 2011 edition took place last week in Paris. I was invited to present a workshop in the Cloud Computing track. This gave me the opportunity to outline the importance of optimizing the &#8220;setup&#8221; phase of machines when using cloud computing. Today&#8217;s tools and APIs make it very easy to create and [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.openworldforum.org/">Open World Forum</a> 2011 edition took place last week in Paris. I was invited to present a <a href="http://www.openworldforum.org/Conferences/Configuration-management-automating-and-rationalizing-server-setup-with-CFEngine-3">workshop</a> in the Cloud Computing track.</p>
<p>This gave me the opportunity to outline the importance of optimizing the &#8220;setup&#8221; phase of machines when using cloud computing.</p>
<p>Today&#8217;s tools and APIs make it very easy to <em>create</em> and <em>destroy</em> instances, but every time you do start a new instance, you&#8217;ve got to actually <em>set it up</em> to the state where it&#8217;s ready to do what you need (ie, be a web server, load balancer, database, whatever&#8230;).</p>
<p>This is an important phase to <em>optimize</em>: it&#8217;s the one where you&#8217;re paying for, but not yet able to use, the service <img src='http://blog.normation.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Three approaches seem to co-exist here:</p>
<ol>
<li><strong>Doing it manually:</strong> Obviously, this is one to avoid. Not only is it excessively time-consuming, but it&#8217;s also error-prone. (Ever tried doing the exact same complicated thing a dozen times over without making the odd mistake or going crazy?)</li>
<li><strong>Pre-configuring in static images:</strong> This is a very common approach. You know how you want things, so you set them up once, and make an image of that state (ISO, AMI, whatever&#8230;). You can then use your image to create your new machine just the way you want it, no time wasted! That&#8217;s great, but wears out over time -it&#8217;s a very <em>brittle</em> approach. If you ever need to change that configuration, not only will it take a while (get the image, change it, upload it again, etc&#8230;), but you also have no way of propagating the change to existing instances based on the old image.</li>
<li><strong>Using a configuration tool:</strong> That&#8217;s a deliberately vague title &#8211; I&#8217;m referring to any software approach to configuring your machine, be it a bunch of home grown scripts or a fully blown configuration management tool, such as <a href="http://cfengine.com/">CFEngine</a>, <a href="http://projects.puppetlabs.com/projects/puppet">Puppet</a> or <a href="http://www.opscode.com/chef/">Chef</a>.</li>
</ol>
<p>If you&#8217;ve read any of the previous posts on this blog, you&#8217;ll know that we strongly favor the last approach <img src='http://blog.normation.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Configuration management tools have many benefits over the previous approaches: using a dedicated, purpose-built tool to set up your servers means that you can reach new levels of <em>control</em> and <em>flexibility</em>, that you cannot achieve with static, brittle pre-built images. Need to make a change? Just update your reference configuration rules, and the change will be applied to all your instances, old and new, over the next few minutes.</p>
<p>Enough teasing, the slides below tell the rest of the story. I introduced the main tools I mentioned before, and provided a quick overview of how CFEngine works. Those at the session also got a sneak preview of our own open source project, <a href="http://www.rudder-project.org/">Rudder</a>, to be publicly announced very soon&#8230;</p>
<div style="width:510px" id="__ss_9447522"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/normation/configuration-management-automating-and-rationalizing-server-setup-with-cfengine-3-open-world-forum-2011-9447522" title="Configuration management: automating and rationalizing server setup with CFEngine 3 (Open World Forum 2011)" target="_blank">Configuration management: automating and rationalizing server setup with CFEngine 3 (Open World Forum 2011)</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9447522?rel=0" width="510" height="426" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/normation" target="_blank">Normation</a> </div>
</p></div>
<p>I&#8217;d welcome any comments on how you setup your cloud instances&#8230; and be happy to discuss all these topics at <a href="http://lanyrd.com/profile/jooooooon42/future/">another open source conference in the future</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2011/09/28/configuration-management-tools-for-cloud-computing-open-world-forum-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Gestion de configuration et disaster recovery avec CFEngine 3&#8243; aux RMLL 2011</title>
		<link>http://blog.normation.com/2011/07/08/gestion-de-configuration-et-disaster-recovery-avec-cfengine-3-aux-rmll-2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gestion-de-configuration-et-disaster-recovery-avec-cfengine-3-aux-rmll-2011</link>
		<comments>http://blog.normation.com/2011/07/08/gestion-de-configuration-et-disaster-recovery-avec-cfengine-3-aux-rmll-2011/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 12:58:03 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[CFEngine]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Disaster Recovery]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=380</guid>
		<description><![CDATA[Comme chaque début de juillet, nous [1] nous rendons aux RMLL (Rencontres Mondiales du Logiciel Libre). Ce millésime se tient à Strasbourg, du lundi 11 au mercredi 13 juillet pour les conférences techniques (un weekend grand public se tient avant). Nous y présenterons une session mercredi à 14:40 (au Patio, Amphi 3), en français, pour [...]]]></description>
			<content:encoded><![CDATA[<p>Comme chaque début de juillet, nous [1] nous rendons aux <a href="http://2011.rmll.info/">RMLL</a> (Rencontres Mondiales du Logiciel Libre). Ce millésime se tient à Strasbourg, du lundi 11 au mercredi 13 juillet pour les conférences techniques (un weekend grand public se tient avant).</p>
<p>Nous y présenterons une <a href="http://2011.rmll.info/Cfengine-3-gestion-de-configuration-et-disaster-recovery?lang=fr">session</a> mercredi à 14:40 (au Patio, Amphi 3), en français, pour raconter notre vécu de la gestion de désastre et comment la gestion de configuration nous a aidé à nous en remettre. On détaillera également les raisons de notre choix d&#8217;outil, qui a porté sur <a href="http://www.cfengine.com/">CFEngine 3</a>.</p>
<p>En espérant vous y voir nombreux ! N&#8217;hésitez pas à venir discuter avec nous, avant ou après la session, et nous nous ferons un plaisir de partager avec vous les dernières avancées que Normation a créé autour de la gestion de configuration&#8230;</p>
<p>[1] Toute l&#8217;équipe de Normation sera aux RMLL !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2011/07/08/gestion-de-configuration-et-disaster-recovery-avec-cfengine-3-aux-rmll-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formations Cfengine 3 à Paris et Bruxelles</title>
		<link>http://blog.normation.com/2011/05/10/formations-cfengine-3-a-paris-et-bruxelles/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=formations-cfengine-3-a-paris-et-bruxelles</link>
		<comments>http://blog.normation.com/2011/05/10/formations-cfengine-3-a-paris-et-bruxelles/#comments</comments>
		<pubDate>Tue, 10 May 2011 09:51:49 +0000</pubDate>
		<dc:creator>Jonathan CLARKE</dc:creator>
				<category><![CDATA[CFEngine]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[Brussels]]></category>
		<category><![CDATA[CFEngine3]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Paris]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=343</guid>
		<description><![CDATA[Cfengine 3 est un logiciel de gestion de configuration open source très puissant, permettant de gérer efficacement des parcs informatiques de toutes tailles. Comme la plupart des outils complexe, un temps d&#8217;apprentissage est nécessaire pour l&#8217;utiliser au mieux. Nous organisons des sessions de formation à Paris, les 15, 16 et 17 juin, et à Bruxelles [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cfengine.org/">Cfengine 3</a> est un logiciel de gestion de configuration open source très puissant, permettant de gérer efficacement des parcs informatiques de toutes tailles. Comme la plupart des outils complexe, un temps d&#8217;apprentissage est nécessaire pour l&#8217;utiliser au mieux.</p>
<p>Nous organisons des sessions de formation à Paris, les 15, 16 et 17 juin, et à Bruxelles les 4, 5 et 6 juillet.</p>
<p>Trois formules sont disponibles :</p>
<ul>
<li><strong>Matinée d&#8217;introduction à la gestion de configuration</strong> (demie-journée non-technique)</li>
<li><strong>Fondamentaux Cfengine</strong> (2 jours)</li>
<li><strong>Industrialisation Cfengine</strong> (Fondamentaux + 1 jour)</li>
</ul>
<p><a href="http://www.normation.com/#formations">Le détail du programme et les tarifs</a> sont disponibles sur notre site web.</p>
<p>L&#8217;inscription est ouverte, <a href="mailto:contact@normation.com?subject=Formation Cfengine">contactez-nous</a> pour vous inscrire. Plus que quelques jours pour profiter du tarif <em>early bird</em> !</p>
<p>Normation est <a href="http://cfengine.com/pages/partners">partenaire officiel de Cfengine AS</a>, et réalise des formations Cfengine certifiées à travers le monde.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2011/05/10/formations-cfengine-3-a-paris-et-bruxelles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cfengine 3.1.5 is nearly out, what can we expect from it?</title>
		<link>http://blog.normation.com/2011/04/28/cfengine-3-1-5-is-nearly-out-what-can-we-expect-from-it/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cfengine-3-1-5-is-nearly-out-what-can-we-expect-from-it</link>
		<comments>http://blog.normation.com/2011/04/28/cfengine-3-1-5-is-nearly-out-what-can-we-expect-from-it/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 21:10:44 +0000</pubDate>
		<dc:creator>Nicolas CHARLES</dc:creator>
				<category><![CDATA[CFEngine]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[CFEngine3]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[New features]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.normation.com/?p=299</guid>
		<description><![CDATA[Here at Normation, we use Cfengine 3 extensively for configuration management across Linux and Windows servers. Cfengine 3 is an open source project, and as every good open source project, the trunk version is always available (but not always very reliable) and stable versions are released regularly. Prior to the release of a new version, [...]]]></description>
			<content:encoded><![CDATA[<p>Here at Normation, we use <a href="http://www.cfengine.org">Cfengine 3</a> extensively for configuration management across Linux and Windows servers. Cfengine 3 is an <b>open source project</b>, and as every good open source project, the trunk version is always available (but not always very reliable) and stable versions are released regularly. Prior to the release of a new version, a <a href="http://www.cfengine.org/tarballs/download.php?file=cfengine-3.1.5b3.tar.gz">beta</a> version is available, for the <b>community</b> to test and rule out any bugs in the stable version.</p>
<p>We&#8217;ve been testing this <b>beta version</b>, and we are quite thrilled about it. This post won&#8217;t go through every detail of the changelog (<a href="http://www.blogcompiler.com/2011/02/12/cfengine-3-1-3-and-3-1-4-extended-change-log/">Eystein</a> is much better at it that I would be) but will run over the changes that improve our ways of using Cfengine. </p>
<p><span id="more-299"></span></p>
<h2>Bug fixes</h2>
<p>Some nagging bugs have been corrected, most notably:</p>
<ul>
<li><a href="https://cfengine.com/bugtracker/view.php?id=487">Bad class evaluation</a>: sometimes, the evaluation of complex class conditions was invalid</li>
<li><a href="https://cfengine.com/bugtracker/view.php?id=483">Segfault when calling a function in <i>trustkeyfrom</i> or <i>allowconnects</i></a>: when using the <i>escape</i> function in these lists, the agent or the server crashed</li>
<li><a href="https://cfengine.com/bugtracker/view.php?id=495">Sanitization of the environment variables</a>: on certain servers, the processes could not be correctly detected. It was because the number of columns of the output of program calls was limited to 80 columns by the system and not overriden in the agent.</li>
<li><a href="https://cfengine.com/bugtracker/view.php?id=532">Packages promises didn&#8217;t define resulting classes if an action was taken</a>: if a packages promise ran a command (ie, &#8220;aptitude install foo&#8221;), no classes were set on completion. Reasonable defaults are now used (a 0 return code means success, anything else is a failure), but can still be overridden.</li>
<li><a href="https://cfengine.com/bugtracker/view.php?id=489">Memory leak in the Cfengine server (cf-serverd) when opening many secure connections</a>: the memory consumption of the server daemon would jump occasionally if serving many clients.</li>
</ul>
<h2>New features</h2>
<h3>An improved release system</h3>
<p>For more robust and reliable stable versions, features have been added to industrialize building and releasing Cfengine itself: </p>
<ul>
<li>New scripts to automate release, so that human error is mostly ruled out;</li>
<li>Units test, to prevent regressions. Users are even <a href="http://source.cfengine.com/websvn/filedetails.php?repname=Cfengine+core&#038;path=%2Ftrunk%2Ftests%2FREADME">encouraged</a> to create unit tests;</li>
<li>Easier compilation from sources. The following lines are enough to build Cfengine from sources:
<pre class="brush: text">
# ./autogen.sh [CONFIGURE OPTIONS]
# make clean
# make
</pre>
</ul>
<h3>Improved reporting</b> in file editing</h3>
<p>Classes can be set on every atomic file edit, meaning that each line insertion, replacement or removal can be tracked and reported.</p>
<p>Let&#8217;s say we want to enforce the content of the file /tmp/foo to be two lines containing <i>foo</i> and <i>bar</i> (yes, this is just an example), and be able to know if these lines are added or were already there (for the sake of simplicity, we won&#8217;t bother about knowing if other lines were present). The following promise defines a class for each added line, for each repaired line and for each line that couldn&#8217;t be added:</p>
<p><script src="https://gist.github.com/927455.js?file=gistfile1.c"></script></p>
<p>Note the <b>reports</b> in the bundle edit_line which does the reporting based on the <b>classes</b> defined in the <b>insert_lines</b> promise.</p>
<p>The first execution would result in:</p>
<pre class="brush: text">
# /var/cfengine/bin/cf-agent -Kf ./test.cf
R: Line foo added
R: Line bar added
</pre>
<p>So each line has been added, the agent did its job. A second execution would result in :</p>
<pre class="brush: text">
# /var/cfengine/bin/cf-agent -Kf ./test.cf
R: Line foo already present
R: Line bar already present
</pre>
<p>Which proves that no one tampered with the file while we were away.</p>
<p>Of course, this level of detailed reporting would probably be excessive in a real-life example, but this illustrates how classes can be used to build your own custom reporting systems.</p>
<h3>Improved string manipulation</h3>
<p>Cfengine 3 has pretty neat functions to read files, parse them and extract data into arrays (for instance, reading data from /etc/passwd). The 3.1.5 version introduces the same neat functions for parsing <b>variables</b>, rather than files. And that&#8217;s really cool to be able to manipulate complex strings rather than files if you, like me, <b>generate your promises</b> with external tools.</p>
<p>Here is an example that illustrates this new feature: </p>
<ul>
<li>We generate a promise file, with a variable containing a list of users, and parameters for them</li>
<li>The variable is parsed and data are extracted in an array</li>
<li>The array is used to edit a passwd file, and a report is made if the line is added. This is a bit different from the ways described in a <a href="http://blog.normation.com/2011/03/21/why-we-use-cfengine-file-editing/">previous article on file editing</a>.</li>
</ul>
<p><script src="https://gist.github.com/946290.js?file=gistfile1.c"></script></p>
<p>Please note that the data are inserted in a <b>random order</b>. Indeed, the keys of an array are not ordered, being indexed by a kind of hash.</p>
<p>These new <b>features</b> are really great, and we&#8217;d like to thank the team behind Cfengine 3 and the Community for their great job at making Cfengine 3 a really powerful and reliable product.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.normation.com/2011/04/28/cfengine-3-1-5-is-nearly-out-what-can-we-expect-from-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

