About

This page contains a single entry from the blog posted on September 19, 2007 10:27 AM.

The previous post in this blog was Apache+/-MySQL.

The next post in this blog is Benutzerverwaltung.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31

« Apache+/-MySQL | Main | Benutzerverwaltung »

Ruby + Mailman

Mailman ist eine sehr mächige Mailinglisten-Verwaltungssoftware, außerdem eine der beliebtestens in der Unix-Welt. Weiterhin stellt diese Software eine der Hauptmotivationen für meine eigene Serververwaltungssoftware dar: Sie ist nicht mittels z.B. Confixx administrierbar.
Mailman bietet eine umfangreiche Webbasierte Administrationsoberfläche, die aber relativ fest mit der Software selbst verwachsen ist (das Grundgerüst der Seite ist fest im Python-Quelltext verdrahtet). Man hat zwar die Möglichkeit, HTML-Vorlagen pro Liste anzulegen, aber so ganz frei ist man in der Seitengestaltung nicht. Außerdem ist die Integration der Mailinglistenverwaltung in eine andere Administrationsumgebung schwierig.

Mailman ist in Python geschrieben, einer Sprache die Ruby nicht unähnlich ist.

Mailman bietet eine Menge an Konsolenskripten zur Mailinglistenadministration an.
"Hey," dachte ich mir da gestern, "Dann ist es ja ein leichtes, die Änderungen an Mailinglisten vorzunehmen indem ich einfach diese Skripte von meinem Ruby-Programm aufrufe". Möglich wäre es auf jeden Fall, aber bei jeder Änderung erst eine Instanz einer Shell zu erstellen, dann diesem einen zusammengefrickelten string zu übermitteln und den Rückgabewert abzufangen... das ist nicht sauber.
Aber es gibt eine begeisterungsfähige Lösung, auf die ich soeben gestoßen bin:
Mailman bietet ein Skript namens withlist, wo entweder interaktiv via Konsole, oder aber (und darum geht es mir!) programmatisch, also mittels eines eigenen Python-Scripts, direkt Änderungen an Mailinglisten vorgenommen werden können. Nun ist Python aber nicht Ruby, doch dafür gibts eine Bibliothek namens Ruby/Python. Damit lassen sich Python-Objekte und -Funktionen in Ruby wie Ruby-Objekte/-Methoden verwenden.
Was werde ich nun also tun? Ich werde das withlist abspecken und nach Ruby portieren, dann mittels Ruby/Python die von Mailman zur Verfügung gestellten Libs einbinden und dann eine perfekt in Consolvix integrierte Mailinglistenadministrationsoberfläche (38 chars! ;-)) haben.

<added date="2007-09-20 20:39 UTC+2">Leider hat das alles nicht so geklappt, wie ich es mir vorgestellt hätte. Python/Ruby lässt sich nach Anpassen der Bibliothekspfade zwar einwandfrei kompilieren, aber sobald man davon in einer .rb-Datei gebrauch machen möchte, wirft die python.so fröhlich mit Segfaults und Meldungen über fehlende Objektreferenzen um sich. Nunja, ein Versuch war's wert. Ich werde jetzt doch die Methode mit den Shellscripten anwenden, auch wenn das einiges an zusätzlichem Overhead bedeutet...</added>

Nur leider geht eines nicht, und zwar die Verlagerung der Mailman-Konfiguration in eine Datenbank. Es gibt zwar Bemühungen diesezüglich, aber die Beziehungen seien einfach zu komplex laut eines Beitrags in der Mailman-Mailingliste. Ob ich die Daten dennoch redundant in einer Datenbank abspeichere, ist noch nicht entschieden. Vermutlich jedoch eher nicht, da sonst die Listenadministration via Mailman's eigener Oberfläche oder via E-Mail nicht mehr abgeglichen würde. Natürlich könnte man ein Synchronisations-Script schreiben, welches ab und an per Cron getriggert wird, aber dann sind wir ja wieder da, wo ich eigentlich von weg wollte.

TrackBack

TrackBack URL for this entry:
http://www.innoq.com/movabletype/mt-tb.cgi/2739

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)