6. Sistema de configuración M4

6.1. Motivación

Si el lector tuvo curiosidad de listar el archivo "cf", habrá notado seguramente que éste tiene una sintaxis muy poco intuitiva. Este problema no ha pasado desapercibido para los desarrolladores de Sendmail (aunque la cura quizá haya resultado peor que la enfermedad:)

A fin de facilitar la configuración de Sendmail para los usuarios ocasionales y los administradores en general, existe un mecanismo complementario que evita la escritura y modificación directa del archivo "cf". Este mecanismo consiste en escribir un archivo relativamente sencillo usando la sintaxis del lenguaje "M4", el cual se proporciona en prácticamente todos los sistemas Unix/Linux (a veces como software opcional.)

Mediante este sistema, el usuario creará (o modificará) un archivo relativamente breve, el cual se traducirá en muchas líneas del archivo "cf".

Lo cierto es que es absolutamente impráctico escribir "desde cero" un archivo "cf" medianamente utilizable, así que el método M4 es una opción casi obligatoria.

6.2. Regenerando el archivo "cf"

Antes de hacer modificaciones, es recomendable conocer cómo se generó el archivo "cf" proporcionado por el sistema. Normalmente éste proviene de un archivo tipo "M4". Lamentablemente esto no es válido en todos los casos, y las rutas de los archivos involucrados son muy variables.

En RedHat 8 el archivo "cf" distribuido (/etc/mail/sendmail.cf) se puede regenerar en cualquier momento a partir del archivo (/etc/mail/sendmail.mc) que usa la sintaxis "M4". Esto se puede hacer con el siguiente comando:

# cd /etc/mail
# m4 sendmail.mc > sendmail.cf
* NOTA: Asegúrese de sacar una copia al archivo "cf" antes de hacer esto!

En RedHat 7 la secuencia es parecida, aunque los directorios difieren:

bash# cd /usr/share/sendmail-cf/cf
bash# m4 redhat.mc > /etc/sendmail.cf

En otros sistemas Unix/Linux (incluso RedHat en versiones anteriores) el archivo sendmail.mc puede tener un nombre distinto y una ubicación distinta, y habrá que ver la documentación respectiva. Por ejemplo, en RedHat 7 se llamaba redhat.mc y se ubicaba en /usr/share/sendmail-cf/cf.

Incluso puede ser que este archivo simplemente no exista y haya que generar uno nuevo. En ese caso Ud. deberá ubicar primero el directorio "cf" de Sendmail y crear un archivo (le llamaremos prueba.mc) tal como:

include(`../m4/cf.m4')
OSTYPE(hpux10)dnl
MAILER(local)dnl
MAILER(smtp)dnl
La directiva OSTYPE requiere que Ud. especifique su versión de sistema operativo (en el ejemplo, HP/UX V.10.) Para ver los sistemas disponibles, vea el directorio sendmail-cf/ostype o cf/ostype. En mi caso:
bash# ls ../ostype/
aix2.m4        bsdi2.0.m4   irix4.m4     powerux.m4
aix3.m4        bsdi.m4      irix5.m4     ptx2.m4 
aix4.m4        darwin.m4    irix6.m4     qnx.m4
aix5.m4        dgux.m4      isc4.1.m4    riscos4.5.m4 
altos.m4       domainos.m4  linux.m4     sco3.2.m4   
amdahl-uts.m4  dynix3.2.m4  maxion.m4    sco-uw-2.1.m4
aux.m4         gnu.m4       mklinux.m4   sinix.m4    
bsd4.3.m4      hpux10.m4    nextstep.m4  solaris2.m4 
bsd4.4.m4      hpux11.m4    openbsd.m4   solaris2.ml.m4
bsdi1.0.m4     hpux9.m4     osf1.m4      solaris2.pre5.m4
Todo esto requiere que se trabaje en el subdirectorio sendmail-cf/cf o cf/cf. A continuación, ejecutar m4:
bash# m4 prueba.mc > /etc/sendmail.cf

Volviendo a Linux RedHat, los archivos "M4" usados por Sendmail se proporcionan en el paquete "sendmail-cf". Obviamente requerirá también el paquete "m4" para poder usarlo. En otros sistemas Unix/Linux el software "M4" puede ser opcional o parte de las herramientas de desarrollo.

En Linux RedHat 8.0 y superiores, es también posible regenerar el archivo "submit.cf" a partir de:

# cd /etc/mail
# m4 submit.mc > submit.cf

6.3. Configuración con M4

El sistema M4 de Sendmail permite generar configuraciones para distintos propósitos así como alterar opciones bastante puntuales. A modo de ejemplo, el parámetro que controla el "tiempo de alerta" de un mensaje en cola (no se preocupe si no entiende esto, es sólo un ejemplo), se configura con M4 mediante una línea como la siguiente:

define(`confTO_QUEUEWARN',`2h')
Lo cual se traduce en exactamente la siguiente línea en el archivo "cf" generado:
O Timeout.queuewarn=2h
Téngase cuidado dentro del archivo "M4" de emplear las comillas adecuadas para cada caso (obsérve que se han usado ambos tipos:
 ` y '

En resumen, mediante la sintaxis (simple) de "M4", se puede regenerar un archivo en la sintaxis (compleja) del "cf". Recuérdese que al final, el programa Sendmail sólo utilizará el archivo "cf".

En lo que sigue, presentaremos la configuración de Sendmail empleando ambos métodos cuando sea posible, pero se preferirá el método M4. Como se indicó, algunas directivas del método "M4" se traducen a una gran cantidad de complejas directivas del archivo "cf", el cual resulta impráctico.