nn, written by Kim F. Storm, claims to be a newsreader
whose ultimate goal is not to read news. Its name stands for
“No News,” and its motto is
“No news is good news. nn is better.”
To achieve this ambitious goal, nn comes with a large
assortment of maintenance tools that not only allow thread generation,
but also extensive database consistency checks, accounting,
gathering of usage statistics, and access restrictions. There is also an
administration program called nnadmin, which allows you
to perform these tasks interactively. It is very intuitive, so we will not
dwell on these aspects, but deal only with the generation of the index files.
The nn threads database manager is called
nnmaster. It is usually run as a daemon, started from an
rc file at boot time. It is invoked as:
/usr/local/lib/nn/nnmaster -l -r -C
This enables threading for all newsgroups present in your
Equivalently, you may invoke nnmaster periodically from
cron, giving it a list of groups to act upon. This list is
very similar to the subscription list in the sys file,
except that it uses blanks instead of commas. Instead of the fake group name
all, an empty argument of "" should be
used to denote all groups. A sample invocation looks like this:
# /usr/local/lib/nn/nnmaster !rec.games.go rec comp
Note that the order is significant. The leftmost group specification that
matches always wins. Thus, if we had put
rec, all articles from this group
would have been threaded nevertheless.
nn offers several methods to remove expired articles from
its databases. The first is to update the database by scanning the newsgroup
directories and discarding the entries whose corresponding article
has exceeded its expiration date. This is the default operation obtained by
invoking nnmaster with the –E option.
It is reasonably quick, unless you're doing this via NNTP.
The second method behaves exactly like a default expiration run of
mthreads; it removes only those entries that refer
to articles with numbers below the low-water mark in the
active file. It may be enabled using the
Finally, the third strategy discards the entire database and recollects all
articles. It may be enabled using the –E3 option.
The list of groups to be expired is given by the –F
option in the same fashion as above. However, if you have
nnmaster running as daemon, you must kill it (using
–k) before expiration can take place, and restart it
with the original options afterward. Thus the proper command to run
expiration on all groups using the first method is:
# nnmaster -kF ""
# nnmaster -lrC
There are many more flags that fine-tune the nn's
behavior. If you are concerned about removing bad articles or
assembling article digests, read the nnmaster manual page.
nnmaster relies on a file named GROUPS,
which is located in /var/lib/nn. If it does not exist
when nnmaster is first run, it is created. For each
newsgroup, it contains a line that begins with the group's name, optionally
followed by a time stamp and flags. You may edit these flags to enable certain
behavior for the group in question, but you may not change the order in which
the groups appear. The flags allowed and
their effects are detailed in the nnmaster manual page, too.