<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Scratchpad of Matthew Pontefract, technologist, entrepreneur.

  var _gaq = _gaq || [];
  _gaq.push([‘_setAccount’, ‘UA-19991874-1’]);
  _gaq.push([‘_trackPageview’]);

  (function() {
    var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
    ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
    var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  })();</description><title>Notes from the backroom</title><generator>Tumblr (3.0; @matthew-pontefract)</generator><link>http://blog.zorinholdings.com/</link><item><title>Setting nameservers on the O2 Wireless box IV</title><description>&lt;p&gt;Unless I&amp;#8217;m missing something, you can&amp;#8217;t manually set the nameservers used by your O2 Wirelessbox via the web administration interface. But what if you want to use Google&amp;#8217;s global DNS, or OpenDNS? Or something else? This may be for faster responses, for control over site blocking, or just to mix things up to reduce the number of ways your web habits might be tracked.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Changing the name servers on your wireless box can be done via the console. As I keep forgetting the exact route to name server nirvana I thought I&amp;#8217;d document it here and then others may find it handy. Actually, I am writing this because I came to the blog hoping to find the article I thought I&amp;#8217;d already written in order to reset my box without having to think too hard&amp;#8230; &lt;/p&gt;
&lt;p&gt;So here we have it:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;telnet into your wireless box either by the IP address (&lt;em&gt;route -n&lt;/em&gt; will help you if you don&amp;#8217;t know it already) or heading to &lt;em&gt;o2wirelessbox.lan&lt;/em&gt;. Login as &lt;em&gt;SuperUser &lt;/em&gt;using the unit&amp;#8217;s serial number as the password.&lt;/li&gt;
&lt;li&gt;You may like to see your current name servers: &lt;br/&gt;&lt;em&gt;&lt;em&gt;{SuperUser}=&amp;gt;&lt;/em&gt;dns server route list&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;To replace this list, first we flush it: &lt;br/&gt;&lt;em&gt;{SuperUser}=&amp;gt;dns server route flush&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Now enter a new name server entry, for example for OpenDNS:&lt;br/&gt;&lt;em&gt;{SuperUser}=&amp;gt;dns server route add&lt;/em&gt; &lt;em&gt;dns=208.67.222.222 metric=1 intf=O2_ADSL2plus&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;You can add secondary and tertiary servers by repeating the above:&lt;br/&gt;&lt;em&gt;{SuperUser}=&amp;gt;dns server route add dns=208.67.220.220 metric=1 intf=O2_ADSL2plus&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;And there you have it: job done.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;What name server to use?&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;A good question indeed. And for that, we have &lt;a href="http://bit.ly/ypfpgb" title="Namebench"&gt;namebench&lt;/a&gt;, a nice tool that finds the nameserver that will work best for you.&lt;/div&gt;</description><link>http://blog.zorinholdings.com/post/18949629859</link><guid>http://blog.zorinholdings.com/post/18949629859</guid><pubDate>Thu, 08 Mar 2012 15:35:00 +0000</pubDate><category>sysadmin</category><category>adsl</category></item><item><title>So you wanna use Windows...</title><description>&lt;p&gt;Those who know me are aware of the fondness I have for working with Windows in particular in the context of development. Whatever I think, however, many people choose, or are obliged, to develop on the platform. Depending on your chosen development tools, this can be more or less straight forward.&lt;/p&gt;
&lt;p&gt;Consider this scenario: you&amp;#8217;re a LAMP-stack developer (in this case, P is for Python). You&amp;#8217;re going to be deploying to Linux in production and in test. You have mixed MacOS and Windows developers. The Mac (and Linux) guys have no trouble getting a dev environment built, but it can be a little trickier on Windows which is far less used by LAMP developers.&lt;/p&gt;
&lt;p&gt;Windows peeps could change away from Windows but why should they add the switching cost of changing OS to all the rest? Clearly &lt;em&gt;I&lt;/em&gt; think there are huge benefits, but I don&amp;#8217;t usually like to tell people what to use, much as I myself don&amp;#8217;t like being told what to use (yes, thank you, Eclipse is wonderful, but I&amp;#8217;m really fast with Vi - I&amp;#8217;ve worked with both). &lt;/p&gt;
&lt;p&gt;So, how do we get some of the basics setup? Here are the steps I took.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;strong&gt;Installing the basics: Python, setuptools, Git&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Of course Git may not be a requirement for you as you may use SVN, Mercurial or something else. Git used to be considered &amp;#8216;tricky&amp;#8217; on Windows, but that seems to be a thing of the past for general usage. The packages for all the above can  be found at:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Python: download the appropriate installer from the &lt;a href="http://python.org/" title="python.org"&gt;python.org&lt;/a&gt; website&lt;/li&gt;
&lt;li&gt;setuptools: download the appropriate installer from &lt;a href="http://pypi.python.org/pypi/setuptools#files" title="setuptools download"&gt;here&lt;/a&gt;; download the version appropriate to the Python version you installed (run &lt;code&gt;python --version&lt;/code&gt; at the prompt to find out what that is if you need to)&lt;/li&gt;
&lt;li&gt;Git: The MSYSgit package seems to be rather nice: obtain from &lt;a href="http://code.google.com/p/msysgit/"&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;You may want to use tar in some scripts. If so, tar for windows can be obtained from &lt;a href="http://bit.ly/yx8lTp" title="TAR for windows"&gt;here&lt;/a&gt; (after installation you&amp;#8217;ll need to put the bin directory into your PATH; if you&amp;#8217;ve taken the defaults you can add &lt;em&gt;c:\Program Files\GnuWin32\bin&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Virtualenv is invaluable for many Python developers. Once setuptools is installed, virutalenv is straight forward:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;C:\&amp;gt; easy_install virtualenv&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You may find that you have to add &lt;code&gt;C:\python27\Scripts&lt;/code&gt; to your path for &lt;code&gt;easy_install&lt;/code&gt; to be found.&lt;/p&gt;
&lt;p&gt;Now you can create virtual environments and pip install most things. If you don&amp;#8217;t have Visual Studio or the C compiler, you&amp;#8217;ll hit problems whenever an installation needs to compile components.  &lt;code&gt;python-cjson&lt;/code&gt; and &lt;code&gt;hiredis&lt;/code&gt; will both be problematic, for example. Potential solutions involve installing the GNU C compiler or downloading unofficial binary builds of packages from helpful sources. These options will be explored at some time in the future if I find that I have to continue down this path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing Fabric&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Fabric is the super-handy tool for managing remote servers and scripting operations to execute upon them. It can be easy installed but you&amp;#8217;re likely to get the following error: GMP or MPIR library not found, followed &amp;#8220;unable to find vcvarsall.bat&amp;#8221; when &lt;code&gt;pycrypto&lt;/code&gt; is installing. The solution is to install from a binary into the system packages. For this to work, your virtualenv must be configured to include system packages. The whole process is as follows&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Download pycrypto from &lt;a href="http://www.voidspace.org.uk/downloads/"&gt;&lt;a href="http://www.voidspace.org.uk/downloads/"&gt;http://www.voidspace.org.uk/downloads/&lt;/a&gt;&lt;/a&gt; - get the latest pycrypto for the version of Python you&amp;#8217;re using (likely 2.7 at the time of writing)&lt;/li&gt;
&lt;li&gt;Install this for everyone on the system&lt;/li&gt;
&lt;li&gt;Create your virtualenv as &lt;code&gt;virtualenv --system-site-packages .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Now you can &lt;code&gt;pip install Fabric&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Next problem: when you run &lt;code&gt;fab&lt;/code&gt; you get told &amp;#8220;&lt;code&gt;No module named win32api&lt;/code&gt;&amp;#8221;. &lt;/p&gt;
&lt;p&gt;To solve, install PyWin32 extensions:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Download from &lt;a href="http://sourceforge.net/projects/pywin32/files/pywin32/"&gt;&lt;a href="http://sourceforge.net/projects/pywin32/files/pywin32/"&gt;http://sourceforge.net/projects/pywin32/files/pywin32/&lt;/a&gt;&lt;/a&gt; the build appropriate to your Python version&lt;/li&gt;
&lt;li&gt;Run the executable&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fab --list &lt;/code&gt;will now work as expected. &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Using gitpython&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now fabric is working you&amp;#8217;re a good way in. I, however, am using fabric to deploy code from a Git commit. (note that it is very possible that life would be easier with Mercurial for this particular task on this particular platform&amp;#8230;).&lt;/p&gt;
&lt;p&gt;A few problems arise here. You are likely to encounter the message:&lt;/p&gt;
&lt;p&gt;    &lt;span&gt;WindowsError: [Error 2] The system cannot find the file specified&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To resolve, you will need to set an environment variable with the path to the git executable. If you&amp;#8217;ve installed in the default location:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;gt; set GIT_PYTHON_GIT_EXECUTABLE=&amp;#8221;C:\Program Files\Git\bin\git.exe&amp;#8221;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Though we&amp;#8217;re not out of the woods yet&amp;#8230; some operations may have issues. I&amp;#8217;m getting access denied errors when a git archive is run via gitpython. This appears to be something to do with the subprocess and PIPE - my will to live is slowly being sapped so I may not make. Tell my family I love them&amp;#8230;&lt;/p&gt;
&lt;p&gt;&amp;#8230; oh but I am still here! I admit, I quit. The Windows user I was trying to help is now deploying from a Linux box quickly spun up in EC2. So I&amp;#8217;ve side-stepped the hassles above.  Even if a work unfinished I hope that this may help some people. Should I need to solve any of these problems, and actually make progress, I&amp;#8217;ll add to this page.&lt;br/&gt;&lt;br/&gt;I should make clear that this page is a synthesis of tips and suggestions found across the web. I apologise for not properly crediting all my sources!&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://blog.zorinholdings.com/post/17259907352</link><guid>http://blog.zorinholdings.com/post/17259907352</guid><pubDate>Wed, 08 Feb 2012 10:59:00 +0000</pubDate><category>development</category><category>windows</category><category>LAMP</category><category>python</category><category>sysadmin</category></item><item><title>Testing Paypal with sandbox</title><description>&lt;p&gt;I&amp;#8217;ve been testing out &lt;a href="http://bit.ly/ySswqu" title="django-paypal" target="_self"&gt;django-paypal&lt;/a&gt; with a view to using it on a new site. I was always quite against using Paypal - the &amp;#8216;image&amp;#8217; doesn&amp;#8217;t seem right and there are horror stories about non-existent customer service when they decide to stop accepting payments for you at seemingly arbitrary moments.&lt;/p&gt;
&lt;p&gt;However, convenience wins sometimes, and the user experience (especially with Web Payments Pro) is pretty good. &lt;/p&gt;
&lt;p&gt;So having decided to try it out, you need to use the sandbox. This isn&amp;#8217;t going to be a long tutorial, but a collection of gotcha-resolution points as I come across them.&lt;!-- more --&gt;Once you&amp;#8217;ve created your sandbox account, you need to setup users within that account to represent merchants and buyers. You have the option to create &amp;#8216;pre-configured&amp;#8217; accounts, or to create &amp;#8216;manually&amp;#8217;. Trust me: use the former. Your merchant account must have a validated email address to receive payments but, somehow, I couldn&amp;#8217;t get that to fly when creating the account manually. Issues like that, and the longer setup time, means that unless you really really need to set up the account &amp;#8216;just so&amp;#8217;, kick off your efforts with a pre-configured account.&lt;/p&gt;
&lt;p&gt;Now you&amp;#8217;re flying. You have a merchant and buyer account in the sandbox. You can get your buyer to pay with Paypal. But now to test the experience for those who don&amp;#8217;t have a Paypal account but want to pay by card. You&amp;#8217;ll need a test card number to do this. Googling around you&amp;#8217;ll find many pages with lists of numbers that should work. They don&amp;#8217;t.&lt;/p&gt;
&lt;p&gt;To get a card number to use, take the following steps:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Login, in the sandbox, to one of your test buyer&amp;#8217;s accounts&lt;/li&gt;
&lt;li&gt;Select the &amp;#8216;Profile&amp;#8217; menu option&lt;/li&gt;
&lt;li&gt;Under &amp;#8216;Financial Information&amp;#8217; click &amp;#8216;Credit/Debit Cards&amp;#8217;&lt;/li&gt;
&lt;li&gt;Now click the &amp;#8216;Add card&amp;#8217; button&lt;/li&gt;
&lt;li&gt;You will be presented with a screen that is pre-filled with a generated card number. Copy this number and leave the page &lt;strong&gt;without&lt;/strong&gt; clicking &amp;#8216;Add card&amp;#8217; otherwise the card will be associated with the paypal account and you will not be able to use it in the context of a non-logged in user&lt;/li&gt;
&lt;li&gt;You can now use this card number for test transactions, using any future date for the expiry date, and any three digits for the CVV&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;django-paypal seems to be working fine for me so far. To use WPS I shall need to add the ability to do cart upload as well as set some other arguments on the button, but this will not be hard. I&amp;#8217;ll add any learnings to this document as I go.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/16915308973</link><guid>http://blog.zorinholdings.com/post/16915308973</guid><pubDate>Thu, 02 Feb 2012 10:30:00 +0000</pubDate><category>development</category><category>paypal</category><category>payments</category><category>testing</category></item><item><title>we like: uShare + Bravia </title><description>&lt;p&gt;New telly is fun. It can play any content from DLNA server and uShare is an apt-get install away from an Ubuntu prompt&amp;#8230; and it all &lt;em&gt;just works!&lt;/em&gt; I shouldn&amp;#8217;t be amazed, but I am. &lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/12124294483</link><guid>http://blog.zorinholdings.com/post/12124294483</guid><pubDate>Sun, 30 Oct 2011 18:25:00 +0000</pubDate><category>gadgets</category><category>multimedia</category><category>sony</category><category>bravia</category><category>linux</category><category>video</category></item><item><title>Realtek 8191SE WiFi on Thinkpad Edge13... again</title><description>&lt;p&gt;Once again WiFi on the Edge flakes out. This time it&amp;#8217;s a new broadband router furnished by O2. We&amp;#8217;ve been upgraded from the O2WirelessBox II to the O2WirelessBox IV. The excitement is almost&amp;#8230; non-existant.&lt;/p&gt;
&lt;p&gt;Key to this story is the addition of wireless 802.11N which the Realtek card can handle. Except that it can&amp;#8217;t with the Linux drivers (and it seems it flakes out on some Win7 setups as well). &lt;/p&gt;
&lt;p&gt;The bad news is that the usual recourse of rolling a new driver from the latest on the Realtek site didn&amp;#8217;t work for us, and using iwconfig to force the card not to use N didn&amp;#8217;t work either - seems the card doesn&amp;#8217;t allow that (the command being: iwconfig wlan0 modulation 11g). &lt;/p&gt;
&lt;p&gt;So I had to disable N on the router which owners of the O2WirelessBox IV will find cannot be done from the GUI. So for this now very niche demographic, here&amp;#8217;s what to do:&lt;/p&gt;
&lt;pre&gt;&amp;gt; telnet o2wirelessbox.lan
Trying 192.168.1.254...
Connected to o2wirelessbox.lan.
Escape character is '^]'.
Username : SuperUser
Password : 
... splash text...
{SuperUser}=&amp;gt;wireless
{SuperUs{SuperUser}[wireless]=&amp;gt;radio
Admin [up] Oper [up] band [2.4GHz] Interop [802.11b/g/n] channel[11]
&lt;/pre&gt;
&lt;p&gt;So from this we see that 802.11N is enabled. To restrict:&lt;/p&gt;
&lt;pre&gt;{SuperUs{SuperUser}[wireless]=&amp;gt;radio interop = 802.11b/g
{SuperUs{SuperUser}[wireless]=&amp;gt;radio
Admin [up] Oper [up] band [2.4GHz] Interop [802.11b/g] channel[11]
&lt;/pre&gt;
&lt;p&gt;Now disconnect all devices - actually I&amp;#8217;d suggest going via the GUI and disabling WiFi, then re-enabling and have all clients re-connect. You should be good to go now. &lt;/p&gt;
&lt;p&gt;One caveat: this setting does not seem to survive a re-boot. There is probably a way to make it persistent but already I&amp;#8217;ve lost a little too much time to this one so for now, this blog will be my memory! &lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/10571784512</link><guid>http://blog.zorinholdings.com/post/10571784512</guid><pubDate>Fri, 23 Sep 2011 23:39:58 +0100</pubDate><category>linux</category><category>thinkpad</category><category>sysadmin</category><category>lenovo</category><category>howto</category><category>ubuntu</category></item><item><title>My SSH config</title><description>&lt;p&gt;Just in case you&amp;#8217;re interested here&amp;#8217;s my config. A great resource for some tricks with SSH (an amazing tool) is &lt;a href="http://bit.ly/xAdB3g" title="SSH Can do that?"&gt;SSH Can do that?&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;# Enable connection sharing
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
# Sometimes speeds up initial handshake
GSSAPIAuthentication no
Host *
    ForwardAgent yes 
    ForwardX11 yes 
&lt;/pre&gt;
&lt;p&gt;Note that connection sharing is not always appropriate. The first connection made to the remote server must be kept open - a logout / Ctl-D will appear to hang if other sessions are sharing this connection. If you force it closed (e.g. with Ctl-C) all other sessions will be terminated.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/9090296273</link><guid>http://blog.zorinholdings.com/post/9090296273</guid><pubDate>Thu, 18 Aug 2011 20:57:00 +0100</pubDate><category>sysadmin</category><category>unix</category></item><item><title>More strings for the Puppet</title><description>&lt;p&gt;Automating system configuration is something every sysadmin should want to achieve. Even if you don’t have physical boxes to configure and manage on a regular basis, increasingly we use virtualisation to spin up machines everywhere from a developer box to the cloud (e.g. EC2) and these machines all need to go from zero to hero, preferably without human intervention.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;Tools to automate the job of configuring hosts have been around for many, many years. The likes of bcfg2 are no longer the cool kids though, so if you want street cred you’re going to have to make friends with &lt;a href="http://bit.ly/kww95f"&gt;Puppet&lt;/a&gt; or &lt;a href="http://bit.ly/kNu7eb"&gt;Chef&lt;/a&gt; and getting familiar with one of them should probably be on your todo list if you’ve not already tried them.&lt;/p&gt;
&lt;p&gt;Puppet seems to have the biggest crowd around it and it’s relatively simple declarative language works well. With a move from the 0.2x version to 2.x series (subtle change of version numbering - don’t think anyone noticed) a lot of annoyances have been resolved.&lt;/p&gt;
&lt;p&gt;My main gripe was with managing applications on Ubuntu from repositories other than the Ubuntu ones. Creating a class to add the PPA or repo location, trigger an &lt;em&gt;apt-get update&lt;/em&gt; and install the package is easy enough. But do this 20 times and you have 20 updates executed on each catalogue run if there are 20 changes. What you’d want is all apt sources to be updated by all classes that do so, &lt;em&gt;then&lt;/em&gt; have apt-get update once and &lt;em&gt;then&lt;/em&gt; carry on to install packages. Prior to recent releases achieving this was only possibly by explicitly setting all those relationships which is not a scalable, generic solution.&lt;/p&gt;
&lt;p&gt;John Leach (twitter @johnleach) explains how to solve this very problem using new syntax in &lt;a href="http://bit.ly/mMhSEb"&gt;this blog post&lt;/a&gt;. It’s a pattern sure to be valuable in other cases so even if you’re familiar with Puppet, have a read of the updated &lt;a href="http://bit.ly/iTB09O"&gt;Puppet syntax&lt;/a&gt; just in case there’s a slicker way of expressing your rules.&lt;/p&gt;
&lt;p&gt;None of these systems are perfect, but Puppet is advancing quickly and covers a lot of bases so if you have yet to use a configuration management system you should pay it close attention.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/6532843333</link><guid>http://blog.zorinholdings.com/post/6532843333</guid><pubDate>Tue, 14 Jun 2011 22:42:00 +0100</pubDate><category>sysadmin</category><category>puppet</category></item><item><title>http://ifconfig.me/host</title><description>&lt;a href="http://ifconfig.me/host"&gt;http://ifconfig.me/host&lt;/a&gt;: &lt;p&gt;You want your external hostname when stuck inside an AWS EC2 instance? Handy.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/5634476941</link><guid>http://blog.zorinholdings.com/post/5634476941</guid><pubDate>Thu, 19 May 2011 11:35:00 +0100</pubDate><category>sysadmin</category><category>facter</category><category>puppet</category></item><item><title>Ubuntu 10.04 on EC2</title><description>&lt;p&gt;Not the most thrilling of titles, to be sure, but if you&amp;#8217;re looking to dive into the world of Amazon Web Services by starting up some EC2 instances from the Canonical AMIs then my working notes may be of interest. I encountered a couple of problems on the way, but little that did more than expose my ignorance!&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;The scenario: I want to spool up servers which will run Ubuntu 10.04 LTS configured by &lt;a title="Puppet configuration" href="http://www.puppetlabs.com"&gt;puppet&lt;/a&gt; so that I need have minimal interaction with the instances. To do this I need to build a custom AMI which, for convenience, I&amp;#8217;d like to build from a known base AMI in EC2.&lt;/p&gt;
&lt;p&gt;Note that I am using the Python &lt;a title="Boto" href="http://code.google.com/p/boto/"&gt;boto&lt;/a&gt; package to manage my instances&lt;/p&gt;
&lt;h2&gt;Step 1: reach the start line&lt;/h2&gt;
&lt;p&gt;You will need to setup an AWS account and avail yourself of the following:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A key-pair, created in the EC2 management console, that will allow you to SSH into new instances&lt;/li&gt;
&lt;li&gt;An X509 certificate and private key file, created through the account management pages&lt;/li&gt;
&lt;li&gt;Access key ID and Secret Access Key, also created through the account management pages&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Next you&amp;#8217;ll need to pick a starting point - an AMI from which you are going to build your own machine image. Canonical release a number of AMIs of base systems and it is one of these that I shall use. For 10.04 there are two AMIs configured for use without EBS, one 32bit and one 64bit:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;64 bit - ami-631f2b17&lt;/li&gt;
&lt;li&gt;32 bit - ami-a11e2ad5&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Setup your machine&lt;/h2&gt;
&lt;p&gt;Fire up the Canonical AMI that you have chosen. You can login with SSH as follows, assuming your SSH private key is in ~/master.pem:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ ssh -i ~/master.pem -l ubuntu &amp;lt;your ami public dns name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now add software as you see fit - update the apt-repository, install tools&amp;#8230; everything you&amp;#8217;d want to have every time you spin up a host based on this AMI.&lt;/p&gt;
&lt;p&gt;In my case I wanted to update the system:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ apt-get update&lt;br/&gt; $ apt-get upgrade&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And install puppet. I also put an entry in /etc/hosts for my puppet master, mapping the IP address to the name &amp;#8216;puppet&amp;#8217;. Finally I edit /etc/default/puppet and set START=yes so that, on boot, puppetd will start up.&lt;/p&gt;
&lt;h2&gt;Create your AMI&lt;/h2&gt;
&lt;p&gt;Now you&amp;#8217;ve got a machine made you need to use the EC2 AMI tools to bundle it up and push to S3. Unfortunately, when using the AMIs above, the tools in the default ec2-ami-tools package (available in multiverse) do not create a bootable machine. This is because the root filesystem in fstab is referenced by the label uec-rootfs, but /dev/disk/by-label/uec-rootfs does not get copied into the image so on boot, there&amp;#8217;s no root to be found. &lt;/p&gt;
&lt;p&gt;There are a couple of ways around this, but a nice one is to use a patched version of the tools built by Scott Moser and available &lt;a href="https://launchpad.net/~smoser/+archive/bundle-fix-sru-test"&gt;here&lt;/a&gt;. Install as follows:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ add-apt-repository ppa:smoser/bundle-fix-sru-test &lt;br/&gt; $ apt-get update&lt;br/&gt; $ apt-get install ec2-ami-tools&lt;br/&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now copy your x509 certificate and private key file to /mnt on this machine.&lt;/p&gt;
&lt;p&gt;You will now bundle the running machine, storing its state in a set of files to be made into an AMI that will allow you to spin up many instances that look just like this machine.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ ec2-bundle-vol  -k /mnt/pk-YOURPKID.pem -c /mnt/keys/cert-YOURCERTID.pem -s ROOT_PARTITION_SIZE -u YOUR_USER_ID&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;substitute the path to your private key file for -k&lt;/li&gt;
&lt;li&gt;substitute the path to your x509 certificate file for -c&lt;/li&gt;
&lt;li&gt;substitute your Amazon user ID for -u&lt;/li&gt;
&lt;li&gt;insert the desired size of your root partition in Mb for -s. The maximum is 10240 (10Gb). This will determine the size of your AMI and the price you pay for storage in S3&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Now create an S3 bucket to store your AMI - you can do this through the console or using command line tools or scripting libraries like Boto. Your call.&lt;/p&gt;
&lt;p&gt;Upload your image to S3:&lt;/p&gt;
&lt;p&gt;$ ec2-upload-bundle -b BUCKET_NAME -m /tmp/image.manifest.xml -a ACCESS_KEY -s SECRET_KEY&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;the bucket name is that which you just created&lt;/li&gt;
&lt;li&gt;Access key and Secret key must be substituted for in -a and -s&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Register your AMI&lt;/h2&gt;
&lt;p&gt;Via the EC2 console go to AMIs, click &amp;#8216;Register new AMI&amp;#8217; and give the path to the S3 bucket you just uploaded the image to.&lt;/p&gt;
&lt;p&gt;Now you can startup the AMI and try it. Once running SSH in exactly as you did to the Canonical image you started to begin with.&lt;/p&gt;
&lt;p&gt;Note that if you added puppet in the manner described, your puppet master will now have a certificate waiting to be signed from the new machine. The name seen by puppet is the private DNS name for the host.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/4001508767</link><guid>http://blog.zorinholdings.com/post/4001508767</guid><pubDate>Mon, 21 Mar 2011 11:38:00 +0000</pubDate><category>ubuntu</category><category>ec2</category><category>aws</category><category>sysadmin</category></item><item><title>"My enthusiastic little pointy friend is Toothy, and he’s impaling a unicorn to death because..."</title><description>“My enthusiastic little pointy friend is Toothy, and he’s impaling a unicorn to death because you can’t base a business on glitter and rainbows. Real businesses charge. Some might accuse me of creating and promoting lifestyle businesses, but I prefer to call them profitable business”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Amy Hoy, unicorn free:  &lt;a href="http://bit.ly/eyWbxn"&gt;&lt;a href="http://bit.ly/eyWbxn"&gt;http://bit.ly/eyWbxn&lt;/a&gt;&lt;/a&gt;&lt;/em&gt;</description><link>http://blog.zorinholdings.com/post/3588301407</link><guid>http://blog.zorinholdings.com/post/3588301407</guid><pubDate>Tue, 01 Mar 2011 22:03:00 +0000</pubDate><category>business startup</category></item><item><title>Toys of the week: pika and redis</title><description>&lt;p&gt;Always interested in loose coupling and distributed processing I&amp;#8217;ve finally got around to playing with &lt;a title="Redis" target="_blank" href="http://redis.io"&gt;Redis&lt;/a&gt;, the key-value store that has typed values and also provides pub/sub messaging. One value type is a list from which one can pop and to which one can push and I&amp;#8217;ve been playing with this using the Python &lt;a title="redis-py" target="_blank" href="https://github.com/andymccurdy/redis-py"&gt;redis-py&lt;/a&gt; library. &lt;/p&gt;
&lt;p&gt;Redis is intriguing as it is an alternative, for some use cases, to my message bus solution of choice: &lt;a title="AMQP Specification" target="_blank" href="http://www.amqp.org"&gt;AMQP&lt;/a&gt;, usually implemented by &lt;a title="RabbitMQ" target="_blank" href="http://www.rabbitmq.com"&gt;RabbitMQ&lt;/a&gt;. The Python AMQP libraries have always been a bit tricky to work with - not playing well with threads and not providing concurrency. &lt;a title="pike" target="_blank" href="https://github.com/tonyg/pika"&gt;pika&lt;/a&gt;, it would seem, is what I&amp;#8217;ve been waiting for. Time to find out.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/3126493062</link><guid>http://blog.zorinholdings.com/post/3126493062</guid><pubDate>Sat, 05 Feb 2011 18:16:00 +0000</pubDate><category>development</category><category>nosql</category><category>messaging</category><category>python</category><category>amqp</category></item><item><title>Happiness is a capacitor replaced</title><description>&lt;p&gt;In his book &amp;#8220;&lt;a title="The case for working with your hands" target="_self" href="http://amzn.to/dR3DIK"&gt;The Case for Working with Your Hands: or Why Office Work is Bad for Us and Fixing Things Feels Good&lt;/a&gt;&amp;#8221;, &lt;a title="Matthew B. Crawford" target="_self" href="http://bit.ly/geX3sp"&gt;Matthew B. Crawford&lt;/a&gt; explores the reasons why manual labour such as repairing a motorbike, building a wall or repairing an item of furniture, is both pleasurable and beneficial. It is a manifesto for the restoration of what, in my day, was called CDT (Craft, Design and Technology) to its rightful place as a first-class component in our education system.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;img align="text-top" src="http://farm6.static.flickr.com/5128/5209618507_be9525b26a.jpg" alt="DVD Power board" width="500" height="352"/&gt;&lt;/p&gt;
&lt;p&gt;The book seems to have &lt;a target="_self" href="http://bit.ly/hPPQCM"&gt;struck a chord with Education Secretary Michael Gove&lt;/a&gt;: after all, in it Crawford describes precisely the changes that have occurred in the UK education system over the past twenty years, including the abolition of Polytechnics and near total loss of apprentices. At the same time government  has driven to get every single pupil into university under the mis-guided assumption that this constitutes equal opportunity and paves the way to a happier, wealthier society. It is nothing of the sort.&lt;/p&gt;
&lt;p&gt;As with Mr Gove this book resonated with me. My working life is spent mostly in front of a computer: it is my tool for research, I write code, I manage systems, I shop, I browse. Much of this is creative and software development is a deeply intellectually stimulating endeavour. &lt;/p&gt;
&lt;p&gt;But by day my work life is without dirt, sweat, or physical exertion aside from the commute on my bicycle. Come the weekend I want none of it. I am instead eager to do something practical - to use my hands. A couple of weekends ago it was servicing the bike. Nothing too complex. Every 18 months or so the chainset wears out and so I found my self cleaning the bike, stripping down the chain rings, the casette and the chain. Doing this and replacing them, along with renewing brake blocks and going over the bike with a hex key and spanner is a task that is within the reach of most anyone. The pleasure comes in making something better with one&amp;#8217;s own hands and in one&amp;#8217;s own time - taking ownership of a problem and asserting control over one&amp;#8217;s destiny. My ride is much better, and I didn&amp;#8217;t need anyone&amp;#8217;s help. I got greasy and a bit cold. It felt great.&lt;/p&gt;
&lt;p&gt;Today it was a little different. I repaired my DVD player. It only cost forty quid a few years ago, and we don&amp;#8217;t use it a great deal except to play Thomas the Tank Engine and Maisy DVDs for #1 son. Maisy was in fact trapped within the dead machine. The horror! I&amp;#8217;m guessing most people would throw away and pay again but the wife turned to Google and found that lots of people experienced the same symptoms and that it was likely as not a single capacitor on the power board that had failed. Power boards are a typical source of failure in a lot of electronics so this sounded reasonable. The replacement component cost around fifty pence so it was worth trying it out. &lt;br/&gt;&lt;br/&gt;To replace the capacitor took, maybe, five or ten minutes. #1 son assisted and was delighted to see Maisy spinning happily when we fired up the machine with the top off so we could see the moving parts. It was most satisfactory.&lt;/p&gt;
&lt;p&gt;Repairing the machine was a tiny job, and saved fifty pounds maybe. But that was not the point. I&amp;#8217;d been able to preserve my autonomy and assert authority over a gadget that, with its microchips and dense circuit boards is more often than not beyond our practical ability to fix.  My destiny in this case was not for Philips to shape: it was mine to guide with a soldering iron and a capacitor (and not a little advice from those helpful enough to post on the web!)&lt;/p&gt;
&lt;p&gt;Mr Crawford would understand.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/1694727033</link><guid>http://blog.zorinholdings.com/post/1694727033</guid><pubDate>Fri, 26 Nov 2010 22:10:00 +0000</pubDate></item><item><title>Bartech #3</title><description>&lt;p&gt;Another great Bartech CTO meetup last night in Noho. Some really interesting discussion on the matters that are top of our minds - hiring and making tech work within an organisation using what ever means available - SCRUM/kanban/agile/lean/kanbean/scrumban&amp;#8230; Looking forward to Bartech #4 already!&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/971408844</link><guid>http://blog.zorinholdings.com/post/971408844</guid><pubDate>Wed, 18 Aug 2010 10:51:00 +0100</pubDate><category>bartech</category><category>tech</category></item><item><title>Is that site down for everyone, or just me?</title><description>&lt;a href="http://downforeveryoneorjustme.com/"&gt;Is that site down for everyone, or just me?&lt;/a&gt;: &lt;p&gt;How useful is this!? Does what it says on the tin - great for filtering out false positives from another alerting system maybe.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/937526343</link><guid>http://blog.zorinholdings.com/post/937526343</guid><pubDate>Wed, 11 Aug 2010 16:58:36 +0100</pubDate><category>sysadmin</category></item><item><title>Wordle tag clouds</title><description>&lt;a href="http://www.wordle.net/"&gt;Wordle tag clouds&lt;/a&gt;: &lt;p&gt;Still a great fun site - try a word cloud of your emails, your blog, Twelfth Night… &lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/690382731</link><guid>http://blog.zorinholdings.com/post/690382731</guid><pubDate>Sat, 12 Jun 2010 14:13:19 +0100</pubDate><category>tech</category><category>web</category></item><item><title>Alternativeto.net</title><description>&lt;a href="http://alternativeto.net/"&gt;Alternativeto.net&lt;/a&gt;: &lt;p&gt;Find software that is like something else, e.g. what can I use instead of Photoshop? Of course it’s excellent for finding open alternatives to commercial applications so might help people transition between operating systems more easily.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/566153029</link><guid>http://blog.zorinholdings.com/post/566153029</guid><pubDate>Sun, 02 May 2010 19:00:00 +0100</pubDate><category>web</category><category>utilities</category></item><item><title>FlightRadar24</title><description>&lt;a href="http://www.flightradar24.com/"&gt;FlightRadar24&lt;/a&gt;: &lt;p&gt;Unbelievably neat map overlaid with flight data acquired from ADS-B transponders fitted in many aircraft. At the time of writing it makes clear where volcanic ash has closed airspace.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/523655705</link><guid>http://blog.zorinholdings.com/post/523655705</guid><pubDate>Thu, 15 Apr 2010 17:55:00 +0100</pubDate><category>aviation</category><category>mashup</category></item><item><title>Ubuntu 10.04 on LVM</title><description>&lt;p&gt;I never get partition sizes right; too much root, too little root etc. So I&amp;#8217;m going to re-build my notebook with LVM partitioning, just for kicks. Ubuntu Server CDs support LVM install from the &amp;#8220;Expert&amp;#8221; mode, but it doesn&amp;#8217;t look like the desktop variants do. Given that they save me a fair bit of work subsequently, I&amp;#8217;ll therefore work around that.&lt;/p&gt;
&lt;p&gt;My starting point will probably be &lt;a href="http://bit.ly/92oE"&gt;http://bit.ly/92oE&lt;/a&gt; - I&amp;#8217;ll write up my discoveries here.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;The raw instructions. First, boot off a live CD or memory key. Open a terminal and get ready for LVM:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install lvm2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ignore errors about not being able to open &lt;em&gt;casper-functions&lt;/em&gt; and not being able to stat &lt;em&gt;/vmlinux&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo modprobe dm-mod&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m using the whole disk (&lt;em&gt;/dev/sda&lt;/em&gt;) but &lt;em&gt;/boot&lt;/em&gt; needs to be on a normal partition and I&amp;#8217;m going to put &lt;em&gt;/swap&lt;/em&gt; on there as well. The rest, that&amp;#8217;ll be for LVM. Use fdisk to partition:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo fdisk /dev/sda&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I made a 100Mb boot partition (type 83), 6Gb swap (type 82) and the rest is LVM (type 8e). Now the kernel needs to re-read the partition table:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo partprobe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;although this failed for me for various reasons so i just rebooted.&lt;/p&gt;
&lt;p&gt;Now make the ext3 partition on &lt;em&gt;/boot&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo mke2fs -j /dev/sda1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now let&amp;#8217;s make the LVM volume&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo pvcreate /dev/sda3 sudo vgcreate lvmvolume /dev/sda3 sudo &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ lvcreate -n root -L 20G lvmvolume sudo lvcreate -n home -L80G&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ lvmvolume sudo mkfs.ext4 /dev/lvmvolume/root -L root sudo mkfs.ext4 /dev/lvmvolume/home -L home sudo mkswap /dev/sda1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now install Ubuntu onto your new LVM partitions. Once done you need to install LVM2 into the new installation otherwise you&amp;#8217;ll not be able to boot it. The plan is to open a shell, chroot into your new installation and install with apt-get. To start you&amp;#8217;ll need to mount your future root partion; I&amp;#8217;m just mounting on &lt;em&gt;/mnt&lt;/em&gt;; /dev/sdaX is the new root partition:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ mount /dev/lvmvolume/root /mnt mount /dev/lvmvolume/home /mnt/home&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ chroot /mnt sudo apt-get install lvm2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now go ahead and reboot! &lt;/p&gt;
&lt;p&gt;This worked a treat for me - now I can change my partitions on-the-fly when I want. That is a very simple use-case of course, but useful enough that I don&amp;#8217;t see why I &lt;em&gt;wouldn&amp;#8217;t &lt;/em&gt;use LVM for all future installs.&lt;/p&gt;
&lt;p&gt;For less trivial circumstances, when you have multiple disks, servers etc, the value is much greater. Being able to add and remove physical drives, stripe your data across dives, snapshot drives and more all make LVM deeply compelling.&lt;/p&gt;
&lt;p&gt;I think I just got excited about storage.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/516195383</link><guid>http://blog.zorinholdings.com/post/516195383</guid><pubDate>Mon, 12 Apr 2010 20:35:00 +0100</pubDate><category>ubuntu</category><category>sysadmin</category></item><item><title>ThinkPad Edge: Skype...</title><description>&lt;p&gt;Hot on the heals of the WiFi issue solved yesterday, we have a Skype problem. Here are the observations:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Gnome sound recorder works fine, records from mic&lt;/li&gt;
&lt;li&gt;Playback is fine&lt;/li&gt;
&lt;li&gt;Run Skype, make test call. Nothing.&lt;/li&gt;
&lt;li&gt;Now Gnome sound recorder fails to record anything: it immediately stops when you hit record.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Now you&amp;#8217;re stuck. Reboot. Still recording is broken throughout. So how do we get around this?&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;Solutions:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;To get out of hock after doing the above, reboot off a USB stick with 10.04. Not sure if it&amp;#8217;s required to cause the hardware to reset, but I also ran the sound recorder from here to test it worked. Whatever did the trick, rebooting back from the hard-disk, sound recorder worked.&lt;/li&gt;
&lt;li&gt;To get Skype working now, run &lt;strong&gt;without &lt;/strong&gt;PulseAudio. To do this:&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;code&gt;$ PULSE_SERVER=127.0.0.1 /usr/bin/skype&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now it works a treat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;Notes&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Whilst in many ways a great fan of Skype, I find it can be flakey on Linux and the closed nature of the system means we&amp;#8217;re locked into one UI and the pace of development that is.&lt;/li&gt;
&lt;li&gt;I am a great fan of open standards, so I&amp;#8217;m going to look into moving to SIP solutions for as much comms as possible. Maybe my family will come around to this. Or maybe not - the great advantage of little choice is that there&amp;#8217;s one download, one place for help and a great user experience. I am therefore in the wrong. Sort of.&lt;/li&gt;
&lt;li&gt;PulseAudio usually kicks me in the privates once per Ubuntu upgrade. We&amp;#8217;ve had OSS, ALSA and Pulse (amongst others). Can we pick one and stick with it!?&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Software versions referenced in this post&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Ubuntu 10.04 beta&lt;/li&gt;
&lt;li&gt;Skype for Linux Beta 2.1.0.81&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.zorinholdings.com/post/504140345</link><guid>http://blog.zorinholdings.com/post/504140345</guid><pubDate>Wed, 07 Apr 2010 23:35:00 +0100</pubDate><category>lenovo</category><category>ubuntu</category><category>sysadmin</category><category>howto</category></item><item><title>Lenovo ThinkPad Edge WiFi with Ubuntu 10.04</title><description>&lt;p&gt;The Lenovo Thinkpad Edge is a rather nice notebook from the budget end of the Lenovo range. It makes savings in the right places (screen not quite as high res as the expensive models; no carbon fibre; fewer things that blink) whilst retaining a solid, well built feel. Just one problem: under Ubuntu (Lucid - 10.04) the wifi doesn&amp;#8217;t really work&amp;#8230; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NB: As of the update providing kernel 2.6.32-22 Wifi appears to work out of the box, thus rendering this article redundant.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NB(b): Ubuntu 10.10 was found again to be unstable; as of writing the latest Realtek drivers, installed as per this article, seem to be more stable.&lt;/strong&gt;&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;This is Mrs P&amp;#8217;s machine, and she was adamant that her tech support (that&amp;#8217;s me) should install Ubuntu right away. Thus 10.04 went on - we&amp;#8217;re just a month from it being released but it&amp;#8217;s been pretty solid for me thus far.&lt;/p&gt;
&lt;p&gt;All went swimmingly. Just one problem: the wifi would bind, get an IP address, send a few packets (maybe one ping, for example) and then&amp;#8230; nada.&lt;/p&gt;
&lt;p&gt;Googling helped but fellow googlers will find a few key points missing or unclear, so here is what you need to do:&lt;/p&gt;
&lt;p&gt;1) First, you might like to compare the output of&lt;em&gt; lspci &lt;/em&gt;with mine:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:00.0 Host bridge: Advanced Micro Devices [AMD] RS780 Host Bridge&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:01.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (int gfx) &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:05.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (PCIE port 1) &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:07.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (PCIE port 3) &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;... snip ...&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;01:05.0 VGA compatible controller: ATI Technologies Inc RS780M/RS780MN [Radeon HD 3200 Graphics] &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;01:05.1 Audio device: ATI Technologies Inc RS780 Azalia controller&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;strong&gt;03:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8172 (rev 10)&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The last line, in bold, is the Wifi device.&lt;/p&gt;
&lt;p&gt;2) Pre-requisites: you&amp;#8217;re compiling a kernel module so you&amp;#8217;ll need some basic tools. At the risk of stating the obvious, as you&amp;#8217;re downloading new packages you&amp;#8217;ll need to plug into the network with a cable for this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install build-essential&lt;/code&gt; &lt;code&gt;$ sudo apt-get install linux-headers-`uname -r`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3) Download the latest driver code from Realtek by going to &lt;a href="http://bit.ly/9DJrc0"&gt;http://bit.ly/9DJrc0&lt;/a&gt; and clicking on &amp;#8220;RTL8192SE (Software)&amp;#8221;; download the &amp;#8220;Linux driver for kernel 2.6.X&amp;#8221;&lt;/p&gt;
&lt;p&gt;4) Unpack the download: &lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ tar zxvf rtl8192se_linux_[version].tar.gz  # INSERT NAME OF FILE YOU OBTAINED!&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;5) Change to the directory you&amp;#8217;ve just unpacked&lt;/p&gt;
&lt;p&gt;6) Compile:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo su&lt;/code&gt; &lt;code&gt;# make&lt;/code&gt; &lt;code&gt;# make install&lt;/code&gt; &lt;code&gt;# exit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note (October 2010): Steps 7a-c are redundant with the latest driver downloads from Realtek, but I leave them here to give an indication of where things go should you find there to be any problems.&lt;/p&gt;
&lt;p&gt;7a) Swap in this new driver. You are first going to unload the existing kernel module:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo rmmod r8192se_pci&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;7b) Now we&amp;#8217;ll delete the old Ubuntu version (the above did not install over Ubuntu&amp;#8217;s version which will always be found first if you leave it in place):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ cd /lib/modules/`uname -r`/kernel/ubuntu&lt;/code&gt; &lt;code&gt;$ rm -Rf rtl8192se&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;7c) Load the new driver (which installed into /lib/modules/`uname -r`/kernel/drivers/net/wireless):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo modprobe r8192se_pci&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;8) You may find the network applet getting excited at this point - click on it and see if you have wifi. If not, you might just kick-start networking:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo /etc/init.d/networking restart&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With luck, you&amp;#8217;re now happily connected to the world without wires. If you loose this ability, chances are you&amp;#8217;ve had a new kernel installed by Ubuntu and you&amp;#8217;ll need to re-install. You&amp;#8217;ll probably want to re-compile (do a &amp;#8220;make clean&amp;#8221; first) and re-install and also check there isn&amp;#8217;t an ubuntu stock driver to be deleted again. ie, follow the above steps. &lt;/p&gt;
&lt;p&gt;Now I understand there are issues with bluetooth and Skype although so far all looks good (using latest 10.04 beta and Blueman for managing bluetooth)&amp;#8230; if there are, and if I find solutions, I&amp;#8217;ll write up the procedures here.&lt;/p&gt;</description><link>http://blog.zorinholdings.com/post/501557101</link><guid>http://blog.zorinholdings.com/post/501557101</guid><pubDate>Wed, 07 Apr 2010 00:55:00 +0100</pubDate><category>lenovo</category><category>sysadmin</category><category>ubuntu</category><category>howto</category></item></channel></rss>

