








                  Installing InterNetNews


                         Rich $alz

                  Open Software Foundation
                    11 Cambridge Center
                    Cambridge, MA  02142

        _O_r_g_a_n_i_z_a_t_i_o_n _g_i_v_e_n _f_o_r _i_d_e_n_t_i_f_i_c_a_t_i_o_n _o_n_l_y;
    _p_l_e_a_s_e _s_e_n_d _e_l_e_c_t_r_o_n_i_c _m_a_i_l _t_o <_r_s_a_l_z@_u_u_n_e_t._u_u._n_e_t>


                          _A_B_S_T_R_A_C_T

          This document discusses how  to  install  and
     set  up InterNetNews.  You should be familiar with
     Usenet  and  networks;  the  first  section  gives
     references  to documentation for these topics, and
     the last appendix  gives  a  Usenet  overview  for
     novices.

          This document also describes what many of the
     programs  do and how they should be used.  Even if
     you are a world-class expert at building and main-
     taining  public software, you should probably read
     this.

          This is revision 1.13, dated 1993/03/19.



_1.  _T_h_i_n_g_s _Y_o_u _S_h_o_u_l_d _K_n_o_w _B_e_f_o_r_e _Y_o_u _D_o _A_n_y_t_h_i_n_g

     InterNetNews is abbreviated _I_N_N, which is pronounced as
the  three letters, _e_y_e _e_n _e_n.  It is a Usenet transport and
expiration system for larger UNIX|-  systems  where  NNTP  is
used for most Usenet traffic.

     This document is not a tutorial on Usenet.  If  you  do
not  have much Usenet experience, you should read _U_s_i_n_g _U_U_C_P
_a_n_d _U_s_e_n_e_t, ISBN 0-937175-10-2.  You might also find it use-
ful  to  read  _M_a_n_a_g_i_n_g _U_U_C_P _a_n_d _U_s_e_n_e_t (get the most recent
edition available), ISBN 0-937175-48-X.  Both books are pub-
lished  by  O'Reilly  &  Associates;  send  inquiries  to to
<nuts@ora.com>.

_________________________
|- UNIX is a registered trademark of  Unix  Systems  La-
boratories.




                    February 14, 1992





                           - 2 -


     You should know BSD-derived TCP/IP - at least  be  com-
fortable  with host names and dotted-quad addresses.  If you
have installation problems,  you  should  know  about  UNIX-
domain  stream  and datagram sockets and the like.  In addi-
tion to any documentation available from  your  vendor,  you
might  find  it useful to read the two IPC tutorials in _U_N_I_X
_P_r_o_g_r_a_m_m_e_r'_s _M_a_n_u_a_l:  _S_u_p_p_l_e_m_e_n_t_a_r_y _D_o_c_u_m_e_n_t_s _1.  Copies can
be  purchased from the Usenix Association; send inquiries to
<office@usenix.org>.

     There are two RFCs that are important to  InterNetNews.
RFC  1036  describes  the  format of Usenet articles.  It is
incomplete and has some errors, but it is  the  only  formal
document  available.  RFC 977 defines NNTP, the Network News
Transfer Protocol.  RFCs are available from several  places,
including  anonymous  FTP to nnsc.nsf.net, where they can be
found in the directory _r_f_c.  Both RFCs are  currently  being
revised.   The  1036  revision  is most likely going to be a
``tightening-up''; since INN already has a strict  interpre-
tation  of  the  RFC, this revision will probably not affect
InterNetNews very much.  The  977  revision  is  adding  new
features  and facilities, and while INN will not provide all
of them, they will have some impact.

     InterNetNews does things differently  from  other  news
software.  The most common Usenet systems for UNIX are B2.11
and C News.  Both of them require a separate NNTP  implemen-
tation.   The  one everyone uses is called ``NNTP.'' Because
this is confusing (they don't  call  _s_e_n_d_m_a_i_l  ``SMTP''),  I
will  refer  to  it as the ``reference implementation.'' You
generally do not need to know  anything  about  these  other
systems,  but  if you are curious, the official sites are as
follows:

        Package      Host                  Directory
        C News       ftp.cs.toronto.edu    pub/c-news
        B2.11        ftp.uu.net            news/bnews-2.11
        nntp         lib.tmc.edu           public

You might  find  the  files  _d_o_c/_b_i_b_l_i_o,  _d_o_c/_p_r_o_b_l_e_m_s,  and
_d_o_c/_r_f_c_e_r_r_a_t_a in the C News distribution worthwhile reading.
The first is a bibliography, the second  discusses  known  C
News  porting  problems (see the DBZ sections in particular,
and ignore most of the  shell  comments),  while  the  third
lists some technical and philosophical errors in RFC 1036.

     The commands below assume that $_i_n_n is an  abbreviation
for the top of the InterNetNews source tree.

     INN could not have been written without access  to  the
freely-redistributable  sources  of B2.11, C News, and NNTP.
In particular, I want to thank Rick Adams; Geoff Collyer and
Henry Spencer; and Stan Barber, Erik Fair, Brian Kantor, and
Phil Lapsley.  The financial support of  UUNET  Technologies



                    February 14, 1992





                           - 3 -


is  also  greatly  appreciated.   The  beta-test  sites gave
invaluable feedback.

_2.  _I_f _Y_o_u _A_r_e _I_m_p_a_t_i_e_n_t

     If you don't want to follow these  directions,  do  the
following:

        cd $inn/config
        cp config.dist config.data
        chmod 644 config.data
        vi config.data (or emacs, or whatever)
        cd ..
        make world install

Then go read the appendixes.  If you have any problems, read
the rest of this document.

_3.  _D_i_s_t_r_i_b_u_t_i_o_n _R_o_a_d_m_a_p

     The INN sources are divided into the  following  direc-
tories:

_f_r_o_n_t_e_n_d_s      Programs to  feed  articles  to  the  central
               server and control it.

_i_n_n_d           The central NNTP server.  It accepts incoming
               connections,  receives articles, and arranges
               for them to be sent to downstream newsfeeds.

_b_a_c_k_e_n_d_s       Programs to transmit articles to other sites.

_e_x_p_i_r_e         Programs to purge the article files and  his-
               tory database.

_n_n_r_p_d          An NNTP server for on-campus clients that  do
               newsreading   (as  opposed  to  bulk  article
               transfer).

_l_i_b            Library routines used by all the above.

_i_n_c_l_u_d_e        Header files used by all the above.

     The distribution also includes these directories:

_s_a_m_p_l_e_s        Prototype  scripts  and  configuration  files
               that  might have to be edited before they are
               installed.

_s_i_t_e           A place to store edited copies of  the  files
               in the _s_a_m_p_l_e_s directory.

_d_o_c            Manual pages for all the above.




                    February 14, 1992





                           - 4 -


_c_o_n_f_i_g         Tools to configure the release for your site.

     Finally, there are a handful of files in the  top-level
directory:

_R_E_A_D_M_E         A basic introduction.

_C_O_P_Y_R_I_G_H_T      The distribution copyright.  InterNetNews  is
               freely   redistributable,   provided   proper
               credit is given.

_M_A_N_I_F_E_S_T       A one-line description of every file  in  the
               distribution.

_B_U_I_L_D          An interactive script  to  configure,  build,
               and install INN.

_m_a_k_e_d_i_r_s._s_h    A script to build INN's directories.  As long
               as  you  have write permission to install the
               programs,  this  is  the  only  part  of  the
               installation that needs to be done as root.

_M_a_k_e_f_i_l_e       Rules to call the other  Makefiles  and  make
               distributions.

_I_n_s_t_a_l_l._m_s     This  document.   It  requires  the   ``-ms''
               nroff/troff macro package.

_M_a_k_e_L_i_b        Script to build a directory with  a  replace-
               ment   of   the   reference  implementation's
               ``clientlib'' routines needed by remote _r_n.

_M_a_k_e_I_n_e_w_s      Script to build an _i_n_e_w_s distribution  direc-
               tory.

_M_a_k_e_R_n_e_w_s      Script to build an _r_n_e_w_s distribution  direc-
               tory.

_s_e_d_f._x_x_x       Various _s_e_d scripts to filter the  output  of
               _l_i_n_t.

_4.  _B_u_i_l_d_i_n_g _t_h_e _S_y_s_t_e_m

     INN is built in steps.  First,  the  _s_u_b_s_t  program  is
built.   Next,  a  configuration  file  containing key/value
pairs is created.  _S_u_b_s_t reads this file and uses it to edit
a  specific  set of files in the INN distribution.  (Most of
the files that get modified are Makefiles or header  files.)
The library is then built; _l_i_n_t is usually a good way to see
if some of the basic configuration  parameters  are  set  up
right.   The next step is to compile (and lint) all the pro-
grams.  The programs are then installed, and  the  INN  data
files are set up.




                    February 14, 1992





                           - 5 -


     The configuration process is deliberately not  interac-
tive.   Configure  scripts  like  the  one  in _r_n are fun to
watch, but they spend too much effort on the wrong job, like
whether  _g_r_e_p  returns an exit status.  It is also difficult
to change one parameter and rebuild the software.   (C  News
has this same problem.)

     INN's method also has its flaws.   Because  almost  all
configuration  data  is  in one header file, changing almost
anything will force everything to be recompiled.

_4._1.  _B_u_i_l_d_i_n_g _s_u_b_s_t

     INN uses the C News _s_u_b_s_t program to automate the  con-
figuration.   _S_u_b_s_t is a very clever way of safely editing a
file under the control of a configuration  file.   For  more
details,  see  the  documentation in _d_o_c/_s_u_b_s_t._1.  Thanks to
Henry Spencer and Geoff Collyer for their permission to  use
and redistribute _s_u_b_s_t.

     We will use _c_o_n_f_i_g._d_i_s_t as the  configuration  file  to
test  the  version of _s_u_b_s_t that you build.  (You can always
replace your config file with the distribution file  and  do
another _m_a_k_e to restore the original versions.)

     The C News _s_u_b_s_t program is a shell  script  that  uses
_s_e_d  to  do  the editing.  The INN configuration file is too
large for some versions of _s_e_d.  The first step is to see if
your _s_e_d will work.  To do this, type the following:

        cd $inn/config
        cp config.dist config.data
        make sedtest

If you get any error messages from _s_e_d such  as  ``too  much
command  text''  (or if it dumps core) you have two choices.
(You should also complain to your vendor.) One choice is  to
use  another  version of _s_e_d, such as the one distributed by
the  Free  Software  Foundation.   If  you  do  this,   edit
_c_o_n_f_i_g/_M_a_k_e_f_i_l_e  and  change  the  line that defines the SED
variable.  If you want to use the C News script, then do the
following:

        cd $inn/config
        make sh


     The other choice is to use the C version of _s_u_b_s_t.  You
might  want  to do this anyway, since it can be much faster.
To do this, type the following:

        cd $inn/config
        cp config.dist config.data
        make c quiet



                    February 14, 1992





                           - 6 -


If you get any compilation errors, you will have to edit the
file  _c_o_n_f_i_g/_s_u_b_s_t._c.   If you are using an early version of
AFS, you will have edit the file to  enable  the  USE_RENAME
macro.  If you have to make any other changes, please let me
know.

     Since _s_u_b_s_t changes source files,  you  might  want  to
make  a  backup copy of all the files that will be modified.
You can do this by typing  ``make  backup''  in  the  _c_o_n_f_i_g
directory.   This will create a local tar file that contains
all the files that will be modified into it.   Doing  ``make
restore'' will unpacks the tar file.  (Since _s_u_b_s_t makes its
changes safely, this step is optional.)

_4._2.  _E_d_i_t_i_n_g _c_o_n_f_i_g._d_a_t_a

     Once you have _s_u_b_s_t working, the next step is to set up
your  configuration parameters.  This is the hardest part of
installing INN.  _D_o_n'_t _p_a_n_i_c!  There are many  configuration
parameters,  but it should be very easy for you to determine
the answer for most of them.  To do this,  you  should  copy
_c_o_n_f_i_g/_c_o_n_f_i_g._d_i_s_t,     the    distribution    master,    to
_c_o_n_f_i_g/_c_o_n_f_i_g._d_a_t_a, your local copy.  INN is distributed  to
compile and run under SunOS4.1 (without using <unistd.h> and
other POSIX facilities) by default.

     The configuration file is divided  into  the  following
sections:

        Make config parameters
        Logging levels
        Ownerships and file modes
        C library differences
        C library omissions
        Miscellaneous config data
        Paths to common programs
        Paths related to the spool directory
        Execution paths for innd and rnews
        Sockets created by innd or clients
        Log and config files
        Innwatch configuration

You should have a copy of _c_o_n_f_i_g._d_a_t_a nearby as you read the
next few sections.  It is probably a good idea to write down
your changes on paper before you edit the file.

     The format of the file is very strict.  A line starting
with a poundsign is a comment line.  All other lines must be
in this format:

        parameter <_o_n_e-_o_r-_m_o_r_e-_t_a_b_s> value

If there is no ``value'' the ``<one-or-more-tabs>'' is still
required.  Do not put quote marks around the values - if you



                    February 14, 1992





                           - 7 -


do, you will usually get a syntax error while compiling  the
system.  The discussion below uses quotes only to show where
the values start and end.

_4._2._1.  _M_a_k_e _c_o_n_f_i_g _p_a_r_a_m_e_t_e_r_s

     This section is used primarily to identify the path  to
your  C  compiler,  and what extra libraries or command-line
switches are needed.  For example, you could put  _g_c_c  -_W_a_l_l
on  the _C_C line.  If you need extra -_I flags put them on the
_D_E_F_S line.  INN uses the _r_e_g_i_s_t_e_r declaration a great  deal.
If  your  compiler is very good, you might want to add -_D_r_e_-
_g_i_s_t_e_r= to the _D_E_F_S line  so  that  INN's  declarations  are
ignored.

     The DBZ package can be compiled so that the database is
memory-mapped.   If  you  want  to do this and have the _m_m_a_p
system call, then add ``-DMMAP'' to the _D_B_Z_C_F_L_A_G_S parameter.

     If you need to link in other  libraries  (e.g.,  -_l_n_e_t)
put them on the _L_I_B_S line.

     The Makefiles usually filter all _l_i_n_t output through  a
_s_e_d  script.   If  you  are very paranoid, set _L_I_N_T_F_I_L_T_E_R to
_c_a_t.  If your lint output is in the broken  multi-line  for-
mat:

        value type declared inconsistently
            exit        llib-lc(297) :: test.c(7)
        function returns value which is always ignored
            printf

Then set _L_I_N_T_F_I_L_T_E_R to be the ``sedf.sysv'' line.

     The _l_i_b directory also builds a _l_i_n_t library,  so  that
you  can make sure the other programs are properly using the
library  routines.   The  _L_I_N_T_L_I_B_S_T_Y_L_E  parameter  (used  in
_l_i_b/_M_a_k_e_f_i_l_e  and  _l_i_b/_m_a_k_e_l_l_i_b._s_h)  controls  how  the _l_i_n_t
library is built.  If your _l_i_n_t understands the ``-C'' flag,
then  set  it  to  ``BSD''.   If you need the ``-o'' flag to
build a library, then set it to  ``SYSV''.   If  neither  of
these  work,  you  can  set  it  to ``NONE''; this will just
create an empty file  so  that  the  other  Makefiles  don't
break.   If  you  come  up with a fourth alternative, let me
know.

     Unfortunately, on some systems _l_i_n_t is all but useless,
so  complain to your vendor and take the output with a grain
of   salt.    You   might   get    some    warnings    about
``struct _DDHANDLE''  being  undefined.  You can ignore them
and ask your vendor to support the BSD ``-z'' lint flag.  If
you  set  _H_A_V_E__U_N_I_S_T_D  to ``DO'' then you might get warnings
about prototype mismatches for various functions declared in
_i_n_c_l_u_d_e/_c_l_i_b_r_a_r_y._h.  You can ignore them or remove the lines



                    February 14, 1992





                           - 8 -


from the INN header file.

     The _M_A_N_P_A_G_E_S_T_Y_L_E parameter (used  in  _d_o_c/_M_a_k_e_f_i_l_e  and
_d_o_c/_p_u_t_m_a_n._s_h)  controls how manual pages are installed into
your public directory while the _M_A_N_x parameters specify  the
directories where they get installed.  If you do not want to
install any manpages, set _M_A_N_P_A_G_E_S_T_Y_L_E to _N_O_N_E.

_4._2._2.  _L_o_g_g_i_n_g _l_e_v_e_l_s

     INN uses the modern _s_y_s_l_o_g that separates messages into
both  levels and categories.  Look in your <_s_y_s_l_o_g._h> header
file for a ``LOG_NEWS'' macro, and check your _s_y_s_l_o_g(3) man-
page to make sure that _o_p_e_n_l_o_g takes three arguments.  If it
doesn't, then you will have to use the library  routine  and
server  provided in the _s_y_s_l_o_g directory.  This is described
later.

     The different levels that are  described  in  the  _s_y_s_-
_l_o_g(3)  manpage are confusing, so INN uses its own names for
the four levels it uses:

        L_FATAL   Fatal error, about to exit
        L_ERROR   Error that might require attention
        L_NOTICE  Informational notice, no action needed
        L_DEBUG   Protocol tracing or other debugging messages

Depending on how your _s_y_s_l_o_g._c_o_n_f(5) file  is  set  up,  you
might want to change the _L__x_x_x parameters in this section.

     The  _s_c_a_n_l_o_g_s  script  assumes  that  the  first  three
categories above are each directed into separate files.  See
_d_o_c/_n_e_w_s_l_o_g._5,  _d_o_c/_n_e_w_s_l_o_g._8,  and  _s_y_s_l_o_g/_s_y_s_l_o_g._c_o_n_f  for
details.  Logging is also described in more detail later.

_4._2._3.  _O_w_n_e_r_s_h_i_p_s _a_n_d _f_i_l_e _m_o_d_e_s

     The NNTP server needs to open the NNTP port; it is port
number  119,  which  requires root access.  This is the only
part of INN that needs this privilege:  all  other  programs
can  run  under  the distinct user and group id specified by
the _N_E_W_S_U_S_E_R and _N_E_W_S_G_R_O_U_P parameters.  Most  news  adminis-
tration  tasks must be done as user _N_E_W_S_U_S_E_R (see the expla-
nation of _c_t_l_i_n_n_d below).  In addition, _i_n_e_w_s will only  let
the  _N_E_W_S_U_S_E_R  user  or  members of the _N_E_W_S_G_R_O_U_P group post
control messages other than cancel.

     Some INN scripts (primarily the control message scripts
and  the daily maintenance script) need to send email to the
news maintainer.  The  _N_E_W_S_M_A_S_T_E_R  parameter  specifies  the
right  address.   This  is  most often the login name of the
account which has _N_E_W_S_U_S_E_R as its user id; use an  alias  to
forward it to the right people.




                    February 14, 1992





                           - 9 -


     Some Usenet sites still use the  Path  header  line  to
generate  their  email  reply  messages.  Using the Path has
never been guaranteed to work, and INN tries  to  help  stop
this  practice by refusing to generate valid Path addresses.
The _P_A_T_H_M_A_S_T_E_R parameter specifies what _i_n_e_w_s should put  at
the  tail  end of the Path line.  If your _N_E_W_S_M_A_S_T_E_R mailbox
is getting cluttered, then you might want to change this  to
be  an  alias  that rejects the message or drops it into the
bit-bucket.  The default  value  is  ``not-for-mail''  which
usually results in bounced email.

     The _x_x_x__M_O_D_E parameters  specify  the  permissions  for
articles  and directories created within the spool area, and
the active file, all of which are owned by user id _N_E_W_S_U_S_E_R.

_4._2._4.  _C _l_i_b_r_a_r_y _d_i_f_f_e_r_e_n_c_e_s

     Editing the parameters in this section will require you
to look around at the files in your /_u_s_r/_i_n_c_l_u_d_e directory.

     The _S_I_Z_E__T parameter is the datatype  of  the  ``size''
parameters  in  subroutine calls like _m_e_m_c_h_r and _f_r_e_a_d.  The
_L_O_C_K__S_T_Y_L_E parameter specifies how  file-locking  should  be
done.   _I_n_n_x_m_i_t is the only program that locks files; if you
use the provided scripts, this isn't even necessary, so  you
can set this to ``NONE'' if you have any compile problems.

     The _D_I_R__S_T_Y_L_E parameter specifies what is  returned  by
your   _r_e_a_d_d_i_r(3)   routine.    This   will   be   either  a
``struct direct'' or a ``struct dirent''; set the  parameter
to ``DIRECT'' or ``DIRENT'' as appropriate.

     If  you  do   not   have   UNIX-domain   sockets,   set
_H_A_V_E__U_N_I_X__D_O_M_A_I_N to ``DONT.'' This means that INN will use a
named pipe for the communication between _i_n_n_d  and  _c_t_l_i_n_n_d.
It  also  means that there will be no local ``private'' port
for _r_n_e_w_s to  use;  this  should  not  cause  any  problems,
although it makes it easier for anyone to use _r_n_e_w_s and post
fake news articles.  (You might also have to modify the _s_y_s_-
_l_o_g  routines;  see  the  end  of the file _s_y_s_l_o_g/_R_E_A_D_M_E for
details on this.)

     INN needs to know how many descriptors are available to
use  for  files  and sockets.  There are several ways to get
this number; the  _F_D_C_O_U_N_T__S_T_Y_L_E  parameter  specifies  which
method  to  use.  On most systems, the _g_e_t_d_t_a_b_l_e_s_i_z_e routine
will do this, so leave the default of ``GETDTAB.'' On  other
systems  you  need  to  use the _g_e_t_r_l_i_m_i_t, _s_y_s_c_o_n_f or _u_l_i_m_i_t
routine, so set the parameter to ``GETRLIMIT'', ``SYSCONF'',
or  ``ULIMIT'',  respectively.   If  you  do not have any of
those calls then set the parameter to ``CONSTANT'' and  edit
the  file  _l_i_b/_g_e_t_d_t_a_b._c to return the right number.  To get
this number, look for an _O_P_E_N__M_A_X constant  in  your  system
header  files,  or  write  a  program  that repeatedly opens



                    February 14, 1992





                           - 10 -


/_d_e_v/_n_u_l_l until it gets an error.

     The last few parameters in this  section,  _x_x_x_V_A_L,  are
used  primarily  to  keep  _l_i_n_t  quiet.  These functions are
declared in _i_n_c_l_u_d_e/_c_l_i_b_r_a_r_y._h, and the  return  values  are
pretty  much always ignored.  You can usually determine what
these values should be by examining your  manpages  or  your
_l_i_n_t libraries.

_4._2._5.  _C _l_i_b_r_a_r_y _o_m_i_s_s_i_o_n_s

     INN uses library routines that might not be present  in
all  UNIX  systems, although they should be.  The _l_i_b direc-
tory provides versions of some of these routines,  including
copies  of  the  freely-redistributable BSD string routines.
The _M_I_S_S_I_N_G__S_R_C and _M_I_S_S_I_N_G__M_A_N parameters  can  be  set  to
list  those  routines  that are missing from your C library.
If you don't have _s_t_r_c_a_s_e_c_m_p and _s_t_r_n_c_a_s_e_c_m_p then  you  will
need the _s_t_r_c_a_s_e_c_m_p module built into your INN library.  Add
the ``.c'' and ``.o'' names to _M_I_S_S_I_N_G__S_R_C and  _M_I_S_S_I_N_G__O_B_J,
respectively.

     The following routines are all found in the file of the
same  name.   If they are missing from your system, add them
the same way:

        memchr         strchr         getopt
        memcmp         strrchr        mkfifo
        memcpy         strspn         strerror
        memset         strtok


     If you are using version 1 of the GNU C compiler  on  a
Sparc  running  SunOS, you should add _i_n_e_t__n_t_o_a as a missing
function.  This is because the first version of  _g_c_c  didn't
properly pass structures into routines compiled with the Sun
C compiler.

     If you have an older version of _s_y_s_l_o_g add _s_y_s_l_o_g._c and
_s_y_s_l_o_g._o to the appropriate parameters.

     Pyramid  machines  running  OSx  have  fast   assembly-
language versions of the string routines in the ATT library.
To  use  these  routines,  add   ``$(OSXATTOBJ)''   to   the
_M_I_S_S_I_N_G__O_B_J_S  parameter.   This  will  cause _l_i_b/_M_a_k_e_f_i_l_e to
extract the object files from the ATT library, and add  them
to the INN library.

_4._2._6.  _M_i_s_c_e_l_l_a_n_e_o_u_s _c_o_n_f_i_g _d_a_t_a

     All the parameters in this section become macros in the
file _i_n_c_l_u_d_e/_c_o_n_f_i_g_d_a_t_a._h.  You should at least look through
the parameters up to _V_E_R_I_F_Y__C_A_N_C_E_L_S.   (If  set  to  ``DO'',
then  _i_n_n_d  will  ignore  cancel messages unless the From or



                    February 14, 1992





                           - 11 -


Sender header match those of the original poster.)  In  gen-
eral,  however, you can leave this section pretty much alone
until you have some experience running  INN.   Nevertheless,
here  are  some  comments on some of the more useful parame-
ters.

     _I_n_n_d  can  memory-map  the  _a_c_t_i_v_e  file  if  you   set
_A_C_T__S_T_Y_L_E  to  ``MMAP''.   On  some systems, however, when a
mapped file is updated its mtime is not updated.  Apparently
some versions of System V Release 4 have this problem.  This
causes problems for programs like _n_n_m_a_s_t_e_r which look at the
_s_t__m_t_i_m_e  field  of the _s_t_a_t structure in order to determine
if any new news has come in.  (_N_n_m_a_s_t_e_r is part  of  the  _n_n
newsreading  program.)  The  best work-around is probably an
hourly _c_r_o_n job that touches the _a_c_t_i_v_e file.

     There are a  number  of  parameters  that  control  the
behavior of _r_n_e_w_s.  If you set _R_N_E_W_S__S_A_V_E__B_A_D to ``DO'' then
articles that _i_n_n_d rejects for reasons like bad headers will
be  saved  in  the __P_A_T_H__B_A_D_N_E_W_S directory; you will have to
periodically scan this directory and clean it up.   You  can
also  control  how _r_n_e_w_s logs duplicates (those aren't saved
regardless of the value  of  _R_N_E_W_S__S_A_V_E__B_A_D),  logging  them
through  _s_y_s_l_o_g,  to  a  file, or not.  Note that if you set
_R_N_E_W_S__L_O_G__D_U_P_S to ``FILE'', then you  will  want  to  change
__P_A_T_H__R_N_E_W_S__D_U_P__L_O_G,  which  appears  later in the file.  If
you receive news from several UUCP feeds, you might want  to
log  duplicates so that you can cut down your phone bills by
optimizing  your  feeds.   The  _R_N_E_W_S_P_R_O_G_S  parameter   says
whether or not to look in __P_A_T_H__N_E_W_S_P_R_O_G_S for commands named
on the incoming ``#!'' line of news batches.   You  probably
want  to  set this to ``DO''.  Make sure that the full path-
name of _r_n_e_w_s,  __P_A_T_H__R_N_E_W_S,  does  not  conflict  with  the
directory where your unpackers are put, __P_A_T_H__N_E_W_S_P_R_O_G_S.

     If _I_P_A_D_D_R__L_O_G is set to ``DO'' then the news  log  will
report  the  IP  address of hosts that send articles, rather
then what they put in the Path line.  This can be useful  if
you  run  _i_n_n_d  with  the ``-a'' flag.  (If you do this, you
might want to pick up  ``hf.tar.Z''  via  anonymous  FTP  to
ee.lbl.gov; it is a filter that turns IP addresses into host
names.)

     The  _x_x_x__T_I_M_E_O_U_T  parameters  control  various   timers
within INN; you might want to change some of these depending
on your system load.

_4._2._7.  _P_a_t_h_s _t_o _c_o_m_m_o_n _p_r_o_g_r_a_m_s

     INN uses a few standard programs like /_b_i_n/_s_h and _s_e_n_d_-
_m_a_i_l.   If you don't have _s_e_n_d_m_a_i_l then you must have a pro-
gram that accepts a full message - including  headers  -  on
its standard input, and delivers it.  This program is speci-
fied  by  the  __P_A_T_H__S_E_N_D_M_A_I_L  parameter,  and  is  normally



                    February 14, 1992





                           - 12 -


``/usr/lib/sendmail -t''.    The  parameter  is  actually  a
_s_p_r_i_n_t_f format string that will  be  given  the  destination
address  as  its  only argument.  on some sites (e.g., those
running MMDF) the ``-t'' could be replaced with a ``%s''.

     INN puts most  of  its  executables  in  the  directory
specified  by  the  __P_A_T_H__N_E_W_S_B_I_N  parameter.  Some programs
expect _i_n_e_w_s and _r_n_e_w_s to be in certain places; for example,
UUCP usually wants _r_n_e_w_s in /_b_i_n.  The default configuration
puts these programs in only one spot; if you  need  to  have
multiple  links  to  the  same  file, you will have to do it
yourself after INN is installed.   If  you  have  additional
scripts  and  programs that you use to maintain your system,
you can put them in whatever directory you want.   You  will
probably  need  to add __P_A_T_H__N_E_W_S_B_I_N to the PATH of any such
scripts.

     If you have an /_e_t_c/_r_c._l_o_c_a_l file you should make  sure
that  it  invokes  the  script  named  by the __P_A_T_H__N_E_W_S_B_O_O_T
parameter.  On other systems (mostly System V  derivatives),
the system boot procedure automatically runs all the scripts
in a particular directory, such  as  /_e_t_c/_i_n_i_t._2.   In  that
case,  you  should  pick a name like /_e_t_c/_i_n_i_t._2/_S_9_9_n_e_w_s and
have the news boot script installed there, or install it  in
the default /_e_t_c/_r_c._n_e_w_s and make the link yourself.

     The daily maintenance script, _n_e_w_s._d_a_i_l_y calls _s_c_a_n_l_o_g_s
to  rotate  and  trim  log files, as well as generating sum-
maries using _e_g_r_e_p and _a_w_k.  On some systems the  log  files
are too big for these programs so you might have to complain
to your vendor  and  install  the  versions  from  the  Free
Software  Foundation.   The _s_c_a_n_l_o_g_s script has a short test
you can run to see if your _e_g_r_e_p will work.

_4._2._8.  _P_a_t_h_s _r_e_l_a_t_e_d _t_o _t_h_e _s_p_o_o_l _d_i_r_e_c_t_o_r_y

     By default, all news articles are stored in directories
under  /_u_s_r/_s_p_o_o_l/_n_e_w_s.   Be careful if you pick a different
value - many newsreaders know about this directory name.

     INN uses a trick (which I first saw  in  C  News)  that
lets  it  use this same directory to store its incoming news
(spooled by _r_n_e_w_s when _i_n_n_d is not available), and its  out-
going  batch  files.  Since no newsgroup can ever have a dot
in its name, a directory like _o_u_t._g_o_i_n_g can never be a news-
group  name,  and  it  is safe to put the news batchfiles in
there.  This is used by the __P_A_T_H__S_P_O_O_L_N_E_W_S  parameter,  and
the __P_A_T_H__B_A_T_C_H_D_I_R parameter.

     Do not make __P_A_T_H__L_O_C_K_S be in the  same  filesystem  as
__P_A_T_H__S_P_O_O_L_N_E_W_S.   If you do this, then INN will not be able
to create any lock files when your spool directory is  full.
This  will probably mean that _n_e_w_s._d_a_i_l_y will not be able to
run and that it won't call _e_x_p_i_r_e to  free  up  disk  space.



                    February 14, 1992





                           - 13 -


You should also put __P_A_T_H__N_E_W_S_L_I_B on a separate partition if
you can, but that is not as important because  it  tends  to
fill up less often.

     If you change parameters in this section a great  deal,
then there is a chance that the _m_a_k_e_d_i_r_s._s_h script will fail
because some needed intermediate directories will not exist.
This  should  not  be  a problem, as you can just create the
directories yourself - make sure to set  the  ownership  and
modes right - and re-run the script.

_4._2._9.  _E_x_e_c_u_t_i_o_n _p_a_t_h_s _f_o_r _i_n_n_d _a_n_d _r_n_e_w_s

     All control messages (other then ``cancel'')  are  car-
ried out by scripts.  Your system must be able to _e_x_e_c shell
scripts directly.  All  the  scripts  distributed  with  INN
start with ``#! /bin/sh.''

     The __P_A_T_H__C_O_N_T_R_O_L_P_R_O_G_S parameter specifies  the  direc-
tory where these scripts exist.  Do not set this to a public
directory like /_b_i_n because some  bozo  might  send  out  an
``rm'' control message.

     The __P_A_T_H__R_N_E_W_S_P_R_O_G_S directory serves the same  purpose
for  _r_n_e_w_s  when it needs to unpack batches.  The _R_N_E_W_S_P_R_O_G_S
parameter specifies if the directory is really used.

_4._2._1_0.  _S_o_c_k_e_t_s _c_r_e_a_t_e_d _b_y _i_n_n_d _o_r _c_l_i_e_n_t_s

     The _i_n_n_d server and its clients (most notably  _c_t_l_i_n_n_d)
create UNIX-domain sockets or named pipes.  They are created
inside a ``firewall'' directory that gives access permission
to  a  limited set of users.  For example, assume the direc-
tory is /_u_s_r/_l_o_c_a_l/_n_e_w_s/_i_n_n_d and that it is  owned  by  user
news  in  group news and has mode 0770.  Using these permis-
sions, then only members of the news group can  use  _c_t_l_i_n_n_d
to  create new groups because only they will be able to send
a message to the _i_n_n_d socket.

     This directory (which is specified by the __P_A_T_H__I_N_N_D_D_I_R
parameter)  is  also used to determine the user and group id
of all sub-processes spawned by _i_n_n_d, as well as  the  owner
of all news articles and files.  The owner of this directory
is set at installation time and specified  in  the  ``Owner-
ships and file modes'' section, above.

_4._2._1_1.  _L_o_g _a_n_d _c_o_n_f_i_g _f_i_l_e_s

     INN keeps its databases, and some control  files  their
own  directory,  typically named /_u_s_r/_l_o_c_a_l/_n_e_w_s.  Log files
are kept in /_v_a_r/_l_o_g/_n_e_w_s.  There  are  many  parameters  in
this  section  that  refer  to  files within this directory.
Some sites will want to globally replace ``/usr/local/news''
with  something like ``/var/news'', and ``/usr/lib/newsbin''



                    February 14, 1992





                           - 14 -


with ``/var/newsbin''

     There are two  files  that  contain  access  passwords,
__P_A_T_H__N_N_T_P_P_A_S_S  and  __P_A_T_H__N_N_R_P_A_C_C_E_S_S.  The default location
for these files is in /_u_s_r/_l_o_c_a_l/_e_t_c, so  that  it  is  gen-
erally safe to export /_u_s_r/_l_o_c_a_l/_n_e_w_s (read-only is probably
best).

     INN  programs  do  extensive  logging,  and  the  daily
maintenance   scripts   do  extensive  summary  reports  and
analysis of them.  It might take you some time to learn your
way  around  the  INN  logging  system; start by reading the
newslog manpages in the _d_o_c directory.

_4._2._1_2.  _I_n_n_w_a_t_c_h _c_o_n_f_i_g_u_r_a_t_i_o_n

     The INN server, _i_n_n_d, does not contain  any  checks  to
see if there is enough free space on the disk or if the sys-
tem load average is low enough to allow  article  reception.
There  are two reasons for this.  The first reason is philo-
sophical:  it is a mistake  to  bury  this  kind  of  policy
information  inside  a program.  For example, you don't want
to have to recompile the program just because you moved to a
different   filesystem.    (Yes,  this  could  be  partially
answered by moving the information  to  an  external  config
file,  but  any compiled rules are still likely to be incom-
plete.) The second reason is pragmatic:  there is  no  port-
able  way  to  get standard measurements for the information
needed.  For example, C News provides three  different  rou-
tines  to  get  the  filesystem statistics (with conditional
compilation) while the ``get  load  average''  file  in  IDA
sendmail has over 700 lines.

     Rather than get tangled up in such a mess of  #ifdef's,
INN  uses  an  external  program (shell script) that invokes
_c_t_l_i_n_n_d to stop and start the server as necessary.  The pro-
gram,   _i_n_n_w_a_t_c_h,   reads  the  control  file  _i_n_n_w_a_t_c_h._c_t_l.
_I_n_n_w_a_t_c_h   is   documented   in   _d_o_c/_n_e_w_s._d_a_i_l_y._8,    while
_i_n_n_w_a_t_c_h._c_t_l is documented in _d_o_c/_i_n_n_w_a_t_c_h._c_t_l._5.

     The parameters in this section control when the  server
should  stop  accepting  articles,  and when it should start
again.  You will have to examine _s_i_t_e/_i_n_n_w_a_t_c_h._c_t_l and prob-
ably modify it, usually to check the amount of free space on
the disks.  For example, there is a line in  the  file  that
has this fragment in it:

        !!! df . | awk 'NR == 2 { print $4 }' ! ...

This is looking at the fourth field of the  second  line  to
get  the  amount  of freespace.  You will have to change the
``2'' and ``4'' here, and on other lines, as appropriate for
your  system.  (Changing the output of _d_f seems to be one of
the things vendors like to do most; it is not worth my  time



                    February 14, 1992





                           - 15 -


to have INN keep track of all of them.)

     The parameter  _I_N_N_W_A_T_C_H__S_L_E_E_P_T_I_M_E  specifies  how  fre-
quently _i_n_n_w_a_t_c_h should check the system - the other parame-
ters should be set with this in mind, eg: there needs to  be
enough  free  space  on  the  filesystem  to  last  the next
_I_N_N_W_A_T_C_H__S_L_E_E_P_T_I_M_E seconds.

     The _I_N_N_W_A_T_C_H__x_x_x_L_O_A_D parameters specify the load  aver-
age  at  which  different actions should be taken.  They are
integers, representing the load average  multipled  by  100.
For  example,  if  you want to throttle the server when your
load reaches 7.5, set _I_N_N_W_A_T_C_H__H_I_L_O_A_D to ``750.''

     The _I_N_N_W_A_T_C_H__x_x_x_S_P_A_C_E parameters  specify  the  minimum
amount  of  disk  space needed for each of INN's three major
filesystems.  The numbers are in ``local units,'' equivalent
to whatever your _d_f uses (512-byte units, 1K blocks, etc).

     The _I_N_N_W_A_T_C_H__S_P_O_O_L_N_O_D_E_S parameter  specifies  how  many
inodes must be available in your spool directory.

_4._3.  _T_y_p_i_c_a_l _c_o_n_f_i_g._d_a_t_a _c_h_a_n_g_e_s

     The following sections show some of  the  changes  that
need  to  be  made  to _c_o_n_f_i_g._d_a_t_a so that INN will compile.
They are only samples; ``your mileage may vary.''

     Note that if you are using the first release  of  _g_c_c_2,
set _U_S_E__C_H_A_R__C_O_N_S_T to ``DONT''.


        _A_I_X
        DEFS              -I../include -D_NO_PROTO -U__STR__
        FORK              fork
        FREEVAL           void
        FUNCTYPE          int
        HAVE_ST_BLKSIZE   DONT
        HAVE_TM_GMTOFF    DONT
        LDFLAGS
        LINTFILTER        | sed -n -f ../sedf.aix
        LINTFLAGS         -wkD -b -h $(DEFS)
        LINTLIBSTYLE      SYSV
        LOCK_STYLE        FNCTL
        MISSING_MAN
        MISSING_SRC
        NEED_TIME         DO
        POINTER           void

     Under AIX 3.1, you must also use the _s_y_s_l_o_g that  comes
with  INN.   This  is  not necessary for 3.2.  Some versions
also need USE_UNION_WAIT _s_e_t _t_o ``_D_O_N_T''.





                    February 14, 1992





                           - 16 -



        _A/_U_X
        LIBS              -lbsd

     Make sure you don't use _g_c_c version 1;  it  miscompiles
the socket calls in _i_n_n_d/_c_c._c.


        _B_S_D_I
        ABORTVAL        void
        ALARMVAL        u_int
        EXITVAL volatile void
        _EXITVAL        volatile void
        FREEVAL void
        GETPIDVAL       pid_t
        GID_T   gid_t
        HAVE_UNISTD     DO
        HAVE_VFORK      DONT
        HAVE_WAITPID    DO
        LSEEKVAL        off_t
        MISSING_OBJ
        MISSING_SRC
        _PATH_COMPRESS  /usr/bin/compress
        _PATH_EGREP     /usr/bin/egrep
        _PATH_MAILCMD   /usr/bin/Mail
        _PATH_SENDMAIL  /usr/sbin/sendmail -t
        PID_T   pid_t
        POINTER void
        QSORTVAL        void
        SIZE_T  size_t
        SLEEPVAL        u_int
        UID_T   uid_t
        USE_UNION_WAIT  DONT
        VAR_STYLE       STDARGS

     Change  the  _S_H_E_L_L  variable  in  _c_o_n_f_i_g/_M_a_k_e_f_i_l_e   and
_s_i_t_e/_M_a_k_e_f_i_l_e   to  point  to  /_u_s_r/_c_o_n_t_r_i_b/_b_i_n/_b_a_s_h.   Edit
_l_i_b/_M_a_k_e_f_i_l_e so that the _i_n_s_t_a_l_l target does not try to make
../_l_l_i_b-_l_i_n_n._l_n.  You must also use the GNU _s_e_d; the version
distributed with BSDI 0.9.4.1 enters an infinite  loop  pro-
cessing newgroup messages.
















                    February 14, 1992





                           - 17 -



        _H_P-_U_X8.0
        ABORTVAL          void
        ALARMVAL          unsigned int
        CLX_STYLE         FCNTL
        CTYPE             isXXXXX((c))
        DEFS              -I../include -DHPUX
        FDCOUNT_STYLE     SYSCONF
        FREEVAL           void
        GETPIDVAL         pid_t
        GID_T             gid_t
        HAVE_SETBUFFER    DONT
        HAVE_ST_BLKSIZE   DONT
        HAVE_TM_GMTOFF    DONT
        HAVE_UNISTD       DO
        HAVE_WAITPID      DO
        LINTFILTER        | sed -n -f ../sedf.sysv
        LINTFLAGS         -b -h $(DEFS)
        LINTLIBSTYLE      SYSV
        LOCK_STYLE        LOCKF
        LOG_INN_PROG      LOG_LOCAL7
        LOG_INN_SERVER    LOG_LOCAL7
        LSEEKVAL          off_t
        _PATH_MAILCMD     /usr/bin/mailx
        NOFILE_LIMIT      200
        PID_T             pid_t
        POINTER           void
        PROF
        QSORTVAL          void
        RANLIB            echo
        RES_STYLE         TIMES
        SIZE_T            size_t
        SLEEPVAL          unsigned int
        UID_T             uid_t
        USE_UNION_WAIT    DONT
        _EXITVAL          void

     You will probably also need  to  use  the  _b_d_f  command
instead of _d_f.


















                    February 14, 1992





                           - 18 -



        _S_G_IIndigo
        ABORTVAL          void
        ALARMVAL          uint
        ACT_STYLE         MMAP
        CFLAGS            $(DEFS) -g -w
        CLX_STYLE         FCNTL
        _EXITVAL          void
        FORK              fork
        FREEVAL           void
        GID_T             gid_t
        HAVE_ST_BLKSIZE   DONT
        HAVE_TM_GMTOFF    DONT
        HAVE_UNISTD       DO
        LDFLAGS
        LIBS              -lmld
        LINTFILTER        | sed -n -f ../sedf.sysv
        LINTFLAGS          $(DEFS)
        LINTLIBSTYLE      SYSV
        LSEEKVAL          off_t
        POINTER           void
        QSORTVAL          void
        RANLIB            echo
        SIZE_T            size_t
        SLEEPVAL          uint
        UID_T             uid_t
        _PATH_COMPRESS    /usr/bsd/compress

     Also, the _M_I_S_S_I_N_G__x_x_x parameters should be empty.




























                    February 14, 1992





                           - 19 -



        _S_o_l_a_r_i_s2.X/SunOS
        DEFS              -I../include -DSUNOS5
        USE_CHAR_CONST    DO
        CFLAGS            -O -Xa $(DEFS)
        LDFLAGS
        LIBS              -lnsl -lsocket -lelf
        LINTLIBSTYLE      SYSV
        LINTFLAGS         -b -h $(DEFS)
        LINTFILTER        | sed -n -f ../sedf.sysv
        RANLIB            echo
        VAR_STYLE         STDARGS
        SIZE_T            size_t
        UID_T             uid_t
        GID_T             gid_t
        PID_T             pid_t
        POINTER           void
        ALIGNPTR          long
        LOCK_STYLE        LOCKF
        HAVE_UNISTD       DO
        HAVE_SETSID       DO
        HAVE_TM_GMTOFF    DONT
        HAVE_WAITPID      DO
        USE_UNION_WAIT    DONT
        HAVE_VFORK        DONT
        HAVE_UNIX_DOMAIN  DONT
        CLX_STYLE         FCNTL
        RES_STYLE         TIMES
        FDCOUNT_STYLE     SYSCONF
        ABORTVAL          void
        ALARMVAL          unsigned
        GETPIDVAL         pid_t
        SLEEPVAL          unsigned
        QSORTVAL          void
        LSEEKVAL          off_t
        FREEVAL           void
        _EXITVAL          void
        MISSING_SRC
        MISSING_OBJ
        PATH_COMPRESS     /bin/compress

     Make sure you use the C version of subst.















                    February 14, 1992





                           - 20 -



        _S_y_s_t_e_mV
        FREEVAL           void
        GETPIDVAL         long
        HAVE_TM_GMTOFF    DONT
        HAVE_WAITPID      DO
        LDFLAGS
        LIBS              -lnsl -lsocket
        LINTFILTER        | sed -n -f ../sedf.sysv
        LINTFLAGS         -b -h $(DEFS)
        LINTLIBSTYLE      NONE
        LOCK_STYLE        FCNTL
        MANPAGESTYLE      NONE
        MISSING_MAN       strcasecmp.3
        MISSING_OBJ       strerror.o strcasecmp.o
        MISSING_SRC       strerror.c strcasecmp.c
        _PATH_MAILCMD     /usr/bin/mailx
        POINTER           void
        QSORTVAL          void
        RANLIB
        RES_STYLE         TIMES
        SIZE_T            unsigned int
        USE_CHAR_CONST    DONT
        USE_UNION_WAIT    DONT

     I was never able to  get  _l_i_n_t  to  be  useful  on  the
machine  I  used.   Some  versions of System V (for example,
Esix 4.0.3) need the following LIBS value:

        LIBS              -lresolv -lsocket -lnsl -L/usr/ccs/lib -lelf

On a Dell System V machine, you have to set _H_A_V_E__U_N_I_X__D_O_M_A_I_N
to ``DONT.''


        _U_l_t_r_i_x4.x
        ALARMVAL          unsigned int
        FREEVAL           void
        LDFLAGS
        LINTFILTER        | sed -n -f ../sedf.sysv
        LINTFLAGS         -b -u -x $(DEFS)
        LSEEKVAL          off_t
        MISSING_MAN
        MISSING_OBJ       syslog.o strerror.o
        MISSING_SRC       syslog.c strerror.c
        POINTER           void
        PROF              -p
        QSORTVAL          void
        SIZE_T            unsigned int
        SLEEPVAL          unsigned int
        _EXITVAL          void

     Ultrix also requires the new _s_y_s_l_o_g.  Some  sites  have
reported  problems  with using the _s_y_s_l_o_g that INN includes.



                    February 14, 1992





                           - 21 -


The file _j_t_k_o_h_l-_s_y_s_l_o_g-_c_o_m_p_l_e_t_e._t_a_r._Z in the /_p_u_b/_D_E_C direc-
tory on gatekeeper.dec.com has a ``for-Ultrix'' package that
handles both old and new _s_y_s_l_o_g  calls.   While  Ultrix  has
symlinks,  it  does  not  have the ``-follow'' option in its
_f_i_n_d command.  This is used in _e_x_p_i_r_e/_m_a_k_e_a_c_t_i_v_e._c; you will
have to either install the GNU _f_i_n_d or edit the source file.

_5.  _O_t_h_e_r _S_o_u_r_c_e _P_r_e_p_a_r_a_t_i_o_n_s

     In addition to setting up the  configuration  file,  it
might be necessary to do some other setups.

_5._1.  _S_y_s_t_e_m_s _w_i_t_h _o_l_d _s_y_s_l_o_g_s

     If you need to install the _s_y_s_l_o_g that  is  distributed
with  INN, go to the top of the distribution and type ``make
syslogfix''.  This will also compile  _s_y_s_l_o_g_d,  the  logging
daemon.   You  should  install this to replace your existing
daemon, usually in  /_e_t_c/_s_y_s_l_o_g.   You  will  also  need  to
install the new-style _s_y_s_l_o_g._c_o_n_f file.

     If you cannot replace _s_y_s_l_o_g_d on your machine, then see
the  file  _s_y_s_l_o_g/_R_E_A_D_M_E for information on how to set it up
as an alternate daemon.

     Ignore any complaints from _l_i_n_t about the  INN  sources
calling  _o_p_e_n_l_o_g with the wrong argument count.  In fact, if
you don't get any complaints, then something is  wrong  with
the way _s_y_s_l_o_g, <_s_y_s_l_o_g._h>, or the _l_i_n_t libraries are set up
on your system.

_5._2.  _T_h_e _D_B_Z _p_a_c_k_a_g_e

     INN uses the DBZ database package.  Thanks to Jon Zeeff
for  his permission to use and redistribute DBZ, as modified
by Henry Spencer. INN has its own set  of  modifications  to
DBZ.   The  changes  are made with the _p_a_t_c_h program and the
context diff  in  _l_i_b/_d_b_z._p_c_h.   If  you  don't  have  _p_a_t_c_h
installed,  then you can make the changes manually.  (If you
don't have Larry  Wall's  _p_a_t_c_h  program  get  it  from  any
_c_o_m_p._s_o_u_r_c_e_s._u_n_i_x  archive  as well as many FSF archives and
other places - you'll be glad you did.)

     If you are using _v_f_o_r_k (specified in the  _F_O_R_K  parame-
ter),  or you want to _m_m_a_p the database, then you must apply
the patch.  The Makefile in _l_i_b will normally do it for  you
automatically,  anyway.   The  beginning  of  the patch file
describes the changes made in more detail.  If  you  do  not
apply  the  patch,  then  you  must add add ``dbzalt.c'' and
``dbzalt.o'' to the MISSING_SRC and MISSING_OBJ parameters.

     Apparently the System V  386  compiler  can't  optimize
_d_b_z._c  (the  GNU  C compiler doesn't have this problem).  If
you have ``-O'' in your _D_B_Z_C_F_L_A_G_S  configuration  parameter,



                    February 14, 1992





                           - 22 -


then take it out.

_5._3.  _U_s_i_n_g _w_r_i_t_e_v

     INN makes extensive use the _w_r_i_t_e_v system call to write
several  I/O  buffers  in a single call.  If you do not have
_w_r_i_t_e_v  then   you   must   copy   _i_n_c_l_u_d_e/_u_i_o._h   to   your
/_u_s_r/_i_n_c_l_u_d_e/_s_y_s  directory.  You must also add ``writev.c''
and ``writev.o'' to the MISSING_SRC and MISSING_OBJ  parame-
ters.

     The ``fake'' _w_r_i_t_e_v found in the _l_i_b directory  is  not
highly efficient.  You might want to write a better one that
tries to _m_a_l_l_o_c a new buffer and join all the elements.   Be
careful  about  doing  this  because  _i_n_n_d  can use very big
buffers.

_6.  _C_o_m_p_i_l_i_n_g _t_h_e _S_y_s_t_e_m

     Once the INN sources have  been  configured,  they  are
ready  to  be  compiled.   If you are very confident of your
changes, type the following:

        cd $inn
        make all

If you do not get any errors, skip  to  the  section  titled
``Installing the System.''

     If you are confident, but careful, type:

        cd $inn
        make world
        cat */lint

This will compile everything, then run _l_i_n_t  in  all  direc-
tories.

     Another option is to run the _B_U_I_L_D script found at  the
top  of the source tree.  This will interactively configure,
compile, and install the system.  After running that script,
skip to the section titled ``Installing the System.''

     If you are more cautious, you should type  the  follow-
ing:

        cd $inn/config
        make quiet
        cd ..

This will use your already-tested _s_u_b_s_t  program  with  your
new  _c_o_n_f_i_g._d_a_t_a  file.  You should then follow the steps in
the following sections.




                    February 14, 1992





                           - 23 -


_6._1.  _B_u_i_l_d_i_n_g _t_h_e _L_i_b_r_a_r_y

     The next step is to build the INN library.  Do the fol-
lowing

        cd $inn/lib
        make libinn.a lint


     This will  build  the  library  and  run  _l_i_n_t  on  the
sources, putting the output into a file named _l_i_n_t.  If any-
thing fails to compile, you probably  made  a  configuration
error, most likely in the ``C library differences'' section.
In particular, double-check  the  _S_I_G_H_A_N_D_L_E_R  and  _x_x_x__S_T_Y_L_E
parameters.

     The _l_i_n_t output should be almost empty,  except  for  a
couple of ``possible pointer alignment problem'' warnings in
_d_b_z._c.  If you get much more than this,  then  you  probably
did  not  define  the _P_O_I_N_T_E_R or _S_I_Z_E__T parameters properly.
The _N_E_W and _R_E_N_E_W macros in _i_n_c_l_u_d_e/_m_a_c_r_o_s._h try to  capture
all  the  alignment  problems associated with dynamic memory
allocation.  Also double-check the  _A_L_I_G_N_P_T_R  parameter  and
the _C_A_S_T macro in _i_n_c_l_u_d_e/_m_a_c_r_o_s._h.

     If _l_i_n_t reports any other problems, you should take the
time  to  investigate  them.   Note that many _l_i_n_t libraries
have errors.  Also, you may get some problems in _y_a_c_c_p_a_r  in
_p_a_r_s_e_d_a_t_e._y;  these  are most likely in the _y_a_c_c-generated C
code.  If you get any of these, complain to your vendor.

     If you find a portability issue that I  missed,  please
let me know.

     Once the library is built, you should install it in the
top-level  INN  directory.  To do this type ``make install''
while still in the _l_i_b directory.  This will also compile  a
_l_i_n_t  library  for  use in linting the programs in the other
directories.

     Note that any time a change is made to the library  you
must   do   ``make install'';  it  is  not  enough  to  type
``make libinn.a''.  This is a deliberate decision -  like  a
program,  compiling  a  library  is different from making it
available for others to use, and installing a library should
make it possible to run _l_i_n_t against it.

_6._2.  _C_o_m_p_i_l_i_n_g _t_h_e _P_r_o_g_r_a_m_s

     INN's  programs  are  separated  into  six  areas,   as
detailed  in  the  roadmap.   You'll  need to build each one
before you can install and use INN.





                    February 14, 1992





                           - 24 -


_6._2._1.  _T_h_e _F_r_o_n_t_e_n_d _P_r_o_g_r_a_m_s

     Frontends are those programs that talk to the main news
server,  either  offering  it  articles  or  controlling its
action.  This includes the following programs:

_i_n_e_w_s          The program that validates and prepares  news
               articles  and  gives  them  to _i_n_n_d.  This is
               mostly used  by  users  (usually  indirectly,
               through   programs   like  _P_n_e_w_s),  but  also
               through special facilities such as  news/mail
               gateways.

_r_n_e_w_s          Unpacks news  batches  from  UUCP  sites  and
               offers them to _i_n_n_d.

_c_t_l_i_n_n_d        This program controls _i_n_n_d, directing  it  to
               do  most  of  the  tasks a news administrator
               will have to do:  create  newsgroups,  update
               newsfeeds, and the like.

     To build these programs, type the following:

        cd $inn/frontends
        make all


_6._2._2.  _I_n_n_d

     The  next  program  is  the  main  news  server,  which
includes the following programs:

_i_n_n_d           _I_n_n_d accepts all  incoming  NNTP  connections
               and  either  processes their traffic or hands
               them off to the NNTP  ``newsreader''  server.
               It  accepts  articles, files them, and queues
               them so that they can be sent  to  downstream
               feeds.   _I_n_n_d  listens  on  the official NNTP
               port.  On most systems only root can do this.
               _I_n_n_d is careful to set the modes of any files
               it creates, as well as the privileges of  any
               processes it spawns.

_i_n_n_d_s_t_a_r_t      Sites that are concerned  about  large  root-
               access   programs   may   wish   to   install
               _i_n_n_d_s_t_a_r_t.   This  program  opens  the  port,
               changes  its  user and group ID to be that of
               the news administrator, and then _e_x_e_c's  _i_n_n_d
               with the open port.  It also sets up a secure
               execution environment.  It is a small program
               (about  100 lines) that is easily understood.
               You should use it because _i_n_n_d will run  fas-
               ter  because  it won't have to make any _c_h_o_w_n
               system calls.  If you make  _i_n_n_d_s_t_a_r_t  setuid



                    February 14, 1992





                           - 25 -


               root  then no news maintenance has to be done
               as root.

     To build these, type the following:

        cd $inn/innd
        make all


     Note that _i_n_n_d handles the filing and  distribution  of
certain  messages differently from other systems.  For exam-
ple, you can have newsgroups within ``control'' for the dif-
ferent  types of control messages.  See _i_n_n_d._8, _n_e_w_s_f_e_e_d_s._5,
and _a_c_t_i_v_e._5 in the _d_o_c directory for details.

_6._2._3.  _T_h_e _N_e_t_N_e_w_s _R_e_a_d_i_n_g _D_a_e_m_o_n

     _I_n_n_d implements a subset of the NNTP  protocol  -  only
those  commands  that are needed for peer sites to feed news
articles.  You must install _n_n_r_p_d to  allow  users  to  read
news.   If  a  connection comes in from a host that is not a
specified feed, then an _n_n_r_p_d process is spawned  to  handle
it.   (You  can debug _n_n_r_p_d by running it interactively; put
an entry for the host named ``stdin''  in  your  _n_n_r_p._a_c_c_e_s_s
file.)

     Build the newsreader server by doing the following:

        cd $inn/nnrpd
        make all

Note that if users on a peer machine  (one  that  feeds  you
news)  want to read news from your server, then you have two
choices.  You can use _n_n_t_p_d from the reference platform (See
Appendix  II)  and  make  sure  not to list the peer in your
_n_n_t_p._a_c_c_e_s_s file.  The other choice is to relink the reading
software  on  the other machine with the INN library so that
it uses the ``mode reader'' NNTP command extension.

_6._2._4.  _T_h_e _B_a_c_k_e_n_d _P_r_o_g_r_a_m_s

     The backend programs take articles that  _i_n_n_d  received
and  offer  them  to your news neighbors.  This includes the
following programs:

_a_r_c_h_i_v_e        A simple program to archive news articles.

_b_a_t_c_h_e_r        Collects  articles  into  batches  for   UUCP
               delivery.

_b_u_f_f_c_h_a_n       A program to split a single _i_n_n_d stream  into
               separate files.  It can buffer data, flushing
               files based on command-line switches.




                    February 14, 1992





                           - 26 -


_c_v_t_b_a_t_c_h       A program to turn a file  list  into  an  INN
               batchfile.   A  transition  aide that is only
               documented in the source.

_f_i_l_e_c_h_a_n       Another program to split a single _i_n_n_d stream
               into   separate  files.   It  is  system-call
               intensive, but requires no locking protocol.

_i_n_n_x_m_i_t        A replacement for _n_n_t_p_x_m_i_t from the reference
               implementation.  It reads a file containing a
               list of articles, and sends them to a host.

_n_n_t_p_g_e_t        A program to retrieve articles from a  remote
               site.

_s_h_l_o_c_k         A program to provide a locking  protocol  for
               shell scripts.

_s_h_r_i_n_k_f_i_l_e     A program to shrink a file by removing  lines
               from the beginning.  It is useful for purging
               backlogged batchfiles.

_s_y_s_2_n_f         A program to turn a B or C News _s_y_s file into
               an  INN _n_e_w_s_f_e_e_d_s file.  This is a transition
               aide that is only documented in the source.

     To build this set of programs, type the following:

        cd $inn/backends
        make all


_6._2._5.  _E_x_p_i_r_e

     This directory includes programs to modify the  history
database  as  well as some utilities that might be useful in
this task.  The database is called the _h_i_s_t_o_r_y file, and  it
contains  one line for every article on the system, specify-
ing when it was received and where it was filed.  This  file
is  indexed  by the Message-ID, and the DBZ package provides
fast retrieval from it.

_c_o_n_v_d_a_t_e       Converts between user-readable dates and  the
               format used in the history file.

_e_x_p_i_r_e         Scans  the  history  database  to  purge  old
               entries,  and  remove  old  articles from the
               spool area.  You can specify how long to keep
               sets of newsgroups.

_m_a_k_e_a_c_t_i_v_e     This program  can  be  used  to  rebuild  the
               _a_c_t_i_v_e file if it is lost in a crash.

_m_a_k_e_h_i_s_t_o_r_y    This program scans through the spool area and



                    February 14, 1992





                           - 27 -


               rebuilds the history files.

_n_e_w_s_r_e_q_u_e_u_e    This program can be used  after  a  crash  to
               resend articles to your neighbors.

_p_r_u_n_e_h_i_s_t_o_r_y   This is a tool for other programs that expire
               news.   It  reads  a list of Message-ID's and
               filenames, and updates the  history  file  to
               mark that the files have been deleted.

     This directory also includes _e_x_p_i_r_e._p_c_h  and  _r_e_a_p._p_c_h.
The  first is a patch to the C News expire program that lets
it cooperate better with  _i_n_n_d,  sending  it  messages  when
articles  have been removed.  The second is a set of patches
to the _r_e_a_p program that lets it  cooperate  with  _p_r_u_n_e_h_i_s_-
_t_o_r_y;  it  also adds some other useful features.  Both patch
files have additional information in  them.   Both  programs
are unsupported, provided by members of the beta-test group.

     To build these programs, type the following:

        cd $inn/expire
        make all


     If you are currently running C News, note that it has a
directory  named  _e_x_p_i_r_e  that is often the same pathname as
INN's _e_x_p_i_r_e program.  You will have to move, or remove, the
directory before you can intall the INN program.

_6._2._6.  _S_c_r_i_p_t _a_n_d _d_a_t_a _f_i_l_e_s

     In addition  to  the  programs,  INN  requires  several
scripts.  For example, one script starts the server when the
machine boots while another prunes the log  files  and  runs
_e_x_p_i_r_e every night.  Many of these scripts can be used as-is
until you get a feel for how INN works.

     INN also requires several data  files.   One  specifies
what  sites  feed you news, another what sites you feed, and
so on.  INN cannot provide these, other than  giving  sample
entries.  You'll probably find that writing these files will
be the hardest part of your installation.

     Prototypes for all these files are provided in the _s_a_m_-
_p_l_e_s  directory.   Your modified copies should be maintained
in the _s_i_t_e directory.  By splitting  things  up  this  way,
official  updates  will  never wipe out any changes you have
made.

     To create the initial set of files, do the following:

        cd $inn/site
        make all



                    February 14, 1992





                           - 28 -


     See below for an explanation of each file.

_6._3.  _M_a_n_u_a_l _p_a_g_e_s

     INN comes with an extensive set of manual  pages.   You
might  want  to edit the Makefile to set up the right owner-
ship of the installed manual pages.  Or you  might  want  to
not bother installing them at all.

     When it comes to reading them, you  should  start  with
_i_n_n_d._8   and   _c_t_l_i_n_n_d._8.   From  there  follow  the  cross-
references as you want.

_7.  _I_n_s_t_a_l_l_i_n_g _t_h_e _S_y_s_t_e_m

     Although either _i_n_n_d or _i_n_n_d_s_t_a_r_t must be run by  root,
most  of  the installation does not have to be done as root.
The $_i_n_n/_m_a_k_e_d_i_r_s._s_h script creates all the necessary direc-
tories  used  by  INN,  and sets up the right ownerships and
modes: owned by _N_E_W_S_U_S_E_R in group _N_E_W_S_G_R_O_U_P with  0775  per-
missions  (the  ``firewall''  directory,  __P_A_T_H__I_N_D_D_D_I_R, has
mode 0770).  You should review this script, then run it.

     The rest of the installation should be done as the news
administrator  or  as  root.   The Makefiles are very strict
about setting the modes on the files that get installed.  To
install the programs, do the following:

        cd $inn
        make update

This target does a ``make install'' in  all  program  direc-
tories.  It installs the programs and manpages, but does not
update or install any configuration files or scripts.   This
is  important:   in  any  directory (including the top-level
one), a ``make install'' will  install  everything  in  that
directory  into the right place.  A ``make update'' can only
be done in the top-level directory or in the _s_i_t_e directory,
and it only replaces scripts, not configuration files.  When
updating to a new INN release, you will probably want to  do
an  ``update''  first,  and then review the changed files by
doing ``make diff'' in the  _s_i_t_e  directory,  and  integrate
your  local  changes  as appropriate.  The Makefile also has
other targets that you might find useful,  so  the  comments
for  entries  like ``most'' and ``installed-diff', for exam-
ple.

     The next, and last, step is to build  your  INN  confi-
guration files and utility scripts.  If you have not already
done so, type the following:

        cd $inn/site
        make all




                    February 14, 1992





                           - 29 -


This will get copies of the scripts and files from the _b_a_c_k_-
_e_n_d_s  and  the  _s_a_m_p_l_e_s directories and run _s_u_b_s_t over them.
Whenever patches are issued, doing a _m_a_k_e in this  directory
will let you know what files have been updated, without des-
troying your local  changes.   The  _g_e_t_s_a_f_e._s_h  script  does
this.   If  you have either an _S_C_C_S or an _R_C_S directory then
_g_e_t_s_a_f_e._s_h will use the appropriate  source  control  system
for the files in this directory.

     The first set of files are used to carry out  the  con-
trol messages.  You might want to look them over; in partic-
ular, look at the table in _c_o_n_t_r_o_l._c_t_l and the newslog  man-
pages in _d_o_c.  The control files are:

        checkgroups    rmgroup
        control.ctl    sendme
        default        sendsys
        docheckgroups  senduuname
        ihave          version
        newgroup       writelog
        parsecontrol


     The following scripts are normally invoked by  _c_r_o_n  or
at system boot time, and should not require many changes:

        innlog.awk     scanlogs
        innstat        tally.control
        news.daily     tally.unwanted
        rc.news

_R_c._n_e_w_s starts the server.  _N_e_w_s._d_a_i_l_y  invokes  _e_x_p_i_r_e  and
_s_c_a_n_l_o_g_s.   _S_c_a_n_l_o_g_s  calls the other scripts to process the
logs.  You might want to review these scripts  just  to  see
what  they  do.  Do not get bogged down in the details, just
read the comments.  They  are  documented  in  the  manpages
news.daily(8) newslog(5), and newslog(8).

     There are some utility scripts to  send  news  to  your
news feeds:

        nntpsend       send-nntp
        nntpsend.ctl   send-uucp
        send-ihave     sendbatch

They flush and lock the batch file for the specified site(s)
and  then  call  _i_n_n_x_m_i_t  to send the articles to your down-
stream feeds.  _S_e_n_d-_i_h_a_v_e is used for ``ihave/sendme'' feeds
and  is  described  in an appendix.  _S_e_n_d_b_a_t_c_h and _s_e_n_d-_u_u_c_p
flush and lock batchfiles and call _b_a_t_c_h_e_r to queue up  UUCP
jobs.   You  might  want to modify these files to change the
flags given to _u_u_x; the default is to queue jobs up as grade
``d.''  You will almost definitely have to edit them to make
sure that they properly parse the output of _d_f so that  your



                    February 14, 1992





                           - 30 -


spool  area  is  not overrun!  _N_n_t_p_s_e_n_d and _s_e_n_d-_n_n_t_p do the
same thing for NNTP feeds.  You must determine how you  want
to propagate your articles - the scripts give common ways of
getting the job done.

     The following files will have to be edited  to  contain
your  local  information.  They all have manual pages in the
_d_o_c directory that describe them:

        expire.ctl     newsfeeds
        hosts.nntp     nnrp.access
        inn.conf       passwd.nntp
        moderators


     The last group of files are utility scripts  you  might
find useful:

        ctlrun         makegroup
        inncheck       scanspool
        innwatch

_C_t_l_r_u_n reads all the  articles  filed  in  your  ``control''
newsgroup  and  calls the appropriate control message script
to parse them.  _I_n_n_c_h_e_c_k is a Perl script to check the  syn-
tax  and  permissions of an installed INN system.  _I_n_n_r_e_p_o_r_t
is an alternate way of summarizing the  server's  log  file.
It  is a Perl script.  _I_n_n_w_a_t_c_h is a shell script to monitor
the system and stop the server when you are running  low  on
disk   space  or  inodes;  it  could  be  run  out  of  your
__P_A_T_H__N_E_W_S_B_O_O_T script.  You might have to edit it to  under-
stand  your  _d_f  output format.  _M_a_k_e_g_r_o_u_p is a front-end to
_r_n_e_w_s that helps you write a control  message  to  create  a
newsgroup.   You should review this script because you might
have to change the way the output of  the  _d_a_t_e  command  is
parsed,  and  because  you  might  might  want to change the
default distribution.  _S_c_a_n_s_p_o_o_l is a Perl  script  to  make
sure  that  the  active  file and the contents of your spool
tree agree.

     Once you have made the necessary modifications  (and  I
admit  that  some  of this - especially the _n_e_w_s_f_e_e_d_s file -
will be difficult), you should type the following:

        make install

Make sure you have _r_c._n_e_w_s installed in the right place,  as
explained  in  the  ``Paths  to  common  programs'' section,
above.  You might find it useful to  read  the  ``First-Time
Usenet  or NNTP Installation'' appendix for help on navigat-
ing through the INN configuration files.

     There are now only  a  couple  more  things  to  check.
First,  make  sure  you  have  an  _a_c_t_i_v_e file and a _h_i_s_t_o_r_y



                    February 14, 1992





                           - 31 -


database!  The appendices explain how to convert your exist-
ing  files;  the  _B_U_I_L_D script will create new ones for you.
If you have Perl, run _i_n_n_c_h_e_c_k to make sure  that  you  have
the datafiles configured correctly.  The second is make sure
that you have correctly updated  your  _s_y_s_l_o_g._c_o_n_f  file  to
match the filenames and logging levels required by INN.  See
_s_y_s_l_o_g/_s_y_s_l_o_g._c_o_n_f for an example of what to do.

     Once you have done all of  this,  InterNetNews  is  now
installed, and ready to run - have fun!

_8.  _H_e_t_e_r_o_g_e_n_e_o_u_s _C_l_i_e_n_t _I_n_s_t_a_l_l_a_t_i_o_n_s

     The _i_n_e_w_s program is used by  user  newsreaders.   Pro-
grams  such  as _r_n (which call _P_n_e_w_s) prepare a news article
and feed it into _i_n_e_w_s.  _I_n_e_w_s validates the  news  headers,
adds  its  own,  and  feeds  the  article to the campus _i_n_n_d
server.  The _i_n_e_w_s that comes with INN is more  useful  then
the ``mini-inews'' that comes with the reference implementa-
tion.  You cannot run the standard B2.11 _i_n_e_w_s.  You can run
the  C  News _i_n_e_w_s, but only on client machines (i.e., those
with a $_N_E_W_S_C_T_L/_s_e_r_v_e_r file).  I recommend that you  install
INN's _i_n_e_w_s on all the clients in your campus.

     INN comes with a _M_a_k_e_I_n_e_w_s script to make it easier  to
build  and  install  _i_n_e_w_s on a wide variety of hosts.  This
script creates a directory  and  copies  all  the  necessary
files  (headers, sources, configuration files) into it.  The
script takes an optional argument,  which  should  name  the
client machine's architecture.  For example:

        cd $inn
        ./MakeInews sun3

will create an _i_n_e_w_s._s_u_n_3 directory.  You can  then  examine
the  Makefile in that directory, and build and install _i_n_e_w_s
on your Sun-3 clients.  This is easiest if the  client  NFS-
mounts the source directory - that way you can keep all your
_i_n_e_w_s sources in one place.

     _R_n_e_w_s only has to be available on the machine where you
run  UUCP (and perhaps a mail-news gateway).  If this is not
the same machine as where _i_n_n_d is running, then  the  _M_a_k_e_R_-
_n_e_w_s  script can be used in the same manner as the _M_a_k_e_I_n_e_w_s
script.

_9.  _K_n_o_w_n _P_r_o_b_l_e_m_s

     If you use NIS (formerly Yellow Pages)  on  SunOS,  you
will  need  to  add  a ``domainname'' entry to your _i_n_n._c_o_n_f
file if your hosts do  not  contain  fully-qualified  domain
names.   The  most common symptom of this is that _i_n_e_w_s will
fail because it cannot generate a Message-ID.  Another prob-
lem  with NIS is that reverse name lookups do not return the



                    February 14, 1992





                           - 32 -


fully-qualified domain name.  If you know that none of  your
local  clients  have  a  period in their name, you can use a
pattern like ``*[^.]*'' in your _n_n_r_p._a_c_c_e_s_s file.

     SunOS4.1.1 has a bug where _w_r_i_t_e(2) can  return  EINTR.
The most common symptom is the following fatal error message
from _i_n_n_d:

        Can't sync history, interrupted system call

This is Sun bug 1052649.  It is fixed  in  patch  100293-01.
According  to  the  release  manual, it is also fixed in all
releases of SunOS since 4.1.2.

     If you have _N_O_F_I_L_E__L_I_M_I_T set you should know  that  the
standard  I/O library in SunOS4.x has trouble with more than
127 descriptors.  The most common symptom is  the  following
fatal error message from _i_n_n_d:

        can't fopen /usr/local/news/history, invalid argument

This occurs after doing a _c_t_l_i_n_n_d ``reload'' command.  For a
work-around,   reboot  your  server  instead  of  trying  to
``reload.'' Another symptom is that _i_n_n_d will exit if you do
a  _c_t_l_i_n_n_d  ``flush''  command while the server is paused or
throttled.  This is Sun bug 1045141.  Sun does not  plan  to
fix it for any 4.x release.

     One site has reported the same  error  message  happens
after  doing a sequence of ``throttle'' and ``go'' commands.
It does not appear to be related to the bug mentioned above,
although  the  symptom is the same.  If you replace the body
of INN's _x_f_o_p_e_n_a routine with the following, it will work:

        return fopen(p, "a+");

This is in the file _l_i_b/_x_f_o_p_e_n_a._c.

     If you use Sun's unbundled compiler, _a_c_c, you must make
sure  to  use  the unbundled assembler, too.  You might also
get lots of  ``left  operand  must  be  modifiable  lvalue''
errors.  Setting _U_S_E__C_H_A_R__C_O_N_S_T to ``DONT'' will help.

     There have been reports that the VAX Ultrix 4.2  _m_a_l_l_o_c
doesn't  work  well  with _i_n_n_d, causing it to slowly fill up
all swap space.  I believe that all of the memory  leaks  in
_i_n_n_d  have been fixed, but you might want to look at using a
different _m_a_l_l_o_c package.  The Kingsley/Perl _m_a_l_l_o_c  package
is  provided  in  the  _l_i_b  directory.  Add ``malloc.c'' and
``malloc.o'' to the MISSING_SRC  and  MISSING_OBJ  lines  in
_c_o_n_f_i_g._d_a_t_a and rebuild.

     I have been told that on SunSoft Interactive UNIX  Sys-
tem  V  Release  3.2  Version 3.0 systems <errno.h> has been



                    February 14, 1992





                           - 33 -


broken up into separate files.   The  easiest  way  to  work
around  this problem is to add ``#include <net/errno.h>'' to
_i_n_c_l_u_d_e/_c_l_i_b_r_a_r_y._h.

     If you use 386BSD (the Jolitz port, not the  BSDI  pro-
duct) you will have to set _A_C_T__S_T_Y_L_E to ``READ''.  If you do
not do this then the  active  file  will  not  get  updated.
Another  work-around  is  to insert an ``msync'' call in the
ICDwriteactive routine in _i_n_n_d/_i_c_d._c.  This is not supported
because I consider the 386BSD behavior to be buggy.

     The default configuration of some Sequent kernels  does
not  provide  enough descriptors for _i_n_n_d to run.  You might
have to rebuild your kernel with the  ``MAXNOFILE=128''  and
``NOFILEEXT=64''  options.   You  will  also  have  to had a
``setdtablesize(nnn)'' call in the main routine of _i_n_n_d, and
a ``setdtablesize(0)'' call in the Spawn routine.

     I have been told that some older versions  of  the  SCO
_o_p_e_n_d_i_r  routine  have  file  descriptor  leaks.   The  most
noticeable symptom is probably that _i_n_n_d will die while try-
ing  to  renumber  the _a_c_t_i_v_e file.  You might want to use a
freely-redistributable ``dirent'' package such as  one  dis-
tributed by the Free Software Foundation.

     On some SVR4 systems,  attempting  to  set  the  socket
buffer  size  is  either not supported or, even worse, might
result in _i_n_n_d's data size  growing.   The  most  noticeable
symptom is ``cant setsockopt(SNDBUF)'' messages in your _s_y_s_-
_l_o_g output.  To fix this, either comment out  the  calls  to
_s_e_t_s_o_c_k_o_p_t  in _i_n_n_d/_n_c._c or add ``-USO_SNDBUF'' to your _D_E_F_S
config parameter.

     I have heard that Sony SVR4 systems have lots of  prob-
lems.  You must set _H_A_V_E__U_N_I_X__D_O_M_A_I_N to ``DONT''; sockets in
general seem to have problems, including kernel crashes  and
a blocked _i_n_n_d.

     If you use the GNU _s_e_d in the  __P_A_T_H__S_E_D  configuration
parameter,  make sure you get version 1.13; earlier versions
have a bug that breaks the _p_a_r_s_e_c_o_n_t_r_o_l scripts.   The  most
noticeable symptom is that all ``newgroup'' control messages
result in mail saying that they are unparseable.

     Some versions of the shell in  HP-UX  do  not  properly
parse  a  quoted  ``[''  when  it is in a pattern for a _c_a_s_e
statement.  The most noticeable symptom is  that  _n_e_w_s._d_a_i_l_y
does  not properly expire articles if _i_n_n_w_a_t_c_h has throttled
the server.  Contact HP and get a fix for SR # 5003-009811.

     On some versions of AIX on the RS/6000,  using  memory-
mapping  can eat up all the page space or crash the machine.
This will  be  noticeable  if  you  have  _A_C_T__S_T_Y_L_E  set  to
``MMAP''  and/or have ``-DMMAP'' in _D_B_Z_C_F_L_A_G_S.  Ask your IBM



                    February 14, 1992





                           - 34 -


representative for the ``U413090'' PTF and prerequisites  to
apply it; it is believed that this will fix it.























































                    February 14, 1992





                           - 35 -


_A_p_p_e_n_d_i_x _I:  _D_i_f_f_e_r_e_n_c_e_s _f_r_o_m _o_t_h_e_r _N_e_w_s _s_o_f_t_w_a_r_e

     Administrators will find that INN is fairly  incompati-
ble  with  B  and C News.  This section tries to mention the
most important places where INN differs from the other  news
systems.  If you have not maintained B or C News, you should
probably skip this section.

     Users will generally only notice is that INN is faster;
it  should  be 100% compatible with the other systems at the
user level.  If you had particular problems that aren't men-
tioned  here,  please let me know.  Note, however, that this
is _n_o_t a tutorial on how to set up a new INN system, or con-
vert older software to it; no such document exists.

_1.  _C_o_n_f_i_g_u_r_a_t_i_o_n _F_i_l_e_s

     Below is a list of the data files used by B and C News,
and  the  reference  NNTP implementation, along with a short
summary of how they map into INN configuration  files.   The
syntax  is  always  different: INN files are almost always a
set of colon-separated fields where lines beginning  with  a
poundsign are ignored.

_e_x_p_l_i_s_t        This is replaced by  the  similar  _e_x_p_i_r_e._c_t_l
               file.   Archiving  is done by a separate pro-
               gram.

_m_a_i_l_p_a_t_h_s      This is replaced by the _m_o_d_e_r_a_t_o_r_s file.  The
               ``default'' entry in _m_a_i_l_p_a_t_h_s is replaced by
               either a full wildcard (``*'') entry  in  the
               _m_o_d_e_r_a_t_o_r_s  file, or by a ``moderatormailer''
               entry in the _i_n_n._c_o_n_f file.

_n_n_t_p._a_c_c_e_s_s    This is replaced by the _h_o_s_t_s._n_n_t_p (for  NNTP
               peers)   and  _n_n_r_p._a_c_c_e_s_s  (for  newsreading)
               files.

_n_n_t_p._s_y_s       This is a password file used if NNTP is  com-
               piled   with  the  ``AUTH''  option.   It  is
               replaced by the _p_a_s_s_w_d._n_n_t_p file.  Note  that
               _i_n_e_w_s   and  _r_n_e_w_s  will  also  try  to  read
               _p_a_s_s_w_d._n_n_t_p.  Therefore,  you  will  probably
               want to have one-line versions of it for your
               on-campus clients.

_o_r_g_a_n_i_z_a_t_i_o_n   This  is  replaced  by  the  ``organization''
               entry in the _i_n_n._c_o_n_f file.

_r_n/_s_e_r_v_e_r      This is replaced by the ``server''  entry  in
               the _i_n_n._c_o_n_f file.

_w_h_o_a_m_i         This is  replaced  by  the  ``pathhost''  and
               ``fromhost'' entries in the _i_n_n._c_o_n_f file.



                    February 14, 1992





                           - 36 -


_2.  _N_e_w_s_g_r_o_u_p_s, _A_c_t_i_v_e, _S_y_s, _a_n_d _N_e_w_s_f_e_e_d_s

     The biggest difference is how the _n_e_w_s_f_e_e_d_s  file  com-
pares   with   the   _s_y_s   file.   Newsgroup  patterns  like
``all.all.ctl'' are completely gone.  All newsgroup patterns
are shell-style wildcards, matched against the _a_c_t_i_v_e file.

     The _a_c_t_i_v_e file is taken to be the definitive  list  of
newsgroups  that you want to receive.  With B and C news, an
article must match the subscription list of the  local  site
as specified in the _s_y_s file.  If it matches, each newsgroup
is then looked up in the _a_c_t_i_v_e file.  If none of the  news-
groups  are  found, then the article is filed into the news-
group named ``junk''.

     INN's behavior is much simpler.  If  a  newsgroup  does
not  appear  in  the _a_c_t_i_v_e file, it is ignored.  If none of
the groups are mentioned,  then  the  article  is  rejected:
nothing  is  written  to  disk.  This is a deliberate design
decision:  if you do not want a particular newsgroup to take
up  your disk space, remove it from the _a_c_t_i_v_e file; if your
neighbors have not gotten around to updating your  newsfeed,
then  the  only  thing that will happen is that some network
bandwidth will have been wasted when they send you the arti-
cle.

     You can change INN's behavior so that it resembles  the
other  systems.   To  do this, compile with _W_A_N_T__J_U_N_K set to
``DO.'' Note that  this  will  accept  _e_v_e_r_y_t_h_i_n_g.   Because
there  is no subscription list, you cannot say ``give me all
of the foo hierarchy (filed into  junk),  but  not  the  alt
hierarchy.'' You must list the group in the _a_c_t_i_v_e file.

     INN strictly believes in distributions.   If  the  site
named  _M_E has any distributions, then incoming articles must
either have no Distribution header, or the header must match
the  distribution  list.   If you want to blindly accept all
distributions, make sure you do not have a  ``/distrib,...''
section in your _M_E entry.  Distributions are fixed strings -
there are no patterns or special wildcards like ``all.''

     For more details on these items, see _d_o_c/_n_e_w_s_f_e_e_d_s._5.

_3.  _C_o_n_t_r_o_l _M_e_s_s_a_g_e_s

     Like C News, INN implements all control messages  other
than cancel as shell scripts.  The number and type of param-
eters is different from that of C News.   All  control  mes-
sages consult the file _c_o_n_t_r_o_l._c_t_l before acting on the mes-
sage.  If the sender's address  matches  with  the  list  of
authorized  addresses  (e.g.,  ``tale@uunet.uu.net'', ``*'',
etc.), the control message is either acted upon,  mailed  to
the  news  administrator,  or logged.  For example, messages
from  ``tale@uunet.uu.net''  (the   current   moderator   of



                    February 14, 1992





                           - 37 -


news.announce.newgroups) are honored.

     The ``control'', ``junk'', and ``to'' newsgroups can be
explicitly  sent  or  not  sent.   See  _d_o_c/_n_e_w_s_f_e_e_d_s._5  and
_d_o_c/_i_n_n_d._8.

     The _c_t_l_i_n_n_d program is what really directs  the  server
to  create  or  remove  newsgroups.  This results in a semi-
recursive process:   the  control  message  arrives,  and  a
script  is invoked to process the message.  If approved, the
script invokes _c_t_l_i_n_n_d to send a message back to the  server
telling it to create or remove the group.

_4.  _L_o_c_k_i_n_g

     A running news system has many open files.  These files
can  be  divided  into two groups.  The first group includes
the history database and  _a_c_t_i_v_e  file.   The  second  group
includes  the logfiles and batch files used to send articles
to your feeds.

     B news uses an internal protocol for the  first  group.
For  the  second group, since _i_n_e_w_s does ``atomic appends,''
no locking is necessary.   C  news  uses  the  _l_o_c_k_n_e_w_s  and
_n_e_w_s_l_o_c_k  scripts for the first group, and provides no fine-
grain mechanism for the second group.

     With INN, the server is running all the  time  and  all
locking  is  done under the direction of _c_t_l_i_n_n_d.  The first
group  is  generally  handled  by  using  the  ``throttle,''
``pause,'' and ``go'' commands (sometimes ``reload'' will be
necessary).  The second group is  handled  by  the  ``flush-
logs''  and  ``flush'' commands.  See the _d_o_c/_c_t_l_i_n_n_d._8 man-
page; examples of their use can be found in various  scripts
in the _s_a_m_p_l_e_s directory.






















                    February 14, 1992





                           - 38 -


_A_p_p_e_n_d_i_x _I_I:  _C_o_n_v_e_r_t_i_n_g _f_r_o_m _o_t_h_e_r _N_e_w_s _s_o_f_t_w_a_r_e

     INN is a complete news transport and expiration system.
Since  few  people will be installing INN from scratch, this
section should help you determine what you can ``throw out''
from  your  earlier news setups.  It is also compatible with
much of the existing news software,  so  you  can  create  a
mixed environment if you want to, and if you are careful.

_1.  _C _N_e_w_s _E_x_p_i_r_e

     The _e_x_p_i_r_e program that is distributed  with  INN  does
not do any archiving.  Since the history databases currently
have the same format, it is  possible  to  use  the  C  News
_e_x_p_i_r_e  if  you  want  to.   (The  INN  history database may
change, however, so you should only do this  if  you  really
have  to  -  you  really should use INN's _e_x_p_i_r_e.) There are
three ways to do this.

     The first way is to change your _d_o_e_x_p_i_r_e script so that
it  calls  _c_t_l_i_n_n_d  to  ``throttle'' _i_n_n_d just before _e_x_p_i_r_e
runs.  It should then issue a _c_t_l_i_n_n_d ``go''  command  after
_e_x_p_i_r_e  is  done.   The  drawback  to this method is that no
incoming news is accepted until all expiration is finished.

     The second way is to compile _l_i_b/_l_o_c_k._c and add  it  to
your  C News library _l_i_b_c_n_e_w_s._a, replacing the provided lock
functions.  You should then remove  _e_x_p_i_r_e  and  relink  it.
This  method  has not been tested very thoroughly, but it is
rather simple.

     The third way is to teach the C News _e_x_p_i_r_e to talk  to
_i_n_n_d  and  tell  it to cancel articles that it would remove.
To do this, apply the patch file _e_x_p_i_r_e/_e_x_p_i_r_e._p_c_h to your C
News   _e_x_p_i_r_e._c   sources.    You  will  also  have  to  add
_l_i_b/_i_n_n_d_c_o_m_m._o to _l_i_b_c_n_e_w_s._a and then rebuild _e_x_p_i_r_e.

_2.  _S_t_a_n_d_a_r_d _N_N_T_P _d_a_e_m_o_n

     You can use the ``standard'' _n_n_t_p_d server.  You  should
only  have  to do this if you have hosts that feed you news,
and where the users on that machine also want to  read  news
on your machine.

     Make sure that you configure _n_n_t_p_d so that it is  using
DBZ,  and  have  it  feed  each individual article to _i_n_e_w_s;
don't use the ``batched input'' option.  It should  also  be
set up so that it acts as if it is running under _i_n_e_t_d.  You
should also make sure that _i_n_e_t_d does nothing with the  NNTP
port, number 119.

_3.  _N_N_T_P-_b_a_s_e_d _n_e_w_s_r_e_a_d_e_r_s

     If  you  already  have  your   NNTP-using   newsreaders



                    February 14, 1992





                           - 39 -


installed and running, you do not have to do anything.  This
includes _x_v_n_e_w_s, _x_r_n, _r_r_n and so  on.   INN  implements  the
standard  NNTP protocol, with some extensions.  INN does not
provide the extensions used  by  _t_r_n,  _t_i_n  or  other  news-
readers.   (You  can enable the _t_r_n ``XTHREADS'' by modifing
_n_n_r_p_d/_n_n_r_p_d._h;    change    the    ``DONT_DO_XTHREAD''    to
``DO_DO_XTHREAD''  and  verify the other macros in that sec-
tion.  INN will not implement  all  the  different  indexing
systems  because  the  right  solution  is to have a generic
interface that all readers can use.)

     For administrative convenience, however, you might wish
to  have all your newsreaders use the INN library and confi-
guration files to talk to  the  server.   The  next  section
describes how to do that for _r_n.  It is provided as an exam-
ple, to help you convert other programs you might have.  INN
does not provide, nor fully support, any newsreaders.

_4.  _R_e_m_o_t_e _r_n

     The ``remote'' version of _r_n (also called _r_r_n)  uses  a
set  of  routines  in  the NNTP ``clientlib'' file.  INN can
emulate these routines; see _d_o_c/_c_l_i_e_n_t_l_i_b._3.  If you need to
build  _r_n for client machines that don't have the entire INN
distribution available, use the _M_a_k_e_L_i_b script  to  build  a
distribution  directory of the necessary routines.  Use this
script the same way you use the _M_a_k_e_I_n_e_w_s script.

     _R_n, _r_r_n, and _t_r_n are moving targets so  these  instruc-
tions  may  be  out of date.  The maintainers have agreed to
officially support INN, however, which is a good thing.

     There are two ways to build _r_n so that it uses the  INN
library.   If you don't have the NNTP distribution installed
you will have to use the first way.

     The first way is to apply a patch to the latest _r_n _C_o_n_-
_f_i_g_u_r_e  script  and then execute it and rebuild the program.
To do this, type the following:

        cd _r_n__s_o_u_r_c_e
        patch <$inn/frontends/rn.pch
        ./Configure
        make

At some point, _C_o_n_f_i_g_u_r_e will ask you if you want to use the
InterNetNews  library;  answer _y_e_s.  You can then use either
the full sources, or a special library  that  contains  just
the  needed  header  and  sources files.  Tell _C_o_n_f_i_g_u_r_e the
appropriate pathnames, and then proceed with the rest of the
_r_n installation.

     The second way is to edit a couple of files  after  you
have  run  _C_o_n_f_i_g_u_r_e  and  set it up to build the remote rn.



                    February 14, 1992





                           - 40 -


First, replace the  _r_n  file  _s_e_r_v_e_r._h  with  the  INN  file
_i_n_c_l_u_d_e/_m_y_s_e_r_v_e_r._h.   The  next  step  is  to  edit  the  _r_n
Makefile to remove the ``clientlib'' file  from  the  source
and  object  file  lists.  This can probably be done by com-
menting out the definitions of the _c_5  and  _o_b_j_5  variables.
You  must  also  edit the Makefile to add the INN library to
the list of libraries that are linked in.  This can probably
be  done  by editing the line that defines the _l_i_b_s variable
so that the full pathname to  _l_i_b_i_n_n._a  is  the  first  item
after the equal sign.

_5.  _R_e_m_o_v_i_n_g _t_h_e _O_t_h_e_r _S_t_u_f_f

     The names  below  assume  a  ``standard''  news  setup;
things  might be different on your machine.  Also, many pro-
grams have alternate names and links; make  sure  you  chase
down and remove all of them.

     You might find it easiest to rename your  /_u_s_r/_l_i_b/_n_e_w_s
(and  /_u_s_r/_l_i_b/_n_e_w_s_b_i_n)  directories  to  something else and
start with a clean slate, copying over the files as they are
needed.   Make  sure that your news processing is completely
stopped before you begin this process.   That  includes  any
_c_r_o_n jobs that may be running.

     The /_u_s_r/_l_i_b/_n_e_w_s  directory  can  become  cluttered  -
that's  why  C News split everything up into separate direc-
tories.  The following files are compatible with C News  and
B2.11 News, and should be _k_e_p_t:

        active         active.times

If you are running C News keep these files, otherwise delete
them and use _m_a_k_e_h_i_s_t_o_r_y to rebuild them:

        history
        history.dir
        history.pag


     _R_n does not have to be modified so leave this directory
alone (or copy it back if you moved your original):

        /usr/local/lib/rn

If you set up _r_n to use the INN library, remove this file:

        /usr/local/lib/rn/server


     The input system is completely  replaced.   Remove  the
following programs and their manpages:





                    February 14, 1992





                           - 41 -



        /bin/cunbatch
        /bin/inews, /usr/lib/news/inews, etc...
        /bin/rnews, /usr/bin/rnews, etc...
        /usr/lib/news/rnews.stall
        /etc/nntpd, /usr/etc/nntpd, etc...

Also remove the following directories and everything  within
them:

        /usr/lib/news/bin/input
        /usr/lib/news/bin/relay
        /usr/lib/news/bin/ctl
        /usr/lib/news/bin/inject
        /usr/lib/news/nntp (mkgrdates, nntp_access, shlock, etc)


     The transmission facility is completely replaced.   You
may  keep your current feed subsystem if you want to, but it
will require some changes to make sure that  batchfiles  are
properly  flushed;  see  the  _s_e_n_d-_x_x_x scripts for examples.
Remove these files and programs:

        /usr/lib/news/batchparms
        /usr/man/man8/newsbatch.8

Remove the following directory and everything within it:

        /usr/lib/news/bin/batch

You can continue to use _n_n_t_p_l_i_n_k, _n_e_w_s_x_d, and the like, sub-
ject to the caveat just mentioned.

     Article expiration and maintenance of the  history  and
active files is completely replaced.  Remove this file:

        /usr/lib/news/explist

Remove the following directories and everything within them:

        /usr/lib/news/bin/expire
        /usr/lib/news/bin/maint

If you do not remove the _e_x_p_i_r_e directory, you will probably
have  problems  installing  INN's _e_x_p_i_r_e, which is a program
that often has the same name as the C News directory.

     The following  programs  in  /_u_s_r/_l_i_b/_n_e_w_s_b_i_n  are  not
needed and can be deleted.  Keeping them around is harmless,
and if you find them useful don't delete them:







                    February 14, 1992





                           - 42 -



        canonhdr       newshostname
        ctime          newslock
        dbz            queuelen
        getabsdate     sizeof
        getdate        spacefor
        gngp

Note that _c_t_i_m_e, _g_e_t_a_b_s_d_a_t_e, and  _g_e_t_d_a_t_e  are  replaced  by
_c_o_n_v_d_a_t_e.  More importantly, _n_e_w_s_l_o_c_k does not lock _i_n_n_d; it
is best to remove it.

     The following files are replaced by  INN  configuration
files.  You should delete them, just to avoid confusion:

        mailname       sys
        mailpaths      whoami
        organization

If you have other software that uses them (except _s_y_s),  you
can  keep them.  The following will be rebuilt (or overwrit-
ten) by _i_n_n_d and _s_c_a_n_l_o_g_s so you should remove them:

        errlog         log


     In addition to the manpages  for  the  programs  listed
above, the following manual pages should be removed:

        active.times.5 newsmail.8
        expire.8       newsmaint.8
        mkgrdates.8c   nntpd.8c
        news.5         nntpxmit.1
        newsaux.8


     Any other files and directories can  probably  also  be
discarded.



















                    February 14, 1992





                           - 43 -


_A_p_p_e_n_d_i_x _I_I_I:  _S_e_t_t_i_n_g _u_p _d_i_f_f_e_r_e_n_t _f_e_e_d_s

     This section gives some notes and advice on how to  set
up  different  types  of outgoing news feeds.  It duplicates
and expands upon the information in the manual pages.

_1.  _I_h_a_v_e/_s_e_n_d_m_e _f_e_e_d

     For a standard UUCP newsfeed, a site batches up all the
articles  it receives and sends them to the downstream site,
which unpacks the batch and processes each article.  If  the
downstream  site  has multiple feeds, however, it might want
to ``filter'' the articles that get sent.  This is  done  by
having  the  feeding  site send a list of Message-ID's as an
``ihave'' control message.  The receiving site examines  the
list  to  see which articles it does not currently have, and
sends it back to the upstream site as a ``sendme''  message.
The original site receives this message and prepares a batch
in the standard way.

     Note that this has nothing to do with NNTP.   It  is  a
specialized  type  of  batched  feed  that  is not used very
often.  To do ihave/sendme with a  site  named  remote,  the
local  site must either have a ``to.remote'' newsgroup or be
compiled with MERGE_TO_GROUPS set to ``DO''

     Accepting an ihave/sendme feed  is  easy.   Suppose  an
``ihave''  message  is  received  from  a site named remote.
When _i_n_n_d processes the message it will invoke the appropri-
ate  control script, /_u_s_r/_l_o_c_a_l/_n_e_w_s/_b_i_n/_c_o_n_t_r_o_l/_i_h_a_v_e.  The
script will filter the body using  _g_r_e_p_h_i_s_t_o_r_y,  creating  a
list  of Message-ID's not found in the _h_i_s_t_o_r_y database.  It
uses this output to  create  a  ``sendme''  control  article
which  is posted to the ``to.remote'' newsgroup using _i_n_e_w_s.
This article will then be queued and sent to remote  in  the
normal  way.   The  remote  site  will then send the desired
articles back.

     Providing an ihave/sendme feed is a  bit  more  compli-
cated.  First, you must create two entries in your _n_e_w_s_f_e_e_d_s
file.  The first should be named remote.ihave.  Make this  a
``Tf,Wm'' feed that contains the remote's subscription list.
This  entry  results  in  a  a  file  that  accumulates  the
Message-ID's  of  all  articles that remote might want.  The
other entry should  be  named  remote.   This  should  be  a
``Tf,Wn''  feed  that  only  subscribes to the ``to.remote''
newsgroup.  (Actually, if you feed some groups as a standard
feed,  you can put them on the remote entry, rather then the
remote.ihave entry.)

     The next step is to have the ``ihave'' control messages
sent out.  To do this, review the _s_e_n_d-_i_h_a_v_e script and make
sure it is invoked as needed  (usually  out  of  _c_r_o_n).   It
splits  the  batchfile from the remote.ihave _n_e_w_s_f_e_e_d_s entry



                    February 14, 1992





                           - 44 -


and posts ``ihave'' control messages into the  ``to.remote''
newsgroup.   These  messages  will get queued for the remote
entry.

     The next step is to send out any  articles  queued  for
the  remote  entry.   Treat  this  as  a standard UUCP feed,
invoking _s_e_n_d-_u_u_c_p or _s_e_n_d_b_a_t_c_h as appropriate, typically  a
few minutes after _s_e_n_d-_i_h_a_v_e runs.

     When the remote site receives the ``ihave'' message  it
will filter it and send back a ``sendme'' message whose body
is the list of desired Message-ID's.   When  _i_n_n_d  processes
this  message it will invoke the appropriate control script,
/_u_s_r/_l_o_c_a_l/_n_e_w_s/_b_i_n/_c_o_n_t_r_o_l/_s_e_n_d_m_e.  This script  will  call
_g_r_e_p_h_i_s_t_o_r_y  to  turn the list into a list of files appended
to the batchfile  for  remote.   Examine  this  script  (the
filename  should  probably  match the filename in the remote
_n_e_w_s_f_e_e_d_s entry) and send  the  batch  to  the  remote  site
(using _b_a_t_c_h_e_r, often called by _s_e_n_d-_u_u_c_p or _s_e_n_d_b_a_t_c_h).

_2.  _F_e_e_d_i_n_g _a _l_a_r_g_e _n_u_m_b_e_r _o_f _s_i_t_e_s

     _I_n_n_d tries to keep as many batchfiles open for as  long
as possible.  It will normally open as many as it can, using
all the available  descriptors  minus  a  fixed  number  for
internal  use (log files, etc.).  You can explicitly set the
number of files to open by using the ``-o'' flag.

     If you have more outgoing feeds than available descrip-
tors,  _i_n_n_d  will  recycle the files on a a ``least recently
used'' basis.  If most of your feeds get most  articles  (or
you have vastly more feeds then available descriptors), this
will lead to ``file thrashing,'' closing and opening all the
excess  feeds on each article.  To reduce this, you can have
_i_n_n_d use an internal buffer for a site by  using  the  ``I''
parameter  in  the  _n_e_w_s_f_e_e_d_s file.  If a site does not have
its batchfile open, the server will not try to open it until
there  is  more  data  to  be  written  then will fit in the
buffer.  For example, suppose _i_n_n_d was started with ``-o10''
and there are 12 sites, all with ``I512'' in their _n_e_w_s_f_e_e_d_s
entry.  If each article generates 50 bytes (a pathname and a
Message-ID), then _i_n_n_d will close and re-assign two descrip-
tors every 10 or so articles.

     A better alternative is to use funnels and an exploder.
Funnels, specified in the _n_e_w_s_f_e_e_d_s file, let multiple sites
send their output down a single stream.   The  advantage  of
funnels  is  that  this stream can be a channel; the primary
disadvantage is that the funnel specifies what data is to be
written,  not  the individual sites.  (Since most feeds will
want either ``Wn'' or ``Wnm'' entries, this is usually not a
problem.)

     In order for the funnel output to be useful, it usually



                    February 14, 1992





                           - 45 -


must  be  split  into individual, per-site, files.  Programs
that do this type of splitting are called ``exploders.'' INN
provides two exploders, _f_i_l_e_c_h_a_n and _b_u_f_f_c_h_a_n.

     _F_i_l_e_c_h_a_n  is  the  simplest,  and   most   inefficient,
exploder.   It  does  not  keep  any  files open and is very
system-call intensive.  It can be used to  provide  behavior
(and  performance!) that is similar to B2.11 _i_n_e_w_s.  It can,
however, be used as the funnel for an  unlimited  number  of
sites.

     _B_u_f_f_c_h_a_n keeps all its output files open all the  time.
It  should  not be used for more sites then a single process
can have open.  _B_u_f_f_c_h_a_n also  has  flags  to  automatically
flush  its  files,  as well as close and re-open them, every
specified number of articles.  (The  re-open  capability  is
useful  for  things  like _n_n_t_p_l_i_n_k in its ``watch the batch-
file'' mode.) Using _b_u_f_f_c_h_a_n  with  the  ``-l1 -c50''  flags
will give behavior that is similar to the C News _r_e_l_a_y_n_e_w_s.

     _B_u_f_f_c_h_a_n can be run as a full exploder (``Tx'') in  the
_n_e_w_s_f_e_e_d_s file.  This means that you can use _c_t_l_i_n_n_d to send
a command line down _b_u_f_f_c_h_a_n's  input  stream.   (_I_n_n_d  will
also  send  a command whenever newsgroups are modified.) The
only useful message is ``flush'' which will close,  and  re-
open,  the  specified site files.  You should also note that
the flow is one-way; full exploders  cannot  send  any  ack-
nowledgement back.

_3.  _M_a_s_t_e_r/_s_l_a_v_e _r_e_p_l_i_c_a_t_i_o_n

     INN supports a simple model of  replicated  news  data-
bases:  a  single  master  host  pushes  out  updates to its
slaves.  The master is the only host that receives  articles
-  this includes both outside newsfeeds and articles written
by local users.  The slaves only receive articles  from  the
master.

     No special work is required to set up a master host.

     A slave is set up by starting _i_n_n_d with the ``-S'' flag
to  specify the name or IP address of the master host.  This
should be done by modifying the ``FLAG''  variable  in  your
__P_A_T_H__N_E_W_S_B_O_O_T  script.   If _i_n_n_d is started with the ``-S''
flag it will pass this flag on to _n_n_r_p_d.   This  means  that
when  anyone  connects to the slave and does a ``POST'' com-
mand, _n_n_r_p_d will connect to the master and offer  the  arti-
cle.

     Since the _n_n_r_p_d on the slave host will usually add  its
name  to the Path header, you should add ``Ap'' to the _f_l_a_g_s
field of the slave's entry on the master.

     Once the slave has been set up it is necessary to  have



                    February 14, 1992





                           - 46 -


the  master  feed it.  This is done by using an extension to
the NNTP protocol.  This extension, the ``XREPLIC'' command,
is  is  documented  in _i_n_n_d._8.  In order to do this you will
have to set up a _n_e_w_s_f_e_e_d_s entry for the slave.  This should
be  a  standard entry except that you will need to have both
the filename and the replication information written int the
batchfile.   To  do  this, put ``WnR'' in the _f_l_a_g_s field of
the entry.

     When you want to actually  send  the  articles  to  the
slave  site you will have to specify the ``-S'' flag in your
_i_n_n_x_m_i_t command.   Current  versions  of  _n_n_t_p_l_i_n_k  use  the
``-x'' flag.

     When running as a slave, _i_n_n_d is  very  paranoid  about
staying  synchronized with its master.  Most noticeably, you
should make sure that all newgroup and rmgroup control  mes-
sages are handled identically on both systems.







































                    February 14, 1992





                           - 47 -


_A_p_p_e_n_d_i_x _I_V:  _F_i_r_s_t-_t_i_m_e _U_s_e_n_e_t _o_r _N_N_T_P _I_n_s_t_a_l_l_a_t_i_o_n

     Since the needs and administration of systems varies so
much,  I can only give some general guidelines and advice in
this section.  Like UNIX system administration  in  general,
it  is unfortunately still true that most of the job will be
learned ``in the heat of the moment.'' Once you have INN set
up, however, it should not require much attention.  For gen-
eral  problems,  try  posting  to   ``news.sysadmin'';   use
``news.software.nntp'' and ``news.software.b'' for installa-
tion problems.

     Once all the software has been compiled and  installed,
you  must  now get a newsfeed.  This involves having one (or
more) sites pass along to you all  the  articles  that  they
have  received.   Getting  articles  is  a  passive  action,
because it is  generally  more  efficient  that  way.   (The
_n_n_t_p_g_e_t  program  is  primarily a debugging aide and utility
program.  It is not the recommended way to get  a  newsfeed,
and most sites will prefer you not to use it for that.)

     If you already have Usenet access,  you  could  post  a
note  to ``news.admin'' asking for a feed.  Make sure to say
that you are looking for an NNTP connection!  If you  are  a
member of an NSFNet regional network, or subscribe to a com-
mercial IP network, ask your contact there  at  the  network
center.   If  they  do  not provide feeds directly, they can
probably help you find one.  You also might try  writing  to
the  <nntp-managers@colossus.apple.com>  mailing list.  This
will reach the news administrators of many NNTP sites on the
Internet.   (If  you want to join the list, remember to send
it to nntp-managers-request, not nntp-managers!)

     Once have a site willing to give you a feed,  you  need
to get the list of groups that they will give you.  You also
need to create those groups on your  machine.   The  easiest
way  to  do  this is usually to ask them for a copy of their
active file, and for you to add the entries  of  the  groups
that you're interested in.

     Once the groups are set up, your newsfeed will periodi-
cally connect to your NNTP server and offer it any new arti-
cles that have arrived since the last connection.  _I_n_n_d will
accept  the connection, receive the articles, and queue them
up for any sites that you feed.

     The next step is to set it up so that your articles are
sent  back to your newsfeed.  To do this, create a _n_e_w_s_f_e_e_d_s
entry, using the same name that shows up in the Path  header
that  you  see.   (If you use a different name, then use the
``excludes'' sub-field to  avoid  offering  back  everything
they  offer  you.)  This  is usually done by giving them all
non-local articles as a  file  feed.   For  example,  ``Foo,
Incorporated''  does  not  give any foo.* articles to anyone



                    February 14, 1992





                           - 48 -


else.

     When someone at your site writes an article, _i_n_n_d  will
record  the  filename  in  the  batch file for your upstream
site.  Either _s_e_n_d-_n_n_t_p or _n_n_t_p_s_e_n_d will flush and lock  the
batchfile,  and  then  call _i_n_n_x_m_i_t to connect to the remote
site and send these queued articles out.   You  should  edit
the  script to list the sites you want, and arrange for _c_r_o_n
to run this script on a regular basis.  You can  run  it  as
often as you like, but 10 minutes is a common interval.

     If you want to feed any sites via UUCP, then  you  will
have  to  set up file feed entries for them in the _n_e_w_s_f_e_e_d_s
file, and arrange to have _c_r_o_n run the _s_e_n_d-_u_u_c_p  script  as
desired.   (UUCP  batches  are typically only done every few
hours.)

     Once you have news flowing in and out  of  the  system,
you  will have to expire it or your disks will fill up.  The
_n_e_w_s._d_a_i_l_y script should be run by _c_r_o_n in the middle of the
night.   It  will  summarize  that day's log files, and then
call _e_x_p_i_r_e to purge old news.  You might also want to  have
_c_r_o_n  run  _r_n_e_w_s  hourly  to  pick  up  any stalled batches.
Finally, if your feeds change IP address, you might  want  a
daily  job  that  does  ``ctlinnd  reload  hosts.nntp "flush
cache"''.  This is because _i_n_n_d does not currently  time-out
DNS entries.

     You will generally want to set up the _c_r_o_n jobs so that
they  are run as the news administrator, and not as root.  A
good version of _c_r_o_n that makes it easy to do  this  can  be
found on gatekeeper.dec.com in pub/misc/vixie/cron.tar.Z.

     You will also need to get one or more programs to  read
news.   There  are several freely-available programs around.
_R_n is popular, and is probably the best place to start.  The
official  distribution  is  available  for  anonymous FTP at
tmc.edu in the _r_n directory.

     Welcome to Usenet, and have fun!

















                    February 14, 1992





                           - 49 -


_A_p_p_e_n_d_i_x _V:  _N_e_w_s _o_v_e_r_v_i_e_w _d_a_t_a_b_a_s_e

     There are now many newsreaders available that are  able
to  do ``threading.'' This is the ability to track a discus-
sion within a newsgroup by using the References  header  (or
other  data), regardless of changes in headers like the Sub-
ject line.  Examples of these readers include _n_n,  _t_r_n,  and
_g_n_u_s,  and  more  are becoming available.  Until recently, a
major problem with these readers is that they all required a
specialized  external  database that contained the threading
data.

     In  late  1992,  Geoff  Collyer   <geoff@world.std.com>
released  the  _n_o_v,  or  ``news  overview,''  package.  This
included database tools and,  and  client  access  routines,
that let the current threaded newsreaders use a common, tex-
tual, database.  An overview database  typically  adds  adds
about  7-9%  to  your storage requirements.  By default, the
overview files are stored in the spool  directory;  you  can
change  this to use an alternate tree that mirrors the spool
hierarchy by changing the __P_A_T_H__O_V_E_R_V_I_E_W_D_I_R parameter.

     INN includes full support  for  creating  and  expiring
news  overview databases.  To do this, add an entry like the
following to your _n_e_w_s_f_e_e_d_s file:

        overview:*:Tc,WO:/path/to/bin/overchan

(Make sure to replace /_p_a_t_h/_t_o/_b_i_n with the  value  of  your
__P_A_T_H__N_E_W_S_B_I_N  parameter.) Then reload the _n_e_w_s_f_e_e_d_s file or
restart your server.  To create the  initial  database,  run
the following command after you have started _o_v_e_r_c_h_a_n:

        expireover -a -s

You will also need to expire the overview data.  The easiest
way  to  do this is to add the ``expireover'' keyword to the
_c_r_o_n job that runs _n_e_w_s._d_a_i_l_y.

     The _n_n_r_p_d server includes  two  command  extensions  to
access  the  database; they are documented in the ``protocol
extensions'' part of _d_o_c/_n_n_r_p_d._8.  INN does not include  any
client  code  or modifications to any newsreaders to use the
overview data.  Most maintainers have agreed to support  the
overview  database,  including the INN extensions for remote
access.  You can find prototype  versions  of  many  readers
(work  done  by  Geoff)  on  world.std.com  in the directory
src/news; look for files named _r_e_a_d_e_r.dist.tar.Z.









                    February 14, 1992





                           - 50 -


_A_p_p_e_n_d_i_x _V_I:  _L_i_m_i_t_e_d _M_I_M_E _S_u_p_p_o_r_t

     This version of INN includes limited support for  MIME,
the  Multipurpose Internet Mail Extensions, described in RFC
1341.  The support is the ability to do limited transport of
arbitrary  MIME  messages, and _n_n_r_p_d can add MIME headers to
all local postings that do not have them.

     In addition, there are patches available  for  _n_n_t_p_l_i_n_k
that  allow  it  to  do MIME transport.  The patches are not
(yet) part of the official release; if you need  them,  con-
tact Christophe Wolfhugel <Christophe.Wolfhugel@hsc-sec.fr>;
he did most of the INN work, too.

     You should be very careful if you have _n_n_r_p_d  add  MIME
headers.    To  do  this,  edit  _i_n_n._c_o_n_f  as  indicated  in
_d_o_c/_i_n_n._c_o_n_f._5.  Once this is done, all articles posted will
get  MIME  headers added.  Existing MIME headers will not be
modified, but missing  ones  will  be  added.   The  default
values to add to _i_n_n._c_o_n_f are these:

        mime-version: 1.0
        mime-contenttype text/plain; charset=us-ascii
        mime-encoding: 7bit

An internationalized site might want to use these values:

        mime-version: 1.0
        mime-contentType: text/plain; charset=iso-8859-1
        mime-encoding: 8bit

It is possible to use these values because  INN  provides  a
clean eight-bit data path.  Unless you make special arrange-
ments with your peers, however, you must transmit  seven-bit
data.   Doing  this  will  require  special transmit agents.
Note that _n_n_r_p_d is not a Mime-compatible reader.   You  must
have  software  to extract the data and present it appropri-
ately.

     If you configure your site to use seven-bit data,  then
you  must  also make sure that none of your software creates
eight-bit articles.  _N_n_r_p_d does not  verify  this.   If  you
configure  your site to use eight-bit data, then ASCII works
fine, but remember that in quoted-printable long  lines  are
cut  and  that  the  equal  sign  (``='') is quoted; this is
really bad for source code postings, among others.

     The character set can also cause problems.  If you  use
``iso-8859-1'' you must make sure that your posting software
uses this character set  (e.g.,  not  CP-437  under  MS-DOS)
because _n_n_r_p_d does not do any conversion.

     In general, be very cautious.




                    February 14, 1992





                           - 51 -


     MIME articles can only be sent using _i_n_n_x_m_i_t;  work  on
_b_a_t_c_h_e_r  is in progress.  Unless the ``-M'' flag is used, no
MIME conversions are done.  If the flag is used, the follow-
ing   happens:  Articles  with  a  Content-Transfer-Encoding
header of ``8bit'' or ``binary'' are forwaded  in  ``quoted-
printable''  format (the ``base64'' format will be available
soon).  All other articles -- in particular,  those  without
MIME  headers,  those  of type ``message'' or ``multipart,''
those with Content-Transfer-Encoding header of  ``7bit''  --
are forwarded without any change.















































                    February 14, 1992


