Skip to content

Problemas al ejecutar CGI #12

Open

Description

@numeroteca

Estoy tratando de hacer funcionar el procesado que hace t-hoarder de todos los archivos comprimidos (.tar.gz) de un experimento. He documentado en la wiki parte del proceso.

Me está costando hacerlo funcionar por un problema de configuración de CGI. Caad vez que acedo a la web del experimento me sale el archivo tweets_talk_cgi.py como si lo quisiera descargar:
Screenshot from 2020-06-19 18-49-29
en vez de ejecutarlo.

He seguido este manual https://httpd.apache.org/docs/2.4/es/howto/cgi.html y este otro https://code-maven.com/set-up-cgi-with-apache

Usaré este hilo para documentar cómo tengo configurado todo a ver si consigo hacerlo funcionar.

En /etc/apache2/conf-available$ mi archivo serve-cgi-bin.conf es:

<IfModule mod_alias.c>
	<IfModule mod_cgi.c>
		Define ENABLE_USR_LIB_CGI_BIN
	</IfModule>

	<IfModule mod_cgid.c>
		Define ENABLE_USR_LIB_CGI_BIN
	</IfModule>

	<IfDefine ENABLE_USR_LIB_CGI_BIN>
		ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
		<Directory "/usr/lib/cgi-bin">
			AllowOverride None
			Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
			Require all granted
		</Directory>
		
		ScriptAlias /scripts/ /home/numeroteca/data/t-hoarder/web/scripts/ 
		<Directory "/home/numeroteca/data/t-hoarder/web/scripts">
			Options +ExecCGI
			#AddHandler mod_python .py
			#PythonHandler mod_python.publisher
			AddHandler cgi-script .pl
			Order allow,deny
			Allow from all
		</Directory>

	</IfDefine>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

En /etc/apache2/mods-enabled tengo:
lrwxrwxrwx 1 root root 26 jun 19 17:29 cgi.conf -> ../mods-available/cgi.conf
lrwxrwxrwx 1 root root 26 jun 10 16:53 cgi.load -> ../mods-available/cgi.load

y en /etc/apache2/mods-available tengo:
lrwxrwxrwx 1 root root 24 jun 19 17:30 cgi.conf -> ../mods-enabled/cgi.conf
-rw-r--r-- 1 root root 115 oct 10 2018 cgid.conf
-rw-r--r-- 1 root root 60 oct 10 2018 cgid.load
-rw-r--r-- 1 root root 58 oct 10 2018 cgi.load

Sí, hay una doble liga recursiva, sí.

Seguiré informando :) @congosto

