Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
INNFEED(8)		   InterNetNews Documentation		      INNFEED(8)

NAME
     innfeed, imapfeed - Multi-host, multi-connection, streaming NNTP feeder

SYNOPSIS
     innfeed [-ChmMvxyz] [-a spool-dir] [-b directory] [-c config-file] [-d log-
     level]  [-e  bytes]  [-l logfile] [-o bytes] [-p pid-file] [-s command] [-S
     status-file] [file]

DESCRIPTION
     innfeed implements the NNTP protocol for transferring news between  comput-
     ers.   It handles the standard IHAVE protocol as well as the CHECK/TAKETHIS
     streaming extension.  innfeed can feed any number of remote hosts	at  once
     and  will	open  multiple	connections to each host if configured to do so.
     The only limitations are the process limits for open file	descriptors  and
     memory.

     As  an  alternative  to  using NNTP, INN may also be fed to an IMAP server.
     This is done by using an executable called imapfeed, which is identical  to
     innfeed  except for the delivery process.	The new version has two types of
     connections: an LMTP connection to deliver regular  messages  and	an  IMAP
     connection to handle control messages.

     Used in conjunction with delayer(8), innfeed can send a delayed feed to re-
     mote  peers or to another local instance of innd, notably to permit the re-
     jection of spam before it actually arrives.

MODES
     innfeed has three modes of operation: channel, funnel-file and batch.

     Channel mode is used when no filename is given on the command line, the in-
     put-file keyword is not given in the config file, and the -x option is  not
     given.   In  channel  mode, innfeed runs with stdin connected via a pipe to
     innd.  Whenever innd closes this pipe (and it has	several  reasons  during
     normal  processing to do so), innfeed will exit.  It first will try to fin-
     ish sending all articles it was in the middle of transmitting, before issu-
     ing a QUIT command.  This means innfeed may take a while to exit  depending
     on  how  slow your peers are.  It never (well, almost never) just drops the
     connection.  The recommended way to restart innfeed  when	run  in  channel
     mode  is  therefore  to tell innd to close the pipe and spawn a new innfeed
     process.  This can be done with "ctlinnd flush feed" where feed is the name
     of the innfeed channel feed in the newsfeeds file.

     Funnel-file mode is used when a filename is given as an argument or the in-
     put-file keyword is given in the config  file.   In  funnel-file  mode,  it
     reads  the  specified file for the same formatted information as innd would
     give in channel mode.  It is expected that innd is continually  writing  to
     this file, so when innfeed reaches the end of the file, it will check peri-
     odically  for  new  information.	To  prevent the funnel file from growing
     without bounds, you will need to periodically move the file to the side (or
     simply remove it) and have innd flush the file.  Then, after  the	file  is
     flushed  by innd, you can send innfeed a SIGALRM, and it too will close the
     file and open the new file created by innd.  Something like:

	 innfeed -p <pathrun in inn.conf>/innfeed.pid my-funnel-file &
	 while true; do
	     sleep 43200
	     rm -f my-funnel-file
	     ctlinnd flush funnel-file-site
	     kill -ALRM `cat <pathrun>/innfeed.pid`
	 done

     Batch mode is used when the -x flag is used.  In batch mode,  innfeed  will
     ignore  stdin,  and will simply process any backlog created by a previously
     running innfeed.  This mode is not normally needed  as  innfeed  will  take
     care of backlog processing.

