Archiv des Monats: Juni 2025

Wie kann ich die Unixzeit einer Variablen im Forgejo Workflow zuweisen?

Dies ist ein Beitrag der Sorte „Notiz an mich selbst“. Wenn sie euch ebenfalls hilft, umso besser.

Ich hatte in folgendem Workflow versucht, die aktuelle Unixzeit in einer Umgebungsvariablen zu speichern, um sie in verschiedenen Schritten des Workflows wiederverwenden zu können. Mein Test-Workflow sah wie folgt aus:

name: test

on:
  push:
    branches: workflow_tests

env:
  UNIXTIME: $(date +%s)

jobs:
  test:
    runs-on: podman
    steps:
      - run: echo Debug output
      - run: echo Current unix time is ${{ env.UNIXTIME }}
      - run: sleep 10
      - run: echo Current unix time is ${{ env.UNIXTIME }}

Leider entsprach die Ausgabe nicht meiner Erwartung.

  • Ergebnis der ersten Ausgabe: 1747991617
  • Ergebnis der zweiten Ausgabe: 1747991629

In https://matrix.to/#/#codeberg.org:matrix.org erklärte mir jacksonchen666, dass $(date +%s) vermutlich als String an UNIXTIME übergeben wird. Die Auswertung durch die Shell findet dann erst im jeweiligen Workflow-Schritt statt. Ob das stimmt, weiß ich nicht, es klingt jedoch plausibel.

Christoph aus dem gleichen Matrix-Kanal schlug folgende Lösung vor:

echo "MY_VAR=foo" >> $GITHUB_ENV

Hier wird in der Shell der Wert foo der Variablen MY_VAR zugewiesen und diese anschließend in der Workflow-Umgebung verfügbar gemacht. Für mein Beispiel sieht das nun so aus:

name: test

on:
  push:
    branches: workflow_tests

jobs:
  test:
    runs-on: podman
    steps:
      - run: echo Debug output
      - run: echo "UNIXTIME=$(date +%s)" >> $GITHUB_ENV
      - run: echo Current unix time is ${UNIXTIME}
      - run: sleep 10
      - run: echo Current unix time is ${UNIXTIME}

Und schon stimmt die Ausgabe der UNIXTIME in beiden Schritten überein. Ich habe wieder was dazu gelernt. :-)

Meinung: DNS4EU – Kurz vorm Klo in die Hose gesch…

In diesem Jahr wird in Deutschland und der EU neben Künstlicher Intelligenz auch viel über digitale Souveränität diskutiert. Es ist kein Geheimnis, dass Europa bei IT-Anwendungen, Diensten und -Produkten den Anschluss an Nordamerika und Asien verloren hat bzw. sich freiwillig in eine Abhängigkeit begeben hat. Da erscheint DNS4EU wie ein kleiner LIchtblick.

Ein DNS-Dienst, betrieben in der EU, konform zur Datenschutz-Grundverordnung (DSGVO). Das hört sich erstmal gut an — ist es aber nicht.

Wie eine Recherche des IT-Consultant Jens Link ergab: „…,geht im Prinzip der gesamte Traffic durch Netze einer Firma außerhalb der EU.“ Genau gesagt durch Großbritanien, welches seit 2020 nicht mehr Mitglied der EU ist. Das ist aus mindestens den folgenden zwei Gründen ungünstig.

DNS-Datenverkehr ist meistens unverschlüsselt. Jede Person mit Zugriff auf den Datenverkehr kann mitlesen, wer wann welche Internetseite oder genauer gesagt Domain aufruft. Das ist nunmal so, unabhängig davon welche Route der Datenverkehr im Internet einschlägt.

England ist Mitglied der sogenannten Five Eyes, einer engen Kooperation der Geheimdienste aus Australien, Canada, England, Neuseeland und den USA. Für die Dienste dieser Staaten sind EU-Bürgerinnen und Bürger Angehörige von Drittstaaten, deren Daten zu geheimdienstlichen Zwecken gesammelt und ausgewertet werden dürfen. Spätestens seit der globalen Überwachungs- und Spionageaffäre ist bekannt, dass dies auch geschieht.

Was nützt es also, einen Dienst zu haben, dessen Betreiber sich zwar an die DSGVO im speziellen und die europäische Rechtsordnung im allgemeinen halten müssen, der gesamte Datenverkehr aber über jemanden geleitet wird, der daran nicht gebunden ist?

Den Ansatz und die Idee hinter DNS4EU finde ich gut, die Umsetzung mangelhaft. Solange der Datenverkehr den Rechtsraum der EU verlässt, bietet DNS4EU keinen Mehrwert zu bestehenden Diensten. Da bleibe ich lieber bei dnsforge.de oder den DNS-Resolvern meiner Internetdiensteanbieter.

Weitere Artikel zum Thema DNS in diesem Blog:

Zwischen Microblogging, TikTok-Videos und Social Media – Wo steht das Bloggen heute?

Ich lese und schreibe gerne. Lesen kann ich fast überall, ohne meine Umgebung zu stören. Gleichzeitig habe ich meine Ohren frei, um meine Konzentration schnell auf andere Dinge lenken zu können, ohne dass sich jemand durch Kopfhörer auf bzw. in meinen Ohren ausgeschlossen fühlt.

Ähnlich ist es mit dem Schreiben. Ich kann schreiben, während nebenbei das Fernsehen oder Radio läuft oder ich im Park oder einem Biergarten sitze. Podcasts und Videos lassen sich in diesen Umgebungen nur schwierig aufzeichnen.

Zudem bin ich in einer Zeit aufgewachsen, wo die Internetbandbreite noch so schmal war, dass an die flächendeckende Verbreitung von Audio und Video noch nicht zu denken war.

So ist das geschriebene Wort bis heute mein Favorit für die Aufnahme und Verbreitung von Wissen. Und damit sind Blogs für mich auch heute ein wichtiger und geschätzter Bestandteil des Internets, die für mich einen hohen Stellenwert besitzen.

Ich habe noch kein einziges TikTok-Video gesehen und kann dessen Stellenwert für die Gesellschaft nicht beurteilen. Ich finde generell nur sehr wenig Gefallen an Internetvideos, da sich bei mir der Eindruck verfestigt hat, dass diese häufig in die Länge gezogen werden, um noch eine Werbeunterbrechung oder Produktplatzierung unterbringen zu können. Ich fand bisher nur sehr wenige Videos hilfreich.

Wir Menschen sind jedoch teils sehr unterschiedlich und so ist mir bewusst, dass es natürlich auch eine Nutzergruppe gibt, welche Videos jederzeit den Vorzug vor einem Blogartikel gibt. Das ist auch vollkommen in Ordnung. Nutzt das Medium, welches euch am meisten anspricht.

Microblogging und Social Media sind für mich persönlich Synonyme für Mastodon. Hier folge ich meinen Bekannten, Freunden und interessanten Personen, deren Beiträge mich interessieren. Ich selbst teile hier meine Gedanken, Tageslaune und weise auf neue Artikel in meinem Blog hin. Falls ihr daran interessiert seid, findet ihr mich unter @Tronde@social.anoxinon.de.

Microblogging sehe ich es bestenfalls als Ergänzung zu einem Blog. Mit den Threads auf den diversen Plattformen konnte ich mich nie anfreunden. Wenn jemand etwas in mehr als 512 Zeichen ausdrücken möchte, freue ich mich, wenn dies in einem Blog niedergeschrieben wird, den ich gemütlich am Stück lesen kann.

Dies war nun meine Meinung. Welchen Stellenwert besitzen Blogs für euch?

Dieser Beitrag ist Teil der #BlogWochen2025, welche von von Benedikt, Dirk und Robert zum runden Geburtstag ihrer Blogs ausgerufen wurden.

Was ist das Red Hat Offline Knowledge Portal und wie betreibt man es als systemd.service?

In diesem Tutorial erkläre ich, worum es sich beim Red Hat Offline Knowledge Portal handelt, unter welchen Voraussetzungen man es nutzen kann und wie man es als systemd.service auf dem eigenen Rechner betreibt.

An einigen Stellen verweise ich auf die offizielle Red Hat Dokumentation, um das Tutorial nicht unnötig zu verlängern.

Was ist das Red Hat Offline Knowledge Portal?

Wie der Name suggeriert, handelt es sich um eine offline nutzbare Version des Red Hat Customer Portal und unserer Knowledge Base, Errata, Produktdokumentation, CVE-Datenbank und Red Hat Security Data API. Das folgende Bildschirmfoto zeigt die Startseite.

Startseite des Red Hat Offline Knowledge Portal

Ausgeliefert wird es als OCI-kompatibles Container-Image über registry.redhat.io (Authentifizierung erforderlich). Informationen zum aktuellen Image und den Vorgängerversionen finden sich auch im Red Hat Ecosystem Catalog. Der Inhalt wird wöchentlich aktualisiert und als aktualisiertes Container-Image bereitgestellt.

Wofür soll das gut sein?

Als Systemadministratoren oder Technical Account Manager (TAM) möchten wir auch auf die im vorstehenden Abschnitt genannten Informationen zugreifen können, wenn wir uns in einer Umgebung befinden, in der ein Internetzugriff nicht möglich ist. Darunter fallen zum Beispiel:

  • Vom Internet getrennte bzw. isolierte IT-Umgebungen
  • Einige Züge der Deutschen Bahn
  • Besprechungsräume und Büros mit bescheidener Signalstärke für das Diensttelefon
  • Umgebungen, in denen der Zugriff auf die Online-Informationen ermüdend langsam ist

Ich persönlich möchte das Offline Knowledge Portal zum Beispiel gerne auf meinem Arbeitslaptop dabei haben, um unterwegs jederzeit auf die darin enthaltenen Informationen zugreifen zu können. Es ist so schnell, dass ich nicht mehr auf Zug-WLAN, langsame Mobilfunkverbindungen oder die langsame Online-Version (an einer Verbesserung wird gearbeitet) warten muss.

Wer kann das benutzen?

Folgende Voraussetzungen müssen erfüllt sein, um das Offline Knowledge Portal nutzen zu können:

  • Es wird eine aktive Red Hat Satellite Subscription benötigt
  • Gültige Customer Portal, Red Hat Developer oder Registry Service Account -Zugangsdaten
  • Internetzugang, um das Container-Image herunterladen zu können
  • Eine rootless Podman Umgebung in Version 4.4 oder aktueller, welche diese Anforderungen erfüllt
  • Ein gültiger Offline Knowledge Portal access key
  • Zugangsdaten für registry.redhat.io in einer Datei für eine automatisierte Anmeldung liegen vor; siehe container-auth.json(5) für weitere Informationen

Wie kann man das dann benutzen?

Wer die schnelle Lösung sucht, findet diese in Chapter 1. Launching Red Hat Offline Knowledge Portal. Ich zeige an dieser Stelle, wie man das Offline Knowledge Portal als systemd.service konfigurieren und dann wie einen normalen Dienst steuern kann. Im folgenden Codeblock findet ihr mein Podman Quadlet, mit dessen Hilfe der systemd.service generiert wird. Die Datei habe ich in diesem Pfade abgelegt: ~/.config/containers/systemd/rhokp.container.

:~$ cat .config/containers/systemd/rhokp.container
[Unit]
Description=Red Hat Offline Knowledge Portal

[Container]
AutoUpdate=registry
ContainerName=RHOKP
Image=registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
PublishPort=127.0.0.1:8080:8080
PublishPort=127.0.0.1:8443:8443
Pull=newer
Secret=rhokp_access_key,type=env,target=ACCESS_KEY

[Service]
# Extend Timeout to allow time to pull the image
TimeoutStartSec=900

[Install]
# Start by default on boot
# WantedBy=multi-user.target default.target

Erklärung des Abschnitts [Container]:

  • AutoUpdate=registry
    • Aktiviert automatische Updates für den Container
    • Podman prüft dabei, ob in der Container-Registry eine neuere Version des Container-Images vorhanden ist, wenn der podman-auto-update.timer abgelaufen ist
  • ContainerName=RHOKP
    • Gibt dem Container einen Namen
    • Dieser wird in der Ausgabe von podman ps angezeigt
  • Image=registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
    • Fully qualified container reference
    • Der Tag latest ist zu verwenden, damit automatische Updates funktionieren
  • PublishPort=
    • Da ich das Offline Knowledge Portal auf meinem Arbeitslaptop ausführe und nur selbst nutze, binde ich den Dienst an die IP-Adresse 127.0.0.1
    • Soll der Dienst im Netzwerk angeboten werden, ist eine entsprechend erreichbare IP-Adresse zu verwenden
  • Pull=newer
    • Mit dieser Pull-Policy wird bei jedem Container-Start geprüft, ob eine neue Image-Version in der Container-Registry verfügbar ist und lädt diese ggf. herunter
    • Auf diese Weise muss ich nicht auf den Ablauf von podman-auto-update.timer warten
    • Es macht es mir einfacher, das Image auf meinem Laptop aktuell zu halten
  • Secret=rhokp_access_key,type=env,target=ACCESS_KEY
    • Ich habe meinen Offline Knowledge Portal Access Key in einem Podman-Secret namens rhokp_access_key gespeichert, welches beim Container-Start in die Umgebungsvariable ACCESS_KEY gemappt wird
    • So stelle ich sicher, dass mein Zugangstoken nicht in der Ausgabe von podman inspect auftaucht oder mit dem Container in eine Datei gespeichert wird und ggf. unkontrolliert mein System verlässt

Weitere Informationen finden sich in den Manpages podman-systemd.unit(5) und podman-secret(1).

Bitte beachtet, dass ich die letzte Zeile mit WantedBy= auskommentiert habe, da ich den Service auf meinem Laptop nur bei Bedarf starte. Wenn ihr den Dienst auf einem Server laufen lassen möchtet, der automatisch mitstartet, kommentiert die Zeile einfach ein.

Mit den folgenden Befehlen wird aus dem Quadlet ein systemd.service generiert und gestartet.

:~$ systemctl --user daemon-reload
:~$ systemctl --user start rhokp.service
:~$ systemctl --user is-active rhokp.service
active

Zusammenfassung

  • Ich muss mir nicht mehr den CLI-Befehl zum Start des Offline Knowledge Portal merken
  • Ich habe es auf meinem Arbeitslaptop stets dabei und griffbereit
  • Gesteuert wird es über vertraute systemctl-Befehle
  • Automatische Updates sind ebenfalls möglich

Wenn euch die Idee gefällt und ihr die Vorraussetzungen erfüllt, probiert es selbst aus.

PS: Es ist erfreulich schnell!