Thinkpad T450s ACPI Error unter Debian GNU/Linux

Was bei mir so vor der Eingabe des LUKs Passwortes und dem Starten von Debian vorbeihuschte, hatte mich dann doch einmal interessiert:

0.21027?] DMAR: [Firmware Bug: No firmware reserved region can cover this
MRR T®x00000000cd800000-0x00000000c/rFTfffl, contact BIOS vendor for Fixes
0.4880091 ACPT Error: Needed type tReferencel, found (Integerl ( ptrual_
→ (20220331050-665
0. 488035] ACPT Brror: AE AML OPERAND_TYPE, While resolving operands for tOp codeNane unavailable] (20220331/dswexec-431)
0. 488052] ACP Error: Aborting method PR.CPUO. PDC due to previous error (AE_AML, OPERAND TYPE) (20220331/psparse-529)
1.9383933 DMAR: DRHD: handling fault status reg 3
1.9384083 DMAR: EDMA Read NO_PASID] Request device [00:16.7] fault addr Oxc cdf1000 [fault reason Ox02] Present bit in context entry is clear
1.938649] DMAR: DRHD: handling fault status reg 2
1.9386563 DHAR: COMA Write NO_PASID] Request device [00:16.7] fault addr 0x ccdf/000 [fault reason 0x02] Present bit in context entry is clear
1.9386963 DMAR: DRHD: handling fault status reg 2
1.938702J DMAR: CDMA Write NO_PASID] Request device [00:16.7] fault addr 0x
ccd/P000 [fault reason 0x02] Present bit in context entry is clear

Kurz und knapp, es ist ein Fehler im BIOS, welcher schon seit 2013 besteht und vom T440 bis an den T460 weitergereicht wurde.
Lenovo behebt den Fehler, welcher bekannt ist nicht.
Jemand hat den zugehörigen Thread im Jahr 2018 erstellt, zwei Jahre nach dem Erscheinen des T460.

Lenovo kocht natürlich auch nur mit Wasser. Ich hätte mir jedoch mehr Support gewünscht, besonders wenn dies sogar unter Windows einen Bluescreen verursacht. Hier hätten doch einige Geschäftskunden unerfreut gewesen sein müssen. Schade, dass Firmen, welche ich als zuverlässig aufgrund Ihre Historie ansah, jenes nicht mehr sind. Gerade betreffend ThinkPads wäre es mir doch sehr wichtig.
Lenovo hatte mich schließlich mit einem Montagsthinkpad P53 enttäuscht, sodass ich mich zunächst für Apple Silicon entschied.
Aber wie man sieht, immer noch ThinkPads nutze 😉

Die Lösung wäre ein acpi=off , noacpi oder acpi=strict in der Konfiguration von grub zu setzen.
Weiterführende Informationen zu den Kernelparametern

Glow Markdown in der Shell rendern

Markdown ist eine leicht verständliche Auszeichnungssprache für Texte. Einige von Euch kennen jene aus Readme-Dateien aus Git Repositories, Dokumentationen und von statischen Bloggeneratoren wie Hugo, oder Jekyll. Markdown bietet für mich entscheidende Vorteile.

Ein in Markdown formatierter und strukturierten Text ist für immer in der gewünschten Formatierung betrachtbar. Er ist nicht an ein bestimmtes Programm und seiner Syntax gebunden. Im Gegensatz dazu öffnen sich alte Dateien aus Officeanwendungen aus Redmond der 90er Jahre nur mit Verlusten in neueren Programmen, wobei bereits viel der Formatierung und dessen Struktur verloren geht. Besonders problematisch wird es, wenn Programme nicht mehr auf neuen Systemen laufen, oder wenn sie für eine Installation nicht mehr verfügbar sind. Hier drohen uns in Zukunft digitale Verluste.

Markdown überzeugt durch seine gute Lesbarkeit ohne Rendering, sowie durch die einfache Syntax bei der Erstellung von Texten, Tabellen und Listen. Markdown erlaubt es, Text mit einfachen Symbolen zu formatieren. So rahmen zwei ** einen fetten Text ein, während ein * kursiven Text markiert und eine H1-Überschrift ihre Formatierung durch eine Raute mit Leerzeichen vor dem Text erhält. Für Überschriften in unteren Ebenen verwendet man entsprechend zwei, drei oder vier Rauten. Weitere Informationen finden sich in dem Artikel auf Wikipedia. Ich selbst nutze für die einfach und schnelle Auszeichnung Typora unter Linux und macOS. Ich gebe auch zu, damit meine README.md gerne in Git zu gestalten. Typora erstellt mir auf Knopfdruck ein Inhaltsverzeichnis aus den Überschriften inklusive Anker 😉

Während Markdown-Dateien in dafür bestimmten Texteditoren, wie z.b. dem oben genannte Typora, gut formatiert lesbar sind, benötigen Markdown-Dateien zum Rendern in der Shell eine spezielle Software, um eine perfekte Darstellung zu bekommen. Hier kommt Glow ins Spiel.

Was ist Glow?

Kurz und knapp: Glow ist ein auf ein der Programmiersprache Go basierendes Shellprogramm, welches Markdown-Dateien direkt in der Shell rendert. Es stellt die Inhalte übersichtlich formatiert, inklusive Links, und farbig dar.

Je nach System wird Glow über die Paketmanager der Linuxdistribution installiert. Glow lässt unter Debian, macOS ( via brew), FreeBSD, Fedora und sogar Android installieren. Natürlich besteht auch die Möglichkeit, glow über die Sprache go selbst zu installieren.

Nutzung

Glow kann mit einer lokalen Markdown-Datei aufgerufen werden:

glow README.md

Auch eine Vorschau von Markdown-Dokumenten aus dem Internet wäre möglich:

glow https://raw.githubusercontent.com/charmbracelet/glow/refs/heads/master/README.md

Des Weiteren bietet glow noch einen Pager und die Möglichkeit eigene Styles zu definieren und herunterzuladen.

Glow ist Teil des Charmprojektes welches eine Sammlung von Open-Source-Tools/-Bibliotheken für die Entwicklung von terminalbasierten Anwendungen ist. Das Charmprojekt ist die Glamourecke der modernen und benutzerfreundliche CLI-Programme 😉

Readeck eine Read it later Alternative

Ich habe im Jahr 2013 das erste Mal Wallabag geschrieben, zu diesem Zeitpunkt hieß es noch Poche. Für mich der Beginn einer sehr langen, bis heute noch andauernden, Freundschaft mit der Software. Es ist aber wichtig auch immer wieder einmal über den Zaun zu schauen, falls ich mit einer Software in Zukunft nicht mehr zufrieden sein könnte. Zu groß wird der Stress und die Enttäuschung, wenn ich den jahrelangen Workflow so schnell wie möglich ändern muss. Beziehungsweise einen Stichtag habe, an dem ich die Änderung herbeizuführen habe.

Ich habe mir als Player neben Wallabag einmal Readeck angeschaut und hier meine Wallabaglesezeichen importiert. Ich habe den Ablauf ohne Hindernisse ausgeführt, aber er hinterließ einige Leichen. Einige der mit Wallabag konservierten Webseiten sind nicht mehr Online, oder konnten nicht richtig von Readeck abgeholt werden. Ich bin zwar auf ein Script gestoßen, welches leider aber dann alle fehlerhaften Einträge löscht, wobei manche nur einmal angestoßen werden müssten.

Readeck unterscheidet sich nicht wirklich groß von Wallabag. Auch hier gibt es eine gute Browserintegration und die Oberfläche ist mehr als ein Quentchen besser als jene von Wallabag. Hierzu sei aber gesagt, dass Wallabag in sehr reger Entwicklung ist und mit dem nächsten Majorupdate, 3.0/4.0, auch hier nachzieht. Ich hatte hierzu mal eine Aussage im Fediverse gelesen, aber bedauerlicherweise findet sich in den alten News kein Hinweis. Readeck ist aber in der Tat momentan etwas „polierter“ und Anwenderfreundlicher. Im Gegensatz zu Wallabag bietet es ab Werk kein RSS-Feed an, dieser kann aber mit dem Projekt readeck-rss nachgerüstet werden. Ich selbst brauche diese Funktion aber nicht.

Ich selbst habe Readeck als Container bei mir installiert und den dort schon laufenden Apache als Proxy genutzt.

Apache Prox-Teil:

    RequestHeader set X-Forwarded-Proto https

    ProxyRequests off
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
    ProxyPreserveHost On

docker-compose.yml:

