TuXsOuL
Mario Oyorzabal Salgado
Howtux: “Ejecutando Comas bajo el plumerio de Apache 2”.
Índice de contenido Introducción.................................................................................................................................2 COMAS en la web.......................................................................................................................2 Objetivo........................................................................................................................................2 Requerimientos............................................................................................................................3 Descargando COMAS.............................................................................................................5 Archivos de Configuración...........................................................................................................6 Comas.pl.................................................................................................................................6 Comas_apache2.conf..............................................................................................................7 Comas.conf.............................................................................................................................8 Configurando Apache2..............................................................................................................10 Configurando PostgreSQL.........................................................................................................11 Bisturí en COMAS......................................................................................................................14 Bugs desconocidos................................................................................................................16 Rating Erróneo..................................................................................................................16 Ejecutando COMAS...................................................................................................................19 Errores en COMAS....................................................................................................................19 Errores típicos de configuración en COMAS..........................................................................19 Disclaimer..................................................................................................................................20 Contacto.....................................................................................................................................21 Changelog.................................................................................................................................22
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Introducción COMAS (Sistema Manejador de Congresos siglas en inglés), su autor es Gunnar Wolf (http://www.gwolf.org) desarrollador oficial de la distribución Debian GNU/Linux (http://www.debian.org), COMAS nace por primera vez en la falta de un sistema para controlar el flujo de información en un congreso el cual fue CONSOL (Congreso Nacional de Software Libre http://www.consol.org.mx).
COMAS en la web Se puede encontrar COMAS en su sitio web oficial (http://www.comascode.org/) y el código para su descarga en (https://alioth.debian.org/projects/comas/). COMAS esta hecho en un lenguaje de programación llamado Perl (http://www.perl.org), las primeras versiones de COMAS se basaron en su desarrollo bajo el plumerio de Apache 1.x, por consiguiente todos los módulos para esa versión.
Objetivo Para nosotros organizadores de CICOL (http://www.cicol.org.mx), no podíamos cambiar nuestra infraestructura, por lo cual tuvimos la necesidad de utilizar COMAS, bajo las nuevas plumas de Apache 2.x. Es por eso la realización de este howtux, además de tener un documento en cristiano (castellano), ya que la documentación de COMAS es poca ya que no tiene mucha aportación de los usuarios. Por lo cual también invitamos a la comunidad a que ayude en el desarrollo de COMAS, y en la documentación, como lo es este pequeño howtux.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Requerimientos Para la utilización de COMAS dependiendo de nuestras necesidades montaremos nuestro servidor, COMAS puede correr en cualquier ambiente *nix, salvo la necesidad especifica del lenguaje antes mencionado Perl (http://www.perl.org). Este howtux no cubre la configuración ni especificar la necesidad de hardware para el servidor si no únicamente la configuración de COMAS =P. Para el buen funcionamiento de COMAS, se necesita primero cubrir algunas dependencias como librerías, parser's, etc., etc., todo lo que su diseñador utilizo. Este howtux es basado utilizando una distribución GNU/Linux Instalar los siguientes componentes en Debian: Apache2 PostgreSQL Mod_perl
apache2 postgresql libapache2modperl2
Apache::Comas Apache::Request libapache2requestperl Apache::Cookie libapache2requestperl Apache::Session libapachesessionperl Config::Simple libconfigsimpleperl Comas::HTML Data::Dumper::Simple libdatadumpersimpleperl Data::FormValidator libdataformvalidatorperl HTML::FromText libhtmlfromtextperl HTML::Template libhtmltemplateperl Scalar::Util perlbase Comas backend Date::Calc Date::Parse DBI DBD::Pg Storable
libdatecalcperl libtimedateperl libdbiperl libdbdpgperl perl
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Los paquetes anteriores así pueden ser encontrados en la estructuras de paquetes en Debian GNU/Linux. Para facilidad del usuario puede copiar y pegar la siguiente linea para instalar las dependencias necesarias en Debian GNU/Linux: #aptget f install apache2 perl postgresql libapache2modperl2 libapache2requestperl \ libapachesessionperl libconfigsimpleperl libdatadumpersimpleperl libdataformvalidatorperl \ libhtmlfromtextperl libhtmltemplateperl libdatecalcperl libtimedateperl libdbiperl libdbdpgperl El comando anterior instalará esos y otros paquetes más para cubrir las dependencias que se tienen entre paquetes.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Descargando COMAS Para descargar comas necesitaremos "svn", ya que aún no hay un tar.gz, para poder bajar el código, así que utilizaremos el código que se esta modificando día a día (dependiendo del autor), por lo cual se debe tener cuidado, además que puede suceder que este howtux ya no funcione igual ante nuevas versiones de COMAS. Primer instalamos "svn" si no lo tenemos: #aptget f install subversion subversiontools Ahora creamos una carpeta en donde colocaremos el código de COMAS: $mkdir comas $cd comas Ahora descargamos el código fuente de COMAS: $svn checkout svn://svn.debian.org/comas/trunk Despúes de unos minutos nuestra computadora habrá descargado toda la carpeta "trunk" en donde por el momento se encuentra el código de COMAS.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Archivos de Configuración Despúes de eso preparamos los archivos de configuración que utilizaremos en este caso son 3 archivos: * comas.pl (por si el código lo colocamos en algún path diferente a perl). * comas.conf (configuración del propio comas). * comas_apache.conf (configuración para la interacción entre apache2 y comas).
Estos archivos podemos crearlos con cualquier editor ya sea vi, nano, etc. A continuación se detalla el contenido de cada archivo.
Comas.pl Este archivo debe contener lo siguiente: /etc/apache/startup.pl # Path to COMAS modules use lib qw(/path/to/comas/perl); #Return True 1; END Aquí modificamos el directorio en el cual se encuentra los archivos ".pm" de COMAS, si bajaste el directorio usando "svn", los archivos ".pm" se encuentran en el path "trunk/perl", claro el path debe ser absoluto no relativo, esto es, se debe escribir todo el path completo. Claro recordemos eliminar las lineas precedidas por "", a la hora de guardar el archivo.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Comas_apache2.conf Este archivo debe contener lo siguiente: /etc/apache/conf.d/comas_httpd.conf
PerlRequire /etc/apache2/comas.pl SetHandler perlscript PerlHandler Apache2::Comas PerlSetVar comas_config_file /path/to/your/comas.conf PerlSetVar comas_instance instance_name END Aquí modificamos el path que tiene la linea "PerlRequire" hacia donde tenemos nosotros el archivo "comas.pl", también hay que notar que en la configuración original de COMAS la linea: PerlHandler Apache::Comas Se cambio por esta: PerlHandler Apache2::Comas Para Apache2, despúes de eso tenemos que cambiar el path de la linea "comas_config_file" hacia donde tengamos nosotros el archivo "comas.conf", por último modificamos el valor de "comas_instance" por el nombre que nosotros queremos que se llame nuestra instancia de COMAS. Si se quisiera mostrar información de debug sobre COMAS, debemos agregar la siguiente linea: PerlSetVar debug "1"
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
La cual debe ir antes de "" quedando el archivo de la siguiente manera: /etc/apache/conf.d/comas_httpd.conf
PerlRequire /etc/apache2/comas.pl SetHandler perlscript PerlHandler Apache2::Comas PerlSetVar comas_config_file /path/to/your/comas.conf PerlSetVar comas_instance instance_name PerlSetVar debug "1" END Claro tampoco olvidemos eliminar las lineas precedidas por "", a la hora de guardar el archivo.
Comas.conf Este archivo debe contener lo siguiente: [comas_example] dbname="comas" #host="localhost" port="5432" dbuser="comas" dbpasswd="" adm_dbuser="comas_adm" adm_dbpasswd="" tmpl_path="/home/comas/examples/templates/" session_timeout=60 max_upload=10
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Aquí como podemos ver, solamente ponemos los valores adecuados para nuestra configuración de COMAS los valores son obvios, salvo la etiqueta "comas_example" esta etiqueta debe ser el mismo valor que utilizamos en el archivo anterior en el campo "comas_instance". En el caso de los "templates" o "tmpl_path" se puede utilizar por mientras los que trae COMAS como ejemplos ubicados en "trunk/examples/templates/consol" o "trunk/examples/templates/icgtmp". Claro recordemos eliminar las lineas precedidas por "", a la hora de guardar el archivo.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Configurando Apache2 Para poder usar COMAS en Apache2 necesitamos habilitar los módulos correspondientes: * Módulo para perl #a2enmod perl * Módulo apreq para "Apache2::request" (peticiones GET y POST). #a2enmod apreq Primero creamos un enlace simbólico desde Apache2 para "comas_apache.conf", para así cargar la primera configuración de COMAS: * Primero entramos en la carpeta "conf.d" contenida en el directorio de archivos de configuración de Apache2. #cd /etc/apache2/conf.d * Despúes creamos un enlace simbólico hacia el archivo "comas_apache.conf": #ln s /directorio/a/donde/este/comas_apache.conf * Y reiniciamos Apache2. #/etc/init.d/apache2 restart
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Configurando PostgreSQL Ahora configuraremos PostgreSQL (http://www.postgresql.org), ya que COMAS lo utiliza para guardar toda la información. Para esto también es necesario el cliente de PostgreSQL por si no se instalo en los aptget's anteriores, esto lo podemos verificar ejecutando el comando "psql". Primero creamos los usuarios necesarios para COMAS asignándoles un password a cada uno, a la hora de crear los usuarios en Postgresl nos hará unas preguntas, si queremos que el usuario pueda crear más usuarios, y si el usuario puede crear más bases de datos, ha estas preguntas contestamos que no. La creación de usuarios la hacemos de la siguiente manera, verificando que PostgreSQL este en ejecución. * Cambiamos al usuario PostgreSQL: $su #su postgres $_ * Creamos al primer usuario con nombre "comas" $createuser comas P Ingrese la contraseña para el nuevo usuario: Ingrésela nuevamente: ¿Debe permitírsele al usuario la creación de bases de datos? (s/n) n ¿Debe permitírsele al usuario la creación de otros usuario? (s/n) n CREATE USER * Creamos al usuario "comas_adm" $createuser comas_adm P Ingrese la contraseña para el nuevo usuario: Ingrésela nuevamente: ¿Debe permitírsele al usuario la creación de bases de datos? (s/n) n ¿Debe permitírsele al usuario la creación de otros usuario? (s/n) n CREATE USER
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
* Creamos la base de datos "comas" con dueño "comas_adm" sin salir de usuario PostgreSQL $createdb comas O comas_adm E latin1 * Agregamos el lenguaje "plpgsql" a la base de datos "comas" para ejecución de funciones (programación) $createlang plpgsql comas Hasta ya tenemos la base de datos lista falta, el esquema (estructura), funciones y datos de prueba. Para eso salimos del usuario actual y nos logeamos como "root", para modificar los permisos de PostgreSQL y nos permita loguearnos a la base de datos dando el password de usuario (recordando a los usuarios que creamos anteriormente). Modificamos el archivo "pg_hba.conf", ubicado en "/etc/postgresql" dependiendo de la versión de PostgreSQL, se puede ejecutar la instrucción como root: #locate "pg_hba.conf" La cual nos dirá la ubicación del archivo que necesitamos. Lo modificamos agregando las siguientes lineas al principio del archivo o antes de las lineas que trae de configuración ya establecida: # Comas local comas comas md5 local comas comas_adm md5 Con esto le decimos que de manera local (peticiones únicamente a localhost o socket unix) a PostgreSQL se le harán peticiones de los usuarios "comas", "comas_adm" para la base de datos "comas" y la autentificación lo haga mediante "md5" para no revelar los passwords. Guardamos el archivo y reiniciamos PostgreSQL, algunos dicen que no es necesario reiniciar PostgreSQL, pero más vale. Ahora ya podemos logearnos como usuarios "comas" o "comas_adm" para probarlo ejecutamos: $psql d comas U comas_adm W
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Con lo cual nos preguntará nuestro password (el cual ingresamos a la hora de crear al usuario), y que le decimos que nos conecte a la base de datos "comas". Si hay algún error hasta aquí hay que checar los pasos anteriores o nuestra instalación de PostgreSQL. Una vez dentro de PostgreSQL como el usuario "comas_adm", creamos las tablas y funciones necesarias para eso podemos utilizar los archivos de ejemplo que COMAS trae. comas=> \i /directorio/hacia/donde/esta/comas/trunk/sql/schema.sql comas=> \i /directorio/hacia/donde/esta/comas/trunk/sql/functions.sql Con lo cual PostgreSQL hará todo el trabajo, ahora solo faltan los datos de prueba: comas=> \i /directorio/hacia/donde/esta/comas/trunk/examples/consol_initial_data.sql Ahora si ya tenemos todo nuestro PostgreSQL configurado para usar COMAS.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Bisturí en COMAS Antes de probar nuestro COMAS, primero se le tienen que hacer unas modificaciones que se encontraron para corregir algunos errores con la utilización bajo el plumerio de Apache2, esto es en el código fuente de COMAS. Como estamos usando Apache2, el archivo que modificaremos esta ubicado en "trunk/perl/Apache2/Comas.pm". * Primera modificación: Desde la Linea #47: use Apache::Const qw(:common); use Apache::Request; use Apache::RequestRec; use Apache::RequestUtil; Para que quede así: use Apache2::Const qw(:common); use Apache2::Request; use Apache2::RequestRec; use Apache2::RequestUtil; Además anexamos una librería más, ya que en el release para apache2 el código de Apache2::Request fue separado, por lo que ahora necesitamos otra librería para los Uploads: use Apache2::Upload; Por lo que al final debe quedar así: use Apache2::Const qw(:common); use Apache2::Request; use Apache2::RequestRec; use Apache2::RequestUtil; use Apache2::Upload;
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
* Segunda modificación: Linea #208: $request = Apache::Request>new($r, POST_MAX => $max_upload * 1024 * 1024); Por: $request = Apache2::Request>new($r, POST_MAX => $max_upload * 1024 * 1024); En los dos casos anteriores solamente se cambio la referencia "Apache::" por "Apache2::" para el uso con las plumas de Apache2 con su nuevos módulos de Perl. * Última modificación: Linea #216: # We process the parameter list this way in order to be able to deal with # multivalued parameters (i.e. checkbox groups). for my $key (keys %{$request>param}) { my @values = $request>param($key); $params{$key} = scalar(@values) > 1 ? [@values] : $values[0]; } Por: # We process the parameter list this way in order to be able to deal with # multivalued parameters (i.e. checkbox groups). if ( defined ( $request>param ) ) { for my $key (keys %{$request>param}) { my @values = $request>param($key); $params{$key} = scalar(@values) > 1 ? [@values] : $values[0]; } } Con eso arreglamos los detalles que a nosotros nos salieron.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Bugs desconocidos Al ver el funcionamiento normal de “Comas”, notamos una serie de pequeños bugs, los cuales iremos agregando en esta sección, en caso de que podamos solucionarlos colocaremos la solución aquí mismo.
Rating Erróneo Sucede cuando los miembros del comité registrados en “Comas”, evalúan un cierto material y colocan su calificación del mismo, el rating funciona de manera errónea no llegando a calificar la presentación de manera adecuada u otro tipo de mal funcionamiento. Para solucionar este bug, tendremos que recargar una funcion que “Comas” tiene, las funciones se encuentran en el archivo “functions.sql”: Linea #600: ############################################################################# set_rating: Sets the rating and comments for a proposal. Receives four arguments: The proposal ID (numeric) The administrator's ID (numeric) The requested rating (numeric) Any comment that should be added to the rating (text). Returns true on success, throws exception on failure. CREATE OR REPLACE FUNCTION set_rating(integer, integer, integer, text) returns bool AS 'DECLARE set_prop_id ALIAS FOR $1; set_admin_id ALIAS FOR $2; set_rating ALIAS FOR $3; set_comment ALIAS FOR $4; been_rated integer; BEGIN
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
SELECT INTO been_rated count(rating) FROM prop_revision WHERE proposal_id=set_prop_id AND admin_id=set_admin_id; IF been_rated = 0 THEN INSERT INTO prop_revision (proposal_id, admin_id, rating, comments) VALUES (set_prop_id, set_admin_id, set_rating, set_comment); ELSE UPDATE prop_revision SET rating=set_rating,comments=set_comment WHERE proposal_id = set_prop_id AND admin_id = set_admin_id; END IF; RETURN ''t''; END;' LANGUAGE 'plpgsql'; Tiene que quedar de la siguiente forma: ############################################################################# set_rating: Sets the rating and comments for a proposal. Receives four arguments: The proposal ID (numeric) The administrator's ID (numeric) The requested rating (numeric) Any comment that should be added to the rating (text). Returns true on success, throws exception on failure. CREATE OR REPLACE FUNCTION set_rating(integer, integer, integer, text) returns bool AS 'DECLARE set_prop_id ALIAS FOR $1; set_admin_id ALIAS FOR $2; set_rating ALIAS FOR $3; set_comment ALIAS FOR $4; been_rated integer; BEGIN SELECT INTO been_rated count(proposal_id) FROM prop_revision WHERE proposal_id=set_prop_id AND admin_id=set_admin_id; IF been_rated = 0 THEN
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
INSERT INTO prop_revision (proposal_id, admin_id, rating, comments) VALUES (set_prop_id, set_admin_id, set_rating, set_comment); ELSE UPDATE prop_revision SET rating=set_rating,comments=set_comment WHERE proposal_id = set_prop_id AND admin_id = set_admin_id; END IF; RETURN ''t''; END;' LANGUAGE 'plpgsql'; No es necesario que edites el archivo original, es a tu gusto, también puedes generar un archivo: “cualquiernombre.sql”, copiando el código anterior y pegándolo en el nuevo, o puedes editar el archivo original y dar los cambios, esto es a tu gusto. Ya por último tendrás que volver a recargar el código anterior dentro de PostgreSQL mediante el siguiente comando: comas=> \i /directorio/hacia/donde/esta/comas/trunk/sql/functions.sql O el nombre del archivo que creaste que contiene el código ya arreglado.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Ejecutando COMAS Para ejecutar COMAS no te queda más que reiniciar Apache2, y dirigirte con tu browser (navegador favorito) a la carpeta COMAS, eso dependiendo de la url por ejemplo: http://localhost/comas
Errores en COMAS Este howtux, no cubre toda una gama de errores que puedes tener en COMAS ya sea por algún error en el código fuente, o por alguna función mal hecha en alguna librería ya que hay veces que las librerías se actualizan tan rápido que ya dejan muchas cosas obsoletas, etc., etc. Para ver errores que tenga COMAS al momento de ejecutarse, estos errores son enviados al log de Apache2 "error.log", por lo cual con ver este archivo te darás cuenta de lo que le pasa a tu COMAS.
Errores típicos de configuración en COMAS No modificar adecuadamente los archivos de configuración de COMAS, esto es, no poner los valores adecuados con respecto a nuestro sistema, ya los valores que se ponen en este howtux, son por default y tienen que modificarse. ● Instalar el directorio COMAS bajo "/var/www" cuando apache2 toma este mismo directorio como "DocumentRoot", este también es un error típico, no podemos colocar la carpeta "COMAS" bajo este directorio por cuestiones de seguridad la recomendación es que no expongan este directorio a la web, pueden colocarlo en otro lugar. Por otro lado cuando se coloca una carpeta con el nombre "COMAS" apache2, tratara primero de resolver "http://localhost/comas", buscando el directorio antes de ejecutar en si COMAS. ●
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Disclaimer Este howtux, no es oficial por parte de los desarrolladores de COMAS, así que no trates de enviarles a ellos algo como "hice lo que decía un howtux que me encontré y no funciona que hago", ya que COMAS incluye un archivo "Install.txt", en el cual de manera oficial se describe los pasos que hay que seguir para su instalación y configuración. Recuerda que este howtux nació de la necesidad de los usuarios de CICOL por tener documentación ya que luego se olvidan las cosas.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Contacto Pues si quieres contactarnos para ayudar a mejorar este howtux bienvenido, o para invitarnos unas pizzas también, jeje =). CICOL http://www.cicol.org.mx IRC chat.freenode.net #cicol ¿Pero quién hizo este howtux? Autor de este howtux: Web: Email:
Mario Oyorzabal Salgado
http://blog.tuxsoul.com [email protected]
Reporte de bugs: Web: email:
Jair Gaxiola Mercado <jyr> http://jyr.ath.cx [email protected]
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.
TuXsOuL
Mario Oyorzabal Salgado
Changelog ●
●
●
20061228 ○ Corrección número de línea en la última modificación "trunk/perl/Apache2/Comas.pm". ○ Agregada nueva sección Bugs desconocidos. ○ Cambio de la palabra “Postgresql” a “PostgreSQL”. 20061225 ○ Pequeñas modificaciones al formato. ○ Liberado este howtux bajo licencia Creative Commons. ○ Actualizada url página jyr. 20060409 ○ Howtux creado.
This work is licensed under a Creative Commons AttributionShare Alike 2.5 License.