Kategorie: scripting & coding

  • FreshRSS – Endlich Newsfeeds plattformunabhängig konsumieren

    FreshRSS – Endlich Newsfeeds plattformunabhängig konsumieren

    Ich habe eine längere Liste an Newsfeeds, die ich von Zeit zu Zeit konsumiere. Allerdings fehlt mir schon länger die „Applikation“, die Plattform-übergreifend funktioniert (Linux, Android, Windows aktuell). Nach ein wenig Recherche habe ich mich für eine Web-basierte Lösung entschieden: FreshRSS bzw. https://github.com/FreshRSS/FreshRSS

    PHP, MySQL, … als Anforderungen lassen es auch auf den meisten Webspaces laufen.

    Was kann es?

    • Verschiedene RSS-Formate
    • Verwalten von Kategorien, Labels, Favoriten, …
    • Multi-User-Management

    Die Installation ging schnell von der Hand, entweder per Docker oder gleich am Webspace, die Konfiguration ebenso. I like. 🙂

  • [work-in-progress] Netgear Readynas ins Leben zurück holen

    [work-in-progress] Netgear Readynas ins Leben zurück holen

    Eine meiner eher partiell schlauen Entscheidungen war annodazumal ein Netgear Readynas Ultra 2, aka RDNU2120, zu beschaffen. Gedacht war es als NAS mit zusätzlicher Backup- und Media-Streaming-Aufgabe, also genau, was es (damals) konnte. Die Nutzungsrealität sah anders aus:

    • In der damaligen Wohnung gab es keinen Platz, wo das kleine Kastl nicht irgendwie störte (optisch, akustisch).
    • Der familiäre Media-Streaming-Konsum damals wie heute überschaubar geblieben ist.
    • 24/7 laufen lassen nur Strom verbraucht hätte, da außer Leerlauf kaum Betrieb zu erwarten war.
    • Außer den gelegentlichen Systemupdates wurden in unregelmäßigen Abständen Backups von unseren Endgeräten gezogen.
    • Bis es immer öfter im Schrank blieb.

    Dabei ist es ein für damalige Verhältnisse potentes Gerät für viele Aufgaben, die im Heimbereich anfallen:

    • Intel Atom Single Core Prozessor mit 1,8 GHz Taktfrequenz
    • 1 GB DDR3-RAM
    • 2x 1 Gb Ethernet
    • 3x USB
    • 2x 3,5″ HDD-Schnellwechselschächte
    • Und mit dem vorinstallierten Readynas-OS ein Debian-Abwandlung als Betriebsystem

    Vor kurzem habe ich es wieder aus dem Schrank geholt, wegen Backups ziehen warat’s und außerdem suche ich ein Poster aus einer Posterpräsentation aus dem Jahr 2009, das ich nirgends mehr finden kann.

    Long story short: Das Poster konnte ich (noch) nicht finden und beim Einbinden des Readynas wurde es holprig.

    Nach dem erfolgreichen Boot-Prozess und Abholens einer TCP/IP-Adresse beim DHCP-Servers zeigte sich mangels Unterstützung einer aktuellen TLS-Version ein Drama in mehreren Akten. Der in Nautilus/Files integrierte Samba/CIFS-Client war not amused die Shares einzubinden, mein Webbrowser wollte nicht mit dem Admin-Panel kommunizieren. Bei letzterem verständlich, TLS 1.0 ist seit einiger Zeit abgekündigt und das aus gutem Grund.

    Nicht unterstützte TLS-Version verhindert Zugriff auf das Admin-Panel

    Workaround Admin-Panel

    In Firefox kann unter

    about:config

    in die Innereien des Browsers eingegriffen werden. Unter anderem kann hier1 auch die minimale TLS-Version vorgegeben werden. Dafür gibt man in der Suchmaske folgendes ein:

    security.tls.version.min

    Per Default ist hier 3 als Wert eingetragen, was TLS-Version 1.2 oder höher entspricht. Im Fall von diesem Readynas musste ich TLS-Version 1.0 freischalten:

    Wert in about:configTLS-Version
    3TLS-Version 1.2 oder höher
    2TLS-Version 1.1 oder höher
    1TLS-Version 1.0 oder höher
    Zulässige Werte und deren Bedeutung für security.tls.version.min

    Es ist keine gute Idee, dauerhaft auf eine nicht mehr unterstützte und vor allem unsichere TLS-Implementierung zurückzugreifen.

    Mit dieser Anpassung gelang der Zugriff auf das Admin-Panel wieder.

    Workaround Nautilus/Files

    Ursache war hier, dass sich das Readynas nur auf SMB-Version 1.0 versteht, aber die Welt von Version 2 oder höher mittlerweile ausgeht.

    [Quick Fix #1] WebDAV aktivieren

    Im Admin-Panel aktivierte ich zusätzlich den Zugriff auf die Shares via WebDAV, womit der Zugriff in Nautilus/Files wieder funktionierte. Damit konnte ich wieder durch die Verzeichnisse navigieren.

    [Quick Fix #2] Mount via Terminal

    Mit den cifs-utils kann ein Share direkt im Terminal eingebunden werden:

    ~$ sudo mount -t cifs -o user=username,vers=1.0 //192.168.x.y/xyz /mnt/rn

    Wie geht es weiter?

    Die beiden Workarounds sind natürlich keine Dauerlösung. TLS wurde aus gutem Grund verbessert und WebDAV ist als Protokoll sicher ok um die wichtigsten Daten vom Readynas zu sichern, aber aus meiner Sicht ist es nicht das Protokoll für das dauerhafte Bewegen großer Datenmengen. Die Limitierung auf SMB-Version 1.0 kann mit entsprechendem Scripting bzw. Automount umgangen werden, somit ist dieser Punkt entschärft.

    Readynas-OS ist EOL und für mein deutlich älteres Readynas gibt es seit vielen Monden keine Updates mehr, d.h., die Hoffnung auf eine offiziell aktualisierte TLS-Version ist nicht gegeben. Beim Blick in das Gerät zeigte sich aber ein sehr guter Zustand, zum Wegwerfen zu schade. Folgende Ansätze stehen zur Diskussion:

    Was es wird, keine Ahnung – Schritt 1: Backup! #StayTuned

    1. Stand Firefox 128.0 ↩︎
  • WLAN-Optimierung mit nmcli

    WLAN-Optimierung mit nmcli

    Die Anforderungen ans hauseigene WLAN steigen, also war es wieder an der Zeit nachzuschauen, was mit der bestehenden Infrastruktur (noch) möglich ist. Folgende Ansatzpunkte hatte ich vorab identifiziert:

    • Festhalten des Status Quo
    • Optimieren des WiFi-Channels
    • Festlegen der relevanten IEEE 802.11-Standards
    • Hinzufügen des 5 GHz-Frequenzbandes
    • Kontrollieren der Sicherheitsmechanismen

    Da ich gerne mit dem arbeite, was schon da ist, bevor etwas Neues bei der Tür hereinkommt und motiviert durch einen Bekannten, der ein ähnliches Problem hat, findet sich hier eine kurze Mitschrift zum Vorgehen und der Erkenntnisse unterwegs.

    Festhalten des Status Quo

    Der WLAN-Router kommt von meinem ISP und gestattet erstaunlich viele Einstellmöglichkeiten im Admin-Panel. In den letzten Monaten hatte ich das „Gefühl“, dass der Datendurchsatz durch den WLAN-Router begrenzt ist. Mehr Endgeräte tummeln sich im Netz und einige datenintensiven Dienste werden konsumiert, sodass sich parallel stattfindende, beruflich bedingte Video-/Online-Konferenzen des Öfteren gestört fühlten. Hier ein paar Eckpunkte:

    • OEM-WLAN-Router vom ISP
    • IEEE 802.11b/g/n auf 2,4 GHz inkl. Channel-Optimierung konfiguriert
    • Keine Repeater installiert
    • Alle Endgeräte sind zumindest IEEE 802.11n-fähig.
    • Mehrparteiengebäude in der Stadt

    Optimieren des WiFi-Channels

    In den letzten Jahren gingen mehr und mehr WLAN im Umfeld online. Der erste Verdacht lag auf der Überbelegung des WiFi-Channels. Der vorliegende Router gibt vor eine Kanaloptimierung zu beherrschen , welche auch aktiviert war.

    Sichtlich machte die Kanaloptimierung nicht all zu viel, weil der vor Jahren ermittelte Kanal 11 war noch immer ausgewählt, aber heillos überfrachtet. Da mein ISP mehrere Parteien in unserem Haus ausstattet, ist der Kanal 11 wohl der Default und somit in meinem Fall ein faulty default.

    Um zu ermitteln, welche WLAN in der Nähe sind und auf welchen Kanälen sie funken, habe ich auf nmcli, das Command-Line-Interface von NetworkManager, zurückgegriffen. Der folgende Aufruf (in Anlehnung an user278801) hat mir die Grunddaten für die WLAN-Analyse geliefert:

    ~$ watch "nmcli -f "CHAN,BARS,SIGNAL,SSID,MODE,RATE,SECURITY,IN-USE" d wifi list | sort -n"

    Das Ergebnis im Terminal:

    nmcli mit den umliegenden WLAN sortiert nach Channel nach der Optimierung im Essbereich

    Um ein möglichst gutes Gesamtbild zu bekommen, habe ich diese Analyse in allen Zimmern durchgeführt. Bei der Auswahl des neuen Kanals wählte ich unter Berücksichtigung dieser Quelle den Kanal 9 für das 2,4 GHz-WLAN.

    Festlegen der relevanten IEEE 802.11-Standards

    Der WLAN-Router wurde im Jahr 2018 eingerichtet. Damals gab es noch Überlegungen, Geräte mit dem schon damals veralteten Standard IEEE 802.11g einzubinden. Dementsprechend wurde die Kompatibilitätseinstellung für den Mischbetrieb nach IEEE 802.11b/g/n gewählt. Mittlerweile unterstützt jedes Endgerät in unserem Haushalt zumindest IEEE 802.11n, was somit auch die neue Festlegung geworden ist.

    Hinzufügen des 5 GHz-Frequenzbandes

    Ähnlich war es damals mit des 5 GHz-Frequenzbandes. 2018 konnten nicht alle Endgeräte davon profitieren, die Performance im 2,4 GHz-Frequenzband ausreichend. Auch dieses wurde aktiviert, womit nun die meisten Endgeräte selbst entscheiden, in welchem Frequenzband sie bessere Bedingungen vorfinden.

    Kontrollieren der Sicherheitsmechanismen

    Auch hier gab es eine Veränderung: Alle unsere Endgeräte unterstützen zumindest WPA2, das unsichere WPA ist nicht mehr notwendig und WPA3 wird vom WLAN-Router nicht unterstützt. Somit wurde WPA2-only als Verschlüsselungsmechanismus gesetzt.

    Erkenntnisse aus der Aktivität

    • Linux-Distros bringen immer alles mit, was man so braucht. 😉
    • nmcli tut das Notwendige, wenn man tiefer in die WLAN-Analyse einsteigen möchte, gibt es spezielle Tools wie sparrow-wifi, kismet, …
    • Die Auffrischung der IEEE 802.11-Grundlagen tat gut.
    • Die Performance und Stabilität des eigenen WLAN ist deutlich besser geworden und das ohne neue oder zusätzliche Hardware angeschafft haben zu müssen.

    Update, 2024-07-16: BSSID

    Eines der Geräte hat Probleme sich mit dem 5 GHz-WLAN zu verbinden und bringt wiederholt die Aufforderung zur Passworteingabe ohne einen Anmeldeerfolg zu verbuchen. Ich vermute einen Hardware- oder Firmware-Defekt rund um das WiFi-Modul. Um dem Gerät den Versuch des ständigen Wechselns zum stärkeren Netzes auszutreiben habe ich in den WLAN-Einstellungen die BSSID fix vorgegeben.

    Ermitteln kann man die BSSID z.B. mit nmcli durch Hinzufügen des gleichnamigen Parameters:

    Und dann in den WLAN-Einstellungen hinterlegt:

  • dd & progress bar

    Ein älterer PC steht seit ein paar Wochen herum und dient als kurzweilige Spielwiese für verschiedene Linux-Distributionen, u.a. Debian Buster, AV Linux (aka MX Linux Respin) oder jetzt gerade eben Fedora SOAS (Sugar on a Stick).

    Praktischerweise reicht ein USB-Stick als Träger für die jeweilige Live-Session und als Installationsmedium. Und damit ich es nicht vergesse: dd unterstützt eine Fortschrittsanzeige, wenn ich eine Live-ISO wieder auf den USB-Stick spielen möchte…

    dd if=liveImage.iso of=/dev/sdb bs=512k status=progress

  • Log Files & systemd-journald

    Wieder einmal etwas aus der Kategorie „brauch ich ganz selten“: Log Files werden, seit systemd bei vielen Linux-Distributionen Einzug gehalten hat, durch das Service systemd-journald zentral verwaltet. Mit der Zeit werden gewinnen die Log Files an Größe, das lässt sich aber ganz einfach managen.

    Die Log Files werden je nach Konfiguration persistent unter /var/log/journal/MACHINE-ID/ oder in-memory unter /run/log/journal/MACHINE-ID/ abgelegt. Im zweiten Fall löst der Reboot die Speicherfrage, im ersten darf/muss man selbst Hand anlegen.

    Folgende Befehle helfen weiter:

    journalctl --disk-usage
    journalctl --rotate
    journalctl --vacuum-time=4months
    journalctl --vacuum-size=256M
    • --disk-usage gibt Auskunft über den verbrauchten Speicherplatz der aktiven und archivierten Log Files.
    • --rotate wandelt aktive Log Files in archivierte um.
    • --vacuum-time=4months entfernt alle Log-Einträge, die älter als vier Monate sind. Das geht auch Wochen (4weeks), Stunden (4h), Minuten (4m) und Sekunden (4s)…
    • --vacuum-size=256M entfernt alle älteren Log-Einträge, bis die Log Files 256Mb haben (K, M, G, T sind die möglichen Größeneinheiten).
    • --vacuum-time und --vacuum-size können auch gemeinsam in einem Aufruf verwendet werden, auch in Kombination mit --rotate (seit systemd 240): journalctl --rotate --vacuum-time=4months --vacuum-size=256M
  • Cheatsheet für git

    Cheatsheet für git

    Ich programmiere zur Zeit eher selten und VCS nutze ich noch seltener. Lange Zeit war SVN meine erste Wahl, heute ist es git. Aber seltene Nutzung bedeutet auch rasches Vergessen, deshalb hier mein persönliches Cheatsheet für git:

    BefehlErklärung
    git initEin leeres Git-Repository erstellen oder ein bestehendes neuinitialisieren
    git clone „https://server.com/sourcerepository“Ein Repository in einem neuen Verzeichnis klonen
    git config –global user.email „useremail“Festlegung der E-Mail-Adresse (ohne „–global“ erfolgt das nur für dieses Repository)
    git config –global user.name „username“Festlegung des Usernamens (ohne „–global“ erfolgt das nur für dieses Repository)
    git add „filename“Dateiinhalte zum Commit vormerken
    git commitÄnderungen in das Repository eintragen
    git pushRemote-Referenzen mitsamt den verbundenen Objekten aktualisieren
    git pullObjekte von einem externen Repository anfordern und sie mit einem anderen Repository oder einem lokalen Branch zusammenführen
    git diffÄnderungen zwischen Commits, etc. anzeigen
    git logCommit-Historie anzeigen
    Auszug über git Befehle

    Wenn es dann doch um mehr geht

    git help git

    #Last update: 2020-06-05

  • Video verkehrt als Einzeiler mit ffmpeg

    Ich bekam heute ein kurzes Video geschickt, wo ein lädierter Baum Stück für Stück gekürzt wurde. An sich nichts Ungewöhnliches, aber in mir reifte nach kurzer Zeit der Wunsch den Baum zumindest digital wieder zusammenzusetzen und somit das Video umzukehren.

    Das Original: Es war einmal ein Baum

    Der einfachste Weg war ffmpeg auf meinem Rechner zu installieren, ein sudo apt install ffmpeg im Terminal und keine 60 Sekunden später konnte ich die folgende Zeile eingeben:

    ffmpeg -i Treecut.mp4 -vf reverse Treecut_reversed.mp4

    Da das tonlose Original lediglich um die 10 Sekunden lang ist und das Ausgangsmaterial keine besondere Qualität besitzt, lässt der Aufruf jegliche Optimierungen vermissen, denn da kann ffmpeg in Punkto Video- und Audiostreams so einiges.

    Alles rückwärts: Stück für Stück zum Baum

    Der Baum steht wieder. 😉


    Anmerkung: ffmpeg gibt es für viele Plattformen, also auch für Windows und MacOS als Download erhältlich.

  • Excel VBA Makro Gedankenstützen

    Ich habe immer wieder die Aufgabe Tätigkeiten in Excel zu automatisieren, aber eben nur alle ewigen Zeiten. Manche Makros benötige ich öfters, wobei zwischen zwei Malen auch wieder einige Zeit vergeht.

    Generell ist jeder Code-Schnipsel vor seiner Nutzung auf den jeweiligen Anwendungsfall anzupassen, z.B. columns, range, etc.

    Diesen Blog-Eintrag werde ich von Zeit zu Zeit mit weiteren Code-Schnipseln ergänzen.

    Last update: 2019-12-22

    Verbundene Zellen auflösen

    Sub VerbundeneZellenAufloesen()
    Dim c As Range
    For Each c In Intersect(Columns("A:B"), ActiveSheet.UsedRange)
        If c.MergeCells Then
           With c.MergeArea
              .UnMerge
              .Value = c.Value
           End With
        End If
     Next c
     End Sub

    Checkboxen in Zellen hinzufügen

    Sub AddCheckbox()
         Dim i
         For i = 18 To 200 'cells from 18 to 200
         ActiveSheet.CheckBoxes.Add(Cells(i, "I").Left, Cells(i, "I").Top, 72, 17.25).Select
         With Selection
             .Caption = ""
             .Value = xlOff '
             .LinkedCell = "J" & i
             .Display3DShading = False
         End With
         Next
     End Sub