Normale Ansicht

Der Wechsel von WordPress zu Hugo

04. April 2026 um 10:54

Ich habe nun endlich eine Mammutaufgabe für mich erledigt. Den Wechseln von WordPress hin zu Hugo. Ich war mir hier der große der Aufgabe bewusst, aber dass er so schwer werden würde, hätte ich nicht gedacht. Ich hatte den Wechsel schon einmal vor 15 Jahren vorgenommen, aber aus Gründen der Faulheit dann doch wieder zu WordPress gewechselt. Hier möchte ich Euch an meiner Reise teilhaben lassen, vielleicht hilft euch der eine, oder auch andere Hinweis.

Grundlegende Informationen

Bei Hugo handelt es sich um einen Generator für statische Webseiten, welcher aus Textdateien im Markdownformat HTML Seiten erstellt. Anhand eines Grundgerüsts, sogenannte Templates, lassen sich Webseiten generieren.

Dies bedeutet ich muss von einem CMS ( Content Management System), welches die Webseite aus den Daten einer SQL-Datenbank mit Hilfe von PHP generiert in ein neues Format bringen. Hierbei spielt auch noch der Einsatz von Erweiterungen, welche im CMS installiert werden können, eine große Rolle. Dies haben Einfluss auf den Inhalt, wie zum Beispiel Text, Bilder und Code, welcher sich in den einzelnen Seiten, oder auch Blogposts befindet. Auch haben diese Erweiterungen Einfluss auf das Aussehen der Webseite, in meinem fall dem Blog, welchen ich später nachbilden muss.

Da ich hier sehr viele Erweiterungen, Plugins, für WordPress im Einsatz hatte, war für mich erst einmal ein Punkt für das Deployments eines neuen Blog sehr wichtig:

Teil 1: Das Ziel ein schlankes WordPress als Basis

Sind wir ehrlich, ich habe mich doch sehr verhaltend in dem letzten 3-4 Jahre verhalten, wenn es um das schreiben von Artikeln ging. Auch schon vorher waren die Kommentare nicht wirklich en masse, sodaß ich sagen würde, ich brauche unbedingt eine Kommentarfunktion. Da die abgegeben Kommentare nicht meine eigenen sind, gehören diese auch nicht mir. Somit habe ich mich entschieden diese Kommentare zu behalten und für später zu erhalten.

Mit dieser Entscheidung konnte ich schon 3 Plugins aus meiner Installation verbannen. Eines gegen Spamschutz, eines für die datengerechte Anfrage für das Informieren über neue Kommentare und das andere für die Vorschau während des Kommentarschreibens.

Ich habe dann als weitere Plugins für die Entfernung das Einbinden von Gists von Github, sowie ein datenschutzgerechtes Einbinden von Youtubevideos vorgesehen. Hierzu musste ich alle Blogposts umschreiben in welchen die Kürzel der Plugin vorgekommen sind. Und den Code dort direkt einfügen. Ein Link zu dem Gist wurde auch hinzugefügt.

Mit dem weiteren Schritt, die Entfernung eines Gallerieplugins und einem Plugin, welches bei einem Mausklick das Originalbild anzeigt, hatte ich schon sehr viel von dem Code bereinigt. Mein WordPressblog war immer noch fähig die Artikel in umgeänderter Form anzuzeigen. Das ist nur die halbe Wahrheit, da ja das Gallerieplugin fehlte. Aber so viele Gallerien mit Bilder hatte ich nicht und ich verlinke lieber auf ein eigenes Fotoblog, eingebunden im Fediverse, als weiterhin die eierlegende Wollmilchsau zu betreuen.

Teil 2: Einfache Transformation?

Es war ein ewiges hin und her, sowie ein Abwiegen zwischen einem Plugin, oder einem selbstgeschriebenem Script.

Auch hier hatte ich sehr viele Fragen offen. Viele Fragen handelten davon, ob ich alle Informationen, inklusive der Formatierungen, aus den Artikeln übernehmen kann. Mir waren die die Kommentare, die enthaltenen Bilder, inklusive der Bildbeschreibungen, sehr wichtig. Ich fragte mich, ob die SEO Informationen hoffentlich auch exportiert, oder hatte ich diese umsonst jahrelang eingegeben? Wenn Ja, wo landen diese. Das Internet brachte hier leider nicht alle Informationen. Aber da es zum Glück einige Plugins für den Export in das Format markdown gibt, war ich guter Dinge.

Aber mir stellte sich auch noch eine sehr interessante Frage. Können über 1350 Blogposts aus zwei Jahrzehnten exportiert werden, oder stoße ich bei dem Webspace von Netcup an die Grenzen der Ausführungszeit für PHP-Scripte?

Ich habe mich Schlussendlich für das Plugin WordPress to Hugo Exporter entschieden und dies via Shell in meinem Wordpress installiert. Nach der Installation hatte ich in meinem Webroot des Webspace das Verzeichnis hugo_export erstellt und den Export angestossen.

cd httpdocs/got/wp-content/plugins/wordpress-to-hugo-exporter/
php hugo-export-cli.php /httpdocs/hugo_export/

Dieser Befehl zog sich dann eine Weile hin und ich hatte bei dem ersten Mal Angst dass jener ohne eine Fehlermeldung abgebrochen war. Heraus kam am Ende die Datei wp-hugo.zip mit einer Größe von 61GB. Ich hatte vergessen den Optionsparameter –no-zip mitzugeben. Ich denke das Komprimieren war einer der Gründe für die Dauer des Exports. Der andere war definitiv jener, welcher das Verzeichnis des WordPress-Plugins BackWPup für das automatische Backup betraf. Dieses Verzeichnis ist nämlich auch mit in das Backup eingeflossen. Natürlich mit den darin befindlichen letzten erstellten 5 Backups. Nach dem Dekomprimieren und dem Löschen des Verzeichnisses backwpup nur noch 1,5GB an wirklichen Nutzdaten übrig. Wir reden nicht darüber.

Teil 3: Exportierte Daten

In meinem jugendlichen Leichtsinn dachte ich dass der Befehl hugo server doch schon ein rendern des Blogs ergibt. Mein Verdacht bestätigt sich, Page not found wird im Browser bei er lokalen Adresse http://localhost:1313/ angezeigt.

Eine Auflistung des Verzeichnisses ergab dann folgende Struktur:

❯ ls
about config.yaml impressum index.md public
blog homepage impressumalt posts wp-content

Und der Blick in die config.yaml war auch sehr ernüchternd:

❯ cat config.yaml
url: https://got-tty.org
name: Got tty
description: It is time for ...

In dem Verzeichnis posts sind alle posts vorhanden und in wp-content alle meine Bilder. Danke WordPress in jeder erforderlichen Auflösung. Hierzu später mehr.

Ich habe mir einmal den ältesten Post angeschaut und war doch über die Syntax im Headerbereich verwundert:

---
title: Blog ist installiert
author: Christian M. Grube
type: post
date: 2006-11-24T18:22:06+00:00
url: /blog-ist-installiert/
explore_page_layout:
 - default_layout
iawmlf_links:
 - 'a:0:{}'
categories:
 - Software
tags:
 - Blog

---
Nur muss ich, wie ich sehe mal massiv an dem Design arbeiten.
Hoffe nicht , dass es ein Fass ohne Boden wird ;)

Aber trotzdem freue ich mich insgeheim auf die Arbeit, muss ich zugeben, denke aber erst, dass ich am Mittwoch oder Donnerstag die Herausforderung annehmen kann, da ich leider bis definitiv Mittwoch bei einem großen schwäbischen Autokonzern mein Brot verdingen muss.
Aber somit wünsche ich noch viel Spaß mir und Euch und harren wir der Dinge die da noch kommen.%

Über den Schreibstil lässt sich streiten 😉, aber über einige Anweisung/Parameter nicht. Die Anweisung iawmlf_links sagt mir leider nichts und auch das explore_page_layout ist mir nicht bekannt.

Ich habe exemplarische dann einmal diesen Post in die Form gebracht in welche er sein sollte:

---
title: Blog ist installiert
author: Christian M. Grube
date: 2006-11-24T18:22:06+00:00
slug: blog-ist-installiert
url: /blog-ist-installiert/
categories:
 - Software
tags:
 - Blog
---
Nur muss ich, wie ich sehe mal massiv an dem Design arbeiten.
Hoffe nicht , dass es ein Fass ohne Boden wird ;)

Aber trotzdem freue ich mich insgeheim auf die Arbeit, muss ich zugeben, denke aber erst, dass ich am Mittwoch oder Donnerstag die Herausforderung annehmen kann, da ich leider bis definitiv Mittwoch bei einem großen schwäbischen Autokonzern mein Brot verdingen muss.
Aber somit wünsche ich noch viel Spaß mir und Euch und harren wir der Dinge die da noch kommen.%

Dies ist das Minimum welches ich mich jedem Post erreichen muss.

Somit habe ich nach einigen Abfragen auf der Kommandzeile die zu löschenden Artefakte eingegrenzt und zum löschen freigegeben.

