Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problemas al ejecutar CGI #12

Open
numeroteca opened this issue Jun 19, 2020 · 12 comments
Open

Problemas al ejecutar CGI #12

numeroteca opened this issue Jun 19, 2020 · 12 comments

Comments

@numeroteca
Copy link
Collaborator

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

@numeroteca
Copy link
Collaborator Author

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

@congosto
Copy link
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?

@numeroteca
Copy link
Collaborator Author

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

@congosto
Copy link
Owner

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

@congosto
Copy link
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

@numeroteca
Copy link
Collaborator Author

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.

@congosto
Copy link
Owner

congosto commented Jun 22, 2020

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

@numeroteca
Copy link
Collaborator Author

numeroteca commented Jun 24, 2020

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>

@congosto
Copy link
Owner

congosto commented Jun 24, 2020

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

@numeroteca
Copy link
Collaborator Author

@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.

@numeroteca
Copy link
Collaborator Author

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.

@numeroteca
Copy link
Collaborator Author

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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants