Linux-Praxisbuch/ Linux als Newsserver (mit leafnode)

Aus Wikibooks

Der folgende Text soll zeigen, wie man mit einfachen Mitteln einen eigenen, lokalen Newsserver aufsetzen kann. Wie dies geht, und wozu man sich überhaupt die Arbeit macht, wird hier erklärt.


Einleitung[Bearbeiten]

Was ist News?[Bearbeiten]

News ist ein alter Dienst des Internets. Schon lange vor dem WWW wurden kleine Textbotschaften ausgetauscht. Über das Usenet wurden und werden auch heute noch diese Nachrichten einer grossen Masse von Leuten zugänglich gemacht.

Das Usenet ist streng hierarchisch aufgebaut, was erst ein Zurechtfinden darin ermöglicht. Damit man nicht von der Menge der Nachrichten erschlagen wird, ist das Usenet in Gruppen unterteilt. Eine Gruppe in Deutsch wird meistens mit de.* beginnen. Eine deutsche Linuxgruppe findet man z.B. unter de.comp.os.unix.linux.misc. Dabei steht de für deutsch, comp für Computer, os.unix weil es um Betriebssysteme auf Unixbasis geht und linux.misc, also Verschiedenes zum Thema Linux, ist schließlich unser Ziel. Durch diese feine Gliederung kann der Newsfluss einigermassen gebändigt werden.

Da so viele Leute im Usenet unterwegs sind, wird sehr viel Wert auf das Einhalten von Regeln gelegt. Da diese Regeln den Umfang dieses Dokumentes sprengen würden, erfolgt hier nur ein Verweis auf entsprechende Webseiten oder Gruppen:

Warum einen eigenen Server?[Bearbeiten]

Es gibt viele Gründe, die für einen eigenen Server, und auch etliche, die dagegen sprechen. In der heutigen Zeit spielt die Grösse des Datentransfers oft keine wichtige Rolle mehr. Da außerdem immer mehr Newsreader unter Linux ohne lokalen Newsserver zurecht kommen, könnte man darauf verzichten.

Ein lokaler Newsserver bietet aber Vorteile. Benutzen mehrere Leute einen Computer und lesen in den gleichen Gruppen, müssen die Daten nur einmal übertragen werden. Wenn man ganze Gruppen längere Zeit verfügbar haben will, kann man dies nur bei einem eigenen Server einstellen (jeder Provider löscht nach gewisser Zeit die News). Ein weiterer Pluspunkt für einen eigenen Server ist natürlich der Lernfaktor. Man erfährt nicht nur etwas mehr über das Usenet, sondern kommt auch Linux näher.

Wieso gerade Leafnode?[Bearbeiten]

Leafnode ist ein relativ einfach zu bedienender Newsserver. Leafnode verhält sich gegenüber dem Newsserver des Providers wie ein Newsreader. Dadurch fallen viele komplexe Kommandos und Einstellungen weg. Dies fordert aber auch Kompromisse. So kann man z.B. keine eigenen Newsgroups erstellen. Da dies von den meisten Benutzern aber eh nicht angestrebt wird, stört es auch nicht. Wenn man dennoch darauf angewiesen ist, empfiehlt sich der Newsserver INN.

Vorarbeiten[Bearbeiten]

Aus Gründen der Sicherheit sollte leafnode nicht als root, sondern als Benutzer news laufen. Wenn news noch nicht existiert, muss dieser angelegt werden. Dies geschieht am Besten über das entsprechende Tool der gewählten Distribution.

Installation und Konfiguration[Bearbeiten]

Download[Bearbeiten]

Bevor man mit der Installation beginnen kann, muss man sich leafnode natürlich zuerst einmal besorgen. Wenn keine aktuelle Version mit der Distributions-CD mitgekommen ist, kann man Leafnode von http://www.leafnode.org herunterladen.

Wenn man leafnode nicht über das distributionsspezifische Installationstool installieren kann, muss man dies halt von Hand machen. Es empfiehlt sich dabei die Verwendung eines RPM-Paketes. Es ist wichtig, dass ein zur Distribution gehörendes RPM heruntergeladen wird. Wenn RPMs gemischt werden, kann dies zu grösseren Problemen führen. Ein RPM für Mandrake wird kaum auf SuSE laufen. Dies ist darin begründet, dass die Pfade zu Programmen und Diensten nicht gleich sind.

Installieren[Bearbeiten]

Je nach grafischer Oberfläche für RPM erfolgt die Installation unterschiedlich. Da dies keine Probleme bereitet, beschreibe ich hier den Weg über die Konsole.

Als erstes wechselt man mit cd in das Verzeichnis, indem das Leafnode RPM liegt. Da rpm nur als root funktioniert, wechselt man mit Hilfe von su den Benutzer. Über den Befehl rpm -ihv leafnode.rpm wird das Paket installiert. leafnode.rpm muss natürlich vorher durch den entsprechenden Namen ersetzt werden.

Hier währe ein ausführliches Beispiel. Es wird davon ausgegangen, das sich das RPM-Paket im Verzeichnis download liegt:

user@linux ~$ cd download 
user@linux ~/download$ su 
<passwort>
root@linux ~/download# rpm -ihv leafnode.rpm 

Wenn dies ohne Fehlermeldung funktioniert hat, ist Leafnode nun installiert. Damit ist es aber noch nicht getan. Leafnode ist ein Netzwerkdienst und muss daher über ein Netzwerk - und sei es nur ein lokales - erreichbar sein. Da alles, was mit Netzwerk zu tun hat, vom inetd (Internet Daemon) oder xinetd (Weiterentwicklung von inetd) gestartet werden kann, muss leafnode noch dort eingetragen werden.

Je nach Verwendung von inetd oder xinetd muss für die weitere Installation die entsprechende Anleitung verwendet werden.

Nach der entsprechenden Konfiguration kann zur Kontrolle über telnet eine Verbindung zu leafnode aufgebaut werden.

user@linux ~$ telnet localhost nntp 
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
200 Leafnode NNTP Daemon, version 1.9.19 running at jgraber.ch 	

Wenn eine solche Meldung kommt, hat es geklappt. Bei Fehlermeldungen sollte man als erstes nachsehen, ob alle genannten Dateien news gehören.

inetd[Bearbeiten]

Wenn die Distribution inetd verwendet, müssen wir die Datei /etc/inetd.conf bearbeiten. In dieser Datei sollte es bereits einen auskommentierten Eintrag für nntp geben. Diese Zeile muss gesucht und das # am Zeilenanfang entfernt werden. Die entsprechende Zeile sollte danach so aussehen (Pfade sind natürlich wieder anzupassen):

/etc/inetd.conf 	
  
nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode
  

Nachdem diese Änderung gespeichert wurde, hat inetd diese aber noch nicht übernommen. Erst mit der Eingabe von

root@linux ~# killall -HUP inetd 

als root wird das Konfigurationsfile neu eingelesen.

xinetd[Bearbeiten]

xinetd ist, wie wir gleich bemerken werden, komplett anders aufgebaut als inetd. Wir wechseln ins Verzeichnis /etc/xinetd.d und finden dort je nach RPM-Paket bereits eine Datei mit Namen leafnode. Diese Datei sollte so aussehen:

/etc/xinetd.d/leafnode 	
    
service nntp
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = news
        server          = /usr/sbin/leafnode
        log_on_failure  += USERID
}
# End of nntp   
   

Ist diese Datei nicht vorhanden, muss sie manuell erstellt werden.

Damit die Konfigurationsdatei neu eingelesen wird, muss nachher dieses Kommando ausgeführt werden:

root@linux ~# /etc/init.d/xinetd reload 

Konfiguration Leafnode[Bearbeiten]

Konfiguriert wird Leafnode über die Datei /etc/leafnode/config.

/etc/leafnode/config 	

## This is the NNTP server leafnode fetches its news from.
## You need read and post access to it. Mandatory.
server = <servername>

## Unread discussion threads will be deleted after this many days if
## you don't define special expire times. Mandatory.
expire = 20

##
## All the following parameters are optional
##

## I have free access to my news server. If you don't have, comment out
## the following two lines and change them accordingly.
#username = <benutzername>
#password = <passwort>
  

Wie wir sehen, ist das Config-File sehr gut dokumentiert. Für Leafnode sind eigentlich nur die ersten 2 Parameter notwendig: server und expire.

Bei server muss <servername> durch den entsprechenden Server ausgetauscht werden. expire definiert die Aufbewahrungszeit der Newsartikel. Vorgegeben sind 20 Tage, was aber beliebig geändert werden kann. Man sollte aber beachten, dass mehr Tage mehr Postings bedeuten und diese wiederum mehr Platz beanspruchen.

Falls der Newsserver eine Identifizierung durchführen will, muss das # vor username und passwort entfernt und die entsprechenden Werte eingetragen werden.

Da das Passwort im Klartext vorliegt, muss nach dem Ändern die Datei auf den Benutzer news übertragen werden.

root@linux /etc/leafnode/# chmod 600 config 
root@linux /etc/leafnode/# chown news config 
root@linux /etc/leafnode/# chgrp news config 
root@linux /etc/leafnode/# ll 
-rw---------    1 news     news         4468 Dez 26 17:34 config 	

Feinabstimmung von Leafnode[Bearbeiten]

Wer mit Leafnode in der Standardkonfiguration nicht zufrieden ist, kann bei der Feinabstimmung noch viel erreichen. Dazu öffnet man wieder die Datei /etc/leafnode/config.

Wenn man ein wenig tiefer nachschaut als wir es oben getan haben, findet man noch eine grosse Anzahl von Variablen. Auf die wichtigsten gehe ich hier nun ein:

hostname = <Domain in der MID, die von leafnode angehängt wird> 

maxfetch = n 
Maximal n Postings pro Group auf einmal abholen 

initialfetch = n 
Beim abonnieren einer Newsgroup nur n Postings abholen 

maxcrosspost = n 
Nur Postings abholen, die in max. n Groups gepostet werden 

maxage = n 
Nur Postings die nicht älter als n Tage sind abholen 

maxlines = n 
Nur Postings mit max. n Zeilen Länge abholen 

maxbytes = n 
Nur Postings bis zu einer Größe von n Bytes abholen 

timeoutshort = n 
Wenn versehentlich eine Group geöffnet wurde, nur n Tage diese 
Gruppe abholen. Default sind 2 Tage 

timeoutlong = n 
wenn eine Gruppe n Tage nicht mehr gelesen wurde, werden keine 
News aus dieser Gruppe mehr abgeholt. Wie oben schon erwähnt 
muss an diesen Variablen nichts geändert werden. Sie dienen 
nur zur Feinabstimmung und die  Default-Werte sind für die 
meisten Benutzer in Ordnung. 	

fetchnews und texpire[Bearbeiten]

fetchnews und texpire sind zwei Programme für den Unterhalt von leafnode. Ohne die beiden ist leafnode relativ nutzlos.

fetchnews dient, wie der Name verrät, zum Herunterladen der News. Der erstmalige Aufruf von fetchnews lädt die Liste der Newsgroups vom Server herunter. Ist dies getan, besorgt er die Newsartikel. Da diese Arbeit je nach Server und Gruppe länger dauern kann, bietet fetchnews die Option -v zur Anzeige der aktuellen Arbeit. -v steht für verbose (ausführlich) und kann durch die Anzahl -vs gesteigert werden.

root@linux /etc/leafnode/# fetchnews -vvv 

liefert eine angenehm ausführliche Liste.

texpire dient zum Löschen veralteter News. Die News werden von leafnode solange aufbewahrt, wie in /etc/leafnode/config unter expire eingestellt ist. Ist diese Zeit überschritten, werden die News von leafnode intern entsprechend markiert und beim nächsten ausführen von texpire gelöscht.

Der Datenmenge in den Newsgroups entsprechend häufig muss texpire ausgeführt werden. Wenn nur wenig gepostet wird, nutzt das tägliche texpire nicht sehr viel. Bei einer grossen Flut von Nachrichten wird man aber mit einem wöchentlichen texpire auch nicht glücklich. Nach einigen Versuchen wird man aber einen für sich passenden Rhythmus finden.

Einrichten des Newsreaders[Bearbeiten]

Wenn leafnode richtig konfiguriert wurde und fetchnews die Liste mit Gruppen geholt hat, kann man zum Einrichten des Newsreaders übergehen. Da es unzählige Newsreader gibt, beschränke ich mich hier nur auf die grundlegenden Einstellungen. Für detaillierte Informationen zum selber benutzten Reader empfiehlt sich ein Blick in die dazugehörende Hilfe.

Meist wird der Newsreader unter Einstellungen die Newsserver verwalten. Dort fügt man einen neuen Server hinzu. Ins Feld für die Serveradresse kann man localhost oder 127.0.0.1 eingeben (beide Angaben führen zum gleichen Ergebnis). Als Port sollte man 119 verwenden, da inedt/xinetd darauf auf Verbindungen zu leafnode warten.

Nach dem erfolgreichen Erfassen des Servers muss man die Gruppenliste holen. Diese kommt nun nicht vom Newsserver des Providers, sondern von leafnode (der diese mit fetchnews vom Provider geholt hatte). Da so eine Liste mehrere MB gross sein kann, ist man sehr froh, wenn diese nur einmal übertragen werden muss.

Der Newsreader liest diese Liste ein, und man kann mit dem Abonnieren der Gruppen beginnen. Nun weiss der Reader was wir lesen wollen, allerdings hat leafnode davon noch nichts mitbekommen. Wenn man eine der gerade abonnierten Gruppen öffnet, sieht man einen Beitrag mit Titel "Leafnode placeholder for group <gruppenname>". Nun muss man diesen Beitrag öffnen und findet eine kurze Erklärung über den Sinn dieses Postings. Durch das lesen dieses Postings hat leafnode erfahren, dass wir uns für diese Gruppe interessieren. Beim nächsten Aufruf von fetchnews wird er uns die dazugehörigen Postings holen.

Wenn man sich eine Übersicht über die von leafnode betreuten Gruppen holen will, sollte in den meisten Fällen folgender Befehl genügen:

user@linux ~$ $ ls -l /var/spool/news/interesting.groups/ 
-rw-rw-r--  1 news   news   0 Dez 27 16:53 de.comp.os.unix.apps.gnome
-rw-rw-r--  1 news   news   0 Dez 27 16:53 de.comp.os.unix.apps.kde
-rw-rw-r--  1 news   news   0 Dez 27 16:53 de.comp.os.unix.apps.misc
-rw-rw-r--  1 news   news   0 Dez 26 17:54 de.comp.os.unix.linux.infos
-rw-rw-r--  1 news   news   0 Dez 26 17:54 de.comp.os.unix.linux.misc
-rw-rw-r--  1 news   news   0 Dez 27 13:24 de.comp.os.unix.linux.moderated 	

Die darin aufgelisteten Gruppen hat man abonniert, und leafnode kümmert sich darum.

Automatisieren von Aufgaben[Bearbeiten]

Alte News löschen[Bearbeiten]

Man kann texpire zwar manuell aufrufen, doch ist dies auf die Dauer mühsam. Da Linux viele Dinge für einen automatisch machen kann, soll es doch auch die alten News löschen.

Mit Hilfe von Cron müssen wir uns nur einmal ein paar Minuten Zeit nehmen und dann klappt dies automatisch. Da bisher immer news alles machen sollte, soll er nun auch wieder zum Zuge kommen. Als root führen wir folgenden Befehl aus:

root@linux ~# crontab -u news -e 

Dieser Befehl öffnet die bestehende crontab von news zum Editieren. Darin fügen wir auf der nächsten freien Zeile folgendes hinzu:

crontab von news 	
   
0 20 * * * /usr/sbin/texpire
  

Damit wird jeden Tag um 20 Uhr der Befehl /usr/sbin/texpire ausgeführt. Da wir uns in der Crontab von news befinden, müssen wir den Benutzer nicht noch explizit angeben.

Hinweis zu vi: Standardmässig wird der Editor VI verwendet. Wer sich damit nicht auskennt, bekommt hier eine kleine Erklärung: Um zu editieren, müssen wir über Insert in den Schreibmodus wechseln. Nach dem Editieren wechseln wir mit ESC in den Kommandomodus. Der Befehl :wq speichert die Änderung und schließt vi.

Automatisch News holen[Bearbeiten]

Um fetchnews automatisch ausführen zu lassen, empfiehlt sich die Datei /etc/ppp/ip-up. ip-up wird jedes Mal nach dem Aufbau einer Dial-up Verbindung ausgeführt.

Dieser Datei müssen nur die folgenden 2 Zeile hinzugefügt werden, und schon sollte es funktionieren:

/etc/ppp/ip-up 	
   
# neue News von Newsserver holen
/usr/sbin/fetchnews
  

Leafnode und Standleitungen[Bearbeiten]

Wenn man über eine Standleitung oder eine Flatrate permanent eine Verbindung zum Internet hat, so wird man nur wenig Freude an ip-up haben. Da macht Cron schon mehr Sinn. Also editieren wir nochmals als root die crontab von news:

root@linux ~# crontab -u news -e 

Nun können wir dort eintragen, wann fetchnews ausgeführt werden soll. Durch

crontab von news 	 
    
15 * * * * /usr/sbin/fetchnews
   

wird fetchnews jeweils um x:15 ausgeführt.(Also 12:15, 13:15, 14:15 usw). Wenn dies nicht genügt, können natürlich noch weitere Einträge gemacht werden.