services:
  readeck:
    container_name: Readeck
    image: codeberg.org/readeck/readeck:latest
    mem_limit: 8g
    cpu_shares: 1024
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped
    ports:
      - 8000:8000
    volumes:
      - /volume1/docker/readeck/data:/readeck:rw
    environment:
     READECK_USE_X_FORWARDED: true
     READECK_DATABASE_SOURCE: postgres://readeck:readeckpass@readeck-db:5432/readeck

  readeck-db:
    image: postgres:16
    container_name: Readeck-DB
    hostname: readeck-db
    mem_limit: 1g
    cpu_shares: 768
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "readeck", "-U", "readeck"]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/readeck/db:/var/lib/postgresql/data:rw
    environment:
      POSTGRES_DB: readeck
      POSTGRES_USER: readeck
      POSTGRES_PASSWORD: readeckpass
    restart: on-failure:5

Backup:

Das Backup landet dann inklusive des Datums in dem Volume von readeck ( /volume1/docker/readeck/data).

 docker exec Readeck readeck export -config /readeck/config.toml /readeck/export_$(date +"%Y_%m_%d").zip

iOS/ipadOS

Für das Share-Menü gibt es einen Shortcut“/Kurzbefehl unter send-page-to-readeck. Hier muss im Kurzbefehl, dann die Domain, sowie einen APi-Token, welcher unter Einstellungen > API-Token erstellt wird, eingegeben werden.
Damit der Befehl im Teilenmenü erscheint:

  • Langer Klick auf den Kurzbefehl bis zu dem Öffnen des Menüs
  • Details auswählen
  • Im Share-Sheet anzeigen aktivieren

Android

Für Android gibt es eine Readeck App, welche unter F-Droid zu finden ist. Ich selbst habe sie noch nicht installiert, da mein daily driver ein iPhone 16 Pro ist.

Fazit

Readeck hat mich mit seiner sehr eleganten Benutzeroberfläche und vor allem der unkomplizierten Installation überzeugt. Es fällt mir jedoch schwer, Wallabag nach über einem Jahrzehnt treuer Dienste den Rücken zu kehren. Da spielt sicherlich auch eine nicht kleine Portion Nostalgie mit 😉
Momentan teste ich beide Lösungen im Parallelbetrieb und werde in den nächsten Wochen entscheiden, welches Projekt das richtige für mich ist. Mir wäre es auf jeden Fall wichtig, auch wenn den Weg zu Wallabag zurückzugehen. Bis jetzt gestaltet dies sich wohl sehr schwierig. Seiten der Wallabag 2.x Dokumentation ist hier über den Import nichts zu finden. Hier bleibt wohl nur dann einer der Wege den Export von Readeck in das JSON-Format von Wallabag zu konvertieren, Datenbanklevel-Migration vorzunehmen, oder noch schlimmer, Zeit mit einer manuelle Rearchivierung zu verbrennen. Dies ist für mich ein großer Negativpunkt bezüglich Readeck. Keine Sackgassen.

Nextcloud Falsches Zeilenformat ROW_FORMAT=Dynamic

Nach einem Update auf Nextcloud 31.0, Hub 10, hatte ich im Backend folgende Meldung die Meldung:

Falsches Zeilenformat in Ihrer Datenbank gefunden. ROW_FORMAT=Dynamic bietet die beste Datenbankleistung für Nextcloud. Bitte aktualisieren Sie das Zeilenformat in der folgenden Liste:

Folgender SQL-Befehl fixt die Datenbank

mysql -u root -p -D DATENBANKNAME -N -e "
SELECT CONCAT(
  'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' ',
  'ROW_FORMAT=DYNAMIC;'
) 
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE='InnoDB' AND ROW_FORMAT <> 'DYNAMIC';" | mysql -u root -p DATENBANKNAME

Ich empfehle vorher ein Datenbankbackup mit z.B. mydumper vorzunehmen

Docker Verschieben von /var/lib/docker

Da auf meinem Server einige Container laufen, wurde durch mein Rollout des Containers Tubearchivist der Platz langsam eng.

Hier habe ich mich entschlossen, den Standardspeicherplatz von Docker auf eine der 6 TB Datenpools zu verschieben. Das Umschreiben des Servicekonfigurationsdatei innerhalb von SystemD wäre hier der falsche Weg. Der richtige Weg ist hier JSON-Konfigurationsdatei des Daemon von Docker umzuschreiben. Falls diese noch nicht angelegt ist, muss diese angelegt werden.

Erstellen des neuen Datenspeicherplatzes für Docker

mkdir /data/IronWolf1/DOCKER_DATA

Stoppen des Dockerdienstes

systemctl stop docker && systemctl status docker && docker ps

Kopieren der Daten in das neue Verzeichnis

rsync -avxP /var/lib/docker/ /data/IronWolf1/DOCKER_DATA

Erstellen der Datei /etc/docker/daemon.json

{
"data-root": "/data/IronWolf1/DOCKER_DATA"
}

Neustarten des Dienstes Docker

systemctl restart docker.service

Überprüfen, ob der Standardspeicherort übernommen wurde. Hierzu habe ich Vaultwarden als Beispiel genommen

docker inspect vaultwarden/server:latest |grep WorkDir
"WorkDir": "/data/IronWolf1/DOCKER_DATA/overlay2/b419d698e9ba693188a2f517f53891702a25ea20f974993aca879206818ab328/work"

Der Inhalt des alten Verzeichnisses /var/lib/docker kann nun gelöscht werden

Invidious: The media could not be loaded format not supported

Invidious ist eineSoftware, die es ermöglicht, Videos von YouTube anzusehen, ohne direkt die offizielle YouTube-Website, oder App zu verwenden. Die selbstgehostete Software ermöglicht eine werbefreie Nutzung von Youtube und schützt die Privatsphäre der Nutzer, indem es Tracking durch Google verhindert. Invidious bietet die weiteren Funktionen wie das Herunterladen von Videos, das Ansehen ohne Anmeldung und die Möglichkeit, nur den Audiostream abzuspielen.

Ich hatte nun etwas länger meine private Instanz auf dem Homeserver genutzt und stieß auf den Fehler
„The media could not be loaded, either because the server or network failed or because the format is not supported“.

Damit die Software wieder produktiv arbeitet, muss hier ein weiterer Container erstellt und die Datei docker-compose.yml für Euren Stack umgeschrieben werden.

Als Erstes wird ein einzelner Container via

 docker run quay.io/invidious/youtube-trusted-session-generator

gestartet und nach einem Start die Ausgabewerte des Containers für visitor_data und po_token kopiert.
Dieser Container beendet sich nach der Ausgabe von selbst und sollte nicht detached gestartet werden.

docker run quay.io/invidious/youtube-trusted-session-generator
[INFO] internally launching GUI (X11 environment)
[INFO] starting Xvfb
[INFO] launching chromium instance
[INFO] launching browser.
[INFO] waiting 10 seconds for the page to fully load.
visitor_data: TOLLERHASHWERT1
po_token: TOLLERHASHWERT2
successfully removed temp profile /tmp/uc_3aimnef0

Jene Werte habe ich, inklusive des neuen Containers, in die Datei docker-compose.yml eingepflegt.

version: "3"
services:
  invidious:
    image: quay.io/invidious/invidious:latest
    container_name: invidious
    restart: unless-stopped
    ports:
      - "4000:3000"
    environment:
      INVIDIOUS_CONFIG: |
        db:
          dbname: invidious
          user: kemal
          password: kemal
          host: invidious-db
          port: 5432
        check_tables: true
        signature_server: inv_sig_helper:12999
        visitor_data: TOLLERHASHWERT1
        po_token: TOLLERHASHWERT2
        quality: dash

        registration_enabled: false
        top_enabled: false
        related_videos: false
        comments: ["",""]
        login_enabled: false
        domain: TOLLERFQDN
        hmac_key: "BLABLABLABLABLA"

    depends_on:
      - invidious-db
    logging:
      options:
        max-size: "1G"
        max-file: "4"

  inv_sig_helper:
    image: quay.io/invidious/inv-sig-helper:latest
    init: true
    command: ["--tcp", "0.0.0.0:12999"]
    environment:
      - RUST_LOG=info
    restart: unless-stopped
    cap_drop:
      - ALL
    read_only: true
    security_opt:
      - no-new-privileges:true
  invidious-db:
    image: docker.io/library/postgres:14
    restart: unless-stopped
    container_name: invidious-db
    volumes:
      - ./postgresdata:/var/lib/postgresql/data
      - ./config/sql:/config/sql
      - ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
    environment:
      POSTGRES_DB: invidious
      POSTGRES_USER: kemal
      POSTGRES_PASSWORD: kemal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
    networks:
      - default

