Magerquarksocke

Himbeerkompott

Über neue Inhalte auf regelmäßig frequentierten Websites bleibt der Internetnutzer von Welt heutzutage gerne über die sogenannten sozialen Medien auf dem Laufenden – insbesondere Twitter scheint vielen für das Informiertbleiben prädestiniert. RSS-Feeds hingegen eher dafür, ratlose Gesichtsausdrücke hervorzurufen.

Und das, obwohl RSS-Feeds genau dafür entwickelt wurden, automatisch über neue Einträge auf Websites informiert zu werden – plattformunabhängig und ohne mich an ein arbiträres Netzwerk zu binden. Nicht zuletzt erscheint es wie eine von hinten durch die Brust ins Auge getroffene Lösung, auf Twitter den neuen Einträgen einer Seite zu folgen, die diese dort zumeist automatisiert twittern lässt, indem sie einen Dienst wie IFTTT mit ihrem RSS-Feed füttert – da kann ich ja gleich den Feed selbst abonnieren.

Wie so viele der wenigen, die dies auch tatsächlich tun, begann ich die Verwaltung meiner Feeds im Google Reader. Als dieser eingestellt wurde, entwickelten sich schnell Alternativen, von denen feedly zum Quasi-Standard wurde. Auch in zog meine überschaubare Feed-Sammlung dorthin um.

Nun läuft feedly zwar weiter und es gibt auch keine Anzeichen dafür, dass sie ihren Betrieb in nächster Zeit einstellen würden. Dennoch bin ich kein allzu großer Freund davon, mich von einem Anbieter abhängig zu machen. Es mag cool und hip und modern, aber eben leider auch ziemlicher Käse sein, seine Daten einem Anbieter jenseits des großen Teichs anzuvertrauen, der mit „Cloud“ und „SaaS“ und dergleichen Begriffen um sich wirft, dass ein jedes Bullshit-Bingo viel zu schnell vorbei wäre – nicht nur unter dem Aspekt des Datenschutzes betrachtet.

Da ich ja nun bereits einen Webspace angemietet habe, auf dem dieses Blog ebenfalls liegt, lag es nahe, sich nach einer selbst installierbaren Lösung umzuschauen. Der prominenteste Vertreter in der Kategorie RSS-Feed-Reader ist wohl TinyTinyRSS, über welches man viel Gutes liest – das aber in seiner Dokumentation gleich darauf hinweist, für einen handelsüblichen Webspace zu mächtig zu sein, ein dedizierter Server solle es doch bitte schon sein. Nach ein wenig Recherche bin ich dann auf FreshRSS gestoßen – dieses soll sich auch mit weniger Ressourcen begnügen.

Die Installation von FreshRSS verlief auch tatsächlich erwartbar simpel: Die Dateien per FTP in das richtige Verzeichnis geschaufelt, eine Datenbank angelegt, vergessen, dem data-Ordner Schreibrechte zu geben und das noch schnell nachgeholt, während des Setups den Datenbank-Zugang eingerichtet und fertig war es. Danach trudelten meine RSS-Feed-Abonnements zuverlässig in meiner eigenen FreshRSS-Installation ein.

Allerdings erst auf Zuruf. Ich habe es nicht geschafft, den Cronjob einzurichten, der die Feeds automatisch in regelmäßigen Abständen auf neue Beiträge abklopft. Die Admin-Oberfläche meines Webspace hat für Cronjobs zwar einen netten grafischen Assistenten, aber egal mit welchen Pfaden zum Aktualisierungs-Skript ich den auch gefüttert habe, er tat es nicht. Gut, ab und an einmal selbst auf Aktualisieren zu drücken erschien mir als gerade noch machbar.

Gleichzeitig wollte ich allerdings auch eine Software zum Sammeln von Lesezeichen installieren. Hierfür hatte ich mir Shaarli ausgeguckt. Auch dessen Installation sollte nicht komplizierter sein als jene von FreshRSS (oder einer beliebigen anderen Websoftware), scheiterte aber stets an fehlenden Schreibrechten für gewisse Ordner.

In beiden Problemfällen steht man als Nutzer eines Webspace-Angebots schlecht da, kann man doch weder eine Cronjob-Datei aufrufen und dort Dinge hineinschreiben, noch Besitzer und Rechte gewisser Ordner ändern (zumindest nicht über die Möglichkeiten seines FTP-Programms hinaus). Man kommt ja an nichts heran.

Also habe ich mir vor Kurzem einen Raspberry Pi gekauft, genauer gesagt das Modell B der dritten Generation – zusammen mit einem Gehäuse und einer SD-Karte, auf der NOOBS bereits vorinstalliert ist.

Bei NOOBS handelt es sich um einen Tool, das sich zunächst einmal durch seinen ebenso einprägsamen wie treffenden Namen profiliert, und es dem Einsteiger erlaubt, mit ein paar Mausklicks ein Betriebssystem zu installieren – das Debian-basierte Raspbian war ebenfalls bereits vorhanden, also habe ich dort, ohne mir weiter etwas dabei zu denken, ganz unschuldig ein paar Mal auf Weiter geklickt.

Nun ist so ein Mini-PC mit Betriebssystem nicht gleich für den Server-Einsatz geeignet, dafür fehlt es am AMP-Stack (Apache, MariaDB, PHP). Also eben daran erinnert, dass Paketverwaltung in Debian-basierten Distributionen über apt-get funktioniert, und ein „apt-get search apache2“ eingetippert. Hieran bemerkt man bereits meine Unerfahrenheit mit Debian, bin ich es doch von Fedora gewohnt, „dnf“ für alles benutzen zu können. Hier jedoch nimmt man entweder einfach apt für alles oder apt-cache zum Suchen, aber apt-get search geht nicht.
(Bei der Gelegenheit muss mir noch einmal ein Debian-Nutzer erklären, wieso sie sich darüber lustig machen, dass man unter Windows auf „Start“ klickt, wenn man herunterfahren möchte, während sie apt-GET auch nutzen, um Programme zu deinstallieren.)

Apache und MariaDB ließen sich denn auch recht problemlos installieren, aber bei PHP stutzte ich ein wenig. Die Paketverwaltung wollte mir PHP5 andrehen, ich aber lieber PHP7 haben. Raspbian 8 „Jessie“, mithin die aktuelle Version, bringt allerdings nach wie vor maximal PHP5 mit – der Nachteil des Debian-Wegs, nur stabile, getestete Software auszuliefern. Klar, hätte ich ein externes Repo eingebunden, hätte ich auch so PHP7 nutzen können. Aber von externen Repos bin ich nun wirklich kein Freund.

Also dachte ich mir, wenn ich Fedora eh besser kenne, und dort aktuelle Pakete vorhanden sind, nehme ich das doch. Nun wäre Fedora keine Distribution, die ich für einen irgendwie gearteten Produktiv-Einsatz im Serverbereich empfehlen würde, aber für meine privaten Zwecke erschien es mir sinniger.

In Form von Fedberry gibt es tatsächlich eine Fedora-Variante für den Raspi, die ich sogleich auf eine (bei der Gelegenheit gleich größere) SD-Karte transferiert und auf dem Raspi installiert habe. Im Gegensatz zu Raspbian habe ich hierbei die headless-Variante genommen, die keinen Desktop mitbringt. Auf einem Server ist der eh überflüssig.

Nach der anfänglichen Verwirrung, dass Apache in den RPM-Repos natürlich nicht apache, sondern httpd heißt, verlief die Installation des AMP-Stacks reibungslos und, wie gewünscht, mit PHP7.

Da ich nun schon die Möglichkeit hatte, Software direkt von GitHub zu klonen, wollte ich diese natürlich auch gerne nutzen. Ein „dnf install git“ förderte jedoch eine überbordend lange Liste an Abhängigkeiten zutage, die alle zu installieren ich eher wenig Lust verspürte. Für ernsthaftes Arbeiten mit git mag das gut und schön und nötig sein, aber mehr als ein seltenes „git clone“ und „git pull“ habe ich nicht vor auszuführen. Eine kurze Recherche verwies auf das Paket git-core, das derlei grundlegende Arbeiten ermöglicht. Und siehe da, „dnf install git-core“ resultierte in nur wenigen Abhängigkeiten. Sehr schön.

Nach der obligatorischen Installation von PhpMyAdmin waren nun sämtliche Grundlagen vorhanden. Aufgrund hier und da vereinzelt aufgetretener Abhängigkeiten waren auch schon beinahe alle PHP-Erweiterungen installiert, die FreshRSS und Shaarli so benötigen.

Weiter ging es also mit der Installation des besagten FreshRSS. Nun ist so eine Installation einer Server-Software keine allzu große Sache – man schaufelt die nötigen Dateien in das gewünschte Unterverzeichnis, legt, sofern nötig, eine Datenbank an, und das war es auch schon. Höchstens die Zugriffsrechte des Servernutzers müssen gegebenenfalls noch angepasst werden.

Dies sollte mich noch einiges an Frustration kosten. In all meiner Euphorie über Fedora hatte ich natürlich völlig vergessen, dass SELinux ja auch noch Bestandteil des Systems ist.

Nach einem kurzen Stutzen darüber, dass der Servernutzer von Apache unter Fedora nicht „www-data“, sondern, man höre und staune, „apache“ heißt, was aber nach einer Sekunde des Nachdenkens (eine Tätigkeit, die durchaus öfter hilfreich sein soll!) kein weiteres Problem darstellte, verweigerte FreshRSS weiterhin die Installation unter Hinweis auf fehlende Schreibrechte.

Nun ist SELinux an sich eine gute Sache, aber die Syntax der Kommandos, um es zu verwalten, dermaßen unintuitiv, dass man früher oder später zwangsläufig an den Punkt kommt, an dem man das ganze System am Liebsten komplett ausschalten würde (Hinweis: keine gute Idee).

semanage fcontext -a -t httpd_sys_rw_content_t “data/(.*)?“

lautet der Befehl, dem Servernutzer (httpd) Lese- und Schreibrechte (rw, read-write) für das Verzeichnis data sowie dessen Inhalt zu geben. Ein

restorecon -Rv data

soll diese Rechte dann permanent eintragen.

So weit, so Theorie. Dummerweise funktionierte das nicht. Ich, schon am Suchen wie ein Weltmeister, dachte erst, es läge doch nicht an SELinux. Mittels „setenforce 0“ dessen Funktion kurzzeitig ausgeschaltet, ließ sich FreshRSS dann allerdings doch installieren, also musste SELinux der Verursacher sein. Im Zuge meiner Recherchen wurde mir dann endlich auch die Funktionsweise des chcon-Befehls klar, ebenso wie warum es mir bisher nie klargeworden war, ist doch der korrekte Befehl nicht kürzer als

chcon -R unconfined_u:object_r:httpd_sys_rw_content_t:s0 /var/www/feeds/data

Immerhin, damit meckerte FreshRSS nun ebenfalls nicht mehr. chcon ist allerdings nicht für permanente Regelsetzung gedacht, weshalb die Schreibrechte früher oder später wieder verloren gehen würden.

Bei genauerer Betrachtung der obigen Befehlskette fiel es mir dann auch wie Schuppen aus den Haaren von den Augen: Ich hatte mich stets schon im „feeds“-Ordner befunden, in dem FreshRSS liegt, und von dort aus semanage fcontext nur noch mit dem Unterordner data arbeiten lassen wollen. Der Befehl arbeitet allerdings nicht hierarchiesensitiv und benötigt daher immer den kompletten Pfad, sprich var/www/html/feeds/data – ebenso wie restorecon.

Ich kam mir nur ein bisschen blöd vor.

Nach einer kurzen Schweigeminute in Gedenken an diesen ebenso offensichtlichen wie dämlichen Faux Pas konnte ich nun endlich die benötigten Rechte vergeben und sowohl FreshRSS als auch Shaarli installieren.

Beide Tools laufen nun seit einer Woche problemlos. Der Cronjob zum Abholen der Feeds verrichtet seinen Dienst ebenfalls wie er es soll. Im Endergebnis bin ich um eine Erfahrung reicher und zufrieden mit beiden Diensten. Der Raspi verrichtet seine Arbeit ebenfalls anstandslos. Ein tolles Stück Technik.


Memo an mich selbst: Einen Stil für Codeblöcke ins Blog-Design aufnehmen.