<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Edd Dumbill's Weblog: 'linux' articles</title>
  <link href="http://times.usefulinc.com/taglinuxatom" rel="self"/>
  <link href="http://times.usefulinc.com/taglinux" rel="alternate"/>
  <id>http://times.usefulinc.com/</id>
  <updated>2008-07-01T16:00:17Z</updated>
  <author>
    <name>Edd Dumbill</name>
    <email>edd-web@usefulinc.com</email>
  </author>
  <entry>
    <title>OSCON: what are your must-see talks?</title>
    <link href="http://times.usefulinc.com/2008/07/01-oscon-sked" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/925</id>
    <updated>2008-07-01T16:00:17Z</updated>
    <published>2008-07-01T15:58:59Z</published>
    <summary>We've switched on personal schedule sharing on the OSCON web site.

</summary>
    <category term="linux"/>
    <category term="expectnation"/>
    <category term="conferences"/>
    <category term="oscon"/>
    <content type="html">
&lt;p&gt;We've switched on personal schedule sharing on the &lt;a href="http://en.oreilly.com/oscon2008/"&gt;OSCON web site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you've put together your desired schedule by starring sessions of interest, just hand out the "public view" link to let others know what you want to see.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/share/71df5978de24b9ae2289b47712bf042c"&gt;my personal schedule&lt;/a&gt;. In it you'll find all the &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/topic/Keynote"&gt;plenary sessions&lt;/a&gt; (as co-chair I simply cannot miss these, and neither should you, however late the party!)&lt;/p&gt;
&lt;p&gt;Also there's a fair smattering of my pet topics such as open web technologies, virtualization and dynamic languages, and a bunch of things I want to hear more about: &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3098"&gt;Prophet&lt;/a&gt;, &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2491"&gt;female participation in open source&lt;/a&gt;, &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2383"&gt;Clutter&lt;/a&gt;, and of course &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3373"&gt;Erlang&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm fascinated to find out what other people have got planned, so please publish your schedules too and let's compare notes.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/07/01-oscon-sked#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>My OSCON 2008 picks</title>
    <link href="http://times.usefulinc.com/2008/06/26-oscon" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/924</id>
    <updated>2008-06-26T12:11:33Z</updated>
    <published>2008-06-26T11:49:56Z</published>
    <summary>Read on to see what I want to see, and get 15% off OSCON registration</summary>
    <category term="linux"/>
    <category term="oreilly"/>
    <category term="conferences"/>
    <category term="oscon"/>
    <content type="html">
&lt;p&gt;In just under a month, the &lt;a href="http://en.oreilly.com/oscon2008"&gt;tenth O'Reilly Open Source Convention&lt;/a&gt; will get underway in Portland.&lt;/p&gt;
&lt;p&gt;Over ten years OSCON has developed&amp;mdash;along with the world of open source&amp;mdash;into an intense, exciting, informative, diverse and exhausting event. This year I've the privilege of being co-chair, along with Alison Randall. We've packed so much into the show, it's a difficult job even being able to comprehend it as a whole!&lt;/p&gt;
&lt;p&gt;Fortunately, there's a way to start making sense of things before you arrive there, thanks to the personal scheduler. Just &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/grid"&gt;mark the sessions&lt;/a&gt; you want to go to with a star, and you'll be able to plan out your time in advance.&lt;/p&gt;
&lt;p&gt;I wanted to list a few sessions from my own personal schedule that particularly piqued my interest. Then at the bottom of this post I'll share a discount code which can give readers of this blog 15% off OSCON registration. There's bribery for you.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3373"&gt;Practical Erlang Programming&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Largely thanks to XMPP enthusiasts and ejabberd, I've been hearing increasing amounts about Erlang, and I'd like to know enough about it to be dangerous. This three hour tutorial looks just the ticket.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2494"&gt;Open Source Virtualization Hacks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is one of several sessions we have on &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2785"&gt;virtualization&lt;/a&gt;, something I'm particularly pleased about. Virtualization may be "done" at the kernel level, but I think we're only just starting out on its application. This session is by my friend and sometime co-author, Niel Bornstein, who works for Novell on just this sort of thing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2607"&gt;Using Puppet: Real World Configuration Management&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Puppet is the piece of open source software that is most exciting to me at the moment. As a developer, it enables me to manage my machines like I'd manage my code libraries. A must-see if you've not used Puppet yet.&lt;/p&gt;
&lt;p&gt;These are just 3 out of the 300 or so confirmed sessions. Don't forget there's a large number of &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/topic/Event"&gt;events&lt;/a&gt; and parties happening around OSCON too.&lt;/p&gt;
&lt;p&gt;And finally, the discount code. Use the code &lt;span style="font-weight: bold;"&gt;os08pgm&lt;/span&gt; when you're &lt;a href="https://en.oreilly.com/oscon2008/public/register"&gt;registering&lt;/a&gt;, and you'll get 15% off the ticket price.&lt;/p&gt;
&lt;p&gt;See you in Portland!&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/26-oscon#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Secure LDAP replication</title>
    <link href="http://times.usefulinc.com/2008/06/20-secure-ldap" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/921</id>
    <updated>2008-06-20T16:18:33Z</updated>
    <published>2008-06-20T15:11:25Z</published>
    <summary>LDAP's hard. Security's hard. Replication's hard. Here's how it went for me.</summary>
    <category term="linux"/>
    <category term="sysadmin"/>
    <category term="security"/>
    <content type="html">