Hier eine kurze Liste der nicht mehr nötigen WordPresshinterlassenschaften:

  • iawmlf_links
  • ample_page_layout
  • tc-thumb-fld
  • explore_page_layout
  • type
  • s_gallery_properties
  • enclosure
  • format

Des Weiteren habe ich alle vorkommen wp-content/uploads/ in /uploads/ geändert, versteckte WP Plugin DIVs entfernt ( diese gibt es nicht in meiner CSS unter Hugo) und fehlerhafte Datum- und EntwurfsURLs gefixt. Letzte haben den Buildprozess von hugo gestört.

Nach einem durchsuchen nach dem Kürzel wp- habe ich dann sehr viele Hinterlassenschaften von Wordpress gefunden. Jedes wp-block-{Gallery,quote,group,video,etc.} und jedes vorkommen der foogallery-{link, Lightbox, foobox, etc.} wurde gelöscht bzw. angepasst.

Hiernach habe ich mir dann noch mit einem Pythonscript geholfen, welches mir WP-Markup/HTML in sauberes Markdown/HTML umwandeln kann.

Nach einem erstellen meiner eigenen hugo.toml und dem Implementieren von fixIT als Theme hatte dann meinen ersten funktionierenden und grauenhaft aussehenden Build meines Blogs. Und dann wollte ich erst einmal nicht mehr.

Teil 4: Lassen wir es einmal gut aussehen und dann sehen wir weiter

Ich bin ganz offen. Ich habe erst einmal mein komplettes Projekt hinterfragt und mir gesagt, komm lass das WordPress, schreibe ab und zu. Das Leben geht weiter. Man hüpft dann von einem Projekt zum anderen.

Geht es mit Jekyll besser? Hier gibt es ja noch dieses und jenes Theme, welches vielleicht die komplette Sache besser aussehen lässt. Ich habe versucht mich zu selbst zu überreden und einen Funken Hoffnung zu finden. Ein guten Weg zum nächsten Plateau. Leider gab es diesen nicht und ich habe das ganze Projekt für gute 4 Wochen liegen gelassen.

Aber irgendwann bin ich dann ein wenig genervt und als Entspannung neben meiner Arbeit brauche ich auch etwas Ablenkung. Dies habe ich mir dann mit dem Projekt “Wir machen einmal Design” geholt. Wenn ich nun die Aufstellung so lesen, ich glaube ich hätte niemals damit angefangen. Das Durchsehen der git-Logs ist hier sehr Aufschlussreich gewesen. Aber ich habe in den Commitnachrichten nicht geflucht. Das ist eher eine Angelegenheit bei dem Schreiben von ansible playbooks und der YAML-Formatierung. YAML bedeutet auch “Yelling At My Laptop” 😆

Teil 4.1 eine kleine Aufstellung

  • Ich habe das komplette Farbschema passend zu meinem alten Blog welches mit GeneratePress betrieben wurde angepasst.

  • Die Schriftart wurde geändert, sowie auch die Schriftgrößen entsprechend dem alten Blog angepasst

  • Ich habe teilweise die Fontawesome Icons entfernt. Als Beispiel, bei dem Autor und Tag als Meta, ersetzt wurden jene mit einem Veröffentlicht am $DATUM

  • Ich habe das Menü überarbeitet und neue nicht vorhandene Punkte hinzugefügt. Es fehlt noch das Untermenü für die Kategorie

  • Die Paginations hatte einen Bug und es gab die Auflistung 1 2 3 … … … … … … 133. Diese habe ich in 1 2 3 … 133 bzw. 1 … 48 49 50 51 52 … 133 geändert.

  • Im Breadcrumb Stand “Startseite / Artikel / $ARTIKELTITEL”, dies habe ich in “Startseite / $KATEGORIEKLICKBAR / $ARTIKELTITEL” geändert.

  • In der Übersichtsseite stand unter jedem Artikel ein “Weiterlesen”. Hier habe ich einen Check auf den Tag gesetzt, sodaß nur noch “Weiterlesen” bei “truncated” Posts erscheint.

  • Ich habe das Footerlayout angepasst, sodaß es aussieht wie in dem alten Blog.

  • Auf der Übersichtsseite gab es eine komische Trennlinie, welche ich mit einer eigenen ersetzt habe.

  • Ich habe die Tags aus dem Footer entfernt und diese neben den Autorennamen in den Singlepost gesetzt. Über die Fontawesomeicons bin ich mir hier noch im uneins. Schön zu klicken und unterscheiden, aber ich habe das Gefühl das Blog sei im Moment überfüllt im Design.

  • Der Singlepostfooter musste enagepasst werden. Da sind ja die Tags entfernt worden, siehe oben. “Zurueck | Startseite” mussten zentriert werden.

  • Es gab eine komische Sidebar auf der linken Seite, welche ich für die “Ähnlichen Inhalte” nicht haben wollte, denn jene sind schon unter dem Artikel.

  • An den Footer musste ich nochmals ran. Hier fehlte die Vorstellung meiner Person und der Hinweis auf das OSBN.

  • Des weitern habe ich den Link zu Hugo und FixIT angepasst und diesen komischen Zähler deaktiviert.

  • Eigentlich hab eich noch die Lightbox aktiviert. Für eine Vollansicht des Bildes bei klick. Aber sie funktioniert scheinbar noch nicht. Hier muss ich mir nochmals den Code anschauen

  • Die Codeboxen waren immer zugeklappt und mussten manuell geöffnet werden. Ich habe ein maxShownLines -1 gesetzt, aber leider ist hier immer noch nicht die komplette Box zu sehen. Eine weitere Baustelle,

  • Der Darkmode ist per Knopfdruck vorhanden, fehlt aber noch die Automatisierung. Offener Punkt.