CONFIGURATION
     innfeed expects a couple of things to be able to run correctly: a directory
     where it can store backlog files and a configuration file to describe which
     peers it should handle.

     The  configuration file is described in innfeed.conf(5).  The -c option can
     be used to specify a different file, and -b to specify a different  backlog
     directory.   The  backlog-* keys in the configuration file parameterize the
     behaviour of backlogging.	For each peer (say, "foo"), innfeed  manages  up
     to 4 files in the backlog directory:

     * A foo.lock file, which prevents other instances of innfeed from interfer-
       ing with this one.

     * A foo.input file which has old article information innfeed is reading for
       re-processing.

     * A  foo.output  file where innfeed is writing information on articles that
       could not be processed (normally due to a slow or blocked  peer).   Every
       backlog-rotate-period  seconds,	innfeed  checks whether it is not empty,
       and, if no foo file exists and  foo.input  is  empty,  will  then  rename
       foo.output to foo.input and start reading from it.

     * A  foo  file  that is never created by innfeed, but if innfeed notices it
       when checking every backlog-newfile-period seconds, it will rename it  to
       foo.input at the next opportunity (every backlog-rotate-period seconds if
       foo.input is empty) and will start reading from it.  This lets you create
       a batch file and put it in a place where innfeed will find it.

     You  should never alter the foo.input or foo.output files of a running inn-
     feed.  The format of these last three files is one of the following:

	 /path/to/article <message-id>
	 @token@ <message-id>

     This is the same as the first two fields of the lines innd  feeds	to  inn-
     feed,  and  the same as the first two fields of the lines of the batch file
     innd will write if innfeed is unavailable for some  reason.   When  innfeed
     processes	its  own  batch files, it ignores everything after the first two
     whitespace separated fields, so moving the innd-created batch file  to  the
     appropriate spot will work, even though the lines have extra fields.

     The  first  field	can also be a storage API token.  The two types of lines
     can be intermingled; innfeed will use the storage manager	if  appropriate,
     and otherwise treat the first field as a filename to read directly.

     innfeed  writes  its current status to the file innfeed.status (or the file
     given by the -S option).  This file contains details on the  process  as  a
     whole, and on each peer this instance of innfeed is managing.

     If  innfeed  is  told to send an article to a host it is not managing, then
     the article information will be put into a file matching the  pattern  inn-
     feed-dropped.*,  with part of the file name matching the pid of the innfeed
     process that is writing to it.  innfeed will not process this  file  except
     to write to it.  If nothing is written to the file, then it will be removed
     if  innfeed exits normally.  Otherwise, the file remains, and procbatch can
     be invoked to process it afterwards.

SIGNALS
     Upon receipt of a SIGALRM, innfeed will close the funnel file specified  on
     the command line, and will reopen it (see funnel file description above).

     innfeed  with catch SIGINT and will write a large debugging snapshot of the
     state of the running system into a file named innfeed.snapshot in pathlog.

     innfeed will catch SIGHUP and will reload	both  the  config  and	the  log
     files.  See innfeed.conf(5) for more details.

     innfeed will catch SIGCHLD and will close and reopen all backlog files.

     innfeed will catch SIGTERM and will do an orderly shutdown.

     Upon  receipt  of	a SIGUSR1, innfeed will increment the debugging level by
     one; receipt of a SIGUSR2 will decrement it by one.   The	debugging  level
     starts  at  zero (unless the -d option it used), in which case no debugging
     information is emitted.  A larger value for the level means more  debugging
     information.  Numbers up to 5 are currently useful.

