Feuerfest

Just the private blog of a Linux sysadmin

Adding canonical links for category and tag pages in Bludit 3.16.2

TL;DR: I updated to Bludit 3.17.2 and this change isn't needed anymore as the Canonical plugin was rewritten and now includes canonical links for tag and category pages.

Google's Search Console has problems with my site regarding duplicate content due to "Duplicate without user-selected canonical". Which is Google's wording for:

The automatically generated site-views for your categories and tags have the same content sometimes. Hence identical content is available under different URLs.

And yes, when I checked the HTML source of these pages there is no canonical link. Despite the canonical-plugin being active.

A single post shows the following:

<!-- Load Bludit Plugins: Site head -->
<link rel="canonical" href="https://admin.brennt.net/please-don-t-remove-your-comment-section">
<link href="/bl-plugins/prism/css/prism.css" rel="stylesheet">

But for https://admin.brennt.net/tag/2fa or https://admin.brennt.net/category/it it only showed the following:

<!-- Load Bludit Plugins: Site head -->
<link href="/bl-plugins/prism/css/prism.css" rel="stylesheet">

ChatGPT to the rescue! - But with a twist!

As it is currently 6am I wasn't in the mood to dig through the code myself. So I asked ChatGPT: "How do I retrieve the tag name element in the Bludit blogging software". Only for ChatGPT to give me an extensive answer. ... For PHP-Code the canonical-plugin didn't have.

Ah.. Yes.. Typical, isn't it? Stupid LLMs, bla bla.

No, turns out on January 15th the canonical-plugins was extensively re-written. Fixing the missing canonical links. Great. So ChatGPT did indeed based it answer on the current code. I quickly searched the Bludit forum and GitHub if there is anything said about a new Bludit release but nothing showed up. And as the last release was in August 2024 I currently don't have high hopes for a release in the near future.

Instead I just copy & pasted the current code completely into ChatGPT - as providing the GitHub link didn't work - and got an answer that looked good.

<?php

class pluginCanonical extends Plugin {

    public function siteHead()
    {
        // Home page
        if ($GLOBALS['WHERE_AM_I'] === 'home') {
            return '<link rel="canonical" href="'.DOMAIN_BASE.'"/>'.PHP_EOL;
        }

        // Single page / post
        elseif ($GLOBALS['WHERE_AM_I'] === 'page') {
            global $page;
            return '<link rel="canonical" href="'.$page->permalink().'"/>'.PHP_EOL;
        }

        // Tag pages
        elseif ($GLOBALS['WHERE_AM_I'] === 'tag') {
            global $url;
            $tagKey = $url->slug();
            return '<link rel="canonical" href="'.DOMAIN_TAGS.$tagKey.'"/>'.PHP_EOL;
        }

        // Category pages
        elseif ($GLOBALS['WHERE_AM_I'] === 'category') {
            global $url;
            $categoryKey = $url->slug();
            return '<link rel="canonical" href="'.DOMAIN_CATEGORIES.$categoryKey.'"/>'.PHP_EOL;
        }
    }

}

The only new lines are the ones for tag pages and category pages.

Editing the bl-plugins/canonical/plugin.php file, reloading a category and a tag page, aaaaaaand we're green on canonical links.

Result for https://admin.brennt.net/tag/2fa:

<!-- Load Bludit Plugins: Site head -->
<link rel="canonical" href="https://admin.brennt.net/tag/2fa"/>
<link href="/bl-plugins/prism/css/prism.css" rel="stylesheet">

Result for https://admin.brennt.net/category/it:

<!-- Load Bludit Plugins: Site head -->
<link rel="canonical" href="https://admin.brennt.net/category/it"/>
<link href="/bl-plugins/prism/css/prism.css" rel="stylesheet">

Great. Now back to the main problem...

Comments

Please don't remove your comment section

For an upcoming blog article I wanted to include a link to a blog I saw in the comment section of the following blog post: James Zhan | Google De-Indexed My Entire Bear Blog and I Don’t Know Why

Only that I couldn't find the comments anymore. What!?

Turns out, as stated in the changelog of his blog, the author removed the comments section and with this, all comments.