Activity

  1. numeroteca commented on Jun 21, 2020

    @numeroteca
    CollaboratorAuthor

    Mi configuración de Apache /etc/apache2/apache2.conf:
    https://gist.github.com/numeroteca/37460e94fd4a67f01d87c08249241693

  2. congosto commented on Jun 22, 2020

    @congosto
    Owner

    Por favor, ¿me podrías indicar cuales son los permisos del directorio /home/numeroteca/data/t-hoarder/web/scripts/ y del fichero tweets_talk_cgi.py?

  3. numeroteca commented on Jun 22, 2020

    @numeroteca
    CollaboratorAuthor

    Estos son los permisos:
    drwxr-xr-x /home/numeroteca/data/t-hoarder/web/scripts/
    -rwxr-xr-x tweets_talk_cgi.py

  4. congosto commented on Jun 22, 2020

    @congosto
    Owner

    Son los permisos correctos. Voy aprobar tu apache2.conf en mi servidor cambiando la ubicación de los datos

  5. congosto commented on Jun 22, 2020

    @congosto
    Owner

    Mira a ver si es esto
    <Directory "/home/numeroteca/data/t-hoarder/web/scripts">
    Options +ExecCGI
    #AddHandler mod_python .py
    #PythonHandler mod_python.publisher
    AddHandler cgi-script .pl
    Order allow,deny
    Allow from all

    debería ser AddHandler cgi-script .py

  6. numeroteca commented on Jun 22, 2020

    @numeroteca
    CollaboratorAuthor

    Tampoco me funciona esto. Se me había quedado el .pl de cuando traté de hacer este tutorial con un hello world con perl que no llegó a funcionar. De hecho creo que tengo que intentar que funcione eso para poder seguir adelante.

  7. congosto commented on Jun 22, 2020

    @congosto
    Owner

    He cargado tu apache2.conf en mi servidor y funciona. Debe ser algo de la instalación de apache que te falte. Hay que verificar que está incluido el módulo de cgi.

    Mira si existe el fichero /usr/lib/apache2/modules/mod_cgi.so
    Es el fichero que intenta cargar el cgi.load

  8. numeroteca commented on Jun 24, 2020

    @numeroteca
    CollaboratorAuthor

    En vista de que nada me funciona y de que parece ser un problema de la instalaci'on de apache, he desistalado, purgado y vuelto a instalar.

    Una vez instalado he ejecutado sudo a2enmod cgi para activar CGI, me dice:

    Your MPM seems to be threaded. Selecting cgid instead of cgi.
    Enabling module cgid.
    To activate the new configuration, you need to run:
      systemctl restart apache2
    

    Que quiere decir según esto que:

    • the cgi module is not compatible with your Apache installation, but the cgid module performs the exact same thing and is compatible with your apache installation, so..
    • it will use cgid instead,
    • but cgid it's already enabled, so it doesn't need to do any work

    Si ejecuto sudo a2enmod cgid dice que
    Module cgid already enabled

    Entonces ¿en qué archivo tengo que indicar que los .py sean ejecutados como CGI? ¿en serve-cgi-bin.conf, 000-default.conf o en /etc/apache2/apache2.conf o en varios?
    con este código:

    ScriptAlias "/scripts/" "/home/numeroteca/data/t-hoarder/web/scripts/" 
    <Directory /home/numeroteca/data/t-hoarder/web/scripts/>
      Options +ExecCGI
      AddHandler cgi-script .py
      Order allow,deny
      Allow from all
    </Directory>
    
  9. congosto commented on Jun 24, 2020

    @congosto
    Owner

    En mi instalación de apache2 solo tuve que configurar el apache2.conf e incluir el modulo CGI.
    El enlace que me indicas es de un problema detectado hace cuatro años. https://askubuntu.com/questions/683126/1404-your-mpm-seems-to-be-threaded-selecting-cgid-instead-of-cgi-module-cgid en la versión 14 de Ubuntu
    Yo instalé un servidor apache2 hace menos de un año sin ningún problema sobre ubuntu 18 LTS
    Yo solo modificaría apache2.conf tal como lo tienes ahora que funciona en mi servidor

  10. numeroteca commented on Jun 25, 2020

    @numeroteca
    CollaboratorAuthor

    @skotperez sugiere, sin haber entrado a estudiar el tema en profundidad, que puede tener que ver con la versión de python que apache puede ejecutar, si es 2 y pido la 3 o viceversa.

    Así es como lo configuró él para instalar Django, por si tuviera que ver. Este código va en el virtual hort:

         WSGIDaemonProcess poll user=nombreusuario group=nombreusuario maximum-requests=1000 request-timeout=10 home=/home/nombreusuario/www/themes/django-poll/poll
         WSGIProcessGroup poll
         WSGIScriptAlias /polls /home/nombreusuario/www/themes/django-poll/poll/poll/wsgi.py process-group=poll
    
           <Directory "/home/nombreusuario/www/themes/django-poll/poll/poll">
                   <Files wsgi.py>
                   Options Indexes FollowSymLinks
                   AllowOverride None
                   Require all granted
                   </Files>
           </Directory>
    
    

    Para instalar Django en entorno virtual: sudo pip3 install virtualenvwrapper

    Luego hay que añadir las siguientes líneas a ~/.bashrc:

    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 '
    export PROJECT_HOME=$HOME/Devel
    source /usr/local/bin/virtualenvwrapper.sh
    

    Para crear un nuevo entorno virtual: mkvirtualenv my_django_environment

    Para interactuar con el entorno virtual:

        deactivate — Exit out of the current Python virtual environment
        workon — List available virtual environments
        workon name_of_environment — Activate the specified Python virtual environment
        rmvirtualenv name_of_environment — Remove the specified environment.
    
  11. numeroteca commented on Jan 25, 2021

    @numeroteca
    CollaboratorAuthor

    He cambiado de instalación de Ubuntu, ahora estoy con la 20.04 y me vuelve a dar el mismo error. No sé muy bien qué mirar más.

  12. numeroteca commented on Feb 5, 2021

    @numeroteca
    CollaboratorAuthor

    Avances:

    tweets_talk_cgi.py

    • en el fichero t-hoarder/web/scripts/tweets_talk_cgi.py tienen que modificarse:
      dir_base='/home/numeroteca/t-hoarder/web/'
      home='http://localhost/'
    

    En mi caso localhost porque así lo tengo configurado en local.

    por aclarar cómo compaginar esto con actualizar t-hoarder.

    make_experiment
    Ojo, el archivo /t-hoarder/blob/master/scripts/make_experiment ha cambiado su última línea, así no hay que cambiar los permisos para que /t-hoarder/scripts/join_results.py tenga permisos de ejecución.

    Pasó /hace un año, no lo había visto) de

    join_results.py ${experiment} --dir_in ${root_directory}/t-hoarder/store/${experiment} --dir_out ${root_directory}/t-hoarder/web/${experiment}

    a

    python2.7 ${root_directory}/t-hoarder/scripts/join_results.py ${experiment} --dir_in ${root_directory}/t-hoarder/store/${experiment} --dir_out ${root_directory}/t-hoarder/web/${experiment}

    Como llevo un tiempo sin actualizar t-hoarder algunos cambios de make_experiment no los tengo actualizados.

    En cualquier caso, el procesado de tuits funciona, el problema parece estar relacionado con hacer correr CGI en mi servidor local.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions