• Publicidad

Inclusión de bibliotecas antes de llamar a un pl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Inclusión de bibliotecas antes de llamar a un pl

Notapor slopal » 2006-01-19 07:32 @355

Buenas, tengo este shellscript:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. #!/bin/sh
  2.  
  3. LD_LIBRARY_PATH=/usr/local/freetype-2.0.5/lib
  4. export LD_LIBRARY_PATH
  5.  
  6. /usr/usuaris/it/gralggen/cgi-bin/freq/imatge.cgi.pl
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Necesito poder cargar esas librerías desde un cgi en Perl (que llamaba a este script). He probado con el comando system(...) y no me ha funcionado, a lo mejor hago algo mal. No sé :cry:

Sobre todo me interesan las dos primeras líneas. Porfaaaaaaaaaa :cry:

¡¡¡Muchas gracias!!!

Edito: perdona lo de los asteriscos. Es porque lo copie de otro sitio que lo tenía puesto así :oops: pero es como lo pongo ahora y en sh sí que funciona. Voy a probarlooooo. mercis
Última edición por slopal el 2006-01-19 12:11 @549, editado 1 vez en total
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Publicidad

Re: Ayuda para Traducir de SH a Perl - librerías

Notapor explorer » 2006-01-19 11:42 @529

Prueba con esto, pero no estoy muy seguro...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #/usr/bin/perl
  2. $ENV{LD_LIBRARY_PATH} = "/usr/local/freetype-2.0.5/lib";
  3. system("/usr/usuaris/it/gralggen/cgi-bin/freq/imatge.cgi.pl");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2006-01-19 14:19 @638, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-01-19 14:00 @625

No me funciona así :cry: No me carga las librerías haciendo

LD_LIBRARY_PATH=/usr/local/freetype-2.0.5/lib
export LD_LIBRARY_PATH

