• Publicidad

Script de Perl sobre Apache2 en Ubuntu 8.10

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Script de Perl sobre Apache2 en Ubuntu 8.10

Notapor rodolfojavier1982 » 2008-12-31 15:43 @696

Antes que nada, sé que hay muchísimos temas Threads sobre este tema abiertos, creo haber leído todos pero no pude solucionar mi problema.

El tema es que soy muy nuevo en esto y quiero aprender a programar con Perl sobre HTML.

Si creen conveniente eliminar este thread debido a que hay muchísimos similares o moverlo lo entenderé...

Tengo instalado Apache2 y quiero ejecutar un script, utilicé entre otros el que dan como ejemplo básico.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
# CGI MINIMO
# Joaquin Ferrero. 2006.
# Este cgi sirve para comprobar si el servidor funciona con Perl+CGI
#
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);

print
    header,
    start_html('CGI MINIMO'),
    h1('CGI MINIMO'),
    hr,
    p("Si ves este texto es que SI esta funcionando bien"),
    hr;

# Aqui sacamos la lista de los parametros
# en caso de que le haya sido pasado alguno
my @parametros = param();
foreach my $par ( @parametros ) {
        print p($par);
        print blockquote(param( $par ));
}

print end_html;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


En el archivo apache2.conf agregué estas líneas al final.
Código: Seleccionar todo
# Agregamos las siguientes líneas al final del archivo

AddHandler cgi-script .cgi
<Files ~ “\.pl$”>
    Options +ExecCGI
</Files>
<Files ~ “\.cgi$”>
    Options +ExecCGI
</Files>

#AGREGUE DIRECTORIO PARA CGI ELIMINAR SI NO HACE NADA
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options Indexes Includes ExecCGI
    Order allow,deny
    Allow from all
</Directory>


Copié el archivo ejemplo.pl en dos lugares y le dí todos los permisos, lo puse en /usr/lib/cgi-bin y en /var/www/cgi-bin.

Lo intenté ejecutar en el navegador (Opera y FireFox 3) desde http://127.0.0.1/cgi-bin/ejemplo.pl

Y me tira el siguiente error...
Código: Seleccionar todo
Internal Server Error

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

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0 Server at 127.0.0.1 Port 80


En el archivo error.log las últimas entradas que aparecen son:
Código: Seleccionar todo
[Wed Dec 31 18:17:10 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/lib/cgi-bin/
[Wed Dec 31 18:17:18 2008] [error] [client 127.0.0.1] (13)Permission denied: exec of '/usr/lib/cgi-bin/ejemplo.pl' failed
[Wed Dec 31 18:17:18 2008] [error] [client 127.0.0.1] Premature end of script headers: ejemplo.pl
[Wed Dec 31 18:19:47 2008] [error] [client 127.0.0.1] (13)Permission denied: exec of '/usr/lib/cgi-bin/basico.pl' failed
[Wed Dec 31 18:19:47 2008] [error] [client 127.0.0.1] Premature end of script headers: basico.pl
[Wed Dec 31 18:19:52 2008] [error] [client 127.0.0.1] script not found or unable to stat: /usr/lib/cgi-bin/basicao.pl
[Wed Dec 31 18:19:56 2008] [error] [client 127.0.0.1] (13)Permission denied: exec of '/usr/lib/cgi-bin/basico.pl' failed
[Wed Dec 31 18:19:56 2008] [error] [client 127.0.0.1] Premature end of script headers: basico.pl
[Wed Dec 31 18:26:48 2008] [error] [client 127.0.0.1] (13)Permission denied: exec of '/usr/lib/cgi-bin/ejemplo.pl' failed
[Wed Dec 31 18:26:48 2008] [error] [client 127.0.0.1] Premature end of script headers: ejemplo.pl
[Wed Dec 31 18:28:39 2008] [error] [client 127.0.0.1] script not found or unable to stat: /usr/lib/cgi-bin/ejemploHTML.html
[Wed Dec 31 18:29:42 2008] [error] [client 127.0.0.1] File does not exist: /var/www/ejemploHTML.html


Por favor, ¿alguien me podría ayudar? Espero ansiosamente cualquier respuesta...

Gracias por su tiempo.
rodolfojavier1982
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-12-31 14:28 @644

Publicidad

Notapor explorer » 2008-12-31 18:09 @798

Bienvenido a los foros de Perl en Español, rodolfojavier1982.

Por lo que se ve en el fichero de log, el Apache parece que ya tiene definido el directorio /usr/lib/cgi-bin como repositorio para guardar allí los scripts, por lo que entonces no necesitas definir otro con el <Directory>.

Allí veo que a las 18:19:56 lo ejecutaste, pero el servidor web no tenía permiso de ejecución del programa.

Lo ideal es que el programa tenga permisos así:

Código: Seleccionar todo
# ls -la /usr/lib/cgi-bin/
total 104
drwxr-xr-x 59 root     root     20480 2008-12-29 17:33 ../
-rwx------  1 www-data www-data  7345 2008-12-31 18:13 basico.pl
drwxr-xr-x  2 root     root      4096 2008-12-31 18:13 ./

Es decir: el usuario que ejecuta el servidor web (en este caso www-data) debe tener permiso de ejecución del programa. Para ello se puede hacer de varias formas:

El programa pertenece al usuario www-data y tiene permisos de ejecución:
Código: Seleccionar todo
-rwx------  1 www-data www-data  7345 2008-12-31 18:13 basico.pl


El programa no pertenece al usuario www-data, pero sí tiene permisos de ejecución para todos:
Código: Seleccionar todo
-rwxr-xr-x  1 nobody nogroup  7345 2008-12-31 18:13 basico.pl


El programa no pertenece al usuario www-data, pero sí tiene permisos de ejecución para el grupo al que pertenece www-data (que en este caso también se llama www-data):
Código: Seleccionar todo
-rwxr-x---  1 nobody www-data 7345 2008-12-31 18:13 basico.pl


Y alguna más, pero estas son las más importantes.

Naturalmente, hay que asegurarse que /usr/lib/cgi-bin también tiene permisos de lectura y ejecución para todos (o al menos para el usuario www-data), para que www-data pueda entrar en él.
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

Gracias!

Notapor rodolfojavier1982 » 2009-01-03 13:29 @603

¡Muchísimas gracias, explorer!

Pude ejecutar los archivos .pl desde el navegador (Opera y Firefox).

Lo que hice, como decías, fue cambiar los permisos de la carpeta /usr/lib/cgi-bin. Le di todos los permisos para todos los usuarios: sudo chmod 777 /usr/lib/cgi-bin y también hice los mismos con los archivos que había creado en esta carpeta, la mayoría .pl.
Estando en la carpeta /usr/lib/cgi-bin: sudo chmod 777 *

Puede que no sea lo más conveniente dar todos los permisos a todos los usuarios, pero como es solo para aprender a programar en este lenguaje, por ahora lo dejo así.

¡De nuevo, Muchas Gracias!
rodolfojavier1982
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-12-31 14:28 @644

Notapor explorer » 2009-01-03 13:52 @619

Efectivamente, es la peor solución de todas. :)

Para saber qué usuario es el que ejecuta el servidor web, te vale con ejecutar el comando ps aux.
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


Volver a Web

¿Quién está conectado?

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