12. Annexe 1 : Utilisation de ctlinnd

Il n'est pas question, ici, de détailler tout ce que peut faire le programme ctlinnd, qui, comme son nom l'indique, sert à contrôler le fonctionnement du serveur innd. Nous nous en tiendrons à notre optique simplificatrice : vérification du bon fonctionnement et expiration des articles. Le lecteur intéressé pourra consulter la page du manuel ctlinnd(8). Pensez à vous mettre sous le compte news, notamment si l'utilisation de ctlinnd doit modifier ne serait-ce qu'un fichier de configuration de INN : si vous étiez sous root, la commande fonctionnerait, mais les fichiers modifiés deviendraient alors la propriété de ce dernier ce qui provoquerait un arrêt de INN.

12.1 Vérification du fonctionnement de INN

12.11 ctlinnd mode

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

Invoquez ctlinnd mode, qui produira si tout va bien un message commençant par :

Server running
Allowing remote connections

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

12.12 ctlinnd checkfile

La commande ctlinnd checkfile vérifie la syntaxe du fichier newsfeeds (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 Ok.

Pour recharger newsfeeds en mémoire, exécutez la commande ctlinnd reload newsfeeds "rechargement du fichier newsfeeds".

12.2 Modification du fichier active

12.21 Ajout et retrait de groupes

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

Pour supprimer une entrée du fichier active, on utilisera la commande ctlinnd rmgroup nom_du_forum.

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

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

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 active en mémoire :

ctlinnd reload active "rechargement du fichier active"
ctlinnd go "modification du fichier active"

Attention : Le message associé à ctlinnd go doit être le même que celui de ctlinnd pause...

ctlinnd 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...

12.22 Mise à jour du fichier active à l'aide de docheckgroups

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 : 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 fr.comp.os.unix traitant d'un problème de programmation Perl et vouloir détourner la suite de la discussion vers le groupe fr.comp.lang.perl, consacré à ce langage. Cette pratique a plusieurs avantages et devrait être employée systématiquement :

  • 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 ;

  • elle replace cette discussion dans un contexte mieux adapté et donc mieux susceptible de fournir des réponses adéquates.

Cette possibilité est offerte par tous les lecteurs de news et s'appelle «faire un Follow Up To» ou (à ne pas confondre avec le terme «Follow Up» qui, pour certains logiciels, signifie simplement «répondre à cet article dans ce même groupe»). Ce qui est important ici c'est le «To» qui indique bien que l'on fait suivre ailleurs : un champ Followup-To: fr.toto.titi invitera l'auteur d'une réponse à votre article à publier celle-ci dans le forum fr.toto.titi. Une utilisation intéressante est le Followup-To: junk 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 Followup-To: poster qui demande à ce que la discussion se poursuive par courrier privé. Usenet aimant bien les abréviations, vous verrez souvant le terme Fu2...

Mais, pour faire un fu2 vers un groupe donné, il faut que ce groupe soit dans notre fichier active 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 active : 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 : voir plus haut).

Afin de résoudre ce problème, il faut donc simplement faire en sorte que notre fichier active 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 fr... Or celle-ci compte plus de 200 forums !

Certains FAI mettent à disposition leurs fichiers active et newsgroups : il suffit alors de les télécharger. Mais attention :/ les fichiers ainsi récupérés reflètent l'état du serveur de votre FAI, pas celui du vôtre ! 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 getlist pour résoudre ce problème).

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

  1. 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 :

    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: <liste-groupes-fr-1-973050661@sortilege.frmug.org>
    
    (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 <liste-fr@sortilege.frmug.org>
    
    Dernier article checkgroup officiel
    Last official checkgroup post :
    
    <fr-checkgroups-september-0-1@usenet-fr.news.eu.org>
    
    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 <philippe.ladame@wanadoo.fr>,
    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 <<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).
    ...
    

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

  2. Sous le compte news, arrêtez votre serveur à l'aide d'une commande ctlinnd pause 'maj' et lancez la commande :

    sh /tmp/fufa > /tmp/maj-active
    

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

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

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

  4. Lancez les commandes suivantes :

    cp ~news/db/active ~news/db/active.save
    sh /tmp/maj-active
    

    La première commande est une précaution au cas où les choses tourneraient mal...

  5. Forcez le rechargement du fichier active via une commande ctlinnd reload all 'ok' (éventuellement, faites une vérification via inncheck -a -v -pedantic) et relancez le serveur par la commande ctlinnd go 'maj'

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

Attention : ne vous connectez surtout pas tout de suite si votre script de récupération des articles utilise l'option -A de suck !!! Vous lanceriez la récupération de tous les articles disponibles de tous les groupes que vous venez d'ajouter ! Assurez-vous de supprimer cette option de votre script.

12.23 Mise à jour du fichier active à l'aide de getlist

La méthode précédente nécessite de disposer de fichiers au format docheckgroups, 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 getlist, fourni avec la distribution INN (getlist(1)). 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).

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

Voici, par exemple, comment créer un fichier contenant une copie de l'active du serveur de news de notre fournisseur d'accès :

getlist -h news.fai.fr active > active_new

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

getlist -h news.fai.fr active 'fr.*' > active_fr_new

Attention : Ne remplacez surtout pas votre active 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 news, vous pouvez remplacer directement votre fichier newsgroups par la commande :

getlist -h news.fai.fr newsgroups > ~news/db/newsgroups

(mieux vaut au préalable stopper le serveur).

Pour mettre à jour notre fichier active, nous allons utiliser la «méthode du polytechnicien» et donc créer un fichier qui pourra ensuite être traité par docheckgroups. Pour ce faire, on exécutera les commandes suivantes :

echo "/usr/local/news/lib/docheckgroups <<PASGLOP" >/tmp/active_check
cut -f1,4 -d' ' active_new | /tmp/check.pl >>/tmp/active_check
echo "PASGLOP" >>/tmp/active_check
/tmp/check.pl est le script Perl suivant (faites un chmod +x pour le rendre exécutable) :
#!/usr/bin/perl

while (<STDIN>)
{
 (s/^(.*) y$/$1/) || (s/^(.*) m$/$1 \. \(Moderated\)/);
 print ;
}

Le fichier /tmp/active_check/ ainsi créé va permettre à docheckgroups de comparer notre fichier active avec la liste des groupes du fichier de notre FAI. Pour ce faire, il suffit, sous le compte news de lancer la commande :

sh /tmp/active_check > /tmp/active_2_vrfy

Attention, cette commande risque d'être plutôt longue : 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 ps ax vous confirmera que la commande continue de s'exécuter.

Lorsque cette commande est terminée, éditez le fichier /tmp/active_2_vrfy qui a été créé : 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 news) :

cp /var/lib/news/active /var/lib/news/active.save
sh /tmp/active_2_vrfy

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

Remarque : Avec un fichier active 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 active à chaque démarrage... Avec Gnus, par exemple, on pourra utiliser avec profit les variables gnus-read-active-file et gnus-check-new-newsgroups.