<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?> 
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                         "/usr/local/share/xml/dtd/docbook/docbookx.dtd">

<article lang="fr">

<articleinfo>
  
  <title>Configuration de <productname class="trade">INN</productname></title>

  <subtitle>Ou comment lire et poster les news off-line sur une
  machine Unix.</subtitle>

  <author>
    <firstname>Éric</firstname>
    <surname>Jacoboni</surname>
    <affiliation>
     <address format="linespecific">
        <email>jaco@linux-france.org</email>
     </address>
    </affiliation>
   </author>
   <author>
     <firstname>Nat</firstname>
     <surname>Makarévitch</surname>
     <affiliation>
     <address format="linespecific">
        <email>nat@linux-france.org</email>
     </address>
    </affiliation>
   </author>
   <date>V4.0 -  19 novembre 2000</date>
</articleinfo>

<sect1>
<title>Introduction</title>

<sect2>
<title>Préliminaires</title>

<para>Ce document décrit les différentes procédures à employer pour
pouvoir consulter et poster <emphasis>off-line</emphasis> des articles
dans les forums USENET à partir d'une machine Unix. Vous pouvez
télécharger sa <ulink
url="http://www.linux-france.org/article/usenet/jaco/inn.ps.gz">version
PostScript</ulink>, ou sa <ulink
url="http://www.linux-france.org/article/usenet/jaco/inn.pdf.gz">version
PDF</ulink> (ces deux dernières sont imparfaites à cause d'un script
de conversion récalcitrant. Patientez ou agissez...). Vous pouvez
également télécharger son <ulink
url="http://www.linux-france.org/article/usenet/jaco/inn.xml.gz">code
source (DTD DocBook/XML V4.1.2)</ulink>. Le site de référence de ce
document est <ulink
url="www.linux-france.org/article/usenet-jaco">Linux-France</ulink>&nbsp;:
c'est là que se trouveront les versions les plus récentes. Toutes
remarques et suggestions concernant ce document peuvent être envoyées
à <ulink url="mailto:jaco@linux-france.org">Éric
Jacoboni</ulink>.</para>

<para>Le but de cette documentation n'est pas de fournir des recettes,
mais d'expliquer les différentes tâches liées à l'installation des
programmes nécessaires à une <emphasis>lecture off-line</emphasis> des
news sur un système Unix. On y trouvera aussi les difficultés
rencontrées lors de la configuration de ces programmes.</para>

<para>Ce document ne traite pas de la connexion de votre système à
Internet, il suppose que cela fonctionne... Par conséquent, nous
renvoyons les utilisateurs de Linux à la lecture de l'<ulink
url="http://www.freenix.org/unix/linux/HOWTO/ISP-Hookup-HOWTO.html">ISP-Hookup
HOWTO</ulink> et du <ulink
url="http://www.linux-france.org/article/grl/Guide_Rootard.html">Guide
du Rootard</ulink>. Les utilisateurs de FreeBSD trouveront les mêmes
informations dans le <ulink
url="http://www.freebsd.org/handbook">FreeBSD Handbook</ulink>.</para>
				
<para>Par rapport aux versions précédentes de ce document, celle-ci
ajoute l'installation et la configuration de <productname>INN
2.x</productname>. Étant donné le grand nombre d'<productname>INN
1.7</productname> encore en circulation, nous avons conservé la
configuration de celui-ci.</para>

<para>Nous avons aussi choisi de ne plus faire dépendre ce document
d'une implantation particulière d'Unix car les nombreuses
distributions de Linux, les différents Unix et leurs spécificités,
rendent la chose impossible. De plus, <productname
class="trade">INN</productname> peut être installé sur de nombreuses
plates-formes et ce serait une erreur de spécialiser ce document car
cela irait à l'encontre de ce qu'ont voulu faire les concepteurs des
logiciels utilisés ici.</para>
</sect2>
</sect1>

<sect1>
<title>Description de la machine type</title>

<para>
<glosslist>
 <glossentry>
   <glossterm>Système d'exploitation :</glossterm>
   <glossdef><para>N'importe quel Unix</para></glossdef>
 </glossentry>
 <glossentry>
   <glossterm>Système :</glossterm> 
   <glossdef><para>machine isolée, reliée à un
   fournisseur d'accès Internet via PPP.</para></glossdef>
 </glossentry>
 <glossentry>
   <glossterm>Prérequis :</glossterm> 
   <glossdef><para>la connexion PPP
   fonctionne, si tel n'est pas le cas, reportez-vous aux documents
   cités précédemment, et à <ulink
   url="http://www.linux-france.org/article/connex/connex.html"> la
   rubrique CONNEX</ulink>.</para></glossdef>
  </glossentry>
 </glosslist>
</para>

<para>Bien que nous prétendons que ce document puisse convenir à tout
système Unix, il est évident que nous n'avons pas installé
<productname>INN</productname> sur tous les Unix
existants, ni même sur toutes les distributions Linux
actuelles...</para>

<para>Au moment où sont écrites ces lignes, nous avons personnellement
testé cette configuration sur les systèmes suivants :

<itemizedlist>
<listitem><para>Red Hat Linux 5.x et 6.x</para></listitem>
<listitem><para>SuSE 6.x</para></listitem>
<listitem><para>Debian Linux 2.x</para></listitem>
<listitem><para>FreeBSD 3.x, 4.x et 5.0</para></listitem>
</itemizedlist>
</para>

<para>De nombreux courriers nous ont confirmé que ce document avait
servi à configurer <productname>INN</productname> sur d'autres
distributions Linux (Slackware). Il n'y a <emphasis>a
priori</emphasis> aucune raison pour qu'il n'en aille pas de même pour
votre système (si tel était le cas, merci de nous en faire
part).</para>

<para>Les quatre Unix cités disposent d'un mécanisme permettant
d'automatiser l'installation des logiciels&nbsp;: les systèmes de
paquetages RPM de Red Hat (également utilisé par SuSE) ou DEB de
Debian, le système des <quote>ports</quote> de FreeBSD permettent une
installation des programmes aux emplacements considérés comme
<quote>normaux</quote> sur ces systèmes ainsi que la mise en place des
scripts de démarrage et d'arrêt du serveur. Cela dit, ce que nous
entendons par <quote>installation</quote> dépasse la simple copie de
fichiers&nbsp;: elle consiste surtout à fournir les
<emphasis>bonnes</emphasis> informations dans les
<emphasis>bons</emphasis> fichiers de configuration et cela, aucun
système de paquetage ne le fait encore.</para>

<para>Quoi qu'il en soit, il nous faut maintenant régler un détail
d'importance qui empoisonne la vie de ceux qui veulent écrire des docs
généralistes et directement utilisables&nbsp;: le problème des
emplacements où seront installés les différents programmes et fichiers
de configuration. En effet, ces emplacements varient d'une
distribution de Linux à l'autre, et d'un Unix à l'autre. Afin de
mettre tout le monde d'accord (et de me mettre tout le monde à dos),
j'utiliserai les choix des concepteurs des logiciels concernés et
donnerai la liste des emplacements des différents fichiers sur un
système respectant ces choix. À vous de faire la traduction de ces
emplacements en ceux employés sur votre système (il faut bien qu'il
vous reste quelque chose à faire...).</para>

<para>Pour tous les exemples, on supposera donc que :

<itemizedlist> 
<listitem><para>le serveur de news de votre Fournisseur d'Accès
Internet (F.A.I) se nomme <literal>news.fai.fr</literal> (par exemple
<literal>news.easynet.fr</literal> si vous êtes abonnés à Easynet,
<literal>news.free.fr</literal> si vous êtes abonnés à Free,
<literal>/news.aol.com</literal> si vous êtes abonnés à AOL
(euh... non, c'est une blague)&nbsp;: votre fournisseur a dû vous le
préciser au moment de votre abonnement)&nbsp;;</para></listitem>

<listitem><para>votre connexion PPP est établie lorsque vous utilisez
l'un des récupérateurs de news décrits.</para></listitem>
</itemizedlist>
</para>
</sect1>

<sect1>
<title>Présentation et installation des logiciels utilisés</title>

<para>Cette documentation traite de trois logiciels&nbsp;:
<productname>Suck</productname>, <productname>Newsx</productname> et
<productname>INN</productname>. Les deux premiers permettent de
récupérer et de poster les articles Usenet (<emphasis>un seul est
nécessaire</emphasis>), tandis que le troisième est celui qui
permettra de transformer votre machine Linux en serveur Usenet
local.</para>

<para>En réalité, seule la configuration
d'<productname>INN</productname> nous intéresse ici&nbsp;: les deux
premiers programmes ne sont là que pour l'alimenter à partir du
serveur de news de notre fournisseur, ils sont eux-mêmes facultatifs
si vous avez la chance d'être abonné à un fournisseur qui veuille bien
se donner les moyens d'être à la hauteur (mais ils sont
malheureusement peu à le faire...).
</para>

<para>
<itemizedlist>
<listitem><para>Au moment où ces lignes sont écrites, seuls Easynet et
Teaser proposent, à notre connaissance, l'alimentation automatique de
votre serveur INN local (si vous en connaissez d'autres, faites-m'en
part).</para></listitem>

<listitem><para>La dernière version de <productname>Suck</productname>
est la 4.2.3. Il existe en paquetages RPM et DEB précompilés sur les
sites des distributions Linux concernées et FreeBSD l'intègre dans son
système de ports. Le code source original peut être récupéré à partir
de <ulink url="http://home.att.net/~bobyetman/">cette
page</ulink>.</para></listitem>

<listitem><para>En ce qui concerne <productname>Newsx</productname>,
les paquetages binaires RPM et DEB existent mais il n'existe pas
encore de port pour FreeBSD : pour l'installer, il suffit de récupérer
les sources sur <ulink url="ftp://ftp.kddlabs.co.jp/.1/news/newsx">ce
site</ulink> (par exemple) et de le recompiler en suivant les
instructions données par les différents fichiers texte.</para></listitem>

<listitem><para><productname>INN</productname> fait partie des
	      distributions Linux, et du système de ports de
	      FreeBSD. Il existe deux versions qui cohabitent à
	      l'heure actuelle&nbsp;: la 1.7 et les 2.x. Ce document
	      présente la configuration de chacune d'elle. Les sources
	      de ces deux versions peuvent être récupérés sur le
	      <ulink url="ftp://ftp.isc.org/isc/inn/">site
	      officiel</ulink>.</para></listitem>
</itemizedlist>
</para>
</sect1>

<sect1>
<title>Autres solutions possibles</title>

<para>La solution que nous préconisons ici a plusieurs
avantages&nbsp;:

<itemizedlist>
<listitem><para>elle permet d'écrire et de consulter les articles tout
	    en étant déconnecté, ce qui, dans notre cas, signifie de
	    substantielles économies sur la facture
	    téléphonique...</para></listitem>

<listitem><para>l'utilisation de <productname>Suck</productname>
permet un filtrage efficace des articles, ce qui évite de voir les
forums encombrés par des fils de discussions ou par des sujets qui ne
nous intéressent pas, par exemple.</para></listitem>

<listitem><para><productname>INN</productname> offre une souplesse
supérieure à celle des autres outils fonctionnellement
équivalents. Une fois le serveur installé, il n'y a plus rien à
faire&nbsp;: tout est géré par une tâche <command>cron</command>. Le
plus souvent, les seules interventions consistent à ajouter de
nouveaux groupes de discussion, ou à en supprimer
certains.</para></listitem>

<listitem><para>elle est aussi un moyen d'<quote>enseignement par
l'exemple</quote>&nbsp;: installer <productname>INN</productname>,
c'est comprendre un peu mieux les mécanismes
d'Usenet.</para></listitem>
</itemizedlist></para>

<para>
Cela dit, d'autres solutions existent (<ulink url =
"http://www.linux-france.org/article/usenet/peruser/peruser.html">PerUser</ulink>,
<ulink
url="http://www.linux-france.org/article/usenet/leafnode/leafnode.html">leafnode</ulink>, <ulink url="http://www.linux-france.org/article/usenet/...">slrnpull</ulink>,
<!-- OLIVE Chmouel a fait une doc là-dessus, sinon je peux en traiter,
ce n'est pas compliqué et j'utilisais ça avant.
FIXME: récupérer l'URL correcte -->
le mode <quote><emphasis>agent</emphasis></quote> de <ulink
url="http://www.gnus.org">gnus</ulink>, <ulink
url="http://www.superpimp.org">Pan</ulink>, etc.). Nous n'en
traiterons pas ici.</para>
</sect1>

<sect1>
<title>Préliminaires</title>

<para>Quand on dit que l'installation est compliquée, on exagère
beaucoup&nbsp;: en fait, elle n'est pas difficile dès lors qu'un
minimum de choses sur le fonctionnement d'Usenet sont bien
comprises. Le but premier de ce document était justement de produire
une synthèse de tous les problèmes (et de leurs solutions) auxquels
j'ai été confronté&nbsp;: j'ai eu de la chance, j'en ai eu pas
mal...</para>

<para>Le seul commandement : <emphasis>Procéder par ordre</emphasis>
(certains diraient : <quote>de façon incrémentale</quote>...)</para>

<para>Rien ne sert d'installer <productname>INN</productname> tant que
l'on ne sait pas rapatrier les articles. Par conséquent, la première
chose à faire est d'étudier le mode de propagation des articles, puis
d'installer et de tester <productname>Suck</productname>. Lorsqu'on
sera sûr que tout fonctionne correctement, on passera à la phase
suivante, pas avant !</para>
</sect1>

<sect1>
<title>Fonctionnement de Usenet</title>

<para>Avant de commencer, une rapide présentation du fonctionnement
d'Usenet vous permettra de comprendre ce qu'il advient des articles
postés entre le moment où il sont écrits et celui où vous les
lisez. Et réciproquement, comment peut-on lire un article qui a été
posté à l'autre bout du monde&nbsp;?</para>

<sect2>
<title>Le spool des news</title>

<para><productname>INN</productname>, comme les autres serveurs
Usenet, utilise un <emphasis>spool</emphasis> pour stocker les
articles. Il s'agit d'une arborescence de répertoires qui abritera des
fichiers contenant les articles qu'il gère.  Généralement, sous Unix,
tous les répertoires de spool se trouvent sous
<filename>/var/spool</filename>, le spool des news se trouve donc sous
<filename>/var/spool/news</filename> et appartient à l'utilisateur et
au groupe <literal>news</literal>.</para>

<para>Normalement, l'utilisateur et le groupe <literal>news</literal>
ont dû être créés lors de l'installation de votre système. Vous pouvez
vous en assurer en consultant le contenu du fichier
<filename>/etc/passwd</filename> (de préférence avec
<command>vipw</command>, si vous en disposez). Vous devriez voir une
entrée comme celle-ci sous Linux&nbsp;:

<blockquote><screen>
news:x:9:9:news:/var/spool/news:/bin/sh
</screen></blockquote>

ou, sous FreeBSD&nbsp;:

<blockquote><screen>
news:*:8:8::0:0:News Subsystem:/usr/local/news:/usr/local/bin/zsh 
</screen></blockquote></para>

<para>Si ce n'est pas le cas, créez cet utilisateur et ce groupe de
façon à avoir cette ligne dans <filename>/etc/passwd</filename>. Pour
cela, utilisez les utilitaires de votre système (sur de nombreux Unix,
la commande <command>useradd</command> ou <command>adduser</command>
s'acquitte parfaitement de cette tâche&nbsp;: consultez le manuel de
votre système pour en savoir plus). Dans tous les cas, nous vous
déconseillons de créer un groupe ou un utilisateur <quote>à la
main</quote> (sauf si vous savez exactement ce que vous faites, ou
pour des raisons d'apprentissage...).</para>

<para>Les forums Usenet étant organisés par thèmes, le spool respecte
cette hiérarchie. <productname>INN</productname> créera donc autant de
répertoires qu'il gère de forums. Par exemple, lorsqu'il reçoit un
article de <literal>fr.comp.os.unix</literal>, il le place sous le
répertoire <filename>/var/spool/news/fr/comp/os/unix</filename>
	(<filename>/var/spool/news/articles/fr/comp/os/unix</filename>
	ou <filename>~news/spool/articles/fr/comp/os/unix</filename>
dans le cas d'<productname>INN 2.x</productname>) sous la forme d'un
fichier dont le nom est le numéro d'ordre de l'article dans ce
forum. Ce numéro est strictement <emphasis>local</emphasis>&nbsp;: le
fichier stockant le premier article reçu s'appelle
<filename>1</filename>, le deuxième <filename>2</filename>... et ces
noms n'ont aucun rapport avec ceux utilisés par les autres
serveurs. </para>

<para>Bien entendu, il faut qu'il y ait un mécanisme permettant de
supprimer de ces répertoires les articles les plus anciens car, sinon,
le disque se remplirait rapidement. Ce mécanisme est celui de
l'<quote><emphasis>expiration</emphasis></quote>, gérée par le
programme <command>expire</command> (fourni avec
<productname>INN</productname>), que nous étudierons plus loin.</para>
</sect2>

<sect2>
<title>Publication de nouveaux articles</title>

<para>Commençons par nous : que se passe-t-il lorsque l'on poste un
article dans un forum non modéré&nbsp;?</para>

<para>On supposera, pour cet exposé, que l'on a écrit et posté un
article dans <literal>fr.test</literal> tout en étant
déconnecté.</para>

<para><productname>INN</productname> place cet article dans
<filename>/var/spool/news/fr/test/xxxx</filename>
	(<filename>/var/spool/news/articles/fr/test/xxxx</filename> ou
	<filename>~news/spool/articles/fr/test/xxxx</filename> avec
<productname>INN 2.2</productname>, et où <emphasis>xxxx</emphasis> est
un nombre représentant le numéro <emphasis>local</emphasis> de votre
article dans ce forum&nbsp;; ainsi que nous l'avons écrit plus haut,
il est automatiquement généré par
<productname>INN</productname>.</para>

<para>À partir de ce moment, cet article est disponible pour tous ceux
qui utilisent votre machine comme serveur
<productname>INN</productname>. Si vous avez plusieurs comptes sur
cette machine, ils pourront le lire et ceci <emphasis>bien que
l'article ne soit pas encore diffusé sur les autres
serveurs</emphasis>&nbsp;!  Cela peut sembler bizarre, mais comprendre
cela, c'est comprendre le fonctionnement d'Usenet&nbsp;: priorité aux
articles locaux, et propagation des articles de serveur en serveur de
part le monde. En fait, un forum Usenet <quote>local</quote> est un
forum comme les autres sauf que ses articles ne sont pas distribués
aux autres serveurs...</para>

<para>Oui, mais voilà&nbsp;: vous aurez indiqué quelque part (nous
verrons comment) que vous voulez propager tous les articles que vous
avez postés (sur une machine isolée comme la mienne, il y a peu
d'intérêt à disposer de forums locaux, à part pour se parler
soi-même...). <productname>INN</productname> aura donc placé les
références de l'article dans le fichier
<filename>/var/spool/news/out.going/fai</filename> sous la forme d'une
ligne par article à poster. Ici, par exemple, la ligne serait&nbsp;:

<blockquote><screen>
fr/test/63 &lt;m3d8fyb7h9.fsf@titine.jacosoft.fr&gt;
</screen></blockquote>

car il se trouve que, du point de vue de mon serveur local, l'article
que j'ai posté serait le 63ème du forum
<literal>fr.test</literal>. Dans certains cas le numéro
d'immatriculation de l'article
(<literal>&lt;m3d8fyb7h9.fsf@titine.jacosoft.fr&gt;</literal>) n'est
pas placé dans ce fichier, cela importe peu en ce qui nous concerne
ici.</para>

<para>Tout ce processus se répétera à chaque fois que vous posterez un
article, dans quelque forum <emphasis>non modéré</emphasis> que ce
soit. Le problème des forums modérés sera traité lorsque nous
étudierons le rôle du fichier <filename>moderators</filename>
d'<productname>INN</productname>.</para>

<para>Lorsque vous vous connecterez à votre fournisseur, il vous
suffira alors d'invoquer le programme <command>rpost</command> (qui
fait partie de la distribution de <productname>Suck</productname>) qui
se chargera d'expédier les articles que vous avez écrits au serveur
Usenet de celui-ci. Votre fournisseur étant contacté en permanence à
l'Internet, le processus que nous venons de décrire se répètera&nbsp;:
les articles de son serveur sont envoyés aux serveurs auxquels il est
relié, etc.</para>
</sect2>

<sect2>
<title>Réception d'articles</title>

<para>Voyons maintenant ce qui se passe dans l'autre sens&nbsp;:
lorsque vous vous connectez à votre fournisseur, vous récupérez les
articles des forums auxquels vous êtes abonnés soit directement, soit
à l'aide d'un programme comme <command>suck</command> ou
<command>newsx</command>. Ces logiciels regroupent généralement les
articles récupérés dans un fichier batch (rassemblant un lot
d'articles) qui sera ensuite traité par les programmes
<command>rnews</command> ou <command>innxmit</command>, qui font tous
deux partie de la distribution d'<productname>INN</productname>. Ces
programmes lisent le fichier batch et envoient chacun des articles
qu'il contient au serveur. L'alimentation directe proposée par
certains fournisseurs d'accès automatise tout cela&nbsp;: une commande
suffit pour tout faire (la génération du fichier batch et son
traitement par <command>innxmit</command> ou <command>rnews</command>
est automatique). Le reste est identique au postage d'un article. En
fait, du point de vue du serveur, il n'y a pas vraiment de
différence&nbsp;: il reçoit des articles <emphasis>d'où qu'ils
viennent</emphasis> et les répartit dans le spool de news.</para>

<para>Résumons :

<itemizedlist> 
<listitem><para>le serveur ne fait que placer les articles qu'il
reçoit dans le spool (en fait, il gère aussi l'historique de ces
articles et leur expiration) ;</para></listitem>

<listitem><para>lorsqu'on poste un article, le lecteur de news se
charge de l'envoyer au serveur (avec un programme comme
<command>inews</command>, par exemple) ;</para></listitem>

<listitem><para>lorsqu'on souhaite expédier au serveur de son FAI un
article posté localement, on se connecte et on invoque un programme
comme <command>rpost</command> ;</para></listitem>

<listitem><para>lorsqu'on souhaite récupérer de nouveaux articles en
provenance du serveur de son FAI, on se connecte et on récupère les
articles avec des programmes comme <command>suck</command> ou
<command>newsx</command>, puis on les envoie à notre serveur local
avec un programme comme <command>rnews</command> ou
<command>innxmit</command>. Ce traitement peut être pris en charge par
votre fournisseur.</para></listitem>
</itemizedlist>
</para>

<para>Tout ceci peut être représenté par le schéma suivant &nbsp;:

<blockquote><screen>
VSP=/var/spool/news  (pour INN 1.7)
newsrun est généralement lancé automatiquement par cron.
 
                                 VSP/outgoing/news.fai.fr 
  --------------  &lt;--- rpost --- +                         &lt;-------
 | Serveur NNTP |                VSP/fr/test/5214                  n
 | news.fai.fr  |                                                  e
 | du provider  |                                                  w
  --------------  ---- suck ----&gt; /usr/lib/suck/* --- rnews --     s
                                                              |    r
                                                              |    u
     -- VSP/fr/test etc &lt;-------- newsrun -- VSP/in.coming &lt;--     n
    |                                                ^  |          |
    V                                                |  |          |
  --------------                                     |  |          |         
 | Serveur NNTP |--------- article à poster ---------    --- si posté
 | local (INN)  |                                            localement
 | Sert à poster|
 | et lire      |&lt;-----&gt; lecteur de news (knews, gnus, tin, readnews,  etc)
  -------------- 
 
</screen></blockquote>
</para>

<para>ATTENTION : pour <productname>INN 2.3</productname>, les droits
	par défaut de <command>rnews</command> et de
	<command>inews</command> ne permettent plus de s'en servir
	aussi simplement&nbsp;: pour obtenir un fonctionnement identique à
	<productname>INN 1.7</productname>, utilisez les options de
	compilation adéquates (cf. le fichier
	<filename>INSTALL</filename> de la distribution) ou modifiez
	ces droits manuellement.</para>

<para>Ceux qui ne se sont ni découragés, ni endormis, auront
probablement noté un problème dans ce raisonnement&nbsp;: on a dit
qu'à chaque fois que l'on postait un article, il était référencé dans
<filename>/var/spool/news/outgoing/fai</filename> (ou
<filename>~news/spool/outgoing/fai</filename>) et que c'était ce qui
permettait à <command>rpost</command> de savoir quels étaient les
articles à propager vers le serveur du FAI. Mais on a dit aussi que le
comportement était le même face à n'importe quel article qu'il
recevait. Par conséquent, lorsqu'on récupère un article venant de
notre fournisseur, la logique voudrait qu'il soit aussi référencé dans
ce fichier puisque, pour <productname>INN</productname>, un article
n'a pas d'odeur. Mais, alors, lors du prochain
<command>rpost</command> tous les articles que nous avons récupérés
seront renvoyés à l'expéditeur&nbsp;!? La réponse est
<emphasis>oui</emphasis>, sauf si l'on explique à
<productname>INN</productname> qu'il ne faut pas renvoyer un article à
son expéditeur, de sorte qu'il se contente d'expédier ceux que nous
avons nous mêmes écrits...</para>
</sect2>

<sect2>
<title>Test du serveur de votre FAI</title>

<para>On peut accéder à un serveur <productname>INN</productname> par
le biais d'une connexion réseau. Il accepte des commandes grâce
auxquelles n'importe quel agent distant (programme, humain, pingouin
...)  habilité peut requérir des services, par exemple obtenir une
copie d'un article disponible ou bien en publier un nouveau.</para>

<para>Vos exemplaires de <command>suck</command> et
d'<productname>INN</productname> fonctionnent ainsi.  Nous allons
simuler cela en nous connectant au serveur de news de notre
FAI.</para>

<para>Connectez-vous tout d'abord à votre FAI.</para>

<para>Puis, tapez la commande suivante :

<blockquote><screen>
% telnet news.fai.fr nntp
</screen></blockquote>
</para>

<para>Normalement vous devez obtenir un message du genre :

<blockquote><screen>
Trying xxx.yyy.zzz.ttt...
Connected to news.aaa.net.
Escape character is '^]'.
200 abcdef InterNetNews NNRP server INN 1.7.2 08-Dec-1997 ready
</screen></blockquote>
</para>

<para><emphasis>Quelques explications</emphasis>&nbsp;:

<itemizedlist>
<listitem><para>En précisant <literal>nntp</literal> lors du
<command>telnet</command>, vous indiquez le protocole que vous
utilisez. NNTP signifie <literal>N</literal>ew <literal>N</literal>ews
<literal>T</literal>ransfer <literal>P</literal>rotocol. C'est le
protocole utilisé actuellement sur Usenet.</para></listitem>

<listitem><para><literal>xxx.yyy.zzz.ttt</literal> est l'adresse IP du
serveur de news que vous tentez de contacter.</para></listitem>

<listitem><para>Le fait que vous soyez connecté à
<literal>news.aaa.net</literal> indique que votre FAI délègue la
gestion des news à ce serveur. La machine porte en fait le nom
<literal>abcdef</literal>. Comme vous pourrez le constater plus loin,
cette dernière information est importante, nous vous invitons à la
noter car c'est l'identifiant <emphasis>unique</emphasis> de ce
serveur de news sur l'Internet.</para></listitem>

<listitem><para>Au passage, vous pouvez noter le serveur utilisé par
votre FAI, ici il s'agit d'<productname>INN</productname> et ce sera
très souvent le cas. C'est toujours rassurant (et gratifiant) de voir
que, finalement, votre machine n'a rien à envier à celle de votre
fournisseur, si ce n'est quelques dizaines de
giga-octets.</para></listitem>

<listitem><para>La dernière ligne indique que vous êtes connecté au serveur et
que celui-ci attend vos commandes.</para></listitem>
</itemizedlist>
</para>

<para>Tapez alors la commande :

<blockquote><screen>
mode reader  
</screen></blockquote>
</para>

<para>Puis  : 

<blockquote><screen>
group fr.comp.os.unix
</screen></blockquote>

(ou le nom de tout autre forum distribué par ce serveur).</para>

<para>Vous devez obtenir une réponse du style :

<blockquote><screen>
211 174 2039 2269 fr.comp.os.unix 
</screen></blockquote>
</para>

<para>Sans entrer dans le détail, si vous obtenez cette ligne, cela
signifie que votre serveur de news distribue au moins le forum
<literal>fr.comp.os.unix</literal>... (2269 signifie qu'il y a 2269
articles dans ce forum, et 2039 est le numéro du premier article
disponible&nbsp;: les articles les plus anciens ont, sur ce serveur,
été effacés...).</para>

<para>Tapez alors : 

<blockquote><screen>
quit
</screen></blockquote>

pour fermer la connexion avec le serveur.</para>

<para>Si vous avez réussi cette étape, c'est que vous pouvez vous
connecter à votre serveur distant. Il reste maintenant à récupérer les
nouveaux articles, à partir de ce serveur distant, sur votre machine.</para>

<para>Lorsque vous aurez configuré <productname>INN</productname> sur
votre machine, vous pourrez faire exactement la même chose. Sur ma
machine, la commande&nbsp;:

<blockquote><screen>
% telnet localhost nntp
</screen></blockquote>

me répond :

<blockquote><screen>
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
200 jacoboni InterNetNews server INN 2.2 21-Jan-1999 ready 
</screen></blockquote>

et toutes les opérations décrites plus haut s'appliquent évidemment de
la même façon.</para>
</sect2>
</sect1>


<sect1>
<title>Installation et configuration de
<productname>Suck</productname></title>

<para>
<productname>Suck</productname> vous permet de récupérer par vous même
les articles sur un serveur NNTP distant.</para>

<para>
Toutes les manipulations qui suivent doivent se faire sous le compte
<literal>root</literal>.</para>

<sect2>
<title>Installation de <productname>Suck</productname></title>

<para>
<productname>Suck</productname> peut être récupéré sous la forme d'un
paquetage précompilé pour les différentes distributions Linux à base
de paquetages (<literal>rpm</literal> ou <literal>deb</literal>). Vous
pouvez aussi préférer récupérer les sources sous la forme d'un fichier
<literal>tgz</literal> et les compiler pour votre système. La première
solution est, évidemment la plus simple mais la distribution source
vient avec tout ce qu'il faut pour permettre une configuration adaptée
à vos besoins. À l'heure où ces lignes sont écrites, la version la
plus récente est la 4.2.3.</para>

<para>
Un argument en faveur de cette mise à jour est que les nouvelles
versions permettent désormais de ne récupérer que les en-têtes des
messages afin de marquer ceux qui nous intéressent pour en récupérer le
corps (option <literal>-g</literal>). Cette option, ainsi qu'un script
Perl/Tk (<filename>header.pl</filename>) et une application Java
(<filename>Suck.java</filename>) permettent de sélectionner les
articles à télécharger via une interface graphique X.</para>

<para>Je n'ai personnellement pas testé ces interfaces graphiques et
toute expérience est donc la bienvenue bien que, personnellement, je
suis plutôt sceptique sur ces récupérations en deux temps (en-têtes,
puis corps des articles sélectionnés)&nbsp;: le mécanisme des
<emphasis>killfiles</emphasis> de <productname>Suck</productname> me
semble, à ce point de vue, plus efficace... D'autre part, l'un des
grands avantages de <productname>Suck</productname>, pour moi, est de
pouvoir l'appeler à travers des scripts&nbsp;: l'utilisation d'une
interface graphique annule cette fonctionnalité (mais il est vrai que
l'on n'est pas obligé de l'utiliser).
</para>

<para>
L'installation de <productname>Suck</productname> via les paquetages
précompilés de Linux nécessite d'avoir auparavant installé le
paquetage <productname>INN</productname>. En effet, par défaut,
<productname>Suck</productname> est prévu pour fonctionner avec
lui. Vous avez donc le choix&nbsp;: forcer l'installation de
<productname>Suck</productname> <emphasis>sans</emphasis>
<productname>INN</productname> en utilisant l'option adéquate de votre
gestionnaire de paquetages ou installer <productname>INN</productname>
avant (cette dernière solution est préférable puisqu'il faudra, de
toutes façons, l'installer...). Si vous utilisez une distribution
Debian, le mieux est d'installer le paquetage via la commande
<command>apt-get install suck</command> qui résoudra toutes les
dépendances et installera les paquetages correctement. Comme avec
l'option <literal>--nodeps</literal> de <command>rpm</command>, vous
pouvez aussi utiliser l'option <literal>--force-depends</literal> de
<command>dpkg</command> pour ignorer les dépendances. Reportez-vous à
la section sur l'installation et la configuration de
<productname>INN</productname>.
</para>

<para>
Si vous utilisez un paquetage <filename>rpm</filename> ou
	<filename>deb</filename>, pas de problème&nbsp;: vous
	l'installez avec les outils de maintenance des paquetages de
	votre système (consultez la documentation de votre
	distribution).
</para>

<para>Si vous partez des sources, faites en sorte de placer les
binaires (<command>lmove, rpost, suck, testhost</command>) dans
<filename>/usr/local/bin</filename>, les pages de manuel iront dans
<filename>/usr/local/man/man1</filename> et les scripts et fichiers de
configuration (<command>get.news.innxmit</command>,
<command>get.news.rnews</command>,<command>put.news</command>,
<filename>sucknewsrc</filename>, <filename>suckkillfile</filename>)
dans <filename>/usr/local/etc/suck</filename>. Ce sont, en tous cas,
les emplacements préconisés mais vous pouvez en choisir d'autres en
fonction des us et coutumes en vigueur sur votre système...
</para>

<para>
Dans la suite de ce document, nous utiliserons ces emplacements&nbsp;:
effectuez les adaptations nécessaires en fonction de votre système.
</para>
</sect2>

<sect2>
<title>Premiers tests</title>

<para>
Maintenant, on peut tester la récupération (on suppose que le
<command>telnet news.fai.fr nntp</command>, décrit plus haut, a été
testé...). Pour ce faire, on édite le fichier
<filename>sucknewsrc</filename> (ou on le crée, s'il n'existe pas) qui
abritera les noms des forums qui nous intéressent. L'exemplaire livré
(<filename>/usr/local/share/examples/suck/sucknewsrc.sample</filename>
pour FreeBSD) contient plusieurs lignes que l'on supprime. À des fins
de test, on ajoute une seule ligne :

<blockquote>
<screen>
fr.comp.os.unix -10
</screen>
</blockquote>

pour indiquer à <command>suck</command> qu'il devra, sitôt lancé,
récupérer les 10 derniers articles du forum
<literal>fr.comp.os.unix</literal>. N'oubliez pas le
<literal>10</literal> car, sinon, vous risquez de récupérer tous les
articles de ce forum disponibles sur le serveur&nbsp;!
</para>

<para>
Vérifiez que le sous-répertoire
<filename>/usr/local/etc/suck/Msgs</filename> existe, sinon créez-le
(attention à bien respecter les minuscules et les majuscules).
</para>

<para>Placez-vous dans <filename>/usr/local/etc/suck</filename> et
tapez la commande suivante (après établissement de la connexion
PPP...)&nbsp;:

<blockquote>
<screen>
suck news.fai.fr -m -H -K
</screen>
</blockquote>

<itemizedlist>
<listitem><para>L'option <literal>-m</literal> permet d'invoquer
<command>suck</command> en mode
<emphasis>multi-fichiers</emphasis>&nbsp;: il créera autant de
fichiers qu'il récupère d'articles. Si vous omettez cette option, les
articles seront simplement affichés à l'écran au fur et à mesure de
leur récupération.</para></listitem>

<listitem><para>Les options <literal>-H -K</literal> demandent à
<command>suck</command> d'ignorer les fichiers d'historique et le
kill-file (cf. plus loin)...</para></listitem>
</itemizedlist>
</para>

<para>
Normalement, l'affichage vous apprend que vous êtes connecté au
serveur de news distant, puis vous indique que le nombre d'articles à
récupérer dans <literal>fr.comp.os.unix</literal> est limité à 10.
Enfin, la récupération commence&nbsp;: le nombre d'articles restant à
récupérer et la vitesse de transfert s'affiche. Lorsque cela est
terminé, vous pouvez couper votre connexion PPP&nbsp;: les articles
sont sur votre machine...
</para>

<para>
Plusieurs choses ont dû se passer&nbsp;:

<itemizedlist>
<listitem><para>les fichiers <filename>/tmp/suck.newrc</filename> et
<filename>/tmp/suck.sorted</filename> ont été créés (éventuellement à
un autre emplacement selon le système que vous
utilisez...)&nbsp;;</para></listitem>

<listitem><para>le sous-répertoire
<filename>/usr/local/etc/suck/Msgs</filename> contient désormais des
fichiers portant des noms étranges (par défaut, c'est là que le mode
<emphasis>multi-fichiers</emphasis> sauve les fichiers
articles). Chacun de ces fichiers correspond à l'un des 10 articles
que vous avez récupérés et vous pouvez les visualiser avec votre
éditeur de texte favori (rassurez-vous, il existe des moyens bien
meilleurs de consulter les articles...).</para></listitem>
</itemizedlist>
</para>

<para>
Détaillons un peu : 

<itemizedlist>
<listitem><para><filename>/tmp/suck.newrc</filename> est une mise à
jour de <filename>sucknewsrc</filename>&nbsp;: éditez-le et vous
verrez que la ligne concernant <literal>fr.comp.os.unix</literal> a
remplacé <literal>-10</literal> par une autre valeur, le numéro du
dernier article lu.</para></listitem>

<listitem><para><filename>/tmp/suck.sorted</filename> contient les en-têtes
des articles récupérés. Ce fichier ne sert pas à grand chose sauf
lorsqu'on veut pister d'éventuels dysfonctionnements.</para></listitem>
</itemizedlist>
</para>

<para>
Le problème est que <filename>sucknewsrc</filename> n'a pas été
modifié, or <command>suck</command> n'utilise que ce dernier pour
stocker le numéro du dernier article récupéré afin de pouvoir, lors de
la session suivante, ne télécharger que les nouveaux. Cela signifie
donc que si vous relanciez <command>suck</command> maintenant, il
récupérerait exactement les mêmes articles...
</para>

<para>
Pour éviter cela, il faut détruire l'ancien
<filename>sucknewsrc</filename>, et renommer
<filename>/tmp/suck.newrc</filename> en
<filename>sucknewsrc</filename>... Fastidieux, non ?
</para>

<para>
Heureusement, l'option <literal>-c</literal> (comme
<emphasis>c</emphasis>lean), passée à <command>suck</command> effectue
cela automatiquement&nbsp;:

<itemizedlist>
<listitem><para>elle renomme <filename>sucknewsrc</filename> en
<filename>sucknewsrc.old</filename> (ce qui permet de revenir en
arrière, si nécessaire)&nbsp;;</para></listitem>

<listitem><para>elle renomme <filename>/tmp/suck.newsrc</filename> en
<filename>/usr/local/etc/suck/sucknewsrc</filename>&nbsp;;</para></listitem>

<listitem><para>elle détruit <filename>/tmp/suck.sorted</filename> (et
d'autres fichiers utilisés temporairement par
<command>suck</command>).</para></listitem>
</itemizedlist>
</para>

<para>
Nous vous conseillons de n'utiliser cette option que lorsque vous
aurez bien vérifié que tout fonctionne correctement&nbsp;: en effet,
les différents fichiers sont autant de traces de fonctionnement.
</para>

<para>
Bon, on a supposé que tout avait marché comme sur des roulettes... Ce
serait trop simple&nbsp;: votre premier lancement de
<command>suck</command> a très bien pu ne pas se dérouler comme
prévu... Notamment, vous pouvez avoir eu des erreurs du style&nbsp;:

<blockquote>
<screen>
430 No such article
..........
</screen>
</blockquote></para>

<para>Si ces erreurs sont rares (1 sur 10, par exemple) ce n'est pas
trop grave, il faudra quand même surveiller les sessions
suivantes. Si, par contre, il y en a beaucoup (au pire, 10 sur 10)
alors bienvenue à notre premier problème...
</para>

<para>
Chaque article porte un champ d'immatriculation. C'est l'en-tête
(<quote>header</quote>) appelé <quote>Message-id</quote>, établi lors
de la publication de l'article de façon à être (très
vraisemblablement) unique.</para>
 
<para>
Comme nous l'avons vu dans la section 2, sur toute machine utilisant
un logiciel serveur de news classique (<productname>INN</productname>,
par exemple) chaque article est stocké dans un fichier nommé d'après
son numéro d'arrivée, lui-même placé dans un répertoire le plus
souvent placé sous <filename>/var/spool/news</filename> et au nom
établi d'après celui du forum. Le premier article arrivé sur un
serveur donné pour le forum <literal>fr.comp.os.unix</literal>, par
exemple, sera stocké dans un fichier appelé
<filename>/var/spool/news/fr/comp/os/unix/1</filename> (ceci pour un
<productname>INN 1.7</productname>... Pour un <productname>INN
2.2</productname>, il s'agira plutôt de
<filename>/var/spool/news/articles/fr/comp/os/unix/1</filename>).
</para>
 
<para>
<emphasis>Attention</emphasis> : par <quote>premier article
arrivé</quote>, il ne faut pas entendre <quote>premier article paru
dans le groupe</quote>, car un nouveau serveur récupère, sitôt
connecté, les articles circulant à ce moment et non les anciens.
</para>
 
<para>
Le <quote>Message-id</quote> d'un article donné est le même sur tous
les serveurs, mais son <quote>numéro</quote> sur deux serveurs
distincts sera très probablement différent.
</para>
 
<para>
<command>suck</command> récupère les articles par leur
<literal>Message-id</literal>, or certains serveurs de news dont ceux
d'<literal>isdnet.net</literal>, utilisé par de nombreux fournisseurs
d'accès, ont configuré leur système pour que la récupération ait lieu
sur le <emphasis>numéro d'article</emphasis>... La récupération
<emphasis>classique</emphasis> par <command>suck</command> ne
fonctionne donc plus, d'où ces erreurs...
</para>

<para>
Heureusement, <emphasis>Emmanuel Chantreau</emphasis> a corrigé ce
problème en modifiant le code de <command>suck</command> pour lui
ajouter une option <literal>-n</literal> lui permettant de récupérer
les articles par leur <emphasis>numéro</emphasis> sur le serveur
plutôt que sur leur <literal>Message-id</literal>. Cette modification
a été intégrée à <command>suck</command> à partir de la version 3.8.0.
</para>

<para>
Cette option a un autre effet, il se trouve qu'elle surcharge moins le
serveur distant, je vous conseille donc de l'utiliser
systématiquement. Passé d'<productname>HOL</productname> à
<productname>Easynet</productname>, qui autorise la récupération sur
le <literal>Message-id</literal>, j'ai remarqué que celle-ci
provoquait de fréquents <quote>time-out</quote> (tous les 10 articles,
environ). L'ajout de l'option <literal>-n</literal> a corrigé ce
problème.
</para>

<para>
À partir de là, on suppose donc que <command>suck</command> a bien
récupéré vos articles. Si ce n'est pas le cas, n'allez pas plus loin,
recommencez tout depuis le début&nbsp;: ce ne sera pas une perte de
temps...
</para>

<para>
Pour vous aider dans le dépistage des problèmes, vous pouvez utiliser
l'option <literal>-D</literal> qui créera un fichier
<filename>debug.suck</filename> contenant les traces d'exécution du
programme.</para>
</sect2>

<sect2>
<title>Tests supplémentaires : préparation à l'utilisation de
<command>rnews</command></title>

<para>Si les tests précédents ont donné satisfaction, on peut passer à
l'étape suivante pour préparer l'installation de
<productname>INN</productname> et la lecture des articles avec un
lecteur de news digne de ce nom...</para>

<para>Au lieu de sauvegarder chaque article dans un fichier séparé
comme c'était le cas jusqu'alors, on va créer un fichier de traitement
par lots (<quote>batch</quote>) qui pourra ensuite être traité par le
programme <command>rnews</command> de <productname>INN</productname>
(cf. plus loin).</para>

<para>La commande permettant de réaliser cela est la suivante (elle
doit être invoquée à partir du répertoire
<filename>/usr/lib/suck</filename>)&nbsp;:

<blockquote>
<screen>
suck news.fai.fr -c -n -H -K -br nouveau
</screen>
</blockquote>
</para>

<para>Les options <literal>-c -n -H -K</literal> ont déjà été décrites plus
haut...</para>

<para>L'option <literal>-br nouveau</literal> indique à
<command>suck</command> de créer un fichier dit <quote>batch</quote>,
qui s'appellera <filename>nouveau</filename>, contenant tous les
articles reçus afin qu'ils puissent ensuite être envoyés à votre
serveur de news local via <command>rnews</command> (il existe aussi
une option <literal>-bi</literal> réalisant la même chose en vue d'un
traitement par <command>innxmit</command>&nbsp;: toutes les
informations sur les formats de ces fichiers batch sont disponibles
par la commande <command>man rnews</command> et <command>man
innxmit</command> et ne seront donc pas traitées ici).</para>

<para><emphasis>Attention :</emphasis> Pour une raison que je ne
m'explique pas encore, <command>suck</command> dans sa version 3.9.0
refuse de mettre à jour le fichier de batch si celui-ci existe
déjà... La seule solution que j'ai trouvé pour l'instant est de
renommer celui-ci en <filename>nouveau.old</filename> avant d'appeler
<command>suck</command>. À noter que ce problème n'apparaissait pas
avec la version précédente mais qu'il est, de toutes façons,
préférable de conserver une version du batch précédent, au cas
où...</para>

<para>On va d'abord faire en sorte de récupérer des articles&nbsp;:
éditez le fichier <filename>/usr/local/etc/suck/sucknewsrc</filename>, ôtez
la deuxième valeur en face de <literal>fr.comp.os.linux</literal> et
modifiez le chiffre restant (numéro du dernier article récupéré de ce
groupe) en lui ôtant 10&nbsp;: vous devriez donc récupérer au moins 10
articles... Lancez la commande décrite plus haut.</para>

<para>Les choses ont changé par rapport aux premiers tests&nbsp;:

<itemizedlist>
<listitem><para>le répertoire <filename>/usr/local/etc/suck/Msgs</filename>
est vide ;</para></listitem> 

<listitem><para>un fichier <filename>nouveau</filename> a été créé
dans <filename>/usr/local/etc/suck</filename></para></listitem>
</itemizedlist></para>

<para>Éditez le fichier <filename>nouveau</filename> et vérifiez qu'il
contient bien les articles reçus (séparés par des champs <literal>#!
rnews xxxx</literal> où <literal>xxxx</literal> est la taille de
l'article). Tant que vous n'avez pas installé
<productname>INN</productname> (et donc <command>rnews</command>) vous
ne pouvez pas en faire grand chose hormis le parcourir...</para>

<para>Ce qui est important c'est que, si vous êtes arrivés là, vous
êtes prêts pour la suite...  Sinon, ne continuez pas&nbsp;:
assurez-vous que tout ce qui a été décrit plus haut fonctionne
correctement&nbsp;!</para>

<para>À noter que <command>suck</command> dispose de l'option
<literal>-a</literal>, lui permettant de mettre en batch tous les
articles récupérés même si, pour une raison ou une autre (une
déconnexion intempestive, par exemple), il n'a pu terminer la
récupération totale. En ce cas, les articles déjà récupérés pourront
donc être traités par <command>rnews</command> (sans cette option,
<command>suck</command> ne construit le batch
qu'<emphasis>après</emphasis> s'être terminé normalement).</para>

<para>Nous allons maintenant passer à l'installation de
<productname>INN</productname>. Certains aspects de <command>suck</command> ont
été omis&nbsp;: c'est volontaire car ils n'ont aucun sens tant que
notre serveur de news n'est pas installé...</para>
</sect2>
</sect1>

<sect1><title>Installation et configuration de
      <productname>INN</productname></title>


<sect2><title>Installation à partir d'un paquetage précompilé</title>

<para>Certains diront qu'il faut mieux partir des sources
de <productname>INN</productname> et les compiler&nbsp;: cela permet de
mieux maîtriser toutes les options de fonctionnement. C'est vrai, mais
les paquetages précompilés pour Linux s'avèrent si faciles à installer
que beaucoup choisissent la solution des paquetages...</para>


<para>Dans cette section, nous ne parlerons pas de la compilation
de <productname>INN</productname> mais de son installation au moyen des
différents systèmes de paquetages précompilés existants sur Linux et
FreeBSD.</para>

<para>La dernière version de <productname>INN</productname> existe
dans toutes les bonnes distributions Linux (Debian, Red Hat,
Slackware, etc.), sinon la version précédente doit se trouver sur le
CD-ROM. Il en va de même pour FreeBSD. Reportez-vous aux manuel du
gestionnaire de paquetage que vous utilisez (<command>rpm</command>
pour RedHat Linux, <command>apt-get</command> pour Debian Linux, ou
<command>pkg_add</command> pour FreeBSD).</para>

</sect2>
<sect2><title>Installation à partir des sources</title>

<para>La procédure est on ne peut plus classique&nbsp;: décompactez le
fichier archive dans un répertoire temporaire, placez-vous dans
celui-ci et exécutez les commandes magiques&nbsp;:
<command>./configure</command> et <command>make</command>. Si tout ce
passe bien, il vous reste à faire <command>make install</command> pour
que les différentes parties du logiciel aillent se placer à leurs
emplacements définitifs.</para>
</sect2>

<sect2><title>Fichiers et répertoires de INN 1.7</title>

<para><productname>INN 1.7</productname> utilise plusieurs répertoires
(je donne ici ceux que ma distribution Linux de l'époque utilisaient :
ce sera différent avec FreeBSD, voire avec une autre distribution
Linux)&nbsp;:</para>

<para><itemizedlist> 

<listitem><para><filename>/etc/news</filename> contient les fichiers
de configuration&nbsp;:

<blockquote><programlisting>
actsync.cfg         expire.ctl          innwatch.ctl        nnrp.access
actsync.ign         hosts.nntp          moderators          nntpsend.ctl
control.ctl         hosts.nntp.nolimit  motd.news           overview.fmt
distrib.pats        inn.conf            newsfeeds           passwd.nntp
</programlisting></blockquote></para></listitem>

<listitem><para><filename>/var/lib/news</filename> contient les
fichiers de travail&nbsp;:

<blockquote><programlisting>
active         history        send-ihave     subscriptions
active.times   history.dir    innlog.pl      send-nntp
distributions  history.pag    newsgroups     send-uucp
</programlisting></blockquote></para></listitem>

<listitem><para><filename>/var/lib/news/innd</filename> contient les
fichiers utilisés par <command>innd</command>&nbsp;:

<blockquote><programlisting>
control  nntpin
</programlisting></blockquote></para></listitem>

<listitem><para><filename>/usr/lib/news</filename> contient les
fichiers scripts nécessaires à l'exécution
d'<productname>INN</productname>, ainsi que l'exécutable
<command>rnews</command> déjà évoqué&nbsp;:

<blockquote><programlisting>
innshellvars      innshellvars.pl   parsecontrol
innshellvars.csh  innshellvars.tcl  rnews
</programlisting></blockquote></para></listitem>

<listitem><para><filename>/usr/lib/news/bin</filename> contient les
exécutables&nbsp;:

<blockquote><programlisting>
actmerge        ctlinnd         inncheck        news.daily      sendbatch
actsync         ctlrun          innconfval      newsrequeue     sendxbatches
actsyncd        cvtbatch        innmail         nntpget         shlock
archive         expire          innstat         nntpsend        shrinkfile
auth.dir        expireover      innwatch        overchan        tally.control
batcher         expirerm        innxbatch       pgpverify       tally.unwanted
buffchan        fastrm          innxmit         prunehistory    writelog
control         filechan        makeactive      rnews
convdate        getlist         makegroup       scanlogs
crosspost       grephistory     makehistory     scanspool
</programlisting></blockquote></para></listitem>

<listitem><para><filename>/var/log/news</filename> contient les
fichiers de trace d'activité&nbsp;:

<blockquote><programlisting>
expire.log    news          news.err      nntpsend.log
errlog        expire.rm     news.crit     news.notice   unwanted.log
</programlisting></blockquote></para></listitem>
</itemizedlist></para>
</sect2>

<sect2><title>Fichiers et répertoires de INN 2.x</title>

<para>Hormis les fichiers de trace qui, comme d'habitude, se trouvent
sous <filename>/var/log/news</filename>, tous les fichiers de
<productname>INN 2.x</productname> se trouvent sous l'arborescence de
l'utilisateur <literal>news</literal>&nbsp;: <literal>~news</literal>
(<filename>/usr/local/news</filename> sur FreeBSD).</para>

<para>Cette arborescence se décompose en&nbsp;:

<itemizedlist> 

<listitem><para><filename>spool</filename>&nbsp;: arborescence du
	      spool de news (équivalent de
	      <filename>/var/spool/news</filename> de <productname>INN
	      1.7</productname>).</para>
	  </listitem>

<listitem><para><filename>bin</filename>&nbsp;: contient tous les
exécutables (c'est l'équivalent du répertoire
<filename>/usr/lib/news/bin</filename> de <productname>INN
1.7</productname>). C'est là, notamment que se trouvent les programmes
<command>innd</command>, <command>ctlinnd</command>,
<command>expire</command>, <command>rnews</command> et le script de
maintenance quotidienne que nous étudierons plus
tard&nbsp;:<command>news.daily</command>.</para></listitem>

<listitem><para><filename>db</filename>&nbsp;: contient les bases de données
utilisées par <productname>INN</productname>&nbsp;: le fichier
<filename>active</filename>, les fichiers de l'historique
(<filename>history.*</filename>) et le fichier de description des
forums (<filename>newsgroups</filename>).</para></listitem>

<listitem><para><filename>etc</filename>&nbsp;: contient tous les fichiers
de configuration, notamment les fichiers
<filename>inn.conf</filename>, <filename>newsfeeds</filename> et
<filename>moderators</filename>.</para></listitem>

<listitem><para><filename>lib</filename>&nbsp;: contient les bibliothèques
propres à <productname>INN</productname> ainsi que des scripts comme
<command>docheckgroups</command>,
<command>innshellvars</command>.</para></listitem>

<listitem><para><filename>run</filename>&nbsp;: contient les fichiers
<filename>pid</filename> correspondant à l'exécution de
<productname>INN</productname>.</para></listitem>
</itemizedlist></para>

<para>Il est hors de question de décrire le rôle de chacun de ces
fichiers&nbsp;: nous ne traiterons que des plus importants (les
descriptions des autres, ainsi que leurs rôles respectifs, sont
décrits dans les pages du manuel en ligne).</para>
</sect2>

<sect2><title>Les fichiers de configuration</title>

<para>Tous ces fichiers, comme la plupart des fichiers de
configuration de <productname>INN</productname>, débutent par une
explication (parfois sibylline, il est vrai...) de leur
syntaxe. <emphasis>Pour leurs modifications, mettez-vous sous le
compte <literal>news</literal>, il est impératif que ces fichiers
appartiennent à l'utilisateur et au groupe <literal>news</literal>
pour que <productname>INN</productname> fonctionne
correctement...</emphasis> D'autre part, avant de les modifier,
sauvegardez leur contenu original (en faisant, par exemple,
<userinput>cp newsfeeds newsfeeds.orig</userinput>).</para>

<para><itemizedlist>
<listitem><para><filename>inn.conf</filename>&nbsp;: Chaque ligne est
de la forme&nbsp;: <literal>paramètre: valeur</literal> (attention, il
y a un espace après le
'<literal>:</literal>'). <literal>paramètre</literal> et
<literal>valeur</literal> sont des chaînes de caractères (ne mettez
pas de <literal>"</literal> autour...).  Les différents paramètres
valides et intéressants pour nous sont&nbsp;:

<itemizedlist> 

<listitem><para><literal>organization</literal>&nbsp;: comme valeur, mettez
 ce que vous voulez voir apparaître dans le champ ORGANIZATION des
 articles que vous posterez&nbsp;;</para></listitem>

<listitem><para><literal>fromhost</literal>&nbsp;: le nom de votre machine,
 qui apparaîtra après votre <literal>username@</literal> dans le champ
 FROM des articles que vous posterez.  En fait, normalement, c'est
 votre lecteur de news qui doit s'en charger, ce qui veut dire que si
 cette valeur est utilisée, c'est que votre lecteur est mal
 configuré... Pour cette raison, on met une valeur comme
 «&nbsp;un.lecteur.mal.configure&nbsp;» ce qui permettra de détecter
 rapidement ce problème&nbsp;;</para></listitem>  

<listitem><para><literal>pathhost</literal>&nbsp;: le contenu de ce
 champ est important car c'est lui qui apparaîtra au début des champs
 <literal>Path:</literal> des articles que vous posterez. C'est
 l'identifiant unique de votre serveur sur tout Usenet. Il est inutile
 si vous utilisez simplement <command>suck</command> ou
 <command>newsx</command> pour vous approvisionner sur le serveur de
 votre FAI mais il est nécessaire si vous bénéficiez d'un système
 d'alimentation directe comme UUCP. Mettez ici ce que vous aura
 indiqué le newsmater lorsque vous aurez demandé à être feedé par
 cette méthode.</para></listitem>

<listitem><para><literal>ovmethod</literal>&nbsp;: ce champ apparaît
	      dans <productname>INN 2.3</productname> qui, par rapport
	      aux versions précédente, utilise une gestion différente
	      des <quote>overview</quote>. La méthode utilisée par
	      défaut est <literal>tradindexed</literal>&nbsp;: il en
	      existe d'autres... Voir <literal>man inn.conf</literal>.</para>
	  </listitem>

 </itemizedlist></para>

<para>Les autres paramètres, s'ils ne sont pas mentionnés, prennent
les valeurs des variables d'environnement&nbsp;: le paramètre
<literal>server</literal>, par exemple, sera par défaut positionné à
la même valeur que la variable d'environnement
<literal>NNTPSERVER</literal> (qui, normalement doit être positionnée
à <literal>localhost</literal> dans le fichier
<filename>/etc/profile</filename> ou équivalent sur votre
système).</para>

<para>Certains paramètres permettent de configurer les ordres de
grandeur de <productname>INN</productname>&nbsp;: nous ne les
modifierons pas ici car ils conviennent à l'utilisation qui sera la
nôtre. Certains autres permettent d'activer (valeur
<literal>true</literal> ou de désactiver (valeur
<literal>false</literal>) certains comportements. Pour un petit
serveur, par exemple, il peut être préférable de désactiver
<literal>doinnwatch</literal>.</para>

<para>Si vous utilisez des répertoires différents de ceux considérés
par défaut, c'est également dans ce fichier qu'il faudra le
préciser.</para>

<para>La page de manuel (<command>man inn.conf</command>) ainsi que le
fichier <filename>INSTALL</filename> livré avec les sources indiquent
la signification de tous ces paramètres&nbsp;: je vous invite
fortement à consulter ces deux documents.</para>

<para>Avec les lignes suivantes dans un
<filename>inn.conf</filename>&nbsp;:

<blockquote><programlisting>
organization:           Truc Bidule
pathhost:               machin
</programlisting></blockquote>

Un article posté sur ce serveur local aura les entêtes suivants&nbsp;:

<blockquote><programlisting>
From: Eric Jacoboni &lt;jaco@youpi.fr&gt;
Organization: Truc Bidule
Subject: blah blah blah...
Path: machin!not-for-mail
...
</programlisting></blockquote>
</para>

<para>De même, avec un système d'alimentation directe tous les
articles reçus auront leur champ <literal>Path:</literal> commençant
par <literal>machin!...</literal> (cela est configuré au niveau du
fournisseur). Ainsi que nous le disions plus haut, le
<literal>machin</literal> en première position correspond au champ
<literal>pathhost</literal> configuré dans le fichier
<literal>inn.conf</literal> de notre serveur, et ce champ
<literal>Path:</literal> est, finalement, le résultat de la
concaténation de tous les <literal>pathhost</literal> des serveurs
NNTP par lesquels l'article est passé. Si l'on veut avoir plusieurs
feeds, cela permet au fournisseur de ne pas reproposer les articles
que l'on a déjà émis.</para>

<para>On notera la contenu du champ <literal>From</literal>&nbsp;:
l'adresse <literal>jaco@youpi.fr</literal> est formée à partir de la
configuration de mon logiciel de news, pas à partir du contenu de
l'entrée <literal>fromhost</literal> de
<filename>inn.conf</filename>. En fait, il est préférable de définir
cette adresse au niveau du fichier de configuration du lecteur de
news. Avec <productname>gnus</productname>, par exemple, il suffit
d'ajouter les lignes suivantes à son fichier
<filename>~/.gnus</filename>&nbsp;:
</para>

<para><blockquote><programlisting>
(setq user-mail-address "jaco@youpi.fr")
(setq user-full-name "Eric Jacoboni")
(setq mail-default-reply-to "jaco@youpi.fr")
(setq mail-host-address "youpi.fr")
</programlisting></blockquote></para>

<para>Soyez quand même conscient que mettre une adresse farfelue ne
fera pas de vous un anonyme (d'ailleurs, pourquoi voudriez-vous
l'être, hein ?) et qu'elle risque de vous priver de recevoir des
réponses personnelles.</para></listitem>

<listitem><para><filename>hosts.nntp</filename> (<emphasis>Uniquement
pour INN 1.7</emphasis>&nbsp;: voir <filename>incoming.conf</filename>
pour INN 2.0). Il ne doit comporter qu'une ligne,
<literal>localhost:</literal>. Attention à ne pas mettre d'espace
après le '<literal>:</literal>', <emphasis>ni de ligne après
celle-ci</emphasis>. Lorsque j'utilisais la méthode d'alimentation
directe proposée par Oléane (aka <quote>méthode Fyr</quote>), j'avais
dû rajouter une ligne pour que le serveur distant qui m'alimentait en
articles soit reconnu par mon serveur local. Cette ligne était
<literal>news.dial.oleane.com:</literal> car c'est lui qui m'envoyait
les batchs. Dans ce cas précis, il avait également fallu ajouter une
entrée correspondant à <literal>news.dial.oleane.com</literal> dans
mon fichier <filename>/etc/hosts</filename> car INN a besoin de
connaître l'adresse IP de toutes les entrées de
<filename>hosts.nntp</filename> <emphasis>lors de son
démarrage</emphasis>.</para>
</listitem>

<listitem><para><filename>incoming.conf</filename>
(<emphasis>Uniquement pour INN 2.x</emphasis>, voir
<filename>hosts.nntp</filename> pour INN 1.7). Ce fichier, comme
<filename>hosts.nntp</filename> pour les versions antérieures, permet
d'indiquer les machines qui nous approvisionnent en articles. Le
fichier livré avec les sources, ainsi que la page de manuel
<command>man incoming.conf</command> décrivent toutes ses
possibilités. Si l'on utilise <command>suck</command> ou
<command>newsx</command>, seule la machine locale est habilitée à
poster sur notre serveur, il n'y aura donc une entrée que pour
elle&nbsp;:

<blockquote><programlisting>
peer ME {
  hostname:         "localhost, 127.0.0.1"
}
</programlisting></blockquote>
</para>

<para>Si l'on est approvisionné par l'équivalent de la méthode Fyr
	      (proposée par Teaser), il faudra rajouter
	      l'entrée&nbsp;:

<blockquote><programlisting>
peer teaser {
  hostname:     "feed.teaser.net"
}
</programlisting></blockquote>

et mettre l'adresse de cette machine dans votre fichier
<filename>/etc/hosts</filename>.
</para>
</listitem>

<listitem><para><filename>nnrp.access</filename>&nbsp;: Ce fichier
liste les noms de machines qui auront le droit d'utiliser notre
serveur de news ... et les autorisations (lecture et publication de
nouveaux articles) associées. Le mien contient les lignes suivantes&nbsp;:
</para>

<para><blockquote><programlisting>
# Default to no access
*::::!*
# Allow access from localhost
localhost:Read Post:::*
127.0.0.1:Read Post:::*
stdin:Read Post:::* 
192.168.2.*:Read Post:::*
</programlisting></blockquote></para>

<para>Consultez la page de manuel concernant ce fichier pour
comprendre la signification de ces lignes qui consistent à énumérer
les machines autorisées à utiliser notre serveur pour lire les
articles (<emphasis>Read</emphasis>) et en poster
(<emphasis>Post</emphasis>).</para>

<para>Attention&nbsp;: avec <productname>INN 2.3</productname>, ce
	      fichier a été remplacé par
	      <filename>readers.conf</filename> (voir
	      ci-dessous).</para>
</listitem>

<listitem><para><filename>readers.conf</filename> (uniquement à partir
	      de <productname>INN 2.3</productname>)&nbsp;: il joue le
	      même rôle que le fichier
	      <filename>nnrp.access</filename> des versions
	      précédentes mais sa syntaxe a changé. Voici le contenu
	      d'un <filename>readers.conf</filename> équivalent au
	      <filename>nnrp.access</filename> donné plus
	      haut&nbsp;:</para>

<para><blockquote><programlisting>
auth "localhost" {
    hosts: "localhost, 127.0.0.1, stdin, 192.168.2.0/24"
    default: "&lt;localhost&gt;"
}

access "localhost" {
    users: "&lt;localhost&gt;"
    newsgroups: "*"
}
</programlisting></blockquote></para>
	  </listitem>

<listitem><para><filename>storage.conf</filename> (uniquement à partir
	      de <productname>INN 2.3</productname>). Cette nouvelle
	      version a modifié la gestion du spool d'articles et
	      permet d'utiliser plusieurs méthodes pour les
	      stocker. Ce fichier permet de préciser quelles sont les
	      méthodes utilisées (on peut utiliser différentes
	      méthodes pour différents groupes) et il
	      <emphasis>doit</emphasis> être configuré avec
	      <productname>INN 2.3</productname> (alors que l'on
	      pouvait se passer de le faire avec <productname>INN
	      2.2</productname>).</para>

<para>Voici un exemple indiquant que l'on utilise un spool
	      traditionnel pour tous les groupes&nbsp;:

<blockquote><programlisting>
method tradspool {
        newsgroups: *
        class: 0
}
</programlisting></blockquote></para>

<para>Un effet de bord désagréable de cette évolution est qu'il est
	      désormais très peu pratique de récupérer un spool
	      existant lorsque l'on passe d'un INN antérieur à 2.3 à
	      un INN 2.3 et supérieur...</para>
	  </listitem>

<listitem><para><filename>newsfeeds</filename>&nbsp;: Ce fichier décrit les
sites que vous approvisionnez en news.</para>

<para>Il faut donc y décrire celui de notre FAI afin de pouvoir lui
expédier les articles que nous postons sur notre propre serveur. Le
mien contenait les lignes suivantes lorsque mon fournisseur était
HOL&nbsp;:</para>

<para><blockquote><programlisting>
ME:*,!junk,!control::

crosspost:*:Tc,Ap,WR:/usr/lib/news/bin/crosspost -s -

overview!:*:Tc,WO:/usr/lib/news/bin/overchan

news.hol.fr/news1.isdnet.net,news2.isdnet.net,news3.isdnet.net,news4.isdnet.net\
        ::Tf,Wnm:
</programlisting></blockquote></para>

<para>La syntaxe complète de ce fichier est décrite dans le manuel en
ligne. Il faut retenir que la ligne <literal>ME</literal> concerne
notre machine. Ici elle récupère tous les groupes sauf
<literal>junk</literal> et <literal>control</literal>.</para>

<para>Les lignes <literal>crosspost</literal> et
<literal>overview</literal> servent à gérer les articles cross-postés
et l'historique. <emphasis>Elles ne sont plus nécessaires avec INN 2.3
	    car celui-ci dispose désormais d'un mécanisme interne
		permettant de les gérer.</emphasis></para>

<para>La ligne <literal>news.hol.fr</literal> nécessite plus
d'explications&nbsp;: elle indique d'abord que les descriptions des
articles que nous postons (via <command>rpost</command>, lorsque l'on
utilise <command>suck</command>) seront placés dans le fichier
<filename>/var/spool/news/out.going/news.hol.fr</filename>, c'est là
que <command>rpost</command> ira chercher leurs noms afin de les
expédier au serveur du FAI pour qu'ils circulent.</para>

<para>D'autre part, normalement <productname>INN</productname> est
conçu pour pouvoir fonctionner grâce à plusieurs sites « feeds », lui
fournissant des articles. Il envoie donc à tous les serveurs listés
dans le fichier <filename>newsfeeds</filename> une copie de chaque article
reçu. Mais, ainsi que nous l'avons évoqué dans la section 2, il est
inutile de renvoyer à un serveur donné les articles qu'il nous a
lui-même expédiés (!) ainsi que ceux que avons récupérés grâce à un
serveur avec lequel il est déjà lui-même en relation.</para>

<para>Chaque article contient donc un champ <literal>Path:</literal>
dressant peu à peu une liste des noms de serveurs sur lesquels il est
<quote>passé</quote>, chaque nom étant séparé du suivant par un point
d'exclamation.</para>

<para>Dans le fichier <filename>newsfeeds</filename>, on précise à
<productname>INN</productname> ce qu'il doit faire des articles
reçus. On y trouve une ligne pour chaque élément (pas obligatoirement
un autre serveur de news) auquel <productname>INN</productname> doit
passer des informations sur les articles reçus.  Chaque ligne est
composée de champs séparés par <literal>:</literal>.</para>
 
<para>Ce fichier offre, par exemple, le moyen d'indiquer qu'on ne doit
pas réexpédier à un serveur donné la copie d'un article déjà passé par
tel ou tel serveur.  Le tronçon de ligne
<literal>news.hol.fr/news1.isdnet.net,news2.isdnet.net,news3.isdnet.net,news4.isdnet.net</literal>
se lit ainsi&nbsp;: <quote>il existe un serveur par commodité appelé
ici <literal>news.hol.fr</literal>. Tu dois lui expédier les copies
des articles, SAUF de ceux dont le champ <literal>Path:</literal>
contient <literal>news1.isdnet.net</literal> ou
<literal>news2.isdnet.net</literal> ou
<literal>news3.isdnet.net</literal> ou
<literal>news4.isdnet.net</literal></quote>.</para>
 
<para>Le tronçon de ligne <literal>::Tf,Wnm:</literal> concerne aussi
la déclaration destinée à informer <productname>INN</productname> de
l'existence d'un serveur qu'il faut alimenter en articles.  Ce serveur
est appelé par commodité <literal>news.hol.fr</literal>.  Il s'agit,
en fait, de la même ligne que la précédente pour
<productname>INN</productname> car le caractère antislash placé après
le premier tronçon sert de <quote>continuateur</quote> (comme souvent
sous UNIX).  Ce tronçon se lit ainsi : <quote>ceci est valable pour
tous les groupes reçus ici, sauf <literal>junk</literal> et
<literal>control</literal></quote>. En effet, ce qui a été défini pour
l'entrée <literal>ME</literal> s'applique ici aussi
(<literal>:Tf,Wnm:</literal>) détermine le mode de transmission des
articles. Nous verrons que si l'on utilise UUCP, cette partie devra
être modifiée.</para>

<para>Par défaut, le fichier utilisé pour garder la trace des articles
sera donc
<filename>/var/spool/news/out.going/news.hol.fr</filename>. Si vous
désirez qu'il porte un autre nom, il suffit de le mentionner après le
dernier <literal>:</literal>. De la même façon, les articles dont
l'envoi à ce feed ont échoué seront mentionnés dans le fichier
<filename>/var/spool/news/out.going/news.hol.fr.fail</filename>.</para>
 
<para>On a ainsi créé un <quote>feed</quote> d'articles, c'est-à-dire
un canal logique (on ne se soucie pas, pour le moment, de la façon
dont les articles seront transportés) par lequel votre serveur peut en
alimenter d'autres.</para>
 
<para>À ce stade vous devez comprendre l'intérêt de créer des feeds
lorsque votre machine est connectée à plusieurs autres (et participe
donc au réseau, en interconnectant d'autres participants).  Mais
pourquoi le faire lorsque l'on est une <quote>feuille</quote> de
l'arbre, une machine uniquement connectée à une seule autre, via une
connexion PPP, comme dans le cas qui nous intéresse ?</para>

<para>Eh bien créer ainsi un <quote>feed</quote> vers votre
fournisseur vous permettra de voir circuler les articles que vous
posterez, tout simplement !</para>
 
<para>Mais tout article venant de <literal>news.hol.fr</literal>
<emphasis>devrait</emphasis> ne pas être renvoyé vers
<literal>news.hol.fr</literal>. Cela ne poserait pas de problème
particulier car un serveur recevant un article commence par vérifier
(grâce au Message-Id) s'il en dispose déjà, et le rejette si c'est le
cas mais cela occasionne des transferts inutiles&nbsp;: vous verriez
alors apparaître des messages vous informant que vous envoyez des
messages dupliqués sur le serveur distant.</para>

<para>Malheureusement (je vous ai prévenu, j'ai eu tous les problèmes
possibles...), HOL faisait appel à un fournisseur de news externe (en
l'occurrence <literal>isdnet</literal>) ce qui fait que
<literal>news.hol.fr</literal> n'apparaissait jamais dans le champ
<literal>Path:</literal> des articles et que ceux-ci étaient donc
renvoyés lors du prochain appel de <command>rpost</command> (avec les
messages qui en résultent...).  Pour expliquer que les articles
provenant des serveurs de news d'<literal>isdnet</literal> ne doivent
pas être renvoyés, on l'indique entre le <literal>/</literal> et le
<literal>:</literal>. Si ces exclusions n'étaient pas précisées, tous
les articles reçus seraient décrits dans le fichier
<filename>/var/spool/news/out.going/news.hol.fr</filename> car ils ne
contiennent pas <literal>news.hol.fr</literal> dans leur champ
<literal>Path:</literal>...</para>

<para>Pour savoir quel est le serveur que votre FAI utilise (afin de
l'exclure comme cela est décrit plus haut), deux méthodes sont
possibles&nbsp;:

<itemizedlist> 

<listitem><para>Faire un <command>telnet news.fai.fr nntp</command>
qui vous renseignera sur le nom de la machine qui vous envoie les
articles (le <literal>abcdef</literal> cité dans l'exemple de la
section 2). Cette méthode nécessite, bien sûr, d'être connecté. Vous
pouvez économiser une unité téléphonique en utilisant la deuxième
possibilité...</para></listitem>

<listitem><para>À l'aide de votre lecteur de news, visualisez la
totalité des en-têtes d'un article reçu. Le champ qui nous intéresse
est <literal>Path:</literal> qui indique la route suivie par cet
article pour arriver jusqu'à nous. Le nom qui suit celui de votre
machine (ou qui suit le nom spécifié par l'entrée
<literal>pathhost</literal> du fichier <filename>inn.conf</filename>)
est le nom de la machine qui vous l'a envoyé. Prenons un
exemple&nbsp;: depuis la première version de ce document, j'ai quitté
HOL pour Easynet, puis pour Oléane, puis pour Free (avec les FAIs,
comme avec le reste, il faut savoir faire jouer la concurrence). Voici
le contenu du champ <literal>Path:</literal> de chaque article que je
recevais d'Oléane&nbsp;:

<blockquote><programlisting>
Path: jacoboni!dial.oleane.com!...!...
</programlisting></blockquote></para>

<para><literal>dial.oleane.com</literal> doit donc être exclu, ce qui
fait que mon fichier <filename>newsfeeds</filename> doit désormais
contenir, à la place de la ligne <literal>news.hol.fr</literal>, la
ligne suivante :

<blockquote><programlisting>
oleane/dial.oleane.com\ 
        ::Tf,Wnm:
</programlisting></blockquote></para>

<para>Le fichier contenant les références des articles que j'envoie au
site distant était alors
<filename>/var/spool/news/out.going/oleane</filename>.</para>

<para>Notez bien que cela suppose que mon entrée ME soit la suivante&nbsp;:

<blockquote><programlisting>
ME\
        :*,!junk,!control::
</programlisting></blockquote></para></listitem>
</itemizedlist></para>

<para>Ne vous fiez pas à l'examen d'un seul article car votre
	      fournisseur d'accès peut disposer de plusieurs serveurs
	      de news. Ajoutez chaque serveur en le séparant du
	      précédent par une virgule (voir l'exemple plus haut,
	      pour HOL).</para>

<para><emphasis>Attention</emphasis>&nbsp;: le fichier
<filename>newsfeeds</filename> est chargé en mémoire au lancement de
<productname>INN</productname>, donc toute modification de celui-ci
implique son rechargement (cf. la section sur l'utilisation de
<command>ctlinnd</command> et l'utilisation du paramètre
<literal>reload</literal>).</para></listitem>

<listitem><para><filename>moderators</filename>. Ce fichier est
utilisé lorsqu'on désire poster un article dans un forum modéré
(<literal>fr.comp.os.linux.annonces</literal> ou
<literal>fr.usenet.logiciels</literal>, par exemple). La différence
entre un forum non modéré et un forum modéré est que tout le monde
peut poster n'importe quoi (et, malheureusement, certains en
abusent...) dans le premier tandis que la parution d'un article dans
le second est soumise à l'acceptation d'une ou plusieurs
personnes&nbsp;: les modérateurs de ce forum.</para>

<para>Ceci signifie que, pour poster un article dans un forum modéré, on doit
d'abord l'envoyer au modérateur sous la forme d'un message email. Le modérateur
recevra alors votre proposition d'article et décidera de le publier dans le
forum, ou le rejettera s'il juge qu'il ne correspond pas à la charte.</para>

<para>Toute cette démarche est inutile car, heureusement,
<productname>INN</productname> s'occupe de tout. Il permet de publier
dans les forums modérés comme dans les autres et se charge de
transformer automatiquement l'article en message qu'il expédie aux
modérateurs dont il trouve l'adresse électronique dans le fichier
<filename>moderators</filename>. C'est également pour cette raison
qu'il faut disposer d'un moyen d'envoyer du courrier...</para>

<para>La page de manuel <filename>moderators</filename>(5) détaille
la syntaxe du contenu de ce fichier. En résumé&nbsp;: un
enregistrement par ligne, deux champs par enregistrement, séparés par
le signe <literal>:</literal>. Le premier champ contient un
<quote>motif</quote> de sélection de nom de forum
(<literal>fr.*</literal>, par exemple, correspond à tous les forums de
la hiérarchie <literal>fr</literal>). Le second champ contient
l'adresse du modérateur de ce forum. Cas spécial&nbsp;: la paire de
caractères <literal>%s</literal>, utilisée dans le second champ, est
remplacée par le nom du forum visé.</para>

<para>La dernière ligne de ce fichier devrait toujours être une entrée
<quote>par défaut</quote> contenant
<literal>*:%s@moderators.isc.org</literal> (ou
<literal>*:%s@moderators.news.oleane.net</literal>, pour les abonnés
d'Oléane) qui indique que tous les articles postés dans un forum
modéré au nom <emphasis>non précédemment sélectionné</emphasis> par
les entrées précédentes devront être envoyé à l'adresse
<literal>nom_du_forum@moderators.isc.org</literal>. La machine
destinatrice dispose toujours de la liste à jour des noms de forums et
des adresses de leurs modérateurs.</para>

<para>Dans l'absolu, cette règle
(<literal>*:%s@moderators.isc.org</literal>) suffit donc&nbsp;: aucune
autre n'est strictement nécessaire. Mais il est de bon ton de ménager
les serveurs centraux... et cela accélère le service.</para>

<para>Par exemple, pour pouvoir poster au plus vite dans un forum
modéré de la hiérarchie fr (par exemple
<literal>fr.usenet.logiciels</literal>), il suffit d'ajouter au début
du fichier, juste après la dernière ligne de commentaires, l'entrée
suivante&nbsp;:

<blockquote>
<screen>
fr.*:%s@moderators.freenix.org
</screen>
</blockquote></para>

<para><emphasis>Attention</emphasis>&nbsp;: Il faut bien entendu ajouter les
entrées <emphasis>avant</emphasis> la ligne générique
(<literal>*:%s@moderators.isc.org</literal>) et en étudiant aussi les
autres entrées pour ne pas qu'elles correspondent au motif de la
nouvelle ligne saisie, car <productname>INN</productname> prend en
charge la première ligne satisfaisante rencontrée. La solution la plus
sûre consiste à faire vos ajouts en tête de ce
	fichier.</para></listitem>

<listitem><para><filename>expire.ctl</filename>. Ce fichier permet de
	  configurer le mécanisme d'expiration de
	  <productname>INN</productname>. Le contenu de ce fichier
	  étant richement commenté (la commande <command>man
	  expire.ctl</command> existe aussi...), nous ne le
	  détaillerons pas ici&nbsp;: le principe général consiste à
	  préciser le nombre de jours au-delà desquels les articles d'un
	  groupe, ou d'un ensemble de groupes, seront supprimés de
	  votre serveur.</para></listitem>
</itemizedlist></para>
</sect2>

<sect2><title>Les fichiers de données&nbsp;:
	<filename>active</filename>, <filename>history</filename>,
	<filename>newsgroups</filename></title>


<para>Comme les précédents, ces fichiers doivent appartenir à l'utilisateur
<literal>news</literal>. Avec <productname>INN 2.2</productname>, ils
	se trouvent dans le répertoire
	<filename>~news/db</filename>.</para>

<itemizedlist>
	<listitem><para><filename>active</filename>. Ce fichier
contient les noms des <emphasis>forums</emphasis> reçus par
<productname>INN</productname>. Cela n'a rien à voir avec le fait de
recevoir les <emphasis>articles</emphasis>&nbsp;: on peut très bien
récupérer les articles d'un forum <literal>fr.bidon</literal> par
<command>suck</command>, et ne pas les distribuer sur notre machine si
le forum <literal>fr.bidon</literal> n'est pas décrit dans le fichier
<filename>active</filename>... Les fournisseurs d'accès mettent, en
général, leur fichier <filename>active</filename> à disposition, vous
pouvez en récupérer un par FTP à <ulink
url="ftp://ftp.oleane.net/pub/Oleane/active">ftp://ftp.oleane.net/pub/Oleane/active</ulink>.</para>


<para>Voici les premières lignes de mon fichier
<filename>active</filename>, qui en contient 238 (en fait, il a
<emphasis>beaucoup</emphasis> changé depuis la première version de ce
document...)&nbsp;:

<blockquote>
<screen>
control 0000001372 0000001085 y
junk 0000000004 0000000005 y
test 0000000000 0000000001 y
to 0000000000 0000000001 y
fr.comp.os.linux.annonces 0000000910 0000000887 m
fr.comp.mail 0000015100 0000014624 y
fr.usenet.logiciels 0000005972 0000005877 m
fr.comp.text.tex 0000009863 0000009378 y
fr.comp.applications.x11 0000005586 0000005308 y
fr.comp.applications.emacs 0000003085 0000002965 y
</screen>
</blockquote></para>

<para>On a une ligne par forum, sachant que les 4 premiers sont
<emphasis>obligatoires</emphasis> pour que
<productname>INN</productname> fonctionne (il vous suffit de les
désactiver dans votre lecteur de news si vous ne voulez pas les voir
apparaître...).</para>

<para>Attention, <productname>INN 2.3</productname> ajoute les entrées
	    <literal>control.cancel</literal>,
	    <literal>control.checkgroups</literal>,
	    <literal>control.newgroup</literal> et
	    <literal>control.rmgroup</literal> à ces entrées
	    obligatoires...</para>

<para>Ne modifiez pas le fichier <filename>active</filename>
manuellement, mais utilisez le programme <command>ctlinnd</command>
(voir la section sur l'utilisation de
<command>ctlinnd</command>).</para>

<para>Pour la syntaxe, <emphasis>as usual</emphasis>, cf. les pages du
	    manuel en ligne (<command>man active</command>)... Au
	    départ, initialisez ce fichier afin que les champs
	    numériques soient tous de la forme
	    <literal>0000000000&nbsp;0000000001</literal>, ils seront
	    mis à jour automatiquement à chaque appel de
	    <command>rnews</command> (le
	    <quote><literal>y</literal></quote> signifie que l'on
	    autorise le postage d'article dans le forum,
	    <quote><literal>m</literal></quote> signifie qu'il est
	    modéré). Comme d'habitude, attention à ne pas placer de
	    retour chariot après la dernière ligne...</para>

<para>Nous le répétons une nouvelle fois&nbsp;:<emphasis>pour éviter de
mauvaises manipulations, il est préférable de ne pas modifier
manuellement le fichier <filename>active</filename> mais d'utiliser le
programme <command>ctlinnd</command></emphasis> (voir la section sur
l'utilisation de <command>ctlinnd</command>).</para></listitem>

<listitem><para><filename>history</filename>. Si vous avez utilisé un
	    système de paquetages pour installer
	    <productname>INN</productname>, ce dernier aura
	    automatiquement créé ce fichier historique, qui sera
	    ensuite géré par <productname>INN</productname>, vous
	    n'avez pas donc à vous en occuper pour le moment... Sachez
	    quand même que <command>suck</command> consulte ce fichier
	    (sauf si vous utilisez l'option <literal>-H</literal>)
	    afin d'éviter de récupérer un article déjà présent sur
	    votre serveur.</para>

<para>Si vous avez installé <productname>INN</productname> à partir
	    des sources, il vous faudra créer l'historique initial en
	    suivant ce qui est indiqué dans le fichier
	    <filename>INSTALL</filename>&nbsp;: <command>makehistory
	    -i</command> créera cet historique, il vous restera à
	    renommer les fichiers <filename>history.n*</filename>
	    créés par cette commande en
	    <filename>history*</filename>. Enfin, n'oubliez pas de
	    positionner les droits d'accès avec la commande
	    <command>chmod 0664 *</command>.</para></listitem>

<listitem><para><filename>newsgroups</filename>. Ce fichier permet
	    d'associer une description lisible à chaque
	    forum. Normalement il devrait donc contenir autant de
	    lignes que le fichier <filename>active</filename>, mais ce
	    n'est pas une obligation&nbsp;: tout dépend du courage de
	    l'administrateur... Comme pour le fichier
	    <filename>active</filename>, vous pouvez récupérer un
	    fichier <filename>newsgroups</filename> complet par FTP à
	    <ulink
	    url="ftp://ftp.oleane.net/pub/Oleane/newsgroups">ftp://ftp.oleane.net/pub/Oleane/newsgroups</ulink>. Le
	    mien est plutôt spartiate&nbsp;:

<blockquote>
<screen>
control   Usenet control messages - DO NOT REMOVE
junk      Articles for missing newsgroups - DO NOT REMOVE
test      A place for test posts - DO NOT REMOVE
to        Special Group for INN use - DO NOT REMOVE
fr.comp.text.tex            Discussions concernant TeX et LaTeX.
fr.comp.applications.emacs  Editeur de textes Emacs et ses extensions.
fr.comp.applications.libres Les solutions libres en informatique. (Moderated)
fr.comp.applications.x11    Systeme de multifenetrage X11.
fr.comp.lang.perl           Langage de programmation Perl.
fr.comp.mail                Logiciels de messagerie electronique.
fr.comp.os.linux.annonces   Annonces concernant Linux. (Moderated)
fr.comp.os.linux.moderated  Discussions sur le systeme Linux (moderated).
fr.network.modems           Discussions concernant les modems.
fr.usenet.forums.evolution  Discussions sur la creation de nouveaux forums fr.
fr.usenet.logiciels         Discussions sur les logiciels de News
</screen>
</blockquote></para>

<para>En fait, cela permet à votre lecteur de news d'afficher la
description correspondante en face du nom du forum...</para></listitem>
</itemizedlist>
</sect2>

<sect2><title>Derniers réglages</title>

<para>Si vous avez configuré les fichiers que nous venons de décrire,
il ne reste plus qu'à soumettre votre configuration au programme de
vérification livré avec <productname>INN</productname>. Pour cela,
lancez la commande <command>/usr/lib/news/bin/inncheck -a</command>
(ou <command>~news/bin/inncheck -a</command> avec <productname>INN
2.2</productname>) et ne vous inquiétez pas de l'avertissement
<quote><literal>/usr/local/news/etc/newsfeeds:0: warning you accept
all incoming article distributions</literal></quote> qui est parfois
produit.</para>

<para><itemizedlist> 

<listitem><para>Si vous utilisiez <productname>Leafnode</productname>
auparavant, vérifiez bien que vous avez supprimé la ligne

<blockquote>
<screen>
nntp    stream  tcp     nowait  news /usr/sbin/tcpd /usr/local/sbin/leafnode
</screen></blockquote>

de votre fichier
<filename>/etc/inetd.conf</filename>.</para></listitem>

<listitem><para>Il n'y a rien d'autre à faire&nbsp;: l'installation de
	    <productname>INN</productname> par un des systèmes de
	    paquetages déjà cités aura modifié pour vous les scripts
	    de démarrage. </para>

<para>Si vous êtes partis des sources, utilisez le
	    mécanisme de lancement des services au démarrage propre à
	    votre système : il s'agit principalement de lancer le
	    script
	    <filename>/usr/local/news/bin/rc.news</filename>&nbsp;:

<itemizedlist>
<listitem><para>Sur un système Linux, les scripts de démarrage se trouveront
	    probablement sous le répertoire
	    <filename>/etc/rc.d/</filename>. Chaque distribution n'en
	    faisant qu'à sa tête, je vous fais confiance pour adapter
	    ce démarrage à votre système.</para></listitem>

<listitem><para>Sur un système FreeBSD, on utilisera l'arborescence
	    <filename>/usr/local/etc/rc.d</filename> et on utilisera
	    le fichier <filename>innd.sh</filename> contenant les
	    lignes suivantes (pour <productname>INN
	    2.2</productname>)&nbsp;:

<blockquote>
<screen>
#!/bin/sh
if [ $# -eq 0 -o x$1 = xstart ]; then
 if [ -x /usr/local/news/bin/rc.news -a -f /usr/local/news/db/history.pag ]; t
hen
      limits -C news /usr/local/news/bin/rc.news &amp;&amp; echo ' inn'
   fi
fi
if [ x$1 = xstop ]; then
   /usr/local/news/bin/ctlinnd shutdown machine is going down
fi
</screen>
</blockquote></para></listitem>
</itemizedlist></para>

<para>Dans le fichier <filename>inn.conf</filename>, recherchez la
	    ligne commençant par <literal>doinnwatch:</literal> et
	    remplacez la valeur <literal>true</literal>, qui est
	    sûrement celle que l'installation par défaut a dû mettre,
	    par <literal>false</literal>&nbsp;: cela évitera le
	    lancement du programme <command>innwatch</command> qui ne
	    sert à rien dans la situation particulière qui est la
	    nôtre et évitera aussi une boucle de temporisation inutile
	    (<command>sleep 600</command>). Je ne me rappelle plus si
	    cette ligne existait dans le <filename>inn.conf</filename>
	    de <productname>INN 1.7</productname> mais, si ce n'est
	    pas le cas, recherchez la ligne initialisant la variable
	    <literal>DOINNWATCH</literal> dans le script
	    <filename>rc.news</filename> et faites de même.</para>

<para><command>innwatch</command> sert à <quote>surveiller</quote> le
bon fonctionnement du serveur&nbsp;: si le démon
<command>innd</command> tombe, ou si un autre problème critique
intervient, il se charge de prévenir l'administrateur par
courrier. D'autre part, une mauvaise configuration de l'expiration des
articles que vous stockez peut entraîner une saturation du
disque&nbsp;: là aussi, <command>innwatch</command> interviendra en
lançant à intervalles réguliers une commande comme
<command>df</command>. Dans le cas d'une configuration comme la nôtre,
son intérêt est donc quasi nul puisque nous maîtrisons l'ajout des
nouveaux articles. Il sert surtout dans les cas où le serveur est
alimenté en permanence.</para></listitem>
 
<listitem><para>En tant que <literal>root</literal>, lancez le script
	    de lancement adapté à votre système, par exemple&nbsp;:

<blockquote>
<screen>
/etc/rc.d/init.d/news start
</screen>
</blockquote>

sur Red Hat Linux, ou 

<blockquote>
<screen>
/usr/local/etc/rc.d/innd.sh start
</screen>
</blockquote>

sous FreeBSD.</para>

<para>Le lancement de ce script doit normalement vous répondre
	    <literal>innd</literal> (ou <literal>inn</literal>) pour
	    vous informer que le démon est lancé...</para></listitem>

<listitem><para>Vérifiez par un <command>ps axu</command> qui doit
comporter des entrées similaires à celles-ci&nbsp;:

<blockquote>
<screen>
news       212  0.0  3.0  1912  1428  ?  S &lt; 15:39   0:00 /usr/sbin/innd -p4 -i0 -L 
news       236  0.0  0.6   888   308  ?  S &lt; 15:39   0:00 /usr/lib/news/bin/crosspost -s - 
news       237  0.0  0.6   888   312  ?  S &lt; 15:39   0:00 /usr/lib/news/bin/overchan 
</screen></blockquote>

pour <productname>INN 1.7</productname> sur un système Linux ou

<blockquote>
<screen>
news      285  0.0  2.1  2988 1992  ??  Is    8:50     0:02.63 /usr/local/news/bin/innd -p4 -L
news      294  0.0  0.5   992  452  ??  IN    8:50     0:00.49 /usr/local/news/bin/crosspost
news      295  0.0  0.5   996  464  ??  IN    8:50     0:00.40 /usr/local/news/bin/overchan
</screen></blockquote>

pour <productname>INN 2.2</productname> sur un système
	      FreeBSD.</para>

<para>Pour <productname>INN 2.3</productname>, sur le même système, on
	obtiendra :

<blockquote>
<screen>
news   255  0.0  2.9  7548 2764  ??  Ss  11:11  0:02.69 /usr/local/news/bin/innd -p4
</screen></blockquote></para>

<para>On notera l'absence des entrées <literal>crosspost</literal> et
	<literal>overchan</literal> qui ne font plus l'objet de
	processus séparés.</para>
	  </listitem>
</itemizedlist></para>

<para>Si vous obtenez cela, c'est que <productname>INN</productname>
fonctionne, bravo...</para>
</sect2>
</sect1>

<sect1><title>Utilisation de <productname>INN</productname></title>

<sect2><title>Utilisation avec <productname>Suck</productname></title>

<para>Si vous utilisez <productname>Suck</productname>, remettez-vous
dans le répertoire <filename>/usr/local/etc/suck</filename>. Vous vous
rappelez du fichier <filename>nouveau</filename> que l'on avait
généré&nbsp;? On va maintenant l'utiliser pour alimenter NOTRE
serveur en effectuant la commande suivante&nbsp;:

<blockquote>
<screen>
# rnews nouveau
</screen>
</blockquote></para>

<para>Normalement, vous devriez ensuite pouvoir consulter les nouveaux
articles à partir de votre lecteur de news favori (configuré pour
admettre <literal>localhost</literal> comme serveur de news).</para>
</sect2>

<sect2><title>Poster des articles avec <command>rpost</command></title>

<para><command>rpost</command> (livré avec la distribution
<productname>Suck</productname> permet de poster vos articles sur le
serveur distant.</para>

<para>Vous ne pourrez poster des articles que dans les forums
mentionnés dans le fichier <filename>active</filename> décrit plus
haut (et pourvu que l'autorisation de postage (<literal>y</literal>)
ait été positionnée pour ce forum...).</para>

<para><emphasis>Ne postez pas d'article de test dans n'importe quel
forum !</emphasis> Pour cela, il existe le forum
<literal>fr.test</literal> (d'où la présence de celui-ci dans mon
fichier <filename>active</filename>...). Postez un article de test à
l'aide de votre lecteur de news, puis vérifiez le contenu du fichier
<filename>/var/spool/news/out.going/nom_du_feed</filename> (où
<literal>nom_du_feed</literal> correspond à la partie gauche de
l'entrée correspondante dans <filename>newsfeeds</filename>&nbsp;: il
doit contenir une seule ligne indiquant où se trouve l'article à
poster.  S'il y a beaucoup de lignes, voir les remarques précédentes
sur le fichier <filename>newsfeeds</filename> et les serveurs à
exclure...</para>

<para>Connectez-vous à votre FAI et tapez la commande&nbsp;:

<blockquote>
<screen>
# rpost serveur_de_news_distant    
</screen>
</blockquote></para>

<para>Normalement, votre article est posté... Cela dit, ce n'est pas
pour cela qu'il sera accepté par le serveur distant&nbsp;: pour être
conforme, l'en-tête de votre article a besoin d'être légèrement
modifié. Cette opération est réalisée en passant celui-ci à travers un
filtre avant de l'expédier par <command>rpost</command>. D'où
l'intérêt de créer un script automatisant tout cela.</para>
</sect2>

<sect2><title>Un script pour automatiser l'envoi et la réception avec
suck</title>

<para>J'ai écrit ce script (en m'inspirant d'autres scripts glanés ça
et là...)  pour poster mes articles et récupérer les nouveaux&nbsp;:
rendez-le exécutable, placez-le dans
<filename>/usr/local/bin</filename> et lancez-le sous root.</para>
 
<para><blockquote>
<programlisting>
#!/bin/sh

SERVEUR_DISTANT=news.fai.fr
OUT_GOING=monfai
PATH_SUCK=/usr/local/etc/suck
PATH_SPOOL=/var/spool/news
NOM_BATCH=$PATH_SPOOL/out.going/$OUT_GOING
NOM_FILTRE=$PATH_SUCK/entete

# On commence par poster les articles (localhost-&gt;SERVEUR_DISTANT)

echo Envoi des articles...
if test -s $NOM_BATCH
then
 rpost $SERVEUR_DISTANT -b $NOM_BATCH -p $PATH_SPOOL \
       -f $NOM_FILTRE \$\$o=/tmp/filtres \$\$i /tmp/filtres &amp;&amp; \
       cat /dev/null > $NOM_BATCH || \
       echo "probleme de postage" | mail news -s "probleme avec rpost"
else
 echo "pas d'articles à poster..."
fi

# puis on récupère les articles (SERVEUR_DISTANT-&gt;localhost)

echo Récupération des articles...
cd $PATH_SUCK
if test -f nouveau
then
  mv -f nouveau nouveau.old
fi
suck $SERVEUR_DISTANT -c -n -br nouveau
rnews nouveau
</programlisting>
</blockquote></para>

<para>Ce modèle suppose que l'entrée correspondant au serveur distant
	est de la forme
	<literal>monfai/serveurs_exclus::Tf,Wnm:</literal>
	dans votre fichier <filename>newsfeeds</filename>.</para>

<para>Le fichier <literal>NOM_FILTRE</literal> permet de formater les
articles. Normalement, la distribution de
<productname>Suck</productname> a dû vous en fournir
un... Classiquement, ce filtre a pour but de supprimer les champs
<literal>NNTP-Posting-Host</literal> et <literal>Xref</literal> (ainsi
que les champs <literal>X-Trace</literal>, <literal>X-Complaints
-To</literal> et <literal>NNTP-Posting-Date</literal> dans le cas de
<productname>INN 2.2</productname>) en utilisant la commande
<command>sed</command>. Si cela n'est pas fait, il y a de gros risques
pour que le serveur de news de votre F.A.I. refuse votre
article.</para>

<para>Au cas où vous n'auriez pas un tel filtre, voici le contenu de
	<filename>/usr/local/etc/suck/entete</filename> pour <productname>INN 1.7</productname>&nbsp;:

<blockquote>
<programlisting>
#!/bin/sh
sed -e "/^NNTP-Posting-Host/d" -e "/^Xref/d" $1 &gt; $2
</programlisting>
</blockquote>

et le même pour <productname>INN 2.2</productname>&nbsp;:

<blockquote>
<programlisting>
#!/bin/sh
sed -e "/^X-Trace/d" -e "/^NNTP-Posting-Host/d" -e "/^Xref/d"\
    -e "/^X-Complaints-To/d"  -e "/^NNTP-Posting-Date/d" $1 &gt; $2
</programlisting>
</blockquote></para>

<para>Ce fichier doit, naturellement, avoir les droits d'exécution
positionnés par <command>chmod +x entete</command>.</para>
</sect2>

<sect2><title>Autres options de <command>suck</command></title>

<para><command>suck</command> dispose d'autres options lui permettant
de mieux s'adapter à <productname>INN</productname>&nbsp;:</para>

<para>L'option <literal>-A</literal>, utilisée avec <literal>-hl
localhost</literal>, indique à <command>suck</command> qu'il doit
utiliser le fichier <filename>active</filename> de notre serveur pour
créer et mettre à jour <filename>sucknewsrc</filename>. Ceci a un
avantage évident&nbsp;: vous êtes sûr que les deux fichiers sont
cohérents et, lorsque vous ajouterez un forum sur votre serveur,
celui-ci sera automatiquement ajouté à la liste des forums à
interroger par <command>suck</command>. De même, si vous supprimez un
forum, la ligne qui lui correspond dans
<filename>sucknewsrc</filename> sera détruite.</para>

<para>Mais alors, que se passera-t-il pour les forums comme
<literal>control</literal>, <literal>junk</literal>,
<literal>test</literal>, <literal>to</literal>, et tous ceux qui sont
répertoriés dans <filename>active</filename> mais que l'on ne veut pas
prendre en compte&nbsp;? Cela aussi est prévu&nbsp;: il suffit de les
mentionner dans le fichier
<filename>/usr/local/etc/suck/active-ignore</filename> et
<command>suck</command> les ignorera. Le contenu de ce fichier
commencerait, par exemple, par&nbsp;:

<blockquote>
<programlisting>
control
junk
test
to
fr.test
</programlisting>
</blockquote></para>

<para>Vous pouvez alors vous poser la question&nbsp;: <quote>puisque
cette option est si pratique, pourquoi ne pas l'avoir utilisée
dans le script&nbsp;?</quote>. Ahem, tout simplement parce que, à
l'époque où j'ai écrit ce script, je l'ignorais... Comme disait le
millionnaire&nbsp;: <quote>Nobody's perfect&nbsp;!</quote>. De plus,
je ne la trouve pas si pratique, moi, cette option puisqu'elle
nécessite de tenir à jour le fichier
<filename>active-ignore</filename> et qu'il me semble plus pratique de
gérer directement le fichier <filename>sucknewsrc</filename>...</para>


<para>D'autres options existent encore&nbsp;: certaines permettent de
modifier les répertoires de travail de <command>suck</command>,
d'autres lui font adopter un comportement particulier dans le cas où
certains serveurs distants produisent des erreurs de connexion, enfin,
on peut même le faire parler en Français&nbsp;! Nous ne pouvons toutes les
énumérer ici et nous vous renvoyons donc à sa page de manuel pour des
informations complètes.</para>
</sect2>
</sect1>

<sect1><title>Installation de <productname>Newsx</productname> et
      utilisation avec <productname>INN</productname></title>

<sect2><title>Comparaisons avec suck</title>

<para><productname>Newsx</productname> remplit à peu près les mêmes
fonctions que <productname>Suck</productname>, on choisira d'utiliser
<productname>Suck</productname> ou <productname>Newsx</productname>
pour des raisons de confort (rapidité, facilité d'utilisation).</para>
 
<para>Les avantages de <productname>Newsx</productname> par rapport à <productname>Suck</productname> sont&nbsp;:

<itemizedlist> 

<listitem><para>À partir de la version 0.9,
<productname>Newsx</productname> est plus rapide que
<productname>Suck</productname> si on utilise l'option
<literal>-W</literal>. Cette option permet d'envoyer en rafale les
requêtes au serveur NNTP, le gain de vitesse est difficilement
prévisible.  Avec certains fournisseurs d'accès,
<productname>Newsx</productname> est environ deux fois plus rapide que
<productname>Suck</productname>.</para></listitem>

<listitem><para>Il s'intègre mieux que <productname>Suck</productname>
à <productname>INN</productname> (il lit les mêmes fichiers de
configuration que celui-ci).</para></listitem>
</itemizedlist></para>
 
<para>Ses inconvénients par rapport à <productname>Suck</productname>
sont&nbsp;:

<itemizedlist> 

<listitem><para>Il ne gère pas de <emphasis>kill-file</emphasis>. Il
faut tempérer cet inconvénient par le fait qu'utiliser un
<emphasis>kill-file</emphasis> n'est pas rentable s'il y a peu
d'articles à filtrer et que les articles à filtrer ont une taille peu
importante. En effet, pour décider de prendre ou non un article,
<productname>Suck</productname> doit prendre les en-têtes de
l'article, puis, soit il prend le corps de l'article, soit il passe au
suivant. Donc, quand un article est pris en entier, il est pris en
deux fois au lieu d'une, ce qui est plus lent. Les dernières versions
de <productname>Suck</productname> corrigent ce problème en permettant
un filtrage utilisant la commande XOVER de NNTP.</para>

<para>Cela dit, tout est affaire de circonstances&nbsp;: si, par exemple,
vous êtes abonnés à un groupe dont certains threads ne vous
	      intéressent pas du tout, ou si vous avez décidé
	      d'ignorer les contributions de certaines personnes, le
	      mécanisme des kill-files vous sera précieux.</para></listitem>

<listitem><para>Le suivi en direct du chargement des articles est
meilleur avec <productname>Suck</productname> car il affiche
constamment le débit, alors que <productname>Newsx</productname> ne le
fournit qu'à la fin.</para></listitem>

<listitem><para>Quand on démarre la prise d'un groupe avec
<productname>Newsx</productname>, il est moins aisé de prendre les
<emphasis>n</emphasis> derniers articles qu'avec
<productname>Suck</productname> (mais c'est
faisable).</para></listitem>
</itemizedlist></para>

<para>Personnellement, je ne pense pas que l'argument de la rapidité
soit vraiment critique si, de toute façon, vous avez tendance à
utiliser la connexion un certain temps (pour surfer, récupérer vos
courriers ou faire de l'IRC par exemple). D'autre part, cette rapidité
de <productname>Newsx</productname> a un prix&nbsp;: il occupe une
bonne partie de la bande passante de la connexion. Avec
<productname>Suck</productname>, tandis qu'il poste et récupère les
articles, je peux récupérer et poster des messages email, voire
naviguer sur un site Web...</para>
</sect2>

<sect2><title>Installation de <productname>Newsx</productname></title>

<para>Si vous installez <productname>Newsx</productname> en utilisant
      un système de paquetage Linux (il n'existe pas de paquetage ni
      de port FreeBSD), procédez comme vous en avez l'habitude. Si
      vous partez des sources, j'imagine que la démarche est classique
      (décompression de l'archive, lecture du fichier
      <filename>README</filename> ou
      <filename>INSTALL</filename>)...</para>

 
<para>Pour lancer <productname>Newsx</productname>, tapez la ligne
suivante&nbsp;:
 
<blockquote>
<screen>
newsx -ddd --inn -W40 news.fai.fr news.fai.fr
</screen>
</blockquote></para>
 
<para><itemizedlist>
<listitem><para><literal>-ddd</literal> permet de largement commenter
	    ce que fait <command>newsx</command>.</para></listitem>

<listitem><para><literal>--inn</literal> indique qu'il doit coopérer
avec <productname>INN</productname>.</para></listitem>

<listitem><para><literal>-W40</literal> indique qu'il doit envoyer les requêtes
par paquets de 40.</para></listitem>

<listitem><para>Le premier <literal>news.fai.fr</literal> est le
	    <emphasis>nom du fichier spool</emphasis>&nbsp;: c'est le
	    nom du fichier qui se trouve sous
	    <filename>/var/spool/news/out.going</filename>.</para></listitem>

<listitem><para>le deuxième <literal>news.fai.fr</literal> est le nom
	    du serveur NNTP à contacter.</para></listitem>
</itemizedlist></para>
 
<para>Voilà, il n'y a rien d'autre à faire. Avec cette commande,
<command>newsx</command> s'occupe d'envoyer les news à poster et de
lire les groupes indiqués dans le fichier <filename>newsfeeds</filename>
de <productname>INN</productname>.</para>
</sect2>

<sect2><title>Utilisation conjointe de
 <productname>Newsx</productname> et
 <productname>Suck</productname></title>

<para>Il est possible de combiner l'utilisation de
 <productname>Newsx</productname> et de
 <productname>Suck</productname> afin de bénéficier de la gestion des
 kill-files, très utile pour certains groupes (voir l'annexe 3). Pour
 cela, il faut créer deux lignes (deux feeds) pour le serveur
 <literal>news.fai.fr</literal>&nbsp;:

<itemizedlist>
<listitem><para>Une pour les groupes à prendre avec
<command>newsx</command>&nbsp;;</para></listitem>

<listitem><para>une pour les groupes à prendre avec
<command>suck</command>.</para></listitem>
</itemizedlist></para>

<para>On modifiera donc le fichier <filename>newsfeeds</filename> pour
que l'unique feed original soit maintenant réparti sur deux feeds,
d'où deux lignes.  Chaque ligne devra exclure les groupes de
l'autre. <literal>sucked.news.fai.fr</literal> ne correspond pas à un
vrai serveur mais cela n'a pas d'importance, il suffit de mettre les
noms des vrais serveurs après le <quote>/</quote>.  Ici, on fait en
sorte d'exclure de la récupération par <command>newsx</command> les
groupes sur lesquels on veut pouvoir filtrer. Ces groupes seront les
seuls récupérés par <command>suck</command>.</para>

<para><blockquote><programlisting>
# newsgroups pris et postés par newsx
news.fai.fr/serveur-exclu\
      :*,!fr.usenet.forums.evolution,!fr.comp.mail,!fr.usenet.logiciels,!junk:Tf,Wnm:
 
# newsgroups pris par suck et postés par newsx
sucked.news.fai.fr/serveur-exclu\
       :fr.usenet.forums.evolution,fr.comp.mail,fr.usenet.logiciels:Tf,Wnm:
</programlisting></blockquote></para>

<para>Et on lance <command>newsx</command> par les commandes&nbsp;:

<blockquote><programlisting>
# nntp server=news.fai.fr, feed=sucked.news.fai.fr, 
# --nofetch empeche de prendre les articles, on ne fait que poster.

newsx --nofetch -ddd --stat /tmp/log/news.stat --inn  sucked.news.fai.fr news.fai.fr &gt;&gt;/tmp/log/news.log 2&gt;&amp;1

# nntp server=news.fai.fr, feed=news.fai.fr, on poste et on prend

newsx -ddd --stat /tmp/log/news.stat --inn  -W40 news.fai.fr news.fai.fr &gt;&gt;/tmp/log/news.log 2&gt;&amp;1
</programlisting></blockquote></para>

<para>Il reste alors à modifier le script vu plus haut pour qu'il se
comporte maintenant de la façon suivante&nbsp;:

<itemizedlist>
<listitem><para>postage et récupération des articles par
<command>newsx</command> en utilisant les deux lignes-ci dessus
;</para></listitem>

<listitem><para>récupération des articles des groupes restant par
<command>suck</command>.</para></listitem> 
</itemizedlist></para>
</sect2>
</sect1>

<sect1><title>Utilisation d'UUCP pour poster et recevoir des
      articles</title>

<para>UUCP (Unix to Unix CoPy) est un procédé aussi ancien
      qu'Unix. Celui-ci fût initialement conçu pour envoyer des
      fichiers d'une machine Unix à une autre&nbsp;: si l'on utilise
      aujourd'hui d'autres procédés pour ces copies, UUCP reste un
      moyen très efficace pour le transfert des articles Usenet et du
      courrier électronique.</para>

<para>Nous ne décrirons pas UUCP en détail ici, il existe une
      abondante documentation sur le sujet, dont un article de Denis
      Braussen&nbsp;: <ulink
      url="http://www.linux-france.org/article/connex/uucp/denis-uucp/index.htm
      l">http://www.linux-france.org/article/connex/uucp/denis-uucp/index.html</ulink>.
      Le principe général qui nous interesse ici consiste à utiliser
      des <quote>batchs</quote> d'articles (un peu comme ceux que l'on
      créait avec l'option <literal>-br</literal> de
      <command>suck</command>).</para>

<para>Là où cela devient intéressant est que ces batchs ne sont pas
      créés sur votre machine mais sur le serveur qui vous
      approvisionnera. Ajoutez à cela le fait que ces fichiers sont
      compressés et vous comprendrez mieux l'intérêt de la chose. De
      plus, vous pourrez envoyer vos articles au serveur distant selon
      le même principe (et en profiter pour faire de même pour envoyer
      et recevoir votre courrier si vous le désirez).</para>

<para>Enfin, UUCP faisant partie intégrante de nombreux Unix (je ne
      dis pas tous car je ne les connais pas tous), il n'y a plus
      besoin d'installer autre chose que
      <productname>INN</productname> pour disposer d'un
      serveur.</para>

<para>Cela dit, pour bénéficier de cette méthode, il faut trouver un
      serveur qui acceptera de créer ces fameux fichiers batchs pour
      vous, et qui vous autorisera à les configurer pour qu'ils
      contiennent les articles des groupes de votre choix. À l'heure
      actuelle, je ne connais que Teaser et frmug qui permettent,
      moyennant un abonnement dérisoire, d'utiliser UUCP.</para>

<sect2><title>Configuration rapide d'UUCP</title>

<para>UUCP utilise un certain nombre de fichiers de configuration
	permettant un réglage très fin de son fonctionnement. Dans le
	contexte qui nous intéresse ici, nous ne les utiliserons pas
	tous. De plus, les communications auront lieu
	<quote>au-dessus</quote> de PPP, ce qui signifie que nous ne
	soucierons pas des problèmes de modem. Voir l'article déjà
	cité pour une description plus complète des possibilités de
	connexion.</para>

<para>Voici le contenu des fichiers nécessaires à l'utilisation d'UUCP
	pour recevoir des articles et/ou du courrier&nbsp;: ils se
	trouvent tous dans le répertoire
	<filename>/etc/uucp</filename>. Celui-ci, ainsi que les
	fichiers qu'il contient appartiennent à l'utilisateur et au
	groupe <literal>uucp</literal> (qui doivent donc exister). Par
	mesure de sécurité (les fichiers en question contiennent des
	mots de passe en clair), ce répertoire doit avoir les droits
	<literal>drwxrwx---</literal>.</para>

<para><itemizedlist>
<listitem><para><filename>config</filename>. C'est le fichier de
	    configuration principal. Voici un exemple&nbsp;:

<blockquote><programlisting>
nodename        jacoboni
sysfile         /etc/uucp/sys
portfile        /etc/uucp/port
dialfile        /etc/uucp/dial
callfile        /etc/uucp/call
passwdfile      /etc/uucp/passwd
unknown pubdir /var/spool/uucppublic /var/spool/uucppublic/receive
max-uuxqts 5
debug all
</programlisting></blockquote></para>

<para><literal>nodename</literal> est mon nom UUCP, tel qu'il m'a été
	    communiqué par l'administrateur du site qui m'enverra les
	    fichiers batchs. Les autres paramètres sont ceux par
	    défaut pour mon système&nbsp;: il n'y a pas besoin d'y
	    toucher.</para></listitem>

<listitem><para><filename>port</filename>. Ce fichier permet de
	    décrire les <quote>ports</quote> de communication
	    utilisables par UUCP. Ici, nous n'utiliserons que
	    PPP&nbsp;:

<blockquote><programlisting>
port TCP
type tcp
seven-bit false
reliable true
half-duplex false
service uucp
</programlisting></blockquote></para></listitem>

<listitem><para><filename>sys</filename>. Ce fichier décrit les
	    connexions avec les systèmes susceptibles de nous
	    approvisionner. Ici nous n'en décrivons qu'un, celui de
	    notre fournisseur&nbsp;:

<blockquote><programlisting>
system teaser
address uucp.teaser.net
myname jacoboni
protocol t

time any
chat-timeout 120
chat "" \r\c ogin: mon_login word: mon_mot_de_passe
commands /bin/rmail /usr/local/news/bin/rnews
port TCP
</programlisting></blockquote></para>

<para>On spécifie dans ce fichier le nom de la machine serveur. Le
	    script de <quote>chat</quote> envoie notre nom
	    d'utilisateur et notre mot de passe pour établir la
	    connexion (ce mot de passe est en clair, attention aux
	    permissions de ce fichier&nbsp;!). On indique également
	    les commandes qui s'appliqueront aux batchs reçus&nbsp;:
	    <command>rmail</command> pour le courrier et
	    <command>rnews</command> (la commande dont nous avons déjà
	    parlé) pour les articles. Enfin, on indique le port
	    (défini dans le fichier <filename>port</filename>) qui
	    sera utilisé par cette connexion.</para>

<para>Attention : avec <productname>INN 2.3</productname>, les droits
	      de <command>rnews</command> ont été modifiés&nbsp;: cela
	      peut poser problème pour une utilisation avec UUCP. Pour
	      corriger cela vous pouvez configurer INN avec l'option
	      adéquate (<literal>--enable-uucp-rnews</literal>) ou
	      rétablir les anciens droits manuellement. Il en va de
	      même, d'ailleurs pour <command>inews</command> qui vous
	      permet de poster sur votre serveur local&nbsp;: les
	      droits par défaut ne vous permettent plus de le
	      faire... Pensez à les rétablir si besoin est.</para></listitem>
	      </itemizedlist></para>

<para>C'est tout pour la configuration de UUCP proprement
	dit...</para>

<para>Vous pouvez tester votre configuration à l'aide de la commande
	<command>uuchk</command> (à exécuter sous le compte
	<literal>root</literal>).</para>

</sect2>

<sect2><title>Configuration de INN pour utilisation avec UUCP</title>

<para>UUCP étant configuré, il reste à faire de même pour
	<productname>INN</productname>. </para>

<para>Lorsque votre fournisseur d'accès vous a donné votre
compte et votre mot de passe, il vous a également donné (ou demandé)
un identificateur pour votre serveur&nbsp;: c'est celui que vous avez
indiqué ou que vous indiquerez dans la variable
<literal>pathhost</literal> de votre fichier
<filename>inn.conf</filename>. </para>

<para>Si vous ne souhaitez utiliser UUCP que pour recevoir les
	articles, c'est tout ce que vous avez à faire. Cela dit, ce
	serait dommage de ne pas faire de même pour leur envoi... Pour
	cela, il faut indiquer à <productname>INN</productname> qu'il
	doit construire des batchs UUCP à partir des articles que vous
	écrivez et que vous souhaitez diffuser sur le serveur de votre
	fournisseur et, pour cela, il faut modifier le paramètre
	correspondant au type de feed dans l'entrée du fichier
	<filename>newsfeeds</filename> correspondant à ce feed. Si
	vous utilisez <command>rpost</command>, ce paramètre est
	<literal>Wnm</literal> (<quote>m</quote> comme <quote>articles
	<emphasis>m</emphasis>ultiples</quote>). Pour UUCP, il doit
	valoir <literal>Wnb</literal> (<quote>b</quote> comme
	<quote><emphasis>b</emphasis>atch</quote>).</para>

<para>À titre d'exemple, la ligne de mon fichier
	<filename>newsfeeds</filename> est, actuellement&nbsp;:

<blockquote><screen>
teaser/teaser.fr::Tf,Wnb:
</screen></blockquote></para>

<para>Ceux qui utilisent un feed UUCP de frmug utiliseront&nbsp;:

<blockquote><screen>
frmug/frmug.org::Tf,Wfb,B4096/1024:
</screen></blockquote></para>

<para>C'est tout...</para>

<para>Il reste maintenant à écrire un script permettant, comme
  précédemment, d'envoyer et de recevoir les batchs UUCP&nbsp;:

<blockquote><programlisting>
#! /bin/sh

# On prepare le batch des articles a envoyer

/usr/local/news/bin/send-uucp teaser

# On recupere les batchs sur Teaser

/usr/libexec/uucp/uucico -f -s teaser
</programlisting></blockquote></para>

<para>Le paramètre <literal>teaser</literal> fait ici référence à
  l'entrée correspondante du fichier
  <literal>/etc/uucp/sys</literal>.</para>

<para><emphasis>Remarque</emphasis> : ce même script vous permettra de
  récupérer vos courriers si vous disposez également d'une boîte
  UUCP mais, comme dirait Kipling, c'est une autre histoire...</para>
</sect2>
</sect1>
  
<sect1>
    <title>Annexe 1 : Utilisation de ctlinnd</title>
   
<para>Il n'est pas question, ici, de détailler tout ce que peut faire
le programme <command>ctlinnd</command>, qui, comme son nom l'indique,
sert à contrôler le fonctionnement du serveur
<command>innd</command>. Nous nous en tiendrons à notre optique
simplificatrice&nbsp;: vérification du bon fonctionnement et
expiration des articles. Le lecteur intéressé pourra consulter la page
du manuel <literal>ctlinnd(8)</literal>. <emphasis>Pensez à vous
mettre sous le compte <literal>news</literal>, notamment si
l'utilisation de <command>ctlinnd</command> doit modifier ne serait-ce
qu'un fichier de configuration de
<productname>INN</productname>&nbsp;: si vous étiez sous
<literal>root</literal>, la commande fonctionnerait, mais les fichiers
modifiés deviendraient alors la propriété de ce dernier ce qui
provoquerait un arrêt de <productname>INN</productname></emphasis>.</para>

<sect2><title>Vérification du fonctionnement de <productname>INN</productname></title>

<sect3><title><command>ctlinnd mode</command></title>

<para>L'argument <literal>mode</literal> de la commande offre une
sorte de tableau de bord de l'état du serveur en fonctionnement.</para>

<para>Invoquez <command>ctlinnd mode</command>, qui produira si tout
va bien un message commençant par&nbsp;:

<blockquote><screen>
Server running
Allowing remote connections
</screen></blockquote></para>

<para>Si ce n'est pas le cas, utilisez <command>inncheck</command>
(voir ci-après) afin de corriger les fichiers de configuration, puis
relancez le serveur.</para>
</sect3>

<sect3><title><command>ctlinnd checkfile</command></title>

<para>La commande <command>ctlinnd checkfile</command> vérifie la
syntaxe du fichier <filename>newsfeeds</filename> (opération qu'il
vaut mieux faire avant de recharger ce fichier en mémoire à la suite
de l'ajout d'un nouveau feed). Normalement, cela doit simplement vous
répondre <literal>Ok</literal>.</para>

<para>Pour recharger <filename>newsfeeds</filename> en mémoire,
exécutez la commande <command>ctlinnd reload newsfeeds "rechargement
du fichier newsfeeds"</command>.</para>
</sect3>
</sect2>

<sect2><title>Modification du fichier <filename>active</filename></title>

<sect3><title>Ajout et retrait de groupes</title>

<para>Comme nous le disions plus haut, il ne faut pas modifier
manuellement le fichier <filename>active</filename>. À la place, on
utilisera la commande <command>ctlinnd newgroup
nom_du_forum</command> pour ajouter un forum non modéré ou
<command>ctlinnd newgroup nom_du_forum m</command> pour ajouter
un forum modéré.</para>

<para>Pour supprimer une entrée du fichier
	  <filename>active</filename>, on utilisera la commande
	  <command>ctlinnd rmgroup nom_du_forum</command>.</para>

<para><emphasis>Attention</emphasis> : La manipulation du fichier
<filename>active</filename> nécessite de stopper au préalable l'activité
du serveur de news à l'aide de la commande <command>ctlinnd pause
"modification du fichier active"</command>.</para>

<para>Les modifications terminées, on peut vérifier la cohérence de la
configuration avec la commande <command>inncheck</command> (voir plus
bas).</para>

<para>Si cette vérification s'est bien passée, il reste à demander au
serveur de reprendre son rôle après avoir rechargé le fichier
<filename>active</filename> en mémoire&nbsp;:

<blockquote><screen>
ctlinnd reload active "rechargement du fichier active"
ctlinnd go "modification du fichier active"
</screen></blockquote></para>

<para><emphasis>Attention</emphasis> : Le message associé à
	  <command>ctlinnd go</command> doit être le même que celui de
	  <command>ctlinnd pause</command>...</para>

<para><command>ctlinnd</command> peut faire encore beaucoup d'autres
choses, reportez-vous aux liens cités en fin de ce document pour en
apprendre plus. Pour nous, ça suffit...</para>
</sect3>

<sect3><title>Mise à jour du fichier <filename>active</filename> à l'aide de
<command>docheckgroups</command></title>

<para>La méthode décrite plus haut convient pour l'ajout ou le retrait
occasionnel de quelques groupes (par exemple, lors de la création ou
la suppression de forums dans une hiérarchie). Lorsque vous aurez
pratiqué pendant quelque temps Usenet, vous vous apercevrez que votre
configuration est incomplète&nbsp;: souvent, lorsqu'on répond à un
article posté dans un groupe A, on souhaite faire suivre la discussion
dans un groupe B car l'on estime que ce dernier est plus approprié
pour traiter de ce sujet. Par exemple, on peut répondre à un article
posté dans <literal>fr.comp.os.unix</literal> traitant d'un problème
de programmation Perl et vouloir détourner la suite de la discussion
vers le groupe <literal>fr.comp.lang.perl</literal>, consacré à ce
langage. Cette pratique a plusieurs avantages et devrait être employée
systématiquement&nbsp;:

<itemizedlist>
<listitem><para>elle détourne d'un groupe un fil de discussion qui n'a
rien à y faire et allège donc la pollution de ce groupe
	      ;</para></listitem>
<listitem><para>elle
replace cette discussion dans un contexte mieux adapté et donc mieux
susceptible de fournir des réponses adéquates.</para></listitem>
</itemizedlist></para>

<para>Cette possibilité est offerte par tous les lecteurs de news et
s'appelle <quote><emphasis>faire un Follow Up To</emphasis></quote> ou
(à ne pas confondre avec le terme <quote><emphasis>Follow
Up</emphasis></quote> qui, pour certains logiciels, signifie
simplement <quote>répondre à cet article dans ce même
groupe</quote>). Ce qui est important ici c'est le
<quote><emphasis>To</emphasis></quote> qui indique bien que l'on fait
suivre ailleurs&nbsp;: un champ <literal>Followup-To:
fr.toto.titi</literal> invitera l'auteur d'une réponse à votre article
à publier celle-ci dans le forum <literal>fr.toto.titi</literal>. Une
utilisation intéressante est le <literal>Followup-To: junk</literal>
qui empêchera, normalement, que votre article soit le point de départ
d'un fil de discussion (cela dit, certains indélicats peuvent très
bien choisir de ne pas honorer cette demande). Une autre utilisation
est le <literal>Followup-To: poster</literal> qui demande à ce que la
discussion se poursuive par courrier privé. Usenet aimant bien les
abréviations, vous verrez souvant le terme Fu2...</para>

<para>Mais, pour faire un fu2 vers un groupe donné, il faut que ce
groupe soit dans notre fichier <filename>active</filename> et, à
priori, nous ne sommes pas abonnés à tous les groupes existants... Si
vous vous posez cette question, c'est que vous n'avez pas compris le
rôle du fichier <filename>active</filename>&nbsp;: celui-ci n'a rien à
voir avec les notions d'abonnement aux groupes, il indique simplement
les forums que connaît votre serveur (et accessoirement, le nombre
d'articles de chaque groupe présent sur le serveur pour ceux auxquels
vous êtes abonnés&nbsp;: voir plus haut).</para>

<para>Afin de résoudre ce problème, il faut donc simplement faire en
sorte que notre fichier <filename>active</filename> contienne tous les
groupes (en tous cas, tous les groupes auxquels nous sommes abonnés et
tous ceux vers lesquels nous sommes susceptibles de faire suivre). Par
exemple, il est souhaitable que notre serveur connaisse au moins tous
les groupes de la hiérarchie <literal>fr</literal>... Or celle-ci
compte plus de 200 forums&nbsp;!</para>

<para>Certains FAI mettent à disposition leurs fichiers
<filename>active</filename> et <filename>newsgroups</filename>&nbsp;:
il suffit alors de les télécharger. Mais
<emphasis>attention</emphasis>&nbsp;:/ les fichiers ainsi récupérés
reflètent l'état du serveur de votre FAI, pas celui du vôtre&nbsp;!
Ceci signifie que les numéros d'articles qui s'y trouvent ne
correspondent pas aux numéros d'articles sur votre serveur... (voir la
      section sur la commande <command>getlist</command> pour résoudre
      ce problème).</para>

<para>Heureusement, la distribution de <productname>INN</productname>
offre un outil permettant d'automatiser ce processus&nbsp;: il s'agit
du script <filename>~news/lib/docheckgroups</filename> (cet
emplacement est celui de <productname>INN 2.2</productname>). De plus,
le forum <literal>fr.usenet.forums.annonces</literal> poste
régulièrement un fichier au format adéquat qu'il nous suffira de
traiter de la façon suivante&nbsp;:

<orderedlist>
<listitem><para>Nous supposons que vous avez sauvegardé dans un
fichier le contenu de l'article en question. À titre d'exemple, voici
les premières lignes du dernier article&nbsp;:

<blockquote><programlisting>
From: fufa@teaser.fr (Usenet FR)
Subject: [ANNONCE] Liste des groupes fr.* au format checkgroups
Summary: Fr.* docheckgroups lists.
Keywords: usenet liste fr checkgroups inn.
Date: 1 Nov 2000 03:51:01 -0000
Message-ID: &lt;liste-groupes-fr-1-973050661@sortilege.frmug.org&gt;

(je saute les autres en-têtes...)

Posted-By: auto-faq 3.3.1 beta (Perl 5.005)
Archive-name: fr/liste-groupes
Posting-Frequency:  1 and 15 of each month.
X-No-Productlinks: yes


Ceci est une liste technique maintenue par 
This is a technical list maintained by :

liste-fr &lt;liste-fr@sortilege.frmug.org&gt;

Dernier article checkgroup officiel
Last official checkgroup post :

&lt;fr-checkgroups-september-0-1@usenet-fr.news.eu.org&gt;

Liste disponible sur le web à l'adresse :
This doc is available on www :
http://www.usenet-fr.news.eu.org/liste-groupes.html

[ Version Francophone ]

Une autre maintenue par Philippe Ladame &lt;philippe.ladame@wanadoo.fr&gt;,
moins compacte, dite "Table des forums fr." est disponible
sur news:fr.bienvenue, et, pourvue de liens vers les chartes des forums,
sur le Web en http://www.citeweb.net/aminaute/forums/tablefr.html.

Si votre site transporte la totalité des groupes "fr" alors chacun
des groupes listés ci-dessous devrait s'y trouver. Vous pouvez
passer le script ci-dessous à votre checkgroups afin de vérifier si
tous les groupes existent et ont le bon statut. Le script ci-dessous
est à utiliser avec INN en ayant les privilèges de l'utilisateur
gérant les news (en général news ou usenet).

(je coupe le texte en anglais)

Il y a 278 groupes dans fr.* à la date du 01/11/2000
---------- snip ---------- snip ---------- snip ---------- snip ----------

/usr/local/news/bin/control/docheckgroups &lt;&lt;PASGLOP
fr.announce.divers	Annonces diverses (pas petites annonces). (Moderated)
fr.announce.important	Annonces importantes concernant fr. (Moderated)
fr.announce.newgroups	Annonces de nouveaux groupes / discussions. (Moderated)
fr.announce.seminaires	Annonces de conferences et seminaires. (Moderated)
fr.bienvenue	Aider les nouveaux venus dans leurs premiers pas sur Usenet. (Moderated)
fr.bienvenue.questions	Les premieres questions sur Usenet (Ou, Comment).
...
</programlisting></blockquote></para>

<para>Après avoir sauvegardé ce fichier, éditez-le pour supprimer tout
ce qui précède la ligne
<literal>/usr/local/news/bin/control/docheckgroups
&lt;&lt;PASGLOP</literal>, modifiez éventuellement le chemin de
<command>docheckgroups</command> pour qu'il corresponde à votre
système et sauvez-le sous le nom
<filename>/tmp/fufa</filename>.</para></listitem>

<listitem><para>Sous le compte <literal>news</literal>, arrêtez votre
serveur à l'aide d'une commande <command>ctlinnd pause 'maj'</command>
et lancez la commande&nbsp;:

<blockquote>
<screen>
sh /tmp/fufa &gt; /tmp/maj-active
</screen>
</blockquote></para>

<para>Ceci va vous créer le fichier
<filename>/tmp/maj-active</filename> que vous allez éditer pour
vérifier que tout est correct.</para></listitem>

<listitem><para>Ce fichier contient d'abord un ensemble de lignes en
commentaires indiquant les groupes qui manquent à votre fichier
<filename>active</filename> (la première fois, il risque d'y en avoir
beaucoup...). À la suite de ces commentaires, vous trouverez un
ensemble de lignes <command>ctlinnd newgroup ...</command> qui se
chargeront d'ajouter les groupes à votre fichier
<filename>active</filename>. Parcourez-les pour vérifier que tout est
correct (faites notamment attention au statut de groupe 
modéré/modéré).</para>

<para>Vous trouverez à la fin de ce fichier les descriptions qu'il
faut ajouter à votre fichier <filename>newsgroups</filename> (ce n'est
pas fait automatiquement&nbsp;: n'ajoutez que les descriptions des
groupes auxquels vous êtes abonnés).</para></listitem>

<listitem><para>Lancez les commandes suivantes&nbsp;:

<blockquote>
<screen>
cp ~news/db/active ~news/db/active.save
sh /tmp/maj-active
</screen>
</blockquote></para>

<para>La première commande est une précaution au cas où les choses
tourneraient mal...</para></listitem>

<listitem><para>Forcez le rechargement du fichier
<filename>active</filename> via une commande <command>ctlinnd reload
all 'ok'</command> (éventuellement, faites une vérification via
<command>inncheck -a -v -pedantic</command>) et relancez le serveur
par la commande <command>ctlinnd go 'maj'</command></para></listitem>
</orderedlist></para>

<para>Voilà, vous avez un fichier <filename>active</filename>
contenant toute la hiérarchie <literal>fr</literal> ainsi que tous les
groupes que vous y aviez déjà mis. Supprimez les fichiers que vous
avez créés dans <filename>/tmp</filename> et le fichier
<filename>active.save</filename>.</para>

<para><emphasis>Attention</emphasis> : ne vous connectez surtout pas
tout de suite si votre script de récupération des articles utilise
l'option <literal>-A</literal> de <command>suck</command>&nbsp;!!!
Vous lanceriez la récupération de tous les articles disponibles de
tous les groupes que vous venez d'ajouter&nbsp;!
<emphasis>Assurez-vous de supprimer cette option de votre
script</emphasis>.</para>
</sect3>

<sect3><title>Mise à jour du fichier <filename>active</filename> à
l'aide de <command>getlist</command></title>

<para>La méthode précédente nécessite de disposer de fichiers au
format <command>docheckgroups</command>, elle est relativement
automatique et peut se faire hors connexion. Une autre méthode, plus
exhaustive, consiste à récupérer les informations directement auprès
de son fournisseur d'accès à l'aide du programme
<command>getlist</command>, fourni avec la distribution
<productname>INN</productname> (<literal>getlist(1)</literal>). Un des
désavantages majeurs de cette méthode est, bien sûr, qu'elle implique
une connexion qui peut être très longue (mais cette opération ne doit
être faite qu'une fois).</para>

<para>Le programme <command>getlist</command>, livré avec
	<productname>INN</productname> (et normalement placé dans
	<filename>~news/bin/</filename>) permet de récupérer certains
	fichiers de configuration exploités par un serveur
	distant. Notamment, <filename>active</filename> et
	<filename>newsgroups</filename>.</para>

<para>Voici, par exemple, comment créer un fichier contenant une copie
de l'<filename>active</filename> du serveur de news de notre
fournisseur d'accès&nbsp;:

<blockquote><screen>
getlist -h news.fai.fr active &gt; active_new
</screen></blockquote></para>

<para>On peut aussi préciser, après le mot-clé désignant le fichier à
récupérer, un filtre de sélection&nbsp;:

<blockquote><screen>
getlist -h news.fai.fr active 'fr.*' &gt; active_fr_new
</screen></blockquote></para>

<para><emphasis>Attention</emphasis> : Ne remplacez surtout pas votre
<filename>active</filename> local directement par le fichier ainsi
engendré, car celui-ci contient les numéros des articles gérés par le
serveur distant. Par contre, en étant sous le compte
<literal>news</literal>, vous pouvez remplacer directement votre
fichier <filename>newsgroups</filename> par la commande&nbsp;:

<blockquote><screen>
getlist -h news.fai.fr newsgroups &gt; ~news/db/newsgroups
</screen></blockquote></para>

<para>(mieux vaut au préalable stopper le serveur).</para>

<para>Pour mettre à jour notre fichier <filename>active</filename>,
nous allons utiliser la <quote>méthode du polytechnicien</quote> et
donc créer un fichier qui pourra ensuite être traité par
<command>docheckgroups</command>. Pour ce faire, on exécutera les
commandes suivantes&nbsp;:

<blockquote><screen>
echo "/usr/local/news/lib/docheckgroups &lt;&lt;PASGLOP" &gt;/tmp/active_check
cut -f1,4 -d' ' active_new | /tmp/check.pl &gt;&gt;/tmp/active_check
echo "PASGLOP" &gt;&gt;/tmp/active_check
</screen></blockquote>

où <filename>/tmp/check.pl</filename> est le script Perl suivant
(faites un <command>chmod +x</command> pour le rendre exécutable)&nbsp;:

<blockquote><programlisting>
#!/usr/bin/perl

while (&lt;STDIN&gt;)
{
 (s/^(.*) y$/$1/) || (s/^(.*) m$/$1 \. \(Moderated\)/);
 print ;
}
</programlisting></blockquote></para>

<para>Le fichier <filename>/tmp/active_check/</filename> ainsi créé va
permettre à <command>docheckgroups</command> de comparer notre fichier
<filename>active</filename> avec la liste des groupes du fichier de
notre FAI. Pour ce faire, il suffit, <emphasis>sous le compte
<literal>news</literal></emphasis> de lancer la commande&nbsp;:

<blockquote><screen>
sh /tmp/active_check &gt; /tmp/active_2_vrfy
</screen></blockquote></para>

<para>Attention, cette commande risque d'être plutôt longue&nbsp;:
chez moi, elle a pris plus d'un quart d'heure (il faut dire que
l'active de mon fournisseur comportait 22765 entrées...). Un <command>ps
ax</command> vous confirmera que la commande continue de s'exécuter.</para>

<para>Lorsque cette commande est terminée, éditez le fichier
<filename>/tmp/active_2_vrfy</filename> qui a été créé&nbsp;: il doit
contenir un certain nombre de commandes de création de
groupes. Supprimez celles qui ne vous intéressent pas, vérifiez les
autres (les commandes de suppression de groupes ou de changement de
statut de modération). Stoppez votre serveur et lancez la commande
(toujours sous le compte <literal>news</literal>)&nbsp;:

<blockquote><screen>
cp /var/lib/news/active /var/lib/news/active.save
sh /tmp/active_2_vrfy
</screen></blockquote></para>

<para>Reportez vous à la section précédente pour le rechargement du
fichier active et le redémarrage du serveur.</para>

<para><emphasis>Remarque</emphasis>&nbsp;: Avec un fichier
<filename>active</filename> conséquent, et si votre logiciel de
lecture dispose de cette option, il peut être nécessaire de le
configurer afin qu'il ne relise pas systématiquement le fichier
<filename>active</filename> à chaque démarrage... Avec
<productname>Gnus</productname>, par exemple, on pourra utiliser avec
profit les variables <literal>gnus-read-active-file</literal> et
<literal>gnus-check-new-newsgroups</literal>.</para>
</sect3>
</sect2>
</sect1>

<sect1><title>Annexe 2 : Vérification du serveur et expiration des
articles</title>

<sect2><title>Utilisation d'<command>inncheck</command></title> 

<para>Pour vérifier la cohérence de la configuration et la validité
des fichiers, utilisez la commande <command>inncheck -a -v
-pedantic</command> sous le compte <literal>news</literal> (cf. la
page de manuel <literal>inncheck(8)</literal>).</para>

<para>Chez moi, j'obtiens&nbsp;:

<blockquote><screen>
Looking at /usr/local/news/db/active...
Looking at /usr/local/news/etc/control.ctl...
Looking at /usr/local/news/etc/expire.ctl...
Looking at /usr/local/news/etc/incoming.conf...
Looking at /usr/local/news/etc/inn.conf...
/usr/local/news/etc/inn.conf:16: modmailer has bad address
Looking at /usr/local/news/etc/moderators...
Looking at /usr/local/news/etc/newsfeeds...
ME, crosspost, overview!, teaser, /usr/local/news/etc/newsfeeds:0: warning you accept all incoming article distributions
done.
Looking at /usr/local/news/etc/nnrp.access...
Looking at /usr/local/news/etc/nntpsend.ctl...
Looking at /usr/local/news/etc/overview.fmt...
Looking at /usr/local/news/etc/passwd.nntp...
</screen></blockquote></para>

<para>Ce qui n'est déjà pas si mal... Un avertissement
(<quote>warning</quote>) pour l'entrée <literal>ME</literal> du
fichier <filename>newsfeeds</filename> révèle que j'accepte toutes les
distributions, et un autre m'indique que je n'ai pas renseigné le
champ <literal>modmailer</literal> dans le fichier
<filename>inn.conf</filename> (ce qui est inutile puisque j'utilise un
fichier <filename>moderators</filename>).</para>

<para>Enfin, pour tracer les différents évènements en cas de doute,
consultez les fichiers traces se trouvant sous
<filename>/var/log/news</filename>, notamment <filename>news.err,
news.crit</filename> et <filename>news.notice</filename>&nbsp;: pour
tout article posté dans <literal>fr.usenet.logiciels</literal> afin de
résoudre un problème, indiquez les erreurs reportées dans ces
fichiers, cela aidera forcément ceux qui veulent vous
répondre...</para>

<para>À ce propos, <productname>INN</productname> vient avec une liste
de fichiers textes (mais en anglais) recensant toutes les FAQs et les
réponses. Une lecture de ceux-ci est chaudement recommandée.</para>
</sect2>

<sect2><title>Expiration des articles</title>

<para>La commande permettant d'effacer les articles périmés est
<command>expire</command>&nbsp;: en fait, <command>expire</command>
dresse une liste qu'il passe ensuite au programme
<command>fastrm</command> (cf. les pages de manuel
<literal>expire(8)</literal> et
<literal>fastrm(8)</literal>). L'administrateur doit donc veiller à ce
que cette commande soit lancée régulièrement (quotidiennement)&nbsp;:
le script <command>news.daily</command> est fait pour
cela. Pour que cette opération ait lieu tous les jours à un heure où
	votre machine fonctionne, le plus simple consiste à créer une
	tâche <literal>cron</literal> pour l'utilisateur
	<literal>news</literal>. Pour cela, il suffit, à partir du
	compte <literal>news</literal> d'exécuter la commande
	<command>crontab -e</command> et d'ajouter la ligne
	suivante&nbsp;:

<blockquote><screen>
40  20  *  *  *  /usr/local/news/bin/news.daily
</screen></blockquote></para>

<para>Désormais, les tâches de maintenances quotidienne de
	<productname>INN</productname> auront lieu tous les jours, à
	20 heures 40 (cf. <literal>crontab(5)</literal> pour la
	syntaxe de cette ligne sur votre système).</para>

<para>Sinon, une façon plus <quote>brutale</quote> de forcer cette
expiration est de lancer sous le compte <literal>news</literal>, la
commande <command>/usr/local/news/bin/expire -v1</command>, suivie
d'un <command>/usr/local/news/bin/ctlinnd renumber ''</command>. Mais
je ne vous le conseille pas. De plus, <command>news.daily</command> se
charge de poster un rapport contenant des statistiques sur
l'utilisation de votre serveur, ce qui peut permettre de détecter
d'éventuels dysfonctionnements. Ce rapport étant adressé à
l'administrateur du serveur (le <quote>newsmaster</quote>), il est
préférable de créer un alias de celui-ci vers un compte
utilisateur&nbsp;: le vôtre, par exemple.</para>

<para>La commande <command>expire</command> utilise le fichier
<filename>expire.ctl</filename> déjà évoqué, qui permet de paramétrer
les durées d'expiration des articles. La syntaxe de ce fichier est
décrite dans <literal>expire.ctl(5)</literal>.</para>
</sect2>
</sect1>

<sect1><title>Annexe 3 : Filtrage des articles avec suck</title>

<para><productname>Suck</productname> permet de filtrer les articles
qu'il récupérera sur le serveur distant. Il utilise, pour cela un
mécanisme de <quote>kill-files</quote>
(cf. <literal>suck(1)</literal>). Dans le répertoire
<filename>/usr/local/etc/suck</filename> doit se trouver un fichier
<filename>suckkillfile</filename> qui est le fichier de filtrage
maître. Voici un exemple de contenu&nbsp;:

<blockquote><programlisting>
HILINES=10000
#LOWLINES=10
NRGRPS=7
From:aaaa@bbb.fr
From:cccc@ddd.fr
QUOTE=\
GROUP=delete fr.usenet.logiciels suckkillfile.no_ms
GROUP=delete fr.comp.mail suckkillfile.no_ms
</programlisting></blockquote></para>

<para>Chaque entrée de ce fichier peut être de 2 types&nbsp;:

<itemizedlist>

<listitem><para>Type mot-clé : <literal>HILINES, LOWLINES, QUOTE,
GROUP</literal>&nbsp;: ils définissent un comportement
<quote>général</quote>&nbsp;;</para></listitem>

<listitem><para>Type header : <literal>From, Subject, Path,
...</literal> (en fait, tout champ valide d'un en-tête
d'article)&nbsp;: ils définissent un comportement 
<quote>particulier</quote>.</para></listitem>
</itemizedlist></para>

<para>On notera que les entrées de type mot-clé ont la syntaxe
<literal>mot_clé=paramètre(s)</literal> alors que les entrées de type
header ont la syntaxe <literal>header:valeur</literal> (en tous cas,
depuis la version 3.6.0).</para>

<para>Les champs <literal>HILINES</literal> et
<literal>LOWLINES</literal> indiquent, respectivement, qu'il ne faut
pas récupérer les articles ayant plus de lignes ou moins de lignes que
celles spécifiées. Ici, <productname>Suck</productname> ne récupèrera
pas les articles ayant plus de 10000 lignes. J'ai commenté l'entrée
<literal>LOWLINES</literal> car certains auteurs (n'est-ce pas,
Nat&nbsp;?) envoient des articles parfois très courts (un simple lien,
par exemple).</para>

<para>Le champ <literal>NRGRPS</literal> indique le nombre maximal de
forums autorisé pour le postage multiple d'un article. C'est une
première précaution pour éviter les <quote>spams</quote>, car tout
article posté dans de trop nombreux forums est suspect. Cette entrée
n'apparaît qu'à partir de la version 3.8 de
<productname>Suck</productname>. Attention à ne pas vouloir trop en
faire&nbsp;: j'avais d'abord mis cette valeur à 5 et, par analyse du
fichier <literal>/tmp/suck.killlog</literal>, je me suis aperçu que
certains articles avaient été rejetés car, dans certains forums
(notamment ceux traitant d'<literal>emacs</literal>), le cross-postage
est une coutume... Je l'ai donc ramené à 7. </para>

<para>Le champ <literal>QUOTE</literal> permet de définir le caractère
servant à quoter les caractères spéciaux dans les expressions
régulières (cf. <literal>regexp(3)</literal>).</para>

<para>Le champ <literal>GROUP</literal> permet de définir un
comportement pour un forum particulier&nbsp;: ce comportement est soit
<literal>delete</literal> soit <literal>keep</literal>. Il s'applique
au forum dont le nom suit, selon les règles de filtrage définies dans
le fichier précisé. Ici, je filtre les articles des groupes
<literal>fr.usenet.logiciels</literal> et
<literal>fr.comp.mail</literal>. Tous les deux sont filtrés selon les
règles définies dans le fichier de filtrage
<literal>suckkillfile.no_ms</literal>.</para>

<para>Ici, le fichier <filename>suckkillfile</filename> ne contient
que deux entrées de type header&nbsp;: elles servent à filtrer
<emphasis>tous</emphasis> les articles dont le champ
<literal>From:</literal> contient une des deux adresses spécifiées,
quels que soient les forums dans lesquels ils ont été postés. Cela
permet, notamment, d'éliminer les <quote>trolleurs</quote> ou les
<quote>spammers</quote> déjà repérés (mais cela ne filtrera pas les
réponses que certains pourraient leur faire).</para>

<para>Les entrées de type header décrites dans le fichier
<filename>suckkillfile</filename> s'appliquent à
<emphasis>tous</emphasis> les forums et, pour définir un comportement
particulier pour un forum donné, on utilisera une entrée
<literal>GROUP</literal>. Le fichier
<literal>suckkillfile.no_ms</literal> pourrait ainsi contenir les
lignes suivantes&nbsp;:

<blockquote><programlisting>
Subject:.*Eudora
Subject:.*Forte
Subject:.*Outlook
Subject:.*\&gt;Ms
Subject:.*Pegasus
Subject:.*Gravity
</programlisting></blockquote>

ce qui permet de filtrer les articles dont le champ
      <literal>Subject:</literal> concerne des logiciels Microsoft.</para>
 
<para>À la place de <literal>delete</literal>, on peut indiquer
<literal>keep</literal>, qui ne conservera <emphasis>que</emphasis>
les articles correspondants aux critères fixés.</para>

<para>Une entrée de type&nbsp;:

<blockquote><programlisting>
GROUP=keep fr.* suckkeepfile.moi
</programlisting></blockquote>

et un fichier <filename>suckkeepfile.moi</filename> contenant
simplement&nbsp;:

<blockquote><programlisting>
From:.*jaco@teaser\.fr
</programlisting></blockquote>

aurait le mérite de restreindre le nombre d'articles récupérés pour
les forums de la hiérarchie <literal>fr</literal>, mais je
n'apprendrais plus grand chose...</para>

<para>À chaque fois qu'il rejette un article,
<productname>Suck</productname> l'indique dans le fichier
<filename>/tmp/suck.killlog</filename> (ou
<filename>/usr/local/etc/suck/suck.killlog</filename> en indiquant la
raison de ce rejet. Par des options passées à
<productname>Suck</productname>, vous pouvez paramétrer la taille de
ces informations&nbsp;: par défaut, il utilise le format long. On peut
le forcer à utiliser un format court, mais je le trouve peu
explicite... On peut même le configurer pour qu'il ne crée pas ce
fichier&nbsp;: ce serait une mauvaise idée, selon moi. Jetez toujours
un coup d'oeil à ce fichier lorsque vous ajoutez un critère de
filtrage afin de vous assurer que les effets obtenus sont bien ceux
escomptés. En tout cas, pensez à vider ce fichier périodiquement car
il a tendance à grossir assez vite (sauf s'il se trouve dans
<filename>/tmp</filename> et que vous avez configuré votre système
pour qu'il vide ce répertoire à chaque démarrage).</para>

<para>Comme nous l'avons évoqué plus haut, ce mécanisme de filtrage
      s'effectue en examinant le contenu des messages, ce qui induit
      nécessairement un temps de traitement supplémentaire. Les
      dernières versions de <productname>Suck</productname> permettent
      d'utiliser un fichier <filename>suckxover</filename>, plus
      rapide à traiter car n'utilisant pas le même mécanisme
      d'examen. Ce dernier type de filtrage ne dispose pas de toutes
      les fonctionnalités du précédent mais suffit dans la plupart des
      cas (cf. <literal>suck(1)</literal>).</para>
</sect1>

<sect1><title>Bibliographie</title>

<para>Le contenu de ce document est, en grande partie, tiré de
mon expérience personnelle et notamment des différents déboires que j'ai
rencontrés. Toutefois, cette expérience s'est principalement forgée grâce à
l'aide des personnes que je remercie dans la section suivante.</para>

<para>La lecture du forum <literal>fr.usenet.logiciels</literal> est
une source inestimable de renseignements précieux pour tout ce qui
touche à la configuration des logiciels traités ici. Si vous avez un
problème concernant <productname>INN</productname>,
<productname>Suck</productname> ou <productname>Newsx</productname>
<emphasis>ne le postez pas dans un forum destiné à votre système
d'exploitation...</emphasis>. Ces logiciels existent sur tous les Unix
et ne sont pas liés à un système particulier.</para>

<para>Certains documents sont disponibles librement sur
      l'Internet&nbsp;: 

<itemizedlist>
<listitem><para>J'ai parcouru <quote>Administration Réseau sous
Linux</quote> (aka NAG&nbsp;: <quote>Network Administration
Guide</quote> d'Olaf Kirch. Bien que disponible par téléchargement, ce
livre est aussi édité par les éditions O'Reilly, pour ceux qui
préfèrent les beaux livres... La première édition de ce livre est un
peu ancienne (1995), et traite surtout de
<productname>Cnews</productname>. La section sur
<productname>INN</productname> est assez limitée et le problème des
connexions occasionnelles via <literal>PPP</literal> n'est pas
abordé. Il n'empêche&nbsp;: il constitue une source de renseignements
inestimable sur le fonctionnement d'Usenet et des réseaux en
général. Une seconde édition a vu le jour (je ne l'ai pas encore
consultée) et sa traduction française est en cours.</para></listitem>

<listitem><para>La <ulink url="http://www.eerie.fr/~news/faq.html">FAQ
INN</ulink> de Fabien Tassin est une mine de renseignements, bien
qu'elle commence sérieusement à dater... Grâce à elle, j'ai notamment
récupéré un document écrit par Gilles Rech, intitulé <ulink
url="ftp://ftp.univ-lyon1.fr/pub/netinfo/CRU/news/doc/guide.ps">Guide
d'administration d'un serveur de news INN, guide d'administration de
NNTPLINK</ulink>. Cette documentation, elle aussi ancienne, décrit
clairement les problèmes et les fichiers de configurations de
<productname>INN</productname> bien que, là encore, le problème de la
récupération et de l'envoi d'articles par <literal>PPP</literal> ne
soit pas traité.</para></listitem>

<listitem><para>Évidemment, les documentations, les fichiers
	  <filename>README</filename> ou <filename>INSTALL</filename>,
	  les pages <literal>man</literal> des programmes cités sont
	  <emphasis>les</emphasis> références absolues.</para></listitem>

<listitem><para>Honnêtement, je n'ai pas lu de livres commerciaux,
tout simplement parce que je n'en connaissais pas et que je n'ai pas
eu l'occasion d'en parcourir. Les éditions O'Reilly ont publié
<quote>Managing Usenet</quote>, qui a même été traduit en français,
	    mais je m'y suis pris trop tard&nbsp;: la première édition
	    n'est plus disponible. Gageons qu'une nouvelle édition
	    verra bientôt le jour.</para></listitem>
</itemizedlist></para>
</sect1>
  
<sect1><title>La suite au prochain numéro...</title>

<para>Cette doc grossit à vue d'oeil. Il faudra probablement que je la
réorganise mais je préfère pour l'instant livrer les informations dont
je dispose...</para>

<para>Beaucoup de choses manquent, qui seront intégrées au fil de vos
remarques et de mon temps disponible, le rôle des messages de
contrôle, l'utilisation de PGP et de filtres Perl, notamment, est en
cours de gestation.</para>
</sect1>

<sect1><title>Remerciements</title> 

<para>L'idée de ce document vient d'un échange E-épistolaire avec
<emphasis>Nat Makarévitch</emphasis> qui s'est patiemment escrimé à
répondre aux problèmes que je rencontrais lors de la configuration de
<productname>INN</productname> sur ma machine. Je le remercie pour
cette aide, pour ses relectures et ses ajouts à ce document et pour
avoir créé <literal>&lt;linux-france.org&gt;</literal>.</para>

<para>Je remercie aussi <emphasis>Emmanuel Chantreau</emphasis> pour
avoir répondu au problème de la récupération des articles sur leur
numéro plutôt que sur leur Message-Id avec
<productname>Suck</productname>, ainsi que pour sa relecture et sa
participation à ce document. Toute la partie sur
<productname>Newsx</productname>, notamment, est de sa plume.</para>

<para>Merci à <emphasis>Stéphane Lee Chip Hing</emphasis> pour ses
suggestions sur l'utilisation de <command>ctlinnd</command> pour les
modifications du fichier <filename>active</filename>.</para>

<para>Merci à ceux qui m'ont écrit pour mettre en évidence les lacunes
et/ou erreurs de la version précédente&nbsp;: <emphasis>D. Braussen,
N. Chuche, A. Derogis, P. Dorgueil</emphasis>... Ils m'ont servi,
malgré eux, de cobayes et ont du mérite.</para>

<para>Merci à <emphasis>François Ranchin</emphasis> pour la
<quote>méthode Fyr</quote>, pour avoir passé un week-end de
Pentecôte avec moi ;-) et pour ses commentaires avisés sur ce
document.</para>

<para>Toute l'équipe de Teaser m'a permis de configurer sans trop
      peiner UUCP afin que je puisse bénéficier de ce formidable moyen
      de transport.</para>

<para>Merci à <emphasis>Olivier Tharan</emphasis>, qui a assuré la
relecture de cette version.</para>

<para>Enfin, merci à tous ceux qui continuent à fournir des réponses
dans <literal>fr.usenet.logiciels</literal>.</para>
</sect1>

<sect1><title>Termes d'utilisation</title>

<para>La redistribution du code source (XML), modifi&eacute; ou non,
  et compil&eacute; (HTML, PostScript, etc.) est soumise aux
  conditions suivantes&nbsp;:</para>

<para>
  <orderedlist>
    <listitem>
      <para>Le copyright ci-dessus, la présente liste de conditions et
        l'avertissement qui la suit doivent figurer dans le code
        source.</para>
    </listitem>

    <listitem>
      <para>Le code source distribué sous forme compilée doit 
        faire apparaître le copyright ci-dessus, la présente
        liste de conditions et l'avertissement qui la suit.</para>
    </listitem>
  </orderedlist>
</para>

<para>CE DOCUMENT EST FOURNI « TEL QUEL » ET IL N'EST DONNÉ
  AUCUNE GARANTIE, IMPLICITE OU EXPLICITE, QUANT À SON UTILISATION
  COMMERCIALE, PROFESSIONNELLE OU AUTRE. L'AUTEUR NE PEUT EN AUCUN CAS ÊTRE
  TENU POUR RESPONSABLE DE QUELQUE DOMMAGE OU PRÉJUDICE DIRECT,
  INDIRECT, SECONDAIRE OU ACCESSOIRE (Y COMPRIS LES PERTES FINANCIÈRES
  DUES AU MANQUE À GAGNER, À L'INTERRUPTION D'ACTIVITÉS,
  OU LA PERTE D'INFORMATIONS ET AUTRES) DÉCOULANT DE L'UTILISATION DE
  LA DOCUMENTATION OU DE L'IMPOSSIBILITÉ D'UTILISER CELLE-CI, ET DONT
  L'UTILISATEUR ACCEPTE L'ENTIÈRE RESPONSABILITÉ.</para>
</sect1>
</article>

