<?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>colincogle.name</title>
	<atom:link href="http://colincogle.name/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://colincogle.name/blog</link>
	<description></description>
	<lastBuildDate>Tue, 03 Nov 2009 05:03:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Perfect Pitch</title>
		<link>http://colincogle.name/blog/2009/11/03/perfect-pitch/</link>
		<comments>http://colincogle.name/blog/2009/11/03/perfect-pitch/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 05:02:16 +0000</pubDate>
		<dc:creator>Colin Cogle</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[repost]]></category>

		<guid isPermaLink="false">http://colincogle.name/blog/?p=54</guid>
		<description><![CDATA[Even an inline reference to PerfectPitch.com (much like this one right here) resulted in a DMCA complaint, and a blogger's Web site being removed from Google's results.<!-- Easy AdSense V2.75 -->
<!-- Post[count: 1] -->
<div class="ezAdsense adsense adsense-leadout" style="text-align:center;margin:12px;"><script type="application/javascript">
google_ad_client = "pub-3747471827356792";
google_ad_slot = "0729688334";
google_ad_width = 468;
google_ad_height = 60;
</script>
<script type="application/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>]]></description>
			<content:encoded><![CDATA[<p>Web developer <a href="http://adactio.com/journal/1623/" title="View the original post here.">Jeremy Keith writes</a> in his blog about DMCA takedowns, and what appears to be Google waffling on their &#8220;don&#8217;t be evil&#8221; creed:</p>
<blockquote cite="http://adactio.com/journal/1623/"><p>I was reminded that I have an account over at <a href="https://www.google.com/webmasters/tools/">Google Webmaster Tools</a> set up for three of my sites: <a href="http://adactio.com/">adactio.com</a>, <a href="http://huffduffer.com/">huffduffer.com</a> and <a href="http://thesession.org/">thesession.org</a>. I logged in today for the first time in ages and started poking around.
<p>I noticed that I had some unread messages. Who knew that Google Webmaster Tools has a messaging system? I guess all software really <em>does</em> evolve until it can send email.</p>
<p>One of the messages had the subject line <cite>Blocked URLs</cite>:</p>
<blockquote><p>For legal reasons, we’ve excluded from our search results content located at or under the following URL/directory:</p>
<p><a href="http://www.thesession.org/discussions/display/21250">http://www.thesession.org/discussions/display/21250</a></p>
<p>This content has been removed from all Google search results.</p>
<p>Cause: Somone has filed a DMCA complaint against your site.</p>
</blockquote>
<p>What now?</p>
<p>I visited the URL and found a fairly tame discussion about <a href="http://www.thesession.org/discussions/display/21250">Perfect Pitch</a>. Here’s the only part of the discussion that references an external resource in a non-flattering light:</p>
<blockquote><p>I think that is referring to www.PerfectPitch.com. I’m not saying anything about such commercially-oriented courses because I don’t know them, but I think we’d all be wise to bear in mind the general comments voiced in the first two posts on this thread.</p>
</blockquote>
<p>That single reference to a third-party site is, apparently, enough to trigger a <abbr title="Digital Millenium Copyright Act">DMCA</abbr> complaint.</p>
<p>So let’s get this straight. In a discussion about perfect pitch, someone mentions the website perfectpitch.com. They don’t repost any materials from the site. They don’t even link to the site. They don’t really say anything particularly disparaging. But it all takes is for the owner of perfectpitch.com to abuse the Digitial Millenium Copyright Act with a spurious complaint and just like that, Google removes the discussion from its search index.</p>
</blockquote>
<p>Jeremy goes on to urge anyone with a publicly-viewable blog, Twitter, or whatnot to link to, repost, or otherwise disseminate his article.  I couldn&#8217;t agree more:  while the DMCA does uphold the rights of copyright holders, abuses like this shouldn&#8217;t be tolerated.  In fact, I&#8217;m willing to bet a small sum that I receive an unjustified DMCA complaint from PerfectPitch.com for merely mentioning them in this repost.  We shall see.</p>
<!-- Easy AdSense V2.75 -->
<!-- Post[count: 2] -->
<div class="ezAdsense adsense adsense-leadout" style="text-align:center;margin:12px;"><script type="application/javascript">
google_ad_client = "pub-3747471827356792";
google_ad_slot = "0729688334";
google_ad_width = 468;
google_ad_height = 60;
</script>
<script type="application/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://colincogle.name/blog/2009/11/03/perfect-pitch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eliminating &#8220;Page has expired&#8221; warnings</title>
		<link>http://colincogle.name/blog/2009/11/02/eliminating-page-has-expired-warnings/</link>
		<comments>http://colincogle.name/blog/2009/11/02/eliminating-page-has-expired-warnings/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 05:15:39 +0000</pubDate>
		<dc:creator>Colin Cogle</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[repost]]></category>

		<guid isPermaLink="false">http://colincogle.name/blog/?p=50</guid>
		<description><![CDATA[Changing one header will eliminate "Page has expired" warnings from your PHP applications.]]></description>
			<content:encoded><![CDATA[<p>Every programmer working with PHP session cookies has gotten &#8220;Page has expired&#8221; warnings from time to time.  The most common cause is simple:  a user, when a session cookie is set, clicks on the Back button.  Because the pages are not being cached, the page has, in essence, expired.</p>
<p><a href="http://shiflett.org/articles/how-to-avoid-page-has-expired-warnings" title="Original article, a must read">As Chris Shiflett points out in his blog post</a> (which you should read after this), the fix is simple.  PHP, by default, sends a <samp>Cache-Control: nocache</samp> header.  To override it, set this header in your <kbd>php.ini</kbd> file or with a call to <kbd>ini_set()</kbd>:</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">session.cache_limiter = private</div></td></tr></tbody></table></div>
<p>This will cause the server to send a <samp>Cache-Control: private</samp> header instead.  Restart your Web server, and pages will be cached for three hours by default.  As always, test that out and see if it causes problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://colincogle.name/blog/2009/11/02/eliminating-page-has-expired-warnings/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How-to:  Change your server&#8217;s IP address</title>
		<link>http://colincogle.name/blog/2009/10/25/how-to-change-your-servers-ip-address/</link>
		<comments>http://colincogle.name/blog/2009/10/25/how-to-change-your-servers-ip-address/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 03:52:47 +0000</pubDate>
		<dc:creator>Colin Cogle</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[IPv4]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://colincogle.name/blog/?p=42</guid>
		<description><![CDATA[Normally, when changing a server's IP address, there is a small transition window where both the old and new IP addresses work.  But what happens when you can't get a transition period?]]></description>
			<content:encoded><![CDATA[<h2>The Problem</h2>
<p>It happens to the best of us.  I administer an Internet-facing server for a client, who has native <abbr title="Internet Protocol Version 4">IPv4</abbr> connectivity, and <abbr title="Internet Protocol Version 6">IPv6</abbr> connectivity via 6to4.  All was going well, until one day, the owner needed more IPv4 addresses.  So we contacted their ISP (Comcast) and upgraded our /30 block (one IPv4 address) to a /29 block.  That&#8217;s all and well, except:</p>
<ol>
<li>The new /29 subnet does <em>not</em> contain the /30 subnet.</li>
<li>Comcast could not give a transition period.  As soon as they pushed the config file to the gateway, it would reboot, instantly deactivating the old /30 and activating the new /29.</li>
</ol>
<h2>The Ideal Solution</h2>
<p>Needless to say, this is a bit of a problem.  In a perfect world, Comcast would activate the /29 alongside the /30, keep both up for a few days, and then shut down the old /30.  That would give us enough seamless transition time, so our clients and customers would see no interruption of service.</p>
<h2>The Accepted Solution</h2>
<p>This solution is partly drawn from experience, and partly from a &#8220;Gee, in retrospect, I should have done that&#8221; position.  For the rest of this post, I will use the following conventions:</p>
<dl>
<dt>192.0.2.1/30</dt>
<dd>The old IPv4 address and subnet, in <abbr title="Classless Inter-Domain Routing">CIDR</abbr> notation.</dd>
<dt>192.0.2.100/29</dt>
<dd>The new IPv4 subnet.</dd>
<dt>2001:db8:0:1::1</dt>
<dd>The old IPv6 address.  (Yes, I know this isn&#8217;t in the 6to4 subnet, <kbd>2002::/16</kbd>.  I&#8217;m opting to use the documentation prefix instead.)</dd>
<dt>2001:db8:0:1::100</dt>
<dd>The new IPv6 address.</dd>
<dt>example.com</dt>
<dd>The server&#8217;s <abbr title="Domain Name System">DNS</abbr> name.</dd>
</dl>
<p>The following post also assumes that you are running your DNS on BIND 9.  If you don&#8217;t, then the specific DNS changes neededare left as an exercise for the reader;  fortunately, this isn&#8217;t anything complicated.</p>
<h3>1. Notify your users.</h3>
<p>Firstly, if your site has any sort of announcement system, like an <abbr title="Really Simple Syndication">RSS</abbr> feed, or a login page, put up a notice warning users of downtime.  At the very least, inform them that there will be downtime, and have them plan to not use your site immediately after the <abbr title="Internet Protocol">IP</abbr> address changeover.  This may seem like a no-brainer, but even the most hardcore of nerds working for a company shouldn&#8217;t forget about customer service.</p>
<p>Because our site is tech-oriented, I also included directions on how to reach our site if it refuses to load (that is, having the user change their <kbd>hosts</kbd> file).  A bit overkill, but I like to cover all bases.</p>
<h3>2. Decrease your zone&#8217;s <abbr title="Time To Live">TTL</abbr>.</h3>
<p>Secondly, what you want to do is update your DNS records.  Two things need to be addressed.  The first is to change your zone&#8217;s TTL down to a smaller value.  Change this to the maximum amount of downtime that is acceptable.  They keep their DNS TTL at 86,400 seconds (one day).  For this, I&#8217;d recommend changing it to 10,800 seconds (3 hours).  Change your <abbr title="Start Of Authority">SOA</abbr> record accordingly:</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$TTL 10800 &nbsp;;change this to 10,800 seconds (three hours)<br />
www.example.com. IN SOA authoritative.dnsserver.com. youremail.example.com. (<br />
&nbsp; &nbsp; &nbsp; &nbsp; 2009102501 &nbsp; &nbsp; &nbsp;;Serial — increment this, as always<br />
&nbsp; &nbsp; &nbsp; &nbsp; 3h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;Refresh — change this to &quot;3h&quot; (10,800 seconds)<br />
&nbsp; &nbsp; &nbsp; &nbsp; 1h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;Retry<br />
&nbsp; &nbsp; &nbsp; &nbsp; 4w &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;Expire<br />
&nbsp; &nbsp; &nbsp; &nbsp; 3h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;Negative caching TTL<br />
&nbsp;)</div></td></tr></tbody></table></div>
<p>Lower TTL values will cause your authoritative nameserver to get a great deal more traffic.  If you outsource your DNS hosting like this client does, that may anger your DNS host.</p>
<h3>3. Add your new IP addresses to your zone</h3>
<p>The second thing to do is update your zone files to include both the old and new addresses.  If you have both IPv4 and IPv6 connectivity, then this means that your zone file will have four IP addresses.  Bear in mind the following facts about DNS when a host has more than one IP address:</p>
<ul>
<li>Generally, DNS servers will shuffle the records, and return the IP addresses in a different order every time.</li>
<li>Generally, a client will pick a random IP address out of the list;  A and <abbr title="quad-A">AAAA</abbr> records don&#8217;t have a priority value like <abbr title="Mail eXchanger">MX</abbr> and <abbr title="Service">SRV</abbr> records do.</li>
<li>Almost always, a client will try another IP address if the first fails.</li>
</ul>
<p>Thus, with two IP addresses in the zone file, your clients will connect quickly about 50% of the time during the DNS transition.  This is a very simple change:</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">www.example.com. IN A 192.0.2.1<br />
www.example.com. IN A 192.0.2.100<br />
www.example.com. IN AAAA 2001:db8:0:1::1<br />
www.example.com. IN AAAA 2001:db8:0:1::100</div></td></tr></tbody></table></div>
<p>Save your zone file, <a href="http://colincogle.name/blog/2009/08/11/dnssec-signzone-and-file-not-found-error/" title="I wrote a post about DNSSEC.  Check it out.">sign it (if you use DNSSEC)</a>, and do an</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rndc reload</div></td></tr></tbody></table></div>
<p>to reload the zone and notify your authoritative nameserver.  Remember your old TTL value?  Wait at least that much time before proceeding with the IP changeover, especially if you have international users.</p>
<h3>4.  Edit your server&#8217;s IP configuration.</h3>
<p>You&#8217;re going to have a little downtime, and a period of confused users.  But keep thinking ahead.  Now, log into your server (preferably over a physical console) and update its IP configuration.  On <a href="http://www.gentoo.org/">Gentoo Linux</a>, this consisted of:</p>
<ul>
<li>Editing the <kbd>/etc/conf.d/net</kbd> file, to include the new IP information:
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config_eth0=(<br />
&nbsp; &nbsp; &quot;192.0.2.1/30&quot;<br />
&nbsp; &nbsp; &quot;192.0.2.100/29&quot;<br />
&nbsp; &nbsp; &quot;2001:db8:0:1::1/64&quot;<br />
&nbsp; &nbsp; &quot;2001:db8:0:100::1/64&quot;<br />
&nbsp; &nbsp; # Also include your other IP addresses here.<br />
)</div></td></tr></tbody></table></div>
</li>
<li>Because this server is also an IPv6 router for the local subnet, <kbd>radvd</kbd> is announcing the IPv6 prefix to the private IPv4 subnet.  Adding a prefix to the <kbd>/etc/radvd.conf</kbd> file:
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">prefix 2001:db8:0:1::1/64 {<br />
&nbsp; &nbsp; AdvValidLifetime 86400;<br />
&nbsp; &nbsp; AdvPreferredLifetime 86400;<br />
&nbsp; &nbsp; AdvOnLink on;<br />
&nbsp; &nbsp; AdvAutonomous on;<br />
&nbsp; &nbsp; AdvRouterAddr on;<br />
};<br />
prefix 2001:db8:0:100::1/64 {<br />
&nbsp; &nbsp; AdvValidLifetime 86400;<br />
&nbsp; &nbsp; AdvPreferredLifetime 86400;<br />
&nbsp; &nbsp; AdvOnLink on;<br />
&nbsp; &nbsp; AdvAutonomous on;<br />
&nbsp; &nbsp; AdvRouterAddr on;<br />
};</div></td></tr></tbody></table></div>
<p>Save and reload <kbd>radvd</kbd>.</p>
</li>
<li>Checking the DHCP server settings.  DHCP may not be affected, but DHCPv6 will definitely be affected by the changing subnets.</li>
<li>If you have the fixed IP address recorded anywhere else, make sure you add the new IP addresses!  (I can&#8217;t help you on this one, but they did have the IP address specified in:  (1) Postfix&#8217;s <kbd>/etc/postfix/main.cf</kbd> file, with the <kbd>smtp_bind_address</kbd> and <kbd>smtp_bind_address6</kbd> directives, (2) switch configurations, and (3) IP address filters in Apache for their Intranet applications.</li>
</ul>
<p>Reboot the server if necessary.  If you can, reboot it anyway — even you, Linux users.</p>
<h3>5.  Change your IP address.</h3>
<p>The big moment has come.  Contact your ISP and have them perform the changeover.  This resulted in about a minute of downtime as their cable modem received the new settings and rebooted.  As soon as you can afterwards:</p>
<ul>
<li>Remove the old IP addresses from the zone file.  Increment the serial, reset the TTL, save, sign, and <kbd>rndc reload</kbd>.</li>
<li>Remove the old IPv6 subnet from <kbd>/etc/radvd.conf</kbd>.</li>
<li>Reboot some workstations and check basic connectivity to and from the server and the IPv4 and IPv6 Internet.  Then go offsite and try to reach the server with the DNS name and new IP addresses.</li>
<li>Be prepared to answer phone calls and emails from clients who can&#8217;t reach the site.</li>
</ul>
<p>I hope that this helps anyone else in this predicament.  I still don&#8217;t know why Comcast couldn&#8217;t offer a transition period, especially to a business customer.  Regardless, the changeover for this client went very smoothly, and there were no issues reported.  Everything is now running just fine, and they&#8217;re making use of their new — and limited — IPv4 address space.</p>
]]></content:encoded>
			<wfw:commentRss>http://colincogle.name/blog/2009/10/25/how-to-change-your-servers-ip-address/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>An interim fix for GPGMail on Snow Leopard</title>
		<link>http://colincogle.name/blog/2009/10/12/an-interim-fix-for-gpgmail-on-snow-leopard/</link>
		<comments>http://colincogle.name/blog/2009/10/12/an-interim-fix-for-gpgmail-on-snow-leopard/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 06:44:53 +0000</pubDate>
		<dc:creator>Colin Cogle</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PGP]]></category>

		<guid isPermaLink="false">http://colincogle.name/blog/?p=23</guid>
		<description><![CDATA[GPGMail is incompatible with Snow Leopard;  however, making changes to the bundle will make it load.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sente.ch/software/GPGMail/" title="GPGMail home page"><img src="http://www.sente.ch/software/GPGMail/GPGMail.gif" alt="GPGMail logo, a padlock on top of a stack of envelopes, with "GPGMail" below it." title="GPGMail logo" style="float:right" longdesc="http://www.sente.ch/software/GPGMail/" width="138" height="122" /></a></p>
<p><a href="http://www.sente.ch/software/GPGMail/English.lproj/GPGMail.html" title="GPGMail home page">GPGMail</a> has been an invaluable tool for users of both <abbr title="GNU Privacy Guard">GPG</abbr> and Apple&#8217;s <a href="http://support.apple.com/kb/HT2500" title="Mac 101:  Mail">Mail</a> application.  For those unfamiliar with GPG (and its commercial equivalent, <abbr title="Pretty Good Privacy">PGP</abbr>), it uses a set of keys — one public, one secret &#8212; to encrypt and/or attach digital signatures to email.  (Read <a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy#How_PGP_encryption_works" title="How PGP encryption works, courtesy of Wikipedia">the Wikipedia article</a> for more information, as it&#8217;s not entirely relevant here.)</p>
<p>Unfortunately, the marriage of GPG to Mail has been a bittersweet relationship.  Apple doesn&#8217;t publish the internal <abbr title="Application Programming Interfaces">API</abbr>&#8217;s of Mail, and has not provided much of a plug-in architecture for it.  Therefore, GPGMail had to be developed by using undocumented functions, which Apple had no obligation to maintain between major releases of Mac OS <abbr title="ten">X</abbr>.  Like all other major upgrades, Mac users upgrading to Snow Leopard were left to pick up the pieces.  To add to the pain, the sole programmer behind this no longer has time to maintain the software.</p>
<p>While the software is getting a long-overdue rewrite from new hands, <a href="http://sourceforge.net/projects/gpgmail/forums/forum/801904/topic/3404718" title="The original article">two enterprising users found a solution</a>, which I&#8217;m reposting to spread the word.</p>
<ol>
<li>Download and install GPGMail and <a href="http://macgpg.sourceforge.net/" title="MacGPG home page.  Or, install GnuPG yourself if you're good with compiling code.">MacGPG</a>.</li>
<li>Find <b>Mail</b> in the <b>Applications</b> folder.  From the <b>File</b> menu, choose <b>Get Info</b>.</li>
<li>Check <b>Run in </b><b>32-bit mode</b>.  (64-bit support will have to wait until a new version of GPGMail is formally released.)</li>
<li>Now, go to <kbd><abbr title="/Users/your name here">~</abbr>/Library/Mail/Bundles</kbd>;  right-click on <b>GPGMail.mailbundle</b> and choose <b>Show Package Contents</b>.</li>
<li>Add the following lines to Info.plist, depending on which version of Mac OS X that you&#8217;re running:
<ul>
<li><strong>Mac OS X 10.6:</strong></p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>SupportedPluginCompatibilityUUIDs<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>B3F3FC72-315D-4323-BE85-7AB76090224D<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>225E0A48-2CDB-44A6-8D99-A9BB8AF6BA04<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
</li>
<li><strong>Mac OS X 10.6.1:</strong>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>SupportedPluginCompatibilityUUIDs<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2610F061-32C6-4C6B-B90A-7A3102F9B9C8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>99BB3782-6C16-4C6F-B910-25ED1C1CB38B<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
</li>
<li><strong>Mac OS X 10.6.2 (beta):</strong>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>SupportedPluginCompatibilityUUIDs<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0CB5F2A0-A173-4809-86E3-9317261F1745<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2F0CF6F9-35BA-4812-9CB2-155C0FDB9B0F<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
</li>
</ul>
</li>
<li>Save the file, and then open Mail.</li>
</ol>
<p>Everything should be working fine now!  Many thanks to detlefschmitt and pretemsteinmetz from <a href="http://sourceforge.net/projects/gpgmail/forums/forum/801904/topic/3404718" title="Read the original post">the SourceForge.net forums</a> for this solution.  If you found this helpful, please thank the original posters, and then <a href="http://www.apple.com/feedback/mail.html" title="Provide feedback to Apple">urge Apple</a> to do any of the following:</p>
<ol>
<li>Provide native support for GnuPG in Mail, as they do S/MIME.</li>
<li>Publish a Mail plugin API, to make development of GPGMail easier.</li>
<li>Assign one or more members of the Mail development team to the GPGMail project.</li>
</ol>
<p><strong>Update, October 12, 2009 at 2:45 pm:</strong> As expected, GPGMail loads, but still has major issues on Snow Leopard, related to the user interface and encryption/decryption.  I&#8217;ve filed a couple of bugs on <a href="https://sourceforge.net/tracker/?func=browse&#038;group_id=222344&#038;atid=1055153" title="View a list of all open bugs on SourceForge.net.">the tracker</a>;  if you spot some, you should, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://colincogle.name/blog/2009/10/12/an-interim-fix-for-gpgmail-on-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dnssec-signzone and &#8220;File not found&#8221; error</title>
		<link>http://colincogle.name/blog/2009/08/11/dnssec-signzone-and-file-not-found-error/</link>
		<comments>http://colincogle.name/blog/2009/08/11/dnssec-signzone-and-file-not-found-error/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 17:50:58 +0000</pubDate>
		<dc:creator>Colin Cogle</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNSSEC]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://colincogle.name/blog/?p=8</guid>
		<description><![CDATA[When writing your own shell scripts to automate DNSSEC-related tasks, you may encounter a cryptic "file not found" error from <code>dnssec-signzone</code>.]]></description>
			<content:encoded><![CDATA[<p>DNSSEC is a very good thing, in my opinion.  For almost twenty years, there has been at least a proof of concept about attacks against DNS.  <a href="http://unixwiz.net/techtips/iguide-kaminsky-dns-vuln.html">Kaminsky&#8217;s DNS flaw</a> last year only strengthened the push to implement cryptographic extensions, and now, ICANN says that <span class="code">com.</span> and <span class="code">.</span> (the root zone) will be signed by year&#8217;s end, which means that DNSSEC can be properly implemented.</p>
<p>Generating the keys and signing a bunch of zones, however, quickly becomes arduous.  For one domain, it&#8217;s not bad.  When you administer two external domains, four reverse IPv4 and IPv6 zones, and an internal zone or two, it quickly becomes a hassle.  Like any Linux user who spends some time at the command-line, I wrote a rudimentary shell script to automate this process.  The latest version is at the end of this post, but read on.  I ran into a problem, and not finding anything on Google, I decided to document it here.</p>
<p>Now, I like a nice clean directory listing.  When you use <abbr title="Secure Shell">SSH</abbr> as your primary means of getting things done on the server, it&#8217;s a requisite.  I wrote my script to rename the generated keys, and place them all in the <span class="code">keys</span> folder before signing the zone (<span class="code" lang="bash">$1</span> being the zone name):</p>
<div class="codecolorer-container bash mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$ZSKNAME</span>.key keys<span style="color: #000000; font-weight: bold;">/</span>$1.zsk.key<br />
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$ZSKNAME</span>.private keys<span style="color: #000000; font-weight: bold;">/</span>$1.zsk.key.private<br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>dnssec-signzone <span style="color: #660033;">-t</span> <span style="color: #660033;">-N</span> increment <span style="color: #660033;">-H</span> 10 <span style="color: #660033;">-k</span> $1.ksk.key \<br />
&nbsp; &nbsp; <span style="color: #660033;">-e</span> +7776000 <span style="color: #660033;">-o</span> $1. $1.zone <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>bind<span style="color: #000000; font-weight: bold;">/</span>pri<span style="color: #000000; font-weight: bold;">/</span>$1.zsk.key</div></td></tr></tbody></table></div>
<p>All seemed well until I ran it:</p>
<pre># ./signzone.sh example.com
Will sign example.com.zone
Generating new key-signing keypair.
Generating zone-signing keypair.
Signing zone.
dnssec-signzone: cannot load dnskey keys/example.com.zsk.key: file not found
Done.</pre>
<p>It complained about the file not existing, but it definitely did:</p>
<pre># stat example.com.zsk.key
  File: `example.com.zsk.key'
  Size: 395          Blocks: 8          IO Block: 4096   regular file
Device: 6802h/26626d   Inode: 17989721    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2009-08-11 11:20:12.000000000 -0400
Modify: 2009-08-11 11:20:12.000000000 -0400
Change: 2009-08-11 11:20:12.000000000 -0400</pre>
<p>It took me a few hours of troubleshooting, modifying the script, wondering about NSEC3 records, and even rebuilding BIND 9.6.1-p1 from source.  Finally, I installed and used <span class="code">strace</span> on my script, which revealed the problems:</p>
<ol>
<li>BIND, especially <span class="code">dnssec-signzone</span>, expect the public keys to end in <span class="code">.key</span> and the private keys to end in <span class="code">.private</span>.  Changing their extensions from <span class="code">.key.private to <span class="code">.private</span> fixed it.</span></li>
<li><span class="code">dnssec-signzone</span> expects, as an argument, the name of the keypair, minus the extension.  With the correctly-named keypair of <span class="code">example.com.ksk.key</span> and <span class="code">example.com.ksk.private</span>, dnssec-signzone <em>should</em> be run with the <span class="code">-k example.com.ksk</span> argument.  Note the lack of extensions.</li>
</ol>
<p>After fixing that, <span class="code">dnssec-signzone</span> stopped complaining, and I was able to sign all of my zones without a hitch.  Restarted BIND, and it&#8217;s sending out notifies as I type this.</p>
<p>Now, for those of you who came here for the finished, bug-free script, here you go.</p>
<div class="codecolorer-container bash mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #666666; font-style: italic;"># signzone.sh, Copyright © 2009 Colin Cogle.</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># This program is free software: you can redistribute it and/or modify</span><br />
<span style="color: #666666; font-style: italic;"># it under the terms of the GNU Affero General Public License as</span><br />
<span style="color: #666666; font-style: italic;"># published by the Free Software Foundation, either version 3 of the</span><br />
<span style="color: #666666; font-style: italic;"># License, or (at your option) any later version.</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># This program is distributed in the hope that it will be useful,</span><br />
<span style="color: #666666; font-style: italic;"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br />
<span style="color: #666666; font-style: italic;"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &nbsp;See the</span><br />
<span style="color: #666666; font-style: italic;"># GNU Affero General Public License for more details.</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># You should have received a copy of the GNU Affero General Public License</span><br />
<span style="color: #666666; font-style: italic;"># along with this program. &nbsp;If not, see &amp;lt;http ://www.gnu.org/licenses/&amp;gt;.</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># Usage: &nbsp;signzone.sh &amp;lt;name of zone to sign&amp;gt;</span><br />
<span style="color: #666666; font-style: italic;"># Example: &nbsp;signzone.sh example.com</span><br />
<span style="color: #666666; font-style: italic;"># Example: &nbsp;signzone.sh 8.b.d.0.1.0.0.2.ip6.arpa</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> $1.zone <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<br />
<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Will sign $1.zone&quot;</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$1.zone does not exist.&quot;</span>;<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span>;<br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #666666; font-style: italic;"># Stash our keys in the keys subdirectory, just to keep things clean.</span><br />
<span style="color: #666666; font-style: italic;">#</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> keys<span style="color: #000000; font-weight: bold;">/</span>$1.ksk.key <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<br />
<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Using pre-generated key-signing keypair.&quot;</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Generating new key-signing keypair.&quot;</span><br />
&nbsp; &nbsp; <span style="color: #007800;">KSKNAME</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>dnssec-keygen <span style="color: #660033;">-f</span> KSK <span style="color: #660033;">-e</span> <span style="color: #660033;">-a</span> NSEC3RSASHA1 <span style="color: #660033;">-b</span> 2048 <span style="color: #660033;">-n</span> ZONE $1<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$KSKNAME</span>.key keys<span style="color: #000000; font-weight: bold;">/</span>$1.ksk.key<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$KSKNAME</span>.private keys<span style="color: #000000; font-weight: bold;">/</span>$1.ksk.private<br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> keys<span style="color: #000000; font-weight: bold;">/</span>$1.zsk.key <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<br />
<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Using pre-generated zone-signing keypair.&quot;</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Generating zone-signing keypair.&quot;</span><br />
&nbsp; &nbsp; <span style="color: #007800;">ZSKNAME</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>dnssec-keygen <span style="color: #660033;">-a</span> NSEC3RSASHA1 <span style="color: #660033;">-b</span> 2048 <span style="color: #660033;">-n</span> ZONE $1<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$ZSKNAME</span>.key keys<span style="color: #000000; font-weight: bold;">/</span>$1.zsk.key<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$ZSKNAME</span>.private keys<span style="color: #000000; font-weight: bold;">/</span>$1.zsk.private<br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Signing zone.&quot;</span><br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>dnssec-signzone <span style="color: #660033;">-a</span> <span style="color: #660033;">-g</span> <span style="color: #660033;">-t</span> <span style="color: #660033;">-N</span> increment <span style="color: #660033;">-H</span> 10 <span style="color: #660033;">-3</span> caf3 <span style="color: #660033;">-d</span> keys <span style="color: #660033;">-k</span> keys<span style="color: #000000; font-weight: bold;">/</span>$1.ksk <span style="color: #660033;">-e</span> +7776000 <span style="color: #660033;">-o</span> $1. $1.zone keys<span style="color: #000000; font-weight: bold;">/</span>$1.zsk<br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Done.&quot;</span></div></td></tr></tbody></table></div>
<p>Do note that this Bash script is a rough draft, and represents only about ten minutes of coding and referencing man pages.  I&#8217;ve licensed it under the <a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html"><abbr title="Affero General Public License, version 3">AGPL</abbr></a> if anyone wants to make a copy for themselves.</p>
]]></content:encoded>
			<wfw:commentRss>http://colincogle.name/blog/2009/08/11/dnssec-signzone-and-file-not-found-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Naming Software</title>
		<link>http://colincogle.name/blog/2009/08/07/naming-software/</link>
		<comments>http://colincogle.name/blog/2009/08/07/naming-software/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 06:21:40 +0000</pubDate>
		<dc:creator>Colin Cogle</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://colincogle.name/blog/?p=3</guid>
		<description><![CDATA[Naming software has got to be one of the most difficult steps of the software development lifecycle.]]></description>
			<content:encoded><![CDATA[<p>Naming software has got to be one of the most difficult steps of the software development lifecycle.</p>
<p>This winter, I quickly and single-handedly developed a Web-based help desk software.  Clients log in to submit trouble reports, and they can track and edit them as things progress.  It also allows them to track their assets.  It makes great use of PHP, HTML 5, CSS 3.0, AJAX, geolocation, Google Gears, and more;  it&#8217;s a balanced mix of tried-and-true and bleeding-edge technology.</p>
<p>The world&#8217;s only (known) installation is on my company&#8217;s Web server.  However, since then, it&#8217;s grown by leaps and bounds, but still running on the same spaghetti PHP code;  even though it was developed in a rush, if my old college professors could see what I did, they&#8217;d revoke my degree.</p>
<p>So, what I&#8217;d like to do is clean it up, document it, make it portable, and release it as a free and open-source project.  Naturally, the company would sell support contracts, like Red Hat does with Linux &#8212; there&#8217;s the moneymaking portion of it, enough to please my boss.</p>
<p>However, I just can&#8217;t think of a good name.  The best name that I came up with is Mercury, eponymous after the messenger of the Greek gods.  Trouble is, while &#8220;Project Mercury&#8221; rolls off the tongue with aplomb, and what I&#8217;m calling the development process, it&#8217;s not the greatest of names for a final product.</p>
<p>New and returning readers, it&#8217;s discussion time.  What&#8217;s in a name?  How do you name software?  Have any ideas?</p>
]]></content:encoded>
			<wfw:commentRss>http://colincogle.name/blog/2009/08/07/naming-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
