Quick update on PowerDNS, 'powertools' musings

Posted by bert hubert Mon, 27 Mar 2006 18:45:00 GMT

Today the big Dutch ISP migrated one of its three recursor nameserver IP addresses to PowerDNS, at first sight all appears well. In preparation of this event, over a billion packets were retransmitted and answers verified against incumbent nameservers.

One thing we missed is that that the verification code uses part of the same code as the nameserver itself. This in turn meant that some malformed packets never were replayed, which hid the fact that

  1. the recursor logged these errors verbosely

  2. these packets are rather common

I’ve made the recursor a little less strict with respect to packets with trailing garbage. This has reduced error reporting a lot and improved general customer satisfaction.

But after these things were addressed, things progressed swimmingly and there were happy faces all round.

PowerTOOLS

Additionally, I’ve made a tiny 61 kilobyte package of just the PowerDNS recursor. I enjoyed the large amount of control a raw Makefile gives one compared to penetrating the layers of cruft called configure.ac, Makefile.am and Makefile.in.

I’ve long had the urge to rout out the venerable autotools from my projects, now may be the time. To this end, I’ve started summarising why we actually need ./configure. So far I’ve found a few things.

There are basically three categories:

Where things come from, what we have

  1. Checking dependencies and:
    • informing the user intelligibly of any missing ones
    • Make proper use of detected libraries
    • Configure ourselves to work around any missing ones that are not vital
  2. Allow user to specify the non-default location of any dependencies, overriding either improper defaults (this should be rare) or make it possible to choose between different versions of a dependency.
  3. Choose which capabilities should be compiled into the resulting programs
  4. Make other compile-time choices which cannot easily be changed at runtime.

Where things go

  1. Figure out where programs, documentation, configuration files should be installed, either by
    • determining proper defaults for the target operating system
    • allowing the user to override these sensible defaults, if needed
  2. On install move items to these places.
  3. Make tarballs of the source that contain the files needed to compile.

Build mechanics, dependencies

  1. Allow programmer to easily specify the buildup of binaries (ie, which source files are part of a program), without duplication of work.

  2. Abstract out the mechanics of building shared libraries. This has generally been the domain of libtool. Different operating systems have different rituals for making shared libraries, static executables etc etc.

Implementation

I’m pretty sure GNU Make, combined with perhaps some bash scripts, contains almost everything needed to implement the above without too much work.

This won’t be a bombastic process, but will probably evolve into enough to make building and releasing the PowerDNS recursor easy.

Posted in , ,  | 2 comments | no trackbacks

Comments

  1. piotr said about 8 hours later:
    nice to know the migration went well
  2. piotr said about 8 hours later:
    also I didn't know you had a blog, and I'm amused by the title

Trackbacks

Use the following link to trackback from your own site:
http://blog.netherlabs.nl/articles/trackback/9

Comments are disabled