Cómo Intentar configurar un servidor de news con INN+SUCK

Autor: Pedro P. Fábrega Martínez, pfabrega@arrakis.es Versión 1.1 Fecha 8-98 Este documento explica como configurar un servidor de news en su máquina Linux. Está enfocado para las personas que usan Linux en casa y les gustaría tener un pequeño servidor local. También para quien quiera dar servicio de noticias a una red local con direcciones privadas. Este documento no va dirigido a quienes quieren ejecutar un servidor de news en una gran red, aunque la mayoría de las cosas las podría aplicar también. Por último, se supone que quien pretende instalar inn+suck tiene ya ciertos conocimientos no elementales.

Índice General

1 Descargo 2

2 Introducción 2

2.1 Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.1.1 inn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.1.2 suck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 ¿Dónde puedo conseguirlos ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3 Método 3

3.1 configuración de INN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1.1 inn.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.2 newsfeeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.3 nnrp.access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.4 hosts.nntp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.5 active . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 Verificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.3 Estaciones cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4 Instalar suck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.4.1 get.news.innxmit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4.2 Ejecutar suck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 Comentarios 13 4.1 sucknewsrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2 Caducidad de los mensajes: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3 Espacio en disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.4 Otras cosas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.5 Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.6 Derechos de Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5 Anexo: El INSFLUG 15

1 Descargo

Antes de comenzar, indicar que esto me funciona, con RedHat 5.0, puede que las configuraciones sean mejorables, pero estas satisfacen mis necesidades actuales, de dar servicio de news a una red local de varios equipos con unos 10 grupos de news de internet y algunos locales.

Además no se asume ningún tipo de responsabilidad de ningún daño ocasionado por estas instrucciones.

Por ejemplo, si te cabreas porque no sale, pegas un puñetazo, este hace saltar por la ventana un bolígrafo, que al darle al operario de teléfonos se le cae la escalera, esta golpea unos cables de alta tensión, se produce un sobrecarga de la línea, la sobrecarga calienta el sistema de refrigeración de la central nuclear y se produce una explosión termonuclear, yo, no quiero saber nada, que quede claro.

2 Introducción

2.1 Descripción

Para instalar un servidor de news en su equipo Linux, usando este método, va a necesitar dos paquetes, INN y suck.

2.1.1 inn

INN (InterNetNews) es un systema completo de Usenet para las Noticias de InterNet. Dispone de un demonio innd que gestiona entradas y salidas y otro demonio nnrpd que gestiona las lecturas. Dispone también de una serie de utilidades, a alguna de las cuales haremos referencia en este documento. Además, mantiene por separado los hosts que leen noticias de aquellos que nos las proporcionan, un detalle a tener en cuenta a la hora de la configuración.

2.1.2 suck

Para realizar la comunicación de nuestro servidor local y el servidor remoto utilizaremos otro programa llamado suck, en particular yo lo he hecho con el suck-3.9.2. En el momento de confeccioonar este documetno era la última versión y no había intenciones de sacar ninguna nueva.

Este paquete dispone de todo lo que es necesario para obtener news de un servidor NNTP remoto, y enviar artículos de tu servidor al servidor remoto.

El principal uso de suck es dar noticias a un servidor local INN o CNEWS, sin necesidad de que el servidor remoto NNTP te tenga configurado como "feed". NO está diseñado para alimentarse de 10,000 grupos y 3GB de artículos al día.

2.2 ¿Dónde puedo conseguirlos ?

INN forma parte de prácticamente todas las distribuciones de Linux. Sólo tiene que seleccionarlo como uno más de los componentes de la instalación o instalarlo con la utilidad de paquetes que tenga su distribución si no lo hizo en su mom ento.

Si de todas formas le interesan las fuentes de INN, para actualizarse o cualquier otra cosa, las puede encontrar en

ftp://ftp.vix.com/pub/inn

o en réplicas que puede encontrar en http://www.isc.org/inn.html. Por ejemplo :

ftp://ftp.xlink.net/pub/mirror.inn/

