Next Previous Contents

8. INN, le serveur de news

8.1 Dispatching des news reçues par UUCP.

Si INN est correctement configuré, recevoir des news et les dispatcher sur sa machine ne devrait poser aucun problème sachez simplement que typiquement c'est rnews qui est chargé de recevoir et de distribuer les news apportées par UUCP.

Et puisque sous UUCP tout est automatique, c'est uucico et ses amis (uux) qui vont appeler rnews pour nous. Cool non ?

L'envoie des news mérite par contre quelques explications supplémentaires. Ceci est décrit dans le chapitre suivant.

8.2 La création des "feed"

Fonctionnement général

Typiquement, INN crée et met à jour une liste exhaustive des articles qu'il doit envoyer pour chacune des machines qu'il doit "feeder" (ie: "alimenter").

Ces fichiers sont déposés dans le répertoire /var/spool/news/out.going et sont renseignés au fur et à mesure que les articles arrivent sur le serveur.

Une fois la livraison effectuée, généralement grâce un script de la famille de nntpsend pour une liaison NNTP ou un script de la famille de sendbatch pour une liaison UUCP, ces fichiers sont mis à jour et le cycle recommence.

Si le machines sont reliées par une liaison NNTP les news sont transportées directement. En ce qui concerne UUCP, les news sont placées dans la file d'attente d'UUCP et seront traités dès le prochaine connexion.

Le fichier /etc/news/newsfeeds

La liste des machines à feeder ainsi que la description des feed correspondant sont consignés dans le fichier /etc/news/newsfeeds Chaque entrée de ce fichier est de la forme :

              # voir man newsfeeds pour plus de détails
              #
              sitename[/exclude,exclude,...]\
                   :pattern,pattern...[/distrib,distrib...]\
                   :flag,flag...\
                   :param

pour chaque feed, le nom du fichier qui contiendra les références des articles à feeder est par défaut celui noté dans /etc/news/newsfeeds pour "sitename". La description d'un feed UUCP est pratiquement la même que pour un feed NNTP. Seules changent les options du troisième champ (:flag,flag...\) A titre d'exemple, l'entrée suivante créera le fichier /var/spool/news/out.going/gyptis

#-------------------------------------------------------------------------
# exemple fictif: un feed pour le site "gyptis"
#
gyptis/gyptis.frmug.org\
        :!*,\
        fr.*\
        :Tf,Wfb:
#
# flags utilisés:   Tf   le feed est du type fichier
#                   Wfb  les informations transmises sont
#                        le nom complet avec path de l'article (f)
#                        et sa taille comptés en bytes (b). Cette
#                        information sera utlisée par les scripts
#                        de la famille de sendbatch pour limiter la
#                        taille des batch
#
#
# NOTE: - certains sites uucp utilisent le flag Wnb (man newsfeeds pour
#         plus plus de détails)
#
#       - pour un feed NNTP ou aurait le flag Wnm dans la plupart des cas
#-------------------------------------------------------------------------

Notez qu'il est possible de choisir un autre nom pour ce fichier. Il faut alors le mettre dans le champ "param" du feed. Par exemple, l'entrée suivante créera le fichier /var/spool/news/out.going/gyptis-uucp

Dans ce cas, c'est le nom "gyptis-uucp" (sans les guillemets) qu'il faudra passer en paramètre au script chargé de construire la file d'attente uucp (sendbatch par exemple).

#-------------------------------------------------------------------------
# exemple fictif: un feed pour le site "gyptis" avec un fichier
# out.going portant un nom différent.
#
gyptis/gyptis.frmug.org\
        :!*,\
        fr.*\
        :Tf,Wfb:gyptis-uucp
#-------------------------------------------------------------------------

INN maintiendra donc pour la machine gyptis le fichier : /var/spool/news/out.going/gyptis ou /var/spool/news/out.going/gyptis-uucp dont le contenu ressemble à :

#-------------------------------------------------
/var/spool/news/fr/comp/os/unix/9782 664
/var/spool/news/fr/comp/os/unix/9783 875
/var/spool/news/fr/comp/os/linux/debats/21897 1343
/var/spool/news/fr/comp/os/linux/debats/21898 3984
#-------------------------------------------------

Un exemple de fichier /etc/news/newsfeeds

