s6-dns: the s6-dns-hosts-compile program
Keywords: s6-dns s6-dns-hosts-compile /etc/hosts /etc/hosts.cdb hosts file cdb

s6-dns
Software
skarnet.org

# The s6-dns-hosts-compile program

s6-dns-hosts-compile compiles the system's `/etc/hosts` file into a CDB file for more efficient later use by s6-dns programs that may use the data contained in the hosts file.

## Interface

         s6-dns-hosts-compile [ -i ifile ] [ -o ofile ]

- s6-dns-hosts-compile reads the `/etc/hosts` file, which must follow the traditional hosts format.
- It outputs a CDB database in the `/etc/hosts.cdb` file.
- It exits 0.

## Options

- `-i` ifile : read from ifile instead of `/etc/hosts`.
- `-o` ofile : write to ofile instead of `/etc/hosts.cdb`.

## Notes

- The `/etc/hosts` file is an old way of specifying IP from/to domain name correspondences. It's convenient in a pinch when a user needs to locally override DNS data - for instance, to redirect common advertising sites to 127.0.0.1 - but it does not map exactly to the DNS view of domain names.
- Due to this, and to its line-by-line text syntax, lookups using this file are terribly inefficient and rely on approximate qualification heuristics.
- To avoid that, s6-dns tools prefer having the `/etc/hosts` data in a format that's both more DNS-like and more efficient; the file output by s6-dns-hosts-compile is the result.
- When asked to take `/etc/hosts` data into account, s6-dns tools will first look for a `/etc/hosts.cdb` file and use the data from it. If absent, they will read the `/etc/hosts` file and compile its contents into a temporary cdb file under `/tmp` (which they immediately unlink), and use that cdb to query hosts data.
- As a consequence, lookups are always efficient, but there's an initial compilation step. Using s6-dns-hosts-compile to produce a `/etc/hosts.cdb` file in advance saves the cost of that compilation step in subsequent invocations of s6-dns tools.
- If s6-dns tools detect that `/etc/hosts` has been modified more recently than `/etc/hosts.cdb`, they will not use `/etc/hosts.cdb` and will perform the compilation step into a temporary file. So, remember to run s6-dns-hosts-compile after modifying your `/etc/hosts` if you want to keep the tiny performance improvement.
- Some tools write link-local addresses in `/etc/hosts` i.e. IPv6 addresses followed by a `%` (percent) and a network interface name. This is nonstandard and unusable with the DNS protocol, which does not take interface names into account. `s6-dns-hosts-compile` will ignore such lines if they appear in your hosts file.