SYSLOG ENTRIES
     There  are  3  different categories of syslog entries for statistics: host,
     connection and global.

     The host statistics are generated for a given peer at regular intervals af-
     ter the first connection is made (or, if the remote is  unreachable,  after
     spooling  starts).   The  host  statistics give totals over all connections
     that have been active during the given time  frame.   For	example  (broken
     here to fit the page, with "vixie" being the peer):

	 May 23 12:49:08 news innfeed[16015]: vixie checkpoint
	     seconds 1381 offered 2744 accepted 1286 refused 1021
	     rejected 437 missing 0 accsize 8506220 rejsize 142129
	     spooled 990 on_close 0 unspooled 240 deferred 10/15.3
	     requeued 25 queue 42.1/100:14,35,13,4,24,10

     The meanings of these fields are:

     seconds
       The time since innfeed connected to the host or since the statistics were
       reset by a "final" log entry.

     offered
       The  number  of IHAVE commands sent to the host if it is not in streaming
       mode.  The sum of the number of TAKETHIS commands sent when no-CHECK mode
       is in effect plus the number of CHECK commands  sent  in  streaming  mode
       (when no-CHECK mode is not in effect).

     accepted
       The number of articles which were sent to the remote host and accepted by
       it.

     refused
       The  number  of articles offered to the host that it indicated it did not
       want because it had already seen the message-ID.  The remote  host  indi-
       cates  this  by	sending  a 435 response to an IHAVE command or a 438 re-
       sponse to a CHECK command.

     rejected
       The number of articles transferred to the host that it did not accept be-
       cause it determined either that it already had the article or it did  not
       want  it  because  of  the  article's  Newsgroups  or Distribution header
       fields, etc.  The remote host indicates that it is rejecting the  article
       by sending a 437 or 439 response after innfeed sent the entire article.

     missing
       The  number  of	articles which innfeed was told to offer to the host but
       which were not present in the article spool.  These articles were  proba-
       bly  cancelled  or  expired  before innfeed was able to offer them to the
       host.

     accsize
       The number of bytes of all accepted articles transferred to the host.

     rejsize
       The number of bytes of all rejected articles transferred to the host.

     spooled
       The number of article entries that were written to  the	.output  backlog
       file  because  the  articles either could not be sent to the host or were
       refused by it.  Articles are generally spooled either because  new  arti-
       cles  are  arriving more quickly than they can be offered to the host, or
       because innfeed closed all the connections to the host and pushed all the
       articles currently in progress to the .output backlog file.

     on_close
       The number of articles that were spooled when innfeed closed all the con-
       nections to the host.

     unspooled
       The number of article entries that were	read  from  the  .input  backlog
       file.

     deferred
       The  first number is the number of articles that the host told innfeed to
       retry later by sending a 431 or 436 response.  innfeed  immediately  puts
       these articles back on the tail of the queue.

       The  second number is the average (mean) size of deferred articles during
       the previous logging interval

     requeued
       The number of articles that were in progress on connections when  innfeed
       dropped	those connections and put the articles back on the queue.  These
       connections may have been broken by a network problem or became unrespon-
       sive causing innfeed to time them out.

     queue
       The first number is the average (mean) queue  size  during  the	previous
       logging interval.  The second number is the maximum allowable queue size.
       The  third number is the percentage of the time that the queue was empty.
       The fourth through seventh numbers are the percentages of the  time  that
       the  queue was >0% to 25% full, 25% to 50% full, 50% to 75% full, and 75%
       to <100% full.  The last number is the percentage of the  time  that  the
       queue was totally full.

     If  the  -z option is used (see below), then when the peer stats are gener-
     ated, each connection will log its stats too.  For example, for  connection
     number zero (from a set of five):

	 May 23 12:49:08 news innfeed[16015]: vixie:0 checkpoint
	     seconds 1381 offered 596 accepted 274 refused 225
	     rejected 97 accsize 773623 rejsize 86591

     If  you  only open a maximum of one connection to a remote, then there will
     be a close correlation between connection numbers and host numbers, but  in
     general  you cannot tie the two sets of number together in any easy or very
     meaningful way.  When a connection closes, it will always log its stats.

     If all connections for a host get closed together, then the host  logs  its
     stats  as	"final"  and  resets  its counters.  If the feed is so busy that
     there is always at least one connection open and running, then  after  some
     amount  of time (set via the config file), the host stats are logged as fi-
     nal and reset.  This is to make generating  higher  level	stats  from  log
     files, by other programs, easier.

     There  is one log entry that is emitted for a host just after its last con-
     nection closes and innfeed is  preparing  to  exit.   This  entry	contains
     counts  over  the	entire life of the process.  The "seconds" field is from
     the first time a connection was  successfully  built,  or	the  first  time
     spooling started.	If a host has been completely idle, it will have no such
     log entry.

	 May 23 12:49:08 news innfeed[16015]: decwrl global
	     seconds 1381 offered 34 accepted 22 refused 3 rejected 7
	     missing 0 accsize 81277 rejsize 12738 spooled 0 unspooled 0

     The  final  log entry is emitted immediately before exiting.  It contains a
     summary of the statistics over the entire life of the process.

	 Feb 13 14:43:41 news innfeed[22344]: ME global
	     seconds 15742 offered 273441 accepted 45750 refused 222008
	     rejected 3334 missing 217 accsize 93647166 rejsize 7421839
	     spooled 10 unspooled 0

OPTIONS
     innfeed takes the following options.

     -a spool-dir
	 The -a flag is used to specify the top of the article spool tree.  inn-
	 feed does a chdir(2) to this directory, so it should probably be an ab-
	 solute path.  The default is patharticles as set in inn.conf.

     -b directory
	 The -b flag may be used to specify a different  directory  for  backlog
	 file  storage and retrieval, as well as for lock files.  If the path is
	 relative, then it is relative to pathspool as set in inn.conf.  The de-
	 fault is "innfeed".

	 You are encouraged to use the backlog-directory parameter in  the  con-
	 figuration   file   to  declare  a  specific  directory,  as  otherwise
	 news.daily won't get it and some maintenance operations on the  backlog
	 directory won't be performed.

     -c config-file
	 The -c flag may be used to specify a different config file from the de-
	 fault	value.	 If the path is relative, then it is relative to pathetc
	 as set in inn.conf.  The default is innfeed.conf.

	 Note that if you use a different name than the default  one,  and  also
	 change the default setting of log-file or pid-file in the configuration
	 file,	scanlogs  will	not be able to rotate the debug log files (their
	 names are searched in innfeed.conf  and  innfeed-delayed.conf).   Other
	 maintenance  operations  performed  by news.daily won't also be done if
	 backlog-directory is changed from its default in a  configuration  file
	 named differently.

     -C  The  -C  flag is used to have innfeed simply check the config file, re-
	 port on any errors and then exit.

     -d log-level
	 The -d flag may be used to specify the initial logging level.	All  de-
	 bugging  messages go to stderr (which may not be what you want, see the
	 -l flag below).

     -e bytes
	 The -e flag may be used to specify the size limit (in	bytes)	for  the
	 .output  backlog files innfeed creates.  If the output file gets bigger
	 than 10% more than the given number, innfeed will  replace  the  output
	 file  with  the  tail of the original version.  The default value is 0,
	 which means there is no limit.

     -h  Use the -h flag to print the usage message.

     -l logfile
	 The -l flag may be used to specify a different log  file  from  stderr.
	 As  innd  starts  innfeed with stderr attached to /dev/null, using this
	 option can be useful in catching any abnormal error  messages,  or  any
	 debugging messages (all "normal" errors messages go to syslog).

	 You  are  encouraged to use the log-file parameter in the configuration
	 file to declare a specific file name, as otherwise scanlogs  won't  get
	 it and the log file won't be rotated.

     -m  The  -m  flag is used to turn on logging of all missing articles.  Nor-
	 mally, if an article is missing, innfeed keeps a  count,  but	logs  no
	 further information.  When this flag is used, details about message-IDs
	 and expected path names are logged.

     -M  If innfeed has been built with mmap support, then the -M flag turns OFF
	 the use of mmap(); otherwise, it has no effect.

     -o bytes
	 The -o flag sets a value of the maximum number of bytes of article data
	 innfeed  is  supposed	to  keep in memory.  This does not work properly
	 yet.

     -p pid-file
	 The -p flag is used to specify the file name to write the  pid  of  the
	 process  into.   A  relative  path  is  relative  to  pathrun as set in
	 inn.conf.  The default is innfeed.pid.

	 You are encouraged to use the pid-file parameter in  the  configuration
	 file  to  declare a specific file name, as otherwise scanlogs won't get
	 it and the log file won't be properly flushed before being rotated.

     -s command
	 The -s flag specifies the name of a command to run in a subprocess  and
	 read  article information from.  This is similar to channel mode opera-
	 tion, only that command takes the place usually occupied by innd.

     -S status-file
	 The -S flag specifies the name of the file to write the periodic status
	 to.  If the path is relative, it is considered relative to  pathlog  as
	 set in inn.conf.  The default is innfeed.status.

     -v  When the -v flag is given, version information is printed to stderr and
	 then innfeed exits.

     -x  The  -x flag is used to tell innfeed not to expect any article informa-
	 tion from innd but just to process any backlog  files	that  exist  and
	 then exit.

     -y  The  -y  flag	is  used to allow dynamic peer binding.  If this flag is
	 used and article information is received from innd  that  specifies  an
	 unknown peer, then the peer name is taken to be the IP name too, and an
	 association  with  it	is  created.  Using this, it is possible to only
	 have the global defaults in the innfeed.conf file,  provided  the  peer
	 name as used by innd is the same as the IP name.

	 Note  that  innfeed  with  -y and no peer in innfeed.conf would cause a
	 problem that innfeed drops the first article.

     -z  The -z flag is used to cause each connection, in a parallel  feed  con-
	 figuration,  to  report  statistics when the controller for the connec-
	 tions prints its statistics.

BUGS
     When using the -x option, the config file entry's initial-connections field
     will be the total number of connections created and  used,  no  matter  how
     many  big	the  batch file, and no matter how big the max-connections field
     specifies.  Thus a value of 0 for initial-connections  means  nothing  will
     happen in -x mode.

     innfeed  does  not  automatically	grab the file out of pathoutgoing.  This
     needs to be prepared for it by external means.

     Probably too many other bugs to count.

ALTERNATIVE
     An alternative to innfeed can be innduct, maintained  by  Ian  Jackson  and
     available	at <http://www.chiark.greenend.org.uk/ucgi/~ian/git-manpage/inn-
     duct.git/innduct.8>.  It is intended to solve a design issue in the way in-
     nfeed works.  As a matter of fact, the program feed protocol spoken between
     innd and innfeed is lossy: if innfeed  dies  unexpectedly,  articles  which
     innd  has	written to the pipe to innfeed will be skipped.  innd has no way
     of telling which articles those are, no useful records, and no attempts  to
     resend these articles.

FILES
     pathbin/innfeed
	 The binary program itself.

     pathetc/innfeed.conf
	 The configuration file.

     pathspool/innfeed
	 The directory for backlog files.

HISTORY
     Written  by James Brister <brister@vix.com> for InterNetNews.  Converted to
     POD by Julien Elie.

     Earlier versions of innfeed (up to 0.10.1) were shipped separately; innfeed
     is now part of INN and shares the same version number.

SEE ALSO
     ctlinnd(8),  delayer(8),  inn.conf(5),  innfeed.conf(5),	innd(8),   proc-
     batch(8).

INN 2.8.0			   2025-05-10			      INNFEED(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=innfeed&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help