&lt;p&gt;Ever the sucker for punishment, I decided to pick three difficult things and stick them all together: LDAP, SSL and replication. Here's how to make it go on Debian and Ubuntu.&lt;/p&gt;
&lt;h3&gt;The problem&lt;/h3&gt;
&lt;p&gt;You want LDAP replication to happen over the internet, and you want it to happen securely.&lt;/p&gt;
&lt;h3&gt;The caveat&lt;/h3&gt;
&lt;p&gt;I'm not going to tell you how to set up your LDAP from scratch here: I'm assuming you've reached a solution you're happy with and want to replicate it.&lt;/p&gt;
&lt;h3&gt;The solution&lt;/h3&gt;
&lt;p&gt;We're going to set up a replicating slave LDAP server, which communicates with the master
over the internet via an SSL-protected connection.&lt;/p&gt;
&lt;h4&gt;Enabling replication&lt;/h4&gt;
&lt;p&gt;First up, the master LDAP server needs to be configured to permit replication.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The key lines to add to your &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt; include:&lt;/p&gt;
&lt;pre&gt;moduleload syncprov
index entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 200&lt;/pre&gt;
&lt;p&gt;These load up the synchronization module, add indices which make sync go faster, and enable sync. &lt;a href="http://www.openldap.org/doc/admin24/slapdconfig.html#syncrepl"&gt;For more detail see the OpenLDAP site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Next you need to add a replicator user to your LDAP database, give your replicator user access to passwords as well as general read access. To create the replicator user, I made this simple LDIF file and fed it to &lt;span style="font-style: italic;"&gt;ldapadd&lt;/span&gt;.&lt;/p&gt;
&lt;pre&gt;dn: cn=replicator,dc=mydomain,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: replicator
description: LDAP replicator
userPassword: TOPSEKRIT&lt;/pre&gt;
&lt;p&gt;Once this user is in your LDAP database, you should give it read access to passwords (I assume you've already given read access to authenticated users.) I have this in my &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;access to attrs=userPassword,sambaNTPassword,sambaLMPassword
...
   by dn="cn=replicator,dc=mydomain,dc=com" read&lt;/pre&gt;
&lt;p&gt;To check that this works, try using &lt;span style="font-style: italic;"&gt;ldapsearch&lt;/span&gt; to check that the passwords are returned:&lt;/p&gt;
&lt;pre&gt;ldapsearch -x -D cn=replicator,dc=mydomain,dc=com \
  -W | grep -i password&lt;/pre&gt;
&lt;p&gt;Enter the replicator password when prompted, and you should see the encrypted passwords from your LDAP database.&lt;/p&gt;
&lt;h4&gt;Securing access&lt;/h4&gt;
&lt;p&gt;Now you've got replication enabled on the master, you will want to ensure it is available on the internet only via TLS or SSL. Here's what I added to &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt; to enable this:&lt;/p&gt;
&lt;pre&gt;TLSCertificateFile      /etc/ssl/certs/ldapserver_crt.pem
TLSCertificateKeyFile   /etc/ssl/private/ldapserver_key.pem
TLSCACertificateFile    /etc/ssl/certs/myCA.pem
TLSVerifyClient         demand&lt;/pre&gt;
&lt;p&gt;As you will guess from the configuration, the first two lines set the SSL key and certificate the master uses (see "A little twist" below for an important note on key permissions.) The third line tells &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt; where to find my site-local certificate authority (CA), and the fourth line says slapd must require any connecting client to have a valid SSL certificate signed by the site-local CA. This is important, as it provides a second layer of access control: a replicating client must connect using a certificate you signed, plus the replicator password.&lt;/p&gt;
&lt;p&gt;Before this enables TLS access, we must tell slapd which network interfaces to listen on. To do this, edit the &lt;span style="font-style: italic;"&gt;SLAPD_SERVICES&lt;/span&gt; variable in &lt;span style="font-style: italic;"&gt;/etc/default/slapd&lt;/span&gt;. Here's my configuration:&lt;/p&gt;
&lt;pre&gt;SLAPD_SERVICES="ldap://127.0.0.1/ ldap://192.168.0.1/ ldaps:///"&lt;/pre&gt;
&lt;p&gt;This enables regular LDAP on the loopback and intranet network interfaces, and LDAP/SSL on all interfaces, including the public internet.&lt;/p&gt;
&lt;p&gt;So, with &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt; restarted we are at this situation: connections are now possible from the internet, as long as they are made over SSL with a certificate signed by our site-local CA.&lt;/p&gt;
&lt;p&gt;(In fact, you can make much finer-grained access restrictions in your configuration than I have done. Using LDAPS rather than TLS over regular LDAP is a rather broad precaution.&amp;nbsp;&lt;a href="http://www.openldap.org/doc/admin24/access-control.html"&gt;As explained on the OpenLDAP site&lt;/a&gt;, the &lt;span style="font-style: italic;"&gt;ssf=&lt;/span&gt; parameter can be used to require a certain level of secure connectivity on a per-user or client basis.)&lt;/p&gt;
&lt;h4&gt;Setting up the replicating server&lt;br /&gt;&lt;/h4&gt;
&lt;p&gt;Your slave server should have the same configuration as the master, except you can leave out the bits enabling replication.&lt;/p&gt;
&lt;p&gt;Firstly, you'll need add to &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt; the replication configuration:&lt;/p&gt;
&lt;pre&gt;syncrepl rid=123
        provider=ldaps://ldapmaster.mydomain.com/
        type=refreshAndPersist
        searchbase="dc=mydomain,dc=com"
        filter="(objectClass=*)"
        scope=sub
        attrs="*"
        schemachecking=off
        bindmethod=simple
        binddn="cn=replicator,dc=mydomain,dc=com"
        credentials=TOPSEKRIT&lt;/pre&gt;
&lt;p&gt;Most of this I took as boilerplate from the OpenLDAP documentation. Items to note include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;rid&lt;/span&gt;&amp;nbsp;is a unique 3-digit integer per slave, used to maintain sync state&lt;/li&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;credentials&lt;/span&gt;&amp;nbsp;should be the password you gave the replicator user&lt;/li&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;type&lt;/span&gt;&amp;nbsp;can either be &lt;span style="font-style: italic;"&gt;refreshAndPersist&lt;/span&gt;, or &lt;span style="font-style: italic;"&gt;refresh&lt;/span&gt;. The latter institutes a simple polling replication, whose interval you can vary with the &lt;span style="font-style: italic;"&gt;interval&lt;/span&gt;&amp;nbsp;parameter. In our case, we do a poll and then keep the replication search open: our client gets notified immediately when there's any new data matching the replicating search.&lt;/li&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;searchbase&lt;/span&gt;&amp;nbsp;is an LDAP search matching the data we wish to be replicated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here's the &lt;span style="font-style: italic;"&gt;/etc/default/slapd&lt;/span&gt; configuration:&lt;/p&gt;
&lt;pre&gt;SLAPD_SERVICES="ldap://127.0.0.1/"&lt;/pre&gt;
&lt;p&gt;The slave &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt;&amp;nbsp;exists only in this case to serve the local machine.&lt;/p&gt;
&lt;p&gt;Finally, there's the tricky bit! You need to configure &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt; to connect to the master server using a certificate. I'll assume you've created and signed a key and certificate pair for your slave server (see my post &lt;a href="http://times.usefulinc.com/2008/06/18-cert-maint"&gt;Low-tech SSL certificate maintenance&lt;/a&gt; for more on this.)&lt;/p&gt;
&lt;p&gt;Awkwardly, the TLS configuration in &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt;&amp;nbsp;is for the server only. Replication works as a client, and thus needs separate configuration. Furthermore, you cannot configure this globally on your machine, as the SSL certificate is a per-user only parameter (see &lt;span style="font-style: italic;"&gt;man ldap.conf&lt;/span&gt;&amp;nbsp;for more information on this.)&lt;/p&gt;
&lt;p&gt;Instead, we must set it in &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt;'s environment. Add these two lines to the end of &lt;span style="font-style: italic;"&gt;/etc/default/slapd&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;export LDAPTLS_CERT=/etc/ssl/certs/slapd.crt
export LDAPTLS_KEY=/etc/ssl/private/slapd.key&lt;/pre&gt;
&lt;p&gt;This file is sourced as a shell script by slapd's init script. Amend the path to your certificate and keys as required. Use &lt;span style="font-style: italic;"&gt;/etc/init.d/slapd restart&lt;/span&gt; and you should be good to go.&lt;/p&gt;
&lt;p&gt;Finally, we want the slave server to be certain it's talking to the real master. So we also configure client connections to verify the SSL certificate of the peer, in &lt;span style="font-style: italic;"&gt;ldap.conf&lt;/span&gt;&amp;nbsp;again:&lt;/p&gt;
&lt;pre&gt;TLS_CACERT      /etc/ssl/certs/myCA.crt
TLS_REQCERT     demand&lt;/pre&gt;
&lt;h4&gt;A little twist&lt;/h4&gt;
&lt;p&gt;One gotcha to notice with both client and server is that &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt;&amp;nbsp;runs as the &lt;span style="font-style: italic;"&gt;openldap&lt;/span&gt;&amp;nbsp;user by default on Debian. Also by default SSL keys are readable only by the &lt;span style="font-style: italic;"&gt;ssl-cert&lt;/span&gt;&amp;nbsp;group. You'll need add the &lt;span style="font-style: italic;"&gt;openldap&lt;/span&gt;&amp;nbsp;user to this group, otherwise it won't be able to access &lt;span style="font-style: italic;"&gt;/etc/ssl/private&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Related articles on this site:&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://times.usefulinc.com/2005/09/25-ldap"&gt;Turn your world LDAP-tastic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/20-secure-ldap#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Low-tech SSL certificate maintenance</title>
    <link href="http://times.usefulinc.com/2008/06/18-cert-maint" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/920</id>
    <updated>2008-06-18T11:10:31Z</updated>
    <published>2008-06-18T10:50:40Z</published>
    <summary>I maintain a bunch of mostly self-signed SSL certificates. Too many not to automate. Here's how I do it.</summary>
    <category term="linux"/>
    <category term="sysadmin"/>
    <category term="security"/>
    <content type="html">
&lt;p&gt;I maintain a bunch of SSL certificates, mostly signed by my own site authority. Too many not to automate, but not enough to warrant heavy machinery. Here's how I do it.&lt;/p&gt;
&lt;h3&gt;The configuration files&lt;/h3&gt;
&lt;p&gt;Each certificate needs a config to describe what's in it. I create each of these and name it with a &lt;span style="font-style: italic;"&gt;.cnf&lt;/span&gt; suffix. Here's an example:&lt;/p&gt;
&lt;pre&gt;[ req ]
prompt                  = no
distinguished_name      = server_distinguished_name

[ server_distinguished_name ]
commonName              = server.usefulinc.com
stateOrProvinceName     = England
countryName             = GB
emailAddress            = edd@usefulinc.com
organizationName        = Useful Information Company
organizationalUnitName  = Hosting

[ req_extensions ]
subjectAltName=edd@usefulinc.com
issuerAltName=issuer:copy
nsCertType            = server

[ x509_extensions ]
subjectAltName=edd@usefulinc.com
issuerAltName=issuer:copy
nsCertType            = server&lt;/pre&gt;
&lt;p&gt;Let's say this config is &lt;span style="font-style: italic;"&gt;server.cnf&lt;/span&gt;. I then just type &lt;span style="font-style: italic;"&gt;make server.pem&lt;/span&gt; to generate the corresponding certificate and key, signed by my local certificate authority. As I don't want to attend the startup of every service, I ensure the key is password-less.&lt;/p&gt;
&lt;h3&gt;The Makefile rules&lt;/h3&gt;
&lt;p&gt;Here are the makefile steps I use to generate and sign keys.&lt;/p&gt;
&lt;pre&gt;.SUFFIXES: .pem .cnf

.cnf.pem:
        OPENSSL_CONF=$&amp;lt; openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM
        openssl rsa &amp;lt;tempkey.pem &amp;gt; `basename $&amp;lt; .cnf`_key.pem
        chmod 400 `basename $&amp;lt; .cnf`_key.pem
        OPENSSL_CONF=./usefulCA/openssl.cnf openssl ca -in tempreq.pem -out `basename $&amp;lt; .cnf`_crt.pem
        rm -f tempkey.pem tempreq.pem
        cat `basename $&amp;lt; .cnf`_key.pem `basename $&amp;lt; .cnf`_crt.pem &amp;gt; $@
        chmod 400 $@
        ln -sf $@ `openssl x509 -noout -hash &amp;lt; $@`.0&lt;/pre&gt;
&lt;p&gt;The resultant files are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;server.pem &lt;/span&gt;&amp;mdash; contains both certificate and key in one file&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;server_crt.pem&lt;/span&gt; &amp;mdash; certificate file&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;server_key.pem&lt;/span&gt; &amp;mdash; key file&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some notes on these steps: my site-local certificate authority is in the directory &lt;span style="font-style: italic;"&gt;usefulCA&lt;/span&gt;, along with an OpenSSL config which describes my preferences. This config was created by copying and making appropriate adjustments to the default &lt;span style="font-style: italic;"&gt;/etc/ssl/openssl.cnf&lt;/span&gt;&amp;nbsp;which ships with Debian.&lt;/p&gt;
&lt;p&gt;For generating certificate signing requests to ship to a commercial certificate authority, it's a bit simpler. I save the config files with a &lt;span style="font-style: italic;"&gt;.reqcnf&lt;/span&gt; suffix instead, and use this rule:&lt;/p&gt;
&lt;pre&gt;.SUFFIXES: .pem .cnf .reqcnf .csr

.reqcnf.csr:
        OPENSSL_CONF=$&amp;lt; openssl req -newkey rsa:1024 -keyout `basename $&amp;lt; .reqcnf`.key -keyform PEM -out `basename $&amp;lt; .reqcnf`.csr -outform PEM&lt;/pre&gt;
&lt;p&gt;And finally, a rule I use to sign incoming certificate requests from other systems:&lt;/p&gt;
&lt;pre&gt;.csr.pem:
        OPENSSL_CONF=./usefulCA/openssl.cnf openssl ca -in $&amp;lt; -out `basename $&amp;lt; .csr`_crt.pem&lt;/pre&gt;
&lt;p&gt;I offer these without warranty in the hope they might be useful to somebody. They're not much more than a transcription of a how-to into a makefile, but it's just enough technology to ensure creating certificates isn't a big nuisance.&lt;/p&gt;
&lt;h4&gt;Further reading&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;A more complete &lt;a href="http://sial.org/howto/openssl/ca/"&gt;guide to setting up a site-local certificate authority&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;p&gt;Why do I bother with a site-local CA, rather than just self-sign? It lets me bypass the annoyance of SSL warnings on clients once I've installed my own CA certificate, and gives me a coarse grained level of access control: for instance, only clients with certificates signed by my CA are allowed to access the site's LDAP server.&lt;/p&gt;
&lt;p&gt;My personal next step with this is to integrate the certificate production process with my emerging Puppet recipes for managing local infrastructure.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/18-cert-maint#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>We're all ops people now</title>
    <link href="http://times.usefulinc.com/2008/06/16-ops-now" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/918</id>
    <updated>2008-06-16T12:34:09Z</updated>
    <published>2008-06-16T10:55:22Z</published>
    <summary>Five years ago, would you have been managing terabits and arrays of distributed services?</summary>
    <category term="programming"/>
    <category term="linux"/>
    <category term="agile"/>
    <category term="sysadmin"/>
    <category term="xen"/>
    <category term="hosting"/>
    <category term="infrastructure"/>
    <content type="html">
&lt;p&gt;Ten years ago, most of us wouldn't have dreamt we'd be managing terabits of storage, tens of megabits of bandwidth, arrays of network-distributed services. The height of a programmer's worry would likely be choice of UI toolkit or finding the right way to indent code, and the height of consumer concern deciding which room to put the new computer in.&lt;/p&gt;
&lt;p&gt;Now the problems associated with managing large networks are becoming real for everyone, right down to the consumer level. Stupendously large amounts of computing resource are available at an instant.&lt;/p&gt;
&lt;p&gt;Your household probably has more than a terabyte of storage already. Issues such as single sign-on are going to hit home over the next year, as networked computing and entertainment devices profilerate. Features such as Apple's &lt;a href="http://www.apple.com/macosx/features/timemachine.html"&gt;Time Machine&lt;/a&gt; will be increasingly vital &amp;mdash; software that makes traditionally gnarly sysadmin tasks consumer-friendly. The rebranding of .Mac into "&lt;a href="http://www.apple.com/mobileme/"&gt;Mobile Me&lt;/a&gt;" is also a step in this direction.&lt;/p&gt;
&lt;h3&gt;The impact on developers&lt;/h3&gt;
&lt;p&gt;As software developers, we also have to cope with the effects of this resource-richness. For small sums of money we can get access to &lt;a href="http://aws.amazon.com/ec2"&gt;large computing clusters&lt;/a&gt;, geographically redundant hosting services. Our programs have left the desktop and found their new home on the web. System administration issues loom large upon us, security concerns lurk auspiciously in the corners of our minds.&lt;/p&gt;
&lt;p&gt;Although the cost of infrastructure has dropped radically, other costs remain high and are going to stay that way. System administrators are not only grumpy, they demand high wages. Commercial software license fees spiral out of control: traditional per-CPU licensing models make little sense when you can quickly bring up tens of machines. The cost in power is already troubling large companies, and there's no reason to suspect the problems won't ripple down.&lt;/p&gt;
&lt;p&gt;Help is at hand from a variety of technologies. If they don't yet make massive resource management trivial, they at least make it possible. Some of these also inhabit the weird territory of being both the source of a problem and a solution at the same time: virtualization, for example.&lt;/p&gt;
&lt;h4&gt;Distributed revision control systems&lt;/h4&gt;
&lt;p&gt;Distributed revision control is a technology whose time has finally&amp;nbsp;come in popular circles, thanks in part to Linus Torvald's &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; system. DRCS has several important impacts on today's developer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;Branching and, importantly, merging become much cheaper&lt;/span&gt;, allowing agile and flexible iterations of development.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;Loosely connected and geographically diverse development becomes much easier&lt;/span&gt;. Even within a single organization it is not uncommon to find teams spanning countries, time zones. Complex multi-site VPN setups aren't necessary when a few SSH keys can do the job.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;Revision control becomes packaging on the cheap&lt;/span&gt;. Like it or not, the mere tagging of a source tree has now become a valid option for releasing software.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these trends lower the barrier to entry, increase collaboration and agility of development. You can the value of this as more software tools become free. Selling such tools is rapidly becoming a thing of the past, the advantages of sharing enable the developers at the sharp end to get their jobs done quicker.&lt;/p&gt;
&lt;p&gt;However, such increased agility and, well, messiness leave other problems to solve, which the next two technologies address.&lt;/p&gt;
&lt;h4&gt;Virtualization&lt;/h4&gt;
&lt;p&gt;Hardware-as-a-service, infrastructure-as-a-service, &lt;a href="http://www.roughtype.com/archives/2008/01/a_little_too_mu.php"&gt;call it what you will&lt;/a&gt;. The ability to create what we used to call entire machines, pick them up and move them around the network is revolutionary, and it's something that will have a real impact on regular developers. The benefits are at several levels.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;Agile infrastructure&lt;/span&gt; &amp;mdash; a ready supply of new machines makes it a lot easier and cheaper to test different scenarios, architectures, and to separate concerns. If things go wrong, throw away the image and start over. It's all about cutting the administration load.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;A packaging solution&lt;/span&gt; &amp;mdash; the new macroeconomics of software distribution mean that distributing entire machine images which communicate exclusively via the network is now a feasible way to distribute your software. We must adjust to the notion of distributing appliances, not code. We may mourn the lost crafts of creating RPMs or installers, but let's face it, it's now a waste of time.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;New business models&lt;/span&gt; &amp;mdash; your application can now be delivered as a black-box appliance, circumventing compatibility issues, or as a service, with virtualization part of the solution to scaling.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Configuration management&lt;/h4&gt;
&lt;p&gt;Computing is a zero-sum game, and despite our increased ability to create and distribute software, problems still exist. We just pushed them to the next level.&lt;/p&gt;
&lt;p&gt;In good part, this next level is the problem of configuration management. We now have networks and clusters of (virtual) machines, software so agile we need six decimal places to describe its revision levels, and network and authentication paths that are starting to tangle. How do we manage that?&lt;/p&gt;
&lt;p&gt;One thing developers crave is repeatability. That's why we love our makefiles, autoconf, Ant, rake and so on. It's the one time even the most imperative-minded programmer writes declarative code. We like to say "let the world be like this."&lt;/p&gt;
&lt;p&gt;Our new sprawling world lacks this feature, and the best of our old toolkits &amp;mdash; .debs, RPMs &amp;mdash; address things only at the level of packages in a single environment.&lt;/p&gt;
&lt;p&gt;So developers must look to the world of operations, a territory we probably thought we needn't enter. In this world the new "make" is called&amp;nbsp;&lt;a href="http://reductivelabs.com/trac/puppet"&gt;Puppet&lt;/a&gt;. You write recipes to describe how things ought to be, and Puppet will make it so.&lt;/p&gt;
&lt;p&gt;I've been spending some time digging into Puppet, and feel excited by the confidence it's giving me. Now my applications exceed single source trees, and single machines, it gives me the means to tie the whole together. This article was going to be solely about Puppet, but that will have to wait now for another time.&lt;/p&gt;
&lt;p&gt;It's likely you'll have played with virtual machines and distributed revision control, but have you tried Puppet yet? Give it a spin, and let your mind wander over the benefits for your organization and development approaches.&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;br /&gt;&lt;/h3&gt;
&lt;p&gt;For developers and users alike, our world is changing. Hardware, connectivity and increasingly software is becoming cheap or free. The solidity of the old things we put value on &amp;mdash; real things you can touch like disks &amp;mdash; is eroding.&lt;/p&gt;
&lt;p&gt;What really matters is our data, our creations, and their communication. If they don't quite yet exist in a universal "cloud" yet, they're certainly getting frisky.&lt;/p&gt;
&lt;p&gt;As vendors provide solutions for consumers to manage their new domestic infrastructure, developers must look to network-aware toolkits and operations techniques to manage and get the best from their emergent infrastructures.&lt;/p&gt;
&lt;p&gt;Also on this topic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://times.usefulinc.com/2006/06/17-agile-infrastructure"&gt;In search of agile infrastructure for web applications&lt;/a&gt;&amp;nbsp;(June 2006)&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/16-ops-now#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Gandi's VM hosting beta now closed to new users</title>
    <link href="http://times.usefulinc.com/2008/06/12-gandi" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/917</id>
    <updated>2008-06-12T13:20:08Z</updated>
    <published>2008-06-12T13:09:29Z</published>
    <summary>Gandi's hosting service rocks, but you'll have to wait a little while to play with it</summary>
    <category term="linux"/>
    <category term="web"/>
    <category term="xen"/>
    <category term="hosting"/>
    <content type="html">
&lt;p&gt;I've been experimenting with &lt;a href="https://www.gandi.net/hosting/"&gt;Gandi's virtual hosting service&lt;/a&gt; recently. In fact, this blog is now hosted on it.&lt;/p&gt;
&lt;p&gt;Gandi have created by far the easiest hosting service I've used. The web interface allows you to buy credit, create pre-installed virtual machines and log in, all in under 15 minutes. Add the ease of Ubuntu to the mix (just one of the preinstalled images you can choose from), and commissioning times for new services are low indeed.&lt;/p&gt;
&lt;p&gt;The hosting service is based on &lt;a href="http://www.cl.cam.ac.uk/research/srg/netos/xen/"&gt;Xen&lt;/a&gt;, and allows you to dynamically change the resources your VMs can access (CPU/memory/disk), on a scheduled basis if required.&amp;nbsp;It has an &lt;a href="http://wiki.gandi.net/en/api-xml/docs/hosting"&gt;API&lt;/a&gt;&amp;nbsp;which provides enough functionality for you to white-label hosting as part of your own web app.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://times.usefulinc.com/asset/name/45/gandi-options.png" alt="Gandi's hosting options" width="480" height="340" /&gt;&lt;br /&gt; &lt;em&gt;Excerpt from Gandi's &lt;a href="http://www.gandi.net/hosting/proposal/part/"&gt;explanation&lt;/a&gt; of the amount of resource you can allocate to a virtual machine&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Gandi's service isn't yet as flexible as Amazon's EC2, but it comes at the problem from the other end &amp;mdash; its initial offering "just works" as an alternative hosting solution, with the added flexibility their Xen infrastructure brings to the mix. Even with all its tool support, Amazon EC2 feels like stepping into an alternate universe. I'm pretty excited about the directions in which Gandi's service will develop.&lt;/p&gt;
&lt;p&gt;And yes, now I've told you all this, unfortunately you&amp;nbsp;&lt;a href="http://iwi.gandibar.net/post/2008/06/11/Gandi-Hosting-now-on-closed-beta-testing"&gt;can't yet play with the beta service if you've not got an account already&lt;/a&gt;. The initial success means Gandi are closing new signups for a little time to concentrate on improving their infrastructure.&lt;/p&gt;
&lt;p&gt;The good news is that Gandi say this is the final step before the full release of the system. I can't wait! It's so good to see innovative, high-quality internet solutions coming from Europe.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/12-gandi#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Badges, blogging and bragging</title>
    <link href="http://times.usefulinc.com/2008/05/23-updates" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/913</id>
    <updated>2008-05-23T14:32:11Z</updated>
    <published>2008-05-23T14:11:10Z</published>
    <summary>Back from my travels, it's time for a few updates. I've mostly blogged about these elsewhere, so I'll just give some pointers here.</summary>
    <category term="xtech"/>
    <category term="linux"/>
    <category term="xml"/>
    <category term="web"/>
    <category term="expectnation"/>
    <content type="html">
&lt;p&gt;Back from my travels, it's time for a few updates. I've mostly blogged about these elsewhere, so I'll just give some pointers here.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.expectnation.com/public/content/2008/05/22-reg-and-lead-retrieval"&gt;launch of magnetic-stripe cards&lt;/a&gt; at Where 2.0 went well.&lt;/p&gt;
&lt;p&gt;We had some initial teething issues with Linux talking to the card printers, which was resolved by backing down to Linux kernel 2.6.22 from 2.6.24. I'm not entirely sure what's up with 2.6.24, but it exhibited strange behavior talking to the card printers over ethernet &amp;mdash; as if there were MTU misconfigurations. It's a big nuisance, as 2.6.24 is the default kernel shipped with Ubuntu Hardy, an otherwise excellent release.&lt;/p&gt;
&lt;p&gt;I've been paying some attention to OpenID 2.0 recently, as it's time for me to upgrade my OpenID accepting websites to use the new release of the specification &amp;mdash; if for no other reason than Yahoo! OpenIDs are 2.0-only.&lt;/p&gt;
&lt;p&gt;This investigation led me to notice XRIs again, which are the confusing underbelly of the OpenID specs. The W3C Technical Architecture Group recently advised against using XRIs. I &lt;a href="http://www.oreillynet.com/xml/blog/2008/05/xris_bad_uris_good.html"&gt;wrote about this&lt;/a&gt;&amp;nbsp;over on my XML.com blog.&lt;/p&gt;
&lt;p&gt;I've not used for that blog for a long time, but will try to do so more. I've realized that I've still got a lot to say about the web, XML and open standards, and the XML.com blog seems like a good place to say it.&lt;/p&gt;
&lt;p&gt;Finally, to brag for a short moment. Another &lt;a href="http://2008.xtech.org/"&gt;XTech&lt;/a&gt;&amp;nbsp;has been and gone, and this year's was a great experience for everybody involved. This quote &lt;a href="http://paulsmith.blogs.ilrt.org/2008/05/19/xtech-2008-day-3/"&gt;from attendee Paul Smith&lt;/a&gt; summed things up nicely, as it tells me I succeeded in my main goal for the conference:&lt;/p&gt;
&lt;blockquote&gt;What I really liked about this conference was the mix of attendees and presenters, both from academia, and the commercial world both and small. It made it feel much more valid, and it really felt like everyone was there for the right reasons - not trying to sell anything, but out of a genuinely altruistic wish to make the web better.&lt;/blockquote&gt;
&lt;p&gt;My sincere thanks to everybody involved in XTech this year.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/05/23-updates#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Smartcard authentication on Linux and Mac</title>
    <link href="http://times.usefulinc.com/2007/12/03-smartcards-osx" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/903</id>
    <updated>2007-12-03T11:56:53Z</updated>
    <published>2007-12-03T11:22:48Z</published>
    <summary>A brief wander around two-factor authentication with smartcard tokens</summary>
    <category term="linux"/>
    <category term="sysadmin"/>
    <category term="security"/>
    <category term="mac"/>
    <content type="html">
&lt;p&gt;For various reasons, I need to secure access to some resources using two-factor authentication, and thus have been looking at smartcards. These little devices store digital keys and certificates, protected by a passphrase, and calculate digital signatures on-device. Hence the two factors: possession of the card, and knowledge of the password.&lt;/p&gt;&lt;p&gt;This sort of scheme is widely used by government agencies and large corporations (and largely reliant on Windows, too), but I wanted to find the low cost way in for the small operator using open source.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;OpenSC on Linux&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;The best starting point for Linux is the &lt;a href="http://www.opensc-project.org/"&gt;OpenSC project&lt;/a&gt;. It supports a reasonably broad array of devices, and is well supported by Linux distributions. Using command line tools you can create keys and certificates, as you would in OpenSSL for web servers and so on, and then upload them to the smartcard.&lt;/p&gt;&lt;p&gt;Although OpenSSH source code has support for OpenSC, it is not compiled in by default in Debian and derived distributions. Unfortunately this means a bit of recompilation to get &lt;a href="http://www.opensc-project.org/opensc/wiki/SecureShell"&gt;SSH supporting OpenSC&lt;/a&gt;. When that's done, you have an SSH implementation that can use an RSA key from your smartcard, and best of all, you can add this key to the &lt;em&gt;ssh-agent&lt;/em&gt; like you would with regular keys.&amp;nbsp;&lt;/p&gt;&lt;h3&gt;The hardware&lt;/h3&gt;&lt;p&gt;I ordered two devices, which seemed to have the best support from OpenSC, the &lt;a href="http://www.cryptoflex.com/Products/cards_32k.html"&gt;Axalto Cryptoflex E-Gate&lt;/a&gt;, and an &lt;a href="http://www.aladdin.com/etoken/"&gt;Aladdin eToken&lt;/a&gt;. I got these from &lt;a href="http://www.usasmartcard.com/"&gt;UsaSmartCard&lt;/a&gt;, who have a special section in their catalogue for Open Source compatible products. Both these cards have a USB interface built-in, I didn't want to be toting around an extra card reader in addition to the tokens themselves.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;On the Mac&lt;/h3&gt;&lt;p&gt;While both the devices worked as advertised under Linux, the experience has been a lot less fruitful under Mac OS 10.5 Leopard. There is a port of the OpenSC project for Mac OS, called &lt;a href="http://www.opensc-project.org/sca/"&gt;SCA&lt;/a&gt;. The promise of the integration is great: you can use the on-device keys with apps like Safari and Mail, but there is a change in the way that the daemon responsible for talking to the smartcards (&lt;em&gt;pcscd&lt;/em&gt;) works on Leopard, which means OpenSC won't recognise the cards.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;With some fiddling, I have managed to force the Cryptoflex device to work with Mac. Unfortunately the &lt;a href="http://www.opensource.apple.com/darwinsource/Current/OpenSSH-87/"&gt;Leopard/Darwin source for OpenSSH&lt;/a&gt; has diverged significantly enough from the upstream OpenSSH, that I couldn't apply the OpenSC patches. Not having &lt;em&gt;ssh-agent&lt;/em&gt; work with the smartcard is a significant nuisance for me, as it's the easiest way to patch in the extra security to deployment processes.&lt;/p&gt;&lt;p&gt;The Aladdin eToken just plain didn't work on Leopard. There is &lt;a href="http://thedartmouth.com/2007/11/29/news/leopard/"&gt;a report&lt;/a&gt; that Aladdin are working on Leopard drivers, however.&lt;/p&gt;&lt;p&gt;I think a small number of mainly US federal smart cards will work out of the box on Leopard, though I've seen a few complaints about these on the Apple forums. It loooks unfortunately like smartcard support slipped through the net a bit.&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Smartcard support is relatively straightforward on Linux. On Mac OS 10.5, it looks like some waiting is in order before things will work properly.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2007/12/03-smartcards-osx#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Zonbu: an intersection of open source, Web 2.0 and energy efficiency</title>
    <link href="http://times.usefulinc.com/2007/08/04-zonbu" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/899</id>
    <updated>2007-08-04T13:33:26Z</updated>
    <published>2007-08-04T12:58:56Z</published>
    <summary>Zonbu is a silent, no-moving-parts, domestic PC based on Gentoo Linux and Amazon S3 storage.</summary>
    <category term="linux"/>
    <category term="web"/>
    <category term="hardware"/>
    <category term="open data"/>
    <content type="html">
  &lt;p&gt; Salon.com &lt;a href="http://machinist.salon.com/feature/2007/08/02/zonbu/index.html"&gt;recently reviewed&lt;/a&gt; &lt;a href="http://zonbu.com/"&gt;Zonbu&lt;/a&gt;, a highly compact general-purpose computer with no moving parts. &lt;/p&gt;        &lt;p&gt; Zonbu's key features are its incredibly low &lt;a href="http://www.zonbu.com/learn/green.htm"&gt;power consumption&lt;/a&gt;, network-connected storage and that it works right out of the box without any installation. Under the covers, it's a Gentoo Linux installation with mainstream open source apps such as OpenOffice and Firefox. &lt;/p&gt;      &lt;p align="center"&gt; &lt;img width="300" height="140" alt="Zonbu skins" src="http://www.zonbu.com/images/skins.png" /&gt;&lt;br /&gt;   &lt;em&gt;Zonbu and its skins &amp;mdash; high-powered dressing for a low-power device&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;  Price-wise, you can get the Zonbu for as little as $99 if you commit to two years' subscription to the network storage. Understanding the open source ethos, Zonbu also offer the box without any tether for $250. As with the Mac mini, supplying the keyboard, mouse and monitor is up to you. &lt;/p&gt;     &lt;p&gt;  Preloaded with an office suite, email, IM, web browser, multimedia player, games and Skype, Zonbu is aimed at being a general computing appliance. You can't install anything else on it, but then again, that way you can't break it easily either. It sounds the sort of thing I'd be happy leaving with non-technical family and friends. &lt;/p&gt;     &lt;h3&gt;Storage with Amazon S3&lt;/h3&gt;    &lt;p&gt; Low-power solid state devices are nothing new of course, there are &lt;a href="http://news.softpedia.com/news/The-mini-alternative-61430.shtml"&gt;a variety available&lt;/a&gt;, and things such as the &lt;a href="http://times.usefulinc.com/2007/05/31-nslu2"&gt;NSLU2&lt;/a&gt; have been in production for some years. The novel thing about the Zonbu however is in how it manages its storage. &lt;/p&gt;     &lt;p&gt;  The Zonbu has 4GB of compact flash storage on board, which it uses as a cache for &lt;a href="http://aws.amazon.com/s3"&gt;Amazon's S3 storage network&lt;/a&gt;. All your files get encrypted and sent to S3, and are retrieved when you need them. One really neat consequence of this is that you can get at your data via the web any time you want. &lt;/p&gt;     &lt;p&gt;  Secondly, it gives me some sense of security for my data. I don't know if Zonbu will give me the 'keys' to my data on S3, but it wouldn't be hard for them to provide an easy way to migrate out. Either way, S3 is a place I'd trust with my data. &lt;/p&gt;   &lt;h3&gt;Why Zonbu is important&lt;/h3&gt;   &lt;p&gt; Windows, and to some extent, Mac OS X, are becoming the needy children of computing, always tugging on your arm and asking you something. In contrast, Zonbu looks like a great step towards &amp;quot;appliance computing&amp;quot;. Its features are more like those you'd expect from your phone or cable TV provider: &lt;/p&gt;      &lt;ul&gt;   &lt;li&gt;it's a black-box appliance that users don't need to care about, with little or no vulnerability to malware&lt;/li&gt;     &lt;li&gt;the real value of the product is in the network&lt;/li&gt;     &lt;li&gt;the system is upgraded as part of the subscription&lt;/li&gt;   &lt;/ul&gt;      &lt;p&gt;Zonbu has the potential to change domestic computing. The low price point lowers the barrier to computer ownership. Low maintenance needs lower the technical barrier to entry and use. And Zonbu's a green and economical technology, yet as useful as the full power version. &lt;/p&gt;     &lt;p&gt;As a company, I feel Zonbu to be a well-intentioned player because of their strong support for open source, and the ease with which you can get at your data despite its appliance nature. I hope they continue to develop in this open data direction. &lt;/p&gt;     &lt;p&gt; Zonbu itself probably won't attain ubiquity, but it will change the marketplace and open up a new category of network-connected appliances for the home. &lt;/p&gt;   &lt;h3&gt;Further reading&lt;/h3&gt;    &lt;ul&gt;   &lt;li&gt;&lt;a href="http://zonbu.com"&gt;Zonbu home page&lt;/a&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href="http://gizmodo.com/gadgets/exclusive-hands_on/22-things-to-know-about-the-99-zonbu-linux-pc-262952.php"&gt;Gizmodo hands-on review of Zonbu&lt;/a&gt;. I love that the first comment is a question about whether it can run vi or emacs...&lt;/li&gt;&lt;li&gt;&lt;a href="http://mrzonbu.wordpress.com/"&gt;Real life with the Zonbu Mini-PC&lt;/a&gt;. Very detailed blog of a Zonbu user.&lt;br /&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href="http://www.zonbu.com/device/dress.htm"&gt;Dress up your Zonbu&lt;/a&gt;. Get rid of the drab default exterior with some amazing-looking covers&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;a href="http://times.usefulinc.com/2007/08/04-zonbu#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Nokia N800, the second time around</title>
    <link href="http://times.usefulinc.com/2007/07/02-n800-again" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/898</id>
    <updated>2007-07-02T12:45:01Z</updated>
    <published>2007-07-02T11:45:58Z</published>
    <summary>What makes Nokia's internet tablet fun to use, albeit on my second attempt.</summary>
    <category term="mobile"/>
    <category term="pda"/>
    <category term="linux"/>
    <category term="hardware"/>
    <content type="html">
&lt;p&gt;Nokia's &lt;a href="http://www.nseries.com/products/n800/index.html#l=products,n800"&gt;N800 internet tablet&lt;/a&gt; is an intriguing device. When I originally got one a few months back I tried to treat it purely as a consumer object, just using the installed apps and things available through the obvious point-and-click channels.&lt;/p&gt;&lt;p&gt;As a consequence it served mainly as a portable (and expensive) internet radio, streaming me the &lt;a href="http://news.bbc.co.uk/sport1/hi/cricket/tms/default.stm"&gt;cricket commentary&lt;/a&gt; from the BBC. And when I upgraded my wireless network I somehow managed to make it WPA2 only, knocking the N800 offline. An offline N800 is an almost thoroughly useless device, so it went into the drawer and I forgot about it.&lt;/p&gt;&lt;p&gt;Ultimately you can't leave something that expensive unused, so I dragged it out again, fiddled the wi-fi router into compliance, and decided not to deny my hacker nature this time. The N800 is Linux underneath, so who could resist?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The result is two-edged, really: I'm a lot happier with the device, but on the other hand must conclude that the N800 is still a bit far from being consumer-ready.&lt;/p&gt;&lt;h3&gt;Must-have software&lt;/h3&gt;&lt;p&gt;So, what things did I install this time around that made the device happier?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.claws-mail.org/maemo/"&gt;Claws Mail&lt;/a&gt; is a nice email client that works well with my IMAP accounts, which all use SSL and TLS, have lots of messages and a deep folder hierarchy. I don't really want to write much mail on the N800, but an easy reading interface is a bonus.&lt;/p&gt;&lt;p&gt;The &lt;a href="http://www.internettablettalk.com/forums/showthread.php?t=4580"&gt;FM radio&lt;/a&gt; is something I can't believe I missed before. I had no idea this was in there, but plug some headphones into the N800 and they act as the antenna for an FM receiver. Desperately cute and old-world, a bit like when laptops still used to have parallel printer ports.&lt;/p&gt;&lt;p&gt;I had previously ignored &lt;a href="http://downloads.maemo.org/product/maemo-mapper/"&gt;Maemo Mapper&lt;/a&gt;, thinking it was useless without a GPS, but it turns out to work very nicely as a dedicated client for Google Maps, as well as several other mapping sources.&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Must-do geeky bits&lt;/h3&gt;&lt;p&gt;Try as I might to like the touch screen, the first thing I had to do with the device was find a way of not using the stylus to do sysadmin type tasks on it.&lt;/p&gt;&lt;p&gt;So, first stop is to get a &lt;a href="http://maemo.org/downloads/product/osso-xterm-advanced"&gt;terminal&lt;/a&gt; up, figure out &lt;a href="http://maemo.org/community/wiki/HowTo_EASILY_BecomeRoot"&gt;how to use the root account&lt;/a&gt;, install a &lt;a href="http://maemo.org/downloads/product/dropbear"&gt;SSH client and server&lt;/a&gt;, and get my pubkey onto the N800. Now I could shell into it and use a decent keyboard.&lt;/p&gt;&lt;p&gt;On my local network I hate maintaining DNS if I don't have to, so the next thing I wanted was Zeroconf support in the shape of &lt;em&gt;avahi&lt;/em&gt;. One of the quickest ways to get this going is to install the &lt;a href="http://openbossa.indt.org.br/canola/"&gt;Canola&lt;/a&gt; media application, which uses Zeroconf to find shared music.&lt;/p&gt;&lt;p&gt;With these basics in place, the N800 supports APT package repositories familiar to Debian and Ubuntu users, so the device becomes a lot less weird and much more manageable. I felt the same pleasant familiarity as I did with the &lt;a href="http://times.usefulinc.com/2007/05/31-nslu2"&gt;NSLU2&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Things to look forward to&lt;/h3&gt;&lt;p&gt;The N800's video camera is neat, but nobody I know uses Google Talk for conferencing. Fortunately it seems that Skype for the N800 is &lt;a href="http://mobilitysite.com/2007/06/skype-on-the-nokia-n800-coming-soon/"&gt;just around the corner&lt;/a&gt;. Initially, video support is unlikely, but I imagine that if Skype on the N800 proves popular, it won't be far off.&lt;/p&gt;&lt;p&gt;The N800 is something I don't mind having kicking around the kitchen or nursery, so staying in touch with my family while I'm travelling will become a lot more fun.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Also, I'd like to get NFS running on the N800, but that requires the installation of a new kernel, which I've not quite yet had the time to do. Once that's done, all my media, photos and storage will be handily available.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2007/07/02-n800-again#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Small bundle of sluggy joy</title>
    <link href="http://times.usefulinc.com/2007/05/31-nslu2" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/892</id>
    <updated>2007-05-31T15:56:52Z</updated>
    <published>2007-05-31T11:08:54Z</published>
    <summary>I'm a bit late to the party, but the NSLU2 is a piece of kit you can't afford to be without.</summary>
    <category term="linux"/>
    <category term="sysadmin"/>
    <category term="hardware"/>
    <content type="html">
     &lt;p&gt;I'm a bit late to this party, but the &lt;a href="http://www.linksys.com/servlet/Satellite?c=L_Product_C2&amp;amp;childpagename=US%2FLayout&amp;amp;cid=1115416906769&amp;amp;pagename=Linksys%2FCommon%2FVisitorWrapper"&gt;NSLU2&lt;/a&gt;&amp;mdash;affectionately known as the 'slug'&amp;mdash;is a piece of kit you can't afford to be without on your home or small office network.&lt;/p&gt;         &lt;p style="text-align: center; float: right; margin-left: 15px"&gt;&lt;img width="170" height="265" src="http://times.usefulinc.com/asset/name/36/nslu2.jpg" alt="NSLU2 image" /&gt;&lt;/p&gt;        &lt;p&gt;Not much bigger than the palm of my hand, and cheaper than a ticket for a Test at &lt;a href="http://lords.org/"&gt;Lord's&lt;/a&gt;, the NSLU2 is a small fileserver that serves files from attached USB disks.&lt;/p&gt;        &lt;p&gt;What makes it particularly special is the large amount of &lt;a href="http://www.nslu2-linux.org/"&gt;alternative firmwares&lt;/a&gt; built by Linux open source developers, which allow you to extend the functionality of the NSLU2 beyond merely serving out files via SMB (the Windows file serving protocol.)&lt;/p&gt;   &lt;h3&gt;Cheap NFS serving&amp;nbsp;&lt;/h3&gt;   &lt;p&gt;So what's the big deal for me? Well, like most laptop-slinging folks whose home network is predominantly wireless, I want my backup disks to sit on the network, available when needed.&lt;/p&gt;     &lt;p&gt;It turns out it's very difficult to find a standalone network disk that properly supports Unix file system semantics such as symbolic links. Most just support SMB file sharing, with attendant limits such as no links and no files over 2GB. (I found this out the hard way with Apple's Airport Extreme.)&lt;/p&gt;     &lt;p&gt;With the NSLU2 I was able to install the &amp;quot;Unslung&amp;quot; alternative firmware, and install good old NFS, making my backup disks available in a normal way to Linux and OS X machines alike. (How we used to complain about NFS back in the early 90s, but Windows file sharing still makes it look good!)&lt;/p&gt;     &lt;p&gt;In the great tradition of open source there are multiple choices of Linux distributions you can install. As it was my first time round, I went for Unslung, which preserves as much as possible of the official Linksys interface, but lets you extend it. Next time, with a better idea of what I'd use the box for, I'd probably plump for Debian.&amp;nbsp;&lt;/p&gt;   &lt;h3&gt;Constraints breed creativity&lt;/h3&gt;   &lt;p&gt;Inside the case, the NSLU2 is in fact a tiny Linux machine with 32MB of RAM and an Intel XScale CPU. This turns out to be plenty enough resources to serve files on a small network. Aside from my prosaic needs, the NSLU2 has been put to &lt;a href="http://www.nslu2-linux.org/wiki/Applications/HomePage"&gt;several more innovative uses&lt;/a&gt;, such as a &lt;a href="http://www.nslu2-linux.org/wiki/Applications/ITunesServer"&gt;music server&lt;/a&gt; for Apple ITunes and a 4-line home &lt;a href="http://www.nslu2-linux.org/wiki/Optware/Asterisk?from=Unslung.Asterisk"&gt;telephone exchange&lt;/a&gt;.&lt;/p&gt;     &lt;p&gt;I've been astounded at the applications people have devised for this little box. Being fairly cheap makes it a great candidate for home automation projects. It's a great example of how limiting resources fosters innovation. Remember how games on 8-bit microcomputers were so much more ingenious than those on their more well-resourced successors?&lt;br /&gt;   &lt;/p&gt;     &lt;p&gt;So, I may be a little slow in finding this little hardware gem, but I wholeheartedly recommend it.&lt;/p&gt;   &lt;p&gt;&lt;a href="http://times.usefulinc.com/2007/05/31-nslu2#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Living and coding on a Mac</title>
    <link href="http://times.usefulinc.com/2006/10/03-mac-update" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/869</id>
    <updated>2006-10-03T17:37:09Z</updated>
    <published>2006-10-03T17:15:01Z</published>
    <summary>A few notes on how the Mac experience has gone, some months since the switch from Linux.</summary>
    <category term="linux"/>
    <category term="apple"/>
    <category term="me"/>
    <content type="html">
&lt;p&gt;For most of this year I've been working mainly on a Macbook Pro, having &lt;a href="http://times.usefulinc.com/2006/04/10-catchup"&gt;deserted&lt;/a&gt; my Ubuntu desktop.&amp;nbsp; Somebody wrote to me recently, kindly enquiring how this life was going, and asking some questions in particular.&lt;br /&gt;&lt;br /&gt;Although of limited interest to some, I decided to answer the mail here, if for nothing else to record my views for future reference.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Q:&lt;/strong&gt; How is developing on a Mac? Is &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; really that good?&lt;br /&gt;&lt;br /&gt;Developing Rails applications on a Mac is sweet, and yes, TextMate really is that good. My jilted &lt;em&gt;.emacs&lt;/em&gt; languishes in lonely misery.&lt;br /&gt;&lt;br /&gt;Developing other (non-Mac) stuff on a Mac is a real pain however, because nothing's where you'd expect it after years of Linux use.&amp;nbsp; Like several other developers I've seen, I run Ubuntu Linux in a virtual machine under &lt;a href="http://parallels.com/"&gt;Parallels&lt;/a&gt; for such work.&lt;br /&gt;&lt;br /&gt;It's not just that Macs lack &lt;em&gt;apt-get&lt;/em&gt; (as you can get it with &lt;em&gt;fink&lt;/em&gt;), it's that they lack the reliability of Debian or Ubuntu's package repositories to underpin it. Running Linux in a virtual machine is far easier.&lt;br /&gt;&lt;br /&gt;On the subject of TextMate,&amp;nbsp; perhaps the best compliment I can pay it is that using it reminds me of the last text editors I really felt at home in, &lt;a href="http://www.vesalia.de/e_cygnused.htm"&gt;CygnusEd&lt;/a&gt; and then &lt;a href="http://www.contactor.se/~dast/frexxed/"&gt;FrexxEd&lt;/a&gt; on the Amiga. TextMate's most serious flaw is the inability to create split views, however. It seems to me that's a key programmers' feature, to be able to read from one source file at the same time as editing another.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Q:&lt;/strong&gt; Is the hype about Ruby on Rails true?&lt;br /&gt;&lt;br /&gt;I still think so. I resisted it for 6 months because I tend to be averse to anything that gets such a large amount of publicity, but then stepped aboard the train around the time of Rails 0.13.&lt;br /&gt;&lt;br /&gt;I've not really looked back after my initial experiments seemed to bear out the claim of developing &amp;quot;ten times faster than PHP&amp;quot;. I'll admit I find it hard to keep up with all the extra developments that get added at the Rails cutting edge, but then again I don't really need them.&amp;nbsp; Most of those additions are refinements, rather than core changes. Constraints on my time mean I tend to write in a common Rails subset, as opposed to flexing my muscles with the obscure but clever bits.&lt;/p&gt;&lt;p&gt;Even if your taste isn't for Rails, then the trend that Rails, Django and friends have started is improving the web development playing field for all.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Q:&lt;/strong&gt; What makes you happy and sad about the Mac?&lt;br /&gt;&lt;br /&gt;The things that the Mac still scores on are:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fonts, fonts, fonts. Despite all my many efforts at getting good letterforms on Linux, I still couldn't make it as good as OS X.&lt;/li&gt;&lt;li&gt;Productivity applications. I love my &lt;a href="http://www.omnigroup.com/applications/omnigraffle/"&gt;OmniGraffle&lt;/a&gt; and &lt;a href="http://www.omnigroup.com/applications/omnioutliner/"&gt;OmniOutliner&lt;/a&gt;. I'm salivating over the prospect of &lt;a href="http://blog.omnigroup.com/2006/09/25/omnifocus-our-work-in-progress/"&gt;OmniFocus&lt;/a&gt;, and &lt;a href="http://quicksilver.blacktree.com/"&gt;Quicksilver&lt;/a&gt; rocks my world.&lt;/li&gt;&lt;li&gt;Hardware. Suspend/resume without worry, video conferencing that works.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The interesting thing to me is that none of these are very difficult to surmount, for want of a little resource.&amp;nbsp; The day of the Linux desktop, so perennially around the corner, will yet come.&lt;br /&gt;&lt;br /&gt;As a balancing postscript, I will mention that there are some things that are Mac irritants to a sensible Linux person, which include filesystem case sensitivity, lack of decent SSH agent (yes, I've tried them all), not knowing what to &lt;em&gt;kill -9&lt;/em&gt; when things go pear-shaped, Apple's arrogance, crippled nature of some default apps (iChat won't put multiple accounts in the same window, Safari doesn't support keyboard navigation at all well, Quicktime player won't play movies fullscreen). &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/10/03-mac-update#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Locking down portmap on Debian</title>
    <link href="http://times.usefulinc.com/2006/09/29-portmap-security" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/867</id>
    <updated>2006-09-29T13:08:15Z</updated>
    <published>2006-09-29T12:53:10Z</published>
    <summary>Sharing the benefit of my recent system administration adventures.</summary>
    <category term="linux"/>
    <category term="ubuntu"/>
    <category term="debian"/>
    <content type="html">
&lt;p&gt;Most sensible people are very wary of NFS and its potential for security holes. If you can at all help it, it's a good idea not to run NFS and portmap on a network interface with direct internet connectivity. However, this isn't always convenient.
&lt;/p&gt;
&lt;p&gt;
As I needed to have NFS sharing on a host exposed to the internet, I set about finding the various places I needed to firewall. The tools I typically use to verify I've done the right things are &lt;code&gt;netstat -nap&lt;/code&gt; on the machine concerned, to check for listening processes, and &lt;code&gt;nmap&lt;/code&gt; from remote hosts to sniff for open ports.
&lt;/p&gt;
&lt;p&gt;

Portmap and its associated programs mostly use 'tcpwrappers' for controlling access. The first step you ought to take in securing portmap is to ensure that your &lt;em&gt;hosts.allow&lt;/em&gt; and &lt;em&gt;hosts.deny&lt;/em&gt; files are set up to control access properly.
&lt;/p&gt;
&lt;p&gt;

In &lt;em&gt;/etc/hosts.deny&lt;/em&gt;, deny access to allcomers:
&lt;/p&gt;
&lt;pre&gt;
mountd: ALL
statd: ALL
portmap: ALL
rquotad: ALL
&lt;/pre&gt;
&lt;p&gt;
Then in &lt;em&gt;/etc/hosts.allow&lt;/em&gt;, let the good guys through (adjust for your network):
&lt;/p&gt;
&lt;pre&gt;
mountd: 192.168.0.
statd: 192.168.0.
portmap: 192.168.0.
rquotad: 192.168.0.
&lt;/pre&gt;
&lt;p&gt;
On top of this, however, you should firewall off the ports that these programs use. As I found out, this is not as easy as it sounds. Portmap assigns random ports for some of the services it starts.
&lt;/p&gt;
&lt;p&gt;
You can run &lt;code&gt;rpcinfo -p&lt;/code&gt; to see the ports in use. An example run on one of my machines looks like this:
&lt;/p&gt;
&lt;pre&gt;
program vers proto   port
 100000    2   tcp    111  portmapper
 100000    2   udp    111  portmapper
 100003    2   udp   2049  nfs
 100003    3   udp   2049  nfs
 100003    4   udp   2049  nfs
 100003    2   tcp   2049  nfs
 100003    3   tcp   2049  nfs
 100003    4   tcp   2049  nfs
 100021    1   udp  32770  nlockmgr
 100021    3   udp  32770  nlockmgr
 100021    4   udp  32770  nlockmgr
 100021    1   tcp  32788  nlockmgr
 100021    3   tcp  32788  nlockmgr
 100021    4   tcp  32788  nlockmgr
 100005    1   udp   1005  mountd
 100005    1   tcp   1008  mountd
 100005    2   udp   1005  mountd
 100005    2   tcp   1008  mountd
 100005    3   udp   1005  mountd
 100005    3   tcp   1008  mountd
 100024    1   udp    863  status
 100024    1   tcp    866  status
&lt;/pre&gt;
&lt;p&gt;
Of these, &lt;em&gt;nfs&lt;/em&gt; and &lt;em&gt;portmapper&lt;/em&gt; always use the same ports, 2049 and 111, so ensure you block off these.
&lt;/p&gt;
&lt;p&gt;
What about the rest? Happily, there's a way to configure them to use constant ports so we can reliably firewall them. Life would be too easy if all this configuration was in the one place, so here's how to find the different places you need to change.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;nlockmgr&lt;/b&gt;: you're probably using the kernel NFS server, which means the port needs passing at module load time for the lockd module.  Add this line into a new file, &lt;em&gt;/etc/modutils/local-lockd&lt;/em&gt; &lt;/p&gt;

&lt;pre&gt;options lockd nlm_udpport=32768 nlm_tcpport=32768&lt;/pre&gt;

&lt;p&gt;Then run &lt;code&gt;update-modules&lt;/code&gt; to recreate your &lt;em&gt;/etc/modules.conf&lt;/em&gt;. The next time you boot these ports will be used for &lt;em&gt;nlockmgr&lt;/em&gt;. If you've got the &lt;em&gt;lockd&lt;/em&gt; statically compiled into your kernel, you'll need to pass these options as &lt;code&gt;lockd.mnlm_udpport&lt;/code&gt; and &lt;code&gt;lockd.nlm_tcpport&lt;/code&gt; to the kernel on boot.
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;status&lt;/b&gt;: this is the port used by &lt;em&gt;statd&lt;/em&gt;. There's also an outgoing port, on which &lt;em&gt;statd&lt;/em&gt; sends outgoing status requests. You can configure them by altering &lt;code&gt;STATDOPTS&lt;/code&gt; in &lt;em&gt;/etc/default/nfs-common&lt;/em&gt;, e.g.&lt;/p&gt;

&lt;pre&gt;STATDOPTS="--port 699 --outgoing-port 700"&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;mountd&lt;/b&gt;: you can control the port used for &lt;em&gt;mountd&lt;/em&gt; by editing &lt;em&gt;/etc/default/nfs-kernel-server&lt;/em&gt; and altering &lt;code&gt;RPCMOUNDOPTS&lt;/code&gt;, e.g.&lt;/p&gt;

&lt;pre&gt;RPCMOUNTDOPTS="--port 962"&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, if you're running quotas, be sure to do something similar with &lt;code&gt;RPCRQUOTADOPTS&lt;/code&gt; in &lt;em&gt;/etc/default/quota&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wiki.debian.org/SecuringNFS"&gt;SecuringNFS&lt;/a&gt; on the Debian Wiki&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tldp.org/HOWTO/NFS-HOWTO/security.html"&gt;Linux NFS HOWTO&lt;/a&gt; security chapter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, I ought to note that I've written this up in case it helps anybody else.  As with everything I write here, I make no warranty about its accuracy.  Security is hard and obscure (but that's no reason not make our best efforts!)&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/09/29-portmap-security#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Load-balancing Mongrel with Apache 2.0</title>
    <link href="http://times.usefulinc.com/2006/09/13-mongrel-apache20" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/861</id>
    <updated>2006-09-13T19:18:28Z</updated>
    <published>2006-09-13T18:40:37Z</published>
    <summary>If you're not ready to run Apache 2.2, you can still load balance Rails Mongrel servers using Apache 2.0's mod_rewrite module.</summary>
    <category term="linux"/>
    <category term="rails"/>
    <content type="html">
&lt;p&gt;You would be forgiven for thinking that using &lt;a href="http://mongrel.rubyforge.org/docs/mongrel_cluster.html"&gt;Mongrel clusters&lt;/a&gt; to serve Rails applications was only a good idea if you have Apache 2.2 installed, as this is what most of the instructions on the web advise.&lt;/p&gt;  &lt;p&gt;However, there are good reasons for still running Apache 2.0, one of them being that it's the most up to date version packaged in Debian and Ubuntu Linux. So, without &lt;em&gt;mod_proxy_balancer&lt;/em&gt;, what can you do?&lt;/p&gt;  &lt;p&gt;A simple solution is to use the randomizing feature in &lt;em&gt;mod_apache&lt;/em&gt;'s rewrite map feature. Say for instance you had 3 Mongrel servers, running on ports 4000 to 4002 on &lt;em&gt;localhost&lt;/em&gt;. First create a file &lt;em&gt;map.txt&lt;/em&gt; containing these numbers:&lt;/p&gt;  &lt;pre&gt;ports  4000|4001|4002 &lt;/pre&gt;  &lt;p&gt;Then ensure the following directives are present in your virtual host configuration:&lt;/p&gt;  &lt;pre&gt;ProxyRequests Off&lt;br /&gt;ProxyPassReverse / http://localhost:4000/&lt;br /&gt;ProxyPassReverse / http://localhost:4001/&lt;br /&gt;ProxyPassReverse / http://localhost:4002/&lt;br /&gt;ProxyPreserveHost On&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteMap  servers rnd:/path/to/your/map.txt&lt;br /&gt;RewriteRule ^/(images|stylesheets|javascripts)/?(.*) $0 [L]&lt;br /&gt;RewriteRule ^/(.*)$ http://localhost:${servers:ports}/$1 [P,L]&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Of course, Apache config is complex and I advise you to test this properly &amp;mdash; it's possible if  you are not careful to leave your web server as an open proxy.&lt;/p&gt;  &lt;p&gt;Thanks to &lt;a href="http://www.hackdiary.com/"&gt;Matt Biddulph&lt;/a&gt; for pointing out this method to me. I've written it up as nobody else seemed to have done so thus far.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/09/13-mongrel-apache20#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>In search of agile infrastructure for web applications</title>
    <link href="http://times.usefulinc.com/2006/06/17-agile-infrastructure" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/855</id>
    <updated>2006-06-17T22:57:35Z</updated>
    <published>2006-06-17T21:11:33Z</published>
    <summary>Many advances have been made in agile programming frameworks, enabling a reduction in the amount of code that needs to be written. But what about agile system infrastructure for web applications?</summary>
    <category term="programming"/>
    <category term="linux"/>
    <category term="agile"/>
    <category term="sysadmin"/>
    <content type="html">
&lt;p&gt;Many advances have been made in &lt;a href="http://agilemanifesto.org/"&gt;agile software development&lt;/a&gt;. Frameworks such as Ruby on Rails embody agile principles by making software easy to write, easy to test, and above all, easy to change.&lt;/p&gt;&lt;p&gt;If only we could say the same for the infrastructure on which we develop and deploy web applications. Not every application can be a Rails one, especially where it's been up and running for years. The systems we deploy on often rely on configuration files scattered all over the filesystem, and can be complex results of years of change.&lt;/p&gt;&lt;p&gt;By extension, the systems we develop on often don't exactly mirror where we deploy. If we're lucky and careful, then we have a staging server which mirrors the live environment, but that's not too much of an advantage. Among other things, we need ways to evolve and refactor the live environment, and have our development environments easily track that.&lt;/p&gt;&lt;p&gt;I'd like to call such an environment &amp;quot;agile infrastructure&amp;quot;. Infrastructure that doesn't hamper developers, and allows live configurations to change and evolve. Infrastructure that allows new things to be tried with minimum cost, and can provide the best information possible to help future planning.&lt;/p&gt;&lt;p&gt;Tools enable techniques, of course. It's a lot easier to be agile if you're programming in Rails rather than plain old PHP. So what are the tools enabling agile infrastructure?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Techniques I've found useful&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;While there's a long way to go, I'd like to describe some of the techniques I've been using to help create a flexible environment for developing a sizeable PHP/MySQL application.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Operating system&lt;/em&gt;&lt;/p&gt;&lt;p&gt;An operating system must be easy to bring into a known state with minimum interference. For this, I've found Ubuntu or Debian to be an ideal choice. Two of the main reasons include the constancy of stable releases and the fact that it's rare you need to stray outside the distribution's servers to get the software you need.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Deployment&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Deploying an application shouldn't break the cleanliness of your OS build. I prefer to package deployed applications into &lt;em&gt;.deb&lt;/em&gt; files. This enables me to build on several advantages of the package management system:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;configuration file handling: deployed machines can keep individual config in /etc, which is preserved over software update.&lt;/li&gt;&lt;li&gt;no random state: you know for sure exactly the state of the deployed application, no random files left hanging around.&lt;/li&gt;&lt;li&gt;natural workflow: packages take a little bit of effort to build and deploy, which means it focuses developers on getting them right. If things do go wrong, it's very easy to roll back one version.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Source control&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The case for source control, thankfully, doesn't need making these days. Yet not every source control system is created equal. Developers shouldn't be constrained by source control, it should be cheap and easy to try new ideas and merge these in later.&lt;/p&gt;&lt;p&gt;Not only cheap branching, but also easy merging, is required to keep development agile while still retaining the benefits of source control. Many people flock to Subversion these days, predominantly because it fixes some of CVS' more egregious misfeatures. However, merging can still be pretty difficult in Subversion.&lt;/p&gt;&lt;p&gt;I prefer to use a system allowing easy merging, such as &lt;em&gt;svk&lt;/em&gt; or &lt;em&gt;bazaar&lt;/em&gt;. Because so many of us use laptops these days, disconnected operation is also a huge boon. &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar-NG&lt;/a&gt; offers both repository-oriented and completely decentralized operation, giving the best of both worlds. It also wins the competition for least setup overhead.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Virtualization&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Previously a high-powered technology, cheap virtualization is now with us. Many identical virtual machines can be quickly created to enable testing and experimentation. Deployment to virtual machines can enable hardware independence for applications, reducing another big headache.&lt;/p&gt;&lt;p&gt;Large organisations have it within their reach to bring new hardware online easily, and have invested much in management systems for it. Virtualization brings this in reach of small and one-man development teams.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Desktop-based virtualization&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Systems such as VMWare and Parallels untether developers from their desks. I use the OS X desktop daily for its productivity software, but an Ubuntu virtual machine for a large proportion of development work. A simple keypress lets me flick between the two. The advantages of multiple desktops to hand for web development are well known. (In fact, thanks to WINE and &lt;a href="http://www.tatanka.com.br/ies4linux/index-en.html"&gt;IES4Linux&lt;/a&gt; I can run Internet Explorer cheaply too from the same virtual machine).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Xen virtualization&lt;/em&gt;&lt;/p&gt;&lt;p&gt;After the initial novelty wears off, one of the most tedious tasks in the world is bringing new machines online. Combined with the tendency development environments have to get crufty as new ideas and tools are tried out, this makes for increasing disparity between the development and deployment environments.&lt;/p&gt;&lt;p&gt;Wouldn't it be nice just to take a clean machine off the shelf, check out the source, and pick up again? Using &lt;a href="http://xensource.com/products/xen/index.html"&gt;Xen&lt;/a&gt; for Linux, this cheap virtualization is possible.&lt;/p&gt;&lt;p&gt;Sadly, Xen isn't yet a packaged part of Ubuntu, but getting it up and running on Ubuntu Dapper isn't too hard. Warning: here's where things get pretty deep. Skip this bit if you're not interested in the nitty-gritty.&lt;/p&gt;&lt;p&gt;I followed these steps:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Followed &lt;a href="https://wiki.ubuntu.com/XenVirtualMachine/XenOnUbuntuDapper"&gt;instructions in the Ubuntu wiki&lt;/a&gt; to get the first domain (vm) up and running&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Installed the &lt;em&gt;xen-tools&lt;/em&gt; package, which provides wrappers for easily creating virtual machines&lt;/li&gt;&lt;li&gt;Adjusted some of the &lt;em&gt;xen-tools&lt;/em&gt; configuration (&lt;em&gt;/etc/xen-tools/hook.d/20-setup-apt&lt;/em&gt;) to set up for Ubuntu rather than Debian&lt;/li&gt;&lt;li&gt;Once the virtual machine was made, adjusted its config to allow for the kernel initrd and configure the network bridge I was using&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Getting over the DNS mountain&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you want it to be easy to bring new virtual machines up and down, you need to adopt a different approach to managing your DNS. You need to know how to predictably connect to a virtual machine. Yet it's going to get very boring and error prone to manage the IP address space manually in your DNS, or even to map the MAC addresses of your virtual machines in your DHCP configuration.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Help is at hand in the form of mDNS (also known as Rendezvous / Bonjour / ZeroConf). In the host machine, and in each virtual machine, I ensured the &lt;em&gt;avahi-daemon&lt;/em&gt; and &lt;em&gt;avahi-utils&lt;/em&gt; packages were installed, providing mDNS services. (You should also check that &lt;em&gt;mdns&lt;/em&gt; is present in the hosts entry of &lt;em&gt;/etc/nsswitch.conf&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;What all this does is allow the machines (virtual or otherwise) on the network to resolve names using mDNS. So if I create 3 VMs, &lt;em&gt;alpha&lt;/em&gt;, &lt;em&gt;beta&lt;/em&gt; and &lt;em&gt;gamma&lt;/em&gt;, I can access these right away using the hostnames &lt;em&gt;alpha.local&lt;/em&gt;, &lt;em&gt;beta.local&lt;/em&gt; and &lt;em&gt;gamma.local&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Hey presto! Easily make machines appear and disappear without any need for sysadmin involvement. All the extra steps to add &lt;em&gt;avahi&lt;/em&gt; installation can be easily scripted with &lt;em&gt;xen-tools&lt;/em&gt;, to reduce the number of commands needed to birth a new machine to one.&lt;/p&gt;&lt;p&gt;With this ease of creating new machines, it's much more straightforward to experiment with server topology and conduct experiments on server environments.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Agile development is necessarily constrained by the infrastructure on which it is conducted. The infrastructure itself is constrained by the tools and platforms of choice.&lt;/p&gt;&lt;p&gt;By appropriate tool choice we can reduce the commitment and overhead of infrastructure. This enables developers to get on with the job they do best, and makes experimentation and evolution of infrastructure much simpler.&lt;/p&gt;&lt;p&gt;When programming, it's dangerous to fall in love with your code, as the best solution may often involve throwing half of it away. The same hazard exists with infrastructure, with bizarre and awkward effects propagating back into code and operations. Get yourself a low commitment, agile environment, and you'll be able to keep up with the pace.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/06/17-agile-infrastructure#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Better subpixel rendering on Linux</title>
    <link href="http://times.usefulinc.com/2006/05/21-better-subpixel" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/852</id>
    <updated>2006-05-27T12:59:57Z</updated>
    <published>2006-05-21T20:17:40Z</published>
    <summary>Tobias Wolf sent me news of patches for Cairo and Xft to get rid of the colour fringing for X subpixel rendering.</summary>
    <category term="linux"/>
    <category term="typography"/>
    <content type="html">
&lt;p&gt;The move to better subpixel rendering in X windows continues. Tobias Wolf kindly pointed out to me these &lt;a href="http://lists.nongnu.org/archive/html/freetype-devel/2006-05/msg00044.html"&gt;new patches from David Turner&lt;/a&gt;. Turner says &amp;quot;it's rather delicious&amp;quot; and I'm inclined to agree.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Applied to libXft and Cairo, they remove a lot of the ugly colour fringing from subpixel rendered fonts under Linux.&lt;/p&gt;&lt;p&gt;David posts &lt;a href="http://lists.nongnu.org/archive/html/freetype-devel/2006-05/msg00052.html"&gt;a screenshot&lt;/a&gt;, which looks great on my screen (if you have a CRT or different pixel ordering, it may look horrible for you -- the disadvantage of subpixel and screenshots!)&lt;/p&gt;&lt;p&gt;Update: Tobias mentions &lt;a href="http://lists.nongnu.org/archive/html/freetype/2006-04/msg00012.html"&gt;another patch&lt;/a&gt;, which is needed to get best results.&lt;/p&gt;&lt;p&gt;Further update: Diego Escalante Urrelo &lt;a href="http://diego.aureal.com.pe/fonts/"&gt;has posted some Ubuntu packages&lt;/a&gt; with the patches in.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/05/21-better-subpixel#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Catching up</title>
    <link href="http://times.usefulinc.com/2006/04/10-catchup" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/848</id>
    <updated>2006-04-10T23:15:22Z</updated>
    <published>2006-04-10T22:56:32Z</published>
    <summary>I've been on blogging hiatus for a long time, but here's some updates as to what I've been doing. XTech, MacBook, Debian, Rails.</summary>
    <category term="xtech"/>
    <category term="linux"/>
    <category term="rails"/>
    <category term="apple"/>
    <content type="html">
 &lt;p&gt;Most of my energy recently has been devoted to organising things for &lt;a href="http://xtech06.usefulinc.com/"&gt;XTech 2006&lt;/a&gt;, now just over a month away.&lt;/p&gt; &lt;p&gt;Here are some XTech-related snippets:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.mozilla.com/"&gt;Mozilla Corporation&lt;/a&gt; has joined as a co-host. We'll have six Mozilla related presentations, plus a keynote about JavaScript 2 from Mozilla CTO Brendan Eich.&lt;/li&gt; &lt;li&gt;The &lt;a href="http://xtech06.usefulinc.com/content/ajax"&gt;Ajax Developers' Day&lt;/a&gt; continues to take shape. We're looking to add a &lt;em&gt;Ajax toolkit lightning demo&lt;/em&gt; session at the end of the day. &lt;a href="mailto:edd-web@usefulinc.com"&gt;Contact me&lt;/a&gt; if you or your company wants to take part in this.&lt;br /&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://xtech06.usefulinc.com/2006/04/05-barcamp"&gt;BarCamp Amsterdam II will be taking place directly after XTech&lt;/a&gt;. This will be a free-form participant-led conference, held over the weekend. Many XTech speakers and attendees are likely to hang around to take part.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;strong&gt;MacBook&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;My new computer has arrived, an Apple MacBook Pro. I know I wrote some time ago about how disappointing it was for free software advocates to be using a non-free OS, and I am rather sad about this in some ways. I'll be writing in the near future about my impressions of the platform, and reasons for buying this machine.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Writing&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;My latest piece on Debian has been published over at O'Reilly, &lt;a href="http://www.linuxdevcenter.com/pub/a/linux/2006/04/06/aptitude_and_apt_get.html"&gt;Installing Software on Debian&lt;/a&gt;. We've been a little slow getting through the publication of these, so I'll try and hurry the next few along.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Rails continues to impress. I wish I had more time than I do to use it, as it feels so &lt;em&gt;right&lt;/em&gt; to work with. With &lt;a href="http://hackdiary.com/"&gt;Matt Biddulph&lt;/a&gt; I'll be &lt;a href="http://xtech06.usefulinc.com/schedule/detail/188"&gt;teaching a day on Rails&lt;/a&gt; at XTech 2006. In the meantime, I highly recommend Chad Fowler's &lt;a href="http://pragmaticprogrammer.com/titles/fr_rr/index.html"&gt;Rails Recipes&lt;/a&gt;, it covers the most common requirements from real-world web applications.&lt;/p&gt; &lt;p&gt;Oh, and I'm scheduled to attend &lt;a href="http://railsconf.org/"&gt;RailsConf&lt;/a&gt; this June. My paper was (not too surprisingly) declined for the conference, but &lt;a href="http://railsconf.org/talks/selected/show/122"&gt;Matt's was accepted&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/04/10-catchup#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>Linux fonts: still wanting</title>
    <link href="http://times.usefulinc.com/2006/01/16-fonts" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/829</id>
    <updated>2006-01-22T16:02:26Z</updated>
    <published>2006-01-16T09:15:51Z</published>
    <summary>Recent work cross-checking how this site looks on various platforms leads to unhappy conclusions about how fonts are handled on Linux.</summary>
    <category term="linux"/>
    <category term="typography"/>
    <category term="gnome"/>
    <content type="html">
  &lt;p&gt;Fonts on Linux have had a chequered history. Mostly, &lt;a href="http://jeremy.zawodny.com/blog/archives/000773.html" title="A rant from Jeremy Zawodny about how difficult it is to get fonts looking right on Linux"&gt;they've been bad&lt;/a&gt;. Once, there was an excuse for this: GNOME and KDE were unable to render anti-aliased text, and there was a paucity of decent free TrueType fonts. Now, with Xft, Freetype and &lt;a href="http://www.bitstream.com/font_rendering/products/dev_fonts/vera.html" title="The Bitstream Vera family"&gt;Bitstream Vera fonts&lt;/a&gt; things are different.&lt;/p&gt;   &lt;p&gt;Unfortunately, it's hard to find Linux distributions that have gone the extra mile to make the fonts look good by default. Let's take a brief look through default fonts in various operating systems.&lt;/p&gt;   &lt;p&gt;&lt;img width="252" height="220" src="http://times.usefulinc.com/asset/name/12/tiger.png" alt="OS X Tiger default fonts" title="OS X Tiger default fonts" /&gt;&lt;/p&gt;   &lt;p&gt;Mac OS X offers a great default, which looks good on all modern machines. No user configuration required.&lt;/p&gt;   &lt;p&gt;&lt;img width="252" height="220" src="http://times.usefulinc.com/asset/name/10/windows-noct.png" alt="Windows default fonts" title="Windows default fonts" /&gt;&lt;/p&gt;   &lt;p&gt;Windows default is blocky, as there's no anti-aliasing to speak of, but the hinting on the fonts is excellent and they're crisp. If you dig a bit and find the crazily hidden Display properties - Appearance - Effects dialog, you can turn on ClearType.&lt;/p&gt;   &lt;p&gt;&lt;img width="252" height="220" src="http://times.usefulinc.com/asset/name/11/windows-ct.png" alt="Windows ClearType fonts" title="Windows ClearType fonts" /&gt;&amp;nbsp;&lt;/p&gt;   &lt;p&gt;Windows ClearType offers a pleasing level of font smoothing. Now, let's look at the GNOME default, taken from a screenshot on the GNOME 2.12 start page.&lt;/p&gt;   &lt;p&gt;&lt;img width="252" height="220" title="GNOME default fonts" alt="GNOME default fonts" src="http://times.usefulinc.com/asset/name/8/gnome-default.png" /&gt;&lt;/p&gt;   &lt;p&gt;This is pretty much how default GNOME looks on any machine. In particular, it's the default look you get when you install Ubuntu. This corresponds to a setting of full hinting in the font preferences, with the font Bitstream Vera Sans. The quality of the type, however, is poor.&amp;nbsp; It has a spidery and ungainly quality to it.&lt;br /&gt;  &lt;/p&gt;   &lt;p&gt;In and of itself, Vera is not an ugly font. There's some combination of the font's hinting and the Freetype hinting engine that conspires to make things ugly. On my desktop I've tried to work around this by altering the font settings somewhat.&lt;/p&gt;   &lt;p&gt;&lt;img width="252" height="220" title="GNOME: Edd's fonts" alt="GNOME: Edd's fonts" src="http://times.usefulinc.com/asset/name/9/gnome-edd.png" /&gt;&lt;/p&gt;   &lt;p&gt;The effect isn't perfect, but a lot better to look at. The font is Bitstream Vera Sans as before. To get this, I had to switch off any hinting then slowly play with the DPI setting until I get letterforms that rendered neatly.&lt;/p&gt;   &lt;p&gt;Alas, this brings problems of its own. For a start, not all popular GNOME applications respect this setting. Firefox often gets its own idea about such matters as screen DPI, and OpenOffice.org2 completely ignores my hinting preferences and gives me nasty looking menu bars. Murray Cumming's recent &lt;a href="http://www.murrayc.com/blog/permalink/2005/12/06/gnome-for-bad-eyesight/"&gt;GNOME for bad eyesight&lt;/a&gt; blog post also gets into many of these issues.&lt;/p&gt;   &lt;p&gt;For most users without time or inclination to hunt this down the choice is either to live with the ugliness, or opt for an operating system that gets it right.&lt;/p&gt; &lt;p&gt;(Lest I seem churlish here, I should celebrate the amazing work done with internationalization on the Linux desktop, which continues to bring computing access to many in the world for whom choice is a luxury.)&amp;nbsp;&lt;/p&gt;   &lt;p&gt;There is one Linux distribution that makes a reasonable job of good-looking fonts. The Fedora Core 4 distribution ships with a different default font and out of the box settings giving reasonably attractive letterforms. Courtesy of OSDIR, here are &lt;a href="http://shots.osdir.com/slideshows/slideshow.php?release=363&amp;amp;slide=1&amp;amp;title=fedora+core+4+gnome+screenshots"&gt;GNOME&lt;/a&gt; and &lt;a href="http://shots.osdir.com/slideshows/slideshow.php?release=362&amp;amp;slide=1&amp;amp;title=fedora+core+4+kde+screenshots"&gt;KDE&lt;/a&gt; screenshots. However, I'm pretty sure it doesn't solve the rest of the font integration issues.&lt;br /&gt;  &lt;/p&gt;   &lt;p&gt;I'm no typography expert, but I find that good-looking fonts enable me to work more effectively. And on the advocacy side, I want my Linux desktop to look as good or better than the OS X and Windows alternatives.&lt;/p&gt;   &lt;p&gt;Lots of great effort was made getting us to the point of anti-aliased rendering and the licensing of the Bitstream Vera Fonts. Having got this far, it seems a shame not to hunt down the remaining irritations in font handling.&lt;/p&gt; &lt;p&gt;Further reading:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.freetype.org/patents.html"&gt;Freetype &amp;amp; Patents&lt;/a&gt;, goes some way to explain the variable state of font hinting on Linux.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://times.usefulinc.com/2006/01/16-fonts#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
  <entry>
    <title>New series on Debian</title>
    <link href="http://times.usefulinc.com/2005/10/02-debian" rel="alternate"/>
    <id>http://times.usefulinc.com/public/read/816</id>
    <updated>2005-10-02T22:08:07Z</updated>
    <published>2005-10-02T22:08:07Z</published>
    <summary>Introducing a new series on Debian administration.</summary>
    <category term="linux"/>
    <content type="html">
&lt;div&gt;
&lt;p&gt;The first article in a new series I'm writing on administering Debian
GNU/Linux has been published on O'Reilly Network: &lt;a href="http://www.linuxdevcenter.com/pub/a/linux/2005/09/29/installing_debian.html"&gt;Installing Debian&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This opening piece is a little longer than typical for the series--installation
is, after all, not easily digested into smaller chunks!  Upcoming articles will
deal with configuring the system for your desired use, and learning how to work
with Debian's particular features and support systems.&lt;/p&gt;
&lt;p&gt;Most of the articles will work well for Ubuntu and other
systems derived from Debian.  In fact, it's mostly in the
details of installation that the experience varies most between
the distributions.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://times.usefulinc.com/2005/10/02-debian#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;    </content>
  </entry>
</feed>
