NAME
sn - The sn news system.
DESCRIPTION
If you think of a news spool as a black box, then sn is a bunch of
programs to put articles in the box (snstore), to view articles in it
(snntpd, sncat), remove old articles (snexpire,sncancel), generate a
list of what’s in it (snscan, snprimedb), or display that list
(sndumpdb). In addition it can go find the articles to put in the box
(snget).
The sn system is designed for small sites, spooling a few dozen to a
few hundred newsgroups. It is not meant for sites carrying a full news
feed. sn is suitable as a replacement for leafnode (ftp.troll.no, by
Arnt Gulbrandsen). It doesn’t have leafnode’s intelligence when it
comes to retrieving upstream articles, but is less demanding on the
filesystem and takes up less disk space.
sn supports local news groups.
sn tries to create aliases for crossposts instead of storing the
article multiple times.
sn can compress articles to save disk space. Compressing and
uncompressing take place transparently.
sn doesn’t use configuration files. Instead, you write small shell
scripts to customize sn’s behaviour.
REQUIREMENTS
sn has been tested only against Linux ver. 2.0. It makes heavy use of
mmap(2) in MAP_SHARED and MAP_WRITE mode, so it won’t work on
pre-1.3.45 or so. I (harold-sn@nb.com.sg) am interested in bug
reports, comments, and suggestions.
NEWS SPOOL STRUCTURE
The news spool is /var/spool/sn, which all sn programs need in order to
run. It contains the group directories in news.group.name format
rather than the traditional news/group/name. Each such directory
contains article files, named serially from 1, 2, etc. Each article
file consists of up to 10 articles, which reduces the number of files
and inodes required. These article files are mmap(2)ed before use, and
they are cached to reduce search time. sn tries to keep the headers of
these articles bunched together, to reduce the memory footprint.
In addition to the article files, each newsgroup directory also
contains files which control the behaviour of the sn system. All
control files have filenames beginning with a dot, and they all reside
in the group directory in which they are to have effect. In
particular, if the group directory does not have a subdirectory
.outgoing in it, it is considered a local news group.
BUGS
When retrieving articles, there is a window of time between when an
article is first marked as wanted and when it is committed to the news
spool. Within this window it is possible to have the same article
committed by a separate process. This defeats the aliasing feature so
you could end up with more than one copy of an identical article.
The ID database will only store one instance of an articles
{ID,group,serial} tuple. After the second copy is committed to the
spool, snstore will try to commit it in the ID database, and will fail.
So it is possible that after the article has been expired, another copy
will still remain, but be inaccessible if requested by its ID.
sn doesn’t sync the ID database after each write, so it could get
corrupted. If you suspect it is corrupted, delete the files
/var/spool/sn/.table, /var/spool/sn/.chain, and
/var/spool/sn/.newsgroup, making sure snntpd and snget aren’t running
or scheduled to do so. Then run
cd /var/spool/sn; snscan -n * |snprimedb
This will recreate the ID database.
PROGRAMS
sncat prints out the specified articles. This is useful if you want
to transport the spool to another system.
sndumpdb
dumps the ID database. It is not normally used.
snexpire
expires articles in the spool.
snfetch
is the back end of the article fetcher. You can use suck (a
separate package) instead.
snget is the front end of the article fetcher.
snmail converts a normal email message into a news article. It can be
used to turn a mailing list into a local newsgroup.
snnewgroup
is a script to create newsgroup directories.
sndelgroup
is a script to delete newsgroup directories and flush the ID
database of references to those articles.
snntpd is the news server (an nnrpd).
snprimedb
feeds the ID database from formatted standard input. This
database is what permits articles to be specified by their ID.
This program is not used in normal operation.
snscan scans the specified articles and outputs a line consisting of
the article’s ID, newsgroup, and serial number within the
newsgroup. This output is suitable for feeding to snprimedb.
This program is not used in normal operation.
snsend takes articles on standard input and distributes them according
to the type of newsgroup.
snstore
Like snsend, but considers all newsgroups as local, so stores
all articles locally only.
sncancel
cancels articles, so they are no longer available locally.
CONVENTIONS
Exit codes
All sn programs exit 0 on success, 1 on invocation error; 2 on
system error; 3 on format or protocol error. Other exit codes
are possible.
Options
sn programs take -d to enable verbose messages (may be
repeated), and -V, which displays the version and exits. Where
a network timeout is appropriate, this is specified with
-t timeout, in seconds. -P indicates the pid should be included
in any status output. Other options are possible.
Environment
sn programs will take the contents of the SNROOT environment
variable as the news spool rather than /var/spool/sn. If a
program will need to run another, it appends /usr/sbin to its
PATH variable if /usr/sbin is not already present.
SEE ALSO
sncat(8), sndumpdb(8), snexpire(8), snfetch(8), snget(8), snmail(8),
snnewgroup(8), sndelgroup(8), snntpd(8), snprimedb(8), snscan(8),
snstore(8), snsend(8)