Teil 5: 50% geschafft, oder?

Hugo erstellt aus dem markdown der Blogposts, der Layouts und Templates endlich eine Seite. Aber hier fehlt natürlich noch etwas essentielles. Die Suche. Diese habe ich mit Hilfe von hugo-fuse-search implementiert. Diese findet sich oben im Header rechts neben dem Menü.

Wenn ich via hugo server -D meine Entwürfe sehen wollte kam es zu einem absoluten Chaos, welches ich noch nicht lösen konnte. Es wurde jedes mal nur ein einzelner Post aus den Entwürfen angezeigt und keine der bis jetzt veröffentlichten. Faszinierend war, es war jedesmal ein einzelner anderer Entwurf. Somit habe ich 136 Entwürfe in einen eigenen zu ignorierenden Ordner verschoben. Diese Artikel bekomme ich mit allen anderen angezeigt, wenn ich den Entwurfsmodus von hugo nutze. Ich werde mir auf jeden Fall mal die anderen Entwürfe anschauen. Vielleicht finde ich hier noch die eine, oder andere Perle.

Ich habe dann noch via Script in jedem Post nachgeschaut, welches Bild wirklich genutzt wird und die nichtgenutzten in ein eigenes Verzeichnis zur Sicherheit verschoben.

Bisheriges Fazit

Das war einiges. Ich kann mir aber sicher sein, dass ich nur einmal die Arbeit in die Entwicklung stecke und eine sehr lange Zeit davon zehren kann. Ich bin unheimlich froh, dass ich hier für das Deployment git nutzen kann und die Dateien dann via rclone auf den Netcup Webspace schiebe. Leider kann ich hier nicht mit Checksummen arbeiten und nutze hier die Dateigröße für den Vergleich. Ein weiterer User für SSH lässt sich bei Netcup für den Webspace nicht anlegen.

Es ist noch nicht alles so in der Form wie ich es haben möchte. Aber ein grundlegender Anfang ist nun geschafft und ich bin ein Stück Sicherheitsdruck im Nacken mit der Abkehr von WordPress losgeworden. Nicht dass ich WordPress per se für unsicher halte, aber nach einem 10 Stundentag in der IT möchte ich nicht noch zuhause Deployment und Serversicherheit betreiben. Hierfür habe ich meinen Webspace bei Netcup inklusive Mailserver und meine Ruhe. Und so etwas ist manchmal unbezahlbar.

Ich Danke Euch für das lesen des langen Textes und hoffe Ihr habt einen kleinen Einblick bekommen.

Übergroßer Cursor in Kali Linux unter VMware Fusion 25H2

15. Februar 2026 um 14:31
Einstellung der virtuellen Maschine in VMware H252

Die Lösung ist die Eigenschaften der Virtuellen Maschine aufzurufen, hier die Volle Auflösung des Retina Display verwenden zu aktivieren und nach dem Anmelden im Kali Linux Desktop Kali HiDPI Mode zu wählen. Nach einem Restart sollte alles beim alten sein.

Nach dem aus sicherheitsupdategründen erzwungenen Upgrade auf macOS 26.3 mit einem anschließenden Update auf VMware 25H2 war dies einer der kleinen Schluckauf, welche ich zu bewerkstelligen hatte.

Tube Archivist HTTP Error 403: Forbidden

01. Februar 2026 um 19:28

Hier haben wir wieder ein „Henne und Ei“-Problem.
Zwar sind die Cookies richtig kopiert worden und auch die Dateien sind zugänglich, sie lassen sich ja via Browser aufrufen, aber leider ist ytdlp veraltet. Bis ein neues Image für Tube Archivist erscheint, muss man sich mit der Variable TA_AUTO_UPDATE_YTDLP helfen.

Mit dieser Variable in der Compose-Datei und dieser den Wert release mitgeben. Nach einem Neustart des Containers wird eine neue Version von ytdlp heruntergeladen und die Videos können wieder lokal gespiegelt werden.

TA_AUTO_UPDATE_YTDLP = release

Thinkpad T450s ACPI Error unter Debian GNU/Linux

10. Juli 2025 um 13:08

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

07. Juli 2025 um 12:21

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

28. Juni 2025 um 11:25

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

25. Februar 2025 um 14:20

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

15. Oktober 2024 um 09:37

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

{<br />"data-root":"/data/IronWolf1/DOCKER_DATA"<br />}

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<br />"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

06. Oktober 2024 um 11:36

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
&#91;INFO] internally launching GUI (X11 environment)
&#91;INFO] starting Xvfb
&#91;INFO] launching chromium instance
&#91;INFO] launching browser.
&#91;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: &#91;"",""]
 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: &#91;"--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: &#91;"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

18. Mai 2024 um 10:37

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.

LibreOffice-App-Seite auf einer Software-Vertriebsplattform mit einer 4.0-Sterne-Bewertung, über 4 Jahre alt, Platz 2 in den Produktivitäts-Charts, entwickelt von The Document Foundation, Größe 868,5 MB. Version 7.6.6 vom 18.5.2024

Ich habe ein Screenshot mit dem heutigen Datum, ersichtlich in der rechten oberen Ecke, erstellt. Im Screenshot kann man nachvollziehen, dass bis heute das Paket im Apple App Store nach dem Release vor 12 Tagen nicht auf den neuesten Stand gebracht wurde. Somit sind diese Sicherheitslücken immer noch vorhanden. Release Date war der 6.5.2024, heise.de berichtete nach einer Schonfrist für die Updates mit dem Artikel „LibreOffice: Verklickt – und Malware ausgeführt

Meinung

Ob hier die Herausforderung nun bei dem FOSS-Projekt selbst, oder auch bei Apple liegt, ist meiner Meinung nach mehr als vollkommen irrelevant. Im Allgemeinen verlässt sich Otto Normaluser:in darauf, dass die Pakete aus Apples App Store just in time gepflegt werden und auf dem neuesten Stand der Sicherheit bzw. der stabilen Entwicklung sind.

Es ist wie bei manchen Artikeln, welche ich lese. Solange ich in dem Thema nicht involviert bin, glaube ich den ausgiebigen Erklärungen des/der Autors:in und fühle mich informiert. Sobald ich tiefer in ein Thema eingebunden bin, stehe ich dem Artikel mehr als kritisch gegenüber, da ich die Aussagen aufgrund meines Fachwissens verifizieren kann. Hier haben schon einige Verlage mich als wohlwollenden Leser verloren, bzw. halte ich viele Autoren:innen dort für nicht mehr empfehlens- und lesenswert.

Inwieweit kann ich jetzt dem App Store trauen, bei den Projekten, welche ich nicht auf dem Radar habe?

Für mich bleibt hier FOSS weit vorne und GNU/Linux immer noch der von mir propagandierte Standard. Auch hier kommt es zu Sicherheitsvorkommnissen, aber diese wurden bis jetzt immer sehr öffentlich gehandhabt und hier gibt es bis auf die Distributionen selbst keinen Gatekeeper. Wobei sich jene offener in den Codeänderungen darstellen als z.B. ein Store eines Top500 Unternehmens. Hier kann ich die Schritte nachvollziehen.

LibreOffice und Sprachpaket unter macOS installieren

Ich kann empfehlen LibreOffice und das deutsche Sprachpaket via brew zu installieren und von nun an den Paketmanager die Updates vornehmen zu lassen. Wer dem Projekt LibreOffice etwas Gutes tun möchte, hat die Möglichkeit für das Projekt direkt auf deren Homepage zu spenden. Hier sind einmalige, monatlich, quartalsbasierte und jährliche Spenden in jeder Höhe möglich. Gezahlt kann entweder per Kreditkarte, Liberapay, Paypal, oder Banküberweisung. Das schöne ist, diese Spende lässt sich in Deutschland von der Steuer absetzen, siehe hierzu den Unterpunkt Steuerabzug.

Bei der Installation kann es dazu kommen, dass LibreOffice unter macOS nicht startet, sondern es zu einer Meldung kommt, in in welcher macOS vorschlägt LibreOffice in den Papierkorb zu verschieben. Dies ist ein bekanntes Problem und kann mit dem Zusatz –force –no-quarantine behoben werden.

brew install --cask --force --no-quarantine libreoffice libreoffice-language-pack --language=de
==> Downloading https://formulae.brew.sh/api/cask.jws.json
####################################################################################################################################################################################################################################### 100.0%
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/4769ab74236dc8d2616221590166c628c502ac50/Casks/l/libreoffice.rb
####################################################################################################################################################################################################################################### 100.0%
==> Downloading 
####################################################################################################################################################################################################################################### 100.0%####################################################################################################################################################################################################################################### 100.0%
==> Installing Cask libreoffice
Warning: macOS's Gatekeeper has been disabled for this Cask
==> Moving App 'LibreOffice.app' to '/Applications/LibreOffice.app'
==> Linking Binary 'regview' to '/opt/homebrew/bin/regview'
==> Linking Binary 'senddoc' to '/opt/homebrew/bin/senddoc'
==> Linking Binary 'uno' to '/opt/homebrew/bin/uno'
==> Linking Binary 'unoinfo' to '/opt/homebrew/bin/unoinfo'
==> Linking Binary 'uri-encode' to '/opt/homebrew/bin/uri-encode'
==> Linking Binary 'xpdfimport' to '/opt/homebrew/bin/xpdfimport'
==> Linking Binary 'soffice.wrapper.sh' to '/opt/homebrew/bin/soffice'
==> Linking Binary 'unopkg' to '/opt/homebrew/bin/unopkg'
==> Linking Binary 'gengal' to '/opt/homebrew/bin/gengal'
🍺 libreoffice was successfully installed!
==> Caveats
libreoffice-language-pack cannot be upgraded, use brew reinstall --cask libreoffice-language-pack instead
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/4769ab74236dc8d2616221590166c628c502ac50/Casks/l/libreoffice-language-pack.rb
####################################################################################################################################################################################################################################### 100.0%
==> Downloading 
####################################################################################################################################################################################################################################### 100.0%####################################################################################################################################################################################################################################### 100.0%
All dependencies satisfied.
==> Installing Cask libreoffice-language-pack
Warning: macOS's Gatekeeper has been disabled for this Cask
==> Running installer script '/opt/homebrew/Caskroom/libreoffice-language-pack/24.2.3/SilentInstall.sh'
Password:
Silent installation has started, you didn't need to use the .app
Add language pack support for /Applications/LibreOffice.app
🍺 libreoffice-language-pack was successfully installed!
==> Caveats
==> libreoffice-language-pack
libreoffice-language-pack cannot be upgraded, use brew reinstall --cask libreoffice-language-pack instead
➜ ~ 

Ab jetzt wird LibreOffice automatisch von brew auf den neusten Stand gehalten.
Homepage des Paketmanagers brew und eine kleine deutsche Einführung und Anleitung von Thomas Krampe

Neues Theme in WordPress neue Darkmode CSS

23. Februar 2024 um 11:09

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.

Jedoch habe ich mich nun für ein weit genutztes Projekt entschieden. Der Wechsel auf ein neues Theme bringt auch Änderungen in den Klassen mit sich. Dementsprechend musste ich jetzt auch den Code für den Darkmode anpassen. Eine einfache Funktion für die Anpassung der Farben im Darkmode fehlt ungünstigerweise in vielen Themes.

Neben den Klassen wurde noch die Helligkeit der Bilder angepasst. Eine Helligkeit von 70 % empfand ich als augenschonend
Mit der Farbe der Einbettung des Codes im Darkmode bin ich noch nicht so richtig zufrieden 🤷

/* Dark */
@media (prefers-color-scheme: dark) {
&nbsp; &nbsp;body {
&nbsp; &nbsp; &nbsp; &nbsp;background: #23282d;
&nbsp; &nbsp; &nbsp; &nbsp;color: #eee;
&nbsp; }
​
&nbsp; &nbsp;.inside-page-header,
&nbsp; &nbsp;.one-container .container,
&nbsp; &nbsp;.separate-containers .comments-area,
&nbsp; &nbsp;.separate-containers .inside-article,
&nbsp; &nbsp;.separate-containers .page-header,
&nbsp; &nbsp;.separate-containers .paging-navigation {
&nbsp; &nbsp; &nbsp; &nbsp;background-color: #23282d;
​
&nbsp; }
&nbsp; &nbsp;#page,
&nbsp; &nbsp;.footer-widgets,
&nbsp; &nbsp;.site-header,
&nbsp; &nbsp;content {
&nbsp; &nbsp; &nbsp; &nbsp;background: #23282d;
&nbsp; &nbsp; &nbsp; &nbsp;color: #eee;
&nbsp; }
&nbsp; &nbsp;.main-navigation,
&nbsp; &nbsp;.main-navigation .main-nav ul li a,
&nbsp; &nbsp;.main-navigation .menu-bar-items,
&nbsp; &nbsp;.main-navigation .menu-toggle,
&nbsp; &nbsp;.main-navigation ul ul {
&nbsp; &nbsp; &nbsp; &nbsp;background: #23282d;
&nbsp; &nbsp; &nbsp; &nbsp;color: #cca26a;
&nbsp; }
&nbsp; &nbsp;.main-navigation .main-nav ul li:not(&#91;class*="current-menu-"]):hover > a,
&nbsp; &nbsp;.main-navigation .main-nav ul li:not(&#91;class*="current-menu-"]):focus > a,
&nbsp; &nbsp;.main-navigation .main-nav ul li.sfHover:not(&#91;class*="current-menu-"]) > a,
&nbsp; &nbsp;.main-navigation .menu-bar-item:hover > a,
&nbsp; &nbsp;.main-navigation .menu-bar-item.sfHover > a {
&nbsp; &nbsp; &nbsp; &nbsp;color: white;
&nbsp; &nbsp; &nbsp; &nbsp;background-color: #23282d;
&nbsp; }
​
&nbsp; &nbsp;.main-navigation .main-nav ul ul li a {
&nbsp; &nbsp; &nbsp; &nbsp;color: grey;
&nbsp; }
&nbsp; &nbsp;.main-navigation .main-nav ul ul li&#91;class*="current-menu-"] > a {
&nbsp; &nbsp; &nbsp; &nbsp;color: #efefef;
&nbsp; &nbsp; &nbsp; &nbsp;background-color: grey;
​
&nbsp; }
&nbsp; &nbsp;.main-navigation .main-nav ul li&#91;class*="current-menu-"] > a {
&nbsp; &nbsp; &nbsp; &nbsp;color: #efefef;
&nbsp; &nbsp; &nbsp; &nbsp;background-color: #23282d;
&nbsp; }
&nbsp; &nbsp;.navigation-search input&#91;type="search"],
&nbsp; &nbsp;.navigation-search input&#91;type="search"]:active,
&nbsp; &nbsp;.navigation-search input&#91;type="search"]:focus,
&nbsp; &nbsp;.main-navigation .main-nav ul li.search-item.active > a,
&nbsp; &nbsp;.main-navigation .menu-bar-items .search-item.active > a {
&nbsp; &nbsp; &nbsp; &nbsp;color: black;
&nbsp; &nbsp; &nbsp; &nbsp;background-color: lightgrey;
&nbsp; }
&nbsp; &nbsp;#reply-title,
&nbsp; &nbsp;.comment-form-comment,
&nbsp; &nbsp;.comment-notes,
&nbsp; &nbsp;.entry-title,
&nbsp; &nbsp;.textwidget,
&nbsp; &nbsp;.widget-title,
&nbsp; &nbsp;h1,
&nbsp; &nbsp;h2,
&nbsp; &nbsp;h3,
&nbsp; &nbsp;h4,
&nbsp; &nbsp;h5,
&nbsp; &nbsp;h6 .entry-header a {
&nbsp; &nbsp; &nbsp; &nbsp;color: #cca26a !important;
&nbsp; }
&nbsp; &nbsp;.comment-author-link {
&nbsp; &nbsp; &nbsp; &nbsp;color: #a5862a;
&nbsp; }
&nbsp; &nbsp;pre.wp-block-code {
&nbsp; &nbsp; &nbsp; &nbsp;background-color: #c4c4ad;
&nbsp; }
&nbsp; &nbsp;#comments p {
&nbsp; &nbsp; &nbsp; &nbsp;color: #cca26a !important;
&nbsp; }
&nbsp; &nbsp;form#commentform textarea#comment {
&nbsp; &nbsp; &nbsp; &nbsp;background: #d0cfcf;
&nbsp; }
&nbsp; &nbsp;Element {}
&nbsp; &nbsp;form#commentform input#author,
&nbsp; &nbsp;form#commentform input#email,
&nbsp; &nbsp;form#commentform input#url {
&nbsp; &nbsp; &nbsp; &nbsp;background: #6c6c6c;
&nbsp; }
&nbsp; &nbsp;@media (prefers-color-scheme: dark) {
&nbsp; &nbsp; &nbsp; &nbsp;body {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;background: #23282d;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color: #eee;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;#page,
&nbsp; &nbsp; &nbsp; &nbsp;content {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;background: #23282d;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color: #eee;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;#reply-title,
&nbsp; &nbsp; &nbsp; &nbsp;.comment-form-comment,
&nbsp; &nbsp; &nbsp; &nbsp;.comment-notes,
&nbsp; &nbsp; &nbsp; &nbsp;.entry-header a,
&nbsp; &nbsp; &nbsp; &nbsp;.entry-title,
&nbsp; &nbsp; &nbsp; &nbsp;.textwidget,
&nbsp; &nbsp; &nbsp; &nbsp;.widget-title {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color: #cca26a !important;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;.comment-author-link {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color: #a5862a;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;pre.wp-block-code {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;background-color: #a4a46e;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;#comments p {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color: #cca26a !important;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;form#commentform textarea#comment {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;background: #d0cfcf;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;Element {}
&nbsp; &nbsp; &nbsp; &nbsp;form#commentform input#author,
&nbsp; &nbsp; &nbsp; &nbsp;form#commentform input#email,
&nbsp; &nbsp; &nbsp; &nbsp;form#commentform input#url {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;background: #6c6c6c;
&nbsp; &nbsp; &nbsp; }
​
&nbsp; &nbsp; &nbsp; &nbsp;.scrim,
&nbsp; &nbsp; &nbsp; &nbsp;wp-lightbox-overlay {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;background-color: black !important;
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;.attachment-full.size-full.wp-post-image,
&nbsp; &nbsp; &nbsp; &nbsp;.wp-block-image img {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filter: brightness(70%)
&nbsp; &nbsp; &nbsp; }
​

Rescuezilla: System auf neue Festplatte umziehen

03. April 2026 um 13:01

💾

In diesem Video zeigt Jean, wie man mit Rescuezilla ein Backup von einer kompletten Partition machen kann, um sein ganzes System auf eine neue Festplatte oder einen neuen Rechner umzuziehen.
Wenn Du das Video unterstützen willst, dann gib bitte eine Bewertung ab, und schreibe einen Kommentar. Vielen Dank!

Links:
-------------------------------------
- Rescuezilla: https://rescuezilla.com/
- Zum Stream von Hauke und Jean: https://youtube.com/live/LsV_juJ5KKs

- Linux-Guides Merch*: https://linux-guides.myspreadshop.de/
- Professioneller Linux Support*: https://www.linuxguides.de/linux-support/
- Linux-Arbeitsplatz für KMU & Einzelpersonen*: https://www.linuxguides.de/linux-arbeitsplatz/
- Linux Mint Kurs für Anwender*: https://www.linuxguides.de/kurs-linux-mint-fur-anwender/
- Offizielle Webseite: https://www.linuxguides.de
- Forum: https://forum.linuxguides.de/
- Unterstützen: http://unterstuetzen.linuxguides.de
- Mastodon: https://mastodon.social/@LinuxGuides
- X: https://twitter.com/LinuxGuides
- Instagram: https://www.instagram.com/linuxguides/
- Kontakt: https://www.linuxguides.de/kontakt/

Inhaltsverzeichnis:
-------------------------------------
00:00 Intro
00:38 Voraussetzungen
01:29 USB-Stick vorbereiten
02:54 System sichern
09:24 System wiederherstellen
15:31 Outro

Haftungsausschluss:
-------------------------------------
Das Video dient lediglich zu Informationszwecken. Wir übernehmen keinerlei Haftung für in diesem Video gezeigte und / oder erklärte Handlungen. Es entsteht in keinem Moment Anspruch auf Schadensersatz oder ähnliches.

*) Werbung

#linuxguides #linux #rescuezilla #opensource #backup

GitHub plant Datennutzung für Copilot Training

Von: MK
03. April 2026 um 05:45

GitHub stellt seine Nutzungsbedingungen erneut auf den Kopf. Ab dem 24. April 2026 sollen Entwicklerdaten deutlich intensiver für das Training von Copilot genutzt werden. Die Plattform will verstehen wie Nutzer arbeiten und verspricht bessere Vorschläge. Wer das nicht möchte muss aktiv widersprechen. Das neue Modell gilt für Free, Pro und Pro+. Business und Enterprise bleiben […]

Der Beitrag GitHub plant Datennutzung für Copilot Training erschien zuerst auf fosstopia.

❌