  Linux INN-Newsspool mini-HOWTO
  Robert Fendt (fendt@student.physik.uni-dortmund.de)
  v1.5-2, 14. Januar 1999

  Dieses Dokument soll beim Aufbau eines lokalen INN-Newsservers Hil
  festellung leisten, um Offline-Reading von News mit beliebiger Soft
  ware zu ermglichen.


  1.  Einleitung



  1.1.  Neue Versionen dieses Dokuments


  Die jeweils neuste Version dieser HOWTO ist auf dem WWW Server des
  Deutschen Linux HOWTO Projekts unter folgender Adresse zu finden:



       http://www.tu-harburg.de/dlhp/




  1.2.  Feedback


  Wenn Sie irgendwelche Fragen oder Kommentare zu diesem Dokument haben,
  erreichen Sie mich unter der E-Mail Adresse

  Internet: fendt@student.physik.uni-dortmund.de

  Ansonsten bin ich zu erreichen unter


       Robert Fendt
       Bergstrae 42c
       D-44575 Castrop-Rauxel

  Ich freue mich ber alle Vorschlge und Kritiken zu dieser HOWTO. Wenn
  Ihnen also irgendein Abschnitt in dieser HOWTO unklar sein sollte,
  oder wenn Sie Ergnzungsvorschlge haben, schreiben Sie mir bitte.


  1.3.  Copyright


  Dieses Dokument ist urheberrechtlich geschtzt. Das Copyright liegt
  bei Robert Fendt.

  Das Dokument darf gem der GNU General Public License verbreitet
  werden. Insbesondere bedeutet dieses, da der Text sowohl ber
  elektronische wie auch physikalische Medien ohne die Zahlung von
  Lizenzgebhren verbreitet werden darf, solange dieser Copyright
  Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt
  und ausdrcklich erwnscht. Bei einer Publikation in Papierform ist
  das Deutsche Linux HOWTO Projekt hierber zu zu informieren.


  1.4.  Zweck dieses Dokuments


  Dieses Dokument soll die Konfiguration eines lokal genutzten INN-
  Pakets erleichtern, wie es hufig zum Offline-Lesen von Usenet-Groups
  bentigt wird. Ein lokaler NNTP-Server ermglicht die Benutzung eines
  beliebigen News-Readers nach Wahl und verringert gleichzeitig durch
  das lokale Speichern der Artikel die Telefonkosten erheblich. Die hier
  angegebenen Konfigurationen sollen lediglich funktionieren. Es wird
  wahrscheinlich fr Etliches optimalere Einstellungen geben; ich
  verwende, soweit sinnvoll, mglichst die Defaults, um Arbeit zu
  sparen. An solchen Stellen gebe ich allerdings auch entsprechende
  Hinweise auf die Dokumentation.  Als Beispiel wird die SuSE-Linux
  Distribution herangezogen, da es sich hierbei um eine recht hufige
  Distribution im deutschsprachigen Raum handelt (und weil ich mit den
  anderen Distributionen wenig Erfahrung habe). Bei anderen
  Distributionen knnen u.a. die Verzeichnisnamen variieren.


  2.  Vorbereitungen

  Um anfangen zu knnen, wird zunchst einmal ein laufender innd
  bentigt. Dazu mu also das INN-Paket korrekt installiert sein. Die
  Installationsanleitung des INN (Install.ms) liefert hierzu eine gute
  und ausfhrliche Dokumentation. Bestimmte Distributionen bieten auch
  automatisierte Installationsroutinen an. Im SuSE-Linux 5 z.B. gengt
  die Installation des INN-rpm's ber YaST und das Setzen der
  Konfigurationsvariablen START_INN auf yes.

  Ferner sollte die Variable NNTPSERVER=localhost gesetzt sein. Dies
  kann z.B. im profile erfolgen (oder bei SuSE: NNTPSERVER="localhost"
  in der rc.config).

  Neben dem INN- brauchen wir auch noch das suck-Paket. suck ist ein
  Programm, um von anderen NNTP-Hosts Artikel herunterzusaugen (to
  suck), um diese dann in die INN-Datenbank einzubinden. INN besitzt
  zwar selbst auch ein Programm dazu, jedoch ist dies anders ausgelegt
  und fr unsere Zwecke mehr als umstndlich.

  Haben wir alles geschafft -- also einen laufenden innd, ein
  funktionstchtiges suck und die NNTPSERVER-Variable auf localhost,
  dann kann es fast schon losgehen. Zum Abschlu brauchen wir noch das
  Krzel des verwendeten NNTP-Servers (news.uni-dortmund.de benutzt z.B.
  Uni-Dortmund.DE; dieser Name steht am Anfang von path in der
  Headerinformation jedes Artikels) und die vollstndigen Namen der zu
  bestellenden Newsgroups (NGs), also z.B. de.comp.os.linux.misc. Man
  sollte auch den fqdn des Rechners parat (und richtig eingestellt!)
  haben- hat man keinen, mu man sich unbedingt einen besorgen (siehe
  auch den Abschnitt am Schlu des Dokuments). Dann haben wir aber
  wirklich alles zusammen, was ntig ist. Alle jetzt folgenden Befehle
  mssen brigens als User news eingegeben werden, also am besten



       su news




  von einer root-shell aus eingeben. Einige Befehle sind aus
  Platzgrnden mittels \ auf mehrere Zeilen gebrochen; dies hat
  keine tiefere Bedeutung.



  3.  Die Konfiguration


  3.1.  Der innd

  Die Konfiguration des innd beschrnkt sich auf das Anlegen der ntigen
  Newsgroups und das Anlegen eines Newsfeeds. Die NGs werden mit dem
  Befehl



       /usr/lib/news/bin/ctlinnd newgroup <Gruppenname>




  angelegt, gelscht werden sie mit:



       /usr/lib/news/bin/ctlinnd rmgroup <Gruppenname>




  Dann mu in der Datei /var/lib/news/newsfeeds eine Zeile mit dem
  Inhalt



       <Serverkrzel>:*,!junk,!control::




  hinzugefgt werden, also z.B



       Uni-Dortmund.DE:*,!junk,!control::




  Diese Zeile weist inn an, jede neue Nachricht, die nicht von Uni-
  Dortmund.DE kommt, zum Versand an diesen Server zu markieren. Das ist
  ntig, um selber Artikel posten zu knnen. Man kann hier auch noch
  vielfltige Filtermglichkeiten eingeben; man newsfeeds gibt hierber
  Aufschlu. Kurze Erklrung: der Zusatz ,!junk,!control sorgt dafr,
  da Nachrichten in diesen beiden internen Gruppen *nicht* fr den
  Versand nach drauen markiert werden. In junk landet jede ungltige
  Nachricht (der ganze Mll halt) und control ist hauptschlich fr
  ISP's interessant (dient zur automatischen Administration von
  Newsservern).

  Jetzt mu man den Newsfeed noch mit



       /usr/lib/news/bin/ctlinnd begin <Serverkrzel>




  aktivieren, also z.B. mit



       /usr/lib/news/bin/ctlinnd begin Uni-Dortmund.DE .




  Naja, ganz fertig sind wir jetzt noch nicht. Eine Datei mu noch
  gendert werden: /var/lib/news/inn.conf.  Diese sollte nachher in etwa
  so aussehen:



       pathhost:       <Newshost>
       organization:   private
       server:         localhost




  Die organisation und pathhost Parameter sind im Prinzip beliebig. Man
  sollte pathhost allerdings auf die fqdn des Provider-Newshosts
  einstellen, um Verwirrungen zu vermeiden.



  3.2.  suck! oder: Wie zum Teufel kriege ich News?

  Normalerweise sind NNTP-Server so eingestellt, da sie schn brav
  warten, bis ihnen ein anderer NNTP-Server neue Artikel schickt.
  Andererseits schicken sie jedem aktiven Newsfeed jede neue Nachricht,
  die nicht von ihm stammt. Hier knnen wir leider lange darauf warten,
  da uns irgendein NNTP-Host neue Nachrichten schickt; abgesehen davon
  wollen wir ja nur bestimmte NGs, und stndig im Netz zu bleiben und zu
  warten, ist auch nicht gerade der Hammer.  Also mu suck her! Mit suck
  knnen wir ganz spezielle NGs abbonnieren und auf Befehl
  aktualisieren.

  Zunchst einmal brauchen wir ein temporres Verzeichnis fr die
  gepollten News. Hierzu eignet sich z.B. /tmp, aber auch
  /var/spool/news. In diesem Verzeichnis mu das Verzeichnis Msgs
  existieren, und der User news mu Schreibrechte auf alles haben.
  Gepollt wird dann z.B. mit dem Befehl




  suck <Newshost> -c -bi <Verz.>/batch -dt <Verz.> -dm \
  <Verz.>/Msgs -dd <Verz.>




  <Newshost> ist hier der fqdn des hosts, also z.B. news.uni-
  dortmund.de. Bei Verwendung eines anderen Verzeichnisses als
  /var/spool/news sollte man beachten, da suck seine
  Konfigurationsdateien im durch -dd angegebenen Verzeichnis sucht; hier
  sollte man also auf keinen Fall /tmp benutzen, sondern trotzdem
  /var/spool/news einsetzen. Der Parameter -dm weist suck an, im
  entsprechenden Verzeichnis die geholten Artikel abzulegen, whrend -dt
  das Verzeichnis fr die Temporrdateien angibt, welche allerdings
  durch -c sowieso automatisch gelscht werden.


  Die ganze Sache knnte dann also so aussehen:



       suck news.uni-dortmund.de -c -bi /var/spool/news/batch -dt \
       /var/spool/news -dm /var/spool/news/Msgs -dd /var/spool/news




  Damit das aber klappt, mu man suck erstmal sagen, welche NGs er
  pollen soll. Das geschieht mittels eines Eintrags in die Datei
  <Verz.>/sucknewsrc. Die Zeile de.comp.os.linux.misc -100 weist suck
  z.B. an, die letzten 100 Nachrichten aus der NG zu pollen. Danach wird
  automatisch anstelle der -100 die Nummer des letzten Artikels
  eingesetzt, so da suck immer nur die neuen Artikel pollt. Hier sollte
  man also mglichst nicht mehr drangehen.

  Nach dem Pollen der News mu inn auch mitkriegen, da da was gekommen
  ist. Das geschieht mittels



       /usr/lib/news/bin/innxmit localhost <Verz.>/batch




  Diese beiden Befehle packt man am besten in ein Skript, z.B.
  /var/spool/news/get.news, da sie beide immer in Folge ausgefhrt
  werden. Anstatt dessen kann man auch das bei suck mitgelieferte Skript
  get.news.innd zusammen mit put.news verwenden. Dieses Skript ist recht
  leistungsfhig und erledigt auch noch das Versenden von Artikeln. Man
  mu zur Benutzung allerdings die Variablen am Anfang des Skripts
  ndern. Dann kopiert man es unter dem Namen get.news zusammen mit
  put.news, dem Nachrichtenfilter, in <Verz.>, also z.B. ins Verzeichnis
  /var/spool/news.


  3.3.  rpost oder: Wie zum Geier kriege ich die Artikel raus?

  Jeder Artikel, der zum Versenden an andere Newshosts markiert ist, mu
  von einem getrennten Programm verschickt werden. Das hier verwendete
  Programm ist rpost. Damit sich rpost und der innd nicht ins Gehege
  kommen, sollte man vor dem eigentlichen Versenden noch folgenden
  Aufruf einbauen:



  mv /var/spool/news/out.going/<Serverkrzel> \
  /var/spool/news/out.going/<Serverkrzel>.new
  /usr/lib/news/bin/ctlinnd flush <Serverkrzel>




  Dieser Aufruf benennt zunchst die Queue-Datei um und veranlat dann
  den innd, die Datei zu aktualisieren, zu schlieen und neu zu ffnen.
  Das die Datei zwischenzeitlich umbenannt wurde, ist innd egal, da sie
  ja bereits offen ist. Durch das Schlieen und Neuffnen allerdings
  wird dann natrlich die Queue-Datei neu angelegt. rpost kann jetzt
  ungestrt die Artikel posten und danach automatisch



       /var/spool/news/out.going/<Serverkrzel>.new




  lschen. Aufgerufen wird rpost mit



       /usr/bin/rpost <Newshost> -d -b \
       /var/spool/news/out.going/<Serverkrzel>.new -p /var/spool/news




  Man kann, falls ntig, auch noch ein Filterprogramm einsetzen (z.B.
  put.news aus dem suck-Paket), um die ausgehenden Nachrichten noch zu
  bearbeiten. In diesem Fall wre der Aufruf



       /usr/bin/rpost <Newshost> -d -b \
       /var/spool/news/out.going/<Serverkrzel>.new -p /var/spool/news \
       -f /var/spool/news/put.news \$\$o=/tmp/filtered_msg \
       \$\$i /tmp/filtered_msg




  Fr eine genaue Anleitung zur Benutzung von rpost sollte man einen
  Blick in die man-page werfen. Auch diesen Aufruf packt man mit den
  beiden vorigen am besten in ein Skript, da das Versenden der Artikel
  am besten gleichzeitig mit dem Empfang von neuen Artikeln durchgefhrt
  wird.



  3.4.  news.daily

  Wenn der root-User beim Hochfahren des Systems jedesmal eine Mail
  bekommt, in der sich inn ber ein fehlendes oder veraltetes
  .news.daily beschwert, dann wurde an diesem Tag noch nicht bzw. noch
  nie das Skript /usr/lib/news/bin/news.daily ausgefhrt, welches u.a.
  zum Lschen von alten Artikeln zustndig ist. Dieses Skript sollte am
  besten per cron einmal tglich ausgefhrt werden. Wenn auf Ihrem
  System nur der root-user eine crontab haben darf, tragen sie dort z.B.
  ein:



  00 22 * * * su news -c /usr/lib/news/bin/news.daily




  In diesem Beispiel wird tglich um 22.00 Uhr das Skript news.daily vom
  User news ausgefhrt. Man kann natrlich auch andere Zeiten eintragen,
  allerdings sollte man das news.daily-Skript genau einmal pro Tag
  ausfhren - nicht weniger oft und auch nicht fter. Wenn man es fter
  ausfhrt, werden sonst u.U. bestimmte Log-Dateien zu schnell rotiert.
  Wenn news.daily mehrfach tglich aufgerufen werden soll, mssen die
  zustzlichen Aufrufe so aussehen:



       su news -c /usr/lib/news/bin/news.daily -notdaily




  Sie knnen natrlich news.daily auch in die crontab des users news
  eintragen, wobei hierbei dann su news -c entfallen kann:



       00 22 * * * /usr/lib/news/bin/news.daily




  Das Skript news.daily steuert u.a. das Daten aus der Datei
  /var/lib/news/expire.ctl bezieht. Hier kann man angeben, wie lange
  eine Nachricht mindestens (Standard: 1 Tag) bzw. hchstens (Standard:
  10 Tage) im News-System verbleibt. Man kann diese Angaben auch
  abhngig von den einzelnen NG's machen; die Datei ist selbsterklrend,
  und eine man-Page gibt es auch dazu.



  3.5.  Filtern

  Leider sind die Informationen, die im Header von eigenen Postings (und
  damit von den ausgehenden Artikeln) erscheinen, i. Allg. nicht
  korrekt. Einige Dinge sind lediglich Schnheitsfehler, wie z.B. der
  NNTP-Posting-Host, Xref oder Message-ID. Andererseits
  produzieren viele News-Reader ihre From-Angabe aus der lokalen
  Pawort-Datei, was normalerweise mehr als unerwnscht ist: so knnte
  der Absender auf einmal lauten:



       From: fritz@dummy.local.net (Fritz Mueller)




  Diese From-Zeile ist schlicht und ergreifend falsch; E-Mail-Replys
  gehen daher ins Leere. Einigen Newsreadern kann man dieses Verhalten
  abgewhnen, aber leider nicht allen. Um dennoch mit einem solchen
  Programm arbeiten zu knnen, hilft ein (ziemlich schmutziger) Trick.
  Und zwar wird normalerweise zusammen mit rpost ein Filter-Skript
  benutzt (Im Beispiel oben schon einmal genannt; bei suck z.B.
  mitgeliefert: put.news), das genau die oben genannten unschnen
  Headerzeilen aus jeder Nachricht entfernt, bevor sie abgeschickt wird.


  Dies geschieht ber sed. Der entsprechende Befehl lautet



       sed -e /^Zeichenkette/d Datei > Zieldatei .




  Hiermit wird jede Zeile, die mit Zeichenkette beginnt (wenn man ^
  weglt, dann jede Zeile, die Zeichenkette enthlt), nicht in
  Zieldatei ausgegeben, also quasi gelscht. Durch piping kann man
  mehrere solcher Aufrufe auch koppeln.

  Das put.news-Skript kann man auch dazu verwenden, um die From-Zeile
  zu ndern. Eine entsprechend angepate put.news-Version, die auf dem
  Skript von suck basiert, habe ich hier abgedruckt, da das ntige Tool
  sed etwas kryptisch zu bedienen ist. Beim Abtippen mu man nur noch
  die voreingestellte From-Zeile nach eigenem Gusto verndern.

  Wen's interessiert: Das Ersetzen wird ber den sed-Befehl c\
  realisiert. Die Befehlszeile lautet dann z.B.



       sed -e '/^Zeichenkette/c\
       Ersatzzeichenkette' Datei > Zieldatei .




  Wichtig sind hier unbedingt die einfachen Anfhrungszeichen und der
  Zeilenwechsel. Dieser gehrt zum sed-Befehl (siehe man-Seite).

































  #!/bin/sh

  #set -x
  # this is just a simple script to use sed to strip off the
  # NNTP_Posting_Host and Xref headers that my ISP's newsfeed
  # doesn't like.  this could be written as a one liner
  # sed -e SEDCMD1 $1 | sed SEDCMD2 > $2
  #
  # *** modifications:
  # *** 4/98 : transferred 'From'-part can be modified
  # *** 1/99 : Message-IDs keep unchanged

  if [ $# -ne 2 ]; then
          echo
          echo "Syntax `basename $0` Eingabedatei Ausgabedatei <RETURN>"
          echo
          exit -1
  fi

  SEDCMD="/^NNTP-Posting-Host/d"
  SEDCMD2="/^Xref/d"
  OUTFILE=$2
  INFILE=$1

  if [ -f ${INFILE} ]; then

  sed -e ${SEDCMD} ${INFILE} | sed -e ${SEDCMD2} | sed -e '/^From/c\
  From: fmueller@provider.de (Fritz Mueller)' > ${OUTFILE}

          if [ $? -ne 0 ]; then
                  echo "Fehler"
                  exit -1
          fi

  else
          echo "$1 existiert nicht"
          exit -1
  fi




  3.6.  Bonus 1: Gruppenbeschreibungen


  Sie haben sicherlich schon einmal online News gelesen, und Ihnen ist
  dabei vielleicht auch aufgefallen, da zu den Newsgroups i.Allg. eine
  kurze Beschreibung verfgbar ist. Kann der Reader diese Kommentare
  anzeigen, knnen sie recht interessant sein (wenn man nicht gerade den
  Netscape Collabra benutzt). Und so wird's gemacht: in die Datei
  /var/lib/news/newsgroups wird einfach eine Liste mit den Gruppen und
  ihren Beschreibungen  geschrieben. Zum besseren Verstndnis gibt's
  hier ein Beispiel:













  control                 News server internal group
  junk                    News server internal group
  de.comp.os.unix.linux.hardware  Hardwarefragen zu Linux.
  de.comp.os.unix.linux.misc      Alles, was sich nicht anders einordnen laesst.
  de.comp.os.unix.linux.newusers  Fragen von Linux-Anfaengern.
  de.comp.os.unix.discussion      Nichtigkeiten, Smalltalk und Glaubenskriege.
  de.comp.os.unix.x11     No description.
  comp.os.linux.misc      Linux-specific topics not covered by other groups.
  comp.os.linux.announce  Announcements important to the Linux community. (Moderat
  ed)
  de.newusers.questions   Neue Benutzer im Netz fragen, Experten antworten.




  Das sind die wichtigsten Linux-Gruppen mit den (hoffentlich) korrekten
  Kommentaren, plus die beiden internen Gruppen 'control' und 'junk'.


  3.7.  Bonus 2: Wie man sich einen eigenen Domainnamen besorgt

  Wer heutzutage einen Account beantragt, ist oft mit zwei Problemen
  geschlagen: dynamischer IP-Vergabe und fehlendem Namensraum. Sprich:
  man hat keine feste IP-Nummer und keinen Domainnamen. Also kann man
  keine gltigen Message-IDs erzeugen. Deshalb mu irgendwie zumindest
  ein Namensraum her, da man die Message-IDs auch nicht einfach lschen
  sollte. Das funktioniert zwar (ltere Versionen dieses HOWTOs schlugen
  dies auch vor), ist aber gefhrlich. Bei falsch eingestellten
  Newsfeeds oder Alias-nderungen seitens des Providers kann man so jede
  Menge Dupes (also doppelte Mails mit unterschiedlicher Message-ID)
  erzeugen und einige Leute ziemlich rgern.

  Bestimmte Provider (u.a. z.B. T-Online) stellen einen Namensraum
  speziell zur Message-ID-Generierung zur Verfgung. Da allerdings INN
  die Message-IDs aus dem intern benutzten Rechnernamen ableitet, mu
  man dem Rechner u.U. einen etwas komplizierten Namen geben (bei T-
  Online enthlt er z.B. u.a. die Benutzernummer) oder INN neu
  kompilieren; es ist aber immerhin eine Mglichkeit. Hier sollte man
  also bei seinem Provider Erkundigungen einholen.

  Eine andere Mglichkeit, einen eigenen fqdn zu bekommen, soll hier
  vorgefhrt werden: ddns.org. ber diese Domain kann jeder kostenlos
  eine eigene Subdomain bekommen, sogar mit dynamischen IPs. Man
  beantragt hierfr unter dynamic DNS einen  Account. Hat man diesen
  bekommen (Benachrichtigung per E-Mail), kann man fortan kurzfristig
  eine IP unter der gewhlten Domain registrieren, und (beim Trennen der
  Verbindung) wieder lschen. Diesen Vorgang automatisiert man (wenn man
  will) am besten durch Installation des Linux-Clients und entsprechende
  Skripten. Danach kann man die Domain ddns.org im System eintragen,
  so da dann die Message-IDs mit <rechername>.ddns.org absolut gltig
  sind.















