Mini Howto Mail vers News <author>Robert Hart, InterWeft IT Consultants Melbourne, Australie, <tt/iweft@ipax.com.au/ <newline> Traduit par Olivier Tharan, <tt/tharan@int-evry.fr/ <date>v1.0, 4 novembre 1996 <abstract> Ce document décrit comment configurer votre logiciel de News et mail2news.pl pour relier des listes de distribution aux groupes de news locaux. </abstract> <toc> <sect>Copyright et autres choses <p> Le copyright de ce document est retenu par l'auteur. Il donne la permission de distribuer ce document par des moyens électroniques et sur des CDs, à condition qu'il soit gardé entièrement dans son format d'origine. Il donne aussi la permission d'imprimer une copie de ce document pour usage personnel. La publication de ce document en partie ou en entier sans la permission du propriétaire du copyright de toute manière autre qu'indiquée ci-dessus est interdite. Ce document est directement supporté par InterWeft IT Consultants (Melbourne, Australie). La dernière version de ce document est disponible sur le site WWW d'InterWeft chez InterWeft IT Consultants, <url url="http://203.29.72.65/">. <sect>Introduction <p> La plupart des sites sur Internet sont toujours en train de chercher des moyens d'améliorer l'utilisation de la bande passante limitée dont ils disposent sur leur lien à Internet. Supposons que plus d'un utilisateur s'abonne à la même liste de distribution, et il y aura duplication de trafic. S'il y a un certain nombre de telles duplications, ou si le trafic sur les listes est important, la consommation de bande passante s'accroît. En abonnant le site à une liste (si c'est permis par le propriétaire de la liste), et en <em/routant/ le courrier électronique vers le serveur de news local, il est possible de rendre les listes de distribution accessibles à tous les utilisateurs du site ou, en utilisant les principes de sécurité d'<tt/innd/, de limiter l'accès à certains utilisateurs. Un tel abonnement de groupe (surtout s'il y a quelques listes à grand trafic) peut générer des économies d'utilisation de bande passante importantes. La lecture des listes à travers un lecteur de news offre aussi aux utilisateurs l'avantage du threading (NdT : créer des enfilades), qui n'est pas disponible dans de nombreux programmes de mail, et aussi l'avantage de libérer leur boîte aux lettres pour du courrier peut-être plus urgent ou plus personnel. Ce mini Howto décrit la mise en place du script <tt/mail2news.pl/ pour réaliser ceci. <sect1>Où trouver <tt/mail2news.pl/ <p> L'auteur n'a pas pu trouver <tt/mail2news.pl/ sur le CPAN (le réseau complet d'archives Perl), mais il a pu passer devant sans le voir. Il est cependant sur <tt/sunsite.unc.edu/ (quelque part) et aussi sur <tt/ftp.redhat.com/. Comme ce script Perl n'est pas très long, vous le trouverez à la fin de ce Howto. <sect>Vue d'ensemble du système <p> Il est probablement plus facile de comprendre le fonctionnement de ce système en suivant un message à partir de la liste de distribution vers le groupe de news, puis d'un message posté sur le groupe de news local (routé vers la liste de distribution) et en regardant comment ils sont traités. <sect1>Le courrier venant de la liste de distribution <p> Le courrier de la liste de distribution est envoyé à toutes les adresses mail abonnées. Un alias de mail spécial est abonné à la liste de distribution en question et tout le trafic à destination et en provenance de la liste est ainsi envoyé par le serveur de liste à cette adresse. Quand le courrier de la liste de distribution arrive sur la machine locale, l'alias de mail envoie le message entrant dans <tt/mail2news.pl/. L'alias de mail spécifie aussi le groupe de news (local) de destination. Le script <tt/mail2news.pl/ traite le message, en appliquant de nouvelles en-têtes et utilise ensuite <tt/rnews/ ou <tt/inews/ pour poster le message dans le groupe de news. <sect1>Messages postés dans le groupe de news local <p> Le groupe de news local est installé en tant que groupe modéré, puisque ceci nous permet de bénéficier des possibilités de courrier électronique d'<tt/innd/. Tout message posté dans un groupe modéré n'est pas transmis automatiquement au groupe. À la place, les messages sont envoyés par <em/email/ au modérateur du groupe. En déclarant le modérateur du groupe de news local comme étant l'adresse de la liste de distribution, tous les messages postés sur le groupe de news local seront envoyés par <em/email/ à la liste de distribution par <tt/innd/ et n'apparaîtront qu'une fois qu'ils auront été reçus par <tt/mail2news.pl/ qui ajoute la ligne <em/approved/ nécessaire aux messages pour qu'<tt/innd/ accepte de les poster dans le groupe de news. <sect>Configurer <tt/mail2news/ <p> Placez le script <tt/mail2news.pl/ dans un endroit convenable. Je préfère <tt>/usr/local/scripts</tt>, mais l'endroit dépend de vous. Vous devrez éditer le script comme suit : <itemize> <item> au début du script, assurez-vous que vous pointez vers le binaire Perl local <code> #!/usr/bin/perl # pointe vers l'endroit courant de Perl </code> <item> j'ai eu des problèmes avec les trois lignes suivantes. Les mettre en commentaire ne pose pas de problèmes. <code> ( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/; die "$program: demande au moins la version 3 de Perl\n" if $version < 3; </code> <item> éditez les lignes suivantes pour pointer vers le programme qui poste (j'utilise <tt/rnews/) et vers votre machine de news : <code> # $inews = "/usr/bin/inews"; # $iopts = "-h -o \"passerelle mail2news\""; $inews = "/usr/bin/rnews"; $iopts = ""; $postinghost = "votre.serveur.de.news"; # pointe vers votre serveur de news </code> <item> assurez-vous que le script est exécutable (mode 755). </itemize> <sect>Mettre en place les alias de mail <p> Éditez <tt>/etc/aliases</tt> pour créer des entrées pour les listes de distribution que vous voulez envoyer vers les news. Chaque entrée doit être de la forme : <tscreen><verb> <adresse email abonnée à la liste>: \ "| /usr/local/scripts/mail2news.pl <nom du groupe de news local>" </verb></tscreen> Si par exemple l'adresse de mail à laquelle il faut envoyer le courrier de la liste (l'adresse <em/email/ abonnée) est <tt/liste_site/ et le groupe de news local dans lequel il faut poster le courrier s'appelle <tt/groupe.site.local/, l'alias sera <tscreen><verb> # adresse d'abonnement de groupe pour machin@une.certaine.liste liste_site: "|/usr/local/scripts/mail2news.pl groupe.site.local" </verb></tscreen> Créez une entrée pour chaque liste de distribution que vous devez router vers votre serveur de news local et lancez ensuite <tt/newaliases/. <sect>Configurer les groupes de news et le serveur de news (<tt/innd/) <p> En utilisant <tt/ctlinnd/, créez les groupes de news sur votre serveur de news. Rappelez-vous qu'ils doivent être locaux, donc nommez-les de façon distincte avec un préfixe de façon à les exclure de votre distribution de news (dans le fichier <tt/newsfeeds/). Vous devez aussi dire à <tt/innd/ que le groupe est modéré (en utilisant <tt/ctlinnd/). Rappelez-vous que <tt/innd/ est très sensible aux propriétaires et permissions de fichiers, vous devez agir à ce niveau avec <tt/innd/ en tant qu'utilisateur <em/news/. Vous indiquez un groupe modéré en donnant le paramètre <tt/m/ à la commande <tt/newgroup/. <tscreen><verb> ctlinnd newgroup <nom du nouveau groupe> m <administrateur> </verb></tscreen> Le <tt/m/ indique à <tt/innd/ que le groupe est modéré. Éditez votre fichier <tt/newsfeeds/ pour vous assurer que ces groupes locaux ne sont pas distribués (sauf si vous voulez spécifiquement que ça se passe ainsi). Par exemple, si votre liste de distribution s'appelle <tt/groupe.site.local/, vous ajouterez sans doute <tt/!local*/ dans le second champ des sites que vous distribuez (ou dont vous recevez les news) dans votre fichier <tt/newsfeeds/. Maintenant, de façon à vous assurer que les messages des utilisateurs sont envoyés sur la liste automatiquement par <tt/innd/, éditez <tt>/etc/news/moderators</tt> (ou <tt>/usr/local/news/moderators</tt>) pour ajouter une ligne qui déclare l'adresse de la liste de distribution comme modérateur. <tscreen><verb> groupe.site.local:liste@un.site.de.liste </verb></tscreen> <sect>Abonner l'alias <tt/mail2news/ à la liste de distribution <p> Vous devez maintenant abonner l'alias de mail à la liste de distribution. Vérifiez avec l'information de la liste de distribution comment s'abonner. Certaines listes de distribution vous permettent d'abonner une adresse <em/email/ différente de celle d'où vient l'abonnement (elles vérifient la confirmation avec l'adresse à abonner avant d'abonner réellement cette adresse). D'autres listes de distribution ne permettent pas ceci. Vous devrez donc <em/forger/ une demande d'abonnement. Il y a plusieurs façons de faire ceci. L'une des plus simples est d'utiliser Netscape Mail configuré (de manière temporaire) avec l'adresse avec laquelle la liste de distribution doit envoyer le courrier. Après l'abonnement, vous devriez voir un message de bienvenue de la part du serveur de listes dans votre serveur de news. Dans ce cas, tout s'est bien passé et vous pouvez maintenant tester l'autre sens en postant un message de news dans votre nouvelle liste. Le message <em/ne devrait pas/ apparaître immédiatement dans le groupe de news. Il devrait être envoyé par courrier électronique et reçu à nouveau et posté dans le groupe de news. Si cela fonctionne, vous avez réussi à router la liste vers les news. <sect>Si ça ne fonctionne pas... <p> Si ça ne marche pas, vous devez retrouver la trace des messages pour voir exactement où ça s'arrête de fonctionner. Des outils utiles à ce niveau sont les logs de mail et de news. Robert Hart Melbourne, Victoria, Australie, octobre 1996 <sect>Le script <tt/mail2news.pl/ <p> <code> #!/usr/bin/perl ($program = $0) =~ s%.*/%%; #( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/; #die "$program: demande au moins la version 3 de Perl\n" # if $version < 3; # $inews = "/usr/bin/inews"; # $iopts = "-h -o \"passerelle mail2news\""; $inews = "/usr/bin/rnews"; $iopts = ""; $postinghost = "votre.serveur.de.news"; if ($#ARGV < 0) { # $newsgroup = "test"; # nous attendons la ligne newsgroup dans le corps } elsif ($#ARGV == 0) { $newsgroup = $ARGV[0]; } else { die "usage: $program [groupe de news]\n"; } # si jamais inews fait un core dump ou quelque chose insense $SIG{'PIPE'} = "plumber"; sub plumber { die "$program: \"$inews\" est mort trop tot !\n"; } open (INEWS, "| $inews $iopts") || die "$program: ne peut pas lancer $inews\n"; # boucle qui prend les en-tetes while (<STDIN>) { last if /^$/; # transforme la vraie ligne from: dans le vieux style s/^From:\s+(.*) <(.*)>/From: $2 ($1)/; s/Message-Id/Message-ID/; # transforme la ligne from_ en en-tete de chemin ; # fonctionne aussi en local s/^From\s+(\S+)@(\S+).*/Path: $2!$1/ || s/^From\s+(\S+)[^@]*$/Path: $1\n/; print INEWS # if /^(Date|From|Subject|Path|Newsgroups|Organization|Message-ID):/i; if /^(Date|From|Subject|Path|Newsgroups|Message-ID):/i; $saw_subject |= ( $+ eq 'Subject' ); $saw_msgid |= ( $+ eq 'Message-ID' ); # $saw_newsgroup |= ( $+ eq 'Newsgroups' ); } warn "$program: n'attendait pas le groupe dans les en-tetes et les arguments\n" if $newsgroup && $saw_newsgroup; die "$program: n'a pas obtenu le groupe des en-tetes ni des arguments\n" unless $newsgroup || $saw_newsgroup; $approved = $newsgroup; $approved =~ s/\./'-'/eg; ($sec,$min,$hour,$mday,$mon,$year)=localtime(time); $madeupid = "\<$year$mon$mday.$hour$min$sec.$$\@kepler.hedland.edu.au\>"; printf INEWS "Newsgroups: %s\n", $newsgroup if $newsgroup; printf INEWS "Approved: %s\@kepler.hedland.edu.au\n", $approved; print INEWS "Subject: Untitled\n" unless $saw_subject; printf INEWS "Message-ID: %s\n", $madeupid unless $saw_msgid; printf INEWS "NNTP-Posting-Host: %s\n", $postinghost; print INEWS "Organisation: (mail2news gateway)\n"; print INEWS "\n"; print INEWS while <STDIN>; # avale le reste du message close INEWS; exit $?; </code> </article>