3. Método 3

La versión INN1.5.1 tiene algunos problemas de seguridad. Hay un parche para solucionar esto en

http://miquels.www.cistron.nl/inn/

Si quiere obtener utilidades adicionales para INN puede mirar en

tp://ftp.isc.org/isc/inn/unoff-contrib

Suck se puede encontrar en:

ftp://tsx-11.mit.edu/pub/linux/sources/sbin/suck-3.9.2.tar.gz
ftp://sunsite.unc.edu/pub/Linux/system/news/transport o en cualquier réplica de Sunsite.

3 Método

3.1 configuración de INN

Una vez que INN está instalado necesitamos los ficheros de configuración de INN. Estos ficheros de configuración están normalmente en /usr/lib/news, pero esto puede depender de la distribución. En mi caso

# ls -la /usr/lib/news
drwxrwxr-x   3 news     news         1024 May 19 21:38 .
drwxr-xr-x  63 root     root         8192 Jun 17 15:39 ..
drwxrwxr-x   5 news     news         1024 May 19 21:38 bin
-r--r-----   1 news     news         5206 Oct 20  1997 innshellvars
-r--r-----   1 news     news         6816 Oct 20  1997 innshellvars.csh
-r--r-----   1 news     news         6452 Oct 20  1997 innshellvars.pl
-r--r-----   1 news     news         7098 Oct 20  1997 innshellvars.tcl
-r-xr-x---   1 news     news         4728 Oct 20  1997 parsecontrol
-rwxr-xr-x   1 news     news        18040 Oct 20  1997 rnews
# ls -la /etc/news
drwxrwxr-x   2 news     news         1024 Jun 15 01:53 .
drwxr-xr-x  28 root     root         4096 Jul 26 12:21 ..
-r--r-----   1 news     news          265 Oct 20  1997 actsync.cfg
-r--r-----   1 news     news          371 Oct 20  1997 actsync.ign
-r--r-----   1 news     news        26879 Oct 20  1997 control.ctl
-r--r--r--   1 news     news          491 Oct 20  1997 distrib.pats
-r--r-----   1 news     news         1537 Oct 20  1997 expire.ctl
-r--r-----   1 news     news          260 May 22 18:22 hosts.nntp
-r--r-----   1 news     news          161 Oct 20  1997 hosts.nntp.nolimit
-r--r--r--   1 news     news          831 May 24 22:05 inn.conf
-r--r-----   1 news     news         2978 Oct 20  1997 innwatch.ctl
-r--r--r--   1 news     news          633 Oct 20  1997 moderators
-r--r--r--   1 news     news         3843 Jun 15 01:53 newsfeeds
-r--r-----   1 news     news          114 May 20 15:37 nnrp.access
-r--r-----   1 news     news          583 Oct 20  1997 nntpsend.ctl
-r--r--r--   1 news     news          388 Oct 20  1997 overview.fmt
-r--r-----   1 news     news          596 Oct 20  1997 passwd.nntp

Observe que los ficheros son propiedad de news. Compruébelo en su caso, y también que existan el usuario news y el grupo news.

A continuación vemos los ficheros que necesitan alguna modificación:

3.1.1 inn.conf

Voy a poner un listado de mi inn.conf, que además resulta autoexplicativo.

$ cat /etc/news/inn.conf
##  $Revision: 1.6 $
##  inn.conf -- inn configuration data
##  Formato:
##      <parametro>:<espacio><valor>
##  Usados por varios programas y libinn. Se definen los siguientes
##                                                       parametros:
##      domain          Dominio local, sin punto inicial.
##      fromhost        Que poner en la linea From ; por defecto es FQDN
##                      del host local.
##      moderatormailer Donde enviar los post moderados, si no lo encuentra
##                      en el fichero de moderadores; vea moderators(5).
##      pathhost        Que poner en las cabeceras Path y Xref headers; por
##                      defecto es el FQDN del host local.
##      organization    Si $ORGANIZATION no existe. Lo que pone en
##                      la cabecera Organization si esta en blanco.
##      server          Si $NNTPSERVER no existe. Host servidor NNTP local
##                      al que conectarse.
organization:   Servidor en mired.es
server:         localhost
domain: mired.es
## tengo un alias del localhost CNAME news.mired.es
pathhost: news.mired.es

