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

<channel>
	<title>Pervasive Code &#187; Ubuntu</title>
	<atom:link href="http://www.pervasivecode.com/blog/category/ubuntu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pervasivecode.com/blog</link>
	<description>Jamie Flournoy's Software Development Blog</description>
	<lastBuildDate>Mon, 26 Jul 2010 05:29:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Unix tip: kill -STOP and kill -CONT</title>
		<link>http://www.pervasivecode.com/blog/2010/04/03/unix-tip-kill-stop-and-kill-cont/</link>
		<comments>http://www.pervasivecode.com/blog/2010/04/03/unix-tip-kill-stop-and-kill-cont/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 01:31:44 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=194</guid>
		<description><![CDATA[Pretty much every Unix user knows about the kill command, and most know about &#8216;kill -KILL&#8217; aka &#8216;kill -9&#8242;.
But do you know about kill -STOP and kill -CONT?

I&#8217;m not sure of the exact mechanism (kernel vs. user process) but everything I&#8217;ve used it on on a Mac OS X machine has responded to it in [...]]]></description>
			<content:encoded><![CDATA[<p>Pretty much every Unix user knows about the kill command, and most know about &#8216;kill -KILL&#8217; aka &#8216;kill -9&#8242;.</p>
<p>But do you know about kill -STOP and kill -CONT?<br />
<span id="more-194"></span><br />
I&#8217;m not sure of the exact mechanism (kernel vs. user process) but everything I&#8217;ve used it on on a Mac OS X machine has responded to it in the same way. So you may find a process that doesn&#8217;t do this, but I haven&#8217;t found one.</p>
<p>Basically <code>kill -STOP 1234</code> will pause the process with pid 1234, and <code>kill -CONT 1234</code> will resume it. It&#8217;s as if you can sleep individual applications instead of your entire computer.</p>
<p>It&#8217;s simple, but you can probably imagine why this would be useful. Want to keep Firefox with 45 tabs open, but you&#8217;re not using it for a while and you want to save battery life? Pause it. Pretty much anything like &#8220;I don&#8217;t want to quit and then re-launch this but I wish it wasn&#8217;t using a bunch of CPU time while it idles&#8221; is a good candidate.</p>
<p>Remember that this means your app my time out when it is resumed, as if you had slept your laptop. So network connections it had open when you paused it may be broken when you resume it. So pausing Terminal.app with a bunch of open ssh connections to remote servers isn&#8217;t going to work too well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2010/04/03/unix-tip-kill-stop-and-kill-cont/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Karmic on Xen with Bad /etc/fstab = PAIN</title>
		<link>http://www.pervasivecode.com/blog/2010/02/07/karmic-on-xen-with-bad-etcfstab-pain/</link>
		<comments>http://www.pervasivecode.com/blog/2010/02/07/karmic-on-xen-with-bad-etcfstab-pain/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 00:32:20 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[servers]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=156</guid>
		<description><![CDATA[Argh! I spent about 5 hours yesterday troubleshooting a failed Ubuntu Jaunty -> Karmic (9.04->9.10) upgrade. It worked fine until I rebooted and then failed to boot. Here&#8217;s how I fixed it.

It failed to boot, saying this:

One or more mounts listed in /etc/fstab cannot yet be mounted
/ : waiting for /dev/xvda1
/tmp : waiting for (null)
/swap [...]]]></description>
			<content:encoded><![CDATA[<p>Argh! I spent about 5 hours yesterday troubleshooting a failed Ubuntu Jaunty -> Karmic (9.04->9.10) upgrade. It worked fine until I rebooted and then failed to boot. Here&#8217;s how I fixed it.<br />
<span id="more-156"></span><br />
It failed to boot, saying this:<br />
<code><br />
One or more mounts listed in /etc/fstab cannot yet be mounted<br />
/ : waiting for /dev/xvda1<br />
/tmp : waiting for (null)<br />
/swap : waiting for /dev/xvda9<br />
</code></p>
<p>I tried a lot of stuff and finally solved it. My solution is on the Ubuntu Forum, here: <a href="http://ubuntuforums.org/showpost.php?p=8789500&#038;postcount=37">One or more of the mounts listed in /etc/fstab/ cannot yet be mounted (Karmic)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2010/02/07/karmic-on-xen-with-bad-etcfstab-pain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.10 (Jaunty Jackalope) upgrade notes</title>
		<link>http://www.pervasivecode.com/blog/2010/02/06/ubuntu-910-jaunty-jackalope-upgrade-notes/</link>
		<comments>http://www.pervasivecode.com/blog/2010/02/06/ubuntu-910-jaunty-jackalope-upgrade-notes/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 04:24:57 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[servers]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=154</guid>
		<description><![CDATA[Once again Ubuntu Linux proves itself to be easy to upgrade. Going from 9.04 to 9.10 (one release newer, since their numbering is bsaed on dates) was easy, but included the standard sprinkling of manual re-customization that I&#8217;ve come to expect from Debian based systems.

I did the Network Upgrade for Servers.
I had to re-customize these [...]]]></description>
			<content:encoded><![CDATA[<p>Once again Ubuntu Linux proves itself to be easy to upgrade. Going from 9.04 to 9.10 (one release newer, since their numbering is bsaed on dates) was easy, but included the standard sprinkling of manual re-customization that I&#8217;ve come to expect from Debian based systems.<br />
<span id="more-154"></span><br />
I did the <a href="https://help.ubuntu.com/community/KarmicUpgrades#Network%20Upgrade%20for%20Ubuntu%20Servers%20%28Recommended%29">Network Upgrade for Servers</a>.</p>
<p>I had to re-customize these files since I&#8217;m not running with 100% default configuration:</p>
<p>/etc/monit/monit<br />
/etc/monit/monitrc<br />
/etc/dovecot/dovecot.conf<br />
/etc/apache2/apache2.conf<br />
/etc/php/apache2/php.ini</p>
<p>I basically did a manual diff side by side in Emacs and copied my changes over into the new config files. Reboot, no problems. Nice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2010/02/06/ubuntu-910-jaunty-jackalope-upgrade-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 8.10 and 9.04 (Intrepid Ibex and Jaunty Jackalope) upgrade notes</title>
		<link>http://www.pervasivecode.com/blog/2009/05/30/ubuntu-jaunty-jackalope-upgrade-notes/</link>
		<comments>http://www.pervasivecode.com/blog/2009/05/30/ubuntu-jaunty-jackalope-upgrade-notes/#comments</comments>
		<pubDate>Sat, 30 May 2009 22:54:18 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[servers]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=96</guid>
		<description><![CDATA[I&#8217;m at WordCamp San Francisco today and decided that running a year old version of WordPress (on a year old version of Ubuntu Linux) was undesirable. So, with the confidence that comes from many relatively easy Ubuntu OS upgrades, I charged ahead. For (I think) the second time ever, things went badly. Here&#8217;s what I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m at <a href="http://2009.sf.wordcamp.org/">WordCamp San Francisco</a> today and decided that running a year old version of WordPress (on a year old version of <a href="http://www.ubuntu.com/">Ubuntu Linux</a>) was undesirable. So, with the confidence that comes from many relatively easy Ubuntu OS upgrades, I charged ahead. For (I think) the second time ever, things went badly. Here&#8217;s what I did and how I fixed it.<br />
<span id="more-96"></span><br />
First, I had to figure out what release of Ubuntu was currently installed:<br />
<code>lsb_release -a</code></p>
<p>I was on &#8220;hardy&#8221;, a.k.a. the <a href="https://wiki.ubuntu.com/HardyHeron/">Hardy Heron</a> release, a.k.a. Ubuntu 8.04 LTS.</p>
<p>I had not bothered to install <a href="https://wiki.ubuntu.com/IntrepidIbex/">Ubuntu 8.10 / &#8220;Intrepid Ibex&#8221;</a> because I didn&#8217;t have a reason to when it was release. I now wanted to upgrade to <a href="https://wiki.ubuntu.com/JauntyJackalope">Ubuntu 9.04 &#8220;Jaunty Jackalope&#8221;</a> which has <a href="http://wordpress.org/">WordPress</a> 2.7.1, the current release (as of today).</p>
<p>The way to upgrade from 8.04 to 9.04 is to upgrade to 8.10 first. So I did that:</p>
<p><a href="https://help.ubuntu.com/community/IntrepidUpgrades#Network%20Upgrade%20for%20Ubuntu%20Servers%20(Recommended)">Intrepid Upgrades: Network Upgrade for Ubuntu Servers</a> worked really well. I had to do a little bit of manual file merging as usual (I still don&#8217;t understand why dpkg can&#8217;t merge changes from the old file into a new file) but that was it. Easy!</p>
<p>When I rebooted the VPS, it kernel panicked: can&#8217;t mount the root filesystem. Oh crap. /dev/xvda1 is missing? Really? I told the VPS to hard reboot and it came up fine. But that&#8217;s a little scary. (I think this is something more related to my VPS hosting provider than Ubuntu, but I haven&#8217;t yet upgraded my laptop VMWare Ubuntu VPS&#8217;s yet so I&#8217;m not sure.)</p>
<p>The second stage didn&#8217;t go so well. I did the same sort of simple upgrade: the Jaunty <a href="http://www.ubuntu.com/getubuntu/upgrading#Network%20Upgrade%20for%20Ubuntu%20Servers%20%28Recommended%29">Network Upgrade for Ubuntu Servers</a> instructions are the same as the ones for Intrepid. Upgrade, edit a couple of config files, reboot. Kernel panic again, same reason, reboot. Should work, right?</p>
<p>It booted, but had no network access. I was able to log in via my VPS hosting provider&#8217;s SSH remote console feature, so I was able to see that /etc/init.d/networking was failing to start. It was the same problem that&#8217;s described in <a href="http://www.fs3.ph/article/ubuntu-904-in-an-openvz-ve">Ubuntu 9.04 in an OpenVZ VE</a>. Adding that one line to <code>/etc/init.d/networking</code> fixed the problem. Reboot, all better.</p>
<p>So if you&#8217;re doing this upgrade on a VPS, make sure you&#8217;ve added that little 1-line hack after you do the Jaunty upgrade and before you reboot.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2009/05/30/ubuntu-jaunty-jackalope-upgrade-notes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu Linux 8.04 &#8220;Hardy Heron&#8221; Upgrade Report</title>
		<link>http://www.pervasivecode.com/blog/2008/09/08/ubuntu-linux-804-hardy-heron-upgrade-report/</link>
		<comments>http://www.pervasivecode.com/blog/2008/09/08/ubuntu-linux-804-hardy-heron-upgrade-report/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 01:50:48 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=81</guid>
		<description><![CDATA[Painless! I&#8217;m actually starting to expect it to work without hitches now.
There are a couple of config file changes that need babysitting but none of them was difficult; I really do wish it would automatically do a three way merge between its old package version, the new version, and my version, and just assume &#8220;yes&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Painless! I&#8217;m actually starting to expect it to work without hitches now.</p>
<p>There are a couple of config file changes that need babysitting but none of them was difficult; I really do wish it would automatically do a three way merge between its old package version, the new version, and my version, and just assume &#8220;yes&#8221; if they merge cleanly.</p>
<p>Instructions are trivial: see <a href="https://help.ubuntu.com/community/HardyUpgrades#Network%20Upgrade%20for%20Ubuntu%20Servers%20(Recommended)">Hardy Upgrades: Network Upgrade for Ubuntu Servers (Recommended)</a>.</p>
<p>This also works fine on Xen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2008/09/08/ubuntu-linux-804-hardy-heron-upgrade-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Athlon64 3500+ to Opteron 175 upgrade notes</title>
		<link>http://www.pervasivecode.com/blog/2008/03/01/athlon64-3500-to-opteron-175-upgrade-notes/</link>
		<comments>http://www.pervasivecode.com/blog/2008/03/01/athlon64-3500-to-opteron-175-upgrade-notes/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 00:36:42 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[servers]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2008/03/01/athlon64-3500-to-opteron-175-upgrade-notes/</guid>
		<description><![CDATA[In short, gain with minimal pain, a couple of small hitches. I went single-core to dual-core with a drop-in replacement CPU and it was almost as easy as replacing the batteries in a flashlight.

My main home server is getting old. It was bought in September of 2004, and featured an Athlon64 3500+ processor, 1GB of [...]]]></description>
			<content:encoded><![CDATA[<p>In short, gain with minimal pain, a couple of small hitches. I went single-core to dual-core with a drop-in replacement CPU and it was almost as easy as replacing the batteries in a flashlight.</p>
<p><span id="more-61"></span></p>
<p>My main home server is getting old. It was bought in September of 2004, and featured an Athlon64 3500+ processor, 1GB of RAM, and a heap of hard disks. It&#8217;s still very fast as a file server, and has 3GB RAM now, so other responsibilities (backups, virus and spam filtering of email, etc.) are handled quite quickly too. However, I&#8217;m starting to do more server virtualization for work purposes (test environments with various OS and app configurations) on this server, so I figured it&#8217;d be nice to catch up to a more recent CPU that had multiple cores.</p>
<p>The Socket 939 processor line from AMD is almost phased out now. Upgrading to a new Socket AM2 CPU would mean a new motherboard, and based on the churn in the PC industry, that might lead to some serious cascading upgrades.</p>
<p>For example, the motherboard in this system died a couple of years ago, and it turned out that the PC industry switched to a new type of power connector, so I ended up having to also buy a new power supply also. At the same time, I had to rearrange hard disks because some were attached via a pair of PCI ATA-133 cards, but there were only 3 PCI slots on the new motherboard, and I also had a 3ware 8006-LP (SATA RAID) card, and a video card, fighting for room in those 3 slots. Fun!</p>
<p>The PC enthusiast solution to this sort of problem is apparently to buy a shiny new computer every year, full of brand new parts that match. That would be simple, but would cost about five times as much as what I&#8217;ve done. I was keen to keep the cascade of surprise upgrades to a minimum, which meant trying to stay with Socket 939, and maintaining the same clock rate.</p>
<p>Luckily the Opteron 175 fit the bill exactly: 2.2GHz, Socket 939, dual core, and about $150. That&#8217;s right in my price range for a non-critical but noticeable speed upgrade.</p>
<p>I bought it from Newegg, who by the way rock utterly. It showed up promptly and I opened it up, and&#8230; ugh. A new style of plug for the heatsink fan? Hmm, can I use the old heatsink? Maybe&#8230; but the new one looks much fancier. (The new one is on the left and the old one is on the right.)</p>
<p><img src="/images/socket939/new_and_old_heatsinks.jpg" width="492" height="369" /></p>
<p>Note the <a href="http://en.wikipedia.org/wiki/Heat_pipe">heat pipe</a>:</p>
<p><img src="/images/socket939/new_heatsink_side.jpg" width="256" height="192" /></p>
<p>It was pretty obvious what the copper tubing was for, but I didn&#8217;t know about the cool capillary circulation aspect (no pump!) nor that this had become mainstream technology for low-end coolers. Nifty.</p>
<p>Also notice that the new one (in the first photo alongside the old one) has pre-applied thermal paste. It&#8217;s the light gray square in the middle. I wiped most of the paste off of the old one, in anticipation of maybe needing to re-apply new paste and use it again due to the 3 vs. 4 pin problem.</p>
<p>Some reading about this plug switchover led me to believe that the 4th pin was optional and that the new plug was designed to fit into old-style plugs as needed. I tried it and it worked fine.</p>
<p>Here&#8217;s the socket with no CPU in it; you can see the white 3-pin connector labeled &#8220;CPU FAN&#8221; in the upper right corner.</p>
<p><img src="/images/socket939/socket_939_empty.jpg" width="433" height="569" /></p>
<p>And here is a close-up of the 4-pin cable plugged into the 3-pin connector, overhanging a large screw. Note that the right side of the plug has two plastic ridges designed to force you to plug it in the right way. Clever!</p>
<p><img src="/images/socket939/after_installation.jpg" width="333" height="457" /></p>
<p>Still, if you fail to plug the CPU fan in and the CPU overheats and dies, you void your warranty, so I&#8217;m glad I checked before just plugging it in and hoping it&#8217;d work.</p>
<p>I thought about the conventional wisdom, which is first that &#8220;box coolers&#8221; (the CPU coolers that come in the box with CPUs from the manufacturer) are lame, and second that overclocking an Opteron 175 works well. Given that I have no intention of overclocking this thing, I figured that the box cooler would be fine.</p>
<p>After I put the server back together, I ran two instances of <code>burnK7</code> (from the <a href="http://packages.ubuntu.com/gutsy/cpuburn">cpuburn package</a>) for a little over an hour, to keep both cores super busy. <code>burnK7</code>&#8217;s mission in life is to make your CPU temperature as hot as possible. The temperature never exceeded 57C for either core, compared to an idle temperature of 37C. The ambient temperature was 69F, and the case is not particularly fancy (2 fans in, 1 out, plus one in the power supply), so I&#8217;d have to say that the box cooler and preinstalled thermal paste are fine.</p>
<p>Overclockers may disagree and favor fancier coolers, but from experience I know that in this server, the hard disks are more likely to overheat on a hot day. I added an external desk fan to this server&#8217;s rack last year to resolve that problem, which was caused mainly by poor external air circulation.</p>
<p>A couple of things went more easily than I had expected. First, when researching this upgrade I found that (at least for Ubuntu Gutsy, possibly for other Linux releases or distros) there regular AMD64 kernel has SMP support. So, no OS tweaking was required to support the Opteron 175&#8217;s dual cores. Second, VMware Server recognized the second CPU and used both CPUs when I ran some tests on two uniprocessor virtual servers. Interestingly, <code>/proc/cpuinfo</code> on a virtualized Linux server shows the right CPU name for what is a dual-core CPU, but only lists one core, which matches the VMware configuration for that virtual server.</p>
<p>VMware did complain in a couple of cases about the different CPU feature set, when resuming suspended VMs. You can dismiss the message and run the VM, and that works, but it warns each time in my case because they are set up as locked snapshots (always restoring from the point where it was originally suspended, before the CPU upgrade).</p>
<p>This is minor, and the fix to make the warnings go away is quick: resume the VM from the old snapshot (dismissing the warning message), unlock the snapshot, make a new snapshot, lock that, and suspend (or power off) the VM. Now when you resume it in the future the warning will not appear. That&#8217;s simple to do, but it wasn&#8217;t 100% seamless, so I thought I&#8217;d mention it. I am glad that there was a warning, though; that would have helped if there had been an actual problem caused by the CPU change. In my opinion VMware does exactly the right thing.</p>
<p>So, all in all this was a very pleasant upgrade; quick, cheap, and effective (for server workloads which parallelize easily, this server is almost twice as fast as before).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2008/03/01/athlon64-3500-to-opteron-175-upgrade-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading to Ubuntu 7.10 &#8220;Gutsy Gibbon&#8221; on Xen</title>
		<link>http://www.pervasivecode.com/blog/2008/02/12/upgrading-to-ubuntu-710-gutsy-gibbon-on-xen/</link>
		<comments>http://www.pervasivecode.com/blog/2008/02/12/upgrading-to-ubuntu-710-gutsy-gibbon-on-xen/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 23:02:17 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2008/02/12/upgrading-to-ubuntu-710-gutsy-gibbon-on-xen/</guid>
		<description><![CDATA[I have a VPS hosted at RimuHosting.com. I waited a while (3 months) for bugs to be squashed before upgrading it to Ubuntu Linux 7.10 (&#8221;Gutsy Gibbon&#8221;). There was one new issue.
BTW, my non-Rimu home server was the first thing I updated. Notes are here.
The only Xen wrinkle is that you need the libc6-xen package. [...]]]></description>
			<content:encoded><![CDATA[<p>I have a VPS hosted at RimuHosting.com. I waited a while (3 months) for bugs to be squashed before upgrading it to Ubuntu Linux 7.10 (&#8221;Gutsy Gibbon&#8221;). There was one new issue.</p>
<p>BTW, my non-Rimu home server was the first thing I updated. Notes are <a href="http://www.pervasivecode.com/blog/2007/12/28/ubuntu-linux-710-gutsy-gibbon-upgrade-report/">here</a>.</p>
<p>The only Xen wrinkle is that you need the <code>libc6-xen</code> package. I don&#8217;t know if that&#8217;s in Feisty or not. In my case I experienced a slew of scary Segmentation Fault errors in the package configuration stage. I found <a href="http://www.unixshell.com/forum/showpost.php?s=f92ba4537077b59a864833c94d6cd724&#038;p=8458&#038;postcount=6">:this post</a> which contains a solution for the problem. But if possible you might want to try installing that package before upgrading. If that doesn&#8217;t work, just use the method described in that post.</p>
<p>After doing that and running <code>dpkg --configure -a</code>, it was okay. It did complain about AppArmor and being unable to do something with modules, but that seems to be not germane to Xen so I ignored it and rebooted, and everything seems fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2008/02/12/upgrading-to-ubuntu-710-gutsy-gibbon-on-xen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu Linux 7.10 &#8220;Gutsy Gibbon&#8221; Upgrade Report</title>
		<link>http://www.pervasivecode.com/blog/2007/12/28/ubuntu-linux-710-gutsy-gibbon-upgrade-report/</link>
		<comments>http://www.pervasivecode.com/blog/2007/12/28/ubuntu-linux-710-gutsy-gibbon-upgrade-report/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 19:37:13 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[servers]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/12/28/ubuntu-linux-710-gutsy-gibbon-upgrade-report/</guid>
		<description><![CDATA[A few weeks ago I updated to the latest version of Ubuntu Linux. This is the 7.10 (meaning October 2007) release, called &#8220;Gutsy Gibbon&#8221;. I encountered a couple of serious issues early on, but now that these are resolved things are running well. I&#8217;ll describe the issues and solutions so that anyone else encountering them [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I updated to the latest version of Ubuntu Linux. This is the 7.10 (meaning October 2007) release, called &#8220;Gutsy Gibbon&#8221;. I encountered a couple of serious issues early on, but now that these are resolved things are running well. I&#8217;ll describe the issues and solutions so that anyone else encountering them can easily overcome them.<br />
<span id="more-54"></span></p>
<p>I used the instructions on the <a href="https://help.ubuntu.com/community/GutsyUpgrades?highlight=%28upgrade%29#head-f2435a45758bb5836f8e5b87e90045463f8c6ec7">GutsyUpgrades</a> page of the Ubuntu help wiki, under the heading &#8220;Network upgrade for Ubuntu servers (recommended)&#8221;. This is the command-line way of doing things, which is appropriate for administering a remote server via SSH. There are two steps: install the updater, and run the updater. That&#8217;s pretty slick.</p>
<p>Unfortunately as usual with Debian based releases there are many cases (a dozen or so) where the simple act of updating a package from an old version to a new version causes the installer to plead for human guidance. I find it irritating that if you change the default configuration at all, it cannot simply merge your changes into the new config file and continue. You have to do that manually. This is tedious, but not a really big issue.</p>
<p>In my case I had to manually merge apache2.conf, php.ini, and dovecot.conf because I had made a single line change in each file.</p>
<p>Upon reboot there were vast numbers of error messages, which I ultimately determined to have been caused by <a href="https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/115616">this issue</a>. Removing <code>evms</code> solved the problem, and now there&#8217;s a <a href="https://wiki.ubuntu.com/Evms">special page about <code>evms</code> and why it&#8217;s no longer supported</a>. Based on my reading of that page I suspect that there may be a new version of the Gutsy Gibbon updater that actually helps you by suggesting that you get rid of <code>evms</code> proactively to prevent this problem. Nice! Anyway my fix was simply to wait until the system had booted (slowly, with lots of error messages) and to carefully type in <code>apt-get remove evms</code> which I couldn&#8217;t even see as I typed because of the flood of error messages. Once that was done that problem went away completely.</p>
<p>I had a separate problem which was that the kernel has re-named the devices for my hard disks, which made a couple of my drives appear not to be recognized by the system. I use Linux Software RAID for a single mirrored volume, and for some reason it couldn&#8217;t use the volume UUID to figure out where the drives had gone. After recompiling a custom kernel using <a href="http://ubuntuforums.org/showthread.php?t=311158">these excellent instructions</a> to try and resolve <a href="https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/157909">this issue</a> (which turned out to be a red herring), I found out that I was on the wrong track. (But I also found out that it only takes 56 minutes to compile a kernel on my server, which isn&#8217;t too bad.) I read dmesg extremely carefully and figured out what had happened. Some work with mdadm told the software RAID manager how to find the components of my RAID mirror and all was well with that. My understanding is that since /etc/fstab includes UUIDs now, drives moving around shouldn&#8217;t cause problems like this, so maybe this is a problem specific to the Software RAID system. Other drives moved but were located and mounted properly, with no need for manual intervention.</p>
<p>Finally, I had to update to VMWare Server 1.0.4, which is the first version that supports the kernel included with Gutsy Gibbon (2.6.22-14-server).</p>
<p>Now that all this is behind me I can say that for servers it&#8217;s a decent update; I have no experience with it as a desktop. If you have any doubts you can probably skip this one and wait for the next <a href="https://wiki.ubuntu.com/LTS">LTS</a> release. But if you do plan to upgrade, just make sure to remove <code>evms</code> first and look in the /dev/sd_ range for any hard drives that seem to have disappeared.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/12/28/ubuntu-linux-710-gutsy-gibbon-upgrade-report/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Impressions of Ruby on Rails from an ex J2EE developer (me)</title>
		<link>http://www.pervasivecode.com/blog/2007/07/05/impressions-of-ruby-on-rails-from-an-ex-j2ee-developer-me/</link>
		<comments>http://www.pervasivecode.com/blog/2007/07/05/impressions-of-ruby-on-rails-from-an-ex-j2ee-developer-me/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 05:20:15 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/07/05/impressions-of-ruby-on-rails-from-an-ex-j2ee-developer-me/</guid>
		<description><![CDATA[A friend who is working primarily in the J2EE technology world (as I was, until early 2006) asked me for a how&#8217;s-it-going with respect to Ruby and Rails.
The short version:
- Ruby is fun to program in, as you&#8217;ve probably heard
- Rails is over-hyped, but it&#8217;s still quite good (definitely not perfect)
- I like the productivity [...]]]></description>
			<content:encoded><![CDATA[<p>A friend who is working primarily in the J2EE technology world (as I was, until early 2006) asked me for a how&#8217;s-it-going with respect to Ruby and Rails.</p>
<p>The short version:<br />
- Ruby is fun to program in, as you&#8217;ve probably heard<br />
- Rails is over-hyped, but it&#8217;s still quite good (definitely not perfect)<br />
- I like the productivity of Ruby on Rails but I wouldn&#8217;t call it a silver bullet by any means<br />
- Ruby performance was bad and is getting less bad, and can even be good if you do what the experts say<br />
- The real gem (har har) in the Ruby and Rails space is the community itself<br />
<span id="more-32"></span><br />
Now for the longer version:</p>
<p>It&#8217;s hard for me to be objective since I only started programming in Ruby in February and started using Rails in April, but the language and framework don&#8217;t strike me as tedious or kludgy at all. I&#8217;m definitely enjoying Ruby and making use of its fancier language features, all of which seem to actually work as advertised without any hideous gotchas when you actually try to do something slick.</p>
<p>I particularly enjoy the way Ruby&#8217;s collections allow you to write in the style of a functional language; have a look at the <a href="http://www.ruby-doc.org/core/classes/Array.html">Array</a>, <a href="http://www.ruby-doc.org/core/classes/Enumerable.html">Enumerable</a>, and <a href="http://www.ruby-doc.org/core/classes/Hash.html">Hash</a> classes to see what I mean. It&#8217;s possible to write extremely compact code that morphs a collection into something very different, but without the inscrutability of Perl.</p>
<p>Compared to my experience with mainstream Java and J2EE, I certainly don&#8217;t miss Tomcat, Ant, Struts, or JSP Expression Language. (Instead I&#8217;m using Mongrel, Rake, Rails, and ERB.) That&#8217;s not Java&#8217;s fault, and could be alleviated by just picking better tools and frameworks at the start of a project. I don&#8217;t miss Hibernate but I don&#8217;t have any gripes about it either.</p>
<p>There are features in Java 1.5 that are helpful in alleviating some of the annoyances of programming in Java, but because these are new features, the vast majority of library code in the wild doesn&#8217;t use them (similar to the problems with OO being bolted onto Perl and PHP). Also there are political and business deployment roadblocks to using the latest technology: just because you can download an official release of something and it works perfectly for your code, that doesn&#8217;t mean that you necessarily have permission to deploy that technology stack onto production servers. Big organizations take years to officially support new releases, so you may be stuck developing against 3 year old products and APIs.</p>
<p>I&#8217;m not trying to troll for Java vs Ruby comment flames here. My point is just that Ruby has had features for a relatively long time that Java is just recently adopting (or simulating), and that&#8217;s important for more than just petty bragging rights; a feature that&#8217;s unavailable to you for your own org&#8217;s political or financial reasons might as well not be there at all. (Or maybe it&#8217;s worse, if it makes you bitter about your own work environment: &#8220;I have to write all this ugly stupid code because Bob is afraid to upgrade the server&#8230; grr.&#8221;)</p>
<p>I can remember quite a few times when I painted myself into a corner in Java and had to write lots of type casting / checking / converting code, or had to try and work around single inheritance using composition and lots of boilerplate proxy methods, or really wished java.lang.String weren&#8217;t final so I could subclass it, etc. Ruby feels a lot more like Perl or JavaScript than Java when it comes to being able to do whatever you want when you&#8217;re sure you know what you&#8217;re doing, and being able to write weird fancy code that magically makes everything that calls it become dead simple.</p>
<p>I used to be horrified at the idea of messing with somebody else&#8217;s classes (as is done by <a href="http://require.errtheblog.com/plugins/changeset/221">Hash.slice</a> from will_paginate, which I swiped all by itself since I don&#8217;t really need will_paginate), but I&#8217;m finding that the apocalypse I feared just isn&#8217;t there. If you do something wacky, like add a new method to String, the world doesn&#8217;t collapse. Or maybe it does, and you decide not to do it that particular way; just do something else. ActiveSupport adds all kinds of stuff to base classes like String, and it&#8217;s OK. Example: <a href="http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html">ActiveSupport::CoreExtensions::String::Inflections</a>.</p>
<p>I&#8217;m still adjusting to using a dynamic language: not uber-checking arguments and state all the way down a method call stack (oh no! is it nil?), not locking down everything so it can only work the way I planned, etc.  In most cases, the Ruby equivalent of a NullPointerException is fine. I think this is because the built-in error message includes the type and method you were trying to call, so you can usually just read that and see what you did wrong. The only time you&#8217;d want to prevent that is if you bury that error deep in your own code, so that the caller would have no idea of what they did that led to it. I&#8217;m finding that I&#8217;m OK with writing less paranoid code, because the failure will still happen, and be suitably clear in its cause, without my explicitly checking for it.</p>
<p>An issue with Ruby and Rails is that the official documentation is limited. It&#8217;s imperative to have 2 or 3 books on hand at all times, in addition to the RDoc Rails documentation. I own three of the Pragmatic Programmer books: <a href="http://www.pragmaticprogrammer.com/titles/ruby/">Programming Ruby</a> (the &#8220;pickaxe book&#8221;), <a href="http://www.pragmaticprogrammer.com/titles/rails2/index.html">Agile Web Development with Rails, <b>2nd Edition</b></a>, and <a href="http://www.pragmaticprogrammer.com/titles/fr_rr/index.html">Rails Recipes</a>. Just looking at generated API documentation won&#8217;t tell you how you&#8217;re supposed to use libraries.</p>
<p>The reverse way of looking at that need for documentation is symbol lookup. Rails does some pre-including of library and framework files before loading the application file you&#8217;re working on, so unlike Java, you don&#8217;t have a mandatory list of imports at the top that tell you where every class you&#8217;re working with came from. There are some symbols and functions you can call from instances of particular classes, and they came from somewhere but it&#8217;s not obvious where, at least when you&#8217;re starting. A good IDE with &#8220;find declaration&#8221; could fix this, but initially it&#8217;s daunting: &#8220;what are *all* the options for this method?&#8221; &#8220;Where is this method defined, even?&#8221; etc. This is where the books are less useful and API documentation can help.</p>
<p>I&#8217;ve also subscribed to a couple dozen RSS feeds that help me keep up with what the really slick Ruby and Rails people are using, writing, struggling with, etc. Chief among them is probably <a href="http://errtheblog.com/">Err the Blog</a>. The <a href="http://podcast.rubyonrails.org/">Ruby on Rails podcast</a> is helpful also.</p>
<p>As for productivity, here are 4 specific time-savers I&#8217;ve found:</p>
<p>1) TextMate, which is very slick. There are Windows equivalents, though from what I&#8217;ve heard, they&#8217;re not 100% as good. Point is, a text editor that understands Ruby is critical, and if it helps you jump around in a big tree of files, that&#8217;s very helpful.</p>
<p>I&#8217;m an Emacs devotee, and TextMate is far better for Ruby and Rails. It&#8217;s hard to explain, but let&#8217;s just say that TextMate is much deeper and more featureful than it appears at first glance.</p>
<p>I looked at NetBeans which is pretty close to being a very smart Ruby &#038; Rails IDE, but it was still suffering an identity crisis (am I a Java IDE? or a multi-language thing?) that cluttered the UI badly. This is a hot area of innovation right now so any week now TextMate might be eclipsed (or Eclipsed, har har) by something more full-featured. There are a few other options but I didn&#8217;t see anything that led me to believe a multi-hour or multi-day eval would be worth it.</p>
<p>2) Locomotive. It&#8217;s like MAMP or WAMP or any of those all-in-one application stack installers, except it gives you a working Rails environment. I set up PostgreSQL separately thru MacPorts (a cousin of the FreeBSD ports project), which was somewhat tedious but decently documented.</p>
<p>Getting all the Ruby and Rails stuff compiled from source is no picnic, and frankly unnecessary. On Ubuntu there&#8217;s a gotcha: the Ubuntu people and the RubyGems people can&#8217;t agree on a file layout, so Ubuntu&#8217;s rubygems package sucks. It&#8217;s better to install Ruby using apt-get and then install gems manually from the tarball.</p>
<p>3) Rails Plugins. There&#8217;s a lot of stuff being built on top of Rails and then improved day by day, and svn-over-WebDAV is the popular sync protocol. There&#8217;s a tool called Piston that helps you manage this. Anyway there&#8217;s a lot of stuff that is hard to do and commonly needed which is available in plugin form.</p>
<p>4) ZenTest, and more specifically, Autotest. It watches your source tree and runs only the tests in your test suite that need to be run based on what has changed; it&#8217;s the dynamic-language version of the incremental compilation that&#8217;s present in any good Java IDE.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/07/05/impressions-of-ruby-on-rails-from-an-ex-j2ee-developer-me/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ubuntu Linux 7.04 &#8220;Feisty Fawn&#8221; upgrade report</title>
		<link>http://www.pervasivecode.com/blog/2007/04/23/ubuntu-linux-704-feisty-fawn-upgrade-report/</link>
		<comments>http://www.pervasivecode.com/blog/2007/04/23/ubuntu-linux-704-feisty-fawn-upgrade-report/#comments</comments>
		<pubDate>Mon, 23 Apr 2007 19:08:30 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[servers]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/04/23/ubuntu-linux-704-feisty-fawn-upgrade-report/</guid>
		<description><![CDATA[7.04 (meaning &#8220;the major release planned for 2007/04&#8243;, not meaning &#8220;the minor release following 7.03&#8243;) was released on April 19th. I upgraded today and it went pretty well, with a bit of manual cleanup required. More details after the jump.
I had a few packages installed from the Feisty Fawn universe and multiverse repositories (wordpress, clamav) [...]]]></description>
			<content:encoded><![CDATA[<p>7.04 (meaning &#8220;the major release planned for 2007/04&#8243;, not meaning &#8220;the minor release following 7.03&#8243;) was released on April 19th. I upgraded today and it went pretty well, with a bit of manual cleanup required. More details after the jump.<span id="more-21"></span></p>
<p>I had a few packages installed from the Feisty Fawn universe and multiverse repositories (wordpress, clamav) on top of my Edgy Eft installation, and the mixed version setup worked well. Clamav was updated to depend on a library (libc, I think) that was not available in Edgy Eft, and Apt was smart enough to just leave clamav at the existing version. Also, I had made quite a few local customizations to configuration files for dovecot imapd (enabling non-secure IMAP connectons since they only happen over my home LAN), /etc/services (adding VMWare&#8217;s admin service and a second Subversion repository), and a couple of others.</p>
<p>I started by changing &#8216;edgy&#8217; to &#8216;feisty&#8217; in /etc/apt/sources.list, clearing out the old CD-ROM source line (from my original installation from ISO images) and duplicate universe and multiverse lines (from my mixed installation).</p>
<p>I then did <code>apt-get update</code>, and <code>apt-get -d dist-upgrade</code> (<code>-d</code> means download but don&#8217;t install) and let that run (300+ MB of stuff to download, might as well let it run while I sleep).</p>
<p>This morning I ran <code>apt-get dist-upgrade</code> and babysat it. There were a couple of things that it said it would uninstall that I had to reinstall: <code>libapache2-mod-python</code> (needed by Trac), <code>ruby18-elisp</code> (not automatically upgraded to <code>ruby19-elisp</code>, but that was easy to manually install), and <code>libnet-perl</code>, which appears to be broken currently. That last one would seem to be the first of two genuinely broken things in this upgrade, though I can&#8217;t think of anything I use that depends on it.</p>
<p>There were a half dozen or so manual config file merges that I had to do; I wish one of the options were to attempt an automatic merge of the existing, customized version and the new, vanilla version. Nothing I changed really required manual intervention; all I did was what <code>patch</code> could have done just as easily. Tedious, but not really a problem. This effort probably added 5 minutes total.</p>
<p>After all that, it rebooted cleanly but Trac doesn&#8217;t work anymore. Apparently Trac depends on Clearsilver which reportedly is an antique and obsolete template system that isn&#8217;t currently built for Python 2.5, which is part of ubuntu-minimal on Feisty. I have <a href="http://trac.edgewall.org/wiki/TracForPython2.5">a lead on fixing this manually</a> but I haven&#8217;t done it yet. I expect this to be fixed for me in an official package in the next week or less; several folks know about it and say the fix is percolating through the package system already. So I might not bother with the manual fix.</p>
<p>The reboot went fine. I then updated VMware Server, which required a bit of manual assistance, but then it always does. Here&#8217;s what I did: <a href="http://ubuntuforums.org/showthread.php?p=2462643 ">VMWare Server in Feisty</a>.</p>
<p>I haven&#8217;t upgraded my VPS yet but I&#8217;ll do that soon. I want to check with my VPS hosting support folks first to see if they know of any gotchas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/04/23/ubuntu-linux-704-feisty-fawn-upgrade-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
