Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Cómo hago que mi servidor web me reconozca mis scripts Responder al tema
Nuevo tema


Página 1 de 2  [ 22 mensajes ]  Ir a página 1, 2  Siguiente
 
Nota 2012-02-01 01:16 @094

Perlero Nuevo
Registrado: 2012-02-01 00:50 @076
Mensajes: 2
Cómo hago que mi servidor web me reconozca mis scripts
Buenas. Me registré en el foro porque soy nuevo en esto y estuve navegando un poco para informarme y realicé preguntas a varias personas, pero no me dieron una solución a mi problema, que es: ¿cómo logro desde mi servidor web Apache2 en Ubuntu me ejecute los scripts .cgi en Perl? Luego de navegar un poco me encuentro con esto

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
## 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>

pero no sé en qué archivo del servidor se pone. Seguí navegando y me encuentro con una variante que es el archivo httpd.conf. Lo realicé pero no funciona o es que me falta algo.

Gracias de antemano. Espero encarecidamente su respuesta.


Nota 2012-02-01 08:44 @405
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
Bienvenido a los foros de Perl en español, guerrero12.

Supongamos que has instalado el Apache2 con el gestor de paquetes de Ubuntu (synaptic o aptitude). Entonces, como root, entras en el directorio /etc/apache2 (o parecido). Verás uno o dos archivos .conf. Generalmente, en el apache2.conf están las opciones generales del servidor web, mientras que en el httpd.conf estarán las más particulares (el fichero apache2.conf tendrá una línea Include httpd.conf con la que insertará las opciones particulares en el procesamiento general del fichero). En otras ocasiones, estará todo reunido en un solo archivo.

En cualquier caso, en uno de estos archivos deberá aparecer la configuración relativa a los CGI, que podrá ser algo parecida a lo que has escrito.

Más en detalle:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
  1. AddHandler cgi-script .cgi .sh .pl .ida
  2. ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  3. ScriptAlias /cgi/     /usr/lib/cgi-bin/
  4. <Directory /usr/lib/cgi-bin/>
  5.     AllowOverride None
  6.     Options ExecCGI FollowSymLinks -MultiViews +SymLinksIfOwnerMatch
  7.     Order allow,deny
  8.     Allow from all
  9. </Directory>
La explicación de las líneas es:
  1. Indicamos que queremos que ejecutar como CGI todos los archivos que tengan alguna de esas extensiones
  2. Si en un URL, la parte inicial de la ruta es /cgi-bin/, el servidor web deberá ir a buscar el programa al directorio indicado después
  3. Lo mismo para /cgi/. Realmente, solo necesitamos una de estas líneas
  4. y siguientes, declaramos que en ese directorio especial hay que activar las Opciones siguientes: ExecCGI (se pueden ejecutar los cgi que se encuentre ahí), FollowSymLinks (si hay enlaces simbólicos dentro de ese directorio, el usuario puede seguirlos. De esta manera, se pueden colocar cgi en otros sitios del disco), -MultiViews (no queremos que el servidor nos busque por variantes de lo que le pedimos, en caso de que lo que le pedimos no exista), +SymLinksIfOwnerMatch (los enlaces simbólicos solo se pueden seguir si el propietario del programa/archivo destino coincide con el propietario del enlace). De todas estas opciones, la fundamental es la ExecCGI.
Naturalmente, damos por supuesto que el directorio /usr/lib/cgi-bin/ existe. Y al menos tiene permisos de lectura y ejecución para todos o, como mínimo, para el usuario que ejecuta el servidor web.

Ahora tienes que comprobar que el módulo cgi del Apache2 está activado. Si sacas un listado del directorio /etc/apache2/mods-enabled/ deberías ver un enlace simbólico así:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
  1. lrwxrwxrwx 1 root root   26 dic  2 23:02 cgi.load -> ../mods-available/cgi.load

Eso quiere decir que sí está activo el módulo. Si no lo estuviera, deberías ejecutar el comando a2enmod cgi para quede activado.

Ahora tienes que hacer una recarga del servidor web (/etc/init.d/apache2 restart) y debería estar funcionando el sistema CGI.

Solo queda colocar un cgi en el directorio anterior, y ejecutarlo desde el navegador web. Si no sale, consultar siempre los registros de actividad (los ficheros log en /var/www/apache2/).

Ahora queda realizar los cgi en Perl. En la parte superior de esta página tienes un enlace a los Tutoriales. Dentro de ellos, hay una sección especial para CGI. Tienes, por ejemplo, el CGI: Primeros pasos. Y luego, si haces uso del módulo Perl CGI.pm, podrás escribir programas de forma más sencilla y rápida.

_________________
JF^D Perl programming


Nota 2012-02-01 14:54 @663