3.1.2 newsfeeds
##  $Revision: 1.17 $
##  newsfeeds - determine where Usenet articles get sent
##  Formato:
##      site[/excluido,excluido...]\
##              :modelo,modelo...[/distrib,distrib...]\
##              :flag,flag...\
##              :param
## Lista de flags:
##      <size           El articulo debe ser menor de size bytes.
##      Aitems          Comprobacion de articulo -- d (necesita la
##                      cabecera Distribution)
##                      p (no verifica los sitios de la cabecera Path).
##      Bhigh/low       Tamanio interno del bufferr antes de escribir a la
##                      salida.
##      H[count]        El articulo debe tener menos de count saltos; 1 por
##                      defecto.
##      Isize           Tamanio interno del buffer (si nos suministra un
##                      fichero)
##      Nm              Solo grupos moderados que verifican el modelo

##      Nu              Solo grupos no moderados que verifican el modelo
##      Ssize           Inicia spooling si la cola tiene mas de size bytes.
##      Ttype           Tipo de suministro -- f (fichero) m (embudo; los
##                      nombres de parametro indican la entrada real )
##                      p (pipe a programa) c (envio a stdin
##                      de los sub-prcesos del parametro); x (como c, pero
##                      maneja comandos en stdin).
##      Witems          Que escribir -- b (tamanio en bytes del articulo)
##                      f (rutas completas )
##                      g (primer newsgroup) m (Message-ID) n (path relativo)
##                      s (sitio que suministra el articulo) t (hora recibida)
##                      * (nombres de embudos o sitios que obtienen el articulo
##                      N (Cabecera Newsgroups ) D (Cabecera Distribution
##                      H (todas las cabeceras) O (overview data)
##                      R (replicado de datos).
## Los campos de parametro dependen del flag T. Para Tf, las rutas
## relativas son del directorio .Para Tp y Tc, es ejecutar un comando de
## shell.
## Si un Tm se refiere a esta entrada (que tendra su propio parametro T )
## entonces "*" se expande a todos los sitios embudo lanzados por este.
## Este fichero es complicado -- vea newsfeeds.5!
##  Este es el sitio local.
##  El campo modelo da la lista de suscripcion para todos los otros
##  sitios.
##  Le puede interesar poner !control,!junk,!<local>.* alli. El subcampo
##  distrib limita los articulos entrantes.
##
##  Puede tener tambien ME/mal.site: para rehusar articulos de un sitio
##  particular (que verifique la entrada Path: ). Se pueden poner aqui
##  pseudo-sitios para REHUSAR ciertos tipos de mensajes cancelados.
##  (Vea la "Cancel FAQ" news.admin.net-abuse.misc):
##      cyberspam       Cancela Spam, post binarios
##      spewcancel      just munged articles from runaway gateways
##      bincancel       Cancela post binarios a grupos no binarios
##
##  Observe que rehusar articulos significa que no los ofrece a los sitios
##  a los que el servidor les suministra
## Por defecto todo a todos salvo para junk, control, cualquiera con "local"
## como el prefijo de grupo de noticias (i.e. verifica "localhost.loquesea") o
## grupos bajo foo. Los articulos posteados a cualquier grupo bajo
## alt.binaries.warez no se propagaran, incluso si son cross posted.
ME\
        :*,@alt.binaries.warez.*,!junk,!control*,!local*,!foo.*\
                /world,usa,na,gnu,bionet,pubnet,u3b,eunet,vmsnet,inet,ddn,k12\
