I’m jotting this down here so I don’t forget it - I’ve been bit for the third time by this same not-quite-bug which is almost impossible to debug if you don’t already know what’s causing it.
The DNS resolution configuration file
resolv.conf is read once by each process upon initialization (for most programs, at least). This appears to be a trade-off between the need to be able to change it without rebooting, and the obvious speed requirement for calls to
gethostbyname(3) and so on. The unfortunate result of this is that updates to
resolv.conf won’t be reflected in running programs.
You don’t want to start programs with
resolv.conf not yet initialized. If you’re using dhcp, the
resolv.conf will be blank until the connection is properly established, and so programs started before the connection is established may still see the old file with no name servers listed. Trying to debug this is rather unpleasant - some programs aren’t affected (firefox, for example, seems to run
res_init(3) repeatedly of its own accord), and those that are don’t mention that they’re not seeing any nameserver, they just say they couldn’t resolve the domain name.