bugzilla

Crear bugs en bugzilla a partir de un email

Crear bugs en bugzilla a partir de un email

Introducción

Bugzilla ofrece la posibilidad de poder crear bugs a partir de emails que recibe a través de un ejecutable python que tiene email_in.pl. El email tiene que tener un formato especifico para que bugzilla lo entienda y pueda crear el bug correctamente.

Configuración

Requisitos

Lo primero que tenemos que comprobar es si tenemos todos los módulos de perl necesarios para que funcione. Para comprobarlo tendremos que ejecutar el siguiente comando:

>> ./checksetup.pl --check-modules

Los módulos de perl que he detectado que necesita son los siguientes (si me dejo alguno me lo decís y lo añado)

  • Email-Reply
  • Class-C3
  • Email-MIME-Attachment-Stripper

Si os falta alguno tendreis que instalarlos ya sea con el instalador de perl o si existen los paquetes de estos módulos en el repositorio de vuestra distribución de linux, hacerlo desde ahí.

También necesitaremos un servidor de correo electrónico para que reciba los emails que luego redirigirá a bugzilla. (En esta guía no vamos a entrar a explicar como montar un servidor de correo electrónico, por lo que damos por hecho que ya tenéis un servidor de correo electrónico instalado en la misma máquina que el bugzilla)

Configurar el servidor de email

Para conectar el servidor de correo electrónico con el bugzilla tenemos que redirigir los emails a una cuenta que elijamos (por ejemplo: bug-submit@TU_DOMINIO.COM) al ejecutable de bugzilla que tratará estos emails.

Para ello, en el archivo /etc/aliases añadimos la siguiente línea que indica que los emails recibidos por la cuenta bug-submit@TU_DOMINIO.COM se los envíe al ejecutable email_in.pl de bugzilla para que cree el bug:

# Test para crear un bug desde email en bugzilla
bug-submit: "|/PATH_A_TU_BUGZILLA/email_in.pl -vvv 2>/var/log/bugzilla_emailin.log"

Configurar Bugzilla

Entramos en la Administración de bugzilla, luego le damos a Parámetros y ahora le damos a la sección Correo electrónico (http://yesa.cps.unizar.es/bugzilla4/editparams.cgi?section=mta) y en el campo mailfrom ponemos bug-submit@TU_DOMINIO.COM. Le damos al botón Guardar Cambios y ya esta.

Funcionamiento

Lo primero es simular que recibimos un email pasándole un fichero que describe un email por la entrada al ejecutable que lee los emails de bugzilla.

Guardamos en un fichero (por ejemplo emailTest.txt) un ejemplo de email (acordaros de cambiar en email de destino bug-submit@TU_DOMINIO.COM por la dirección en la que escuche bugzilla, el email del que lo envía USUARIO@SU_DOMINIO.COM por una que corresponda a una cuenta del bugzilla y por último cambiar el producto y componente por uno de vuestro bugzilla donde queráis crear el bug):

Delivered-To:  bug-submit@TU_DOMINIO.COM
Received: by 10.68.47.230 with SMTP id g6cs99712pbn;
        Mon, 4 Jul 2011 02:12:03 -0700 (PDT)
Received: by 10.227.162.129 with SMTP id v1mr3783487wbx.63.1309770722829;
        Mon, 04 Jul 2011 02:12:02 -0700 (PDT)
Return-Path: <USUARIO@SU_DOMINIO.COM>
Received: from isuela.unizar.es (isuela.unizar.es [155.210.1.53])
        by mx.google.com with ESMTPS id ek19si11909570wbb.69.2011.07.04.02.12.02
        (version=TLSv1/SSLv3 cipher=OTHER);
        Mon, 04 Jul 2011 02:12:02 -0700 (PDT)
Received-SPF: pass (google.com: domain of USUARIO@SU_DOMINIO.COM designates 155.210.1.53 as permitted sender) client-ip=155.210.1.53;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of USUARIO@SU_DOMINIO.COM designates 155.210.1.53 as permitted sender) smtp.mail=USUARIO@SU_DOMINIO.COM
Received: from queiles.unizar.es (hordedb.unizar.es [155.210.1.33])
    by isuela.unizar.es (8.13.8/8.13.8/Debian-3) with SMTP id p649BxVm017299
    for bug-submit@TU_DOMINIO.COM; Mon, 4 Jul 2011 11:11:59 +0200
Received: from huecha.unizar.es (huecha.unizar.es [155.210.1.51])
    by queiles.unizar.es (8.13.8/8.13.8/Debian-3) with ESMTP id p649C1tH025070
    (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
    for <bug-submit@TU_DOMINIO.COM>; Mon, 4 Jul 2011 11:12:01 +0200
Received: from [155.210.155.156] (filemonpi2.cps.unizar.es [155.210.155.152])
    (authenticated bits=0)
    by huecha.unizar.es (8.13.8/8.13.8/Debian-3) with ESMTP id p649BurT031554;
    Mon, 4 Jul 2011 11:11:59 +0200
Message-ID: <4E1183DB.8050204@unizar.es>
Date: Mon, 04 Jul 2011 11:11:55 +0200
From: =?ISO-8859-1?Q?M=AA_Jos=E9_P=E9rez?= <USUARIO@SU_DOMINIO.COM>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.2.18) Gecko/20110616 Thunderbird/3.1.11
MIME-Version: 1.0
To: =?ISO-8859-1?Q?bugzilla <bug-submit@TU_DOMINIO.COM>
Subject: Prueba
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Mail-Scanned: Criba 2.0 + Clamd & Bogofilter

@product TU_PRODUCTO
@component TU_COMPONENTE
@summary Prueba de bug
@version unspecified
@op_sys Linux
@platform PC

Descripcion del bug

Se lo pasamos al ejecutable de bugzilla que se encarga de reciir los emails para crear los bugs:

>> ./email_in.pl < emailTest.txt

Si todo ha funcionado se habrá creado el bug en el bugzilla a partir del email.

Ahora lo siguiente será probar que enviando un email desde una dirección de email que corresponda con una cuenta del bugzilla. Si sigue funcionando ya tenemos todo hecho.

Para saber como se llaman los campos que tenemos que poner en el email para crear el bug con los datos que queramos podemos mirar la documentación en esta url: http://www.bugzilla.org/docs/4.0/en/html/api/Bugzilla/WebService/Bug.htm...

Errores

Error Can't locate Email/Reply.pm

Al ejecutar el programa que lee los emails que recibe bugzilla, obtenemos el siguiente error:

>> ./email_in.pl --help
Can't locate Email/Reply.pm
...

Solución

El problema esta en que falta el módulo Email-Reply de perl. Para instalarlo tendremos que instalar el paquete de nombre perl-Email-Reply a través de nuestro gestor de paquetes favorito o ejecutando el siguiente comando:

>> sudo yum install perl-Email-Reply

Error Can't locate Algorithm/C3.pm

Al ejecutar el programa que lee los emails que recibe bugzilla, obtenemos el siguiente error:

>> ./email_in.pl --help
Can't locate Algorithm/C3.pm in @INC (@INC contains: . lib/i386-linux-thread-multi lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8) at lib/Class/C3.pm line 25.
BEGIN failed--compilation aborted at lib/Class/C3.pm line 29.
Compilation failed in require at lib/MRO/Compat.pm line 27.
BEGIN failed--compilation aborted at lib/MRO/Compat.pm line 44.
Compilation failed in require at lib/Email/Abstract.pm line 7.
BEGIN failed--compilation aborted at lib/Email/Abstract.pm line 7.
Compilation failed in require at lib/Email/Reply.pm line 4.
BEGIN failed--compilation aborted at lib/Email/Reply.pm line 4.
Compilation failed in require at ./email_in.pl line 39.
BEGIN failed--compilation aborted at ./email_in.pl line 39.
...

Solución

El problema esta en que falta el módulo Class-C3 de perl. Para instalarlo tendremos que instalar el paquete de nombre perl-Class-C3 a través de nuestro gestor de paquetes favorito o ejecutando el siguiente comando:

>> yum install perl-Class-C3

Error Can't locate Email/MIME/Attachment/Stripper.pm

Al ejecutar el programa que lee los emails que recibe bugzilla, obtenemos el siguiente error:

>> ./email_in.pl --help
Can't locate Email/MIME/Attachment/Stripper.pm in @INC
...

Solución

El problema esta en que falta el módulo Email-MIME-Attachment-Stripper de perl. Para instalarlo tendremos que instalar el paquete de nombre perl-Email-MIME-Attachment-Stripper a través de nuestro gestor de paquetes favorito o ejecutando el siguiente comando:

>> yum install perl-Email-MIME-Attachment-Stripper

Error Service unavailable

Al enviar un email a la dirección que lee bugzilla, nos muestra el siguiente error en el log:

>> tail -100 /var/log/maillog
...
Jul  6 09:35:33 ia3 smrsh: uid 8: attempt to use "email_in.pl -vvv" (stat failed)
Jul  6 09:35:33 ia3 sendmail[15394]: p667ZX5R015393: to="|/var/www/bugzilla/email_in.pl -vvv", ctladdr=<bug-submit@dominio.com> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30703, dsn=5.0.0, stat=Service unavailable
Jul  6 09:35:33 ia3 sendmail[15394]: p667ZX5R015393: p667ZX5R015394: DSN: Service unavailable
...

Solución

Este problema puede deberse a que el email se envía desde una cuenta de email que no pertenece a ninguna cuenta del bugzilla. Por lo que tendremos que enviar el email con una dirección email que corresponda a una cuenta de bugzilla.

Instalar Bugzilla

La hormiga del bugzilla

Estos días he tenido que instalar un bugzilla en un servidor, aunque ha costado (problemas al usar un mysql remoto y usar un Centos). Aquí os explico lo que tenéis que hacer si queréis instalar un bugzilla. Como siempre en mi wiki tendréis la última versión de como hacer esto y además tenéis los problemas que me encontré al instalarlo y como los solucioné.

Lo primero de todo es bajarlo y lo descomprimirlo en una carpeta de nombre bugzilla dentro de la carpeta raiz de los documentos del apache (en nuestro caso /var/www/html):

>> cd /var/www/html
>> wget http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-3.0.6.tar.gz
>> gzip -d bugzilla-3.0.6.tar.gz
>> tar -xvf bugzilla-3.0.6.tar
>> mv bugzilla-3.0.6 bugzilla

Con el siguiente comando comprobamos si tenemos todo lo necesario instalado:

>> ./checksetup.pl --check-modules
* NOTE: You must run any commands listed below as root.
***********************************************************************
* REQUIRED MODULES                                                                                      *
***********************************************************************
* Bugzilla requires you to install some Perl modules which are either              *
* missing from your system, or the version on your system is too old.            *
*                                                                                                                         *
* The latest versions of each module can be installed by running the              *
* commands below.                                                                                           *
***********************************************************************
COMMANDS:
/usr/bin/perl -MCPAN -e 'install "Email::Send"'
/usr/bin/perl -MCPAN -e 'install "Email::MIME"'
/usr/bin/perl -MCPAN -e 'install "Template"'
/usr/bin/perl -MCPAN -e 'install "Email::MIME::Modifier"'
/usr/bin/perl -MCPAN -e 'install "Date::Format"' 
***********************************************************************
* DATABASE ACCESS                                                                                        *
***********************************************************************
* In order to access your database, Bugzilla requires that the                          *
* correct "DBD" module be installed for the database that you are                  *
* running.                                                                                                           *
*                                                                                                                         *
* Pick and run the correct command below for the database that you             *
* plan to use with Bugzilla.                                                                                 *
***********************************************************************
COMMANDS:
PostgreSQL: /usr/bin/perl -MCPAN -e 'install "DBD::Pg"'
Minimum version required: 1.45
MySQL: /usr/bin/perl -MCPAN -e 'install "DBD::mysql"' 
Minimum version required: 2.9003

Ahora instalamos lo que nos ha indicado el script que hemos ejecutado:

>> /usr/bin/perl -MCPAN -e 'install "Email::Send"'
>> /usr/bin/perl -MCPAN -e 'install "Email::MIME"'
>> /usr/bin/perl -MCPAN -e 'install "Template"'
>> /usr/bin/perl -MCPAN -e 'install "Email::MIME::Modifier"'
>> /usr/bin/perl -MCPAN -e 'install "Date::Format"'
>> /usr/bin/perl -MCPAN -e 'install "DBD::mysql"'

Creamos un fichero de nombre localconfig y escribimos lo siguiente (cambiando la negrita por tus datos):

$create_htaccess = 1;
$webservergroup = 'apache';
$db_driver = 'mysql';
$db_host = 'HOST_DE_TU_SERVIDOR';
$db_name = 'NOMBRE_BASE_DATOS';
$db_user = 'USUARIO_BASE_DATOS';
$db_pass = 'CLAVE_USUARIO_BASE_DATOS';
$db_port = 3306;
$db_sock = ;
$db_check = 1;
$index_html = 0;
$cvsbin = ;
$interdiffbin = ;
$diffpath = '/usr/bin';

Ahora instalamos bugzilla con el siguiente comando (Puede que nos de algún error si no se ha instalado bien alguna dependencia) y rellenamos los datos para crear la cuenta de administrador del bugzilla:

>> ./checksetup.pl
...
Enter the e-mail address of the administrator: EMAIL_CUENTA_ADMINISTRADOR
Enter the real name of the administrator: NOMBRE_ADMINISTRADOR
Enter a password for the administrator account: CONTRASEÑA_ADMINISTRADOR
Please retype the password to verify: CONTRASEÑA_ADMINISTRADOR
...

Ahora vamos al fichero de configuración del apache (en nuestro caso en /etc/httpd/conf/httpd.conf) y añadimos las siguientes líneas al final al final del todo:

<Directory "/var/www/html/bugzilla">
    Options +ExecCGI
    AllowOverride Limit
    DirectoryIndex index.cgi
    AddHandler cgi-script .cgi
</Directory>

Ahora para que tenga efecto esta modificación reiniciamos el apache:

>> sudo /etc/init.d/httpd restart

Y ya lo tenemos instalado. Para acceder a él iremos a la url http://TU_SERVIDOR/bugzilla/ y usaremos la cuenta con los datos que le indicamos con el comando checksetup.pl.