::
## Crea los enlaces para los artss posted
crosspost:*:Tc,Ap,WR:/usr/lib/news/bin/crosspost -s -

     ##  News overview
     overview!:*:Tc,WO:/usr/lib/news/bin/overchan
     # Suministra todos los post origen moderados a un archivo.
     #source-archive!:!*,*sources*,!*wanted*,!*.d\
     #       :Tc,Wn:/usr/news/bin/archive -f -i /usr/spool/news.archive/INDEX

     # Suministra todos los post no internos a nearnet; los envia off-line via
     # nntpsend o send-nntp.
     #nic.near.net\
     #       :!junk/!foo\
     #       :Tf,Wnm:nic.near.net
     # Un enlace que suministra en tiempo real
     #uunet\
     #       :/!foo\
     #       :Tc,Wnm:/usr/news/bin/nntplink -i stdin news.uu.net
     # Capture all Foo, Incorporated, postings
     #capture\
     #       :*/foo\
     #       :Tp,H2:/usr/news/local/capture %s
     news.servidor-isp.es\
     :!junk,!control:Tf,Wnm:news.servidor-isp.es

     #foros.euskaltel.es/news.euskaltel.es\
     #:*,!control,!junk,!fido.*,!subnet.*/!local\
     #:Tf,Wnm:foros.euskaltel.es
     .

Vamos a ver si aclaramos algo esto. Por ejemplo la siguiente entrada:

     noticias.servidor-isp.es/news.servidor-isp.es\
     :*,!mios.*/!mios\
     :Tf,Wnm:

Para ser sincero parece complejo, pero vamos a aclararlo:

noticias.servidor-isp.es es el nombre del equipo suministrador. /news.servidor-isp.es es un alias

del anterior.

Esto es importante ya que INN usa la cabecera "Path" para asegurarse de que los artículos no se envían más de una vez al mismo sitio. De esta forma cualquier artículo que tenga noticias.servidor-isp.es o news.servidor-isp.es no se enviarán. Como son dominios registrados, estamos seguros de que ningún otro sitio inserta estas cabeceras.

La segunda línea indica qué artículos se enviarán a este sitio *,!mios.* quiere decir que se enviarán a news.servidor-isp.es todos los salvo los de aquellos grupos que empiezan por mios.. El segundo /!mios significa que los artículos con una cabecera Distribution de “mios” tampoco se enviarán a

nes.servidor-isp.es.

El último campo especifica exactamente el tipo de suministro. Tf quiere decir que es un fichero. Salvo casos muy especiales, que uno ya debe saber lo que hace, siempre pondremos esto. Wnm significa que el path relativo y el Message-ID del artículo se escribirán en este fichero. La n significa nombre de path

relativo, la m es el Message-ID del artículo.

Ahora en nuestro servidor, cada artículo destinado a news.servidor-isp.es tendrá su nombre de fichero

y su Message-ID en el fichero /var/spool/news/out.going/noticias.servidor-isp.es..
3.1.3 nnrp.access

En este fichero necesita especificar a qué equipos se les permite enviar y recibir noticias desde su equipo. Para que el sistema funcione puede poner permisos globales de lectura y envío a los distintos hosts añadiendo unas simples líneas como las siguientes (ojo esto no son los permisos de fichero, lea más abajo).

     ## hosts:permiso:username:password:modelos
     ## hosts: Direccion de red o nombre de hosts
     ## permiso:
     ##              R    El cliente puede leer articulos
     ##              P    El cliente puede enviar articulos
     ## username:clave este campo especifica que clave tiene que utilizar el usuario
     ## para enviar articulos.
     ## modelos: este campo indica a que grupos puede acceder el usuario
     ##
     ## Por defecto no permitiriamos el acceso a nadie.
     ## Puede depender de la instalacion
     ## *:: -no- : -no- :!*
     ##  host:perm:user:pass:groups
     ##  los hosts mired no tiene password, cualquiera puede leer.
     ## *.mired.es:Read Post:::*
     ##  Una determinada estacion no puede accedor a los grupos es.alt.
     ## pardillo.mired.es:RP:usuario:hdys:*,!es.alt.*
     # Permitir el acceso a localhost
     localhost:Read Post:::*
     # Permitimos el acceso a todo el mundo
     *:Read Post:::*

Para las pretensiones de este documento no necesitamos más, en consecuencia ponemos un comentario al resto de las líneas (usando un # al principio de línea). Otro detalle. Si el fichero contiene claves no debería tener permiso de lectura a otros.

3.1.4 hosts.nntp

En este fichero especificamos los lugares que nos suministran noticias, matizando, los sitios que suministran noticias a INN. El proceso que seguiremos será usar suck para transferir los artículos de los grupos selecconados hacia nuestro host. Una vez en nuestro host estos artículos se le envían a INN.

Como somos nosotros mismos los que proporcionamos las noticias, tenemos que especificar nuestro propio host como el sitio que nos suministra las noticias. Por ejemplo, si su host se llama news.mired.es, tendría que poner:

     ##  $Revision: 1.7 $
     ##  hosts.nntp - nombres y direcciones que nos suministran noticias
     ##  Formato
     ##      <host>:
     ##      <host>:<password>
     ##  <host> puede ser una IP o nombre.; no admite plantilla.
     ##  Cualquier host no incluido aqui no es gestionado por nnrpd.

     news.mired.es:
     localhost:

3.1.5 active

Este archivo contiene información sobre los grupos de noticias que gestiona este host. Por defecto viene con una lista de miles de posibles grupos de noticias. Suele estar ubicado en /var/lib/news.

Se organiza en líneas de cuatro campos.

• El primer campo es el nombre del grupo de noticias. Los grupos que comienzan por ”to.” (vea

     innd(8)).

• El segundo campo es el número de artículo más alto que se ha usado en el grupo.

• El tercero es el número de artículo bajo del grupo.

• El cuarto campo puede ser uno de los siguientes indicadores

           y        Se permiten los post locales
           n        Solo se permiten post remotos, no locales
           m        El grupo es moderado
           j        Los art se mantienen. se pasan.
           x        No se pueden postear articulos a este grupo
          =fict.bar Los articulos van localmente al grupo ``fict.bar''

Notas: si el número de artículo más bajo es mayor que el más alto, entonces no hay artículos en el grupo. Para facilitar el trabajo, los campos numéricos tienen una longitud fija, añadiéndosele ceros. Este fichero, aunque se puede editar, es mejor gestionarlo con ctlinnd.

Cuando instalamos el servidor necesitamos estas cuatro líneas. Más tarde veremos como añadir más grupos.

              general 0000000000 0000000001 y
              control 0000000001 0000000001 y
              junk 0000000000 0000000001 y
              to 0000000000 0000000001 y

Disponemos de un programa llamado makeactive que nos puede ser útil (man makeactive).

3.2 Verificaciones

Ahora debemos ejecutar un programa llamado inncheck que comprobará si la configuración es correcta.

Como puede que las distintas distribuciones usen cada una de ellas su propia ubicación, podemos poner

     type inncheck

o

     find /usr -name inncheck

Cuando haya hecho todo esto, puede iniciar su servidor INN (si no lo está ya) ejecutando el programa

     ./rc.news
que puede encontrar en /usr/lib/news/etc o en /usr/libexec/inn (o bien /etc/rc.d/news start, o bien
/etc/rc.d/innit.d/inn start, o bien ...)

En mi caso

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

Si todo va bien, inn esta en ejecución. Ahora tiene que añadir grupos de noticias. Los grupos de noticias se añaden con ctlinnd, que añadirá una entrada al fichero active. No intente añadir grupos manualmente.

Para un sólo grupo podemos hacer:

     ctlinnd newgroup es.comp.os.linux

y para crear grupos exclusivos de nuestra red local podemos hacer

     ctlinnd newgroup local.primero.linux

Tenga en cuenta que nuestro ISP no conoce el grupo local.primero.linux, por lo que no debiera de llegarle. Esto ya lo hicimos en /etc/news/newsfeeds con

     ME\
             :*,@alt.binaries.warez.*,!junk,!control*,!local*,!foo.*\
                     /world,usa,na,gnu,bionet,pubnet,u3b,eunet,vmsnet,inet,ddn,k12\
     ::

Si vamos a dar de alta muchos grupos en un sistema en funcionamiento conviene detener el servidor ctlinnd pause. Vea man ctlinnd, es de suma importancia.

También podemos eliminar grupos de nuestro servidor:

     ctlinnd rmgroup es.comp.os.mswindows

3.3 Estaciones cliente

Ahora ya está disponible inn como servidor de news. En el equipo servidor podemos acceder a él como localhost. En equipos clientes se pone nuestro equipo servidor como su servidor de noticias. Si no tenemos un servidor DNS ni archivos hosts adecuados en los clientes tendremos que poner directamente la dirección del equipo servidor como servidor de noticias en cada equipo cliente.

3.4 Instalar suck

Una vez descomprimidas las fuentes tenemos el directorio suck-3.9.2/ y nos vamos a él.

Cómo instalarlo

1. Ejecutamos el script ./configure

2. Modifique suck config.h - hay un montón de cosas configurables

  3. Compílelo: (make , make install)

4. Defina un sucknewsrc con los grupos que quiera cargar del servidor (Si ya está INN en funcionamiento use la opción -A -hl localhost y se generará el sucknewsrc). En comentarios se especifica algo más.

5. Edite el fichero sample/get.news.innxmit, ponga su servidor de noticias y asegúrese de que los path son correctos. La ejecución de suck para bajar artículos del servidor y el envío de los artículos locales se hacen mediante este script. Cópielo en en el path de ejecución para mayor comodidad y haga

             chown news.news get.news.innxmit
             chmod o-x get.news.innxmit
             chmod ug+x get.news.innxmit

6. make install sman para instalar la documentación en castellano.

3.4.1 get.news.innxmit

Este es el programa que va a gestionar nuestras transferencias con el ISP

     #!/bin/sh
     #
     #ANTES DE USAR - compruebe que todos los paths definidos son correctos
     REMOTE_HOST=news.servidor-isp.es
     LOCAL_HOST=localhost
     SPOOLDIR=/var/spool/news                # directorio base para artteados
     NEWSDIR=/usr/lib/news/                  # directorio base para binarios de news
     BASEDIR=/var/lib/news/                  # directorio base para scripts y ficheros de datos
     CTLINND=${NEWSDIR}/bin/ctlinnd          # ubicacion
     SHLOCK=${NEWSDIR}/bin/shlock            # location of binary
     TMPDIR=${BASEDIR}                       # ubicacion ficheros de suck
     MSGDIR=${BASEDIR}/Msgs                  # donde poner mensajes multifichero
     SITE=news.servidor-isp.es               # nombre del sitio que nos suministra

     OUTGOING=${SPOOLDIR}/out.going/${SITE}  # articulos para enviar
     OUTGOINGNEW=${OUTGOING}.new             # fichero de lista temporal

OUTGOINGFAIL=${OUTGOINGNEW}.fail        # fichero con indicaciones de fallos
SCRIPT=${BASEDIR}/put.news              # filtro para rpost
OUTFILE=/tmp/news/tmp$$                 # usado por rpost como articulo tras el filtrado
LOCKFILE=${BASEDIR}/getnews.lock        # fichero de bloqueo para prevenir instancias
NEWSGROUP=news                          # que grupo posee los ficheros de
                                        # out.going
TESTHOST=/usr/local/bin/testhost
RPOST=/usr/local/bin/rpost
SUCK=/usr/local/bin/suck
# Si ya estamos en ejecucion, abortar
trap 'rm -f ${LOCKFILE} ; echo "Abortando" ; exit 1' 1 2 3 15
${SHLOCK} -p $$ -f ${LOCKFILE}
if [ $? -ne 0 ]; then
        echo "Ya estoy en ejecucion, no puedo ejecutarme mas de una vez"
        exit
fi
# Esta el host local funcionando para que podamos enviar los mensajes que
# cargamos?
${TESTHOST} ${LOCAL_HOST} -s
LOCAL_RESULT=$?
# esta el host remoto listo para bajarnos mensajes?
${TESTHOST} ${REMOTE_HOST} -s
REMOTE_RESULT=$?
if [ ${REMOTE_RESULT} -eq 0 -a ${LOCAL_RESULT} -eq 0 ]; then
# bajar mensajes
${SUCK} ${REMOTE_HOST} -c -A -bp -hl ${LOCAL_HOST} -dt ${TMPDIR} -dm ${MSGDIR} -dd ${BASEDIR}
        SUCK_STATUS=$?
        if [ ${SUCK_STATUS} -eq 0 ]; then
                echo "Articulos Bajados"
       elif [ ${SUCK_STATUS} -eq 1 ]; then
                echo "No hay articulos para bajar"
       elif [ ${SUCK_STATUS} -eq 2 ]; then
                echo "Respuesta inesperada del servidor remoto a un comando"
       elif [ ${SUCK_STATUS} -eq 4 ]; then
                echo "No puedo hacer una autorizacion NNTP "
       elif [ ${SUCK_STATUS} -eq -1 ]; then
                echo "General failure"
        fi
# Ahora nos bajamos los mensajes
        if [ -s ${OUTGOING}  -o -s ${OUTGOINGNEW} ]; then

${TESTHOST} ${REMOTE_HOST} -s
if [ $? -ne 0 ]; then
        echo "El host remoto no respponde al post"
else
# esto es necesario por INND para que el fichero outgoing sea
# vaciado adecuadamente y tengamos uno en blanco para seguir trabajando
# cuando terminemos
        if [ ! -s ${OUTGOINGNEW} ]; then
                mv ${OUTGOING} ${OUTGOINGNEW}
                ${CTLINND} flush ${SITE}
        fi
# mensajes de outgoing para postear
${RPOST} ${REMOTE_HOST} -d -b ${OUTGOINGNEW} -p ${SPOOLDIR} -f \$\$o=${OUTFILE} ${SCRIPT} \$\$i ${OUTFILE}
ERRLEV=$?
if [ ${ERRLEV} -eq 0 ]; then
     echo "Articulos posteados remotamente"
     rm ${OUTFILE}
elif [ ${ERRLEV} -eq 1 ]; then
     echo "Error posteando un mensaje"
elif [ ${ERRLEV} -eq 2 ]; then
     echo "No puedo obtener autorizacion NNTP con el servidor remoto"
elif [ ${ERRLEV} -eq 3 ]; then
   echo "Respuesta inesperada del servidor a un comando en la autorizacion NNTP"
elif [ ${ERRLEV} -eq -1 ]; then
   echo "Error Fatal "
        fi

if [ -f ${OUTGOINGFAIL} ]; then
  mv ${OUTGOINGFAIL} ${OUTGOINGNEW}       # so we can re do it
  chown news.${NEWSGROUP} ${OUTGOINGNEW}
  chmod 664 ${OUTGOINGNEW}
        fi
fi
fi
echo "Ya puede colgar el modem"
fi
rm -f ${LOCKFILE}

3.4.2 Ejecutar suck

Simplemente ejecute como root

     su -c get.news.innxmit news

y primero bajará los grupos de noticias indicados en sucknewsrc y enviará los artículos posteados localmente.

4 Comentarios

4.1 sucknewsrc

Este fichero contiene información sobre qué grupos de noticias se deben transferir desde el servidor remoto de noticias + el mensaje más alto que se ha bajado, v.g.

     control 236
     junk 970
     test 1
     to 116
     es.comp.os.linux 16149
     es.comp.lenguajes.c 1235
     es.comp.lenguajes.c++ 1631
     es.comp.lenguajes.java 1819
     esp.comp.so.linux 1715

4.2 Caducidad de los mensajes:

Es importante estar seguro de que los artículos caducan, que expiran. De esto se encarga script news.daily. El fichero expire.ctl describe la duración de los artículos. Veamos algunos ejemplos de este fichero:

     /remember/:20

Esta línea le dice a expire que mantenga las entradas de los artículos en history al menos 20 días.

     *:A:1:7:21

Esta es la línea por defecto. Indica que por defecto, un articulo se tenga un mínimo de un día, la expiración es 7 días (se aplica si no hay cabecera Expires), y el máximo que es mantenido el artículo que son 21 días.

     local.*:A:1:14:28

Esta línea sólo se aplica a los grupos local. Por defecto los artículos permanecerán 14 días, 28 como máximo.

Tiene que tener en cuenta que las línea de expire.ctl deben tener las entradas mes primero y las más específicas al final.

En mi RedHat 5.0 tengo

     # ls -la /etc/cron.daily/
     total 12
     drwxr-xr-x   2 root     root         1024 Jun 12 17:41 .
     drwxr-xr-x  28 root     root         4096 Jul 26 12:21 ..

     -rwxr-xr-x   1 root     root           54 Oct 20  1997 inn-cron-expire
     -rwxr-xr--   1 root     root          732 Jun 12 17:40 internet
     -rwxr-xr-x   1 root     root           51 Oct 21  1997 logrotate

y

     cat /etc/cron.daily/inn-cron-expire
     #!/bin/sh
     su - news -c "/usr/lib/news/bin/news.daily"

Si por alguna circunstancia no queremos ejecutar news.daily mediante cron deberemos hacerlo a mano. Si no se ejecuta este programa se le notificará al administrador mediante mail.

4.3 Espacio en disco

Normalmente los artículos se guardan en /var/spool/news. Debe prever espacio de almacenamiento. Esto habrá que estudiarlo para cada caso en particular. Si va a bajar sólo unos pocos grupos entonces puede que no haya problemas. Si quiere dar acceso a una red local con muchos grupos de noticias puede que tenga que dedicar una partición a /var/spool

4.4 Otras cosas

Todo se ejecuta como usuario news salvo lanzar y detener el servicio con rc.news. En caso de que aparezca el mensaje :

     inndstart: inndstart cant bind Address already in use

puede que o bien innd esté ya en uso o que el puerto esté ocupado. En este último caso habrá que comentar la línea corresppondiente a nntp en /etc/inetd.conf y reiniciar inetd con la señal HUP ( kill

-HUP pid de inetd)

Hay muchas cosas que quedan por configurar, pero para esto habrá que recurrir a

     man suck
     man innd
     man inn.conf

etcétera.

4.5 Autor

El autor de este mini-como es Pedro Pablo Fábrega Martínez (pfabrega@arrakis.es) Este mini-como una recopilación de documentos disponibles en internet y de mi propia experiencia. También indicar que existen unas FAQ de innd:

ftp://ftp.blank.org/pub/innfaq/

y en Europa:

ftp://ftp.xlink.net/pub/news/docs/

Se admiten comentarios para mejorar este documento. Los insultos y groserías pueden redirigirse directamente a /dev/null

4.6 Derechos de Autor

Este documento está a disposición de cualquiera bajo los términos indicados en la licencia pública GNU. En resumen, puede copiar y usar este documento sin restricciones siempre que no se apropie intelectualmente de él o de parte e imponer restricciones adicionales a su distribución.

Hay partes que son de otros autores y estos son, en consecuencia, propietarios intelectuales de su obra. Yo me reservo la propiedad de mis aportaciones.

5 Anexo: El INSFLUG

El INSFLUG forma parte del grupo internacional Linux Documentation Project, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés.

En el INSFLUG se orienta preferentemente a la traducción de documentos breves, como los COMOs y PUFs (Preguntas de Uso Frecuente, las FAQs. :) ), etc.

Diríjase a la sede del INSFLUG para más información al respecto.

En la sede del INSFLUG encontrará siempre las últimas versiones de las traducciones: www.insflug.org. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica.

Se proporciona también una lista de los servidores réplica (mirror) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano.

Francisco José Montilla, pacopepe@insflug.org.