Un exemple d'entrée logique : (on remarquera les domaines d'exclusion mutuels). Se reporter à la doc d'É.Jacoboni et à la page de man de newsfeeds pour plus ample information concernant ce fichier.

      # extrait simplifié du /etc/news/newsfeeds de batman
      # --------------------------------------------------
      # feed des machines locales + oleane
      #
      # status: ENABLED
      #                                      /(_M_)\
      # system:  batman.gyptis.frmug.org    |       |
      #                                      \/~V~\/
      ME:*::
      # ---------------------------------------------------
      #
      crosspost:*:Tc,Ap,WR:/usr/lib/news/bin/crosspost -s -
      overview!:*:Tc,WO:/usr/lib/news/bin/overchan
      #
      # ---NNTP--- machine UniX ---
      news.dial.oleane.com/oleane,dial.oleane.com,gyptis.frmug.org,gyptis\
              :*,\
              !gyptis.*,\
              !cybernet.*,\
              !batman.*,\
              !fr.comp.applications.emacs,\
              !fr.comp.lang.c,\
              !fr.comp.mail,\
              !fr.comp.os.linux*,\
              !fr.comp.os.unix,\
              !fr.misc.bavardages.linux,\
              !fr.usenet*,\
              !control,\
              !junk\
              :Tf,Wnm:
      #
      # ---UUCP--- machine LinuX ---
      gyptis/gyptis.frmug.org,gyptis.uucp,gyptis,dial.oleane.com,oleane\
              :!*,\
              gyptis.*,\
              cybernet.*,\
              fr.comp.applications.emacs,\
              fr.comp.lang.c,\
              fr.comp.mail,\
              fr.comp.os.linux*,\
              fr.comp.os.unix,\
              fr.misc.bavardages.linux,\
              fr.usenet*\
             :Tf,Wfb:
      #
      # ---UUCP--- machine LinuX ---
      robin.gotham.city/robin,robin.gotham.city\
              :!*,\
              batman.*,\
              fr.misc.bavardages.linux,\
              control\
              :Tf,Wfb:
      #
      # ---UUCP (UUPC-EXTENDED) --- machine ms-dos ---
      #            ^^              (voir chapitre 13)
      #
      joker/joker,joker.gotham.city\
              :!*,\
              batman.*,\
              gyptis.*,\
              cybernet.*,\
              fr.usenet.*\
              fr.rec.*,\
              alt.ascii-art\
              :Tf,Wfb:
      # ---------------------------------------------------

8.3 Envoi de news dans la file d'attente

Comme expliqué précédemment, il vous faut maintenant envoyer les articles référencés dans le feed de la machine concernée vers la file d'attente d'UUCP.

Ce sont des scripts spécialisés, normalement fournis avec le serveur de news, qui réalisent cette tâche.

Avec INN plusieurs scripts sont fournis et standard : sendbatch, send-uucp, send-uucp.pl et son fichier de configuration send-uucp.cf On trouve généralement ces scripts dans /usr/lib/news (Debian) ou équivalent (/usr/lib/news par exemple sur une SlackWare).

dans ce qui suit je détaillerai sendbatch et send-uucp.pl.

Utilisation de /usr/lib/news/bin/sendbatch

Sur batman j'ai eu trois mini problèmes avec ce script : (il faut dire que j'utilise, honte, encore la version 1.5 de INN. Peut être qu'une nouvelle version marcherait mieux !). De plus la doc de sendbatch se limite au script sendbatch lui même. Il est donc parfois nécessaire d'y modifier directement certaines valeurs.

1) j'ai dû changer un répertoire par défaut :

     #-------------------------------/usr/lib/news/bin/sendbatch----
     #Denis BRAUSSEN
     #UUSPOOL=/usr/spool/uucp
     UUSPOOL=/var/spool/uucp
     #----------------------------------------------------------------

2) j'ai dû désactiver et remplacer les lignes suivantes comme écrit ci-dessous.

#-------------------------------/usr/lib/news/bin/sendbatch----
#Check free space on the partition?
#-----------------------------------------------------------------------
#Disabled by Denis BRAUSSEN (there is a bug : $FREE remain empty)
#-----------------------------------------------------------------------
#    if [ -n "${UUSPOOL}" ] ; then
#       FREE=`(cd ${UUSPOOL}; df . | ${AWK} '
#               $6 == "'${UUSPOOL}'" { print $4 ; exit }
#               $1 == "'${UUSPOOL}'" && NF == 7 { print $4 ; exit }
#               $2 == "'${UUSPOOL}'" { print $5 ; exit }
#               $1 == "'${UUSPOOL}'" { print $3 ; exit }
#           ')`
#       if [ -n "${FREE}" -a "${FREE}" -lt ${SPOOLFREE} ] ; then
#           echo "${PROG}:  No space on ${UUSPOOL} for ${SITE} (${FREE})."
#           rm -f ${LOCK}
#           continue
#       fi
#    fi
#
# ------------------------------------------------------------------
# Replaced by :
# ------------------------------------------------------------------
#
# Date: 24 Apr 1999 23:16:38 +0200
# From: Nat Makarevitch <nat@nataa.fr.eu.org>
#
# correction apportee par Nat Makarevitch.
# ****************************************
#
# Check free space on the partition?
 if [ -n "${UUSPOOL}" ] ; then
      FREE=`(cd ${UUSPOOL}; df . | tail -1 | ${AWK} '{ print $4 }' )`
  if [ -n "${FREE}" -a "${FREE}" -lt ${SPOOLFREE} ] ; then
      echo "${PROG}:  No space on ${UUSPOOL} for ${SITE} (${FREE})."
      rm -f ${LOCK}
      continue
  fi
 fi
