发新话题
打印

[转载]Configuracion de Perl/Informix's Setup

[转载]Configuracion de Perl/Informix's Setup

信息来源:邪恶八进制信息安全团队

http://www.lacorona.com.mx/fortiz/informix/perl.htm

Configuracion de Perl/Informix's Setup

Contenido/contents:
Intro
DBI
Intro 2
CPAN
CSDK
DBD::Informix
Ejemplos / Examples
Pagina principal/Home page

<>
Intro
Aunque prefiero PHP para el desarrollo de paginas Web, algunas cosas son mas sencillas de hacer en Perl. I prefer PHP por Web development, but some tasks are easier to do with Perl.
Para algunos scripts sencillos, hacer un programa x4GL es mucho codigo y con puro SQL en dbaccess queda muy feo el formato. For small command line scripts, doing a x4GL is a lot of code and using SQL con dbaccess only results in a ugly presentation.
Vamos a instalar los fuentes de los modulos necesarios para usar Informix con Perl en un subdirectorio de $INFORMIXDIR, puede ser cualquier usuario pero para probar la conectividad con el usuario informix nos simplifica mucho. We're going to install the sources of the Perl modules nedded to talk to an informix data base in a subdirectory of $INFORMIXDIR, could be under any user, but it's easy to check the conectivity using the informix user.
Por ese motivo, en este punto terminamos la introduccion a Perl y nos saltamos a la instalacion del CSDK de Informix. That's why this ends the first part of the Perl intro, and we jump into the Informix CSDK instalation.
CSDK
Para poder instalar los modules Perl para accesar a una base de datos es necesario ya tener instalado el CSDK de Informix, con las variables de medio ambiente correctas y configurado la conexion al servidor. To install the Perl modules needed to access an Informix database you need to already have installed and correctly configured the CSDK, including the environment variables and the server information.
Para una explicacion detallada de como efectuar la instalacion y configuracion, vea esta pagina. A detailed explanation of the steps for setting up CSDK see this page.
Intro 2
Ahora si, ya con el CSDK instalado y configurado el acceso a la base de datos, procedemos a instalar los modulos Perl con el usuario informix. Now, with CSDK already setup, we proced to install the Perl modules as user informix.
su - informix
export HOME_SRC=$INFORMIXDIR/perl
mkdir $HOME_SRC
cd $HOME_SRC
Si el acceso a internet es via un servidor proxy no se olvide de declararlo en caso contrario no podras descargar los paquetes. If the access to INternet is thru a proxy server, don't forget to declare it, otherwise you can't download the packages.
export HTTP_PROXY='http://192.168.1.1:3278'
Perl es un lenguaje muy flexible en el que cada cosa se puede hacer de diferentes maneras, yo aqui expongo 'mi' manera de hacerlas, que si funciona aunque no sea la manera ideal.
La mayoria de los modulos y librarias que vamos a instalar requieren que tengamos instalado el compilador de C (gcc) y el paquete 'make' para poder compilarlos.
CPAN
Comprehensive Perl Archive Network
Segun el FAQ, CPAN es tanto el nombre del repositorio donde se almacenan los modulos disponibles, asi como el nombre de un modulo que automatiza la instalacion de los modulos en tu maquina.
Por medio del modulo CPAN se puede automatizar la instalacion de tal manera que con un solo comando, se conecta internet, baja el paquete, lo configura, compila, prueba e instala.
perl -MCPAN -e "install DBI"
perl -MCPAN -e "install DBD::Informix"
El problema es que si hay un error no sabemos que paso y se puede quedar ciclado preguntando lo mismo. Si eres novato como yo en esto del CPAN mejor instala cada paquete en forma manual.
DBI
Data Base Interface
Esta es la parte comun que usan todos los manejadores de bases de datos. Para ser exactos esta es la interfase invocada por nuestros programas que a su vez es la encargada de invocar al manejador correspondiente de cada base de datos.
Obtenemos la ultima version del modulo del repositorio de CPAN:
cd $HOME_SRC
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.46.tar.gz
Extraemos su contenido y nos cambiamos al directorio recien extraido:
tar xvfz DBI-1.46.tar.gz
cd DBI-1.46
Primero hay que generar el archivo Makefile en base al script Perl llamado Makefile.PL. Esto reemplaza al comando ./configure usual en los programas GNU normales.
perl Makefile.PL
Una vez configurado el modulo en base a nuestra instalacion de Perl, ya podemos crear el modulo y verificar que haya quedado bien:
make
make test
Si todo es correcto, ya se puede instalar en el Perl, esto lo tiene que hacer el super usuarop.
su -c "make install"
DBD::Informix
Data Base Driver for Informix
El modulo del manejador para informix requiere tener instalado otro modulo para su correcta instalacion.
A continuacion de una manera rapida los pasos para descargar e instalar este modulo mandatorio.
cd $HOME_SRC
wget http://search.cpan.org/CPAN/auth ... Install-0.61.tar.gz
tar xvfz ExtUtils-AutoInstall-0.61.tar.gz
cd ExtUtils-AutoInstall-0.61
Este modulo a su vez tiene otras dependencias, pero como son opcionales vamos a ignorarlas. No se olvide de decir que 'N' cuando pregunten si queremos instalarlas automaticamente.
perl Makefile.PL
*** ExtUtils::AutoInstall version 0.61
*** Checking for dependencies...
[Core Features]
- Cwd                 ...loaded. (2.06)
- Carp                ...loaded. (1.01)
- ExtUtils::Manifest  ...loaded. (1.38)
- ExtUtils::MakeMaker ...loaded. (6.03)
[CPANPLUS Support]
- CPANPLUS            ...missing. (would need 0.043)
==> Auto-install the 1 optional module(s) from CPAN? [n] n
[Nondecimal version number support]
- Sort::Versions      ...missing. (would need 1.2)
==> Auto-install the 1 optional module(s) from CPAN? [n] n
*** ExtUtils::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for ExtUtils::AutoInstall
make
make test
su -c "make install"
Ahora si, ya instalada la dependencia mandatoria, procedemos a instalar el manajeador para Informix.
cd $HOME_SRC
wget http://search.cpan.org/CPAN/auth ... rmix-2003.04.tar.gz
Extraemos el contenido del modulo y nos cambiamos al directorio recien extraido:
tar xvfz DBD-Informix-2003.04.tar.gz
cd DBD-Informix-2003.04
Para su configuracion este paquete requiere que ya este instalado el CSDK y que exista la base de datos de dmeostracion, la busca con el nombre 'stores' por lo cual hay que poner una variable de medio ambiente para que tome la que tenemos creada de pruebas en el servidor (con el nombre 'stores7'):
export DBI_DBNAME=stores7
De la misma manera se recomienda decirle que no a la instalacion de los modulos opcionales:
perl Makefile.PL
*** ExtUtils::AutoInstall version 0.61
*** Checking for dependencies...
[Core Features]
- DBI ...loaded. (1.46 >= 1.33)
[High Resolution Timing]
- Time::HiRes ...missing.
==> Auto-install the 1 optional module(s) from CPAN? [y] n
*** ExtUtils::AutoInstall configuration finished.
Subroutine main::WriteMakefile redefined at /usr/lib/perl5/site_perl/5.8.0/ExtUtils/AutoInstall.pm line 487, line 1.

