2.13. Notas sobre la instalación de Perl

MySQL 5.0

2.13. Notas sobre la instalación de Perl

En Perl, el soporte para MySQL está proporcionado a través de la interfaz cliente /. La interfaz requiere Perl Versión 5.6.0 o posterior. La misma no funciona en una versión anterior de Perl.

Para poder utilizar transacciones con Perl DBI, se necesita tener versión 1.2216 o posterior. Se recomienda la versión 2.9003 o posterior.

Si se está utilizando la biblioteca cliente de MySQL 4.1, se deberá emplear 2.9003 o posterior.

El soporte en Perl no se incluye con las distribuciones MySQL. Los módulos necesarios pueden descargarse de http://search.cpan.org para Unix, o utilizando el programa ActiveState ppm en Windows. Las siguientes secciones describen cómo hacerlo.

Se debe isntalar el soporte en Perl para MySQL si se desean ejecutar los scripts de de pruebas de rendimiento de MySQL. Consulte Sección 7.1.4, “El paquete de pruebas de rendimiento (benchmarks) de MySQL”.

2.13.1. Instalación de Perl en Unix

El soporte MySQL en Perl requiere que se hayan instalado el soporte de programación de cliente MySQL (bibliotecas y ficheros de cabecera). La mayoría de los métodos de instalación crean los ficheros necesarios. Sin embargo, si se instaló MySQL en Linux a partir de ficheros RPM, hay que asegurarse de haber instalado el RPM de desarrollo. Los programas cliente están en el RPM de cliente, pero el soporte a la programación se encuentra en el RPM de desarrollo.

Si se desea instalar el soporte en Perl, los ficheros que se necesitarán pueden obtenerse desde la CPAN (Comprehensive Perl Archive Network, Red Integral de Archivo Perl) en http://search.cpan.org.

La forma más sencilla de instalar módulos Perl en Unix es utilizar el módulo . Por ejemplo:

shell> perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::mysql

La instalación de ejecuta una cantidad de pruebas. Estas pruebas intentan conectarse al servidor MySQL local, empleando el nombre de usuario y contraseña por defecto. (El nombre de usuario por defecto es el nombre usado para iniciar sesión en Unix, y en Windows es . La contraseña por defecto es “sin contraseña.”). Si no se puede conectar al servidor con estos valores (por ejemplo si la cuenta tiene una contraseña establecida), la prueba falla. Se puede emplear para ignorar las pruebas fallidas.

requiere el módulo . Es posible que esté instalado, de lo contrario, se debería instalar antes que .

Otra posibilidad es descargar las distribuciones de módulos en forma de ficheros tar comprimidos y compilar los módulos manualmente. Por ejemplo, para descompactar y compilar una distribución DBI, debe usarse un procedimiento como el siguiente:

  1. Descompactar la distribución en el directorio actual:

    shell> gunzip < DBI-.tar.gz | tar xvf -
    

    Este comando crea un directorio llamado .

  2. Hay que posicionarse en el directorio de más alto nivel de la distribución descompactada:

    shell> cd DBI-
    

  3. Compilar la distribución:

    shell> perl Makefile.PL
    shell> make
    shell> make test
    shell> make install
    

El comando make test es importante porque verifica que el módulo esté funcionando. Nótese que, al ejecutar este comando durante la instalación de para ejercitar el código de la interfaz, el servidor MySQL debe estar funcionando o de lo contrario la prueba fallará.

Es buena idea recompilar y reinstalar la distribución de cada vez que se instale un nuevo release de MySQL, en particular si se advierte que todos los scripts fallan luego de actualizar el servidor.

Si no se tienen privilegios para instalar los módulos Perl en el directorio del sistema, o si se desean instalar los módulos en forma local, la siguiente referencia puede ser útil: http://servers.digitaldaze.com/extensions/perl/modules.html#modules

Ver bajo el título “Installing New Modules that Require Locally Installed Modules.

2.13.2. Instalar ActiveState Perl en Windows

En Windows, se debe hacer lo siguiente para instalar el módulo con ActiveState Perl:

  • Debe obtenerse ActiveState Perl en http://www.activestate.com/Products/ActivePerl/ e instalarlo.

  • Abrir una ventana de consola (“ventana DOS”).

  • Si se necesita, establecer el valor de la variable . Por ejemplo:

    set HTTP_proxy=my.proxy.com:3128
    
  • Iniciar el programa PPM:

    C:\> C:\perl\bin\ppm.pl
    
  • Si no se hizo antes, instalar :

    ppm> install DBI
    
  • Si todo ha ido bien, ejecutar el siguiente comando:

    install \
    ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
    

Este procedimiento debería funcionar con ActiveState Perl Versión 5.6 o posterior.

Si no se puede hacer funcionar el procedimiento, se debería en su lugar instalar el driver MyODBC y conectarse al servidos MySQL a través de ODBC:

use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
  die "Got error $DBI::errstr when connecting to $dsn\n";

2.13.3. Problemas en la utilización de la interfaz Perl DBI/DBD

Si Perl anuncia que no puede encontrar el módulo , entonces el problema probablemente sea que Perl no ha podido encontrar la biblioteca compartida .

Esto debería poder solucionarse a través de alguno de los siguientes métodos:

  • Compilar la distribución con en lugar de .

  • Copiar al directorio donde se ubican las demás bibliotecas compartidas (probablemente, or ).

  • Modificar las opciones utilizadas para compilar para que reflejen la ubicación real de .

  • En Linux, puede agregarse al fichero la ruta donde se localiza .

  • Agregar a la variable de entorno el directorio donde se ubica . Algunos sistemas utilizan en lugar de .

Hay que notar que si hay otras bibliotecas que el enlazador no puede hallar, se necesitarán modificar las opciones . Por ejemplo, si no se puede hallar porque está en el directorio y el enlazador está especificando , hay que cambiar la opción para que sea o agregar al comando de enlazado existente.

Si se obtienen los siguientes errores de , probablemente se está utilizando gcc (o un binario antiguo compilado con gcc):

/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'

Agregar al comando de enlazado cuando se compila (verificar la salida de make para al compilar el cliente Perl). La opción debería especificar la ruta donde se localiza .

Otra causa de este problema es que Perl y MySQL no estén compilados (ambos) con gcc. En este caso, se puede resolver la desigualdad compilando a los dos con gcc.

Al ejecutar las pruebas, puede verse el siguiente error de :.

t/00base............install_driver(mysql) failed:
Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.

Esto significa que se necesita incluir la biblioteca de compresión en la línea de enlazado. Puede hacerse cambiando la siguiente linea en el fichero .

Copiar al directorio donde se ubican las otras bibliotecas compartidas (probablemente, or ).

Modificar las opciones usadas para compilar para que reflejen la ubicación real de .

En Linux, puede agregarse al fichero la ruta donde se localiza .

Agregar a la variable de entorno el directorio donde se ubica . Algunos sistemas utilizan en lugar de .

Hay que notar que si hay otras bibliotecas que el enlazador no puede hallar, se necesitarán modificar las opciones . Por ejemplo, si no se puede hallar :

$sysliblist .= " -lm";

Cambiar la línea a:

$sysliblist .= " -lm -lz";

Despues de esto, debe ejecutarse make realclean y proceder con la instalación desde el principio.

Si se desea isntalar DBI en SCO, se tendrá que editar el fichero en DBI- y en cada subdirectorio. Notar que lo que sigue asume que se tiene gcc 2.95.2 o posterior:

OLD:                                  NEW:
CC = cc                               CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =

LD = ld                               LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib

LD = ld                               LD = gcc -G -fpic
OPTIMISE = -Od                        OPTIMISE = -O1

OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include

NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

Estos cambios se necesitan porque el cargador dinámico (dynaloader) de Perl no cargará los módulos si fueron compilados con icc o cc.

Si se desea utilizar el módulo Perl en un sistema que no posee soporte para enlazado dinámico (como SCO), se deberá generar una versión estática de Perl que incluya y . La forma en que esto funciona es: se genera una versión de Perl con el código enlazado y se la instala por encima del Perl actual. Luego se lo utiliza para compilar una versión de Perl que adicionalmente tiene incluído el código de , y se lo instala.

En SCO, se deberán configurar las siguientes variables de entorno:

            LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
          

O bien:

            LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
            /usr/progressive/lib:/usr/skunk/lib
            LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
            /usr/progressive/lib:/usr/skunk/lib
            MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
            /usr/skunk/man:
          

En primer lugar hay que crear un Perl que incluya un módulo enlazado estáticamente mediante la ejecución de estos comandos en el directorio donde se ubica la distribución de :

            shell> 
            shell> 
            shell> 
            shell> 
          

Luego debe instalarse el nuevo Perl. La salida de make perl indica exactamente el comando make necesario para llevar a cabo la instalación. En SCO, este es make -f Makefile.aperl inst_perl MAP_TARGET=perl.

A continuación, emplear el recién creado Perl para crear otro Perl que tmabién incluya un creado estáticamente, mediante la ejecución de estos comandos en el directorio donde se ubica la distribución :

            shell> 
            shell> 
            shell> 
            shell> 
          

Finalmente, se debería instalar este nuevo Perl. De nuevo, la salida de make perl indicará el comando a emplear.