• Publicidad

Ejecución de Perl en Linux

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ejecución de Perl en Linux

Notapor Negrazo » 2007-07-08 22:51 @994

Hola a todos:
Figúrense que tengo varios scripts que desarrollé en Perl en Windows XP y utilizando MySQL y todos me funcionan bien.

Ahora necesito que esos mismos scripts funcionen en un entorno de Linux Debian 3.1(sarge); ya le intenté por todos lados y no funcionan; chequé los permisos de ejecución y están bien. Lo último que recibí es lo siguiente:

"La opción ExecCgi esta en off para este directorio" o algo parecido.

Lo primero, mis scripts no son de extensión .cgi, son .pl.

Y los he instalado en varios directorios recibiendo varios errores diferentes.

¿Qué me falta por hacer?
¿Dónde los debo instalar?
Alguna idea.
Gracias de antemano.

Negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Publicidad

Notapor kidd » 2007-07-09 08:46 @407

Hola:

Hay tres cosas básicas que debes de verificar en tus scripts:

1. Verifica que el shebang, es decir la primera línea de tus scripts, contenga la ruta correcta al Perl en tu servidor. La ruta más común es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


2. En Windows los finales de línea son distintos que en Linux, así que cuando hagas upload verifica que lo hagas en tipo ASCII.

3. Checa que tanto el directorio como el script tengan los permisos adecuados para poder ejecutarse.


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2007-07-09 14:00 @625

El mensaje de error dice que has intentado ejecutar tus scripts como CGI en un directorio que no tiene permisos de ejecución. Entonces debes responderte a estas preguntas:

* ¿Son CGI mis scripts? ¿Es que no puedo/debo/quiero ejecutarles de otra manera? ¿Cómo les ejecutaba en Windows? Pues entonces ejecútalos de la misma manera.
* Si son CGI, los habrás instalado en un directorio visible por el servidor web. Bueno, pues el error indica que a ese directorio le debes poner el ExecCGI a On. La extensión .cgi o .pl es secundaria, pero para el servidor web puede ser importante. Por ejemplo, en la mayoría de las instalaciones Apache, cuando encuentra un fichero .cgi intentará ejecutarlo (y si se cumplen el resto de condiciones para ejecutar CGI en ese directorio, claro).
* Si no son CGI, no los ejecutes como si fueran CGI. Olvídate del servidor web y del cliente web. Arranca una pantalla de terminal y ejecútalos directamente.

Por lo que veo creo que si has escrito los programas en forma de CGI, por lo que entonces lo que falta es configurar bien el servidor web y/o colocar los scripts en un directorio donde sepamos que podemos ejecutarlos. En las últimas instalaciones Apache, vienen configurados para que /usr/lib/cgi-bin sea el único directorio donde esté permitido ejecutar cosas, por lo que tienes dos opciones: o colocas tus programas ahí o vas a la configuración de Apache e indicas otro directorio donde sí puedes ejecutarlos.

Ejemplo, por defecto aparece en httpd.conf este párrafo:

Código: Seleccionar todo
### CGI's
AddHandler cgi-script .cgi .sh .pl .ida
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ScriptAlias /cgi/     /usr/lib/cgi-bin/
<Directory /usr/lib/cgi-bin/>
    AllowOverride None
    Options ExecCGI FollowSymLinks -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>
que quiere decir que sólo se pueden colocar ejecutables en /usr/lib/cgi-bin y desde el cliente http se puede referenciar a ese directorio como '/cgi-bin/...' o '/cgi/...'. La opción ExecCGI es la que permite ejecutar scripts en ese directorio. Y los scripts permitidos tienen la extensión indicada por la línea AddHandler.

Si, además, quisiéramos darle a los usuarios del sistema (que cada uno reside en su correspondiente directorio /home/usuario/) la posibilidad de ejecutar los scripts que residan en su ~/public_html/cgi privado, deberemos añadir estas líneas:

