congosto / t-hoarder

T-Hoarder platform stores long-term tweets (years) by thematic lines and it automatically processes them in three-axis: time, space, and relevance.
GNU General Public License v3.0
48 stars 15 forks source link

Problemas al ejecutar CGI #12

Open numeroteca opened 4 years ago

numeroteca commented 4 years ago

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 commented 4 years ago

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

congosto commented 4 years ago

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 commented 4 years ago

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

congosto commented 4 years ago

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

congosto commented 4 years ago

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
    </Directory>

debería ser AddHandler cgi-script .py

numeroteca commented 4 years ago

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 commented 4 years ago

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 commented 4 years ago

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:

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 commented 4 years ago

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 commented 4 years ago

@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 commented 3 years ago

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 commented 3 years ago

Avances:

tweets_talk_cgi.py

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.