27. Januar 2021, 20:51

Nitter

Wie können Tweets auf der Werbeplattform Twitter gelesen werden? Ohne Profil? Ohne Preisgabe von Verhaltensdaten? Ohne Filter oder lästiger Werbung? Die Antwort ist Nitter1.

Für lange Zeit reichte mir die öffentliche Instanz2 zum Lesen und Recherchieren. Durch Verzicht auf Javascript und 3rd-Party-Ressourcen ist die Darstellung und User-Experience schnell, verglichen mit dem Original. Die für mich wichtigste Funktion ist jedoch die Möglichkeit, Kanäle und Tweets via RSS-Feed in meine Nextcloud einzubinden.

Seit einigen Tagen laufen die RSS-Feeds in das Rate-Limiting der öffentlichen Nitter-Instanz. Die Zeit ist gekommen, auf die eigene Instanz umzusteigen.

Herstellen der Entwicklungsumgebung

Ein Container ist der schnellste und bequemste Weg. Leider auch einer gegen meine Softwareentwickler-Ehre. Aufgrund der übersichtlichen Projektgröße habe ich mich zum Kompilieren der Quellen entschieden. Das erste Etappenziel: Herstellen der Entwicklungsumgebung.

# apt install build-essential libsass-dev redis-server

Als nächstes gilt es Nim3 zu installieren. Dieser Compiler ist plattformunabhängig und kombiniert die Vorzüge mehrerer Programmiersprachen. Es erzeugt kompakte und nativ ablaufende Binaries ohne weitere Abhängigkeiten und macht es für Anwendungen im Server-, Embedded- und Realtime-Bereich attraktiv. Ich kannte es bisher nicht und erlag prompt der Versuchung abseits des Weges mit Nim herumzuspielen. Nach einigen Stunden fand ich mich inmitten einer Entdeckungstour. Unverrichteter Dinge habe ich diese abgebrochen und eine neue ToDo-Karte in meinem Deck-Board mit dem Tag “to explore” hinterlegt.

Im Debian Standard-Repo existiert eine Nim-Version, leider zu alt für Nitter. Installiert wird die aktuelle Nim-Version mit dem Einzeiler:

curl https://nim-lang.org/choosenim/init.sh -sSf | sh

Bevor der (berechtigte) Einwand kommt: Das heruntergeladene Skript ist harmlos und führt nur eine Plattform- und Architekturerkennung durch, um aus dem Repository die passende Stable4 zu laden. Ich gehe davon aus, dass wir uns auf einer Test- bzw. Entwicklungsumgebung befinden. Der Ort des Compilers wird im Environment in der .profile Datei hinterlegt (hier bitte den eigenen Installations-Home-Pfad angeben):

echo "export PATH=/YOUR-HOME-HERE/.nimble/bin:$PATH" >> .profile

Eine systemweite Installation ist nicht notwendig. Nim kann im Kontext eines normalen Benutzers betreiben werden. Zum Überprüfen der Installation reicht ein Aufruf mit dem Switch zur Ausgabe der Programmversion:

nim -v

Laden und Kompilieren von Nitter

Nächstes Etappenziel ist der Download des Quellcodes und das Kompilieren. Nim fragt, ob es die insgesamt 26 Abhängigkeiten aus GitHub nachladen darf. Da mir bei Prüfung der Repositories keine Ungereimtheiten aufgefallen sind, kann die Frage beruhigt mit Yes beantwortet werden.

git clone https://github.com/zedeus/nitter
cd nitter
nimble build -d:release
nimble scss
mkdir ./tmp

Nach wenigen Minuten liegt das Binary im Verzeichnis. Gemäß Anleitung ist zusätzlich ein /tmp Ordner zu erstellen. Im Unterverzeichnis /public sind die statischen Icon- und Logo-Dateien. In /public/md/about.md ist das Impressum im Markdown-Format zu hinterlegen. Zum Betrachten von Videos sollte in der nitter.conf ein HMAC-Token hinterlegt sein. Diese kann mit nachfolgender Zeile erzeugt werden:

echo -n YOUR-TOKEN-HERE | openssl dgst -sha256 -hmac secret

Auf einem Testsystem kann die Binary direkt gestartet und die Einstellungen im Webbrowser überprüft werden. Später auf einem Produktivsystem sollte ein vorgelagerter Reverse-Proxy den direkten Aufruf verhindern. Das bringt uns zur dritten und letzten Etappe:

Einrichtung auf dem Webserver

Aus Sicherheitsgründen wird auf dem Webserver das Binary nicht in einem Verzeichnis unterhalb /var/www sondern im Home-Verzeichnis eines neu erstellten, nicht-privilegierten Benutzers abgelegt. Damit die Instanz automatisch gestartet werden kann erfolgt die Registrierung in /etc/systemd/system.

Ein normales Web wird mit einem Let’s Encrypt Zertifikat erstellt. Für Apache und nginx Webserver stehen entsprechende Konfigurationsvorlagen im Wiki des Nitter-Repo bereit5 damit diese als Reverse-Proxies Anfragen weiterleiten. Die Vorlagen habe ich um eigene HTTP-Header Direktiven und um eine CSP ergänzt, da diese nicht enthalten waren.

Screenshot

Mit dieser eigenen Instanz kann ich wieder RSS-Feeds aus Twitter ziehen. Ob die Social-Media Tanten und Onkels wissen, dass ihre aufwändig gestalteten Bilder und Clickbaiting6 zumindest bei mir ins Leere laufen?

Den Link teile ich nicht mit. Es ist kein Staatsgeheimnis und wer gezielt sucht, wird fündig und darf als Finderlohn meine Instanz mitbenutzen. Ich bewerbe diese nicht und will nicht wieder in ein Rate-Limiting kommen.

In diesem Sinne,
Bleibt gesund!

Tomas Jakobs

© 2021 Tomas Jakobs - Impressum und Datenschutzhinweis