Configuring IBM Informix Database Driver for Perl Version 2003.04 (2003-03-05) (aka DBD::Informix)
You are using DBI version 1.46 and Perl version 5.008
Remember to actually read the README file!

Perl: perl5.008 i386-linux-thread-multi dl_dlopen.xs
System: linux stripples.devel.redhat.com 2.4.21-1.1931.2.382.entsmp #1 smp wed aug 6 17:18:52 edt 2003 i686 i686 i386 gnulinux
Compiler: gcc -O2 -g -pipe -march=i386 -mcpu=i686 -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm

Using IBM Informix CSDK Version 2.81, IBM Informix-ESQL Version 9.53.UC3 from /home/informix

Beware: DBD::Informix is not yet aware of all the new IUS data types.

Assert macro will be disabled!

lib/DBD/Informix/Defaults.pm written OK
esqlvrsn.h written OK
esqlinfo.h written OK
Testing whether your Informix test environment will work...
ESQLTEST Program Running:
@(#)$Id: esqltest.ec,v 100.3 2002/02/08 22:49:23 jleffler Exp $
        $INFORMIXDIR is set to '/home/informix'.
        $INFORMIXSERVER is set to 'adela_n'.
        $DBI_DBNAME set to 'stores7'.
        $DBD_INFORMIX_DATABASE unset - defaulting to 'stores7'.
        $DBD_INFORMIX_DATABASE2 unset - defaulting to 'stores7'.
        $DBD_INFORMIX_USERNAME is unset.
        $DBD_INFORMIX_USERNAME2 is unset.
        $DBD_INFORMIX_PASSWORD is unset.
        $DBD_INFORMIX_PASSWORD2 is unset.
Testing connection to stores7
        CONNECT TO 'stores7' - no user info
Testing concurrent connection to stores7
        CONNECT TO 'stores7' - no user info
Your Informix environment is (probably) OK
WARNING: LD is not a known parameter.
Checking if your kit is complete...
Looks good
Warning: prerequisite Time::HiRes 0 not found.
Using DBI 1.46 (for perl 5.008 on i386-linux-thread-multi) installed in /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/auto/DBI/
Writing Makefile for DBD::Informix
Ya configurado procedemos a crearf el modulo, verificarlo e instalarlo en la distribucion del Perl:
make
make test
su -c "make install"
Ejemplos / Examples
Tomemos el siguiente programa de ejemplo:
cat demo.pl
#!/usr/bin/perl -w
#
use DBI;
my $dbh = DBI->connect("dbi:Informix:stores7")
    or die "Can't connect to Informix";
my $prep = "select call_code, code_descr from call_type";
my $sth = $dbh->prepare($prep);
$sth->execute( );
while  ($row = $sth->fetchrow_hashref()) {
   print "Row : $row->{call_code}	$row->{code_descr}
";
}
$dbh->disconnect;
exit;
Si lo ejecutamos y nos manda el siguiente error, significa que no esta instaslado el DBI, y tenemos que seguir los pasos anteriores para instalarlo.
./demo.pl
Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at ./demo.pl line 3.
BEGIN failed--compilation aborted at ./demo.pl line 3.
Si lo ejecutamos y nos manda el siguiente error significa que no esta instalado el DBD para Informix, tambien tenemos que seguir los pasos anteriores:
./demo.pl
install_driver(Informix) failed: Can't locate DBD/Informix.pm in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at (eval 1) line 3.
Perhaps the DBD::Informix perl module hasn't been fully installed,
or perhaps the capitalisation of 'Informix' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge.
at ./demo.pl line 4
Si lo ejecutamos y nuestra la informacion todo esta correctamente instalado:
./demo.pl
Row : B billing error
Row : D damaged goods
Row : I incorrect merchandise sent
Row : L late shipment
Row : O other
A continuacion voy a simular una falla para ver como nos manda los errores Perl, En este caso el servidor de base de datos no existe:
export INFORMIXSERVER=nada
./demo.pl
DBI connect('stores7','',...) failed: SQL: -25596: The INFORMIXSERVER value is not listed in the sqlhosts file or the Registry. at ./demo.pl line 4
Can't connect to Informix at ./demo.pl line 4.
finderr 25596
-25596 The INFORMIXSERVER value is not listed in the sqlhosts file or the Registry.

The default database server name that the INFORMIXSERVER environment variable specifies must be a valid database server name in the file $INFORMIXDIR/etc/sqlhosts on UNIX or the registry on Windows. Check that the specified server is listed in the sqlhosts file or the registry.

TOP

发新话题