Why!? Now all that wisdom is gone. I.. Yeah, ok. It's his blog. I get it. However I'm annoyed since I forgot to make a copy of that page in my Readeck-Instance.

*sigh* Lesson learned. I guess.

But how cool is it to have a changelog for your blog? After all it immediately answered my question.

Comments

Apache 2 stops working when the terminal window is resized?

I encountered an interesting Mastodon post. In it a user describes the problem that the Apache 2, which is running in foreground inside a docker container, stops when the terminal window is resized.

What?

And it is even written to the logfile:

[Mon Jan 12 17:38:14 2026] [notice] caught SIGWINCH, shutting down gracefully

Clearly this must be some strange bug regarding signal handling in Apache, right?

Turns out: No. This is just a misuse of the WINCH signal. Normally it signals a process that the terminal resolution has changed. The process can then adjust output etc.

But Apache uses the signal to initiate a graceful-stop. This is even documented under https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop

"The WINCH or graceful-stop signal causes the parent process to advise the children to exit after their current request [...]"

However, I would prefer if they would explicitly point out that they:

  • Re-Use that signal to achieve a completely different thing
  • Mention the possible implications this has if your Apache process is executed in the foreground
Comments

Ah yes, the reminder to perform a full-backup at least once each year

After ~14 years of service one of the WD Green drives failed. It had a few bad sectors for years, but the count didn't increase. Hence I didn't replace the drive immediately. Now it started reporting I/O errors too a few hours ago.

As the situation was foreseeable I already bought two replacement drives. Now the first one is replaced and the 9TB RAID5 will take roughly more than a day to rebuild.

root@DiskStation:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md2 : active raid5 sdc3[5] sda3[0] sdd3[4] sdb3[1]
      8776632768 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/3] [UU_U]
      [>....................]  recovery =  0.0% (280704/2925544256) finish=2605.1min speed=18713K/sec

md1 : active raid1 sdc2[2] sda2[0] sdb2[1] sdd2[3]
      2097088 blocks [4/4] [UUUU]

md0 : active raid1 sdc1[2] sda1[0] sdb1[1] sdd1[3]
      2490176 blocks [4/4] [UUUU]

unused devices: <none>

A few minutes later the estimate already went down by 1100 minutes. I'll see how long it really took in the end.

root@DiskStation:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md2 : active raid5 sdc3[5] sda3[0] sdd3[4] sdb3[1]
      8776632768 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/3] [UU_U]
      [>....................]  recovery =  0.3% (9309952/2925544256) finish=1584.8min speed=30667K/sec

md1 : active raid1 sdc2[2] sda2[0] sdb2[1] sdd2[3]
      2097088 blocks [4/4] [UUUU]

md0 : active raid1 sdc1[2] sda1[0] sdb1[1] sdd1[3]
      2490176 blocks [4/4] [UUUU]

unused devices: <none>

After Christmas I will replace the 4th drive also, as this also reported a bad sector as of today. And having swapped out 2 out of 4 drives is somewhat okay-ish for a 4 drive RAID5 with no hotspare. I don't assume the remaining to drives will fail completely within such a short period, that I can't replace at least one (and let the RAID rebuild, of course!).

Luckily I made my full-backup a few days ago. 😁

Comments

The screw font

Via Mastodon I was made aware of the font "Schraubenkiste" (screw box). It is a font which includes various screw heads and even allows specifying their diameter and pitch. You can find it here: http://www.peter-wiegel.de/Schraubenkiste.html

Peter Wiegel designed it in his free time and allows it to be used commercially too. If you have any other question regarding the use of his fonts, there is an FAQ on his homepage https://www.peter-wiegel.de/index.html, for english you just need to scroll down a little bit. 

Comments

Ignoriert die verdammten Kinder!

Die großartige Lilith Wittmann hat in einem Beitrag auf LinkedIn auf die aktuellen Probleme mit der Altersverifikationsinfrastruktur hingewiesen, welche aktuell von Telekom & Thales aufgebaut wird. U.a. eben auch das die Nachweise auf dem Smartphone selbst generiert und verifiziert werden.

Desweiteren führt Sie aus:

In dem Moment wo staatliche Identifikationsinfrastruktur auf Basis von Snakeoil-Crypto im Internet in der Breite ausgerollt wird, ist es nur noch ein Softwareupdate um das alles nicht mehr pseudonym umzusetzen - sondern personalisiert. Weil die ganze Infrastruktur ist ja dann schon da. Und es ist nicht so, dass die EU in der Vergangenheit nicht bereits versucht hätte, Plattformen in diese Richtung zu drängen.
 - Lilith Wittmann

Und das ist, für mich, der relevante Punkt. Welcher mich und viele andere massivst stört. Insbesondere da man, mal wieder, mit dem Schutz der Kinder argumentierte. Natürlich! Die Kinder! Immer sind es die Kinder.

Das kennen IT'ler und Bürgerrechtler ja schon.

*fingerknacken*

Dann wollen wir mal.

Es geht nicht um die verdammten Kinder!

Es geht eben genau nicht um die verdammten Kinder! Es geht angeblich immer vorrangig um die Kinder!

Beim Staatstrojaner, bei der Vorratsdatenspeicherung, bei den DNS-Netzsperren, bei eingebauten Hintertüren in Verschlüsselungen, bei der Chatkontrolle ... Ü-B-E-R-A-L-L geht es immer um die Kinder. Und immer, sind diese Systeme dabei so gestaltet das ein Missbrauch sehr einfach möglich ist. Gerade vor dem Hintergrund des Rechtsrucks in Politik und Gesellschaft, sowie der Tendenz zu technischen Dystopien in letzter Zeit ist dies mehr als bedenklich. Und J-E-D-E-S-M-A-L zeigt uns die Politik: "Haha, nee ging gar nicht um die Kinder. Aber diesen Pumper im Sportstudio, der nebenbei Anabolika vertickt hat. DEM konnten wir es mit dem Staatstrojaner so richtig zeigen!" (Artikel u.a. https://www.tagesspiegel.de/politik/herrmanns-nerven-liegen-blank-4569814.html)

Also, seien Sie doch bitte nicht so verdammt naiv. Gerade nicht in der heutigen Zeit wo wir in USA, Russland & China sehen können wie verdammt schnell solche Systeme missbraucht werden können!
In den USA löschen Frauen, jetzt wo Abtreibung nicht mehr grundsätzlich legal ist, mittlerweile ihre Zyklustracking-Apps. Da einfach Fälle bekannt geworden sind, wo diese Daten verwendet wurden um Frauen auswendig zu machen, die mutmaßlich eine Abtreibung gehabt haben. (Weil in Kreisen der Konversativen eine lange Pause in der Menstruation natürlich nur und ausschließlich durch eine Schwangerschaft auftritt...)
Und auf diesem Niveau bewegen wir uns bei einem Altersverifikationssystem.

In Frankreich wurde damals eine Covid-Tracking App entwickelt wo die Bewegungsdaten zentral auf Servern gespeichert wurden.
Wie sich völlig unerwartet herausstellte, hatte der französische Geheimdienst innerhalb von wenigen Wochen Zugriff auf diese Daten. Zur "Terrorabwehr". Aha. Bewegungsprofile sämtlicher Personen die diese App installiert hatten. Unschuldiger Personen. Personen gegen die keine Ermittlungen geführt wurden. Klar muss man da diese Daten sammeln. "Zum Schutz und Wohle der Demokratie" oder so, glaube ich...

Unter anderem deswegen hat in Deutschland der Chaos Computer Club sich so sehr für die Corona-Warn-App stark gemacht. Wo alle Daten lokal auf jedem Handy lagen und lediglich mehrfach am Tag gegen die Liste mit den anonymen IDs der bekannten positiv getesteten IDs abgeglichen wurde.

Also bitte, BITTE! Ein wenig mehr Verständnis für Bürgerrechte. Und nicht immer gleich von diesem dumm-dreisten "Aber die Kinder!"-Argument einlullen lassen.

Damals, bei der letzten großen Debatte über Netzsperren, da wurde ja auch wieder Kinderpornographie angeführt. Und man müsste jetzt, sofort eine große, zentrale, für alle Internetdiensteanbieter verpflichtende Sperrdatei einführen.

Stellt sich raus: Opferverbände haben gelacht. Haben angemerkt: "Äh, ihr löscht als Staat ja nicht einmal selber die Inhalte die euch bekannt sind. Wie wäre es, wenn ihr erstmal löscht, statt sperrt? Sperren lässt die Inhalte im Netz und beseitigt sie nicht. Und Studien zeigen auch das Löschen besser ist als Sperren."
Da hat die Politik dann auch völlig ungeniert die Opfer ignoriert und weiter ihr "ABER DIE KINDER!!!" gefahren. Und "Löschen statt Sperren" wurde zum Slogan der Netz- und Bürgerrechtsaktivisten. Als "Aber die Kinder!" nicht mehr reichte, erwähnte man noch zusätzlich "Ach, Sie wollen also keine Pädophilen strafrechtlich verfolgen, ja?". *kotz*
Und weniger intelligente Mitmenschen verstanden diese Ränkespiel nicht und warfen mir dann in Diskussionen vor pro Pädophilie zu sein.

Ja, wunderbar... Also, bitte, bitte, bitte: Ignorieren Sie die verdammten Kinder!

Denn: Ich liebe meine Bürgerrechte, meine persönlichen Freiheiten in dieser Demokratie. Und ich sehe nicht ein, wieso ich mir diese wegnehmen lassen muss, nur, weil es böse Menschen in unserer Gesellschaft gibt.

Mach es erstmal selber besser!

In der Diskussion um das Altersverifikationssystem kam dann von der Gegenseite noch das Argument auf: "Ja, wie soll man so ein System denn dann bauen? Präsentiere doch mal deine Lösung!"

Und sorry, aber Nein. Ich muss keine Lösung haben. Ich darf auch gegen den Klimawandel sein ohne meinen persönlichen CO² Fußabdruck zu reduzieren. Einfach da dieser gegenüber einer Öl-Industrie, etc. nicht ins Gewicht fällt. Nicht ohnehin kommt die ganze Idee der "persönlichen Verantwortung" immer exakt aus dem gegnerischen Lager. Wenig überraschend hat so BP die ganze Diskussion um den persönlichen CO² Fußabdruck bzw. den ökologischen Fußabdruck überhaupt erst als PR-Kampagne gestartet, um von sich abzulenken. Denn was viele nicht verstehen: Wenn BP seinen Fußabdruck reduziert, dann reduziert sich automatisch auch der Fußabdruck all der Menschen, die BP-Produkte kaufen & nutzen. Erwähnt aber irgendwie auch nie einer..

In diesem Sinne: Muss ich einen Gegenvorschlag haben wenn unsere Grundrechte in Gefahr sind? Ich finde nicht. Hier darf ich als Bürger wirklich mal verlangen das der Staat seinen Job tut. Genau dafür ist er da. Ablenken gilt nicht. Außerdem ist es doch ziemlich billig einem beliebigen Bürger zu sagen: "Hier, dieses hochkomplexe System mit massiven rechtlichen Anforderungen - wo man allerlei rechtliche Rahmenbedingungen beachten muss.. Bau das mal selbst! Kannst es ja besser!"

Nein, ich kann es nicht zwangsläufig besser. Damit verliere ich aber auch nicht mein Recht Kritik zu üben. Außerdem zahlen wir genau dafür Steuern. Damit finanzieren wir den Staat, damit dieser hochspezialisierte Beamte bezahlt, deren Job es ist sich mit so etwas auszukennen.

Wenn dann aber, immer wieder, Systeme konzipiert werden die unsere Demokratie in Gefahr bringen.. Und das einzige Gegenargument ist: "Aber unsere Kinder!", dann finde ich nicht, das man diesem Argument noch irgendeine Aussagekraft beimessen sollte.

Also, ignorieren Sie in Zukunft bei politischen Debatten um Bürgerrechte bitte die Kinder. Denn Bürgerrechte gelten für uns alle. Auch für Kinder. Deswegen muss man in vielen Fällen gar nicht erst extra Rücksicht nehmen.

Comments