Capítulo 17
C-News
Uno de los paquetes de software más populares para las NetNews es C-News. Fue diseñado para servidores que llevan noticias sobre enlaces UUCP. Este capítulo discutirá los conceptos centrales de C-News, y las tareas de instalación básica y de mantenimiento.
C-News almacena sus ficheros de configuración en /usr/lib/news, y la mayoría de sus ficheros binarios en el directorio /usr/lib/news/bin. Los artículos se guardan en /var/spool/news. Ud. debe estar seguro de que todos los ficheros en estos directorios son propiedad del usuario news, grupo news. La mayoría de los problemas surgen de la inaccesibilidad de los ficheros por C-News. Ud. debe tener como regla general el ser usuario news usando su antes de tocar nada ahí. La única excepción es setnewsids, que se usa para establecer la identificación real del usuario de algunos programas de noticias. Este debe ser propiedad del root y debe tener el bit setuid activado.
A continuación, describimos todos los ficheros de configuración de C-News en detalle, y le mostraremos lo que tiene que hacer para mantener su servidor en funcionamiento.
17.1 Entrega de
Noticias
17.2 Instalación
17.3 El fichero sys
17.4 El fichero active
17.5 Procesado de artículos por lotes
17.6 Noticias caducadas
17.7 Ficheros diversos
17.8 Mensajes de Control
17.8.1 El
Mensaje cancel
17.8.2 newgroup y rmgroup
17.8.3 El Mensaje checkgroups
17.8.4 sendsys, versión, y senduuname
17.9 C-News en
un Entorno NFS
17.10 Herramientas y Tareas de Mantenimiento
Los artículos deben ser suministrados a C-News de varias maneras. Cuando un usuario local envía un artículo, el lector de noticias usualmente lo entrega al comando inews, el cual completa la información de cabecera. Las noticias del servidor remoto, tanto si es un único mensaje como un lote entero, son entregadas al comando rnews, el cual lo almacena en el directorio /var/spool/news/in.coming, de donde lo cogerá newsrun mas tarde. Sin embargo, con cualquiera de estas dos técnicas el artículo será finalmente entregado al comando relaynews.
Para cada artículo, el comando relaynews consulta primero si el artículo ha sido visto en el servidor local buscando el identificador del mensaje en el fichero history. Los artículos duplicados serán eliminados. Entonces, relaynews mira la línea de cabecera del Newsgroup: para averiguar si el servidor local solicita artículos de cualquiera de estos grupos. Si lo hace, y el grupo de noticias esta listado en el fichero active, relaynews intenta almacenar el artículo en el correspondiente directorio en el área de cola de noticias. Si no existe este directorio, se crea. El identificador del mensaje del artículo será entonces registrado en el fichero history. De otra manera, relaynews elimina el mensaje.
Si relaynews falla al almacenar un artículo entrante porque un grupo al que sido enviado no esta listado en su fichero activo, el artículo será movido al grupo junk.1 relaynews también comprobara artículos caducados o mal fechados y los rechazara. Los lotes entrantes que fallan por cualquier razón son movidos a /var/spool/news/in.coming/bad, y es registrado un mensaje de error.
Después de esto, el artículo será transmitido a todos los otros servidores que soliciten noticias de estos grupos, usando el transporte especificado para cada servidor determinado.
Para estar seguro de que no es enviado a un servidor que ya lo ha visto, cada servidor de destino es comparado con el campo Path: de cabecera del artículo, el cual contiene la lista de servidores hasta los que el artículo ha llegado, escritos en notación de camino UUCP con signos de admiración. Solo si el nombre del servidor de destino no aparece en esta lista el artículo le será enviado.
C-News es usado comúnmente para transmitir noticias entre servidores UUCP, aunque es también posible usarlo bajo un entorno NNTP. Para entregar noticias a un servidor remoto UUCP _tanto un solo artículo como lotes enteros_ uux es usado para ejecutar el comando rnews en el servidor remoto, y entregarle el artículo o lote por su entrada estándar.
Cuando el proceso por lotes esta permitido para un servidor dado, C-News no manda inmediatamente ningún artículo entrante, sino que anexiona su nombre de camino a un fichero, usualmente out.going/nodo/togo. Periódicamente, un programa por lotes es ejecutado desde la línea de una tabla de tareas planeadas, 2 3 lo que sitúa a los artículos en uno o más ficheros, opcionalmente los comprime, y los manda a rnews en el servidor remoto.
La figura 17.1 muestra las noticias fluyendo a través de relaynews. Los artículos deben ser transmitidos al servidor local (denotado por ME), a algún servidor llamado ponderosa vía correo electrónico, y a un servidor llamado moria, para el cual el proceso por lotes esta permitido.
_____________________________________________
1 Debe haber una diferencia entre los grupos que existen en su servidor, y aquellos que su servidor está preparado para recibir. Por ejemplo, la lista de subscripción debe especificar comp.all, lo que significa todos los grupos de noticias bajo la jerarquía comp, pero en su servidor, solo un número de grupos comp son listados en activo. Los artículos enviados a esos grupos serán movidos a junk.
2 N. del T.: crontab
3 Note que esto debería ser la tabla de tareas planeadas del usuario noticias, para no destrozar los permisos de los ficheros.
Figura 17.1: Flujo de noticias mediante relaynews.
Para instalar C-News, descomprima con tar los ficheros en el lugar apropiado, si no lo ha hecho todavía, y edite los ficheros de configuración listados abajo. Todos están situados en /usr/lib/news. Sus formatos serán descritos en las siguientes secciones.
sys
Probablemente Ud. tendrá que modificar la línea ME que describe su sistema, aunque usar all/all es también una apuesta segura. Ud. también tendrá que añadir una línea por cada servidor al que quiera mandar noticias.
Si Ud. es un servidor hoja, solo necesita una línea que mande todos los artículos generados localmente a su fuente. Suponga que su fuente es moria, entonces su fichero sys debería parecerse a:
ME:all/all::
moria/moria.orcnet.org:all/all,!local:f:
organization
El nombre de su organización. Por ejemplo, "Cervecera Virtual, Inc.". En su máquina de casa, introduzca "sitio privado", o cualquier cosa que desee. La mayoría de la gente no dirá que su servidor está configurado correctamente hasta que no haya configurado este fichero.
newsgroups
mailname
El nombre de su servidor de correo, por ejemplo vbrew.com.
whoami
El nombre de su servidor para propósitos de noticias. Con frecuencia, se usa, por ejemplo, el nombre del servidor UUCP. vbrew.
explist
Probablemente Ud. debería editar este fichero para reflejar sus tiempos de expiración preferidos para algún grupo de noticias en especial. El espacio de disco debe jugar un importante papel en esto.
Para crear una jerarquía inicial de grupos de noticias, obtenga un fichero active y un fichero newsgroups del servidor que le provee, e instálelos en /usr/lib/news, asegurándose de que son propiedad del usuarios news y tienen un modo de protección 664. Elimine todos los grupos to.* del fichero active, y añada to.mi servidor y to.sitio proveedor, al igual que junk y control. Los grupos to.* se usan normalmente para intercambiar mensajes ihave/sendme 4, pero Ud. debería crearlos tanto si planea usar ihave/sendme como sino. Después, sustituya todos los números de los artículos en el segundo y tercer campo de active usando el siguiente comando:
# cp active active.old
# sed 's/ [0-9]* [0-9]* / 0000000000 00001 /' active.old > active
# rm active.old
El segundo comando es una invocación de sed(1), uno de mis comandos UNIX favoritos. Esta invocación sustituye dos cadenas de dígitos por una cadena de ceros y la cadena 000001, respectivamente.
Finalmente, cree el directorio de cola de noticias y los directorios usados para noticias entrantes y salientes:
# cd /var/spool
# mkdir news news/in.coming news/out.going
# chown -R news.news news
# chmod -R 755 news
Si Ud. esta usando una versión de C-News mas reciente, deberá crear el directorio out.master en el directorio de cola de noticias.
Si está usando lectores de noticias de una distribución diferente de la de C-News, puede descubrir que algunos de ellos esperan encontrar la cola de noticias en /usr/spool/news en vez de en /var/spool/news. Si su lector de noticias no parece encontrar ningún artículo, cree un enlace simbólico de /usr/spool/news a /var/spool/news.
_____________________________________________
4 N. del T.: Tengo/Envía
Ahora, Ud. esta preparado para recibir noticias. Note que no tiene que crear ningún otro directorio mas que los vistos arriba, porque cada vez que C-News recibe un artículo de un grupo para el que todavía no hay directorio de cola, lo crea.
En particular, esto le ocurre a todos los grupos a los que se ha enviado un artículo cruzado. Así que, después de un cierto tiempo, encontrará su cola de noticias llena con directorios para grupos de noticias a los que Ud. nunca se ha subscrito, como alt.lang.teco.
Puede evitar esto tanto borrando todos los grupos no deseados de active, como ejecutando regularmente un script del shell que borre todos los directorios vacíos de /var/spool/news (excepto out.going y in.coming, por supuesto).
C-News necesita un usuario a quien mandar los mensajes de error y los informes de estado. Por defecto, este es usenet. Si usa el valor por defecto, tiene que establecer un alias para él, el cual remite todo su correo a una o más personas responsables. (Los capítulos 14 y 15 explican como hacerlo para smail y sendmail ). También puede modificar este comportamiento estableciendo la variable de entorno NEWSMASTER con el nombre apropiado. Debe hacerlo en el fichero de la tabla de tareas planeadas de noticias, así como cada vez que invoque manualmente una herramienta administrativa, por lo que instalar un alias es probablemente más fácil.
Aprovechando que esta modificando /etc/passwd, asegúrese de que cada usuario tiene su nombre real en el campo pw_gecos del fichero de contraseña (éste es el cuarto campo). Es una cuestión de normas de etiqueta de Usenet el que el nombre real del remitente aparezca en el campo From: del artículo. Por supuesto, Ud. querrá hacerlo de cualquier manera cuando use el correo.
El fichero sys, situado en /usr/lib/news, controla que jerarquías recibe y remite a otros servidores. Aunque hay herramientas de mantenimiento llamadas addfeed y delfeed, creo que es mejor mantener este fichero a mano.
El fichero sys contiene entradas para cada servidor al que Ud. reenvía noticias además de descripciones de los grupos de noticias que Ud. acepta. Una entrada se parece a:
sitio [/exclusiones ]:listagrupos [/listadist ] [:flags [:cmds ]]
Las entradas pueden continuar a lo largo de varias líneas usando una barra invertida (\). Una almohadilla (#) denota un comentario.
sitio
Este es el nombre de los servidores a los que se aplica la entrada. Usualmente se elige el nombre del servidor UUCP para esto. Tiene que haber también una entrada para su servidor en el fichero sys, sino no recibirá ningún artículo.
El nombre especial de servidor ME indica su servidor. La entrada ME define todos los grupos de noticias que Ud. esta preparado para almacenar localmente. Los artículos que no concuerden con la línea ME irán al grupo junk.
Puesto que C-News compara el servidor con los nombres de los servidores en la cabecera del campo Path:, hay que estar seguro de que realmente coinciden. Algunos servidores usan su nombre de dominio completamente cualificado en este campo, o un alias como news.sitio.dominio . Para prevenir que cualquier artículo regrese a estos servidores, tiene que añadir esto a la lista de exclusión, separada por comas.
Por ejemplo, para la entrada aplicada al servidor moria, el campo del servidor contendría moria/moria.orcnet.org.
listagrupos
Esta es una lista de suscripción, separada por comas, de grupos y jerarquías para ese servidor en particular. Una jerarquía debe especificarse dando el prefijo de la jerarquía (como comp.os para todos los grupos cuyos nombres empiezan con este prefijo), seguido opcionalmente por la palabra clave all (por ejemplo, comp.os.all).
Para excluir una jerarquía o grupo de reemisión, debe ser precedido con una exclamación. Si un grupo de noticias encaja con mas de una definición de la lista, se aplica el emparejamiento mas larga. Por ejemplo, si la listagrupos contiene
!comp,comp.os.linux,comp.folklore.computers
ningún grupo de la jerarquía comp excepto comp.folklore.computers y todos los grupos bajo comp.os.linux serán administrados a ese servidor.
Si el servidor requiere que se le reenvíen todas las noticias que Ud. recibe, introduzca all como listagrupos .
listadist
está separado de listagrupos por un barra inclinada, y contiene una lista de distribuciones para ser reenviada. Ud. puede de nuevo excluir ciertas distribuciones precediéndolas con una exclamación. Todas las distribuciones se denotan con all. El omitir listadist implica una lista de all.
Por ejemplo, puede usar una lista de distribución de all,!local para impedir que las noticias de uso solo local sean enviadas a servidores remotos.
Usualmente hay al menos dos distribuciones: world, que es a menudo la distribución por defecto usada cuando el usuario no especifica nada, y local. Puede haber otras distribuciones que se empleen para una cierta región, estado, país, etc. Finalmente, hay dos distribuciones usadas solamente por C-News; éstas son sendme y ihave, y son usadas para el protocolo ihave/sendme.
El uso de distribuciones es materia de debate. Para unos, algunos lectores de noticias crean falsas distribuciones simplemente usando la jerarquía de alto nivel, por ejemplo comp cuando se envía un mensaje a comp.os.linux.
Las distribuciones que se emplean en regiones son a menudo también cuestionables, porque las noticias deben viajar fuera de su región cuando son enviadas a través de Internet.5 Sin embargo, las distribuciones empleadas para una organización, son muy significativas, por ejemplo para evitar la salida de información confidencial de la red de la compañía. No obstante, este propósito generalmente se consigue mejor creando un grupo de noticias o una jerarquía separados.
flags
este campo describe ciertos parámetros para la fuente. Puede estar vacío, o ser una combinación de lo siguiente:
F Este flag permite el proceso por lotes.
f Este es casi idéntico al flag F, pero permite a C-News calcular el tamaño de los lotes salientes con mas precisión.
I Este flag hace que C-News produzca una lista de artículos apta para ser usada por el protocolo ihave/sendme. Hay que hacer modificaciones adicionales al fichero sys y al fichero batchparms para habilitar ihave/sendme.
n Este flag crea ficheros por lotes para clientes de transferencia NNTP activa como nntpxmit (ver capítulo 18). Los ficheros por lotes contienen el nombre de fichero del artículo junto con su identificador de mensaje.
L Este flag indica a C-News que solo transmita los mensajes generados en su servidor. Este flag puede ir ser seguido por un número decimal n , el cual hace que C-News solo transfiera artículos generados a n saltos desde su servidor. C-News determina el número de saltos a partir del campo Path:.
u Este flag indica a C-News que procese por lotes solo los artículos de los grupos no moderados.
m Este flag indica a C-News que procese por lotes solo los artículos de los grupos moderados.
Debe usar a lo sumo uno de F, f, I, o n.
_____________________________________________
5 No es infrecuente para un artículo enviado en, digamos Hamburgo, ir a Frankfurt vía reston.ans.net en Holanda, o inclusive vía algún servidor en E.E.U.U.
cmds
Este campo contiene un comando a ser ejecutado para cada artículo, a menos que el proceso por lotes este habilitado. El artículo será suministrado al comando a través de la entrada estándar. Esto solo debería usarse para fuentes muy pequeñas; de otra manera la carga en ambos sistemas sería demasiado alta.
El comando por defecto es
uux - -r -z system !rnews
lo que invoca rnews en el sistema remoto, administrando el artículo mediante la entrada estándar.
El camino de búsqueda por defecto para los comandos indicados en este campo es /bin:/usr/bin:/usr/lib/news/bin/batch. El último directorio contiene un cierto número de guiones del interprete de comandos cuyos nombres empiezan por vía; se describen brevemente mas adelante en este mismo capítulo.
Si el proceso por lotes esta habilitado usando bien los flags F o f, I o n, C-News espera encontrar un nombre de fichero en este campo en vez de un comando. Si el nombre de fichero no empieza con una barra inclinada (/), se supone que es relativo a /var/spool/news/out.going. Si el campo esta vacío, su valor por defecto es system /togo.
Cuando configure C-News, probablemente tendrá que escribir su propio fichero sys. Para ayudarle con ello, incluimos abajo un fichero de ejemplo para vbrew.com, del cual puede copiar lo que necesite.
# Tomamos lo que nos dan.
ME:all/all::
# Enviamos todo lo que recibimos a moria, excepto los artículos locales y
# relacionados con cerveceras. Usamos proceso por lotes.
moria/moria.orcnet.org:all,!to,to.moria/all,!local,!brewery:f:
# Mandamos comp.risks a jack@ponderosa.uucp
ponderosa:comp.risks/all::rmail jack@ponderosa.uucp
# swim obtiene solo algunos grupos
swim/swim.twobirds.com:comp.os.linux,rec.humor.oracle/all,!local:f:
# Guardar los artículos de mapas de correo para procesarlos luego
usenet-maps:comp.mail.maps/all:F:/var/spool/uumaps/work/batch
El fichero active esta situado en /usr/lib/news y lista todos los grupos conocidos en su servidor, y los artículos disponibles actualmente. Rara vez tendrá que tocarlo, pero, sin embargo, lo explicamos por completitud. Las entradas tiene la siguiente forma:
gruponoticias alto bajo perm
gruponoticias es, por supuesto, el nombre del grupo. bajo y alto son los números más bajo y más alto de los artículos actualmente disponibles. Si no hay ninguno disponible en ese momento, bajo es igual a alto +1.
Al menos, eso es lo que el campo bajo pretende hacer. Sin embargo, por razones de eficiencia, C-News no actualiza este campo. Esto no sería una gran perdida si no hubiera algunos lectores de noticias que dependen de él. Por ejemplo, trn comprueba este campo para ver si puede purgar cualquier artículo de su base de datos de hilos. Para actualizar el campo bajo, tiene por lo tanto que ejecutar regularmente el comando updatemin (o, en una versión más antigua de C-News, la macro upact).
perm es un parámetro que detalla el tipo de acceso que los usuarios tienen concedido en el grupo. Toma uno de los siguientes valores:
y Se permite a los usuarios enviar artículos a este grupo.
n No está permitido a los usuarios enviar artículos a este grupo. Sin embargo, el grupo puede todavía ser leído.
x Este grupo ha sido deshabilitado localmente. Esto ocurre algunas veces cuando los administradores de noticias (o sus superiores) se ofenden por artículos enviados a ciertos grupos.
Los artículos recibidos para estos grupos no son almacenados localmente aunque son reenviados a los servidores que los piden.
m Esto denota un grupo moderado. Cuando un usuario intenta enviar un artículo a este grupo, un lector de noticias inteligente lo notificará al usuario, y en su lugar enviara el artículo al moderador. La dirección del moderador se toma del fichero moderators de /usr/lib/news.
=real-group
Esto marca a newsgroup como un alias local para otro grupo, a saber real-group . Todos los artículos enviados a gruponoticias serán redirigidos a él.
En C-News, generalmente no tendrá que acceder directamente a este fichero. Los grupos deben ser añadidos o borrados localmente usando addgroup y delgroup (ver abajo en la sección Herramientas y Tareas de Mantenimiento). Cuando se añaden o borran grupos para la Usenet entera, esto se hace habitualmente por medio de un mensaje de control newgroup o rmgroup, respectivamente. ¡Nunca envíe Ud. un mensaje de este tipo!
Para saber como crear un grupo de noticias, lea los mensajes enviados mensualmente a news.announce.newusers.
Un fichero estrechamente relacionado con active es active.times. Cada vez que se crea un grupo, C-News registra un mensaje en este fichero, conteniendo el nombre del grupo creado, la fecha de creación, si fue hecho por un mensaje de control newgroup o localmente, y quien lo hizo. Esto es para facilitar la vida a los lectores de noticias, quienes pueden notificar al usuario los grupos recién creados. También lo usa el comando NEWGROUPS de NNTP.
17.5 Procesado de artículos por lotes
Los lotes de noticias siguen un formato particular, el cual es el mismo para Bnews, C-News, e INN. Cada artículo esta precedido por una línea como esta:
#! rnews cuenta
donde cuenta es el número de bytes en el artículo. Cuando se usa la compresión de lotes, el fichero resultante es comprimido como un todo, y precedido por otra línea, que indica el mensaje a ser usado por la descompresión. La herramienta de compresión estándar es compress, la cual se indica con:
#! cunbatch
Algunas veces, cuando hay que enviar los lotes usando un software de correo que elimina el octavo bit de todos los datos, se puede proteger un lote usando lo que se llama codificación C7; estos lotes serán marcados por c7unbatch.
Cuando se le administra un lote a rnews en el servidor remoto, comprueba esas marcas y procesa el lote apropiadamente. Algunos servidores también usan otras herramientas de compresión, como gzip, y en su lugar preceden sus ficheros comprimidos con zunbatch. C-News no reconoce cabeceras no estándares como esas; Ud. tiene que modificar el código fuente para soportarlas.
En C-News, el proceso por lotes de archivos lo realiza /usr/lib/news/bin/batch/sendbatches, el cual recoge la lista de artículos del fichero site /togo, y los pone en varios lotes de noticias. Debería ejecutarse una vez cada hora, o incluso mas a menudo, dependiendo del volumen del tráfico.
Su operación es controlada por el fichero batchparms situado en /usr/lib/news. Este fichero describe el máximo tamaño de lote permitido para cada servidor, el tipo de proceso por lotes y opcionalmente el programa de compresión a ser usado, y método de transporte para entregarlo al servidor remoto. Ud. puede especificar los parámetros del proceso por lotes para cada servidor, además de un conjunto de parámetros por defecto para servidores no mencionados explícitamente.
Para llevar a cabo el proceso por lotes para un servidor especifico, se invoca como:
# su news -c "/usr/lib/news/bin /batch/sendbatches site "
Cuando es invocado sin argumentos, sendbatches maneja todas las colas de lotes. La interpretación de "todas" depende de la presencia de una entrada por defecto en batchparms.
Si se encuentra una, se comprueban todos los directorios de /var/spool/news/out.going, si no, recorre todas las entradas de batchparms. Note que sendbatches, cuando explora el directorio out.going, toma solo aquellos directorios que no contienen ningún punto o arroba (@) como nombre de servidor.
Cuando instale C-News, seguramente hallará un fichero batchparms en su distribución que contenga una entrada por defecto razonable, así que es muy probable que no tenga que tocar el fichero. No obstante, describimos su formato por si acaso. Cada línea consta de seis campos, separados por espacios o tabuladores:
site size max batcher muncher transport
El significado de estos campos es el siguiente:
site
es el nombre del servidor al que se aplica la entrada. El fichero togo para este servidor debe residir en out.going/togo bajo la cola de las noticias. El nombre de servidor /default/ denota la entrada por defecto.
size
es el tamaño máximo de los lotes creados (antes de la compresión). Para aquellos artículos que son mayores que este valor C-News hace una excepción y los pone en un lote ellos solos.
max
es el máximo número de lotes creados y programados para la transferencia antes de que el proceso por lotes se pare para este servidor particular. Esto es útil en el caso de que el servidor remoto no este disponible durante un largo periodo de tiempo, porque previene que C-News ateste sus directorios de cola UUCP con millones de lotes de noticias.
C-News determina el número de lotes que hay en cola usando el script queulen de /usr/lib/news/bin. La versión newspak de Vince Skahan debería contener un guión para UUCPs compatibles con BNU. Si usa una clase diferente de directorios de cola, por ejemplo UUCP de Taylor, tendría que escribir el suyo propio.6
El campo batcher contiene el comando usado para producir un lote a partir de la lista de artículos del fichero togo. Para las fuentes habituales, este es generalmente batcher.
Puede que se proporcionen otros empaquetadores para otros propósitos. Por ejemplo, el protocolo ihave/sendme requiere que la lista de artículos sea convertida en mensajes de control ihave/sendme, los cuales se envían al grupo to.site. Los comandos encargados de esto son batchih y batchsm.
El campo muncher especifica el comando a usar para la compresión de los lotes. Generalmente, se usa compcun, que es un guión que produce un lote comprimido.7 Alternativamente, puede proporcionar un muncher que use gzip, digamos gzipcun (para ser claros: tiene que escribirlo Ud. mismo). Debe asegurarse de que uncompress en el servidor remoto está parcheado para reconocer ficheros comprimidos con gzip.
Si el servidor remoto no tiene un comando uncompress, debe especificar nocomp lo que implica el no hacer ninguna compresión.
El último campo, transport , describe el transporte a utilizar. Hay disponibles varios comandos estándar para diferentes transportes cuyos nombres empiezan por vía. sendbatches les pasa el nombre del servidor de destino en la línea de comandos. Si la entrada batchparms no era /default/, el nombre del servidor se obtiene del campo site suprimiendo cualquier cosa después e incluyendo el primer punto o barra inclinada. Si la entrada era /default/, se usan los nombres de directorio de out.going.
_____________________________________________
6 Si no le importa el número de ficheros de cola (porque Ud. es la única persona usando el ordenador, y no escribe artículos de megabytes), puede reemplazar los contenidos del guión por una simple sentencia exit 0.
7 Tal como se distribuye con C-News, compcun usa compress con la opción 12 bit, ya que este es el mínimo común denominador de la mayoría de los servidores. Ud. puede hacer una copia de él, llamémosla compcun16, y usar la compresión 16 bit. De todas formas, la mejora no es muy impresionante.
Hay dos comandos que usan uux para ejecutar rnews en el servidor remoto; viauux y viauuxz. El último establece el flag -z para (las versiones mas antiguas de) uux para evitar que devuelva mensajes de éxito por cada artículo entregado. Otro comando, viamail, manda lotes de artículos al usuario rnews en el sistema remoto vía correo. Por supuesto, esto requiere que el sistema remoto administre de alguna manera todo el correo para rnews a su sistema local de noticias. Para obtener una lista completa de estos transportes, refiérase a la pagina del manual newsbatch(8).
Todos los comandos de los tres últimos campos deben estar situados, bien en out.going/ site o bien en /usr/lib/news/bin/batch. La mayoría de ellos son scripts, de tal forma que Ud. pueda confeccionar fácilmente nuevas herramientas para sus necesidades personales. Son invocados con tuberías. Se administra la lista de artículos al batcher a través de la entrada estándar, quien produce el lote en su salida estándar. Esta a su vez se entuba en el muncher , y así sucesivamente.
Abajo se ofrece un fichero de ejemplo.
# fichero batchparms para la cervecera
# site | size | max | batcher | muncher | transport
#-------------+--------+-------+---------+-----------+-----------
/default/ 100000 22 batcher compcun viauux
swim 10000 10 batcher nocomp viauux
En Bnews, la caducidad de las noticias solía realizarse por medio de un programa llamado expire, el cual recibía como argumento una lista de grupos de noticias, junto con una especificación del tiempo después del cual los artículos caducaban. Para hacer que diferentes jerarquías caducaran en momentos distintos, Ud. tenia que escribir un script que invocara a expire para cada uno de ellos de forma individual. C-News ofrece una solución más conveniente a esto: en un fichero llamado explist, Ud. puede especificar los grupos de noticias y los intervalos de caducidad. Una vez al día se suele ejecutar desde cron un comando llamado doexpire, que procesa todos los grupos de acuerdo a esta lista.
Ocasionalmente, Ud. puede querer mantener artículos de ciertos grupos incluso después de que hayan caducado; por ejemplo, podría querer mantener los programas enviados a comp.sources.unix. A esto se le llama archivado. explist le permite marcar grupos para el archivado.
Una entrada en explist se parece a esto:
grouplist perm times archive
grouplist es una lista separada por comas de los grupos de noticias a los que aplica la entrada. Se pueden especificar jerarquías completas indicando el prefijo del nombre del grupo, añadiendo opcionalmente all. Por ejemplo, para una indicar una entrada que se aplique a todos los grupos de comp.os, puede introducir en grouplist o bien comp.os o bien comp.os.all.
Cuando se van a caducar las noticias de un grupo, se contrasta el nombre del grupo con todas las entradas de explist en el orden dado. La entrada empleada es la primera que concuerda. Por ejemplo, para eliminar la mayoría de comp después de cuatro días, excepto comp.os.linux.announce que quiere mantener durante una semana, debe simplemente tener una entrada para lo último, que especifique un periodo de caducidad de siete días, seguida por una para comp que especifique cuatro días.
El campo perm detalla si la entrada se aplica a grupos moderados, no moderados, o a cualquier grupo. Debe tomar los valores m, u, o x, lo que designa moderados, no moderados, o cualquier tipo.
El tercer campo, times, contiene usualmente un solo número. Este es el número de días después de los cuales caducaran los artículos si no se les ha asignado una fecha de caducidad artificial en el campo Expires: de la cabecera del artículo. Dése cuenta que éste es el número de días contando desde la llegada a su servidor, no desde la fecha de emisión.
Sin embargo, el campo times puede ser mas complejo que eso. Puede ser una combinación de hasta tres números, separados unos de otros por un guión. El primero designa el número de días que tienen que pasar antes de que el artículo sea considerado candidato para estar caducado. Rara vez es útil usar otro valor que no sea cero. El segundo campo es el valor mencionado arriba, es decir, el número por defecto de días después de los cuales caducará. El tercero es el número de días después de los cuales un artículo caducará incondicionalmente, sin reparar en si tiene un campo Expires: o no. Si solo se indica el número de en medio, los otros dos toman valores por defecto. Estos pueden especificarse usando la entrada especial /bounds/, que se describe mas abajo.
El cuarto campo, archive, designa si el grupo de noticias tiene que archivarse, y donde. Si no se desea archivarlo, debería usar un guión. De lo contrario, use un nombre de camino absoluto (apuntando a un directorio), o una arroba (@). La arroba designa el directorio de archivo por defecto, cuyo valor debe darse a doexpire usando el flag -a en la línea de comandos. El directorio de archivo debe ser propiedad de news. Cuando doexpire archiva un artículo de, digamos, comp.sources.unix, lo almacena en el directorio comp/sources/unix bajo el directorio de archivo, creándolo si no existe. Sin embargo, no se creará el propio directorio de archivo.
Hay dos entradas especiales en su fichero explist de las que depende doexpire. En vez de una lista de grupos de noticias, tienen las palabras clave /bounds/ y /expired/. La entrada /bounds/ contiene los valores por defecto para los tres valores del campo times descrito arriba.
El campo /expired/ determina cuanto tiempo guardara C-News las líneas del fichero history. Esto es necesario porque C-News no borrará una línea del fichero de historial una vez que el (los) artículo(s) correspondiente(s) hayan caducado, pero lo guardara por si acaso llega un duplicado tras esa fecha. Si recibe las noticias de solo un servidor, puede mantener este valor pequeño. De lo contrario, un par de semanas es un valor aconsejable para las redes UUCP, dependiendo de los retrasos que Ud. experimente con los artículos de esos servidores.
A continuación se reproduce un fichero explist de ejemplo con unos intervalos de expiración bastante ajustador.
# Mantiene las líneas de historial durante dos semanas. Nadie consigue mas
# de tres meses
/expired/ x 14 -
/bounds/ x 0-1-90 -
# Los grupos que queremos mantener mas tiempo que el resto
comp.os.linux.announce m 10 -
comp.os.linux x 5 -
alt.folklore.computers u 10 -
rec.humor.oracle m 10 -
soc.feminism m 10 -
# Archiva los grupos *.sources
comp.sources,alt.sources x 5 @
# valores por defecto para los grupos de tecnologia
comp,sci x 7 -
# bastante para un fin de semana largo
misc,talk x 4 -
# desecha rapidamente lo inservible
junk x 1 -
# los mensajes de control también son de escaso interes
control x 1 -
# para el resto de ellos la entrada comodin
all x 2 -
Hay un cierto número de problemas potenciales con la caducidad en C-News. Uno es que su lector de noticias puede depender del tercer campo del fichero active, el cual contiene el número del artículo más bajo disponible. Cuando C-News caduca los artículos no actualiza este campo. Si Ud. necesita (o quiere) que este campo represente la situación real, necesita ejecutar un programa llamado updatemin después de cada ejecución de doexpire.8
Segundo, C-News no caduca los artículos examinando el directorio de los grupos de noticias, sino que simplemente comprueba en el fichero history si el artículo debe caducar.9 Si su fichero de historia consigue de alguna manera estar fuera de sincronismo, sus artículos pueden permanecer en su disco duro para siempre, porque C-News los ha olvidado literalmente.10 Puede reparar esto usando el script addmissing de /usr/lib/news/bin/maint, el cual añadirá los artículos perdidos al fichero history, o mkhistory, el cual reconstruye el fichero desde cero. No olvide ser news antes de invocarlo, o de lo contrario terminará con un fichero history imposible de leer por C-News.
Hay algunos ficheros que controlan el comportamiento de C-News, pero no son esenciales para su funcionamiento. Todos ellos residen en /usr/lib/news. Los describiremos brevemente.
newsgroups
Se trata de un fichero que acompaña al fichero active y contiene una lista de nombres de grupos de noticias, junto con una descripción, en una sola línea, de su tema principal. Este fichero se actualiza automáticamente cuando C-News recibe un mensaje de control checknews (ver sección 17.8).
localgroups
Si Ud. tiene grupos locales de los que no quiere que C-News se queje cada vez que Ud. recibe un mensaje checknews, ponga sus nombres y una descripción en este fichero, justo como aparecerían en el fichero newsgroups.
mailpaths
Este fichero contiene la dirección del moderador para cada grupo moderado.
Cada línea contiene el nombre del grupo, seguido por la dirección de correo electrónico del moderador (separada por un tabulador).
_____________________________________________
8 En versiones anteriores de C-News, esto era hecho por un script llamado upact.
9 La fecha de llegada del artículo se almacena en el campo de en medio de la línea de historia, dado en segundos desde el 1 de Enero de 1970.
10 No se porqué ocurre esto, a mi me lo hace de vez en cuando.
Hay dos entradas especiales que son proporcionadas por defecto. Estas son backbone e internet. Ambas proporcionan _en notación UUCP de signos de admiración_ el camino al servidor principal mas cercano y el servidor que reconoce direcciones del estilo RFC 822 (user@host). Las entradas por defecto son
internet backbone
Ud. no tendrá que cambiar la entrada internet si no tiene instalado smail o sendmail, porque entienden direccionamiento RFC 822.
La entrada backbone se usa cada vez que un usuario envía un mensaje a un grupo moderado cuyo moderador no este listado explícitamente. Si el nombre del grupo de noticias es alt.sewer, y la entrada backbone contiene path!%s, C-News enviara por correo el artículo a path!alt-sewer, esperando que la máquina principal pueda reenviar el artículo. Para averiguar que camino usar, pregunte al administrador de noticias del servidor que le pasa las mismas. Cómo último recurso, puede usar también uunet.uu.net!%s.
distributions
Este fichero no es realmente un fichero C-News, pero es usado por algunos lectores de noticias y nntpd. Contiene la lista de distribuciones reconocida por su servidor, y una descripción de su efecto (deseado). Por ejemplo, la Cervecera Virtual tiene el siguiente fichero:
world cualquier lugar del mundo
local solo local a este servidor
nl solo Holanda
mugnet solo MUGNET
fr solo Francia
de solo Alemania
brewery solo Cerveceria Virtual
log
Este fichero contiene un registro de todas las actividades de C-News. Se recorta regularmente ejecutando newsdaily; las copias de ficheros de los registro antiguos se guardan en log.o, log.oo, etc.
errlog
Este es un registro de todos los mensajes de error creados por C-News. Estos no incluyen artículos desechados debido a grupos incorrectos, etc. De no estar vacío en el momento de ejecutar newsdaily, será enviado por correo al administrador de las noticias (usenet por defecto) automáticamente. newsdaily se encarga de limpiar errlog. Las copias antiguas se guardan en errlog.o y compañía.
batchlog
Este fichero registra todas las ejecuciones de sendbatches. Normalmente no tiene interés su contenido. También es atendido por newsdaily.
watchtime
Este es un fichero vacío que se crea cada vez que se ejecuta newswatch.
El protocolo de noticias Usenet reconoce artículos de una categoría especial, los cuales provocan ciertas respuestas o acciones del sistema. Estos son los llamados mensajes de control. Se reconocen por la presencia de un campo Control: en la cabecera del artículo, el cual contiene el nombre de la operación de control a realizar. Existen varios tipos de ellas, todas ellas manejadas por guiones del interprete de comandos situados en /usr/lib/news/ctl.
La mayoría de éstos realizaran su acción automáticamente en el momento en que C-News procese el artículo, sin notificar al administrador de noticias. Por defecto, solo los mensajes checkgroups serán entregados al administrador de noticias,11 pero Ud. puede cambiar esto editando los scripts.
El mensaje mas conocido es cancel, con el cual un usuario puede cancelar un artículo enviado por él en otro momento. Esto borra el artículo de los directorios de cola, si existe. El mensaje cancel se reenvía a todos los servidores que reciben noticias de los grupos afectados, sin reparar en si el artículo ha sido visto ya o no. Esto es para tener el cuenta la posibilidad de que el artículo original se haya retrasado sobre el mensaje de cancelación. Algunos sistemas de noticias permiten a los usuarios cancelar los mensajes de otras personas. Por supuesto esto es algo que no se debería hacer.
Dos mensajes que se ocupan de la creación y borrado de grupos de noticias son los mensajes newgroup y rmgroup. Los grupos de noticias bajo las jerarquías "usuales" solo puede ser creados después de que se haya mantenido una discusión y voto entre los lectores de Usenet. Las reglas aplicadas a la jerarquía alt permiten algo similar a la anarquía. Para mas información, ver los mensajes regulares de news.announce.newusers y news.announce.newgroups. Nunca mande un mensaje newgroup o rmgroup usted mismo a menos que sepa con seguridad que tiene permiso para hacerlo.
_____________________________________________
11 Hay una errata divertida en el RFC 1036 (pag.12): "Los implementadores y
administradores pueden elegir el permitir que los mensajes de control se lleven
a cabo automáticamente, o encolarlos para su proceso anual."
Los mensajes checkgroups son mandados por los administradores de noticias para hacer que todos los servidores de una red sincronicen sus ficheros active con la realidad de Usenet. Por ejemplo, los proveedores de servicio de Internet deberían mandar tal mensaje a los servidores de sus clientes. Una vez al mes, el moderador del grupo comp.announce.newgroups envía el mensaje "oficial" checkgroups para las principales jerarquías. Sin embargo, se envía como un artículo ordinario, no como un mensaje de control. Para realizar la operación checkgroups, salve este artículo en un fichero, digamos /tmp/check, borre todo hasta el principio del mismo mensaje de control, y envíe al programa checkgroups usando el siguiente comando:
# su news -c "/usr/lib/news/bin /ctl/checkgroups" < /tmp/check
Esto actualizara su fichero newsgroups, añadiendo los grupos listados en localgroups. El antiguo fichero newsgroups será movido a newsgroups.bak. Note que rara vez funciona el enviar el mensaje localmente, porque inews rechaza aceptar un artículo tan grande.
Si C-News encuentra desigualdades entre la lista checkgroups y el fichero active, producirá una lista de comandos que actualizaría su servidor, y lo enviará por correo al administrador de noticias. Típicamente la salida se parece a esto:
From news Sun Jan 30 16:18:11 1994
Date: Sun, 30 Jan 94 16:18 MET
From: news (News Subsystem)
To: usenet
Subject: Problems with your active file
The following newsgroups are not valid and should be removed.
alt.ascii-art
bionet.molbio.gene-org
comp.windows.x.intrisics
de.answers
You can do this by executing the commands:
/usr/lib/news/bin/maint/delgroup alt.ascii-art
/usr/lib/news/bin/maint/delgroup bionet.molbio.gene-org
/usr/lib/news/bin/maint/delgroup comp.windows.x.intrisics
/usr/lib/news/bin/maint/delgroup de.answers
The following newsgroups were missing.
comp.binaries.cbm
comp.databases.rdb
comp.os.geos
comp.os.qnx
comp.unix.user-friendly
misc.legal.moderated
news.newsites
soc.culture.scientists
talk.politics.crypto
talk.politics.tibet
Cuando reciba un mensaje como éste de su sistema de noticias, no lo crea ciegamente.
Dependiendo de quien envió el mensaje checkgroups, puede que carezca de unos pocos grupos e incluso de jerarquías enteras; por lo tanto debería tener cuidado al borrar cualquier grupo.
Si Ud. encuentra grupos listados como no presentes que quiera tener en su servidor, tiene que añadirlos usando la herramienta addgroup. Salve la lista de grupos que le faltan en un fichero y páseselo al siguiente guión:
#!/bin/sh
cd /usr/lib/news
while read group; do
if grep -si "^$group[[:space:]].*moderated" newsgroup; then
mod=m
else
mod=y
fi
/usr/lib/news/bin/maint/addgroup $group $mod
done
17.8.4 sendsys, version, y senduuname
Finalmente, hay tres mensajes que pueden usarse para averiguar la topología de la red.
Estos son sendsys, version, y senduuname. Respectivamente, hacen que C-News devuelva al remitente el fichero sys, una cadena con la versión del software, y la salida de uuname(1).
C-News es muy lacónica con respecto a los mensajes version; devuelve una simple "C", sin adornos.
Insistimos de nuevo, Ud. nunca debería distribuir tal mensaje, a menos que este seguro de que no puede dejar su red (regional). Las respuestas a los mensajes sendsys pueden hacer caer rápidamente una red UUCP.12
Una manera simple de distribuir noticias en una red local es guardar todas las noticias en un nodo central, y exportar los directorios relevantes vía NFS, de manera que los lectores de noticias puedan examinar los artículos directamente. La ventaja de este método sobre NNTP es que la sobrecarga implicada en recuperar y enhebrar artículos es significativamente mas baja. Por otra parte, NNTP gana en una red heterogénea donde el equipamiento varía mucho entre nodos, o donde los usuarios no tienen cuentas equivalentes en la máquina servidora.
Cuando se usa NFS, los artículos enviados al nodo local tienen que ser reenviados a la máquina central, porque de otro modo el acceso a los ficheros administrativos expondría al sistema a condiciones de carrera y dejarían los ficheros inconsistentes. También Ud. podría querer proteger su área de cola de noticias exportándola como sólo-lectura, lo cual requiere también el reenvío a la máquina central.
C-News maneja esto transparentemente. Cuando envía un artículo, su lector de noticias normalmente llamara a inews para inyectar el artículo en el sistema de noticias. Este comando ejecuta algunas comprobaciones sobre el artículo, completa la cabecera, y comprueba el fichero server en /usr/lib/news. Si este fichero existe y contiene un nombre de nodo diferente del nombre del sistema local, se invoca inews en ese servidor remoto vía rsh.
Puesto que el guión inews usa comandos binarios y ficheros de apoyo de C-News, Ud. tiene que tener C-News instalado localmente, o montar el software de noticias desde el servidor.
Para que la invocación de rsh funcione correctamente, cada usuario debe tener una cuenta equivalente en el sistema del servidor, esto es, una a la que pueda acceder sin necesitar contraseña.
Asegúrese de que el nombre del sistema indicado en server coincida literalmente con la salida del comando hostname(1) en la máquina servidora, si no C-News entrará en un bucle infinito cuando intente entregar el artículo.
17.10 Herramientas y Tareas de Mantenimiento
A pesar de la complejidad de C-News, la vida de un administrador de noticias puede ser bastante fácil, porque C-News proporciona una amplia variedad de herramientas de mantenimiento. Es deseable que algunos de éstos sean ejecutados regularmente desde cron, como newsdaily. El uso de estos programas reduce drásticamente los requisitos diarios de cuidado y administración de su instalación de C-News.
_____________________________________________
12 Yo tampoco intentaría esto en Internet.
A menos que se indique lo contrario, estos comandos están situados en /usr/lib/news/bin/maint. Note que Ud. debe ser el usuario news antes de invocar estos comandos. Ejecutándolos como super-usuario puede volver estos ficheros inaccesibles a C-News.
newsdaily
El nombre ya lo dice: ejecutar esto una vez al día. Es un guión
importante que le ayuda a mantener los ficheros de registro pequeños,
conservando copias de cada todos ellos de las tres últimas ejecuciones.
También intenta detectar cualquier anomalía, como lotes atascados
en los directorios de entrada y salida, envíos a grupos de noticias moderados
o desconocidos, etc. Los mensajes de error resultantes serán enviados
por correo al administrador de noticias.
newswatch
Se trata de un script que debería ejecutarse regularmente para buscar
anomalías en el sistema de noticias, una vez cada hora mas o menos. Esta
destinado a detectar problemas que tendrán efectos inmediatos en la operatibilidad
de su sistema de noticias y enviar un informe de problemas al administrador
de noticias. Las cosas comprobadas incluyen ficheros de bloqueo pasados que
no fueron borrados, lotes de entrada desatendidos y la falta de espacio de disco.
addgroup
Añade un grupo localmente a su servidor. La invocación adecuada
es
addgroup groupname y|n|m|=realgroup
El segundo argumento tiene el mismo significado que el modificador del fichero active, significando que cualquiera puede enviar un artículo al grupo (y), que nadie puede enviar (n), que es moderado (m), o que es un alias para otro grupo (=realgroup ).
Ud. podría querer usar addgroup cuando los primeros artículos de un grupo recién creado lleguen antes que el mensaje de control newgroup destinado a crearlo.
delgroup
Le permite borrar localmente un grupo. Invóquelo como
delgroup groupname
Todavía tiene que borrar los artículos que permanecen el directorio de cola del grupo de noticias. Aunque se puede dejar esta tarea al proceso natural de expiración de los artículos.
addmissing
Añade artículos perdidos al fichero historial. Ejecute este
guión cuando haya artículos que parezcan quedarse para siempre.13
newsboot
Este guión se debería ejecutar cuando arranca el sistema.
Elimina cualquier fichero de bloqueo que se dejo atrás cuando se mataron
los procesos al apagar, y cierra y ejecuta cualquier lote dejado por las conexiones
NNTP que se cerraron cuando se apago el sistema.
newsrunning
Este reside en /usr/lib/news/bin/input, y puede ser usado para deshabilitar
el desempaquetado de los lotes de noticias entrantes, por ejemplo durante las
horas de trabajo. Ud. puede desconectar el desempaquetado de lotes invocando
/usr/lib/news/bin /input/newsrunning off
Se conecta usando on en vez de off.
_____________________________________________
13 ¿Alguna vez se ha preguntado como librarse del artículo "¡Ayuda! ¡¡¡No
puedo hacer que las X11 funcionen con 0.97.2!!!"?