LinuxParty

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

Postfix utiliza bases de datos de varios tipos para almacenar y buscar información. Las bases de datos de Postfix se especifican como del "type:name". Berkeley DB implementa el tipo de base de datos Postfix "hash" y "btree". El nombre de una base de datos Postfix Berkeley DB es el nombre del archivo de base de datos sin el sufijo ".db". Las bases de datos Berkeley DB se mantienen con el comando postmap (1) .

Nota: la versión 4 de Berkeley DB no es compatible con las versiones de Postfix anteriores a la 2.0.

Este documento describe:

Cómo construir Postfix sin soporte para Berkeley DB incluso si el sistema viene con Berkeley DB.

Cómo construir Postfix en sistemas que normalmente no tienen una biblioteca de Berkeley DB

Cómo construir Postfix en sistemas BSD o Linux con múltiples versiones de Berkeley DB.

Cómo ajustar el rendimiento.

Falta el problema de la biblioteca de pthread.

Creación de Postfix sin soporte para Berkeley DB incluso si el sistema viene con Berkeley DB

Nota: Las siguientes instrucciones se aplican a Postfix 2.9 y posteriores.

Postfix normalmente habilitará el soporte de Berkeley DB si se sabe que el sistema lo tiene. Para compilar Postfix sin el soporte de Berkeley DB, compile los makefiles de la siguiente manera:

(éste paso generalmente puede ahorrarse cuando se instala desde los repositorios, pues instalará un binario ya precompilado)

% make makefiles CCARGS="-DNO_DB"
% make

Esto deshabilitará el soporte para los archivos "hash" y "btree".

Creación de Postfix en sistemas que normalmente no tienen una biblioteca de Berkeley DB

Algunos UNIX se envían sin el soporte de Berkeley DB; por razones históricas, estos usan archivos DBM en su lugar. Un problema con los archivos DBM es que solo pueden almacenar cantidades limitadas de datos. Para compilar Postfix con soporte para Berkeley DB, necesita descargar e instalar el código fuente de http://www.oracle.com/database/berkeley-db/ .

Advertencia: algunas bibliotecas del sistema Linux utilizan Berkeley DB, al igual que algunas bibliotecas de terceros, como SASL. Si compila Postfix con una implementación diferente de Berkeley DB, entonces cada programa de Postfix volcará el núcleo porque la biblioteca del sistema, la biblioteca SASL o el propio Postfix terminan usando la versión incorrecta.

Las versiones más recientes de Berkeley DB tienen un interruptor en tiempo de compilación, "--with-uniquename", que cambia el nombre de los símbolos para que puedan coexistir múltiples versiones de Berkeley DB en la misma aplicación. Aunque es un desperdicio, esta puede ser la única forma de evitar que las cosas se caigan.

Para construir Postfix después de instalar Berkeley DB desde el código fuente, use algo como:

(éste paso generalmente puede ahorrarse cuando se instala desde los repositorios, pues instalará un binario ya precompilado)

% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
    AUXLIBS="-L/usr/local/BerkeleyDB/lib -ldb"
% make

Solaris necesita esto:

% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
    AUXLIBS="-R/usr/local/BerkeleyDB/lib -L/usr/local/BerkeleyDB/lib -ldb"
% make

Los nombres de ruta exactos dependen de la versión de Berkeley DB y de cómo se instaló.

Advertencia: el formato de archivo producido por Berkeley DB versión 1 no es compatible con el de las versiones 2 y 3 (las versiones 2 y 3 tienen el mismo formato). Si cambia entre las versiones de base de datos, es posible que tenga que reconstruir todos sus archivos de base de datos de Postfix.

Advertencia: si usa Berkeley DB versión 2 o posterior, no habilite el modo de compatibilidad DB 1.85. Si lo hace, rompería el bloqueo de archivos fcntl.

Advertencia: si usa Perl para manipular los archivos Berkeley DB de Postfix, entonces necesita usar la misma versión de Berkeley DB en Perl que en Postfix.

Construyendo Postfix en sistemas BSD con múltiples versiones de Berkeley DB

Algunos sistemas BSD se envían con múltiples implementaciones de Berkeley DB. Normalmente, Postfix se compila con la versión de base de datos predeterminada que viene con el sistema.

Para construir Postfix en sistemas BSD con una versión de base de datos no predeterminada, use una variante de los siguientes comandos:

% make makefiles CCARGS=-I/usr/include/db3 AUXLIBS=-ldb3
% make

Advertencia: el formato de archivo producido por Berkeley DB versión 1 no es compatible con el de las versiones 2 y 3 (las versiones 2 y 3 tienen el mismo formato). Si cambia entre las versiones de base de datos, es posible que tenga que reconstruir todos sus archivos de base de datos de Postfix.

Advertencia: si usa Berkeley DB versión 2 o posterior, no habilite el modo de compatibilidad DB 1.85. Si lo hace, rompería el bloqueo de archivos fcntl.

Advertencia: si usa Perl para manipular los archivos Berkeley DB de Postfix, entonces necesita usar la misma versión de Berkeley DB en Perl que en Postfix.

Construyendo Postfix en sistemas Linux con múltiples versiones de Berkeley DB

Algunos sistemas Linux se envían con múltiples implementaciones de bases de datos Berkeley. Normalmente, Postfix se compila con la versión de base de datos predeterminada que viene con el sistema.

Advertencia: algunas bibliotecas del sistema Linux utilizan Berkeley DB. Si compila Postfix con una implementación de Berkeley DB no predeterminada, entonces todos los programas de Postfix volcarán el núcleo porque la biblioteca del sistema o el propio Postfix terminan usando la versión incorrecta.

En Linux, debe editar el script makedefs para especificar una biblioteca de base de datos no predeterminada. El motivo es que la ubicación del archivo db.h predeterminado incluye cambios aleatorios entre los proveedores y entre las versiones, de modo que Postfix tiene que elegir el archivo por usted.

Advertencia: el formato de archivo producido por Berkeley DB versión 1 no es compatible con el de las versiones 2 y 3 (las versiones 2 y 3 tienen el mismo formato). Si cambia entre las versiones de base de datos, es posible que tenga que reconstruir todos sus archivos de base de datos de Postfix.

Advertencia: si usa Berkeley DB versión 2 o posterior, no habilite el modo de compatibilidad DB 1.85. Si lo hace, rompería el bloqueo de archivos fcntl.

Advertencia: si usa Perl para manipular los archivos Berkeley DB de Postfix, entonces necesita usar la misma versión de Berkeley DB en Perl que en Postfix.

Rendimiento retorcido

Postfix proporciona dos parámetros de configuración que controlan la cantidad de memoria de búfer que usará Berkeley DB.

  • berkeley_db_create_buffer_size (predeterminado: 16 MBytes por tabla). Esta configuración es utilizada por los comandos que mantienen los archivos de la base de datos de Berkeley: postalias (1) y postmap (1) . Para los archivos "hash", cree que el rendimiento se degrada rápidamente a menos que el grupo de memoria sea O (tamaño de archivo). Para archivos "btree", crear rendimiento es bueno con la entrada ordenada incluso para grupos de memoria pequeños, pero con entrada aleatoria se degrada rápidamente a menos que el grupo de memoria sea O (tamaño de archivo).

  • berkeley_db_read_buffer_size (predeterminado: 128 kBytes por tabla). Esta configuración es utilizada por todos los demás programas de Postfix. El tamaño del buffer es adecuado para la lectura. Si la memoria caché es más pequeña que la tabla, el rendimiento de lectura aleatoria no depende del tamaño de la memoria caché, excepto en las tablas de btree, donde el tamaño de la memoria caché debe ser lo suficientemente grande como para contener la ruta completa desde el nodo raíz. La evidencia empírica muestra que 64 kBytes pueden ser suficientes. Duplicamos el tamaño para jugar de forma segura y para anticipar cambios en la implementación y la expansión.

Falta el problema de la biblioteca de pthread

Cuando la construcción de Postfix falla con:

undefined reference to `pthread_condattr_setpshared'
undefined reference to `pthread_mutexattr_destroy'
undefined reference to `pthread_mutexattr_init'
undefined reference to `pthread_mutex_trylock'

Agregue la biblioteca "-lpthread" al comando "make makefiles".

% make makefiles .... AUXLIBS="... -lpthread"

Más información está disponible en http://www.oracle.com/database/berkeley-db/.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política