/dev/joschi

Ramblings, rants, and rabid speculations

Nntp2rss Gateway => Rss-niouz

Durch einen Artikel von AquaJo bin ich auf nntp//rss gestoßen. nntp//rss ist ein Programm, das viele RSS-Feeds einsammeln und diese über NNTP bereitstellen kann, so dass diese Feeds über einen üblichen Newsreader, wie etwa Mozilla Thunderbird, Outlook Express oder slrn, gelesen werden können. Ein separater RSS-Aggregator, wie Liferea oder Akregator werden dadurch überflüssig. nntp//rss ist allerdings in Java geschrieben, was zwar eine hohe Portabilität sichert, aber dafür auch nicht zimperlich mit dem verfügbaren Speicher umgeht. Davon abgesehen möchte ich die Java VM nicht nur wegen nntp/rss auf meinem Root-Server installieren.

Aus Spass an der Freude und ein wenig Langeweile habe ich mich entschieden, ein ähnliches Programm in Ruby zu programmieren. Die Sprache wollte ich mir schon länger mal vornehmen (nicht zuletzt wegen dem aktuellen Hype um Ruby on Rails) und das war eine gute Gelegenheit. Als Basis für den Daemon habe ich niouz genommen, ein sehr simpler NNTP-Server für Ruby, der schon alle notwendigen Features unterstützt. Folgerichtig wird mein Projekt rss-niouz heißen. Die Newsbeiträge werden in einem Spool-Verzeichnis auf der Festplatte gespeichert. Pro Beitrag wird 1 Datei angelegt, also ähnlich dem Maildir-Format. Die einzelnen Newsgroups und deren Beschreibung können über eine einfache Textdatei angelegt werden. Die Konfiguration des Daemons und die Feed-Liste erfolgt ebenfalls über Textdateien, die im YAML-Format vorliegen.

Bis jetzt kann rss-niouz folgendes:

  • chroot Unterstützung: rss-niouz kann in einem chroot-Jail eingesperrt werden
  • Privilege separation: rss-niouz kann unter einer beliebigen Benutzerkennung laufen
  • Über ein Skript können RSS- und ATOM-Feeds in den NNTP-Server eingespeist werden
  • Artikel können auch von NNTP-Clients in die Gruppen gepostet werden

Was definitiv noch fehlt bzw. verbessert werden muss:

  • Encoding der Feed-Items wird nicht beachtet.
  • Doppelte bzw. schon vorhandene Artikel werden nicht erkannt

Was geplant ist:

  • Unterstützung verschiedener Datenspeicher für Newsgroups und Artikel (MySQL, PostgreSQL, SQLite)
  • webbasierte Administrationsoberfläche
  • Unterstützung von NNTPS (NNTP über SSL)
  • Benutzerauthentifizierung am NNTP-Server, so dass mehrere Benutzer ihre eigenen Feed-Kollektionen zusammenstellen können
  • OPML Im- und Export

Ich bin noch am überlegen, ob ich (nur für dieses Projekt?) eine Trac-Instanz aufsetzen soll. Python ist schon auf dem Server installiert, um Subversion konnte ich mich bislang jedoch noch erfolgreich drücken.

Comments