Inhalt

13. INN-Konfiguration

Zunächst muß man INN natürlich installieren, wofür man entweder ein vorkonfiguriertes Binary verwenden kann, oder halt sein Binary selber compiliert, was anhand des Beispiel-config.data aus dem newspak recht einfach möglich sein sollte. Hier habe ich gegenüber dem newspak folgende Änderungen vorgenommen (das ist nicht das gesamte config.data sondern nur die Unterschiede zwischen config.data.newspak und meinen Anpassungen):

_EXITVAL               void
INEWS_PATH             DONT
INND_NICE_KIDS         DO
INND_NICE_VALUE        10
DEFAULT_CUTOFF         30
HAVE_UUSTAT            DO
_PATH_LOGFILE          /var/log/inn/log
_PATH_MOST_LOGS        /var/log/inn
Weiterhin habe ich die Pfade so geändert, daß für NEWSPAK_NEWS_LIB_DIR /usr/local/lib/news und für NEWSPAK_SPOOL_DIR /var/spool/news verwendet wird. Slackware verwendt meines Wissens /usr/lib/news, so daß man hier ggf. einen Link anbringen sollte, oder etwas umdenken muß.

Nach der Installation sind in /usr/local/lib/news und dessen Unterverzeichnissen diverse Änderungen vorzunhemen. Ich werde hier zu konfigurierenden Files einfach nacheinander besprechen:

Zunächst einige kleinere Files: /usr/local/lib/news/passwd.nntp und /usr/local/lib/news/nntpsend.ctl sollten nur Kommentare enthalten und ansonsten leer sein. /usr/local/lib/news/hosts.nntp enthält nur folgende eine Zeile:

##  hosts.nntp - names and addresses that feed us news
##  Format
##      <host>:
##      <host>:<password>
##  <host> can be a name or IP address; no wildcards.  Any hosts not
##  listed here are handed off to nnrpd.
spinnaker.rhein.de:
Damit darf nur mein eigener Rechner auf meinen NNTP-Server zugreifen.

/usr/local/lib/news/nnrp.access sollte wie folgt aussehen:

##  nnrp.access - access file for on-campus NNTP sites
##  Format:
##      <host>:<perm>:<user>:<pass>:<groups>
##  Connecting host must be found in this file; the last match found is
##  used, so put defaults first.
##      <host>          Wildcard name or IP address
##      <perm>          R to read; P to post
##      <user>          Username for authentication before posting
##      <pass>          Password, for same reason
##      <groups>        Newsgroup patterns that can be read or not read
##  To disable posting put a space in the <user> and <pass> fields, since
##  there is no way for client to enter one.
##
## Default is no access, no way to authentication, and no groups.
*:: -no- : -no- :!*
##  Foo, Incorporated, hosts have no password, can read anything.
*:Read Post:::spinnaker*
localhost:Read Post:::*
spinnaker.rhein.de:Read Post:::*
Damit darf jeder per NNRP (das ist das Protokoll, mit dem Newsreader mit dem Newsserver kommunizieren) auf die Newsgroups, deren Name mit spinnaker beginnt lesen und auch dorthinein posten. Alle anderen Newsgroups dürfen sie nicht lesen und auf meinem Rechner darf jeder jede Newsgroup lesen und darin schreiben.

Als nächstes ist /usr/local/lib/news/inn.conf wie folgt zu konfigurieren:

##  inn.conf -- inn configuration data
##  Format:
##      <parameter>:<whitespace><value>
##  Used by various programs and libinn.  The following parameters are defined:
##      domain          Local domain, without leading period.
##      fromhost        What to put in the From line; default is FQDN
##                      of the local host.
##      moderatormailer Where to mail moderated postings, if not found
##                      in the moderators file; see moderators(5).
##      pathhost        What to put in the Path and Xref headers; default
##                      is FQDN of the local host.
##      organization    If $ORGANIZATION doesn't exist.  What to put in
##                      the Organization header if blank.
##      server          If $NNTPSERVER doesn't exist.  Local NNTP server
##                      host to connect to.
##
organization:   private site, Widdig, Germany
#server:        spinnaker.rhein.de
server:         localhost

Als nächstes das wichtigste File der INN-Konfiguration /usr/local/lib/news/newsfeeds, in dem festgelegt wird, welche Newsgroups an wen exportiert werden sollen.