Weiterführende Informationen bezüglich einem Fehler mit sigv_helper und kontobasierter Authentifizierung finden sich in der Issue 4947 auf Github

Viel Spaß mit Invidious.

macOS: LibreOffice nicht aus Apples App Store installieren

Einmal wollte ich faul sein und gleichzeitig einem FOSS-Projekt etwas Gutes tun. Anstelle mich immer selbst um ein Update von LibreOffice zu kümmern, wollte ich es aus dem Apple App Store installieren, via selbigen an das Projekt spenden und die Downloadzahlen im Store um eine Wertigkeit erhöhen. Automatische Updates im Hintergrund sollten hier die Wahl sein. Als gewissenhafter Verbraucher beobachte ich, die von mir installieren Pakete und deren Projekte auf Neuigkeiten und vor allem auf Sicherheitsmeldungen. Im Falle von LibreOffice gab es hier ein Sicherheitsproblem in der Version 7.6.6, welche mit der Version 7.6.7 relativ zügig behoben wurde.
Das Sicherheitsrelease ist bis heute nicht in Apples App Store angekommen.

Weiterlesen

Neues Theme in WordPress neue Darkmode CSS

Im Frontend ändert sich mein Blog nur noch marginal. Jedoch musste ich mich aufgrund von Änderungen im Sourcecode von WordPress für ein anderes Theme entscheiden. Zuvor hatte ich ein Theme von einem deutschen bekannten Entwicklerpaar gekauft, aber leider endet hier der Support doch recht schnell. Auch Bugfixes, welche ich einmal auf Github eingereicht hatte, wurden erst nach zwei Jahren (🦉really?!?!) eingepflegt. Es ist eher ein „Aus den Augen, aus dem Sinn“-Coding und ich würde hier kein Geld mehr investieren.

Weiterlesen

Entfernen des gist-Plugins und YouTube aus WordPress

Ich habe nun das nächste Plugin aus WordPress entfernt. Auch habe ich mir nochmals Gedanken über dieses Plugin gemacht und es ist definitiv nicht Datenschutz konform, wenn ich Daten aus Github nachgeladen habe. Ich hatte zwar somit immer die neueste Version des Codes eingebunden, aber es war eigentlich eine Faulheit auf Kosten der Lesenden.

Im Moment suche nun Shortcodes mit der Bezeichnung gist id=“ und kopiere den Inhalt dieser Gists in den Fließtext. Die richtige Aufgabe während meiner Krankmeldung. Falls ich mich mit etwas anderem als im Bett liegen und Hörbuch hören befassen möchte. Für das Teilen von Code habe ich mir noch keine Gedanken gemacht, aber es wird definitiv selbst gehostet und sollte keinen großen Pflegebedarf haben. Bis jetzt habe ich hier leider noch nichts gefunden. Gitlab und ähnliche Projekte wären mit Kanonen auf Spatzen geschossen. Gitweb wäre ein Lösung, habe ich noch nicht im shared Hosting noch nicht getestet.

Vor sehr langer Zeit war es einmal in der Blogosphäre gang und gebe die Videos der Plattform YouTube einzubinden. Damit ich hier nicht mit den Daten der Lesenden hausieren gehe, hatte ich das Plugin „Lazy Load for Videos“ installiert. Diese direkten Links wurden nun gegen normale ausgetauscht

Ich konnte mir viel Handarbeit wieder zwei Plugins deaktivieren und entfernen.
Mittlerweile sind nun 9 Plugins deaktiviert bzw entfernt worden.

Kostenlose Bilderbeschreibung für WordPress

Das soziale Netzwerk Mastodon hat mit seinem web- und mobilen Anwendungen für mich einen wunderbaren Standard in das Leben gerufen und sogleich in dem Netzwerk etabliert. Die ausführliche Bildbeschreibung. Die Beschreibung wird, unterstützt durch künstliche Intelligenz, per Knopfdruck als ein Text generiert. Der Text wird nun noch an die eigenen Wünsche angepasst.

Damit beschreibt der Text das Bild in der Form, dass der Inhalt gedankenreich erfasst wird. Im Unterschied zu einem alternativen Text, welche als reiner Platzhalter dient, ist diese Beschreibung somit weit ausführlicher. Umso größer die Hilfe für Menschen mit einer Sehbehinderung. Ein Feature, welches man unter X noch vergeblich sucht, jedoch von jedem Onlinedienst als Standard behandelt werden muss.

Weiterlesen