Perlero Nuevo
Registrado: 2012-02-01 00:50 @076
Mensajes: 2
Re: Cómo hago que mi servidor web me reconozca mis scripts
Ante todo gracias por la respuesta. Ya hice todo paso por paso pero a la hora de ir al navegador, el servidor web me dice que no tengo permisos para acceder a la carpeta /cgi-bin. Esta carpeta tiene todo los permisos de ejecución. Luego me remito al log de errores del Apache y me dice:

attempt to invoke directory as script: /usr/lib/cgi-bin/

que está tratando de invocarlo como un script. ¿Qué puedo hacer?, porque entro por terminal y doy los permisos como root, y nada.


Nota 2012-02-01 16:05 @712
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
Precisamente: tú no debes invocar un directorio. Debes invocar el nombre del programa que quieres ejecutar:

http://localhost/cgi-bin/programa.cgi

_________________
JF^D Perl programming


Nota 2012-02-06 06:28 @311

Perlero Frecuente
Registrado: 2009-12-10 11:20 @514
Mensajes: 124
Re: Cómo hago que mi servidor web me reconozca mis scripts
Hola a todos,

Tengo una duda al hilo de lo que se comenta aquí.

He tenido que instalarme Linux y XAMPP (alias LAMPP en Linux) para acabar el desarrollo de unas herramientas web.

Y esto me está dando bastantes problemas. Los scripts funcionan perfectamente en XAMPP en Windows, pero en Linux no hay más que problemas...

Necesito saber algunas cosas sobre las rutas de acceso de carpetas en Linux y sobre la línea de encabezado del cgi para que éste corra en LAMPP.

1) Mi línea de encabezado es la siguiente:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -T


¿Es correcta?

2) Un cgi ultra simple (solo enlaza a un archivo txt) da el siguiente error:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
(13)Permiso denegado: exec of '/opt/lampp/htdocs/B2CS/Refs.cgi' failed, referer: http://localhost/B2CS/Refs.html
Premature end of script headers: Refs.cgi, referer: http://localhost/B2CS/Refs.html

¿Qué permisos necesito para que el script funcione? ¿Dónde se los tengo que otorgar al programa?

A ver si consigo que funcione el cgi más básico y después puedo ir corrigiendo estas cosas en los más complicados...

(Siento las faltas de ortografía pero por alguna razón no me funciona la tilde en Linux y solo puedo corregir las que el corrector del foro detecta.)


Nota 2012-02-06 07:59 @374
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
A mi no se me ocurriría instalar el XAMPP en Linux: son más problemas que soluciones. Y en estos foros hay más de un hilo que así lo dice. El principal problema es que se mezclan los servicios de Apache2, Perl y MySQL que trae el XAMPP con los que ya tiene el sistema operativo.

Por ejemplo. Si en las cabeceras de los programas ponemos #!/usr/bin/perl entonces estás ejecutando el Perl del sistema, no el que trae el XAMPP.

Es mucho mejor usar el sistema de paquetes software del sistema operativo para instalar los componentes que necesitemos de forma individual. El Perl ya estará instalado. Apache2, quizás sí. Y lo mismo para MySQL y PHP.

En cuanto al error que muestras, parece que el programa ha emitido algo de texto antes de la cabecera HTTP necesaria.

Prueba mi CGI mínimo. Si hay errores, deberían salir en la ventana del navegador. Si no se puede ejecutar por temas de permisos, saldrán los errores solo en los log.

_________________
JF^D Perl programming


Nota 2012-02-06 08:27 @394

Perlero Frecuente
Registrado: 2009-12-10 11:20 @514
Mensajes: 124
Re: Cómo hago que mi servidor web me reconozca mis scripts
Muchas gracias por la explicación explorer.

Ya he solventado los problemas; eran principalmente de permisos (permisos de directorios, permisos de uso de los cgi, permitir ejecutar el cgi como un programa, permiso para respirar...) Y también que el programa en Linux se llama Lampp y por lo tanto tuve que volver a cambiar todas las rutas de acceso de los cgi.

Lo que le estoy viendo en Linux, es que hay que dar permisos para todo y encima su uso es muy poco intuitivo través de la interfaz gráfica "tipo windows". Casi preferiría usarlo todo desde la línea de comandos, que al menos sabes a qué atenerte, porque como está ahora presentado, todo va en un entorno gráfico pero para muchísimas cosas hay que usar los comandos.

Si hasta para poder crear un acceso directo a una carpeta o un programa me las veo y me las deseo. :twisted:


Nota 2012-02-06 10:05 @462
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
Y por esa razón el número de virus para Linux es de unos 30, casi todos ya desaparecidos.

Yo también realizo la mayor parte de mi trabajo con la terminal. Mientras, mi vecino, con su Ubuntu, trabaja exclusivamente en modo gráfico, ya que solo lo usa para navegar, leer el correo, jugar, y ver películas.

_________________
JF^D Perl programming


Nota 2012-02-06 10:09 @465

Perlero Frecuente
Registrado: 2009-12-10 11:20 @514
Mensajes: 124
Re: Cómo hago que mi servidor web me reconozca mis scripts
Me ha surgido otro problema explorer.
¿Cómo puedo traducir esta línea a Linux?

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $resultado = qx("C:/Archivos de programa/NCBI/BLAST/bin/$program" -query Uploads/$target -db DBase -evalue 1e-0005 -out Results/$filename.out -outfmt 10);


y quiero convertirla en esta:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $resultado = qx(/usr/bin/ncbi-blast-2.2.25+/bin/$program -query Uploads/$target -db OXPHOS -evalue $evalue -out Results/$filename.out);


¿Debo usar comillas?

Y en este caso:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.  my $resultado = `"C:/HMMer3/hmmscan.exe" "C:/xampp/htdocs/DB/HMMs/PRESS" "C:/xampp/htdocs/DB/Uploads/$filename.txt" > C:/xampp/htdocs/DB/Results/$filename.out`;


Así no me funciona...

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $resultado = `/usr/local/bin/hmmer-3.0/binaries/hmmscan.exe "/opt/lampp/htdocs/DB/HMMs/PRESS" "/opt/lampp/htdocs/DB/Uploads/$filename.txt" > /opt/lampp/htdocs/DB/Results/$filename.out`;


Gracias por vuestra atención...


Nota 2012-02-06 10:13 @467
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
¿Estás intentando ejecutar programas Windows dentro de Linux? Veo un 'hmmscan.exe'.

No funcionarán si no tienes instalado un emulador de Windows, como el Wine.

_________________
JF^D Perl programming


Nota 2012-02-06 10:21 @473

Perlero Frecuente
Registrado: 2009-12-10 11:20 @514
Mensajes: 124
Re: Cómo hago que mi servidor web me reconozca mis scripts
No, no, es que no sé cómo ponerlo... En realidad eran programas de Linux emulados con Cygwin para poderlos usar en Windows. Resumiendo: que no sé cómo escribir estas ordenes en Linux para que me funcionen...

La duda principalmente es si hay que escribir toda la ruta a cada archivo de los que usa el programa y si hay que poner comillas dobles como en Windows, o comillas simples, o no poner ninguna comilla. O si hay que ponerlas en unos archivos y no en otros.


Nota 2012-02-06 10:46 @490
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
El shell de Linux admitirá bien tus comillas. Yo no veo problemas aparentes...

¿Has comprobado que puedes ejecutar los comandos .exe desde la línea de comandos, "a mano". Si están escritos para la arquitectura Windows, no podrás ejecutarlos salvo que tengas instalado el Wine. O instales las versiones correspondientes de estos programas, para Linux.

_________________
JF^D Perl programming


Nota 2012-02-06 11:39 @527

Perlero Frecuente
Registrado: 2009-12-10 11:20 @514
Mensajes: 124
Re: Cómo hago que mi servidor web me reconozca mis scripts
Tengo todos los programas instalados para Linux, y desde la línea de comandos se ejecuta la orden, pero luego me da un error rarísimo y no encuentro a qué se refiere en el script...

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
[Mon Feb 06 17:29:47 2012]Can't open perl script "\r": No such file or directory, referer: http://62.42.34.210/DB/HMM.html
[Mon Feb 06 17:29:47 2012] [error] [client 62.42.34.210] Premature end of script headers: HMMer.cgi, referer: http://62.42.34.210/DB/HMM.html


Última edición por Alfumao el 2012-02-06 17:57 @789, editado 1 vez en total

Nota 2012-02-06 11:56 @539
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Cómo hago que mi servidor web me reconozca mis scripts
El error dice que no ha podido ejecutar un cgi llamado "\r". Nada más sabemos.

_________________
JF^D Perl programming


Nota 2012-02-07 06:46 @323

Perlero Frecuente
Registrado: 2009-12-10 11:20 @514
Mensajes: 124
Re: Cómo hago que mi servidor web me reconozca mis scripts
Pues desconozco qué cgi será ese. Lo he mirado y remirado en el código tanto del CGI como del HTML y no hay ninguna referencia a semejante script (podía haber escrito o borrado algo sin querer mientras corregía los códigos para adaptarlos a Linux, pero no, nada de eso ha pasado aparentemente, así que ni idea de dónde ha salido dicha referencia a /r)...


Responder al tema  [ 22 mensajes ]  Ir a página 1, 2  Siguiente

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO