Añadir nuevo comentario

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.