21.5. Procesar 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 está precedido por una línea como esta:
    #! rnews count

donde count 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 compresió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 un método de codificación llamado codificación c7(c7-encoding, en inglés); estos lotes serán marcados por c7unbatch.

Cuando se le suministra un lote rnews en el servidor remoto, éste comprueba esas marcas y procesa el lote apropiadamente. Algunos servidores también usan otras herramientas de compresión tales como gzip, y en su lugar, preceden a sus ficheros comprimidos con zunbatch. C-News no reconoce cabeceras no estándares como esas; Ud. deberá modificar el código fuente para darle soporte.

En C-News, el proceso por lotes de ficheros lo realiza /usr/lib/news/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 más a menudo, dependiendo del volumen de tráfico. Esta operación es controlada por el fichero batchparms situado en /var/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 usado, además del método de transporte para entregarlo al servidor remoto. Puede especificar los parámetros del proceso por lotes para cada servidor, además de un conjunto de parámetros predeterminados para servidores no mencionados explícitamente.

Cuando instale C-News, seguramente hallará un fichero de nombre batchparms en su distribución que contenga una entrada predeterminada, con valores razonables, 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:
    sitio tamaño max batcher muncher transporte

sitio

sitio 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 noticias. Un servidor llamado /default/ denota la entrada predeterminada y coincide con cualquier servidor que no sea especificado con una única entrada.

tamaño

tamaño 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 a ellos solos.

max

max es el máximo número de lotes creados y programados para la transferencia antes de que el proceso por lotes se interrumpa para este servidor en particular. Esto es útil en el caso de que el servidor remoto no esté disponible durante un largo período 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 guión queuelen situado en /usr/lib/news/. Si ha instalado C-News desde paquetes, el guión no necesita retoques, pero si elige lugares diferentes para los directorios de cola, por ejemplo para Taylor UUCP, deberá crear su propia versión del guión. 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 gigantes), puede reemplazar el contenido del guión por una simple sentencia exit 0.

batcher

El campo batcher contiene la orden usada para producir un lote a partir de la lista de artículos del fichero togo. Para las fuentes habituales, éste 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 o sendme, los cuales se envían al grupo to.site. Esto lo realizan las instrucciones batchih y batchsm respectivamente.

muncher

El campo compresión especifica la orden a usar para la compresión de los lotes. Generalmente, se usa compcun, un guión que produce lotes comprimidos[1]. Alternativamente, puede proporcionar un muncher que use gzip, para comprimir, digamos gzipcun (para ser claros: tiene que escribirlo usted mismo ). Debe asegurarse de que uncompress en el servidor remoto esté parcheado para reconocer ficheros comprimidos con gzip.

Si el servidor remoto no tiene una orden uncompress, debe especificar nocomp, lo que implica que no se realice compresión alguna.

transporte

El último campo, transporte, describe el transporte a ser utilizado. Hay disponibles varias órdenes estándar para diferentes transportes cuyos nombres empiezan con via. sendbatches les pasa el nombre del servidor de destino en la línea de órdenes. Si la entrada batchparms no era /default/, sendbatches deriva el nombre del servidor del campo sitio suprimiendo cualquier cosa después e incluyendo el primer punto o barra inclinada. Si la entrada batchparms es /default/, se usa el nombre del directorio introducido en out.going.

Para llevar a cabo el proceso por lotes para un servidor específico, se invoca como:
    # su news -c "/usr/lib/news/batch/sendbatches site"

Cuando se invoca sin argumentos, sendbatches maneja todas las colas de lotes. La interpretación de “todas” depende de una entrada predeterminada en batchparms. Si se encuentra una, se comprueban todos los directorios de /var/spool/news/out.going; si no, sendbatches recorre todas las entradas de batchparms, procesando solamente los lugares encontrados. Note que sendbatches, cuando explora el directorio out.going toma sólo aquellos directorios que no contienen ningún punto o símbolo arroba (@)como nombre de servidor.

Hay dos órdenes que usan uux para ejecutar rnews en el servidor remoto: viauux y viauuxz. El último establece el parámetro –z para uux, el cual, previene que versiones más antiguas de uux devuelvan mensajes de éxito por cada artículo entregado. Otra orden, viamail, envía los lotes de artículos al usuario rnews en el servidor 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 las páginas del manual de newsbatch.

Todas las órdenes de los tres últimos campos deben estar situados, bien en out.going/site o en /usr/lib/news/batch. La mayoría de ellos son guiones, de tal forma que pueda confeccionar fácilmente nuevas herramientas para sus necesidades personales y son invocadas a través de tuberías (pipes). La lista de artículos se suministra al batches por su entrada estándar, la cual produce el lote en su salida estándar. Esto a su vez, se vuelve a entubar en el muncher, y así sucesivamente.

Aquí hay un ejemplo:

    # fichero batchparms para la cervecera
    # site        | size   |max    |batcher  |muncher    |transport
    #-------------+--------+-------+---------+-----------+-----------
    /default/       100000  22      batcher   compcun     viauux
    swim             10000  10      batcher   nocomp      viauux

Notas

[1]

Tal como se distribuye con C-News, compcun usa compress con la opción 12-bit , ya que éste es el mínimo común denominador de la mayoría de los servidores. Puede hacer una copia del guión, digamos compcun16, y usar el método de compresión 16-bit. De todas formas, la mejora en rendimiento no es muy impresionante.