Upgrading machines versus reinstalling them

Yesterday I mentioned that we wouldbe 'upgrading' the version of OmniOS on our fileservers not by usingthe OmniOS upgrade process but by reinstalling them. While this waspartly forced by an OmniOS problem, it's actually our approach ingeneral. We tend to take this for two reasons.

The first reason is that it leads to either simpler installinstructions or more identical machines if you have to rebuild one,depending on how you approach rebuilding upgraded machines. If youupgraded a machine from OS version A to OS


Don't make /opt a filesystem on OmniOS (or probably Illumos generally)

OmniOS boot environments are in general pretty cool things, butthey do create one potential worry: how much data gets captured inthem and thus how much space they can consume over time. Since bootenvironments are ultimately ZFS snapshots and clones, the amountof space each individual one uses over time is partly a functionof how much of the data captured changes over time. Taking an extremecase, if you have a very large /var/log that is full of churninglogs for some reason, each boot environment and


An interesting trick for handling line numbers in little languages

One of the moderately annoying issues you have to deal with when writinga lexer for a language is handling line numbers. Being able to reportline numbers is important for passably good error messages, but actuallydoing this can be a pain in the rear end.

The usual straightforward way is to have your lexer keep track ofthe current line number and make it available to higher levels ondemand. One problem this runs into is that the lexer's currentposition is not necessarily where the error actually is. The simple


I don't think I'm interested in containers

Containers are all the rage in system administration right now, andI can certainly see the appeal. So it feels more than a bit hereticalto admit that I'm not interested in them, ultimately because I don'tthink they're an easy fit for our environment.

What it comes down to is two things. The first is that I thinkcontainers really work best in a situation where the 'cattle'model of servers is a good fit . By contrast, ourimportant machines are not cattle .


A potential path to IPv6 (again), but probably not a realistic one today

In practice, adding IPv6 to existing networks is a lot of work andis clearly going quite slowly in many places, or even not going atall. Given the economic incentives involved , thisis no surprise; currently IPv6 primarily benefits people who arenot on the Internet, not people who are. So what will drive adoptionof IPv6, so that it becomes available in more areas? In particular,what would push us towards adding IPv6to our networks?

My current answer is that the only


A core problem of IPv6 adoption is the lack of user benefits

I've written before about some of the economic incentivesinvolved with IPv6 adoption , focusing on whobenefits from IPv6. Today I want to touch on this economicissue from another angle. Put simply, one of the big problemsis this:

In many places, adding IPv6 to your network won't improveanything for your users.

Sure, from a geeky technical side it's nice to support IPv6 on yournetwork and see ipv6.google.com andso on. Having your


In practice, programmers mostly understand complexity by superstition

A while back I said that a significant amount of programming isdone by superstition . A corollary ofthat is that a great deal about programming is also understoodprimarily through superstition and mythology, as opposed to goingto the actual deep technical detail and academic definitions ofthings. Today I want to point specifically to complexity.

You are a good, well educated programmer, so you know what 'constanttime' or O(1) in the context of hash tables really means ( forexample ). You probably know many


Are Python dictionaries necessarily constant-time data structures?

The general view of all forms of hash tables , Python's dictionariesincluded, is that they are essentially constant-time data structuresunder normal circumstances. This is not quite true under sufficientlyperverse conditions where youhave a high degree of collisions in the hashes of the keys, butlet's assume that you don't have that for the moment. Ignoring hashcollisions, can you treat dictionaries as fast constant-time datastructures?

The answer is 'not always', and the path to it has


Illusory security is terrible and is worse than no security

One of the possible responses to my entry on how your entiredownload infrastructure should be using HTTPS is to say more or less 'well, at least the current insecure approachis trying, surely that's better than ignoring the whole issue'. Myanswer is simple: no, it's not. The current situation covered inmy entry is actually worse than nothaving any PGP signatures (and perhaps SHA1 hashes) at all.

In general, illusory security is worse than no security because inpractice,


Allowing people to be in more than 16 groups with an OmniOS NFS server

One of the long standing problems with traditional NFS is that theprotocol only uses 16 groups ; although you canbe in lots of groups on the client (and on the server), the protocolitself only allows the client to tell the server about 16 of them.Recent versions of Illumos added a workaround (based on the Solaris one)where the server will ignore the list of groups the client sent it andlook up the UID's full local group membership. Well, sometimes it willdo this