Me lo miraré más a fondo pero... lo veo muy negro :(
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Inclusión de bibliotecas antes de llamar a un pl

Notapor explorer » 2006-01-19 14:23 @641

Necesito más datos...

¿Qué error te da?

¿El script imatge.cgi.pl qué módulos tiene para que necesite acceder a la biblioteca freetype?

¿Conseguiste hacerlo funcionar antes desde el sh?

¿El usuario bajo el que corre el servidor web tiene permisos de lectura al subdirectorio donde están las librerías?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-01-19 15:14 @676

A ver, te explico por partes :P

- el script sh, no lo "hice yo". Lo hizo uno de los que están de administradores del servidor como chapucilla temporal para que pudiera funcionar (y lo hace) y ya lo adaptarás... ¡je,je,je!

- la cosa funciona así:

* tengo un html que llama a un script: freq.cgi

* el freq.cgi genera una web con varias cosas, entre ellas una imagen (como recordarás :P) y para llamar al cgi que crea la imagen pues hice un <img src...... imatge.cgi....>. Para poder ejecutarla tenía que llamar a la librería GD que no tenía ni idea de dónde estaba... y buscando con este chico encontramos la ruta, pero para que funcionara, necesitaba un script intermedio que cargara en esa variable la ruta.

* entonces la cosa quedo en:

html -> freq.cgi -> carrega_moduls_imatge.sh --> crea_imatge.cgi.pl (ahora están los nombres bien, ¡¡y reales!!)

De esta manera sí que funciona... perfecto (aunque sea una chapucilla), PERO me interesaría pasar unos parámetros entre freq.cgi y crea_imatge.cgi.pl para construir la imagen con ellos... y no sé muy bien cómo hacerlo con un sh por medio (en cambio entre cgi y cgi CREO que sí :P creo... que ya veremos...) pero al menos para ponerlo elegante.

¡Eh!, que si sabéis cómo pasarle los parámetros entre lo que ya está hecho, yo encantada... y vivan las chapuzas :roll:

(en teoría quiero pasar dos variables y un array, por si hay alguna sugerencia...)

explorer... al final me odiarás :P Muchas gracias por tu ayuda :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Inclusión de bibliotecas antes de llamar a un pl

Notapor explorer » 2006-01-19 16:02 @709

A ver... varias cosas... Primero, terminar la "chapuza" para que al menos, funcione.

Puedes ejecutar el script en sh con los argumentos que luego quieras que el segundo perl coja.

Me explico... freq.cgi llama a carrega_moduls_imatge.sh con los argumentos que quieres pasar luego a imatge.pl. Lo harás con system("carrega_moduls_imatge.sh arg1 arg2 componentes de la lista");

Luego, en carrega...sh, en la línea que llamas a imatge.cgi.pl, lo haces con

/usr/usuaris/it/gralggen/cgi-bin/freq/imatge.cgi.pl "$*"

y de esa manera le estás pasando todos los argumentos a imatge.pl.

Dentro de él, los lees accediendo al array @ARGV.

Para el tema de la librería...

Si al hacer un

perl -MGD -e 1

te da un error, es que la librería está mal instalada... eso de tener que indicar la posición de la librería a mano es que algo está mal...

Localiza el fichero GD.so dentro del sistema. Es la librería que necesita el módulo GD.pm a partir del cual se llaman al resto de librerías. Supongamos que está en /usr/lib/perl5/auto/GD/GD.so.

Haz luego un

ldd /usr/lib/perl5/auto/GD/GD.so

Saldrá el listado de librerías que GD.so necesita. Entre esas líneas, busca la del freetype. Sin hacer el export que hacías antes, dirá que la freetype no la encuentra.

Bien, tienes entonces dos opciones:
  • O copias la librería libfreetype* a uno de los directorios que el sistema reconoce como repositorios de librerías, por ejemplo, /usr/lib,
  • O editas el fichero /etc/ld.so.conf y agregas una línea que se llame /usr/local/freetype-2.0.5/lib
y a continuación ejecutar el comando ldconfig.

Al final, vuelve a ejecutar el comando ldd al fichero GD.so, como antes, y ver si el sistema localiza la freetype.

Si lo hace, entonces tampoco te fallará el comando perl -MGD... de antes.

Y si eso no falla, entonces ya te sobran las líneas LD_LIBRARY_PATH...

Si todo va bien... luego podrás eliminar el script sh y el perl freq.cgi, para tenerlo todo en un sólo programa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-01-23 14:55 @663

Hola

Hasta hoy no me he podido poner con el tema... Primeras dudas, solo con el principio :oops::

explorer escribiste:freq.cgi llama a carrega_moduls_imatge.sh con los argumentos que quieres pasar luego a imatge.pl. Lo harás con system("carrega_moduls_imatge.sh arg1 arg2 componentes de la lista");
Yo para llamar al sh hacía print"<img src="\/cgi-bin\/freq\/carrega_moduls_imatge.cgi" width="640" height="10">"; para que pintara la imagen directamente.

Haciendo un system("./carrega_moduls_imatge.cgi"); o system("carrega_moduls_imatge.cgi"); (he probado las dos opciones por si hacia falta especificar que ejecute...) me sale el mismo error:

Insecure $ENV{PATH} while running with -T switch at /var/www-cgi/gralggen.lsi.upc.es/freq/freq.cgi line 249.

Si quito la opción -T de la cabecera, directamente no hace nada. ¡je,je!

Lo he probado sin argumentos para ver los posibles errores y ahí están :S ¡jo...! ¿Por qué puede ser?
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Inclusión de bibliotecas antes de llamar a un pl

Notapor explorer » 2006-01-23 16:11 @716

Al principio del programa, inicializa la variable de entorno $PATH a un valor seguro, y de esa manera, el switch -T dejará de molestarte:

$ENV{PATH} = '/var/www-cgi/gralggen.lsi.upc.es/freq/';

Debes poner su valor al lugar donde están los programas que luego ejecutarás con system. La explicación la tienes, claro está, en la documentación.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-01-25 10:47 @491

Pues no me funciona poniendo eso... Ni poniendo la ruta donde tengo los scripts (el mismo donde tengo el primero).

Es más, la ruta donde dice que da error ni la encuentro :S

¿Por qué podría ser? Tendrá que ver con temas de permisos de directorios?

Es que lo más raro es que esa ruta se supone que no existe... :?:

:arrow: es curioso... los permisos de mi directorio: .../cgi-bin/freq sí están a 777. "funciona" (pero me sale el error de ENV con esa ruta rara...).

En cambio si los pongo a 755 (como están todos los demás) y ejecuto en vez de trabajar el cgi ¡¡¡¡me "salta" un aviso como si me lo quisiera descargar el fichero freq.cgi!!!! Y si le doy a Ok me sale un fichero que pone unicamente %PNG.

A ver si alguien tiene telepatía con mi servidor y me orienta :$ ¡Gracias!

Última hora respecto a permisos... He hecho unas modificaciones y sin lanzar el system(.....) me funciona poniendo el directorio a 755. En cambio si en vez de hacer print"<img src=\"\/cgi-bin\/freq\/carrega_moduls_imatge.cgi\" width=\"640\" height=\"10\">"; hago el system("carrega_moduls_imatge.cgi");, estoy como antes con 755: me salta lo de descargarlo y con 777 me salta el error ese (que supongo que tiene que ver con que el directorio es inseguro o algo así -por lo que he leído en el enlace que me pasaste...) así que me gustaría probar con 755 pero no sé por qué me salta eso :______(


¿O... alguna otra idea para pasar los parámetros o traducir la llamada a librerías del script SH?

Intentaré por otro lado lo de gd.so (que yo encuentro libgd.so supongo que será lo mismo) pero hay unas 5 versiones de GD... ¡qué gran servidor...! :x
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Inclusión de bibliotecas antes de llamar a un pl

Notapor explorer » 2006-01-25 17:08 @756

slopal escribiste:Pues no me funciona poniendo eso... ni poniendo la ruta donde tengo los scripts (el mismo donde tengo el primero).

Es más, la ruta donde dice que da error ¡¡¡ni la encuentro :S!!!
¿Es posible que la ruta del error que te da sea la de un módulo?

slopal escribiste:¿Por qué podría ser? ¿Tendrá que ver con temas de permisos de directorios?

Es que lo más raro es que esa ruta se supone que no existe... :?:
Si estás completamente seguro de que no existe, entonces la ruta que estás viendo será una ruta generada por el servidor web.

¿Quien te da la ruta? ¿El servidor web o el cgi si lo ejecutas directamente?

slopal escribiste::arrow: es curioso... los permisos de mi directorio .../cgi-bin/freq si están a 777 "funciona" (pero me sale el error de ENV con esa ruta rara...) en cambio si los pongo a 755 (como están todos los demás) y ejecuto en vez de trabajar el cgi ¡¡¡¡me "salta" un aviso como si me lo quisiera descargar el fichero freq.cgi!!!! Y si le doy a Ok me sale un fichero que pone únicamente %PNG
Suena a que te has olvidado mandar antes del contenido de la imagen el Content-Type adecuado...

slopal escribiste:Última hora respecto a permisos... He hecho unas modificaciones y sin lanzar el system(.....) me funciona poniendo el directorio a 755, en cambio si en vez de hacer print"<img src="\/cgi-bin\/freq\/carrega_moduls_imatge.cgi" width="640" height="10">"; hago el system("carrega_moduls_imatge.cgi");, estoy como antes con 755: me salta lo de descargarlo y con 777 me salta el error ese (que supongo que tiene que ver con que el directorio es inseguro o algo así -por lo que he leído en el enlace que me pasaste...) así que me gustaría probar con 755 pero no sé por qué me salta eso :______(
Debes comprobar que:
  1. El directorio donde están los scripts tiene permiso de lectura y ejecución para el usuario del sistema bajo el que se se está ejecutando el servidor web. Puede ser el usuario httpd, www-data, apache, etc., etc. Haz un ps para saberlo
  2. Los scripts deben tener permiso de lectura y ejecución para ese usuario o para el grupo al que pertenece ese usuario
  3. El directorio debe estar indicado como de repositorio de cgi ejecutables en el fichero de configuración del servidor web
  4. Las extensiones de los scripts (.cgi, por ejemplo), deben también haber sido declarados como indicativos de pertenecer a ficheros ejecutables, en el fichero de conf. del servidor web
  5. En el caso de ser scripts con el bit de setuid puesto, el usuario destino del cambio de usuario debe poder cumplir con los requisitos de ejecución anteriormente descritos.

slopal escribiste:¿O.. alguna otra idea para pasar los parámetros o traducir la llamada a librerías del script SH?
Intentaré por otro lado lo de gd.so (que yo encuentro libgd.so supongo que será lo mismo) pero hay unas 5 versiones de GD... ¡Qué gran servidor...! :x
En el mensaje del día 19 te dí dos soluciones para ir eliminando pasos y poner lo del paso de argumentos.

¿Cuál es la que has probado?

Me harían falta más detalles para saber lo que pasa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado