<?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>Pomme::TAB</title> <atom:link href="http://www.pommetab.com/feed/" rel="self" type="application/rss+xml" /><link>http://www.pommetab.com</link> <description>Life cycle of Rija&#039;s random thoughts</description> <lastBuildDate>Sat, 10 Mar 2012 17:48:56 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Installing Puppet on Mac OS X</title><link>http://www.pommetab.com/2012/03/01/installing-puppet-on-macosx/</link> <comments>http://www.pommetab.com/2012/03/01/installing-puppet-on-macosx/#comments</comments> <pubDate>Thu, 01 Mar 2012 23:52:49 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[cloud]]></category> <category><![CDATA[devops]]></category> <category><![CDATA[dsl]]></category> <category><![CDATA[installation]]></category> <category><![CDATA[macosx]]></category> <category><![CDATA[puppet]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[sysadmin]]></category> <category><![CDATA[tutorial]]></category><guid isPermaLink="false">http://www.pommetab.com/?p=341</guid> <description><![CDATA[  Puppet Puppet is an open source (with enterprise version and support available)  client/server tool from Puppet Labs to facilitate the configuration and management of computer systems.   Written in ruby and available on many platforms, it offers a DSL that allows the &#8220;programming&#8221; of operational tasks across many machines. The DSL covers abstracting the [...]]]></description> <content:encoded><![CDATA[<p> </p><h1>Puppet</h1><p>Puppet is an open source (with enterprise version and support available)  client/server tool from Puppet Labs to facilitate the configuration and management of computer systems.</p><p> </p><p>Written in ruby and available on many platforms, it offers a DSL that allows the &#8220;programming&#8221; of operational tasks across many machines.</p><p>The DSL covers abstracting the computer resources in a extensible way, and providing structure like class, modules and graphs that a configuration language can manipulate.</p><p>The server is called <em>puppet master</em>. It controls  a <em>puppet agent</em> installed on client machines that are to be managed. In addition of master and agent, there are <em>puppet apply</em> for stand alone use and <em>puppet resource</em> for accessing the Puppet resource abstraction layer.</p><p>Its extensibility makes it future proof  and there are providers (implements a resource abstraction in Puppet) for many platforms like Virtual box VMs and Amazon EC2.</p><p>The communication between clients and server is secured using SSL certificates.</p><p>This post is mainly for me so I can remember how I did install Puppet on Mac OS X and to allow me to repeat it on many mac systems.</p><p>The install  basically boils down to running a script I put on Gist (assuming you want to install Puppet 2.7.11 with Facter 1.6.6 on a startup disk called Macintosh HD):</p><pre style="margin: 8px">bash -s 1.6.6 2.7.11 /Volumes/Macintosh\ HD &lt; &lt;(curl -s https://raw.github.com/gist/1895594/install_puppet_mac.sh)</pre><p>The remainder of the post describes the gory details. I&#8217;ll keep this post updated as I learn more about the idiosyncrasies of Puppet on Mac.</p><h1>Deployment environment</h1><p>I&#8217;ve tested these instructions on Mac OS X Lion (10.7.3)  and Mac OS X Snow Leopard (10.6.8).</p><div><h1>Downloading necessary files</h1><div>For Mac OS X, there is a .pkg available for Facter and Puppet downlable from Puppet Lab web site:</div><p><span style="font-family: monospace"><a href="http://downloads.puppetlabs.com/mac/"> http://downloads.puppetlabs.com/mac/</a></span></p><div><span style="font-family: monospace"> </span></div><div><span style="font-size: 12px">There are several versions available on that site.</span></div><p><span style="font-size: 12px;font-weight: normal">For the purpose of this post, </span><span style="font-size: 12px;font-weight: normal">we will consider version 1.6.6 and 2.7.11 for Facter and Puppet respectively.</span></p><p> </p><p>Puppet depends on Facter, so you need both. These are Mac OS X package on the site above.</p><p>There is another blog post [1] describing a way to install Puppet from source but the source links didn&#8217;t work for me when I tried.</p><h1>Installation steps</h1><h3>Unpack the dmg</h3><pre>hdiutil attach facter-1.6.6.dmg
hdiutil attach puppet-2.7.11.dmg</pre><h3>Install the pkg</h3><pre>sudo installer -package /Volumes/facter-1.6.6/facter-1.6.6.pkg -target /Volumes/Macintosh\ HD
sudo installer -package /Volumes/puppet-2.7.11/puppet-2.7.11.pkg -target /Volumes/Macintosh\ HD</pre><h3>Create the puppet group and user</h3><p>In other systems, the packaging may include the creation of the necessary puppet user and group.</p><p> </p><p>The packages for Mac OS X don&#8217;t do that. Although it&#8217;s possible to create these when starting the puppet master with the &#8211;mkusers options, I prefer create then before hand during installation.</p><pre> max_gid=$(dscl . -list /Groups gid | awk '{print $2}' | sort -ug | tail -1)
 new_gid=$((max_gid+1))
 dscl . create /Groups/puppet
 dscl . create /Groups/puppet gid $new_gid</pre><pre> max_uid=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
 new_uid=$((max_uid+1))
 dscl . create /Users/puppet
 dscl . create /Users/puppet UniqueID $new_uid
 dscl . -create /Users/puppet PrimaryGroupID $new_gid</pre><h3>Create directories</h3><pre>mkdir -p /var/lib/puppet
mkdir -p /etc/puppet/manifests
mkdir -p /etc/puppet/ssl</pre><h3>Change permission on directories</h3><pre>chown -R puppet:puppet  /var/lib/puppet
chown -R puppet:puppet  /etc/puppet</pre><h3>Create puppet.conf</h3><p>There are several sections, each relevant only to different puppet subcommands except for [main] which is global.</p><p> </p><p>If puppet is running on a client ensure the server property is set to the machine running puppet master instead of local hostname as here.</p><pre>echo "[main]
pluginsync = false
server = `hostname`

[master]
vardir = /var/lib/puppet
libdir = $vardir/lib
ssldir = /etc/puppet/ssl
certname = `hostname`</pre><pre>[agent]vardir = /var/lib/puppetlibdir = $vardir/libssldir = /etc/puppet/sslcertname = `hostname`</pre><pre>" &gt; /etc/puppet/puppet.conf</pre><h3 style="font-size: 1.17em">Putting it all together</h3><p>As I needed to install Puppet on more than one mac, I&#8217;ve made a script, inspired by trevmex&#8217;s tutorial [1], with all the steps together:</p><pre style="margin: 8px">bash -s 1.6.6 2.7.11 /Volumes/Macintosh\ HD &lt; &lt;(curl -s https://raw.github.com/gist/1895594/install_puppet_mac.sh)</pre><p>(Some of the steps uses sudo, so login password will be asked)</p><p> </p><p>In the example above  I&#8217;ve  passed the version of Facter, the version of Puppet and my system disk as parameter to the script.</p><p> </p><h3>Create a hello world puppet class</h3><p>Create the file /etc/puppet/manifests/site.pp with the following content:</p><pre>import "nodes"</pre><p>Create the file /etc/puppet/manifests/nodes.pp with the following content:</p><pre>node default {</pre><pre>  notify {"Hello World":;}</pre><pre>}</pre><p>Run the example:</p><pre>puppet apply /etc/puppet/manifests/site.pp</pre><p>you should see something like:</p><pre>notice: Hello world</pre><pre>notice: /Stage[main]//Node[default]/Notify[Hello world]/message: defined 'message' as 'Hello world'</pre><pre>notice: Finished catalog run in 0.02 seconds</pre><h1>Setting up puppet in client/server mode</h1><h3>Testing on the same computer</h3><p>Run the  puppet master</p><pre>sudo puppet master --verbose --no-daemonize</pre><p>You should see something like:</p><pre>notice: Starting Puppet master version 2.7.11</pre><p>Run the puppet agent in a separate shell by typing:</p><pre>sudo puppet agent --test --server=`hostname`</pre><p>You should see something like:</p><pre>info: Caching catalog for wall-e.home</pre><pre>info: Applying configuration version '1330800282'</pre><pre>notice: Hello world</pre><pre>notice: /Stage[main]//Node[default]/Notify[Hello world]/message: defined 'message' as 'Hello world'</pre><pre>info: Creating state file /var/lib/puppet/state/state.yaml</pre><pre>notice: Finished catalog run in 0.02 seconds</pre><h3>Between computers (or virtual machines)</h3><p>install Puppet using the shell script above.</p><p> </p><p>If you run the agent as above, you&#8217;ll get this error:</p><pre>Exiting; no certificate found and waitforcert is disabled</pre><p> </p><p>on the server, ensure puppet master is running, then</p><p>on the client machine, ensure puppet.conf has the server property set to the hostname of the server (or use &#8211;server in the command below) and do:</p><p><span style="font-family: monospace">sudo puppet agent –waitforcert 60 –test &#8211;debug &#8211;no-daemonize<br /></span></p><p>then on the server, on the a different shell than the on running puppet master, do:</p><pre><span class="kw2">sudo</span> puppetca <span class="re5">--sign</span> &lt;hostname of the client machine&gt;</pre><p> </p><p>until the command above is run on the server, the client will output the following message:</p><pre>notice: Did not receive certificate</pre><p>Then when the command to issue a certificate is run on the server, the server will output:</p><pre>notice: Signed certificate request for &lt;client host name&gt;</pre><pre>notice: Removing file Puppet::SSL::CertificateRequest mc-s056627.home at '/etc/puppet/ssl/ca/requests/&lt;client hostname&gt;.pem'</pre><p>and the client will output:</p><pre>info: Caching certificate for &lt;client hostname&gt;</pre><h3>Revoking a client&#8217;s privilege to connect to the Puppet master</h3><p>the client certificate&#8217;s name is the lowercase hostname</p><p> </p><p>To revoke a client&#8217;s certificate and thus deny it&#8217;s connection attempts, it&#8217;s a two  steps process.</p><p>First on the server, revoke the certificates:</p><pre>sudo puppetca --revoke &lt;client host name&gt;</pre><p>Then on the client, remove the certificates:</p><pre>sudo rm -rf /etc/puppet/ssl</pre><p>In some circumstances, you will need to use the following command to completely remove the client certificate from the master:</p><pre>sudo puppet cert clean &lt;client hostname&gt;</pre><h1>Gotchas</h1><h4>Ruby errors:</h4><p>If you encounter one of the following errors:</p><pre>/usr/bin/puppet:3:in `require': no such file to load -- puppet/util/command_line (LoadError)        from /usr/bin/puppet:3/usr/sbin/puppetd:3:in `require': no such file to load -- puppet/application/agent (LoadError)        from /usr/sbin/puppetd:3</pre><p>it&#8217;s probably because you&#8217;ve got rvm installed.</p><p> </p><p>You can make the problem go away by using system ruby:</p><pre>rvm use system</pre><p>I&#8217;m not happy about that solution, but I haven&#8217;t find a better way so far.</p><h4>Error about plugins when running the puppet agent:</h4><p>If you see this error in the agent log:</p><pre>info: Retrieving plugin</pre><pre>err: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://wall-e.home/plugins</pre><p>The puppet master log would correspondingly display this:</p><pre>info: Could not find filesystem info for file 'plugins' in environment production</pre><pre>info: Could not find file_metadata for 'plugins'</pre><p>ensure you&#8217;ve set pluginsync to false in the puppet.conf: pluginsync = false</p><h4>Certificates errors:</h4><p>so far, I solved them by deleting the /etc/puppet/ssl directory on client and master</p><p> </p><h1>What if problems occur</h1><ul><li>use &#8211;debug and &#8211;verbose options to puppet commands</li><li>use &#8211;configprint to dump the value of a config property. E.g: puppet apply &#8211;configprint modulepath</li><li>use the notify keyword in your classes to print custom debug information</li><li>check the documentation</li></ul><h1 style="font-size: 2em">Links</h1><p>[1] <a href="http://trevmex.com/post/850520511/bootstrapping-puppet-on-mac-os-x">http://trevmex.com/post/850520511/bootstrapping-puppet-on-mac-os-x</a></p><p> </p><p>Language guide: <a href="http://docs.puppetlabs.com/learning/modules1.html">http://docs.puppetlabs.com/guides/language_guide.html</a></p><p>Modules and classes: <a href="http://docs.puppetlabs.com/learning/modules1.html">http://docs.puppetlabs.com/learning/modules1.html</a></p><p>Core Types Cheat sheet: <a href="http://docs.puppetlabs.com/puppet_core_types_cheatsheet.pdf">http://docs.puppetlabs.com/puppet_core_types_cheatsheet.pdf</a></p><p> </p></div><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F1MVNEA&amp;text=Installing%20Puppet%20on%20Mac%20OS%20X&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2012%2F03%2F01%2Finstalling-puppet-on-macosx%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2012/03/01/installing-puppet-on-macosx/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Introduction to Event-Driven Programming and the Reactor Design Pattern</title><link>http://www.pommetab.com/2011/02/03/introduction-to-event-driven-programming-and-the-reactor-design-pattern/</link> <comments>http://www.pommetab.com/2011/02/03/introduction-to-event-driven-programming-and-the-reactor-design-pattern/#comments</comments> <pubDate>Thu, 03 Feb 2011 19:25:46 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[concurrency]]></category> <category><![CDATA[designpattern]]></category> <category><![CDATA[eventdriven]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[reactor]]></category><guid isPermaLink="false">http://www.pommetab.com/?p=321</guid> <description><![CDATA[I gave this 5mn lightning talk to my team: Presentation on Scribd I will post more on the subject in the future: One of my personal project involves PubSubHubbub and EventMachine and I&#8217;m becoming curious&#124;excited about Javascript&#8217;s Node.JS.]]></description> <content:encoded><![CDATA[<p>I gave this 5mn lightning talk to my team:</p><p><a title="Introduction to the Reactor Design Pattern" href="http://www.scribd.com/doc/48116114/Introduction-to-the-Reactor-design-pattern">Presentation on Scribd</a></p><p>I will post more on the subject in the future:</p><p>One of my personal project involves <a title="PubSubHubbub" href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a> and <a title="Ruby Event Machine" href="http://rubyeventmachine.com/">EventMachine</a> and I&#8217;m becoming curious|excited about Javascript&#8217;s <a href="http://nodejs.org/">Node.JS</a>.</p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F452ClP&amp;text=Introduction%20to%20Event-Driven%20Programming%20and%20the%20Reactor%20Design%20Pattern&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2011%2F02%2F03%2Fintroduction-to-event-driven-programming-and-the-reactor-design-pattern%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2011/02/03/introduction-to-event-driven-programming-and-the-reactor-design-pattern/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Networking in Debian 4.0 (Etch) VMWare images</title><link>http://www.pommetab.com/2009/04/19/networking-in-debian-40-etch-vmware-images/</link> <comments>http://www.pommetab.com/2009/04/19/networking-in-debian-40-etch-vmware-images/#comments</comments> <pubDate>Sun, 19 Apr 2009 08:21:58 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Software]]></category> <category><![CDATA[debian]]></category> <category><![CDATA[etch]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[networking]]></category> <category><![CDATA[virtualization]]></category> <category><![CDATA[vmware]]></category><guid isPermaLink="false">http://www.pommetab.com/2009/04/19/networking-in-debian-40-etch-vmware-images/</guid> <description><![CDATA[Recently I&#8217;ve come across a couple of vmware images of Debian Linux 4.0 (Etch) where the network didn&#8217;t work. A call to ifconfig didn&#8217;t show &#8216;eth0&#8242; at all. I&#8217;ve tried to compare the configuration difference between a successully running Debian Linux 5.0 (Lenny) and these Etch image without success. I found the solution by chance [...]]]></description> <content:encoded><![CDATA[<p>Recently I&#8217;ve come across a couple of vmware images of Debian Linux 4.0 (Etch) where the network didn&#8217;t work. A call to ifconfig didn&#8217;t show &#8216;eth0&#8242; at all.</p><p>I&#8217;ve tried to compare the configuration difference between a successully running Debian Linux 5.0 (Lenny) and these Etch image without success.</p><p>I found the solution by chance on a vmware image vendor&#8217;s web site:</p><p><tt>rm /etc/udev/rules.d/z25_persistent-net.rules &amp;&amp; reboot</tt></p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F29Lx5c&amp;text=Networking%20in%20Debian%204.0%20%28Etch%29%20VMWare%20images&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2009%2F04%2F19%2Fnetworking-in-debian-40-etch-vmware-images%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2009/04/19/networking-in-debian-40-etch-vmware-images/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Git</title><link>http://www.pommetab.com/2008/10/17/git/</link> <comments>http://www.pommetab.com/2008/10/17/git/#comments</comments> <pubDate>Fri, 17 Oct 2008 07:09:30 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[gitvcs subversion bash profile source code development]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/10/17/git/</guid> <description><![CDATA[I&#8217;ve been kind of working on a git tutorial for a while now. I&#8217;ve recently realized that there are two different work flows ( git+subversion&#160; and github.com) that I use regularly and that trying to describe them both in one tutorial made it quite confusing. I&#8217;m going to remake them in two tutorials instead of [...]]]></description> <content:encoded><![CDATA[<p>I&#8217;ve been kind of working on a git tutorial for a while now.<br /> I&#8217;ve recently realized that there are two different work flows ( git+subversion&nbsp; and github.com) that I use regularly and that trying to describe them both in one tutorial made it quite confusing.</p><p>I&#8217;m going to remake them in two tutorials instead of one. In the meantime here&#8217;s the content of my bash profile with the elements I use to smooth my daily experience of git:</p><pre>
#### start Git #####
alias g='git'
alias gco='git checkout'
alias gma='git checkout master'
alias gst='git status'
alias glo='git log'
alias gca='git commit -a'
alias gsd='git svn dcommit'
alias gcav='git commit -v -a'
alias squash='git merge --squash'
alias gpatch='git format-patch'
alias saw='git branch -D'
alias rollback='git reset --hard git-svn'
alias uncommit='git reset --mixed HEAD'
alias fixlastcommit='git commit --amend'
alias branches='git branch -a'
alias grow='git checkout -b'
alias plant='git svn init'
alias gclone='git clone'
alias hide='git stash'
alias unhide='git stash apply'

export PS1='\w $(git branch &amp;&gt;/dev/null; if [ $? -eq 0 ]; then \
echo "(\[\033[00m\]$(git branch | grep ^*|sed s/\*\ //)) "; fi)\$\[\033[00m\] '

#### end Git #####
</pre><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F29Lx5c&amp;text=Git&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F10%2F17%2Fgit%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/10/17/git/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Update to the MogileFS setup guide</title><link>http://www.pommetab.com/2008/09/30/update-to-the-mogilefs-setup-guide/</link> <comments>http://www.pommetab.com/2008/09/30/update-to-the-mogilefs-setup-guide/#comments</comments> <pubDate>Tue, 30 Sep 2008 14:09:59 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[Sport]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[danga]]></category> <category><![CDATA[distributed]]></category> <category><![CDATA[documentstore]]></category> <category><![CDATA[files]]></category> <category><![CDATA[filesystem]]></category> <category><![CDATA[highavailability]]></category> <category><![CDATA[mogilefs]]></category> <category><![CDATA[network]]></category> <category><![CDATA[perl]]></category> <category><![CDATA[storage]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/09/30/update-to-the-mogilefs-setup-guide/</guid> <description><![CDATA[I&#8217;ve done minor changes to  the installaion guide for MogileFS following feedback from Craig. In addition, he noticed that on some Xen VMs, you may encounter the following error: ERROR: Need to be root to increase max connections in which case, you will need to update /etc/security/limits.conf with the values: mogile soft nofile 65535 mogile [...]]]></description> <content:encoded><![CDATA[<p>I&#8217;ve done minor changes to  the installaion guide for MogileFS following feedback from Craig.</p><p>In addition, he noticed that on some Xen VMs, you may encounter the following error:</p><p><code><br /> ERROR: Need to be root to increase max connections<br /> </code></p><p>in which case, you will need to update /etc/security/limits.conf with the values:</p><p><code><br /> mogile soft nofile 65535<br /> mogile hard nofile 65535<br /> </code></p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F2dXN0M&amp;text=Update%20to%20the%20MogileFS%20setup%20guide&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F09%2F30%2Fupdate-to-the-mogilefs-setup-guide%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/09/30/update-to-the-mogilefs-setup-guide/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Testing flash.now with rspec</title><link>http://www.pommetab.com/2008/09/26/testing-flashnow-with-rspec/</link> <comments>http://www.pommetab.com/2008/09/26/testing-flashnow-with-rspec/#comments</comments> <pubDate>Fri, 26 Sep 2008 12:46:38 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[ruby rails rubyonrails rspec testing]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/09/26/testing-flashnow-with-rspec/</guid> <description><![CDATA[I&#8217;ve spent a couple of hour trying to test a Rails controller. More specifically one of the action is suppose to display flash.now notice and I want to test that and it works. It took me awhile and some googling to realise that the content of a flash.now is deleted after the action, so that [...]]]></description> <content:encoded><![CDATA[<p>I&#8217;ve spent a couple of hour trying to test a Rails controller. More specifically one of the action is suppose to display flash.now notice and I want to test that and it works. It took me awhile and some googling to realise that the content of a flash.now is deleted after the action, so that you cannot test it the same way as a normal flash (that last for the duration of the current action and the next one).</p><p>I came an across an elegant solution  to this problem as decribed on <a href="http://rhnh.net/2008/04/19/testing-flash-now-with-rspec" title="testing flash now with rspec">this blog</a>.</p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F29Lx5c&amp;text=Testing%20flash.now%20with%20rspec&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F09%2F26%2Ftesting-flashnow-with-rspec%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/09/26/testing-flashnow-with-rspec/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Setting up high availability storage with MogileFS</title><link>http://www.pommetab.com/2008/07/03/setting-up-high-availability-storage-with-mogilefs/</link> <comments>http://www.pommetab.com/2008/07/03/setting-up-high-availability-storage-with-mogilefs/#comments</comments> <pubDate>Thu, 03 Jul 2008 17:28:52 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[availability]]></category> <category><![CDATA[danga]]></category> <category><![CDATA[data]]></category> <category><![CDATA[distributed]]></category> <category><![CDATA[grid]]></category> <category><![CDATA[ha]]></category> <category><![CDATA[mogilefs]]></category> <category><![CDATA[performance]]></category> <category><![CDATA[perl]]></category> <category><![CDATA[perlbal]]></category> <category><![CDATA[resilience]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[storage]]></category> <category><![CDATA[ubuntu]]></category> <category><![CDATA[xen]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/07/03/setting-up-high-availability-storage-with-mogilefs/</guid> <description><![CDATA[1. Environment I used 4 Xen virtual images running ubuntu 8.04. Two will run a tracker and the database, the other two will be the storage nodes. Lets say the IP addresses will be: 192.168.0.195 192.168.0.196 192.168.0.197 192.168.0.198 2. Initial Setup Install iptables: apt-get install iptables then apply initial setup iptables -A INPUT -i lo [...]]]></description> <content:encoded><![CDATA[<p><strong> 1. Environment</strong></p><p>I used 4 Xen virtual images running ubuntu 8.04.<br /> Two will run a tracker and the database, the other two will be the storage nodes.</p><p>Lets say the IP addresses will be:</p><p><code><br /> 192.168.0.195<br /> 192.168.0.196<br /> 192.168.0.197<br /> 192.168.0.198<br /> </code></p><p><strong>2. Initial Setup</strong></p><p>Install iptables:</p><p><code><br /> apt-get install iptables<br /> </code></p><p>then apply initial setup</p><p><code><br /> iptables -A INPUT -i lo -j ACCEPT<br /> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br /> iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br /> iptables -A INPUT -j DROP<br /> iptables-save -c &gt; /etc/iptables.rules<br /> </code><br /> you can save the rule for beyond machine reboot by adding the two lines below to /etc/network/interfaces<br /> <code><br /> pre-up    iptables-restore &lt; /etc/iptables.rules<br /> post-down iptables-save -c &gt; /etc/iptables.rules<br /> </code></p><p>install mysql and wget and perldoc</p><p><code><br /> apt-get install mysql-server<br /> apt-get install wget<br /> apt-get install perl-doc<br /> apt-get install libio-aio-perl<br /> apt-get install subversion<br /> apt-get install build-essential<br /> </code></p><p><strong>3. Common steps for installing MogileFS</strong></p><p>retrieve the code (ripped of the how to wiki):</p><p><code><br /> cd /usr/local/src<br /> mkdir mogilefs-src<br /> cd mogilefs-src<br /> svn checkout http://code.sixapart.com/svn/mogilefs/trunk<br /> </code></p><p>install perl dependencies</p><p><code><br /> cpan Danga::Socket<br /> cpan Gearman::Client<br /> cpan Gearman::Server<br /> cpan Gearman::Client::Async<br /> cpan Net::Netmask<br /> cpan Perlbal<br /> cpan IO::WrapTie<br /> </code></p><p>install the servers:</p><p><code><br /> cd mogilefs-src/trunk/server<br /> perl Makefile.PL<br /> make<br /> make test<br /> make install<br /> </code></p><p>At the moment the test seems to need mysql to be installed and user root without password, so some tests are skipped</p><p>you will need to install MogileFS::Client<br /> (the tests expect a tracker to run locally on port 7001)</p><p><code><br /> cd mogilefs-src/trunk/api/perl/MogileFS-Client<br /> perl Makefile.PL<br /> make<br /> make test<br /> make install<br /> </code></p><p>and some admin tools:</p><p><code><br /> cd mogilefs-src/trunk/utils<br /> perl Makefile.PL<br /> make<br /> make test<br /> make install<br /> </code></p><p><strong>4. Tracker install</strong></p><p>create  the database:</p><p><code><br /> mysql -uroot -p<br /> mysql&gt; CREATE DATABASE mogilefs;<br /> mysql&gt; GRANT ALL ON mogilefs.* TO 'mogile'@'%';<br /> mysql&gt; SET PASSWORD FOR 'mogile'@'%' = OLD_PASSWORD( 'sekrit' );<br /> mysql&gt; FLUSH PRIVILEGES;<br /> mysql&gt; quit<br /> </code></p><p>Create the schema</p><p><code><br /> ./mogdbsetup  --dbname=mogilefs --dbuser=mogile --dbpassword=sekrit<br /> </code></p><p>(admin privilege is required for the initial setup, so if you&#8217;re admin user is not root with no password, you will need to specify  &#8211;dbroopassword and &#8211;dbrootuser)</p><p>create /etc/mogilefs/mogilefsd.conf:</p><p><code><br /> db_dsn DBI:mysql:mogilefs<br /> db_user mogile<br /> db_pass ******<br /> conf_port 7001<br /> listener_jobs 5<br /> </code></p><p>create a mogile user:</p><p><code><br /> adduser mogile<br /> </code></p><p>and starts the tracker under that user:</p><p><code><br /> su - mogile<br /> mogilefsd<br /> </code></p><p>open a port for the tracker</p><p><code><br /> iptables -A INPUT -p tcp --dport 7001 -j ACCEPT</code></p><p><strong>5. Storage node</strong></p><p>On the storage server, create a configuration file at /etc/mogilefs/mogstored.conf with the following:</p><p><code><br /> httplisten=0.0.0.0:7500<br /> mgmtlisten=0.0.0.0:7501<br /> docroot=/var/mogdata<br /> </code></p><p>open a port:</p><p><code><br /> iptables -A INPUT -p tcp --dport 7500 -j ACCEPT</code></p><p><code>iptables -A INPUT -p tcp --dport 7501 -j ACCEPT</code><br /> <code> </code></p><p>register a new storage node:</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 host add mogilestorage --ip=192.168.0.197 --port=7500 --status=alive<br /> </code></p><p>it should now appears in the list:</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 host list<br /> </code></p><p>Add a device to the storage:</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 device add mogilestorage 1<br /> </code></p><p>and create the directory:</p><p><code><br /> mkdir -p /var/mogdata/dev1</code></p><p>make sure /var/mogdata/* is owned by mogile:mogile</p><p><code><br /> chown -R mogile:mogile /var/mogdata/*<br /> </code></p><p><strong>6. Starting the storage server</strong></p><p>as root:<br /> <code><br /> mogstored --daemon<br /> </code></p><p><strong>7. Starting the tracker</strong></p><p><code><br /> su - mogile<br /> mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon<br /> exit<br /> </code></p><p><strong>8. Testing</strong></p><p>check that mogilefs components are online:</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 check<br /> </code></p><p>Quick sanity check of the storage daemon:</p><p><code><br /> ~/Projects/mogilefs $ telnet 192.168.0.197 7500<br /> Trying 192.168.0.197...<br /> Connected to 192.168.0.197.<br /> Escape character is '^]'.<br /> PUT /dev1/test HTTP/1.0<br /> Content-length: 4<br /> \n<br /> test<br /> HTTP/1.0 200 OK<br /> Content-Type: text/html<br /> Content-Length: 18<br /> Server: Perlbal<br /> Connection: close<br /> 200 - OK<br /> Connection closed by foreign host.<br /> </code></p><p>create a domain</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 domain add mydomain<br /> </code></p><p>and a class</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 class add mydomain images<br /> </code></p><p>Quick sanity check of the tracker:</p><p><code><br /> root@bbc-01:~# mogtool --trackers=127.0.0.1:7001 --domain=mydomain --class=images inject osname osname<br /> </code></p><p>on the store node, check /var/mogdata/dev1/0/000/000 for a file named xxxxxxxxxx.fid .<br /> If the file exists it&#8217;s all good.</p><p><strong>9. setting up the second pair</strong></p><p>Replay instructions 1 to 8, then:</p><p>when you&#8217;ve got the second storage set up, you will need to register the second storage and its device to all trackers:</p><p><code><br /> mkdir -p /var/mogdata/dev2<br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 host add mogilestorage2 --ip=192.168.0.198 --port=7500 --status=alive<br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001 device add mogilestorage2 2<br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.196:7001 host add mogilestorage2 --ip=192.168.0.198 --port=7500 --status=alive<br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.196:7001 device add mogilestorage2 2<br /> </code></p><p>you will also need to register the first storage and its device to the second tracker:</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.196:7001 host add mogilestorage --ip=192.168.0.197 --port=7500 --status=alive<br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.196:7001 device add mogilestorage 1<br /> </code></p><p>sanity check the installation:</p><p><code><br /> mogadm --lib=/usr/local/share/perl/5.8.8 --trackers=192.168.0.195:7001,192.168.0.196:7001 check</code></p><p>Checking trackers&#8230;<br /> 192.168.0.195:7001 &#8230; OK<br /> 192.168.0.196:7001 &#8230; OK</p><p>Checking hosts&#8230;<br /> [ 1] mogilestorage2 &#8230; OK<br /> [ 2] mogilestorage &#8230; OK</p><p>Checking devices&#8230;<br /> host device         size(G)    used(G)    free(G)   use%   ob state   I/O%<br /> &#8212;- &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212; &#8212;&#8212;&#8212;- &#8212;&#8211;<br /> [ 1] dev2             9.921      0.757      9.164   7.63%  writeable   0.0<br /> [ 2] dev1             9.921      0.600      9.321   6.05%  writeable   0.0<br /> &#8212;- &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;<br /> total:    19.842      1.357     18.485   6.84%</p><p>And voila.</p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F2RDqHO&amp;text=Setting%20up%20high%20availability%20storage%20with%20MogileFS&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F07%2F03%2Fsetting-up-high-availability-storage-with-mogilefs%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/07/03/setting-up-high-availability-storage-with-mogilefs/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Ruby on Rails with_scope and returning</title><link>http://www.pommetab.com/2008/06/19/ruby-on-rails-with_scope-and-returning/</link> <comments>http://www.pommetab.com/2008/06/19/ruby-on-rails-with_scope-and-returning/#comments</comments> <pubDate>Thu, 19 Jun 2008 21:01:54 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[ruby rails rubyonrails syntax code programming language]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/06/19/ruby-on-rails-with_scope-and-returning/</guid> <description><![CDATA[This week in my current project I&#8217;ve come across two ruby constructs that were new to me. with_scope and returning. Found a blog where they are both nicely explained: with_scope returning]]></description> <content:encoded><![CDATA[<p>This week in my current project I&#8217;ve come across two ruby constructs that were new to me.</p><p>with_scope and returning.</p><p>Found a blog where they are both nicely explained:</p><ul><li><a href="http://errtheblog.com/posts/39-withscope-with-scope" title="with scope">with_scope</a></li><li><a href="http://errtheblog.com/posts/27-quickly-returning" title="returning">returning</a></li></ul><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F29Lx5c&amp;text=Ruby%20on%20Rails%20with_scope%20and%20returning&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F06%2F19%2Fruby-on-rails-with_scope-and-returning%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/06/19/ruby-on-rails-with_scope-and-returning/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Beach close-ups (cc)</title><link>http://www.pommetab.com/2008/04/09/beach-close-ups-cc/</link> <comments>http://www.pommetab.com/2008/04/09/beach-close-ups-cc/#comments</comments> <pubDate>Wed, 09 Apr 2008 14:55:36 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Photography]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/04/09/beach-close-ups-cc/</guid> <description><![CDATA[Beach close-ups (cc) Originally uploaded by Dunstan Orchard Flickr has today announced support for video media. I&#8217;m impressed on how the integration is done, it&#8217;s the same experience as for photo plus the added value of what they call &#8220;long photo&#8221;. Very elegant indeed.]]></description> <content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;"> <object type="application/x-shockwave-flash" width="260" height="195" data="http://www.flickr.com/apps/video/stewart.swf?v=1.167" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=ecbcf5be96&amp;photo_id=2398525947&amp;show_info_box=true"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=1.167"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=1.167" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;photo_secret=ecbcf5be96&amp;photo_id=2398525947&amp;flickr_show_info_box=true" height="195" width="260"></embed></object><br /> <br /> <span style="font-size: 0.9em; margin-top: 0px;"><br /> <a href="http://www.flickr.com/photos/dunstan/2398525947/">Beach close-ups (cc)</a><br /> <br /> Originally uploaded by <a href="http://www.flickr.com/people/dunstan/">Dunstan Orchard</a><br /> </span></div><p>Flickr has today <a href="http://blog.flickr.net/en/2008/04/09/video-on-flickr-2/">announced</a> support for video media.<br /> I&#8217;m impressed on how the integration is done, it&#8217;s the same experience as for photo plus the added value of what they call &#8220;long photo&#8221;. <br /> Very elegant indeed.<br /> <br clear="all" /></p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F29Lx5c&amp;text=Beach%20close-ups%20%28cc%29&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F04%2F09%2Fbeach-close-ups-cc%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/04/09/beach-close-ups-cc/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Microformats and Safari</title><link>http://www.pommetab.com/2008/03/19/microformats-and-safari/</link> <comments>http://www.pommetab.com/2008/03/19/microformats-and-safari/#comments</comments> <pubDate>Tue, 18 Mar 2008 23:08:32 +0000</pubDate> <dc:creator>rmenage</dc:creator> <category><![CDATA[Semantic]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[microformats safari firefox semanticweb plugin hcal ica]]></category><guid isPermaLink="false">http://www.pommetab.com/2008/03/19/microformats-and-safari/</guid> <description><![CDATA[Firefox users have been able to use microformats-enabled web sites (like the schedules on Upcoming or BBC Programmes) for a long time thanks to a couple of extensions (Operator and Tails Exports). Now coming alongside the release of Safari 3.1, there&#8217;s a new Safari plugin that allow the parsing of microformats for integration in various [...]]]></description> <content:encoded><![CDATA[<p>Firefox users have been able to use microformats-enabled web sites (like the schedules on <a href="http://upcoming.yahoo.com/">Upcoming</a> or <a href="http://www.bbc.co.uk/programmes">BBC Programmes</a>) for a long time thanks to a couple of extensions (<a href="https://addons.mozilla.org/en-US/firefox/addon/4106">Operator</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/2240">Tails Exports</a>).</p><p>Now coming alongside the release of <a href="http://www.apple.com/safari/">Safari 3.1</a>, there&#8217;s a new <a href="http://zappatic.net/safarimicroformats/index.html">Safari plugin</a> that allow the parsing of microformats for integration in various Mac OS X applications (Adress book, iCal).</p><p>For Mac OSX users, the integration with Address Book and iCal could make Safari a better microformat reader than Firefox. I cannot test the plugin myself as I don&#8217;t have Leopard which is a requirement.</p><p>Alternatively the latest version of my feed reader <a href="http://ranchero.com/">NetNewsWire</a> can also parse microformats but it requires you (obviously by the very definition of <a href="http://microformats.org/">microformats</a>) to render the web page in Netnewswire not just the summary.</p><p>Safari 3.1 is available for Tiger and Windows though.</p><div class="tw_button" style=";float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fsu.pr%2F29Lx5c&amp;text=Microformats%20and%20Safari&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pommetab.com%2F2008%2F03%2F19%2Fmicroformats-and-safari%2F"  class="twitter-share-button" target="_blank" style="width:55px;height:22px;background:transparent url('http://www.pommetab.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded> <wfw:commentRss>http://www.pommetab.com/2008/03/19/microformats-and-safari/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching using disk
Object Caching 869/1020 objects using disk
Content Delivery Network via Amazon Web Services: CloudFront: Amazon Web Services: S3: d1fefjkdbyasau.cloudfront.net

Served from: www.pommetab.com @ 2012-05-18 17:49:29 -->