##  newsfeeds - determine where Usenet articles get sent
##  Format:
##      site[/exclude,exclude...]\
##              :pattern,pattern...[/distrib,distrib...]\
##              :flag,flag...\
##              :param
##  Summary of flags:
##      <size           Article must be less then size bytes.
##      Aitems          Article checks -- d (must have Distribution header)
##                      p (don't check for site in Path header).
##      Bhigh/low       Internal buffer size before writing to output.
##      H[count]        Article must have less then count hops; default is 1.
##      Isize           Internal buffer size (if a file feed)
##      Nm              Only moderated groups that match the patterns.
##      Nu              Only unmoderated groups that match the patterns.
##      Ssize           Start spooling if more than size bytes get queued.
##      Ttype           Feed types -- f (file) m (funnel; param names the
##                      real entry) p (pipe to program) c (send to stdin
##                      channel of param's sub-process); x (like c, but
##                      handles commands on stdin).
##      Witems          What to write -- b (article bytesize) f (full path)
##                      g (first newsgroup) m (Message-ID) n (relative
##                      path) s (site that fed article) t (time received)
##                      * (names of funnel feed-in's or all sites that get
##                      the article) N (Newsgroups header) D (Distribution
##                      header) H (all headers) O (overview data) R
##                      (replication data).
##  Param field depends on T flag.  For Tf, relative paths are from the
##  out.going directory.  For Tp and Tc, it is a shell command to execute.
##  If a Tm refers to this entry (which will have its own T param) then "*"
##  is expanded to all the funnel sites that triggered this one.  Useful
##  for spawning one mail process, e.g.
##
##  This file is complicated -- see newsfeeds.5!

# ME zeigt an, welche Newsgroups hier bestellt werden sollen:
ME\
        :!*\
        ::

# Alles, was per FidoGate verschickt werden soll: 
# - fido.* außer fido.junk, denn das ist eine Pseudo-Newsgroup in der
#   nur Artikel landen, die nicht ordentlich in Fidogate eingetragen
#   wurden, 
# - ger.*, die Gernet-Newsgroups
# Wenn auch Internet ueber Fido (z.B. mittels fido.de) reinkommt, dann
# sind hier auch noch die entsprechenden Newsgroups (rec.*, comp.*,
# de.*, alt.*, gnu.*,...) einzutragen.
# 
# Alle meine Uplinks haben den gleichen Namen (über die Datei
# /usr/local/lib/fidogate/hosts), naemlich flokiste.fido.de, daher ist
# dieser hier einzutragen, damit Mails, bei denen flokiste.fido.de im
# Pfad steht, nicht mehr dorthin exportiert werden (sonst gäbe es
# Dupes).
# Da ich Fido und Internet bei mir absolut auseinander halten möchte
# (die was über Fido reinkommt darf nicht ins Internet exportiert
# werden und umgekehrt), habe ich rhein hier ebenfalls als Alias
# eingetragen. 
fidogate/flokiste.fido.de,rhein\
        :fido.*,!fido.junk,ger.*\
        :Tf,Wnb:

# Dies ist mein Internet (Usenet)-Feed.
# Hier werden die Areas comp.*,de.*,rec.*,alt.*,gnu.* exportiert.
# Damit hier nichts aus dem Fido rausgeht, steht flokiste.fido.de als
# Alias für rhein.
rhein/flokiste.fido.de\
        :comp.*,de.*,rec.*,alt.*,gnu.*\
        :Tf,Wfb:

Als nächstes ist das File /usr/local/lib/news/expire.ctl zu konfigurieren, welches angibt, wann welche Newsgroups expiren.

##  expire.ctl - expire control file
##  Format:
##      /remember/:<keep>
##      <patterns>:<modflag>:<keep>:<default>:<purge>
##  First line gives history retention; other lines specify expiration
##  for newsgroups.  Must have a "*:A:..." line which is the default.
##      <patterns>      wildmat-style patterns for the newsgroups
##      <modflag>       Pick one of M U A -- modifies pattern to be only
##                      moderated, unmoderated, or all groups
##      <keep>          Mininum number of days to keep article
##      <default>       Default number of days to keep the article
##      <purge>         Flush article after this many days
##  <keep>, <default>, and <purge> can be floating-point numbers or the
##  word "never."  Times are based on when received unless -p is used;
##  see expire.8

##  If article expires before 14 days, we still remember it for 14 days in
##  case we get offered it again.  Depending on what you use for the innd
##  -c flag and how paranoid you are about old news, you might want to
##  make this 28, 30, etc.
/remember/:30

# Alle Newsgroups für mindestens 3, maximal 90 und normalerweise 5
# Tage behalten (relativ zur Ankunftszeit)
*:A:3:5:90
*:U:3:5:90
# Moderierte Newsgroups länger behalten:
*:M:5:9:90

# Lokale Newsgroups normalerweise 90 Tage behalten:
spinnaker.*:A:3:90:90

# Deutsche Newsgroups 7 Tage behalten:
de.*:A:3:7:90
# de.comp.os.linux.* etwas länger:
de.comp.os.linux.*:A:3:14:90

# Moderierte c.o.l.* länger behalten:
comp.os.linux.*:M:5:90:90

# Fido etwas länger behalten:
fido*:A:3:9:90
ger*:A:3:8:90

# Junk schnell löschen:
fido.junk:A:3:4:90

# Und noch eine Ausnahme:
fido.ger.linux:A:3:24:90
Das kann man natürlich alles nach eigenem Geschmack ändern. Allerdings sollte man die Default-Zeiten (insbesondere für Fido) möglichst nicht weiter verkürzen, da die Messages meist lange unterwegs sind und ansonsten gar nicht erst ins Newssystem eingestellt werden, sondern direkt expiren.

