Fryboyter

Isso in Go

Isso ist aktuell mein bevorzugtes Kommentarsystem für Internetseiten, da man hierfür nur eine SQLite-Datenbank benötigt. Leider war die Installation in der Vergangenheit oft etwas problematisch. Aktuell ist wohl eine Installation über PyPI gar nicht bzw. nur über Umwege möglich (https://github.com/posativ/isso/issues/617).

Durch Zufall bin ich heute bei Github auf go-isso gestoßen. Der Entwickler möchte eine API kompatible Alternative zu Isso anbieten für die er die Programmiersprache Go nutzt. Somit braucht man im besten Fall nach Veröffentlichung einer neuen Version nur eine einzelne Datei herunterladen und ausführen. Bei Hugo klappt das zumindest sehr gut.

Der Entwickler weist aber aktuell darauf hin, das go-isso noch mit Vorsicht zu genießen ist, da es sich um sein erstes Projekt mit Go handelt, so dass der Code vermutlich qualitative Verbesserungen vertragen kann. Bugs sind ebenfalls nicht ausgeschlossen. Kurz gesagt, Benutzung auf eigene Gefahr.

Vielleicht hat ja der eine oder andere Leser dieses Artikels Lust und Zeit, sich an go-isso zu beteiligen. Gesucht werden auch Leute die sich mit Javascript auskennen. Da ich weder das eine noch das andere beherrsche, werde ich wohl selbst nur testen und ggf. Bugs melden.

OSBN | General

Wer Hilfe will sollte keine Screenshots veröffentlichen

Derzeit versuche ich wieder verstärkt auf diversen Plattformen den Nutzern bei Ihren Computerproblemen zu helfen. Hierbei ist mir aufgefallen, dass aktuell einige Nutzer beispielswese einen Screenshot einer Konfigurationsdatei erstellen (teilweise sogar mit einem Mobiltelefon), diesen dann auf eine Seite wie picflash.org hochzuladen und das Bild dann im Beitrag einzubinden mit dem um Hilfe gebeten wird.

Lasst das! Bitte. Zum einen macht ihr euch damit selbst nur unnötig viel Arbeit. Und zum anderen verschreckt ihr damit viele der Leute die euch helfen wollen. Wenn ich zum Beispiel eure Konfigurationsdatei auf Fehler testen will möchte ich diese nicht erst von einem Screenshot abtippen müssen. Eher helfe ich gar nicht.

Sofern es also sinnvoll ist, kopiert den Text einfach in den Beitrag. Oder nutzt einen Pastebin-Dienst wie termbin.com.

Um Termbin nutzen zu können, muss nur cat und netcat auf dem Rechner installiert sein. Nehmen wir beispielsweise einmal an, man hat Probleme mit Schriftarten und will die Datei fonts.conf veröffentlichen. Hierfür reicht folgender Befehl.

cat fonts.conf | nc termbin.com 9999

Als Ergebnis erhält man einen Link wie zum Beispiel https://termbin.com/92e6 der auf den Dateiinhalt verweist. Gerade bei längeren Konfigurationsdateien wie der /etc/ssl/sshd_config ist es besser darauf zu verlinken als diese komplett in den Beitrag zu packen.

Serverseitig wird bei Termbin https://github.com/solusipse/fiche eingesetzt. Wer also will, kann einen eigenen Pastebin-Dienst betreiben.

OSBN | General

Sddm - Nur auf einem Monitor anmelden

Achtung dieser Artikel löst ein Luxusproblem! An meinem Hauptrechner sind zwei Monitore angeschlossen und als Display Manager nutze ich SDDM. SDDM hat bei mehreren Monitoren die Angewohnheit, auf allen Monitoren das Gleiche angezeigt, so dass man sich prinzipiell über jeden Monitor anmelden kann. Mich nervt das aber irgendwie; zumal ich mich immer an dem Monitor anmelde der direkt vor mir steht. Wie gesagt, ein Luxusproblem.

SDDM sieht es selbst aktuell nicht vor, dass die Eingabemaske nur auf einem Monitor erscheint. Also ist wieder Handarbeit nötig. Hierfür benötigt man das Tool xrandr. Unter Arch hat das Paket die Bezeichnung xorg-xrandr.

Mittels xrandr | grep ' connected' lässt man sich als erstes die angeschlossenen Monitore anzeigen und sucht sich denjenigen heraus, den man unter SDDM nicht nutzen will. Bei mir ist das relativ leicht, da dieser die geringere Auflösung hat. Nehmen wir einmal folgendes Beispiel

(Standardeingabe):20:DP-4 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm

Der Monitor ist in diesem Fall also über den Anschluss DP-4 angeschlossen. Nun erstellt man das Script /usr/share/sddm/scripts/Xsetup und trägt folgendes ein.

#!/bin/sh
xrandr --output DP-4 --off

DP-4 muss man natürlich an die eigenen Gegebenheiten anpassen.

Nun trägt man noch folgendes in die Datei /etc/sddm.conf ein (wenn die Datei nicht vorhanden ist, einfach anlegen).

[XDisplay]
DisplayCommand=/usr/share/sddm/scripts/Xsetup

Bootet man den Rechner nun neu, sollte der im Script genannte Monitor bei Einloggen nichts mehr anzeigen. Sobald man sich angemeldet hat, ist der Monitor aber wieder automatisch nutzbar.

OSBN | Linux

BIOS eines Thinkpads aktualisieren

Ich habe hier ein Thinkpad vor mir liegen bei dem aufgrund einer Sicherheitslücke ein Update des BIOS / UEFI nötig ist. Lenovo bietet zwar eine entsprechende Iso-Datei zum Download an aber diese lässt sich unter Linux nicht einfach so auf einen USB-Stick kopieren. Die Lösung ist allerdings recht einfach.

Als erstes besorgt man sich bei Lenovo die Iso-Datei der Boot-CD für sein Thinkpad. Nehmen wir beispielsweise die, die man hier herunterladen kann.

Als nächstes installiert man sich das Script geteltorito.pl. Bei Arch findet man es im AUR. Alternativ findet man es hier.

Mit diesem extrahiert man mit folgendem Befehl das El-Torito-Boot-Image aus der Iso-Datei.

geteltorito.pl -o bios.img g2uj33us.iso

Die Bezeichnung der Iso-Datei muss man ggf. anpassen.

Abschließend schreibt man mit folgendem Befehl die Img-Datei auf den USB-Stick.

dd bs=64K if=/pfad/zu/bios.img of=/dev/sdX status=progress oflag=sync

Den Teil mit if= und of= muss man an die eigenen Gegebenheiten anpassen. Alternativ kann man auch Tools wie Etcher nutzen.

Nun sollte man von dem USB-Stick booten und das BIOS / UEFI aktualisieren können.

OSBN | Linux

IP-Nummer in der Isso-Datenbank nach 7 Tagen anonymisieren

Martin von blog.mdosch.de hat vor einiger Zeit einen Artikel veröffentlicht in dem er gezeigt hat, wie man die in der Datenbank von Isso gespeicherten IP-Nummern der Kommentare anonymisiert indem man diese einmal wöchentlich mit 127.0.0.1 überschreibt.

Den Befehl (Update comments set remote_addr = “127.0.0.1”;) habe ich damals für meine Isso-Instanz übernommen. Am Wochenende hatte ich mir mal wieder meine diversen Konfigurationen und Dokumentationen angesehen und bin auch auf besagten Befehl gestoßen. Hierbei habe ich mir überlegt, was ist wenn jemand die IP-Nummer jedes einzelnen Eintrags für beispielsweise 7 Tage aufbewahren will oder muss? Denn das klappt mit dem Befehl nicht wirklich.

Denn nehmen wir mal an, der Cronjob der den Befehl ausführt wird immer am Sonntag um 15 Uhr gestartet. Schreibe nun jemand um 14 Uhr einen Kommentar wird dessen IP-Nummer in der Datenbank trotzdem um 15 Uhr mit 127.0.0.1 überschrieben.

Ich habe mir daher einmal die Datenbank von Isso genauer angesehen. In der Tabelle comments gibt es die Spalte created. In dieser ist pro Kommentar ein Wert wie 1369140347.0 vorhanden. Hierbei handelt es sich um die sogenannte Unixzeit die angibt wie viele Sekunden seit dem 01. Januar 1970, 00:00 UTC vergangen sind. Die Verwendung dieser Zeitrechnung ist in Datenbanken weit verbreitet, aber für den Menschen quasi nicht lesbar und nicht im Kopf umrechenbar.

Ich habe mir daher erst einmal eine Ausgabe erstellt die mir den Timestamp, den Timestamp in einer für Menschen lesbaren Forum sowie den jeweiligen Kommentar anzeigt.

SELECT created, strftime('%d-%m-%Y %H:%M:%f', datetime(created, 'unixepoch')) as createdhr, text 
FROM comments;

Somit sehe ich bei weiteren Tests wie alt die Kommentare tatsächlich sind.

Als nächstes habe ich den Befehl so erweitert, dass nur die Kommentare angezeigt werden, die 7 Tage alt sind.

SELECT created, strftime('%d-%m-%Y %H:%M:%f', datetime(created, 'unixepoch')) as createdhr, text 
FROM comments
WHERE created > strftime("%s", "now", "-7 days");

Hiermit wird der aktuelle Zeitpunkt abzüglich 7 Tage berechnet und verglichen ob der Wert in created größer als dieser Wert ist.

Hierbei werden allerdings auch die Kommentare angezeigt bei denen die IP-Adresse in der Spalte remote_addr bereits auf 127.0.0.1 geändert wurde. Da es unnötig ist jedes mal den Wert mit dem gleichen Wert zu überschreiben, habe ich den Befehl nun noch einmal um eine Bedingung erweitert bei der nur die Einträge angezeigt werden bei denen bei remote_address etwas anderes als 127.0.0.1 eingetragen ist.

SELECT created, strftime('%d-%m-%Y %H:%M:%f', datetime(created, 'unixepoch')) as createdhr, text 
FROM comments
WHERE created > strftime("%s", "now", "-7 days")
AND NOT remote_addr = '127.0.0.1';

Nachdem ich mir nach ein paar Tests ziemlich sicher bin, dass es funktioniert habe ich den Befehl so geändert, dass er mir die betreffenden Einträge nicht anzeigt sondern bei diesen die IP-Nummern mit 127.0.0.1 überschreibt.

Update comments set remote_addr = "127.0.0.1"
WHERE created > strftime("%s", "now", "-7 days")
AND NOT remote_addr = '127.0.0.1';

Nun kann man den Befehl mittels eines Cronjobs täglich ausführen. Hierbei sollte man allerdings berücksichtigen, dass die Berechnung des Alters nicht absolut genau ist, so das manche Kommentare unter Umständen erst nach 7,x der 8 Tagen berücksichtigt werden. Hier dürfte es helfen den Cronjob so zu konfigurieren, dass er mehrmals pro Tag ausgeführt wird. Wer in seiner Datenbank noch Einträge mit einer richtigen IP-Nummer hat die älter als 7 Tage sind, sollte den Befehl einmalig manuell ausführen und anstelle von “-7 days” einen entsprechend höheren Wert eintragen so dass alle Kommentare berücksichtigt werden.

Wer sich genauer informieren will, was zum Beispiel strftime oder datetime genau macht, kann dies zum Beispiel unter https://www.sqlite.org/lang_datefunc.html tun.

OSBN | General