邪恶八进制信息安全团队技术讨论组's Archiver

ring04h 2006-3-14 13:00

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

<P>信息来源:邪恶八进制信息安全团队</P>
<DIV id=art style="MARGIN: 15px; LINE-HEIGHT: 150%"><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm">http://www.lacorona.com.mx/fortiz/informix/perl.htm</A>
<P>
<H1 align=center><EM><FONT size=3>Configuracion de Perl/Informix's Setup</FONT></EM></H1>
<TABLE width="100%" border=0>
<TBODY>
<TR>
<TD width="50%">Contenido/contents:<BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#intro">Intro</A><BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#dbi">DBI</A><BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#intro2">Intro 2</A><BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#cpan">CPAN</A><BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#csdk">CSDK</A><BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#dbd">DBD::Informix</A><BR><A href="http://www.lacorona.com.mx/fortiz/informix/perl.htm#ejem">Ejemplos / Examples</A><BR></TD>
<TD vAlign=top align=right><A href="http://www.lacorona.com.mx/fortiz/">Pagina principal/Home page </A></TD></TR></TBODY></TABLE>
<HR>

<CENTER>
<TABLE width="100%" border=1><><A name=intro></A></>
<TBODY>
<TR>
<TH colSpan=2>Intro</A /> </TH></TR>
<TR>
<TD width="50%">Aunque prefiero PHP para el desarrollo de paginas Web, algunas cosas son mas sencillas de hacer en Perl. </TD>
<TD class=en>I prefer PHP por Web development, but some tasks are easier to do with Perl. </TD></TR>
<TR>
<TD>Para algunos scripts sencillos, hacer un programa x4GL es mucho codigo y con puro SQL en dbaccess queda muy feo el formato. </TD>
<TD class=en>For small command line scripts, doing a x4GL is a lot of code and using SQL con dbaccess only results in a ugly presentation. </TD></TR>
<TR>
<TD>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. </TD>
<TD class=en>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. </TD></TR>
<TR>
<TD>Por ese motivo, en este punto terminamos la introduccion a Perl y nos saltamos a la instalacion del CSDK de Informix. </TD>
<TD class=en>That's why this ends the first part of the Perl intro, and we jump into the Informix CSDK instalation. <A name=csdk></A></TD></TR>
<TR>
<TH colSpan=2><A href="http://www-306.ibm.com/software/data/informix/tools/csdk/">CSDK</A> </TH></TR>
<TR>
<TD width="50%">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. </TD>
<TD class=en>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. </TD></TR>
<TR>
<TD>Para una explicacion detallada de como efectuar la instalacion y configuracion, vea esta <A href="http://www.lacorona.com.mx/fortiz/informix/tcp.htm">pagina</A>. </TD>
<TD class=en>A detailed explanation of the steps for setting up CSDK see this <A href="http://www.lacorona.com.mx/fortiz/informix/tcp.htm">page</A>. </TD></TR>
<TR>
<TH colSpan=2>Intro 2</A /> <A name=intro2></A></TH></TR>
<TR>
<TD>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. </TD>
<TD class=en>Now, with CSDK already setup, we proced to install the Perl modules as user informix. </TD></TR>
<TR>
<TD class=user colSpan=2>su - informix<BR>export HOME_SRC=$INFORMIXDIR/perl<BR>mkdir $HOME_SRC<BR>cd $HOME_SRC<BR></TD></TR>
<TR>
<TD>Si el acceso a internet es via un servidor proxy no se olvide de declararlo en caso contrario no podras descargar los paquetes. </TD>
<TD class=en>If the access to INternet is thru a proxy server, don't forget to declare it, otherwise you can't download the packages. </TD></TR>
<TR>
<TD class=user colSpan=2>export HTTP_PROXY='http://192.168.1.1:3278' </TD></TR>
<TR>
<TD>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. </TD>
<TD class=en></TD></TR>
<TR>
<TD>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. </TD>
<TD class=en><A name=cpan></A></TD></TR>
<TR>
<TH colSpan=2><A href="http://www.cpan.org/">CPAN</A><BR><BIG>C</BIG>omprehensive <BIG>P</BIG>erl <BIG>A</BIG>rchive <BIG>N</BIG>etwork </TH></TR>
<TR>
<TD>Segun el <A href="http://www.cpan.org/misc/cpan-faq.html#What_is_CPAN">FAQ</A>, 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. </TD>
<TD class=en></TD></TR>
<TR>
<TD>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. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>perl -MCPAN -e "install DBI"<BR>perl -MCPAN -e "install DBD::Informix" </TD></TR>
<TR>
<TD>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. </TD>
<TD class=en><A name=dbi></A></TD></TR>
<TR>
<TH colSpan=2><A href="http://search.cpan.org/~timb/DBI-1.46/DBI.pm">DBI</A><BR><BIG>D</BIG>ata <BIG>B</BIG>ase <BIG>I</BIG>nterface </TH></TR>
<TR>
<TD>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. </TD>
<TD class=en></TD></TR>
<TR>
<TD>Obtenemos la ultima version del modulo del repositorio de CPAN: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>cd $HOME_SRC<BR>wget [url]http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.46.tar.gz[/url] </TD></TR>
<TR>
<TD>Extraemos su contenido y nos cambiamos al directorio recien extraido: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>tar xvfz DBI-1.46.tar.gz<BR>cd DBI-1.46<BR></TD></TR>
<TR>
<TD>Primero hay que generar el archivo Makefile en base al script Perl llamado Makefile.PL. Esto reemplaza al comando <I>./configure</I> usual en los programas GNU normales. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>perl Makefile.PL<BR></TD></TR>
<TR>
<TD>Una vez configurado el modulo en base a nuestra instalacion de Perl, ya podemos crear el modulo y verificar que haya quedado bien: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>make<BR>make test<BR></TD></TR>
<TR>
<TD>Si todo es correcto, ya se puede instalar en el Perl, esto lo tiene que hacer el super usuarop. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>su -c "make install"<BR><A name=dbd></A></TD></TR>
<TR>
<TH colSpan=2><A href="http://search.cpan.org/~johnl/DBD-Informix-2003.04/Informix.pm">DBD::Informix</A><BR><BIG>D</BIG>ata <BIG>B</BIG>ase <BIG>D</BIG>river for Informix </TH></TR>
<TR>
<TD>El modulo del manejador para informix requiere tener instalado otro modulo para su correcta instalacion. </TD>
<TD class=en></TD></TR>
<TR>
<TD>A continuacion de una manera rapida los pasos para descargar e instalar este modulo mandatorio. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>cd $HOME_SRC<BR>wget [url]http://search.cpan.org/CPAN/authors/id/A/AU/AUTRIJUS/ExtUtils-AutoInstall-0.61.tar.gz[/url]<BR>tar xvfz ExtUtils-AutoInstall-0.61.tar.gz<BR>cd ExtUtils-AutoInstall-0.61<BR></TD></TR>
<TR>
<TD>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. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>perl Makefile.PL </TD></TR>
<TR>
<TD colSpan=2><PRE>*** 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] <B>n</B>
[Nondecimal version number support]
- Sort::Versions      ...missing. (would need 1.2)
==> Auto-install the 1 optional module(s) from CPAN? [n] <B>n</B>
*** ExtUtils::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for ExtUtils::AutoInstall
</PRE></TD></TR>
<TR>
<TD class=user colSpan=2>make<BR>make test<BR>su -c "make install"<BR></TD></TR>
<TR>
<TD>Ahora si, ya instalada la dependencia mandatoria, procedemos a instalar el manajeador para Informix. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>cd $HOME_SRC<BR>wget [url]http://search.cpan.org/CPAN/authors/id/J/JO/JOHNL/DBD-Informix-2003.04.tar.gz[/url] </TD></TR>
<TR>
<TD>Extraemos el contenido del modulo y nos cambiamos al directorio recien extraido: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>tar xvfz DBD-Informix-2003.04.tar.gz<BR>cd DBD-Informix-2003.04<BR></TD></TR>
<TR>
<TD>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'): </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>export DBI_DBNAME=stores7<BR></TD></TR>
<TR>
<TD>De la misma manera se recomienda decirle que no a la instalacion de los modulos opcionales: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>perl Makefile.PL<BR></TD></TR>
<TR>
<TD colSpan=2>*** ExtUtils::AutoInstall version 0.61<BR>*** Checking for dependencies...<BR>[Core Features]<BR>- DBI ...loaded. (1.46 >= 1.33)<BR>[High Resolution Timing]<BR>- Time::HiRes ...missing.<BR>==> Auto-install the 1 optional module(s) from CPAN? [y] <B>n</B><BR>*** ExtUtils::AutoInstall configuration finished.<BR>Subroutine main::WriteMakefile redefined at /usr/lib/perl5/site_perl/5.8.0/ExtUtils/AutoInstall.pm line 487, <STDIN />line 1.<BR><BR>Configuring IBM Informix Database Driver for Perl Version 2003.04 (2003-03-05) (aka DBD::Informix)<BR>You are using DBI version 1.46 and Perl version 5.008<BR>Remember to actually read the README file!<BR><BR>Perl: perl5.008 i386-linux-thread-multi dl_dlopen.xs<BR>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<BR>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<BR><BR>Using IBM Informix CSDK Version 2.81, IBM Informix-ESQL Version 9.53.UC3 from /home/informix<BR><BR>Beware: DBD::Informix is not yet aware of all the new IUS data types.<BR><BR>Assert macro will be disabled!<BR><BR>lib/DBD/Informix/Defaults.pm written OK<BR>esqlvrsn.h written OK<BR>esqlinfo.h written OK<BR><PRE>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
</PRE>WARNING: LD is not a known parameter.<BR>Checking if your kit is complete...<BR>Looks good<BR>Warning: prerequisite Time::HiRes 0 not found.<BR>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/<BR>Writing Makefile for DBD::Informix<BR><PRE></PRE></TD></TR>
<TR>
<TD>Ya configurado procedemos a crearf el modulo, verificarlo e instalarlo en la distribucion del Perl: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>make<BR>make test<BR>su -c "make install"<BR><A name=ejem></A></TD></TR>
<TR>
<TH colSpan=2><A href="http://www.washington.edu/imap/">Ejemplos / Examples</A> </TH></TR>
<TR>
<TD>Tomemos el siguiente programa de ejemplo: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2><PRE>cat demo.pl
</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>#!/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;
</PRE></TD></TR>
<TR>
<TD>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. </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>./demo.pl<BR></TD></TR>
<TR>
<TD colSpan=2>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.<BR>BEGIN failed--compilation aborted at ./demo.pl line 3.<BR></TD></TR>
<TR>
<TD>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: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>./demo.pl<BR></TD></TR>
<TR>
<TD colSpan=2>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.<BR>Perhaps the DBD::Informix perl module hasn't been fully installed,<BR>or perhaps the capitalisation of 'Informix' isn't right.<BR>Available drivers: DBM, ExampleP, File, Proxy, Sponge.<BR>at ./demo.pl line 4<BR></TD></TR>
<TR>
<TD>Si lo ejecutamos y nuestra la informacion todo esta correctamente instalado: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>./demo.pl </TD></TR>
<TR>
<TD colSpan=2><PRE>Row : B billing error
Row : D damaged goods
Row : I incorrect merchandise sent
Row : L late shipment
Row : O other
</PRE></TD></TR>
<TR>
<TD>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: </TD>
<TD class=en></TD></TR>
<TR>
<TD class=user colSpan=2>export INFORMIXSERVER=nada<BR>./demo.pl </TD></TR>
<TR>
<TD colSpan=2>DBI connect('stores7','',...) failed: SQL: -25596: The INFORMIXSERVER value is not listed in the sqlhosts file or the Registry. at ./demo.pl line 4<BR>Can't connect to Informix at ./demo.pl line 4. </TD></TR>
<TR>
<TD class=user colSpan=2>finderr 25596 </TD></TR>
<TR>
<TD colSpan=2>-25596 The INFORMIXSERVER value is not listed in the sqlhosts file or the Registry.<BR><BR>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.<BR></TD></TR></TBODY></TABLE></CENTER></DIV>

页: [1]
© 1999-2008 EvilOctal Security Team