Als nächstes ist das File /usr/local/lib/news/send-fidogate zu erstellen, das regelmäßig die zu verschickenden Fido-Echomails zusammenpackt. Einen Prototyp für dieses File findet man unter fidogate/config/inn/send-fidogate, allerdings muß man im Anfang des Files zwei kleinere Änderungen an den Pfaden vornehmen:

 #! /bin/sh
 #:ts=8
 ##  SH script to send batches to FIDOGATE

 ##  =()<. @<_PATH_SHELLVARS>@>()=
 . /usr/local/lib/news/innshellvars

 #
 # FIDOGATE rfc2ftn
 #
 RFC2FTN="/usr/local/lib/fidogate/rfc2ftn -w Normal -b -n "

Damit die News exportiert werden können, muß ein Batch-Verzeichnis für sie existieren, das /var/spool/news/out.going heißt, news.news gehört und die Permissions 775 haben sollte. Im Gegensatz zu cnews dürfen in diesem Verzeichnis keine Unterverzeichnisse für die einzelnen Newsfeeds angelegt werden, denn INN verwendet nur ein File je Feed, welches er selber anlegt. Wer aber von cnews auf INN umsteigt, sollte die bestehenden Verzeichnisse löschen.

Da INN mit einem Dämon arbeitet, der immer läuft, muß dieser beim Booten gestartet werden. Hierzu fügt man am Ende von /etc/rc.d/rc.M vor dem Aufruf von rc.local folgendes ein:

  /usr/local/lib/news/etc/rc.news &
Für den ersten Start von INN kann dieses Skript (als root) auch manuell gestartet werden. Allerdings ist darauf zu achten, daß nicht versehentlich mehrere innd gleichzeitig laufen.

Bei einigen Distributionen ist standardmäßig ein anderer NNTP-Dämon (nntpd) für cnews in /etc/inetd.conf eingetragen. Dann kann der innd nicht gestartet werden, weil der TCP-Port bereits belegt ist. Daher muß die entsprechende Zeile in inetd.conf auskommentiert werden, was man dem inetd durch kill -1 mitteilen kann.

Weiterhin sind für den reibunslosen Betrieb von INN noch einige Einträge in der crontab des Users news notwendig:

SHELL=/bin/sh
MAILTO=roland
#
# INN:
#
13  *   * * *   /usr/local/lib/news/send-fidogate
17  *   * * *   /usr/local/lib/news/send-uucp rhein
13  21  * * *   /usr/bin/nice /usr/local/lib/news/bin/news.daily delayrm
48  21  * * *   /usr/local/lib/news/rnews -U
Hier werden einmal pro Stunde die Batches für alle Fidosysteme sowie für das UUCP-System rhein gepackt (ohne UUCP-Connection kann der Teil natürlich entfallen). Weiterhin wird einmal pro Tag aufgeräumt, und darüber per Mail informiert. Abschließend werden alle versehentlich liegengebliebenen Artikel verarbeitet.

Es bleibt noch das Erstellen der Newsgroups. Hierzu sowie für fast alle anderen Änderungen am Newssystem wird nur das eine Kommando ctlinnd verwendet. Es sollte immer nur vom User news aufgerufen werden und es ist im Verzeichnis /usr/local/lib/news/bin zu finden. Newsgroups werden dabei mittels ctlinnd newgroup fido.ger.linux angelegt (mit der entsprechenden Newsgroup natürlich). Dabei sind diverse weitere Optionen möglich, die man alle in der Manpage zu ctlinnd(8) nachlesen kann. Insbesondere sollten die Newsgroups control, junk und fido.junk angelegt werden, die Control-Messages (z.B. cancel), Artikel für nicht installierte Newsgroups und Artikel für nicht in /usr/local/lib/fidogate/areas eingetragene Areas auffangen.

Um im Newsreader die Beschreibungen der einzelnen Newsgroups zu finden, kann man weiterhin noch das File /usr/local/lib/news/newsgroups anlegen, welches in jeder Zeile den Namen einer Newgroups und dahinter (durch einen Tab abgetrennt) die Beschreibung der Newsgroup. Dabei stört es nicht, wenn nicht existierende Newsgroups eingetragen sind, Newsgroups doppelt eingetragen sind (es wird der erste Eintrag angezeigt) oder Newsgroups nicht eingetragen sind.

Da auch INN seine Log-Messages über syslog erstellt, sollte man folgende Einträge in /etc/syslog.conf vornehmen:

news.crit                               /var/log/inn/news.crit
news.err                                /var/log/inn/news.err
news.notice                             /var/log/inn/news.notice
Weiterhin sollte man noch das Verzeichnis /var/log/inn anlegen.

Für weitere Informationen zu INN, die Umstellung eines cnews-Systems auf INN, Probleme etc. verweise ich auf die sehr gute INN-FAQ und die reichlich vorhandenen Manpages.


Inhalt