bugzilla

wall < "Bugzilla und email_in.pl"

Broadcast message from spillerm@unixe.de (pts/1) (Do Nov 22 13:35:22 2007):
4
Diesen Beitrag schrieb ich vor 11 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Und hier mal im Schweinsgalopp eine Anleitung, wie man den dämlichen phantastischen Bugzilla dazu bringt, Tickets per Mail anzunehmen.

Vorbedingungen

  • Die Installation liegt in /usr/share/bugzilla und funktioniert über Webinterface.
  • Der verwendete Mailserver ist ein sendmail.

Zuständig ist ein Perl-Script: /usr/share/bugzilla/email_in.pl. Als ersten Schritt prüfen wir, ob das Teil per Konsole funktioniert. Dazu legen wir eine Datei /tmp/blamail an mit einem Inhalt, der folgendem ähnlich ist — natürlich in Abhängigkeit von eurer Konfiguration:

From: EinRegistrierterBugzillaUser@domain.tld
Subject: Ein aussagekräftiges Subject
@product = DieProduktgruppe
@component = Testqueue
@version = 1.0
@op_sys = WasWeissIch
@rep_platform = KeineAhnungLasstEuchWasEinfallen
Wer andern eine Grube gräbt
hat meist ein Gruben-Grab-Gerät!
-- 
Die Signatur wird durch diese zwei Striche abgetrennt und erscheint nicht im Ticket

Dieses Muster-Ticket füttern wir nun dem Script ein:

$ cd /usr/share/bugzilla
$ perl email_in.pl -vvv < /tmp/blamail

Funktioniert? Okay — dann weiter. Damit das im sendmail auch tut, muss ein Symlink nach /etc/smrsh (und natürlich muss der sendmail smrsh überhaupt kennen! (FEATURE(smrsh', /usr/sbin/smrsh')dnl)); also jetzt so:

$ cd /etc/smrsh
$ ln -s /usr/share/bugzilla/email_in.pl
$ perl email_in.pl -vvv < /tmp/blamail

Der Ordner, in den der Link gehört, ist abhängig vom verwendeten System, vom verwendeten Paket etc. — um herauszufinden, wohin der Link gehört, ruft Ihr das hier auf:

$ strings /path/to/smrsh | grep ^/

Bei mir liegt das Binary in /usr/sbin. Kann gut sein, dass Ihr nun erst einmal mit Fehlermeldungen zugebombt werdet, irgendwas in dieser Art hier:

Can't locate Bugzilla.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /etc/smrsh/email_in.pl line 40.
BEGIN failed--compilation aborted at /etc/smrsh/email_in.pl line 40.

Das kommt daher, dass das Ding eigentlich nur aus seinem eigenen Ordner heraus aufgerufen werden will. Wenn man das Script ein wenig stutzt, ist das aber zu schaffen: einfach eine Zeile einfügen (nach dem use strict):

use lib "/usr/share/bugzilla";

Wenn Ihr den Aufruf perl /etc/smrsh/email_in.pl -vvv < /tmp/blamail nun erneut versucht -- funktioniert es nun? Okay -- dann weiter.

In den aliases muss nun eine Email-Adresse hinzugefügt werden, ungefähr sowas hier:

bugzilla: "|/etc/smrsh/email_in.pl -vvv"

Anschliessend das newaliases nicht vergessen! nun könnt Ihr mal versuchen, eine Mail an bugzilla@domain.tld zu schicken. Geht alles gut: prima, dann sind wir fertig!

Blöd allerdings, wenn Ihr eine ähnliche Meldung wie diese bekommt:

Abhilfe geschafft hat hier ein chmod +s /usr/share/bugzilla/email_in.pl; danach lautete die Fehlermeldung folgendermassen:

Er versucht, in das Bugzilla-Verzeichnis zu wechseln, und aus Sicherheitsgründen wird das geblockt; ist auch unnötig, da wir ihm ja vorhin anhand des use lib-Statements gesagt haben, wo er seinen Kram findet! Abhilfe schafft es, diese Zeile 30 einfach auszukommentieren -- klingt brachial, ist aber extrem wirkungsvoll.

Wenn es dumm läuft kann es sein, dass Eure Tickets nun mit dieser Meldung nicht akzeptiert werden: A legal OS/Version was not set.; soweit bin ich gerade und komme auch nicht weiter. In meiner blamail wird der Parameter ja sogar als @op_sys = Windows definiert, per Konsole tut auch alles wunderbar -- bloss per Mail schafft er es angeblich nicht, das auszuwerten.

Fazit: unübersichtlich, buggy, macht keinen Spass; ziemlich unbenutzbar für die User, da die diese ganzen '@'-Parameter angeben müssen. Das Frontend des Bugzilla kann man sowieso vergessen; mich verwundert der Grad der Verbreitung dieser Sache...

Update Mein Kollege kann Tickets per Mail einstellen, bloss ich kann es nicht; kann ggf. daran liegen, dass er Windows nutzt, ich hingegen MacOS X, und dass bei ihm @op_sys automatisch richtig ausgewertet wird -- als Parameter hat er es nämlich nicht angegeben -- und dass es bei mir überhaupt nicht ausgewertet wird, auch nicht, wenn ich es explizit angebe. Mpf.

4