#-------------------------------------------------------------------------

3) les posts envoyés sur gyptis contenaient un champ "From:" incorrect. J'ai donc bricolé sendbatch pour que tout rentre dans l'ordre.

Je sais que cette solution n'est pas la meilleure (le mieux est de renseigner correctement ce champ par une FEATURE supplémentaire de sendmail (masquerade_entire_domain) pour les mails et les variables "pathhost" et "fromhost" du fichier /etc/news/innd.conf pour les news.

Dès que j'aurais testé ces solutions avec succès, je les décrirai plus précisément. En attendant, je vous livre quand même la petite magouille qui suit (à utiliser avec précaution donc !) :

#-------------------------------/usr/lib/news/bin/sendbatch----
##  Loop over command line.
for SITE
do
.../...
    -c)
        #COMP="; exec ${COMPRESS} ${COMPFLAGS}"
        #-----------Denis BRAUSSEN------------------------------------
        # on rajoute un filtre "sed" pour que le "From:" des news soit
        # une email valide
        #
        # ATTENTION: les 3 lignes suivantes forment en réalité une 
        #            seule grande ligne.
        #--------------------------------------------------------------
        COMP="; exec sed /^From:.*@batman.gotham.city\>/s/\<.*@batman.
                           gotham.city/\<PostOffice@mail.dotcom.fr/
                           | ${COMPRESS} ${COMPFLAGS}"
        #---------------------------------------------------------------
        ECHO="echo '#! cunbatch'"
        continue
        ;;
#-------------------------------------------------------------------------

Enfin, n'oubliez pas que c'est l'user "news" qui va exécuter sendbatch. (Voir le paragraphe 5.11 traitant de sudo).

exemple :

la commande suivante ordonne à rnews (via sendbatch) d'envoyer les news à destination de gyptis dans la file d'attente.

sudo -u news /usr/lib/news/bin/sendbatch -c gyptis

où :

si vous n'aimez pas "sudo", loggez vous directement sous "news" pour lancer sendbatch.

Utilisation des scripts de la famille send-uucp*

Sur certaines distributions (en particulier sur le Taylor-UUCP de la debian) on trouve en plus de "sendbatch" d'autres scripts capables de faire la même chose, à quelques détails près.

par exemple :

/usr/lib/news/send-uucp

et

/usr/lib/news/send-uucp.pl

les plus intéressant des deux est "send-uucp.pl". C'est un script perl (qui nécessite donc que perl soit installé sur votre machine) qui dérive du script bash "send-uucp".

"send-uucp.pl" possède en effet un fichier de configuration /etc/news/send-uucp.cf (toujours sur une Debian) qui permet entre autre de définir quelle méthode de compression utiliser pour un système (ordinateur voisin) donné.

En effet, si la plupart des systèmes UUCP utilisent actuellement gzip pour compresser les news, certains utilisent l'ancien "compress". Consulter le fichier "/etc/news/innshellvars" pour savoir quel est le programme de compression par défaut utilisé. Si votre machine est en contact avec plusieurs machines, il se peut fort bien qu'elles n'utilisent pas toutes le même programme de compression.

# send-uucp.cf
# Configuration file for send-uucp                        MACHINE "robin"
# -----------------------------------------------------------------------
# Format is:
# sitename<Space>compressor<Space>maxsize<Space>batchtime
#
# compressor, maxsize and batchtime can be left out and will then use the
# default values. You can't leave out the second field (compressor) and still
# use the third (maxsize) etc.! So if you want to set a maxsize, you HAVE to
# add a compression methode.
# compress keywords are: compress gzip none
# You can use flags with your compressor, just add them. 
# like compress -b13 for 13 bits compression.
# Remember that the size you set is the size *before* compression!
#
joker           compress        1048576         5,18,22
robin           gzip            1048576         5,6,18,20,22,0,2
gyptis          gzip            1048576         5,18,22
#      ^^^^^^           ^^^^^^           ^^^^^^
#      tabulation       tabulation       tabulation
#------------------------------------------------------------------------


Next Previous Contents