.\" Copyright (c) 1986 Regents of the University of California.
.\" All rights reserved.  The Berkeley software License Agreement
.\" specifies the terms and conditions for redistribution.
.\"
.\"	@(#)install.mn	6.2 (Berkeley) 5/30/86
.\"
.ds h0 "USENET Version B Installation
.ds h1
.ds h2 "SMM:10-%
.ds f0 
.ds f1
.ds f2 
.mt
USENET Version B Installation
.au
Matt Glickman
.ai
Computer Science Division
Department of Electrical Engineering and Computer Sciences
University of California
Berkeley, California 94720
.au
Revised by Mark Horton for version 2.10
Revised by Rick Adams for version 2.10.3
.hn
Introduction
.pg
This document is intended to help
a USENET site install and maintain the network news software.
Please ask questions of Rick Adams\*(dg;
.fn
\*(dg ARPANET: rick@seismo.CSS.GOV, UUCP: seismo!rick
.ef
such questions will help to point out areas that need
to be addressed here.
.pg
The overall order of things to do is:
.lp (a)
Find somebody to link up with.
You need a network connection of some kind,
for example,
ARPANET or UUCP.
If you must use UUCP and have no connections,
you must have at least a dialup and preferably a dialer,
and find someone willing to call your machine.
The USENET directory may be helpful in finding some other site geographically
near yours to hook up to.
.lp (b)
Create a
.i localize.sh
script to make local changes to the makefile and
.i defs.h
files. (Section 2 gives more details about creating
.i localize.sh \&.)
Once you're finished editing
.i localize.sh ,
create a
.i defs.h
and
.i Makefile
tailored
for your site with the command
.ce
sh localize.sh
Inspect
.i defs.h
and
.i Makefile
to ensure that all your local customizations
got into your final versions. If you saw a \*(lq?\*(rq when you ran
.i localize.sh ,
one or both of the files is certainly wrong. It's a good idea to
anchor the patterns in
.i localize.sh \&'s
.i ed (1)
scripts, especially in its
.i Makefile -editing
lines. For instance, use
.b /^UUXFLAGS/
instead of
.b /UUXFLAGS/ .
.lp (c)
Compile the software using the
.i make (1)
command.
.lp (d)
.i Su (1)
and type \*(lqmake install\*(rq.
This will copy the files out to the right place and
make directories containing most of the important files.
It will configure you in with a connection to
.cn oopsvax
via UUCP links.
This is undoubtedly wrong,
so you will have to configure links as needed.
If you are upgrading from a version older than 2.10.3, do \*(lqmake update\*(rq.
This will cause various checks to be performed on important
files in
.b LIBDIR .
The results will be reported to you.
If you are not sure if you should do \*(lqmake update\*(rq, do it.
It will not hurt anything if you have already done it.
.lp (e)
After editing the configuration table,
get your contact at the other end of the link to add you to their netnews
.i sys
file.
.lp (f)
Post a message to the
.bi sysname "" \f3to.\fP
newsgroup which should be set up to go only to the site you are linked to,
as a test.
Have the other person send a message to your system using the same mechanism.
If this doesn't work,
find the problem and fix it.
(Please don't use
.ng net.test
unless there is no alternative.
It is almost always possible to use
.ng test ,
or
.bi sysname "" \f3to.\fP
or some
.bi local \f3.test\fP
group,
instead of
.ng net.test .)
.lp (g)
Fill out a USENET directory form (the file
.i dirform
in the
.i misc
directory).
Post a copy to the USENET newsgroup
.ng net.news.newsite
and mail a copy to
.i cbosgd!uucpmap .
.lp (h)
Format the document
.i "\*(lqHow to Read the Network News\*(rq"
(the file
.i howto.mn
in the
.i doc
directory),
the document
.i "\*(lqHow to Use USENET Effectively\*(rq"
(the file
.i manner.mn
in the
.i doc
directory)
and the document
.i "\*(lqCopyright Law\*(rq"
(the file
.i copyright.mn
in the
.i doc
directory)
and post them to your
.ng general
newsgroup with a long expiration date.
You can use
.i inews (1)
or
.i postnews (1)
to do this.
.lp (i)
It will probably be necessary to fix your uucp commands
to allow
.i rnews
and to support the
.op \-z
and
.op \-n
options (if you are lucky enought to have the source).
.hn
Installation
.hn 2
Configuration
.pg
Local configuration of the USENET
version B software requires you to edit a few files.
Most importantly,
the
.i defs.h
and
.i Makefile
files must be created from their templates
.i defs.dist
and
.i Makefile.dst .
You should create a shell script called
.i localize.sh
which copies the files and makes local changes to the copies.
Even for a completely vanilla site,
some changes will be necessary.
For example,
your script should start with
.i localize.v7
or
.i localize.usg .
You should include the name of the local organization
.b MYORG ) (
and the uid of the local news super user
.b ROOTID ). (
You should also choose how your hostname will be determined.
If you are a USG site,
define
.b UNAME
in
.i defs.h .
If you are
running 4.[23] BSD,
define
.b GHNAME
in
.i defs.h .
If you have your UUCP name in 
.i /etc/uucpname ,
define
.b UUNAME
in
.i defs.h .
Otherwise,
news will look in the file
.i /usr/include/whoami.h
for a line of the form
.sd c
#define sysname your-sysname
.ed
.pg
If you are running System 3 or System 5,
you are a USG site.
Otherwise,
unless you are in AT&T,
you are probably a V7 site.
The previously mentioned defines are the only modifications that are
.i necessary
to install news at your site.
However,
you will probably want to change some of the ones listed below.
If your compiler does not accept \*(lq(void)\*(rq,
the simplest thing to do is add \*(lq\-Dvoid=int\*(rq to the
.b CFLAGS
line in the
.i Makefile .
.pg
A sample localize shell script can be found in
.i localize.sample .
The most important parameters are:
.hn 3
ROOTID
.pg
The numerical uid of the person who is the news super user.
This should not be set to 0.
Normally it is set to the uid of the news contact person for the site.
If it is not defined,
the uid of
.b NOTIFY
will be looked up in
.i /etc/passwd
and used instead.
.hn 3
N_UMASK
.pg
Mask for
.i umask (2)
system call.
Set it to something like 022 for a secure system.
Unsecure systems might want 002 or 000.
This mask controls the mode of news files created by the software.
Insecure modes would allow people to edit the files directly.
.hn 3
DFLTEXP
.pg
The default number of seconds after which an article will expire.
Two weeks (1,209,600 seconds) is the default choice.
If you wish to expire articles faster than two weeks,
it is recommended that you use the
.op \-e
flag to expire instead of decreasing
.b DFLTEXP .
.hn 3
HISTEXP
.pg
Articles which were posted more than
.b HISTEXP
ago are considered too old and are moved into the junk directory.
This is because they are too old to be in the history file,
so it is impossible to tell if they really should be accepted
or are endlessly looping around the network.
(This was theoretically possible before this feature was added.)
The articles are removed after
.b DFLTEXP
seconds,
but a copy of their
.hf Message-ID
is kept in the history file for
.b HISTEXP
seconds (the default is 4 weeks).
.hn 3
DFLTSUB
.pg
The default subscription list.
If a user does not specify any list of newsgroups,
this will be used.
Popular choices are
.ng all
and
.ng general\f1,\fPall.general .
.hn 3
TMAIL
.pg
This is the version of the Berkeley
.i Mail (1)
program that has the
.op \-T
option.
If left undefined,
the
.op \-M
option to
.i readnews (1)
will be disabled.
.hn 3
ADMSUB
.pg
This newsgroup (or newsgroup list) will always be selected
unless the user specifies a newsgroup list that doesn't include
.b ADMSUB
on the command line.
That is,
as long as the user doesn't use the
.op \-n
flag to
.i readnews
on the command line,
.b ADMSUB
will always be selected.
This is usually set to
.ng general .
(The intent of this parameter is to have certain newsgroups
which users are required to subscribe to.
A typical site might require
.op general .)
.hn 3
PAGE
.pg
The default program to which articles should be piped for paging.
This can be disabled or changed by the environment variable
.b PAGER .
If you have it,
the Berkeley
.i more (1)
command should be used,
since the
.op +
option allows the headers to be skipped.
.hn 3
NOTIFY
.pg
If defined,
this character string will be used as a user name to send mail
to in the event of certain control messages of interest.
(Currently these are
.b newgroup ,
.b rmgroup ,
.b sendsys ,
.b checkgroups ,
and
.b senduuname .)
As distributed,
mail will be sent to user
.i usenet .
It is recommended you create such a mailbox
(have it forwarded to yourself) if possible,
since this makes it easier for another site
to contact the site administrator for your site.
If you are unable to do this
.i e\f1.\fPg ., (
you are not the super user)
you should change this name to yourself.
Also,
messages about missing or extra newsgroups are mailed to this user
by the
.b checkgroups
control message.
.hn 3
DFTXMIT
.pg
This is the default command to use to transmit news
if no explicit command is given in the fourth field of the
.i sys
file.
It normally includes
.i uux (1)
with the
.op \-z
option.
You should install this modification to UUCP at once;
otherwise your users will start being bombarded with annoying
.i uux
completion messages.
However,
you can turn this off to get news installed.
.hn 3
UXMIT
.pg
This is the default command used if the
.b U
flag is present in the flags portion of a
.i sys
file line.
In this case,
the second \*(lq%s\*(rq refers to the name of a file in the news spool area,
not a temporary file.
It can usually only be used
when local modifications are made to the uucp system,
such as the
.op \-c
option to
.i uux .
.hn 3
DFTEDITOR
.pg
This is the full path name of the default editor to use
during followups and replies.
It should be set to the most popular text editor on your system.
As distributed,
.i vi (1)
is used.
.hn 3
UUPROG
.pg
If this is defined,
it will be used as a command to run when the
.b senduuname
control message is sent around.
Otherwise the command
.i uuname (1)
will be run.
Normally,
this program should be placed in
.b LIBDIR .
.hn 3
MANUALLY
.pg
If this is defined,
incoming
.b rmgroup
messages will not automatically remove the group.
News will instead mail a message to
.b NOTIFY
advising that the group should be removed.
If you define
.b MANUALLY ,
you should have
.b NOTIFY
defined.
.b MANUALLY
is defined by default to protect you against
accidental or malicious removal of an important newsgroup.
.hn 3
NONEWGROUPS
.pg
If this is defined, incoming
.b newgroup
messages will not automatically create the group.
News will instead mail a message to
.b NOTIFY
advising that the group should be created.
If you define
.b NONEWGROUPS ,
you should have
.b NOTIFY
defined.
.b NONEWGROUPS
is undefined by default to make it easier to automatically maintain the
news system.
.hn 3
BATCH
.pg
If set,
this is the name of a program that will be used to unpack
batched articles (those beginning with the character \*(lq#\*(rq.)
Batched articles normally are files reading
.sd c
#! rnews 1234
article containing 1234 characters
#! rnews 4321
article containing 4321 characters
\\&. . .
.ed
Batching is
.i strongly
recommended for increased efficiency on both sides.
.hn 3
LOCALNAME
.pg
Most systems have a full name database on line somewhere,
showing for each user what their full name is.
Most often this is in the gecos field of
.i /etc/passwd .
If your system has such a database,
.b LOCALNAME
should be left undefined.
If not,
define
.b LOCALNAME ,
and articles posted will only receive full names from local user information
specified in
.i NAME
or
.bi $HOME \f2/.name\fP
by the user.
If you have a nonstandard gcos format
(not
.i finger (1)
or RJE)
it will be necessary to make local changes to
.i fullname.c
as appropriate on your system.
.hn 3
INTERNET
.pg
If your system has a mailer that understands ARPA Internet syntax addresses
.cf user@site.domain ) (
turn this on,
and replies will use the
.hf "From"
or
.hf "Reply-To"
headers.
Otherwise,
leave it disabled and replies will use the
.hf "Path"
header.
.hn 3
MYDOMAIN
.pg
When generating internet addresses,
this domain will be appended to the local site name
to form mailing address domains.
For example,
on system
.cn ucbvax
with user
.i root ,
if
.b MYDOMAIN
is set to
.cf .UUCP ,
addresses generated will read
.cf root@ucbvax.UUCP .
If
.b MYDOMAIN
is
.cf .Berkeley.EDU ,
the address would be
.cf root@ucbvax.Berkeley.EDU .
If your site is in more than one domain,
use your primary domain.
The domain always begins with a period,
unless the local site name contains the domain;
in this case
.b MYDOMAIN
should be the null string.
.hn 3
CHEAP
.pg
Do not
.i chown (1)
spool files to
.i news .
This will cause the owner of the file to be the person that started
the
.i inews
process.
This is used for obscure accounting reasons on some systems.
.hn 3
OLD
.pg
Define this if any of your USENET neighbors run
2.9 or earlier versions of B news.
It will cause all headers written to contain two extra lines,
.hf Article-I.D.
and
.hf Posted ,
for downward compatibility.
Once all your neighbors have converted,
you can save disk space and transmission costs by turning this off.
It is strongly encouraged that they convert.
2.10.3 is
.i much
faster than 2.9.
The performance difference is dramatic.
.hn 3
UNAME
.pg
Define this if the
.i uname (2)
system call is available locally,
even though you are not a USG system.
USG systems always have
.i uname (2)
available and ignore this setting.
.hn 3
GHNAME
.pg
Define this if the 4.[23] BSD
.i gethostname (2)
system call is available.
If neither
.b UNAME
or
.b GHNAME
is defined,
.i inews
will determine the name of the local system by reading
.i /usr/include/whoami.h .
.hn 3
UUNAME
.pg
Define this if you keep your UUCP name in
.i /etc/uucpname .
.hn 3
V7MAIL
.pg
Define this if your system uses V7 mail conventions.
The V7 mail convention is that
a mailbox contains several messages concatenated,
each message beginning with a line reading
.hf "From \f2user date\fP"
and ending in a blank line.
If this is defined,
articles saved will have these lines added
so that mail can be used to look at saved news.
.hn 3
SORTACTIVE
.pg
Define this if you want the news groups presented in the order of each person's
.i .newsrc (5)
instead of the active file.
.hn 3
ZAPNOTES
.pg
Define this if you want old style notesfile id's in the body of the article
to be converted into
.hf Nf-Id
fields in the header.
.hn 3
DIGPAGE
.pg
If this is defined,
.i vnews (1)
will attempt to process the subarticles
of a digest instead of treating the article as one big file.
.hn 3
DOXREFS
.pg
Define this if you are using
.i rn (1).
.i Rn
uses this option to keep from showing the same article twice.
.hn 3
MULTICAST
.pg
If your transport mechanism supports multi-casting of messages,
define this.
Currently ACSNET is the only network that can handle this.
.hn 3
BSD4_2
.pg
Define this if you are running 4.2 or 4.3 BSD
.ux .
.hn 3
BSD4_1C
.pg
Define this if you are running 4.1C BSD
.ux .
.hn 3
SENDMAIL
.pg
Use this program instead of
.i recmail (8)
for sending mail.
.hn 3
MMDF
.pg
Use MMDF instead of
.i recmail
for sending mail.
.hn 3
MYORG
.pg
This should be set to the name of your organization.
Please keep the name short,
because it will be printed,
along with the electronic address and full name of the author of each message.
Forty characters is probably a good upper bound on the length.
If the city and state or country of your organization are not obvious,
please try to include them.
If the organization name begins with a \*(lq/\*(rq,
it will be taken as the name of a file.
The first line in that file will be used as the organization.
This permits the same binary to be used on many different machines.
A good file name would be
.i /usr/lib/news/organization .
For example,
an organization might read
.cf "AT&T Bell Labs, Murray Hill" ,
.cf "U.C. Berkeley" ,
.cf MIT ,
or
.cf "Computer Corp. of America, Cambridge, Mass" .
.pg
.hn 3
HIDDENNET
.pg
If you want all your news to look like it came from a single machine
instead of from every machine on your local network,
define
.b HIDDENNET
to be the name of the machine you wish to pretend to be.
Make sure that you have you own machine defined as
.cn ME
in the sysfile
or you may get some unnecessary article retransmission.
.hn 3
NICENESS
.pg
If
.b NICENESS
is defined,
.i rnews
does a
.i nice (2)
to priority
.b NICENESS
before processing news.
.hn 3
FASCIST
.pg
If this is defined,
.i inews
checks to see if the posting user is allowed to
post to the given newsgroup.  If the username is not in the file
.b LIBDIR \f2/authorized\fP
then the default newsgroup pattern in the symbol
.b FASCIST
is used.
.pg
The format of the file
.i authorized
is:
.br
.si 
user:allowed groups  
.ei
.pg
For example:
.si
.sd
root:net.all,mod.all
naughty_person:junk,net.politics
operator:!net.all,general,test,mod.unix
.ed
.ei
.pg
An open environment could have
.b FASCIST
set to
.ng all
and then individual entries could be made in the authorized file
to prevent certain individuals from posting to such a wide
area.
.pg
Note that a distribution of
.ng all
does
.i not
mean to allow postings
only to local groups \-
.ng all
includes
.ng all.all .  
Use
.ng all\f1,!\fPall.all
to get that behavior
.hn 3
SMALL_ADDRESS_SPACE
.pg
Define this if your machine has 16 bit (or smaller) pointers.
If you are on a
.pd ,
this is automatically defined.
.hn 2
Makefile
.pg
There are also a few parameters in the
.i Makefile
as well.
These are:
.hn 3
OSTYPE
.pg
This is the type of
.ux
system you are using.
It should be either
.b v7
or
.b USG .
Any BSD system is v7. Any System 3 or System 5 system is USG.
This is normally set by
.i localize.sh .
.hn 3
NEWSUSR
.pg
This is the owner (user name) of
.i inews .
If you are a superuser,
you should probably create a new user id (traditionally
.i news )
and use this id.
If you are not a superuser,
you can use your own user id.
If you are able to,
you should create a mail alias
.i usenet
and have mail to this alias forwarded to you.
This will make it easier for other sites to find the right person
in the presence of changing jobs and out of date or nonexistent directory pages.
.b NEWSUSR
and
.b ROOTID
do not need to represent the same user.
.hn 3
NEWSGRP
.pg
This is the group (name) to which
.i inews
belongs.
The same considerations as
.b NEWSUSR
apply.
.hn 3
SPOOLDIR
.pg
This directory contains subdirectories in which news articles will be stored.
It is normally
.i /usr/spool/news .
.pg
Briefly,
for each newsgroup (say
.ng net.general )
there will be a subdirectory
.i /usr/spool/news/net/general
containing articles,
whose file names are sequential numbers,
.i e\f1.\fPg .,
.i /usr/spool/news/net/general/1 ,
etc.
.pg
Each article file is in a mail-compatible format.
It begins with a number of header lines,
followed by a blank line,
followed by the body of the article.
The format has deliberately been chosen to be compatible
with the ARPANET standard for mail documented in RFC 822.
.pg
You should place news in an area of the disk with enough free space
to hold the news you intend to keep on line.
The total volume of news in
.ng net.all
currently runs about 1 Mbyte per day.
If you expire news after the default 2 weeks,
you will need about 14 Mbytes of disk space
(plus some extra as a safety margin and
to allow for increased traffic in the future.)
If you only receive some of the newsgroups,
or expire news after a different interval,
these figures can be adjusted accordingly.
.hn 3
BATCHDIR
.pg
This directory will contain the list of articles to send to each system.
It is normally
.i /usr/spool/batch .
.hn 3
LIBDIR
.pg
This directory will contain various system files.
It is normally
.i /usr/lib/news .
.hn 3
BINDIR
.pg
This is the directory in which
.i readnews ,
.i postnews ,
.i vnews ,
and
.i checknews (1)
are to be installed.
This is normally
.i /usr/bin .
If you decide to set
.b BINDIR
to a local binary directory,
you should consider that the
.i rnews
and
.i cunbatch
commands must be in a directory that can be found by
.i uuxqt ,
which normally only searches
.i /bin
and
.i /usr/bin .
.hn 3
UUXFLAGS
.pg
These are the flags
.i uux
will be called with.
.hn 3
LNRNEWS
.pg
This is the program used to link
.i rnews
and
.i inews .
If you have symbolic links,
you can replace the \*(lqln\*(rq with \*(lqln \-s\*(rq.
.hn 3
SCCSID
.pg
If this is defined, sccs ids will be included in each file. If you
are short on address space, don't define this.
.hn
FILES
.pg
This section lists the files in
.b LIBDIR
and comments briefly what they do.
.hn 2
active
.pg
A list of active newsgroups.
It is automatically updated as new newsgroups come in.
The order here is the order news is initially presented by
.i readnews ,
so you can edit this file to put important newsgroups first.
If you have
.b SORTACTIVE
defined,
after the first time the user invokes
.i readnews ,
it will be presented in the order of his
.i .newsrc .
Each line of the active file contains four fields,
separated by a space:
the newsgroup name,
the highest local article number
(for the most recently received article),
the lowest local article number that has not yet expired,
and a single character used to determine if the user can post to that newsgroup.
If the character is
\&\*(lqy\*(rq
the user is permitted to post articles to that group.
If the character is
\&\*(lqn\*(rq
the user is not permitted to post articles to that groups.
(This field takes the place of the
.i ngfile
in earlier versions of news.
Local article numbers begin at 1 and count sequentially
within the newsgroup as articles are received.
They do not usually correspond to local article numbers on other sites.
The article numbers are always stored as a five digit number
(with leading zeros) to allow updating of the file in place.
.pg
The active file should contain
.ng all
active net-wide active newsgroups
.ng net.all and (
.ng mod.all ).
It is important that they all be present,
as they are used as a check for valid newsgroup names
and invalid newsgroup names are removed from any articles processed by
.i inews .
You should use the
.i sys
file to keep out unwanted newsgroups.
.hn 2
aliases
.pg
This file is used to map bad newsgroup names to the correct ones.
(For example,
.ng net.unix.wizards
is mapped into
.ng net.unix-wizards ).
Each line consists of two fields separated by a space.
If the first field is found in the newsgroup list of the incoming article,
it is changed to the second field.
This change takes place in the article
before it is passed on to other systems,
not just locally.
.hn 2
batch
.pg
This program reads a list of filenames of articles
and outputs the articles themselves.
It is typically used by the shell script 
.i sendbatch .
.hn 2
c7unbatch
.pg
This is used to decompress news that has been
.b encoded
for transmission over a network that only supports 7-bit transfers (e.g X.25.)
.hn 2
caesar
.pg
This is a program to do Caesar decoding of rotated text,
on a line by line basis.
The standard input is copied to the standard output,
rotating each line according to a static single letter frequency table.
If an integer argument is given
.i e\f1.\fPg ., (
13),
every line is rotated by that argument,
without regard to letter frequencies.
This program is invoked by the
.qp D
.i readnews
command.
It is also used by
.i postnews
with the \*(lq13\*(rq argument to encode selected material for posting.
.hn 2
checkgroups
.pg
.i Checkgroups
is a shell file to aid in automatically checking
the accuracy of your active file.
It is executed by the
.b checkgroups
control message and mails a list of out of date newsgroups
to the person defined by
.b NOTIFY
It also updates the
.i newsgroups
file that is used by
.i postnews
as a helpfile for newsgroup selection.
.hn 2
compress
.pg
This program does a modified Lempel-Ziv data compression. It is used by the
compressed batching scheme.
It averages 50% compression on a typical batch of news.
.hn 2
distributions
.pg
This is a list of distributions that are valid for your site.
Each line has two fields separated by the first space on the line.
The first field is the name of the distribution
.i e\f1.\fPg ., (
.ng usa ,
.ng na ,
etc.).
The second field is text describing the distribution.
As distributed,
this file is only correct for sites in the USA.
You should examine this file and add or delete the appropriate distributions.
.hn 2
encode
.pg
This program transforms an 8-bit binary file into a file suitable for
sending over a link that only allows 7-bit characters. It is used
by
.b "sendbatch -c7."
.hn 2
errlog
.pg
This file contains the \*(lqimportant\*(rq error messages found in the log file.
These errors usually indicate that something was wrong with an article.
This file should be watched closely.
The
.i log
file contains much more verbose information
and it is often difficult to detect errors in it.
.hn 2
expire
.pg
This program expires old articles and archives them if archiving is selected.
It is typically run once a day from
.i cron (8).
.hn 2
help
.pg
This contains a list of commands printed when an illegal command is typed to
.i readnews .
.hn 2
history
.pg
A list of every article that has come in to your system.
It is used to reject articles that come in for the second time
(presumably via a different path).
This file will grow but is cleaned out by the
.i expire (8)
command.
.hn 2
history.d
.pg
On USG systems, this directory contains 10 files (history.[0-9]) which are
used as part of a simple hashing algorithm to speed up history searches.
Since V7 systems have DBM, this is not used on V7 systems.
.hn 2
history.dir,history.pag
.pg
These two files are used on V7 systems as a hashed version of
.i history ,
containing the message id's of all articles in history.
They are only used if
.b \-DDBM
and
.b \-ldbm
appear in
.i Makefile .
.hn 2
inews
.pg
This is the program that actually sends and receives news.
All other programs interface eventually with it.
It is not intended to be used directly by a human,
so it is no longer in
.i /usr/bin .
.hn 2
log
.pg
If present,
a log of articles processed and error conditions is kept here.
This file grows without limit unless cleaned out periodically.
The
.i trimlib
script in
.i misc
can be invoked from
.i cron
daily or weekly to keep the log short.
.hn 2
moderators
.pg
This file contains a list of the moderators and their mailing addresses
for each moderated newsgroup.
Each line consists of two fields.
the first is the name of the moderated group.
The second is the mailing address of the group's moderator.
As distributed,
they are almost certainly wrong.
You will need to modify the paths so they work from your site.
.hn 2
newsgroups
.pg
This file is displayed by
.i postnews
when a user hits
.qp ?
in response to its request for newsgroups.
It is also used by
.i vnews
when it displays the newsgroup name.
It is updated automatically by the
.b checkgroups
control message.
.hn 2
notify
.pg
If this file is present,
its contents will be taken as the name of the user
to notify in case of a problem.
If the file is empty,
nobody will be notified.
(This overrides the
.b NOTIFY
option in
.i defs.h ).
Having a null file is useful if one person administers several systems
and does not want multiple copies of control message notifications.
.hn 2
oactive, ohistory, ohistory.dir, ohistory.pag
.pg
These are copies of the corresponding
.i active ,
.i history ,
.i history.dir ,
and
.i history.pag
files before
.i expire
ran.
They are kept in case something happens to the originals.
.hn 2
recmail
.pg
This program can serve as a link between news and your local mailer.
If you have
.i sendmail (8),
don't use
.i recmail .
.i Sendmail
is much more useful.
.hn 2
recnews
.pg
A program which allows you to send mail to get news posted.
You usually need to run
.i sendmail
or
.i delivermail (8)
to be able to use this.
.hn 2
recording
.pg
A list of newsgroup classes and filenames to display recordings for.
The recording feature is analogous to the recordings played in some areas
when you dial directory assistance,
trying to be annoying and make you think twice.
Recordings on certain newsgroups are intended to remind the user
of the rules for the newsgroup,
or,
in the case of a company worried about letting proprietary information out,
reminding authors that anything they say is seen outside the company
and so proprietary information should not be included.
.pg
The file contains one line per recording.
The line contains two fields,
separated by a space.
The first field is the newsgroup class
.i e\f1.\fPg ., (
.ng net.all ),
the second field is the name of the file containing the recorded message.
If the file name does not begin with a slash,
it will be searched for in
.b LIBDIR .
Sample recording files can be found in the
.i misc
directory.
.hn 2
rmgroup
.pg
This shell file should be used to remove any groups that are no longer used.
.hn 2
sendbatch
.pg
This shell file is used to send batched articles to other systems.
It is typically run from
.i cron .
See the manual page for more details.
.hn 2
sendnews
.pg
A program to send news internally from one computer to another.
It is useful if you must use mail links to transmit articles.
.hn 2
seq
.pg
This file contains the current sequence number for your system.
It is used to generate unique article id's.
.hn 2
sys
.pg
This file contains a list of all your neighbors,
which newsgroups they get,
and how to send news to them.
The format is documented below.
.hn 2
unbatch
.pg
This program is used to unbatch the incoming batched news
and feed each article to
.i inews .
It's horrible and will go away in the future.
.hn 2
users
.pg
A list of users that have read news on your system.
.hn 2
uurec
.pg
A program to receive news sent by
.i sendnews (8).
.hn 2
vnews.help
.pg
This is the helpfile used by
.i vnews .
.hn 1
Setting Up Links
.pg
There are two basic types of links for exchanging news:
those that use mail and those that don't.
The ones that use mail are more indirect,
yet more versatile, while the ones that don't are simpler.
The default method does not use mail, so that is discussed first.
.hn 2
Non-mail Links
.pg
The basic theory behind a non-mail link is that the
.i rnews
program is invoked on the remote system
with the article being transmitted as the standard input.
This is possible on several networks,
but the most common implementation is via the UUCP network.
Using the
.i uux
command,
the command which is forked to the shell looks like:
.sd c
uux \- \-r \-z remotesys!rnews < article
.ed
This is the default transmission method.
In order to set up such a link,
obviously a UUCP link with the remote system must be in effect.
In addition,
.i rnews
must be available and executable by
.i uuxqt
on the remote machine.
In most cases,
this means that
.i rnews
must be in
.i /usr/bin
so
.i uux
can find it.
Also,
the list of allowed UUCP commands (in
.i /usr/src/usr.bin/uucp/uuxqt.c
or
.i /etc/uucp/L.cmds ,
depending on the version of UUCP)
should be checked to make sure
that
.i rnews
is an allowed command.
.pg
Other networks that allow remote execution include the BERKNET,
BLICN
.i usend (1)), (
many Ethernets,
and the NSC hyperchannel
.i nusend (1)). (
It is important,
however,
that a spooling mechanism be available.
Otherwise,
if system
.cn A
tries to send an article to system
.cn B
via a remote execution command,
and
.cn B
is down,
the article could be lost.
Spooling arranges that the system will try again when
.cn B
comes back up.
.hn 2
Mail Links
.pg
When using mail to transmit articles,
two intermediary programs are necessary.
These are
.i sendnews
and
.i uurec (8).
The idea is that when system
.cn A
wants to send an article to system
.cn B ,
the
.i sys
file on system
.cn A
has an entry for system
.cn B
such as:
.sd c
/usr/lib/news/sendnews \-a rnews@B
.ed
which runs
.i sendnews
on the article.
The
.op \-a
option specifies that the mail should be formatted for the ARPANET.
.i Sendnews
packages the article and mails it to
.cf rnews@B .
Somehow,
the B system is expected to make sure that all mail to user
.cf rnews
is fed as input to the program
.i uurec .
This program unpackages it and invokes
.i rnews .
.pg
The best way to get mail to
.cf rnews
fed into
.i uurec
is to use
.i sendmail
or
.i delivermail ,
if you are on a system running them.
Create an alias in
.i /etc/aliases
as follows:
.sd c
rnews: "|/usr/lib/news/uurec"
.ed
and
.i sendmail
will handle it.
If you do not have a facility for forwarding mail to a program,
you can gimmick your mailer to watch for it
(using
.i popen (3S),
this is easy)
or,
if you don't want to do any programming,
you can have
.i cron
invoke
.i uurec
every hour with
.i /usr/spool/mail/rnews
as standard input.
This solution is messier because
.i uurec
must potentially deal with multiple messages,
something that has never been tested.
.hn 1
Format of the
.bi sys
file
.pg
To set up a link to another site,
edit the
.i sys
file in
.b LIBDIR .
This file is similar to the
.i L.sys
file of UUCP.
Each line contains four fields,
separated by colons:
.lp (1)
The system name of a site to which you forward news.
Normally all systems you have links to will be
included.
You should also have a line for your own system.
If this field is
.cn ME,
it will be used as if it were your local system name.
If the system name is followed by a \*(lq/\*(rq, the article will not be
forwarded to this system if it has already passwd through any of the
(comma separated) list of sites immediately following the \*(lq/\*(rq.
For example, if the sysline was:
.sd c
yoursite/sitea,siteb,sitec:net,mod,na,usa,to.yoursite::
.ed
the incoming article would only be forwarded to
.i yoursite
if it had not already been to any of
.i sitea ,
.i siteb ,
or
.i sitec .
This is normally used to reduce the number of duplicate articles received
at a site that has multiple main newsfeeds.
.lp (2)
The newsgroups to be forwarded to them.
This is a pattern of the same kind as a subscription list.
Generally,
you will list classes of newsgroups,
that is,
using
.ng all
for everything.
A typical forwarding list for a new site would be
.sd c
net,mod,na,usa,to.\f2sysname\fP
.ed
where
.i sysname
is the name of the remote system.
(Of course, if you are not in the USA or North America,
you would remove those distributions
and replace them with the ones appropriate for you).
In particular,
you don't want to forward
.ng all
since local newsgroups
(those without dots)
should not be sent.
For the line describing your own system,
this field describes the newsgroups your site will accept from remote sites.
Thus,
if another site insists on sending you a newsgroup you don't want,
for example
.ng net.jokes ,
include
.ng !net.jokes
here.
.lp (3)
This field contains flags describing the connection.
An
.b A
will indicate that the other site is running an A version of netnews.
A
.b B
indicates a B version.
Leaving it empty defaults to
.b B .
If you are reading this document,
you have a B version.
Some existing sites run A versions.
If you aren't sure,
ask your contact at the other site,
with whom you should be talking to set this up anyway.
The
.b F
flag indicates that the fourth field is the name of a file.
The full path name of a file containing the article in
.b SPOOL
will be appended to this file.
The
.b L
flag prevents transmission unless the article was created on this site.
If a number follows the
.b L
.i e\f1.\fPg ., (
.b L3 ),
sites less than that number of hops away will be considered local.
(It is recommended that you feed an
.b L
link to a backbone site,
to ensure that your submissions will be more likely
to get to the entire network,
even in the event of a local problem.
Please make sure that a mail link exists too,
so you can get replies.)
The
.b N
flag can also be included here,
indicating that mail should
be sent using the
.pa ihave/sendme
protocol described below.
The
.b H
flag can be used to interpolate the history file into the command.
The
.b S
flags says to execute the transmission command directly
instead of forking a shell.
The
.b U
field arranges that the parameter to the optional \*(lq%s\*(rq
in the command field to be filled in with a permanent file name from
.b SPOOL
instead of a temporary customized file name.
The
.b M
flag says to use multi-casting. Multi-casting is described in an appendix.
.lp (4)
This field is the command to be run to send news to the remote site.
The article will be on the standard input.
Leaving this field blank means an ordinary UUCP link is being used,
that is,
the command defaults to
.sd c
uux \- \-r \-z sysname!rnews
.ed
The
.op \-
option tells
.i uux
to expect input from the standard input.
The
.op \-z
option is nonstandard \- you should add it
(see the
.i minus.z*
files in the uucp source directory.)
It shuts off the annoying message you would otherwise get mailed to you
telling you that your article was broadcast successfully.
To avoid using the
.op \-z
option,
change the source or put the
.i uux
command in the fourth field.
The
.op \-r
option tells
.i uux
not to call the other system once the job is queued.
This turns out to ease the load on the system,
at the expense of making news be transmitted a bit slower.
The news will be sent when the next call is made;
usually this means the next time mail is sent to or from your system.
If this turns out to be unreasonably long,
put a line in
.i crontab
to run
.sd c
/usr/sbin/uucico \-r1 \-s\f1system\fP
.ed
every hour or so.
.pg
Here is a sample
.i sys
file for a site
.cn myvax
with connections to
.cn yourvax
where
.cn myvax
also passes news on to
.cn downstream .
We assume that
.cn myvax
and
.cn downstream
exchange a local newsgroup class
.ng lng.all
as well as the network wide newsgroups.
News to
.cn downstream
is batched.
We also assume that
.cn myvax
and
.cn yourvax
are in the USA,
while
.cn downstream
is in Canada.
.sd
myvax:net,mod,na,usa,lng,to::
yourvax:net,mod,na,usa,to.yourvax::
downstream:net,mod,na,lng,to.downstream:F:/usr/spool/batch/downstream
.ed
.hn
Posting Methods
.pg
The basic method is
.i postnews .
This program will prompt you for the title,
newsgroups,
and distribution,
then place you in the editor.
(The system default
.b EDITOR
is used unless the environment variable
.b EDITOR
is set,
overriding the system default.)
The text should be typed after the blank line.
The title and newsgroups are available for editing at the top of the buffer.
Other header lines can be added,
such as an expiration date or a distribution.
When you write out the file and exit from the editor,
you will be prompted for what to do next. Your choices are:
.b w rite
the message to a file,
.b s end
the message,
.b l ist
the message or
.b e dit
it again.
.pg
Another method is to use mail.
This can only be done on systems that allow mail to a given name
to be fed into an arbitrary program as input.
This is easily done with the Berkeley
.i delivermail
or
.i sendmail
program,
and not with any other mailer the author is familiar with.
(It may be possible to painfully set this up with MMDF,
provided the newsgroup name is no more than 8 characters long.)
To use mail,
set up an alias such as the following:
.sd c
net.general: "|/usr/lib/news/recnews net.general"
.ed
Whenever a user sends mail to
.ng net.general ,
this starts up the given shell command which calls
.ng recnews
with one argument,
the name of the newsgroup.
You need to create one alias for each newsgroup,
and to keep the list up to date as new newsgroups are created.
.i Recnews (8)
will in turn invoke
.i inews .
.pg
Note that there are problems with
.i recnews .
There is no way to use it to post to multiple newsgroups
without creating separate articles
(something frowned upon because it forces people
to read the same thing more than once.)
Also,
there is no way to make the recording feature
(to remind people to not accidently divulge proprietary information)
work when recnews is used.
.hn
Various considerations
.hn 2
Setuid bits
.pg
The current intended state of affairs is that
.i inews
runs setuid to
.b NEWSUSR .
The
.i readnews
program does not need to be setuid.
This makes it possible to write your own interface to read news instead of using
.i readnews .
(As distributed,
.i inews
is also setgid.
I know of no good reason for this.)
.hn 2
Modes of Spool Directories
.pg
All the files should be writable by
.b NEWSUSR .
However,
due to a glitch,
you will probably have to make the
.b SPOOLDIR
and its subdirectories mode 777.
It could be 755 except for one problem.
When a new newsgroup comes in,
.i inews
will attempt to
.i mkdir (1)
a new subdirectory of
.b SPOOLDIR
for the newsgroup.
Since both
.i inews
and
.i mkdir
are setuid,
.i mkdir
will use the uid of the person who ran 
.i inews
instead of
.b NEWSUSR
when checking for permissions.
If the directory mode isn't 777 the check will fail.
Here are several alternatives if you don't want a 777 directory around:
.hn 3
Fix Real Uid
.pg
If
.i inews
is always run by
.i cron
or as
.i root ,
the real uid can be arranged to be
.i root
or
.b NEWSUSR .
This is a poor solution
since it makes the local creation of new newsgroups
require super user permissions,
and is a potential security hole.
If this approach is taken,
care must be taken to insure that the owner of the created directory is
.b NEWSUSR .
.hn 3
Change the Kernel
.pg
.i Inews
will do:
.b setuid(geteuid())
(see
.i setuid (2)
and
.i geteuid (2))
before it forks the
.i mkdir .
If your system permits this call,
there will be no problem.
In particular,
Berkeley 4.0
.ux
and later systems allow this.
An alternative change to the kernel is to automatically stack uids:
when a setuid program is run,
set the new real uid to the old effective uid.
.hn 3
Groups
.pg
You could have
.i inews
be setgid to
.b NEWSGRP
and all files writable by the group.
This approach has been tested and the problem turns out to be that the
.i mkdir
command uses the
.i access (2)
system call to check permissions.
Since
.i access
uses the real gid,
you run into the same problem.
.hn 3
Another
.bi Mkdir
.pg
You could create a version of
.i mkdir
that does less checking and put it in a directory that can only be accessed by
.b NEWSUSR
(mode 700,
owned by
.b NEWSUSR ).
Have
.i inews
fork this
.i mkdir .
.hn 2
Expiration dates
.pg
To get articles to expire automatically, put a line in
.i crontab
to run
.sd c
/usr/lib/news/expire
.ed
every night.
This command deletes all expired news.
The
.op \-a
.i newsgroups
option causes all expired news to be archived under
.i /usr/spool/oldnews
depending on which newsgroups are selected.
(See
.i expire (8)
for details.)
.pg
Sometimes news is not expired when it should be.
Be sure to check that
.i expire
has permissions to unlink files,
and that it is properly setuid to 
.b NEWSUSR .
You can manually invoke
.i expire
with the
.op \-v
(verbose) option to find out what it's doing.
Adding levels of verbosity
.i e\f1.\fPg ., (
.op \-v6 )
will get more and more output.
.hn 2
Version to Version
.pg
Version B will understand incoming news in either version A or B format,
automatically (presuming 
.b OLD
is defined in defs.h.)
Version B
will generate either format,
depending on the flag in the third field of the
.i sys
line.
Version A will not understand version B format.
Thus,
it is possible for two version B
sites to communicate using version A
format.
This will work but is not a good idea,
since the translation from B to A loses information
(such as the expiration date)
which will not be there when translated back to version B.
.pg
News from versions A and 2.9 B
do not conform to the USENET interchange standard.
2.10 B supports the standard and will communicate with either A or 2.9 B news.
A news is written (losing other header information) if
A is in the flags for the system.
If
.b OLD
is defined,
2.10 will write out headers with both standard
.hf Date "" (
.hf Message-ID )
and 2.9
.hf Posted "" (
.hf Article-I.D. )
lines so that either B system will properly handle the article.
Incoming news is recognized by the first letter
.qp A "" (
for A news),
or the lack of an
.cf @
in the
.hf From
line (2.9).
Missing fields are constructed as well as possible
from the available information.
.hn 2
Presentation Order
.pg
The order of the newsgroups listed in
.bi LIBDIR \f2/active\fP
is the order the newsgroups will be presented in initially.
If
.b SORTACTIVE
is defined in
.i defs.h ,
after the first time news will be presented in the order of the person's
.i .newsrc .
Initially this will be directory order,
but you can edit important newsgroups like
.ng general
to the top.
.pg
A recommended order to maintain your active file in is this:
.sd
net.announce.newusers
general
local.general
net.announce
local \fInewsgroups in alphabetical order\fP
mod.all \fInewsgroups in alphabetical order\fP
net.all \fInewsgroups in alphabetical order\fP
test
all.test
to.all
control
junk
.ed
.hn
Control Messages
.pg
Some news systems will send you articles that are not for human consumption.
They are messages to your news system called
.i "control messages" .
Such messages contain the
.hf Control
header.
Older systems use newsgroups matching
.ng all.all.ctl ,
and this will still work,
although the
.hf Control
header is preferred.
Since the newsgroup name is used for distribution only,
and is not checked to ensure it's in the active file,
such newsgroup names can still be used.
This makes it possible to post network wide control messages with
.ng net.msg.ctl
(or restricted broadcast such as
.ng btl.msg.ctl )
or messages for a particular system:
.ng to.ucbvax.ctl .
Messages are canceled,
however,
with a
.hf Control
line in a message to the same newsgroup(s)
as the original message.
.pg
A control message contains a command and zero or more arguments
(much like a
.ux
program).
The subject of the article contains the command and arguments.
The body of the article is usually ignored,
although some messages can use it for additional text information.
Control messages are not stored in
.b SPOOL ;
rather,
they are acted on and discarded at once.
.hn 2
ihave/sendme
.pg
Two control messages are
.b ihave
and
.b sendme .
These messages allow two participating sites to set up a link
so that one site will tell the other site it has a given article
and wait for a request before it actually sends it.
The normal case is to send an entire article to a system,
which consults the history file to see if the article has already been seen,
and then throws it away if it has been seen before.
.pg
Note that,
since most messages are short anyway,
experience has indicated that for ordinary UUCP unbatched communication,
all
.pa ihave/sendme
does is triple the load and slow down forwarding.
We hope future code will allow
.b ihave 's
with multiple message id's in the body,
and existing code in 2.10 understands such messages,
but does not generate them.
So we advise that you don't use
.pa ihave/sendme
for now.
.pg
Use of these control messages can cut down on this wasted transmission,
but if you have a polled UUCP connection,
they can slow down receipt of news due to polling delays.
It is up to each connected pair of sites whether they want to use this protocol.
The choice is controlled by the
.b N
flag in the
.i sys
file.
In the case of a leaf node
(one with only one neighbor)
there is no advantage to this protocol.
Even if both sites are able to initiate a connection
(have dialers or the link is hardwired)
the
.op \-r
option on the
.i uux
can cause 2 hour or more delays in propagating news.
Since this protocol can triple the number of messages generated,
you should carefully evaluate your situation when deciding whether to use it.
If transmission time and phone bills dominate your costs,
and you are sending news to several sites,
and large article bodies dominate the costs
(rather than the headers and the time spent by UUCP negotiating transmission)
it is probably worthwhile to use
.pa ihave/sendme .
If your costs are dominated by CPU load from UUCP,
or if you send news to a site that cannot get it from anywhere else,
you probably do not want to use this protocol.
The decision can be made independently for each site in your
.i sys
file.
.pg
This pair works as follows:
Site
.cn mysite
receives article
.cf <123@abc.UUCP> .
It enters it locally and then broadcasts it to its neighbors.
One of its neighbors is site
.cn yoursite
which has the
.b N
flag in the
.i sys
file.
So
.cn mysite
sends an article on newsgroup
.bi yoursite \f3.ctl\fP \f3to.\fP
with title
.cf "ihave <123@abc.UUCP> mysite" .
This control message has two arguments \-
the first
.cf <123@abc.UUCP> ) (
is the article id of the article in question,
the second
.cf mysite ) (
is the name of the site sending the article.
The name of the newsgroup and the
.i sys
file control transmission of the article.
Normally the
.i sys
file will read something like
.sd c
yoursite:net.all,fa.all,to.yoursite:BN:
.ed
which will cause an article on
.b to.yoursite.ctl
to be transmitted.
.pg
.cn Yoursite
receives the message and looks to see if it has seen it before.
If it has,
it throws the message away and stops.
If it hasn't,
it sends a message on
.bi mysite \f3.ctl\fP \f3to.\fP
with title
.cf "sendme <123@abc.UUCP> yoursite"
which is transmitted to
.cn mysite .
(The two arguments to
.i sendme
are the article id requested and the site to send it to.)
Then
.cn mysite
gets this message
and actually transmits the article to
.cn yoursite .
.hn 2
newgroup
.pg
This message has one argument,
the name of a newsgroup to be created.
This allows special action to be taken locally when a new newsgroup is created.
It is generated by the
.op \-C
option to
.i inews .
By default,
the newsgroup is added to the active file,
and mail is sent to the local contact advising that this has happened.
The directory will be created when a message for that newsgroup arrives.
See the routine \*(lqc_newgroup\*(rq in
.i control.c
if you want something different to happen.
(Note that,
although the body of the message contains a brief description
of the purpose of the group,
this body is usually thrown away by existing software.)
.hn 2
rmgroup
.pg
This message has one argument,
the name of a newsgroup to be removed.
It is used for network-wide cancellation of a newsgroup.
If
.b MANUALLY
is not defined,
it will remove the articles,
directory,
and active file line for the group.
There is a shell script
.i rmgroup
that does essentially the same thing as this message,
but the shell script only removes the group locally.
We recommend that you leave
.b MANUALLY
defined,
and when you receive mail advising you of the demise of the newsgroup,
you run
.i rmgroup
by hand.
This will prevent accidental or malicious removal of a good newsgroup.
.hn 2
cancel
.pg
This message cancels a given article.
It takes one argument,
the message id of the article to cancel.
It should be broadcast to the same newsgroup as the original article.
If the article to be canceled is not present, the control message
will not be propagated to downstream sites.
.hn 2
sendsys
.pg
The
.i sys
file is mailed to the originator of the message.
There are no arguments.
This is used for making maps.
Since your
.i sys
file is public information,
you should not remove or change this control message.
.hn 2
senduuname
.pg
The
.i uuname
program is run and the output is mailed to the originator of the message.
There are no arguments.
This is used for making UUCP maps.
If you do not run UUCP or have sites in your
.i L.sys
which are a secret,
you may wish to edit this.
Note that only the output of
.i uuname
is mailed,
not the contents of
.i L.sys
(which news does not have access to anyway).
If you do make a change,
you should arrange that some mail still is sent out
to the originator of the message, so he will know your site received it.
See the code in routine \*(lqc_senduuname\*(rq in
.i control.c .
.hn 2
version
.pg
The local version name/number of the netnews software
is mailed back to the author of the control message.
.hn 2
checkgroups
.pg
This control message is an attempt at semi-automatic maintenance
of the list of active news groups.
This control messages takes the body of the article and pipes it into
.bi LIB \f2/checkgroups\fP.
As mentioned previously,
.bi LIB \f2/checkgroups\fP
will update the newsgroups file,
add any missing newsgroups, and mail a message to
.b NOTIFY
about any old newsgroups that should be removed.
It is expected that the person who maintains the list of active newsgroups
will broadcast this control message on a regular basis.
.hn 2
Other Messages
.pg
Any unrecognized message will cause an error message to be mailed
to the local site administrator.
Additional messages may be defined as time goes on,
such as messages to automatically update directories or maps.
You should be willing to go into the code
.i control.c ) (
and add messages as they become standardized.
.hn
Maintenance
.pg
There are some things you should do periodically
to keep your news system running smoothly.
We hope to eventually automate all or most of this,
but right now some of it must be done by hand.
.pg
The
.i history
and
.i log
files in your
.b LIB
directory will grow.
You should make sure that they are cleaned up periodically.
The
.bi LIB \f2/expire\fP
program will remove lines from history corresponding to deleted articles,
but it is a good idea to check the file every few months
to make sure it is not going wild.
Be sure not to completely lose your history file when you clean it up,
in case another neighbor tries to send you an article you recently got.
(If you only get news from one site it is safe to clean it out completely.)
.pg
The log file is not automatically cleaned out by any netnews software,
and will grow quickly.
The
.i misc/trimlib
script can be installed in
.bi LIB \f2/trimlib\fP,
and invoked weekly by
.i cron .
.pg
You should also clean out old newsgroups that are no longer active.
To remove a newsgroup
.ng net.foo ,
you should run the shell script
.i rmgroup
with
.b net.foo
as the argument.
That is,
.sd c
/usr/lib/news/rmgroup net.foo
.ed
.pg
Note that clearing up UUCP constipation is another thing you'll have to do
if you have flaky hardware or phone lines.
If you have more than one connection,
chances are that UUCP will get clogged up when one of your neighbors goes down
for more than a few hours.
Various spooling schemes are being worked on
to help make the news/uucp system more robust,
but one thing you can and should do,
if you find your
.i /usr/spool/uucp
directory getting too big,
is to install a subdirectory fix to UUCP.
A quick and dirty version of this is available from Duke,
which traps the file-oriented system calls
at the assembly language level and maps,
for example,
D.fooA1234 into D.foo/D.fooA1234.
Since the C. and
.i local "" D.
directories still get big,
in practice this can still create some big directories,
but the directories tend to be a factor of 5 smaller,
resulting in a factor of 25 improvement to speed
(since a directory traversal for all files is quadratic on
.ux ).
Right now,
UUCP is the weak link in netnews distribution,
and you should certainly keep an eye on it.
.hn
Creating New Newsgroups
.pg
As system news administrator,
you are able to create newsgroups.
To create a newsgroup,
first make sure this is the right thing to do.
Normally a suggestion is first posted to
.ng net.news.group\f1,\fPnet.relatedgroup
for a net newsgroup
.b net.relatedgroup (
should be the group which you are proposing to sub-divide.
For instance,
to propose creating
.ng net.tv.soaps ,
post the original article to
.ng net.tv\f1,\fPnet.news.group ).
Followups are made to
.ng net.news.group
.i only .
(You can force this by putting the line:
.sd c
Followup-To: net.news.group
.ed
in the headers of your original posting).
If it is established that there is general interest in such a group,
and a name is agreed on,
then someone creates it by typing the command
.sd c
inews \-C \fInewsgroup\fP
.ed
This will create the active entry locally. The directory will be
created automatically when the first article for that newsgroup is
received.
It will also prompt you for a paragraph describing the group and start up an
.i inews
to post a newgroup control message announcing the group.
This control message will be sent out on
.ng net.msg.ctl
and other sites may have configured their systems to do something
with these messages.
A human readable announcement is not made \-
you can post this to
.ng net.news.group
if necessary.
.pg
You must be the super user to use the
.op \-C
option to
.i inews .
(That is,
your uid must match
.b ROOTID .
It is recommended that you change
.b ROOTID
to your own uid so you don't have to
.i su
to create newsgroups.)
.hn
Conversion from A to B
.pg
If you are currently running version A on your system,
note that B is incompatible with A.
The files are stored in a different format
(headers have mail like field names now).
The directory organization is different
(each newsgroup has a subdirectory of its own,
and the file names are numbers rather than
.i site\f1.\fPid
pairs).
There are no
.i bitmap ,
.i uindex ,
or
.i nindex
files to be trashed
(which articles have been read is stored in each users
.i .newsrc
file).
The user interface is slightly different
.i netnews (1) (news/
is now called
.i readnews ,
news is posted using
.i inews ,
subscription is done by editing
.i .newsrc ,
the sense of the
.op \-c
option is reversed,
news is presented in newsgroup order,
the
.op \-a
and
.op \-t
options now probably need
.op \-x
as well,
and there are many minor changes).
.pg
We decided not to provide a program to convert from version A to version B.
Rather,
the following strategy was adopted for conversion:
.lp (1)
Install the new news in a different spool directory from the old one.
For example,
you can use
.i /usr/spool/newnews .
You can change to the standard name later if you want.
Get it to work for local messages.
.lp (2)
Post an article to newsgroup
.b general
with the old news announcing the change.
Make available documentation such as the accompanying paper
.i "How to Read the Network News"
to the users.
This article will be the last one in the old news.
.lp (3)
.i Chmod
the old news directory to 555 to prevent any more news from being posted.
(Actually,
this will prevent the bitfile from being updated,
so it may not be a good idea.)
.lp (4)
Replace the old
.i rnews
program with the new
.i rnews
program.
.lp (5)
Test it by having your neighbor send you a message.
.lp (6)
Wait a reasonable period for everyone to have read the final article
with the old news.
Perhaps a few weeks is right.
.lp (7)
Uninstall the old news.
.pg
Users will have to invoke
.i readnews
instead of
.i netnews
to read news.
Depending on your old method of posting,
this could be changed too.
(If you were using mail,
it does not need to be changed.)
They will also have to fix their subscriptions.
In general,
they can type
.sd c
netnews \-s
.ed
to see what they subscribe to on the old system,
and then create a file in their home directory called
.i .newsrc
containing
.sd c
options \-n \f2their subscription\fP
.ed
The format of the subscription pattern matching is the same as in A
except that
.ng ALL
is replaced by
.ng all
(change to lower case).
Something along the lines of this could be used to automate this:
.sd c
(echo \-n "options \-s" ; netnews \-s | sed s/ALL/all/) > .newsrc
.ed
.hn
Conversion from 2.9 to 2.10
.pg
Conversion from 2.9 to 2.10 is not nearly as involved as an A to B conversion.
The user interface does not change much,
and the user
.i .newsrc
files are not affected.
However,
it is recommended that you do the conversion during a time
when no news is received,
so that incoming news will not get lost.
One way to ensure this is to make
.i /usr/bin/rnews
be a shell script which saves the article in
.bi $$ "" /usr/spool/innews/
.bi $$ "" (
is the process id of the particular shell and will be unique for each article).
.pg
The first step to conversion is to customize the sources.
In the past,
you had to take a fresh distribution and edit the
.i defs.h
file and
.i Makefile
to suit local preferences.
If you had many local changes,
or didn't record the local changes,
upgrading could be annoying.
2.10 provides a mechanism to automate these changes.
Create a shell script in the src directory called
.i localize.sh .
(You can use
.i localize.sample
as a template.)
This shell script should copy
.i defs.dist
to
.i defs.h ,
and copy either
.i Makefile.v7
or
.i Makefile.usg
to
.i Makefile .
It should
.i chmod
any files that need to be changed
(often
.i Makefile
and
.i defs.h )
to a writable mode.
Then it should invoke
.i ed (1)
on the files,
making any necessary local changes.
.pg
The next step is to compile the software,
with
.i make (1).
It may be necessary to update the
.i localize.sh
file until you are satisfied with the compilation.
Note that after any change to the
.i Makefile
in
.i localize.sh ,
you should run
.i localize.sh
by hand.
Otherwise,
although make will run it for you,
it will then continue to do the make with the old
.i Makefile .
.pg
When the software is compiled,
you should run the
.i cvt.active.sh
shell script,
with the
.i lib
and
.i spool
directories as parameters.
This will create a new active file in
.bi LIB \f2/active\fP.
Then run
.i cvt.links.sh
with the
.i lib
and
.i spool
directories as parameters.
Then run
.i cvt.names.sh
with the
.i lib
and
.i spool
directories as parameters.
Old news will be linked into the new hierarchy
while leaving links in the old hierarchy.
If you were using the default library and spool directories,
you would do the following:
.sd
sh cvt.active.sh /usr/lib/news /usr/spool/news
sh cvt.links.sh /usr/lib/news /usr/spool/news
sh cvt.names.sh /usr/lib/news /usr/spool/news
.ed
.pg
The next step is to back up the old binaries:
.sd
mv /usr/bin/rnews /usr/bin/ornews
\&...
.ed
and to install 2.10 with
.sd c
make install
.ed
Once it is installed,
any incoming news will be placed into the new hierarchy but not the old one.
The critical time window is between running the three shell files and
installing the new software \-
any incoming news between these two points will appear
in only the old hierarchy and be lost to the new software.
If any significant time elapses here,
you should divert
.i rnews
into a separate spool directory as described above.
.pg
It is crucial that you run
.i expire
before any new news arrives.
.i Expire
will update several key files automatically.
.pg
Finally,
test things by posting articles to
.bi neighbor "" \f3to.\fP
newsgroups and watching some incoming news,
and announce the change to your users.
.pg
When you are satisfied that the conversion was successful,
run the shell file
.i cvt.clean.sh
which will remove the old 2.9 news hierarchy.
.bp
.hu
Appendix A: Setting up a Compressed, Batched Newsfeed
.pg
First,
.b BATCH 
must have been
.i #define 'd
when you built the news system.
To check,
look in the file
.i defs.h
in the news source directory.
.b BATCH 
should be defined as a program name (by default,
.i unbatch ).
If it's undefined or commented out,
define it,
re-make the news system,
and install the new software.
.pg
You'll also need a working
.i compress
program.
Use the one shipped with this news distribution,
which is based on version 4.0.
Your news neighbors should be running a compatible version of compress.
Versions 3.0 and 4.0 are compatible with each other,
but both are incompatible with versions 2.0 and before.
.pg
Update your
.i sys
file.
First,
add the
.b F
flag to the other news system's line.
For instance,
if your compressed-and-batched news feed is named
.cn frobozz ,
and its
.i sys
file entry looks like:
.si
frobozz:net,mod,na,usa,ca,to.frobozz::
.ei
then add the
.b F
flag as the third (colon-separated) field:
.si
frobozz:net,mod,na,usa,ca,to.frobozz:F:
.ei
Now the pathnames of articles to be sent will be stashed in a file.
This file is named in the fourth field of the
.i sys
entry;
add it now.
Use an entry of the form
.bi BATCHDIR \f2/system\fP,
where
.bi BATCHDIR
is usually
.i /usr/spool/batch
(the actual value is defined in the news
.i Makefile ),
and
.i system
is the name of the remote system,
in this example
.cn frobozz .
A name of that form is necessary:
the
.i sendbatch
script,
which sends the batched news,
looks for a file name of this form
to decide if there's news for the remote system.
.pg
Your completed
.i sys
file line should look something like:
.si
.sd
frobozz:net,mod,na,usa,ca,to.frobozz:F:/usr/spool/batch/frobozz
.ed
.ei
.pg
In
.i /etc/crontab ,
find or create at least two news lines:
one that runs nightly,
and one that runs every hour or so.
The nightly-run script should run
.i expire ,
trim log files,
and perhaps compile weekly statistics
that you post to a local-area newsgroup one day a week.
The hourly-run script should complete the transmitting task
with a line like:
.sd c
sendbatch -c frobozz
.ed
Make sure the script knows how to get to the directory in which
.i sendbatch
lives.
You can either mention the directory in the script's
.b PATH -setting
line,
or replace
.i sendbatch
with its full pathname.
.i Sendbatch
reads the files mentioned in
.i /usr/spool/batch/frobozz ,
batches them,
optionally compresses them,
sends them to the remote system,
and arranges for remote processing.
.pg
This remote processing is directed by another file in
.b BATCHDIR .
Make a file with a name of the form
.bi BATCHDIR \f2/system\fP.cmd
(for this example,
.i /usr/spool/batch/frobozz.cmd ).
Put a line in it specifying the command that the remote system
should execute to unpack the news batches that your system will send.
An example
.i frobozz.cmd
would be:
.sd c
uux - -r -z -n -gd frobozz!rnews
.ed
.pg
Now your system will transmit compressed batches.
The receiving side of the business is handled largely by a program called
.i rnews ,
which will call other programs in
.b LIBDIR
to do additional processing on the incoming batches.
.pg
Make sure there is an executable file called
.i rnews
in the
.b BINDIR
directory
(check the
.i Makefile
for its actual location).
It must be reachable by UUCP
or by whatever transport you'll use to transfer the netnews.
If you defined
.b BINDIR
as
.i /usr/bin ,
you should have no problems because
.i uuxqt
can already get there.
If you defined it as a different directory,
you may have to teach
.i uuxqt
to look in that directory;
accomplishing this varies from system to system.
On 4.2BSD, add the directory to the
.b PATH=
line of your UUCP
.i L.cmds
file.
On System V,
on the
.i rnews
line of your
.i L.cmds
file,
add a comma followed by
the remote system's name on that line.
If yours is in
.i /usr/bin/news/rnews ,
your
.i L.cmds
file will look like:
.si
.sd
[For 4.2BSD]
PATH=/bin:/usr/bin:/usr/bin/news
rnews
.ed
.sd
[For System V]
/usr/bin/news/rnews,frobozz
.ed
.ei
Other systems have a similar file in the
.i /etc/uucp
directory by which you can specify added programs
and paths different from the defaults.
HP-UX,
for example,
has a
.i /etc/uucp/COMMANDS
file which expands
.i uuxqt 's
horizons.
In more restrictive cases,
paths are compiled into
.i uuxqt .
If you can't modify any UUCP files,
just put
.i rnews
in
.i /usr/bin.
.pg
You must also have a
.i cunbatch
in
.b LIBDIR
(wherever your
.i Makefile
defines it),
because
.i rnews
will eventually try to exec that copy.
.pg
Tell the person at the other end of your newsfeed to use
.i "sendbatch \-c"
to send you news.
Once that's in place,
watch your UUCP
.i LOGFILE
and your news
.i log
and
.i errlog
files to ensure that news is being correctly received and unpacked
on your system.
.pg
Older compressed batching systems will try to exec
.i cunbatch
instead of
.i rnews .
If you are still communicating with these, leave 
.i cunbatch
in 
.b BINDIR
until they have upgraded their software.
.bp
.hu
Appendix B: MULTICAST
.pg
If this is defined (in
.i defs.h )
then two new flag characters
become defined in the
.i sys
file.
The first,
and most important,
of these is the
.b M
flag.
.pg
If the
.b M
flag is set on some line in the
.i sys
file,
then the fourth field (transfer command) is redefined to become a
.i multicast
name.
That is simply another system name,
expected to be found in the first field of some line in the
.i sys
file (textually following the line containing the
.b M
flag).
.pg
When a news item is being retransmitted,
if it should (according to the subscription list) be sent to a system
that has the
.b M
flag set,
then instead of a command being run immediately to transmit the news,
the news system remembers the system name,
along with the multicast name (fourth field).
.pg
Eventually the multicast system name is found in first field of a sys file line.
If its subscription list allows transmission of this news item,
then its command will be executed.
This command may have up to two \*(lq%s\*(rq substitutions in it.
The second of those is replaced by the name of a file
containing the news item (used with the
.b U
flag).
The first is subjected to rather special treatment.
The whole \*(lqword\*(rq (delimited by white space)
containing that \*(lq%s\*(rq is duplicated as many times
as there were systems with the
.b M
flag set that referenced this multicast name
(which might be 0 times,
causing that \*(lqword\*(rq to be omitted).
In each of these duplicates,
the \*(lq%s\*(rq is replaced by the name of a system.
Note the multicast system name itself is not included in this process.
Then the command is executed as usual.
.pg
The second flag available if the news system is built with
.b MULTICAST
defined is
.b O .
If this flag is set,
then the sys file line will be ignored unless the system name is
a multicast name from some earlier line with the
.b M
flag,
and the news item is to be sent to that (earlier) system.
This allows the subscription list for the multicast system name
(which is likely to be a fake system name,
invented just for this purpose)
to be given a very wide subscription list
(like
.ng all )
without any unusual effects.
.pg
Here is an example.
Assume that you wish to forward
.ng net.unix
to four people by mail.
You could do this as ...
.si
.sd
fred:net.unix::mail fred
harry:net.unix::mail harry
jane:net.unix::mail jane
tony:net.unix::mail tony
.ed
.ei
however this causes the mail program to be started 4 times,
once for each recipient.
On some systems starting the mail program is a very expensive operation.
If
.b MULTICAST 
is defined,
an alternative method is
.si
.sd
fred:net.unix:M:tony
harry:net.unix:M:tony
jane:net.unix:M:tony
tony:net.unix::mail tony %s
.ed
.ei
This would cause just one command to be run:
\*(lqmail tony fred harry jane\*(rq.
Note that \*(lqtony\*(rq must still be explicitly included in the argument
list to the mail command;
the \*(lq%s\*(rq does not expand to include
the multicast \*(lqsystem name\*(rq itself.
.pg
A more useful way of doing this,
which does not assume that all the mail readers
will want to read the same newsgroups is as follows.
.si
.sd
fred:net.unix:M:Mail
harry:net.physics,net.astro:M:Mail
jane:net.unix-wizards,net.women:M:Mail
tony:net.unix,net.unix-wizards,net.jokes:M:Mail
Mail:all:O:mail %s
.ed
.ei
.pg
Now,
if a news item in group
.ng net.unix
was received,
the command
.sd c
mail fred tony
.ed
would be executed.
If the news were in both
.ng net.unix
and
.ng net.unix-wizards
then the command would be
.sd c
mail fred jane tony
.ed
.pg
If a newsitem in
.ng net.med
(which no-one gets by mail) arrives,
then the \*(lqMail\*(rq line will be ignored,
because of the
.b O
flag.
\*(lqMail\*(rq is a fake system invented just so its \*(lqtransfer command\*(rq
can be used to send news to the other recipients.
.pg
The same kind of technique can be used for normal transfer
of news to other systems if your transport network supports
a facility to send to many other systems in one command.
(That is,
if it has a multicast facility.)
SunIII (the network used in Australia) has this ability,
so a typical Australian
.i sys
file looks like
.sd
emuvax:aus,net,mod,fa:M:FakeName
kremlin:aus,net,mod:M:FakeName
kanga:aus,net,!net.all,net.unix:M:FakeName
FakeName:all:OUS:/bin/sendfile -NRSareporter -d%s -x%s
.ed
.pg
A news item in
.ng aus.general
causes the following command
.sd c
/bin/sendfile -NRSareporter -demuvax -dkremlin -dkanga -x/usr/spool/...
.ed
to be executed.
Just one command is run to send the news to three remote systems.
.pg
If a multicast system has the
.b F
flag set,
then the name of a file containing the news is appended to the file
whose name is in the fourth field,
as usual.
But on the same line,
separated by spaces,
will be appended the names of all the systems
that referenced this multicast system.
.pg
For example,
if the Australian site wanted to batch news,
instead of sending it directly,
it would simply change the last line of its
.i sys
file to
.sd c
FakeName:all:F:/usr/spool/batched/allsites
.ed
.pg
Then a news item in
.ng net.jobs
would cause the following line to be appended to
.i /usr/spool/batched/allsites
.sd c
/usr/spool/news/net/jobs/5542 emuvax kremlin
.ed
.pg
This can then be processed later, in something like the normal manner.
(Unfortunately no commands to do this processing are yet available).
.pg
Caution: when
.b MULTICAST
is defined,
the first \*(lq%s\*(rq in all transfer commands is used for multicast,
regardless of whether or not the system name is ever used as the last field
of some line with the
.b M
flag set.
To use the
.b U
flag in such a case,
a dummy \*(lq%s\*(rq should be used,
it will simply be omitted from the command that is executed.
.pg
As an example,
if a
.i sys
file line were
.sd c
foovax:net,na,usa:U:uux - foovax!foonews <%s
.ed
without
.b MULTICAST ,
it would need to be changed to
.sd c
foovax:net,na,usa:U:uux - foovax!foonews %s <%s
.ed
if
.b MULTICAST
were defined.
.pg
Additional caution:
The numbers of system names that may be used
in this way are quite severly restricted.
Typically there may only be about 10 multicast system names,
and each of those is restricted to sending to no more than about 20 systems.
These limits are dynamic
(that is,
the numbers counted are the number of multicast systems
receiving any single news item,
and the number of systems that each of those
will actually cause this particular news item to be sent to).
These limits should easily suffice for real news sending to remote systems;
however they are not likely to suffice if you want to mail news to everyone
on your host.
