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)