Código: Seleccionar todo
<Directory /home/*/public_html/cgi>
        AllowOverride Options
        Options +ExecCGI
        SetHandler cgi-script
</Directory>

Como se ve, estamos indicando un directorio con un camino absoluto, activando la opción ExecCGI e indicando que se active la ejecución de scripts para todo tipo de ficheros que se encuentren ahí.

En tu caso, sólo tendrás que indicar el camino completo al directorio donde se encuentren tus programas.

Resumen: leete la configuración del Apache en donde quieres ejecutarlos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Negrazo » 2007-07-09 23:13 @009

Estimados kidd y explorer:
Antes que nada, gracias por tratar de ayudarme con este problema que me ha traído preocupado por varios días.

Traté de seguir sus recomendaciones e hice lo siguiente:

1.- Chequé con 2 scripts de nombres envvars.pl e index.pl y ambos tienen en la 1er línea el shebang ==> #!/usr/bin/perl

2.- Los metí en un directorio llamado:
/var/www/html
y tanto a los scripts como al Directorio les di el permiso de ejecución, chmod +x.

3.- Todo fue pasado de Windows a Linux utilizando el comando mount desde la partición 'hda1'

4.- En Windows yo los ejecutaba dentro de una aplicación gráfica y lo hacía a través del Internet Explorer usando los servicios del Internet Informacion Services.

5.- Chequé el archivo httpd.conf(solo encontré uno) y estaba vacío, por lo que todo lo que he hecho ha sido en el archivo /etc/apache2/apache2.conf y en otro archivo /etc/apache2/sites-available/default, este último creo que es algo así como un servidor virtual.

6.- Y lo último que me ha pasado es lo siguiente:
Si ejecuto : perl envvars.pl o perl index.pl
desde una terminal(bash) me funcionan correctamente.
Pero si lo hago con un browser como Mozilla o el Ephifany, yo tecleo httpd://localhost/index.pl o httpd://localhost/envvars.pl y en ambos casos recibo el mensaje:

Download the File?
"It is not possible to view this file because there is no application installed that can open it.
You can save it instead."

Save as Cancel Download

Por lo que entiendo, algo de lo que hice ya le indicó la ruta correcta al Browser de donde están los scripts, pero por algún problema no los puede ejecutar.

¿Alguna otra idea o algo que hice mal?

Gracias nuevamente.
Negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Notapor kidd » 2007-07-10 08:37 @401

Hola:

Dentro del directorio donde tienes tus scripts crea un archivo .htaccess con la siguiente información:

Código: Seleccionar todo
       
Options +ExecCGI
AddHandler cgi-script cgi pl



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor Negrazo » 2007-07-10 10:58 @499

Gracias kidd:
Ahora mismo me cambio a Linux y lo voy a probar.
Luego te platico como me fue.

Saludos.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Notapor Negrazo » 2007-07-10 15:41 @695

Estimado kidd:
Ya hice lo que me recomendaste y fíjate lo que paso:

Al llamar uno de los scripts a través de un browser recibo el mensaje:

"The server encountered an internal error or misconfiguration and was unable to complete your request."

Y en el error-log encontré lo siguiente:
....... .htaccess: Options not allowed here.

Estas directrices que tu me indicaste yo ya las tengo en el archivo "apache2.conf" y pues ya ni se, a la mejor están chocando con lo que puse aquí.
¿Qué estoy haciendo mal?

negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Notapor explorer » 2007-07-10 16:13 @717

El mensaje de error del Apache indica que en apache2.conf (o en http.conf) hay un sitio donde dice que los ficheros .htaccess no pueden sobreescribir los permisos, por tenerlos cerrados para el directorio en que se encuentra el fichero.

En el manual de Apache (en Español) sobre la directiva AllowOverride lo explica bien:
Cuando el valor de esta directiva es None, entonces los ficheros .htaccess son ignorados completamente. En ese caso, el servidor ni siquiera intentará leer los archivos .htaccess existentes.


Un ejemplo:

En el fichero /etc/apache2/sites-available/default se indica:

DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
que, además de indicar el lugar del disco donde se encuentra la raíz del web, está protegiendo todo el disco contra cambios de los permisos (AllowOverride None) indicados por los ficheros .htaccess que encuentre. Así que de esta manera está prohibiendo el uso de ficheros .htaccess en todo el disco.

Esa es la explicación de que no te vale solo con crear un fichero .htaccess y poner una serie de atributos en él. Debes indicar al servidor web, además, que en ese directorio está permitido hacer esos cambios con el fichero .htaccess.

Eso se puede indicar yendo al apache2.conf o http.conf y buscando por unas líneas como las de antes. Cuando las veas y que además el Directory haga referencia al directorio en donde te encuentras (o uno de nivel superior), cambias el 'None' por un 'Options FileInfo'. De esa manera sí que Apache leerá el fichero .htaccess y éste podrá hacer cambios en el comportamiento del directorio.

Otra opción muchíiiiisimo más cómoda, es localizar dónde tiene definido el servidor web el directorio para los cgi. Por ejemplo, en mi servidor, en el fichero httpd.conf pone lo que te he puesto unos mensajes más arriba, por lo que se deduce que el directorio cgi es el /usr/lib/cgi-bin, así que allí colocaré los cgi. Les daré permisos de ejecución, y listo.

Notar que, en algunas distribuciones Linux (pocas), tienen desactivado ese directorio cgi, así que habrá que activarlo sin más que poner unas líneas Options ExecCGI dentro del Directory apropiado.

Reiniciar el servidor y listo. (Esperemos)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Negrazo » 2007-07-11 11:28 @519

Para explorer:

Amigo, eres un "Fregón" como dicen acá en mi tierra.
Ya quedó resuelto.

Efectivamente tenía el comando AllowOverride None y lo cambié y ya funcionó.

Fíjate que ubiqué mis scripts en /var/www/html/ y allí sí me funcionan, porque lo intenté en /usr/lib/cgi-bin/ y no me funcionan, no sé por qué, pero lo voy a seguir intentando.

Caso cerrado y nuevamente, muchas gracias, explorer.

Negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados