• Publicidad

Cómo hago que mi servidor web me reconozca mis scripts

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

Cómo hago que mi servidor web me reconozca mis scripts

Notapor guerrero12 » 2012-02-01 01:16 @094

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

Sintáxis: [ Descargar ] [ Ocultar ]
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>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

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.
guerrero12
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-02-01 00:50 @076

Publicidad

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor explorer » 2012-02-01 08:44 @405

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:
Sintáxis: [ Descargar ] [ Ocultar ]
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>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
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í:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. lrwxrwxrwx 1 root root   26 dic  2 23:02 cgi.load -> ../mods-available/cgi.load
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

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 & 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

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor guerrero12 » 2012-02-01 14:54 @663

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.
guerrero12
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-02-01 00:50 @076

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor explorer » 2012-02-01 16:05 @712

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 & 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

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor Alfumao » 2012-02-06 06:28 @311

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -T
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Es correcta?

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

Sintáxis: [ Descargar ] [ Ocultar ]
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
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

¿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.)
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor explorer » 2012-02-06 07:59 @374

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 & 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

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor Alfumao » 2012-02-06 08:27 @394

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:
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor explorer » 2012-02-06 10:05 @462

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 & 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

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor Alfumao » 2012-02-06 10:09 @465

Me ha surgido otro problema explorer.
¿Cómo puedo traducir esta línea a Linux?

Sintáxis: [ Descargar ] [ Ocultar ]
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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y quiero convertirla en esta:

Sintáxis: [ Descargar ] [ Ocultar ]
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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Debo usar comillas?

Y en este caso:

Sintáxis: [ Descargar ] [ Ocultar ]
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`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Así no me funciona...

Sintáxis: [ Descargar ] [ Ocultar ]
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`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias por vuestra atención...
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Cómo hago que mi servidor web me reconozca mis scripts

Notapor explorer » 2012-02-06 10:13 @467

¿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 & 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 Web

¿Quién está conectado?

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

cron