<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>JavaCruft</title>
	<atom:link href="http://javacruft.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://javacruft.wordpress.com</link>
	<description>Pondering the cruft of the Java world</description>
	<lastBuildDate>Sat, 11 Feb 2012 16:25:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='javacruft.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>JavaCruft</title>
		<link>http://javacruft.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://javacruft.wordpress.com/osd.xml" title="JavaCruft" />
	<atom:link rel='hub' href='http://javacruft.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Automating Openstack Testing on Ubuntu</title>
		<link>http://javacruft.wordpress.com/2012/02/08/automating-openstack-testing-on-ubuntu/</link>
		<comments>http://javacruft.wordpress.com/2012/02/08/automating-openstack-testing-on-ubuntu/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 10:11:55 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Juju]]></category>
		<category><![CDATA[Openstack]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[precise development]]></category>
		<category><![CDATA[server team]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=286</guid>
		<description><![CDATA[During the Ubuntu precise development cycle the Canonical Platform Server Team have been working on automating testing of Openstack on Ubuntu. The scope of this work was: Per-commit testing of Openstack trunk to evaluate the current state of the upstream codebase in-conjunction with the current packaging in Ubuntu precise and the current Juju charms to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=286&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>During the Ubuntu precise development cycle the Canonical Platform Server Team have been working on automating testing of Openstack on Ubuntu.</p>
<p>The scope of this work was:</p>
<ol>
<li>Per-commit testing of Openstack trunk to evaluate the current state of the upstream codebase in-conjunction with the current packaging in Ubuntu precise and the current Juju charms to deploy Openstack.</li>
<li>SRU testing for Openstack Diablo on Ubuntu 11.10.</li>
</ol>
<p>Openstack do a lot of pre-commit testing through the use of <a href="http://review.openstack.org">gerrit</a> with <a href="http://jenkins.openstack.org">Jenkins</a>; we wanted to supplement this with Ubuntu focused testing to provide another dimension to the testing already completed upstream.</p>
<p>So grab a coffee and make yourself comfortable; this is not a short read&#8230;.</p>
<p><strong>Lab Setup</strong></p>
<p>The Ubuntu Openstack QA lab consists of 12 servers; the primary server in the solution is an Ubuntu 11.10 install providing the following functions:</p>
<ol>
<li><a href="http://juju.ubuntu.com">Juju</a> &#8211; used to deploy Openstack charms in the Lab</li>
<li>Cobbler to support server provisioning (using the Ubuntu Orchestra packages in Oneiric)</li>
<li>Jenkins CI &#8211; provides triggering based on upstream commits to github repositories and general job control and reporting.</li>
<li>Schroots for Oneiric and Precise for building packages locally</li>
<li>A reprepro managed local archive for Oneiric and Precise</li>
<li>Squid based archive caching to reduce installation times in the lab</li>
</ol>
<p>This server also acts at the gateway into and out of the Lab (it&#8217;s setup as a NAT router).</p>
<p>The other 11 servers are registered in Cobbler; All servers are connected to a Sentry CDU (Cabinet Distribution Unit) which allows full power control from Cobbler &#8211; thanks goes to Andres Rodriguez for developing the required fence component for Cobbler to support this type of CDU.</p>
<p><strong>Preseeded LVM Snapshot Installs</strong></p>
<p>To initiate a new integration test run requires all machines to be powered down and re-provisioned from scratch.  It is essential that our deployment and test runs can cope the frequency of upstream commits, particularly as the frequency increases as Openstack approaches milestones and releases.   After getting the initial lab setup in place, we were able to tear down all machines, re-provision and deploy Openstack in ~30mins.</p>
<p>It was important that we are able to minimize the time taken to complete the testing cycle.   To do so, we&#8217;ve employed the use of LVM snapshotting and restoration of the root partition during the the netboot installation.   The process is as follows:</p>
<ol>
<li>Test run begins</li>
<li>Juju deploys a service (i.e. nova-compute)</li>
<li>A machine is netbooted and a preseeded LVM-based Ubuntu installation takes place onto /dev/qalab/root</li>
<li>At the end of the installation, the root filesystem is moved to /dev/qalab/pristine-[release]-root and a snapshot created at /dev/qalab/root</li>
<li>The machine reboots, runs Juju and deploys nova-compute as pat of the rest of the Openstack deployment. This deployment is smoke tested.</li>
<li>The next test run begins.  All machines are terminated. Juju redeploys nova-compute, a machine is netbooted and Ubuntu installation kicks off.</li>
<li>The installation checks for the existence of a logical volume at /dev/qalab/pristine-[release]-root.  If it exists, it creates a new snapshot at /dev/qalab/root and reboots. If it does not, continues with installation and goto step 4.</li>
<li>System reboots, Juju installs and redeploys nova-compute to a fresh Ubuntu installation.</li>
</ol>
<p>This process takes place on all nodes in parallel.  With it in place, we were able to cut down the time it took to tear-down and re-provision a node from ~30 minutes to 10 to 15 minutes depending on the service being deployed.</p>
<p>By taking this approach we are also minimize the chance of any nodes hitting an archive inconsistency during installation. This is a known issue when deploying the development release and halts installation on any node that hits it, failing the entire deployment.</p>
<p>All of this is embedded in debian-installer preseeds via Cobbler snippets.  The snippets and kick starts are available at lp:~openstack-ubuntu-testing/+junk/cobbler-lvm-snapshot.</p>
<p>In the future, we&#8217;ll be investigating the use of kexec as an alternative to reboot after snapshot restoration to reduce the time spent waiting on servers to boot.  This should minimize the test cycle even more. Credit to James Blair for the idea (see <a href="http://amo-probos.org/post/11%29">http://amo-probos.org/post/11</a><a href="http://amo-probos.org/post/11%29">)</a>.</p>
<p><strong>Management of Jenkins</strong></p>
<p>All of the projects in Jenkins are managed using Jinja2 XML templates in-conjunction with python-jenkins (<a href="http://launchpad.net/python-jenkins">python-jenkins</a>); this makes it really easy to setup new jobs in the lab and reconfigure existing ones as required (as well as providing great backup!).</p>
<p>Templates and management scripts can be found in lp:~openstack-ubuntu-testing/+junk/jenkins-qa-lab</p>
<p><strong>Testing Openstack Essex on Ubuntu Precise</strong></p>
<p>This testing was the first to be setup in the lab.  Jenkins (using the git plugin) monitors the upstream github.com repositories for commits on the master branch.  When a change is detected the following process is triggered:</p>
<p><strong>Build</strong></p>
<p>Objective: Validate that upstream trunk still builds OK with current packaging for Ubuntu.</p>
<ol>
<li>A new snapshot upstream tarball is generated based on the latests commit to the upstream component.</li>
<li>The latest archive packaging for the component is pulled in from lp:~ubuntu-server-dev/&lt;COMPONENT&gt;/essex</li>
<li>Any changes in the testing packaging for the component are merged from lp:~openstack-ubuntu-testing/&lt;COMPONENT&gt;/essex</li>
<li>New changelog entries are automatically created for the new upstream commits.</li>
<li>The source package is generated and built in a clean schroot using sbuild locally.</li>
</ol>
<p>On the assumption that the package built OK locally:</p>
<ol>
<li>The source package is uploaded to the Testing PPA (ppa:openstack-ubuntu-testing/testing)</li>
<li>The testing packaging branch is push back to lp:~openstack-ubuntu-testing/&lt;COMPONENT&gt;/essex.</li>
<li>The binary packages from the sbuild are installed into the local reprepro managed archive.</li>
</ol>
<p>This process is managed by a single script (<a href="http://bazaar.launchpad.net/%7Eopenstack-ubuntu-testing/+junk/jenkins-scripts/view/head:/tarball.sh">tarball.sh</a>); Credit to Chuck Short for pulling together this part of the process based on work from Openstack upstream.</p>
<p>For changes to the nova project the deploy phase is then executed.</p>
<p><strong>Deploy</strong></p>
<p>Objective: Validate that packages install, can be configured and reach a know good state prior to execution of testing.</p>
<p>This phase of testing uses Juju with Cobbler to deploy Openstack into the QA lab infrastructure; It utilizes branches of the Openstack charms to support use of a local archive along with a deployer wrapper around Juju written by Adam Gandelman which executes the actual deployment using Juju and monitors for errors.</p>
<p><a href="http://javacruft.files.wordpress.com/2012/02/running-openstack.jpg"><img class="aligncenter size-medium wp-image-296" title="Openstack Test Deployment" src="http://javacruft.files.wordpress.com/2012/02/running-openstack.jpg?w=300&#038;h=118" alt="" width="300" height="118" /></a></p>
<p>The deployer is configured to know where to get the right codebase for the Openstack charms, which services to deploy and which relations to setup between services. As you can see from the above diagram this is non-trivial but the charms and Juju do most of the hard work.</p>
<p>Once Openstack is deployed successfully the test phase is then executed.</p>
<p><strong>Test</strong></p>
<p>Objective: Validate that the Openstack deployment in the lab actually works!</p>
<p>At this point, we can run any integration tests we wish against the newly deployed cloud.  This testing is able to help us achieve multiple goals:</p>
<ul>
<li>Early detection of upstream bugs that break Openstack functionality on Ubuntu</li>
<li>Verification that packaging branches in the development version of Ubuntu are compatible with upstream trunk.</li>
<li>Using these packages, verification that our Juju charms are deploying a functional Openstack cloud and are up-to-date with any deployment-related configuration changes upstream.</li>
</ul>
<p>At the moment this phase looks like this:</p>
<ol>
<li>Configure the Openstack deployment (Adams deployer script provides some utility functions for locating specific services in the environment)
<ul>
<li>Creates network configuration in Nova for the private instance network as well as a pool of public floating IPs.</li>
<li>Upload an image into the Glance server for use during testing</li>
<li>Creates EC2 credentials in the Keystone server for use during testing.</li>
</ul>
</li>
<li>Run the devstack exercise test scripts which ensure basic functionality of the deployment. Currently, this includes:
<ul>
<li>Basic euca-tools EC2 API for starting and stopping instances</li>
<li>EC2 AMI bundle uploads</li>
<li>Floating IP allocation, association and connectivity to instance</li>
<li>Volume creation and attachment to instance</li>
</ul>
</li>
</ol>
<p>Note: These are the same sets of tests that are currently run against proposed commits to gerrit upstream.</p>
<p>Longer term we aim to use the Openstack Tempest test suite in the lab; Adam is currently working on getting this up and running.</p>
<p><strong>Reporting</strong></p>
<p>The Jenkins instance in the QA lab is not publicly accessible; however all jobs run in the lab are published out (using the Jenkins build-publisher plugin) to <a href="https://jenkins.qa.ubuntu.com/view/Precise%20OpenStack%20Testing/">http://jenkins.qa.ubuntu.com</a> so that people can see the current state of the testing packaging in Ubuntu precise.</p>
<p>We are also working on setting up email notifications.</p>
<p><strong>Success so far</strong></p>
<p>Juju charms deploy Openstack components in a configuration that is compatible with upstream trunk prior to updates to packaging in Ubuntu.  Previously packages were updated in the archive first while Juju charm updates lagged behind as incompatibilities were uncovered after the fact.</p>
<p>We enabled automated testing 2 days prior to the 3rd Essex milestone release.  We were able to uncover and help fix a handful of bugs upstream before the release, including critical bugs like <a href="http://pad.lv/921784">921784</a>.  In the past, these bugs were typical uncovered after the release (both upstream and in Ubuntu).</p>
<p>Since E3, there have been even more critical bugs uncovered by this testing and fixed upstream, some of which are only applicable to Ubuntu-specific configurations (not tested upstream) and would have been uncovered by users after code hit the Ubuntu archive (See <a href="http://pad.lv/922232">922232</a>).</p>
<p><strong>Further Plans for the Lab</strong></p>
<p>Pre-commit  testing of changes to stable branches;  The Ubuntu Server team are  working upstream on maintaining the stable branches of released versions  of OpenStack &#8211; this work will validate patches proposed to stable  branches in review.openstack.org against the current version of the  packaging in released versions of Ubuntu.  Initially this will target  Diablo on Ubuntu 11.10 but will also support Essex on Ubuntu 12.04 once  released.  Ideally the testing process will provide feedback on  review.openstack.org to help the stable release team review proposed  patches.</p>
<p><strong>References</strong></p>
<p>Jenkins job configurations: lp:~openstack-ubuntu-testing/+junk/jenkins-qa-lab</p>
<p>Scripts supporting the lab: lp:~openstack-ubuntu-testing/+junk/jenkins-scripts</p>
<p>LVM snapshot preseeds and Cobbler snippets: lp:~openstack-ubuntu-testing/+junk/cobbler-lvm-snapshot</p>
<p>All other relevant scripts, charm branches, etc: <a href="https://code.launchpad.net/%7Eopenstack-ubuntu-testing/">https://code.launchpad.net/~openstack-ubuntu-testing/</a></p>
<p><strong>Credits</strong></p>
<p>Overall management of delivery and general whip cracking: Dave Walker</p>
<p>Lab installation and base configuration: Pete Graner, Tim Gardner, Brad Figg, James Page</p>
<p>Fence agent for network power control of servers: Andres Rodriguez</p>
<p>Source package creation and build process: Chuck Short and James Page</p>
<p>Deployment testing using Juju: Adam Gandelman</p>
<p>Testing of Openstack: Adam Gandelman</p>
<p>Jenkins packaging, configuration and management: James Page</p>
<p>Gerrit Plugin for pre-commit testing and generally great ideas: Monty Taylor and James Blair</p>
<p>Writing and reviewing this post: Adam Gandelman, Chuck Short and Dave Walker.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/286/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=286&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2012/02/08/automating-openstack-testing-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>

		<media:content url="http://javacruft.files.wordpress.com/2012/02/running-openstack.jpg?w=300" medium="image">
			<media:title type="html">Openstack Test Deployment</media:title>
		</media:content>
	</item>
		<item>
		<title>Jenkins 1.424.2 in Debian unstable!</title>
		<link>http://javacruft.wordpress.com/2012/02/01/jenkins-1-424-2-in-debian-unstable/</link>
		<comments>http://javacruft.wordpress.com/2012/02/01/jenkins-1-424-2-in-debian-unstable/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 16:27:51 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=283</guid>
		<description><![CDATA[Just a short post to say that Jenkins 1.424.2 has landed in Debian; 1.409.3 was accepted a few weeks ago and I just uploaded 1.424.2 to unstable. I expect to upload another version in the next few weeks to enable the SSH command line interface to Jenkins (requires some more Jenkins tool-chain work to get [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=283&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just a short post to say that Jenkins 1.424.2 has landed in Debian; 1.409.3 was accepted a few weeks ago and I just uploaded 1.424.2 to unstable.</p>
<p>I expect to upload another version in the next few weeks to enable the SSH command line interface to Jenkins (requires some more Jenkins tool-chain work to get everything building from source).</p>
<p>Huge thanks go to Tony Mancill and Damien Raude-Morvan who have sponsored my Jenkins packaging work in Debian!</p>
<p>I&#8217;ll sync this new version over to Ubuntu precise (and push into the new Jenkins <a href="https://launchpad.net/~hudson-ubuntu/+archive/backports">Backports PPA </a>for Ubuntu 11.10) once alpha 2 is out of the door&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/283/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=283&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2012/02/01/jenkins-1-424-2-in-debian-unstable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing python-jenkins</title>
		<link>http://javacruft.wordpress.com/2011/09/21/introducing-python-jenkins/</link>
		<comments>http://javacruft.wordpress.com/2011/09/21/introducing-python-jenkins/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 11:19:41 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Juju]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=252</guid>
		<description><![CDATA[Over the last 12 months I have made use of a great Python library originally written by Ken Conley in automating the various testing activities that we undertake as part of Ubuntu Development using Jenkins. Python Jenkins provides Python bindings to the Jenkins Remote API. I&#8217;m pleased to announce that Python Jenkins 0.2 is available [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=252&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over the last 12 months I have made use of a great Python library originally written by <a href="http://kwc.org/blog/archives/2010/2010-09-10.python_script_for_hudson_api.html">Ken Conley</a> in automating the various testing activities that we undertake as part of Ubuntu Development using Jenkins.</p>
<p>Python Jenkins provides Python bindings to the Jenkins Remote API.</p>
<p>I&#8217;m pleased to announce that <a href="http://launchpad.net/python-jenkins">Python Jenkins</a> 0.2 is available in Ubuntu Oneiric Ocelot and the project has now migrated to Launchpad for bug tracking, version control and release management.</p>
<p>The 0.2 release includes a number of bug fixes and new methods for managing Jenkins slave node configuration remotely &#8211; this is already being used in the <a href="https://code.launchpad.net/~charmers/charm/oneiric/jenkins/trunk">juju charm for Jenkins</a> to automatically create new slave node configuration when slave node units are added to a deployed juju environment (blog posting to follow&#8230;.)</p>
<p><strong>A quick overview&#8230;</strong></p>
<p>It&#8217;s pretty easy to get started with python-jenkins on the latest Ubuntu development release &#8211; if you are running an earlier release of Ubuntu then you can use the <a href="https://launchpad.net/~python-jenkins-developers/+archive/backports">PPA</a> (Natty only ATM but more to follow):</p>
<pre>sudo apt-get install python-jenkins</pre>
<p>The library is also published to PyPI so you can use pip if you are not running Ubuntu.</p>
<p>Here&#8217;s a quick example script:</p>
<pre>#!/usr/bin/python
import jenkins
# Connect to instance - username and password are optional
j = jenkins.Jenkins('http://hostname:8080', 'username', 'password')

# Create a new job
if not j.job_exists('empty'):
    j.create_job('empty', jenkins.EMPTY_CONFIG_XML)
j.disable_job('empty')

# Copy a job
if j.job_exists('empty_copy'):
    j.delete_job('empty_copy')
j.copy_job('empty', 'empty_copy')
j.enable_job('empty_copy')

# Reconfigure an existing job and build it
j.reconfig_job('empty_copy', jenkins.RECONFIG_XML)
j.build_job('empty_copy')

# Create a slave node
if j.node_exists('test-node'):
    j.delete_node('test-node')
j.create_node('test-node')</pre>
<p>You can find the current documentation <a href="http://packages.python.org/python-jenkins/">here</a>.</p>
<p>Happy automating!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=252&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/09/21/introducing-python-jenkins/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Package rebuild testing using Jenkins and sbuild</title>
		<link>http://javacruft.wordpress.com/2011/09/07/rebuild-testing-using-jenkins-and-sbuild/</link>
		<comments>http://javacruft.wordpress.com/2011/09/07/rebuild-testing-using-jenkins-and-sbuild/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 11:15:13 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=217</guid>
		<description><![CDATA[I&#8217;ve been working on rebuilding the Java packages in the Ubuntu archive that depend on &#8216;default-jdk&#8217; against OpenJDK 7 to see where we are likely to have issues if and when we decide to upgrade the default version of Java in Ubuntu to OpenJDK 7 You can see the results here (limited time offer only); and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=217&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on rebuilding the Java packages in the Ubuntu archive that depend on &#8216;default-jdk&#8217; against OpenJDK 7 to see where we are likely to have issues if and when we decide to upgrade the default version of Java in Ubuntu to OpenJDK 7</p>
<p>You can see the results <a href="http://91.189.93.118/">here</a> (limited time offer only); and here are the details of how I setup this rebuild.</p>
<p><strong>Setup your rebuild server</strong></p>
<p>So first things first; the current development release of Ubuntu (<a href="http://cdimages.ubuntu.com/releases/oneiric/beta-1/">Oneiric Ocelo</a>t) includes the most recent LTS release of Jenkins so installing its pretty easy as long as you are using this release:</p>
<p><code>sudo apt-get install jenkins<br />
</code></p>
<p>You probably want to configure Jenkins with an administrator email address and point it at a mail relay so that Jenkins can tell you about failures.</p>
<p>Next you need to install a few development tools to make it all hang together nicely:</p>
<p><code>sudo apt-get install ubuntu-dev-tools sbuild apt-cacher-ng<br />
</code><br />
This should get you to the point where you can setup the jenkins account to use sbuild:</p>
<p><code> sudo usermod -G sbuild jenkins<br />
sudo stop jenkins<br />
sudo start jenkins</code></p>
<p><strong>Create sbuild environments</strong></p>
<p>I decided that I wanted to compare current build results with openjdk-6 against the rebuild with openjdk-7 so I created two sbuild environments on my server &#8211; one for openjdk-6 and one for openjdk-7:</p>
<p><code>mk-sbuild --name=oneiric-java-6 oneiric<br />
mk-sbuild --name=oneiric-java-7 oneiric<br />
</code></p>
<p>You might have noticed that I also installed apt-cacher-ng &#8211; as alot of the dependencies that get downloaded are the same having a local apt cache makes alot of sense to speed things up; its pretty easy to point the schroots we just created at the local instance of apt-cacher-ng:</p>
<p><code>sudo su -c "echo 'Acquire::http { Proxy \"http://localhost:3142\"; };' &gt; /var/lib/schroot/chroots/oneiric-java-6-amd64/etc/apt/apt.conf.d/02proxy"<br />
sudo su -c "echo 'Acquire::http { Proxy \"http://localhost:3142\"; };' &gt; /var/lib/schroot/chroots/oneiric-java-7-amd64/etc/apt/apt.conf.d/02proxy"</code></p>
<p>You will also need to setup some self signed keys to make sbuild work:</p>
<p><code>sudo sbuild-update -k</code></p>
<p>So we now have two sbuild environments setup &#8211; but we need one to point at openjdk-7 instead of openjdk-6 &#8211; I stuck a modified copy of java-common (which determines the default-jdk) in a PPA:</p>
<p><code>sudo schroot -c oneiric-java-7-amd64-source<br />
apt-get install python-software-properties<br />
add-apt-repository ppa:james-page/default-jdk-7</code></p>
<p>Obviously this could just as easily be an upgrade to mysql, postgresql or any other package of your choosing.</p>
<p><strong>Setting up Jenkins</strong></p>
<p>I split this rebuild into &#8216;main&#8217; and &#8216;universe&#8217; components and used a mutli-configuration project with axis for &#8216;package&#8217; (containing the list of packages I wanted to rebuild) and &#8216;version&#8217; (java-6, java-7); I&#8217;ve included the config.xml for one of the projects <a href="http://paste.ubuntu.com/680697/">here</a>.  You can also see the configuration <a href="http://91.189.93.118/job/java-7-main-rebuild/configure">here</a>.</p>
<p>The build is a very simple script:</p>
<p><code>#!/bin/bash<br />
export HOME=/var/lib/jenkins<br />
rm -Rf *<br />
pull-lp-source ${package}<br />
sbuild -d oneiric-${version} -A -n ${package}*.dsc</code></p>
<p>That should do the trick; you can then submit the project for build and it will gradually churn through the packages emailing you with any failures.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=217&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/09/07/rebuild-testing-using-jenkins-and-sbuild/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Jenkins for Ubuntu Oneiric: Call for Testing</title>
		<link>http://javacruft.wordpress.com/2011/08/13/jenkins-for-oneiric/</link>
		<comments>http://javacruft.wordpress.com/2011/08/13/jenkins-for-oneiric/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 14:09:37 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=179</guid>
		<description><![CDATA[Jenkins 1.409.1 has landed in Ubuntu Oneiric Ocelot so now is the time to try it out and help with testing this new distribution model for Jenkins! Getting Started If you are not using the development release of Ubuntu, Oneiric Ocelot, grab a copy of the latest alpha-3 milestone pre-release: ISO Images: http://cdimages.ubuntu.com/releases/oneiric/alpha-3/ Cloud Images: http://cloud-images.ubuntu.com/releases/oneiric/alpha-3/ Note [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=179&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Jenkins 1.409.1 has landed in Ubuntu Oneiric Ocelot so now is the time to try it out and help with testing this new distribution model for Jenkins!</p>
<p><strong>Getting Started</strong></p>
<p>If you are not using the development release of Ubuntu, Oneiric Ocelot, grab a copy of the latest alpha-3 milestone pre-release:</p>
<ul>
<li>ISO Images: <a href="http://cdimages.ubuntu.com/releases/oneiric/alpha-3/">http://cdimages.ubuntu.com/releases/oneiric/alpha-3/</a></li>
<li>Cloud Images: <a href="http://cloud-images.ubuntu.com/releases/oneiric/alpha-3/">http://cloud-images.ubuntu.com/releases/oneiric/alpha-3/</a></li>
</ul>
<p>Note that alpha releases are NOT always stable &#8211; be careful!  Jenkins is quite happy running on either a Desktop or a Server so take your pick.</p>
<p>Once you have an install of Oneiric Ocelot&#8230;</p>
<p><code> apt-get install jenkins<br />
</code></p>
<p>&#8230;should get you going.  Jenkins should startup and be visible on http://localhost:8080 (or the name of your server if you are installing it elsewhere).</p>
<p><strong>A few things to note&#8230;</strong></p>
<p><strong></strong>The package for Ubuntu differs in a few ways from the upstream Jenkins .deb packages you might have been using to-date:</p>
<ul>
<li>Plugins are not bundled by default &#8211; normally Jenkins ships with the following plugins:
<ul>
<li>SSH Slaves Plugin</li>
<li>Maven Integration Plugin</li>
<li>Subversion Plugin</li>
</ul>
<p>Plugins should be compatible with this distribution packaged version of Jenkins &#8211; these can be installed through the &#8216;Manage Plugins&#8217; option within Jenkins as normal.  I would recommend installing the Maven Integration Plugin at a minimum.</li>
<li>Native OS integration features that are disabled:
<ul>
<li>Solaris: support for libzfs and libembeddedsu4j.</li>
<li>Windows: native control of remote windows slaves, native integration with Windows process management, windows service deployment of Jenkins</li>
</ul>
<p>It is still possible to use Windows slaves; however they will need to be launched using JNLP from the slave itself.</li>
<li>Branding: if available on the client, the Web UI will use the Ubuntu font.</li>
<li>Packages + wrapper scripts are provided for:
<ul>
<li>Monitoring of arbitrary jobs:<strong> jenkins-external-job-monitor</strong> + see man jenkins-monitor-job for more details.</li>
<li>Jenkins CLI: <strong>jenkins-cli</strong> + see man jenkins-cli for more details.</li>
</ul>
</li>
</ul>
<p><strong>Using Jenkins</strong></p>
<p>The Jenkins website has a great getting started guide &#8211; see <a href="https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins">https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins</a>.</p>
<p>Obviously you can skip the &#8216;Installing Jenkins&#8217; section.</p>
<p><strong>Reporting Bugs</strong></p>
<p>If you find any problems please report bugs here <a href="https://bugs.launchpad.net/ubuntu/+source/jenkins">https://bugs.launchpad.net/ubuntu/+source/jenkins</a></p>
<p>You can also find me (jamespage) in #ubuntu-server on Freenode IRC most weekdays.</p>
<p>Enjoy&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/179/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=179&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/08/13/jenkins-for-oneiric/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Avoiding missing-classpath lintian warnings with Maven based packages</title>
		<link>http://javacruft.wordpress.com/2011/06/03/avoiding-missing-classpath-lintian-warnings-with-maven-based-packages/</link>
		<comments>http://javacruft.wordpress.com/2011/06/03/avoiding-missing-classpath-lintian-warnings-with-maven-based-packages/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 10:44:25 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[ubuntu java]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=143</guid>
		<description><![CDATA[Whilst I&#8217;ve been preparing the large dependency chain to support Jenkins for upload into Debian and Ubuntu I came across a new lintian warning: libakuma-java: missing-classpath libjna-java This is a new check that validates that the jar files associated with a debian -java package have a Class-Path entry set in the META-INF/MANIFEST.mf file. This is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=143&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Whilst I&#8217;ve been preparing the large dependency chain to support Jenkins for upload into Debian and Ubuntu I came across a new lintian warning:</p>
<p><code>libakuma-java: missing-classpath libjna-java<br />
</code></p>
<p>This is a new check that validates that the jar files associated with a debian -java package have a Class-Path entry set in the META-INF/MANIFEST.mf file.</p>
<p>This is used by wrapper scripts to dynamically set the classpath for Java applications at runtime based on the libraries that they use.</p>
<p>However, if you are packaging Maven based projects you don&#8217;t get this set for free (although that would be a great feature for maven-debian-helper).</p>
<p>Luckily the javahelper package has a CDBS class that can help out; simply add javahelper to the Build-Depends for your package then follow these steps:</p>
<p><strong>1) debian/rules</strong></p>
<p>Add the javahelper.mk class into the make file:</p>
<p><code>#!/usr/bin/make -f</p>
<p>include /usr/share/cdbs/1/rules/debhelper.mk<br />
include /usr/share/cdbs/1/class/javahelper.mk<br />
include /usr/share/cdbs/1/class/maven.mk</p>
<p>...</code><br />
<strong>2) Add a .classpath file for the binary package</strong></p>
<p>In my case this gets dropped into debian/libakuma-java.classpath</p>
<p><code>usr/share/java/akuma.jar /usr/share/java/jna.jar</code></p>
<p>Rebuild your package; the jar files should now have Class-Path entries and you should be lintian clean.</p>
<p>Enjoy.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=143&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/06/03/avoiding-missing-classpath-lintian-warnings-with-maven-based-packages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Trip Report: Puppet Camp Europe 2011</title>
		<link>http://javacruft.wordpress.com/2011/04/29/puppetcamp/</link>
		<comments>http://javacruft.wordpress.com/2011/04/29/puppetcamp/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 17:31:13 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Trip Reports]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=134</guid>
		<description><![CDATA[Puppet Camp in Amsterdam presented me with a great opportunity to get back up to speed with my favourite configuration management tool and to find out what else the guys a Puppet Labs have been up to over the last six months. I&#8217;ve not attended a Puppet Camp before; I went with high expectations based [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=134&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Puppet Camp in Amsterdam presented me with a great opportunity to get back up to speed with my favourite configuration management tool and to find out what else the guys a Puppet Labs have been up to over the last six months.</p>
<p>I&#8217;ve not attended a Puppet Camp before; I went with high expectations based on feedback from friends and colleagues and I was not disappointed. The event is a great mix of presentations from the Puppet Labs team, Puppet users and community members with break-out &#8216;Unconference&#8217; sessions in the afternoon to focus on specific areas of interest that we all voted on after lunch.</p>
<p><strong>Keynote</strong></p>
<p>The conference started off with the keynote delivered by Luke Kanies, the founder of both Puppet and Puppet Labs. Puppet 2.7 is about to hit RC2 and Luke presented a great overview of what we can expect to see in this release. The focus of this release has been in the following areas:</p>
<ul>
<li>Static Compiler Plugin; compiles file resources into the catalogue which will reduce the amount of calls between Puppet agents and the puppet master improving overall efficiency.</li>
<li>Certificate API: Puppet CA gets a new RESTful remote API for management of certificates.  This will be really important for integration into provisioning systems both in the data centre and in the cloud.</li>
<li>Puppet Faces; The puppet CLI will provide a new set of &#8216;Faces&#8217; commands which allow more direct interface to Puppet internals.  This will allow uses to build custom agent behaviour for bespoke solutions much more easily.</li>
<li>Minimising Puppet Core: removal of excess dependencies (such as nagios plugins) to make the core of Puppet as simple and as efficient and possible while still allowing easy extension as required.</li>
</ul>
<p>The other key change in 2.7 is a shift from GPL to Apache based licensing for the product. This will appease enterprises who don&#8217;t like/won&#8217;t use GPL licensed software and will allow Puppet Labs to side-step around some of the unproven concepts of whether an extension developed in Ruby is considered a change to core product under GPL &#8211; no one really seems to know the implications of this uncertainty.</p>
<p>Other stuff that Puppet Labs are thinking about for the future include:</p>
<ul>
<li>Dealing with localised change in the Puppet agent to make it easier to feed back into central manifests and templates.</li>
<li>Cross-node application configuration management; Puppet is great at managing individual nodes but not so great at orchestrating change in a synchronised way across multiple nodes.  I suspect mCollective will be part of this story&#8230;</li>
<li>Database support</li>
<li>Change lifecycle management; mcollective seems to be key in this strategy but its not exactly clear how yet.</li>
<li>Further language changes to separate code from data</li>
</ul>
<p>All good stuff IMHO.</p>
<p><strong>Extending Puppet</strong></p>
<p>Richard Crowley presented briefly about DevStructure&#8217;s current project, <a href="http://devstructure.github.com/blueprint/">Blueprint</a>, a tool to reverse engineer server configuration into Git.</p>
<p>He also presented on a number of ways in  which Puppet can be extended to-do interesting and crazy stuff &#8211; it was a good overview into the internal workings of Puppet (even if some of the examples came with warnings).  One of the neatest concepts was storing additional server configuration meta-data in DNS TXT records which puppet could then retrieve and use when compiling catalogues &#8211; kind of like a DNS based external node classifier.</p>
<p><strong>Working with Puppet Modules</strong></p>
<p>Henrik Lindberg from CloudSmith presented on some best practices for developing Puppet Modules and some of the work that is currently ongoing around the Puppet <a href="http://forge.puppetlabs.com/">Forge</a>, a central repository for community developed Puppet Modules.</p>
<p>He demonstrated <a href="https://github.com/cloudsmith/geppetto">Geppetto</a>, an Eclipse based IDE for developing Puppet Modules; I think that developments such as this are key in the whole DevOps picture as it gives Developers a toolset that they should find familiar which allows then to develop functionality that can then be used for system configuration in Puppet &#8211; after all Puppet is really about coding not writing configuration files&#8230;</p>
<p>Geppetto could be a good target for inclusion into Debian and Ubuntu in a similar style to PyDev (see eclipse-pydev) and would make a nice, pre-integrated package for Ubuntu Desktops.</p>
<p><strong>Puppet Continuous Integration</strong></p>
<p>Nokia have taken with whole &#8216;Puppet is Code&#8217; development principle one step further by applying Continuous Integration techniques to the modules that they develop to manage the infrastructure that supports their location based services.</p>
<p>Oliver Hookins from Nokia presented on how they have used Jenkins and <a href="http://projects.puppetlabs.com/projects/cucumber-puppet">cucumber-puppet</a> to automate behavioural driven testing of Puppet catalogue definitions prior to automated deployment into their production environment.  I really like this concept as it injects a great software development discipline into configuration management development.</p>
<p><strong>Puppi</strong></p>
<p>Alessandro Franceschi from Lab42 gave a couple of great demonstrations (complete with cheezy 80&#8242;s style synth music) of <a href="http://www.example42.com/?q=Puppi_A_Puppet_module_for_Deployment_Automation">puppi</a>, a Puppet module and CLI toolset to support the deployment of full applications and batch operations using Puppet manifests. Although this was really interesting in its own right, he also demo&#8217;ed mc-puppi &#8211; puppi integrated with mcollective &#8211; deploying applications across a large number of systems using mcollective. Its this type of integration that really demonstrates the power of broadcast based systems management through mcollective</p>
<p><strong>Puppet DSL</strong></p>
<p>Randall Hansen has been employed by Puppet Labs specifically to address the usability of puppet across all of its interfaces; CLI, DSL and Dashboard. Current focus is on making the CLI consistent and usable with actionable error messaging being a key focus. The Puppet CLI has moved towards a &#8220;puppet command subcommand&#8221; structure over the last couple of releases and it looks like this strategy will continue to be developed.</p>
<p>This session generated quite alot of questions including &#8216;when will puppet get its own shell?&#8217; (on the roadmap but not being actively developed) and &#8216;plugin support for dashboard?&#8217; (that sounds like a really cool idea).</p>
<p><strong>Unconference</strong></p>
<p>I attended various Unconference sessions over the two days of Puppet Camp &#8211; here are my key takeouts:</p>
<ul>
<li>Provisioning/Bootstrapping: an interesting session with respect to <a href="https://launchpad.net/orchestra">Ubuntu Orchestra</a> as alot of the topics discussed where relevant to this project. Initial discussion focussed around which tools people where using for provisioning &#8211; Cobbler is in use (but seen as to specific to RHEL) but <a href="http://theforeman.org/">Foreman</a> had alot more focus and interest. This is probably due to its tighter integration with Puppet; it can act as an external node classifier and can manage certificates during deployment, and its smart proxy architecture which looks really interesting (it can also proxy Puppet CA calls). The option to have a central management &#8216;foreman&#8217; with deployment proxies in locations across the data centre(s) will fit well with what Enterprises want in terms of security so I can see its appeal.</li>
<li><a href="http://www.puppetlabs.com/mcollective/">mCollective</a>: demo and questions with R.I. Pienaar (project founder). I really like the re-use of MoM concepts in System Adminstration; it scales so much better than traditional approaches and makes administering a large number of servers a piece of cake. I think it will be really interesting to see how Puppet Labs position this project alongside Puppet and what the blueprint deployment will look like in 6-12 months time. Again this is a really important development to consider in the context of Ubuntu Orchestra.</li>
<li>Network Device management; Puppet 2.7 has a feature which allows Cisco switches to be managed as nodes &#8211; this is the first step in this direction for Puppet. This is seen as a key development by the user base as it will support more integrated data centre configuration management across disciplines.</li>
</ul>
<p><strong>Summary</strong></p>
<p>Puppet continues to develop strongly; the product and the company behind it are really maturing. I think there are a few key changes to integrate in the next few releases; specifically separation of data and code in the Puppet DSL and integration of mCollective into the Puppet Labs vision.</p>
<p>The community around Puppet continues to be very active; CloudSmith are really leading the charge with community developed modules and the user base seems to be very highly engaged with the product.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=134&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/04/29/puppetcamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Jenkins for Ubuntu Natty: Call for Testing</title>
		<link>http://javacruft.wordpress.com/2011/03/02/jenkins-for-ubuntu-call-for-testing/</link>
		<comments>http://javacruft.wordpress.com/2011/03/02/jenkins-for-ubuntu-call-for-testing/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 17:18:37 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=118</guid>
		<description><![CDATA[Many of you may have wondered what I have been doing since UDS-N; some of you may have know that I have been working on packaging Jenkins (nee Hudson) from source along with all of its build dependencies (all 80 of them). After just over 3 months I&#8217;ve managed to get a 99% built from [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=118&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Many of you may have wondered what I have been doing since UDS-N; some of you may have know that I have been working on packaging Jenkins (nee Hudson) from source along with all of its build dependencies (all 80 of them).</p>
<p>After just over 3 months I&#8217;ve managed to get a 99% built from source Jenkins into the Hudson Ubuntu Testing PPA; this is core Jenkins only at this point in time; no plugins come bundled (although you can still install them using the Plugin Manager).</p>
<p>Note that the PPA only provides packages for the Natty Narwhal development release.</p>
<p>If you want to help out with testing, read on&#8230;.</p>
<p><strong>Getting started</strong></p>
<p>So first things first; lets add the Jenkins testing PPA and install the jenkins package:</p>
<p><code>sudo add-apt-repository ppa:hudson-ubuntu/testing<br />
sudo apt-get update<br />
sudo apt-get install jenkins</code></p>
<p>Wait some time and Jenkins should be up and running.</p>
<p><strong>Accessing Jenkins</strong></p>
<p>Once the package has installed you should be able to access Jenkins on http://localhost:8080 (or whatever server you installed it on).</p>
<p>Jenkins comes completely empty; no jobs, minimal configuration, no security.  Follow the normal Jenkins &#8216;<a href="http://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins">Use Jenkins</a>&#8216; guide to get started.</p>
<p><strong>Reporting problems</strong></p>
<p>This is a testing package so it ain&#8217;t going to be perfect. Please join the <a href="http://launchpad.net/~hudson-ubuntu-users">hudson-ubuntu-users</a> team and subscribe to the mailing list on launchpad to discuss general issues and report problems.</p>
<p>You can also find me (jamespage) in #ubuntu-server on Freenode if you like to use IRC.</p>
<p><strong>Whats still todo?</strong></p>
<p>Well as I said this is 99% built from source; a few packages are either binary packages (built from jars) or packages that bundle their dependencies in the upstream source bundle. I&#8217;m working with upstream(s) to get these issues sorted.</p>
<p>That said, everything that is installed on your server or desktop in the jenkins package IS built from source. Offending packages are either used for testing or generating documentation during library builds.</p>
<p>I&#8217;m also going to start working on packaging a few core plugins from source (see the associated <a href="https://blueprints.launchpad.net/ubuntu/+spec/packageselection-server-n-hudson">blueprint</a> for details); for the time being you can download and install from within Jenkins. I will also create a patch so that this feature can be disable if required.  Please feel free to apply to join the team if you want to package a plugin.</p>
<p><strong>The Future</strong></p>
<p>Well ultimately probably the main Ubuntu archive and Debian; but lets leave that until next release&#8230;.</p>
<p>And if you were wondering, Hudson renamed itself to Jenkins in late January (hence the Hudson name keeps creeping into this post).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=118&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/03/02/jenkins-for-ubuntu-call-for-testing/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>Automating Ubuntu Server ec2 Testing &#8211; Part 1</title>
		<link>http://javacruft.wordpress.com/2011/03/02/automating-ubuntu-server-ec2-testing/</link>
		<comments>http://javacruft.wordpress.com/2011/03/02/automating-ubuntu-server-ec2-testing/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 16:28:35 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=98</guid>
		<description><![CDATA[Having automated the Ubuntu Server ISO testing process during the Maverick release cycle with Mathias Gug, I was keen to apply a similar automated testing approach to the Ubuntu Server AMI&#8217;s for Amazon ec2 this release cycle. Scott Moser has done some great work on automating this previously using a small framework of scripts. We [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=98&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Having automated the Ubuntu Server ISO <a href="http://hudson.qa.ubuntu-uk.org/">testing process</a> during the Maverick release cycle with Mathias Gug, I was keen to apply a similar automated testing approach to the Ubuntu Server AMI&#8217;s for Amazon ec2 this release cycle.</p>
<p>Scott Moser has done some great work on automating this previously using a small framework of scripts. We discussed refactoring to use Python and <a href="http://boto.googlecode.com">boto</a> to make the testing a bit easier to maintain and extend going forwards.  This also allows re-use the existing Python unittest + subunit approach from the ISO testing project for testing each ec2 instance as it was started.</p>
<p>An initial test release of the code is available for use; you are going to need an AWS account to use this codebase and be aware that running large tests does cost quite alot of $$/££ so be careful!</p>
<p><strong>Getting started</strong></p>
<p>So the first thing you will need todo is install the ubuntu-server-ec2-testing package; this is available in a PPA and is currently only available for the Natty release:</p>
<p><code> sudo add-apt-repository ppa:ubuntu-server-ec2-testing-dev/testing<br />
sudo apt-get update<br />
sudo apt-get install ubuntu-server-ec2-testing<br />
</code></p>
<p>This installs the base ec2 testing package onto your machine.</p>
<p><strong>Grab some test cases</strong></p>
<p>Test case definitions and configurations are stored in a bzr branch on Launchpad; this allows configuration and the test itself to be managed outside of the packaged code.</p>
<p><code>bzr branch lp:~ubuntu-server-ec2-testing-dev/+junk/ec2-automated-tests tests</code></p>
<p>Take a look in the tests directory this creates:</p>
<ul>
<li>the default folder contains the test configuration for the &#8216;default&#8217; test. This includes the cloud-init configuration that will be injected into each ec2 instance and the Python unittest file which tests the instance.</li>
<li>*.yaml &#8211; these are example test suite configuration files; in this example we will use the test-micro.yaml example file</li>
</ul>
<p><strong>Setup your ec2 credentials</strong></p>
<p>To access ec2 a key and secret is required; this is stored in another yaml file (~/.ec2.yaml):</p>
<p><code>AWS_ACCESS_KEY_ID: your access key id<br />
AWS_SECRET_ACCESS_KEY: secret associated with key</code></p>
<p>Credentials can be setup from your account screens in Amazon Web Services.</p>
<p><strong>Run a test suite</strong></p>
<p>The ubuntu-server-ec2-testing package provides two scripts to execute tests:</p>
<ul>
<li>run-ubuntu-ec2-test: runs a single test case; run without any parameters for help.</li>
<li>run-ubuntu-ec2-multi-test: runs a suite of test cases for multiple sizes, root storage options, regions and availability zones.</li>
</ul>
<p>So in this example we are going to run the <a href="http://bazaar.launchpad.net/~ubuntu-server-ec2-testing-dev/+junk/ec2-automated-tests/view/head:/test-micro.yaml">test-micro.yaml</a> test suite.  The format should be fairly intuitive:</p>
<p>This suite is a) for maverick b) for the server (desktops later!) c) will run 1 instance of each TestCase d) will run the i386 image on a t1.micro e) in eu-west-1a and eu-west-1b and f) using ebs root filesystem storage.  In total this will cost 2 x t1.micro hours (one for each instance).</p>
<p>To execute this test (against the latest maverick published images using the default test):</p>
<p><code>run-ubuntu-ec2-multi-test -t tests -f tests/test-micro.yaml default</code></p>
<p>After a short period of time (about 5 minutes) the test suite should have completed. In the current working directory you will find test results (in JUnit XML format) and console output under the eu-west-1a and eu-west-1b folders.</p>
<p>Part 2: integration with Jenkins to follow&#8230;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=98&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/03/02/automating-ubuntu-server-ec2-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
		<item>
		<title>I love: things that just work&#8230;</title>
		<link>http://javacruft.wordpress.com/2011/02/15/i-love-things-that-just-work/</link>
		<comments>http://javacruft.wordpress.com/2011/02/15/i-love-things-that-just-work/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 08:48:13 +0000</pubDate>
		<dc:creator>JavaCruft</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://javacruft.wordpress.com/?p=81</guid>
		<description><![CDATA[Since I started working on the Ubuntu project, the amount of hardware located in my home office seems to have grown on a weekly basis. I had been getting by with a old 100MBps switch connected to my iMac which acted as a gateway onto the main wireless network in the house for the infrastructure [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=81&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since I started working on the Ubuntu project, the amount of hardware located in my home office seems to have grown on a weekly basis.</p>
<p>I had been getting by with a old 100MBps switch connected to my iMac which acted as a gateway onto the main wireless network in the house for the infrastructure that I use for testing Ubuntu Server; however the iMac gateway kept disabling itself and the performance was not great.</p>
<p>So last weekend I bit the bullet and ordered myself a pair of <a href="http://www.ebuyer.com/product/185148">ZyXEL powerline</a> adapters and a <a href="http://www.ebuyer.com/product/64191">Netgear Gigabit</a> network switch from <a href="http://www.ebuyer.com">e-buyer</a>.</p>
<p>By 1245 on Monday I had a new home network &#8211; the setup was so easy it was ridiculous;  the powerline adapters automatically connected to each other as soon as I plugged them in and the Netgear switch was more than happy to chat to my BT HomeHub 2 through them with zero config.</p>
<p>Now that my office is completely hard-wired to my Internet connection latency seems to be much better (think that my BT HomeHub was a little overloaded) and the gigabit connectivity between devices is certainly helping with performance (I run a local Ubuntu archive cache using <a href="http://packages.ubuntu.com/maverick/apt-cacher-ng">apt-cacher-ng</a> to avoid using my Internet connection as much as possible).</p>
<p>Shame I only have a 5.5MBps Internet connection; and living in rural Norfolk I can&#8217;t see BT Infinity reaching me anytime soon&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javacruft.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javacruft.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javacruft.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javacruft.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javacruft.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javacruft.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javacruft.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javacruft.wordpress.com/81/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javacruft.wordpress.com&amp;blog=16060086&amp;post=81&amp;subd=javacruft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javacruft.wordpress.com/2011/02/15/i-love-things-that-just-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6a616324b56367b4eb5a35e940f657ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">javacruft</media:title>
		</media:content>
	</item>
	</channel>
</rss>
