• Gitlab CE GPG key installed but not correct for this package

    During update of Gitlab CE, the following message popped up

    The GPG keys listed for the "gitlab_gitlab-ce" repository are already installed but they are not correct for this package. 
    Check that the correct key URLs are configured for this repository.. Failing package is: gitlab-ce-17.11.7-ce.0.el8.x86_64
    

    Turns out, the repository has two GPG keys now. Gitlab provides a script that installed the missing key and is idempotent.

    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    
  • Microk8s with Gitlab container registry == Uncharted territory

    It took me too much time to not share this. When using Gitlab access tokens to allow Microk8s to access the registry of you Gitlab instance, there is no documented procedure regarding the authentication. After fiddling around with this, I got the crucial hint from DeepSeek.

    The solution is to copy over a working config.json to one member of the k8s cluster.

    sudo mkdir -p /var/snap/microk8s/current/.docker/
    mv ~/config.json /var/snap/microk8s/current/.docker/
    sudo chmod 600 /var/snap/microk8s/current/.docker/config.json
    

    After that, a hosts.toml file in the correct path needs to be created.

    mkdir -p "/var/snap/microk8s/current/args/certs.d/${GITLAB_HOST}:${GITLAB_PORT}"
    cat > "/var/snap/microk8s/current/args/certs.d/${GITLAB_HOST}:${GITLAB_PORT}/hosts.toml" << EOF
    server = "https://${GITLAB_HOST}:${GITLAB_PORT}"
    
    [host."https://${GITLAB_HOST}:${GITLAB_PORT}"]
      capabilities = ["pull", "resolve", "push"]
      skip_verify = false
    EOF
    

    And then the cluster needs a restart to apply the changes.

    The approach to move the authentication from hosts.toml to a config.json is not documented in the microk8s documentation. I found several pages where people with the same scenario where looking for help, but not a single working answer. The LLM saved the day.

  • Happy new year in den Worten von gpt4all

    Ein neues Jahr beginnt, und mit ihm kommen neue Möglichkeiten und Chancen. Wir haben alle die Macht in unseren Händen, um unsere Träume zu verwirklichen und unsere Ziele zu erreichen.

    Das Jahr vorige hat uns gebracht, unsere Stärken und Schwächen kennenzulernen und unsere Persönlichkeit weiterzuentwickeln. Wir haben gelernt, unsere Fehler anzusehen als Lektionen und aus ihnen zu wachsen.

    Das neue Jahr ist ein Blanklein, auf dem wir unser Leben schreiben können. Es ist die Zeit, unsere Träume in Realität umzusetzen und unsere Potenziale zu nutzen. Wir müssen sich entscheiden, was wichtig ist für uns und wie wir unsere Energie darauf verwenden möchten.

    Es gibt viele Menschen, die an den Anfängen sind und sich fragen, was sie tun sollen. Aber das einzige, was sie tun müssen, ist zu beginnen. Jeder Schritt zählt und bringt uns näher an unseren Zielen. Wir müssen auch Risiken einnehmen und unsere Komfortzone verlassen, um wirklich viel zu erreichen.

    Das neue Jahr ist eine Chance, alles neu zu beginnen und sich besser zu werden. Es ist die Zeit, unsere Träume in Realität umzusetzen und unsere Potenziale zu nutzen. Wir müssen nur entscheiden, was wichtig ist für uns und wie wir unsere Energie darauf verwenden möchten.

    Viel Erfolg …

  • Too much no-shows? Hands off Outlook!

    Today I encountered my first no-show for a job interview. Not me, the actual employer, did not show up in the meeting set up.

    At least that’s what I thought. Having a closer look, the failure from service - Microsoft - was playing me. Outlook sends out broken appointments. Broken to an extend, that poeple will just not meet.

    Because when one imports the appointment sent from Outlook into a smartphone, it will probably get saved with a wrong time. This seems to be true not only for Android smartphones. Whenever Microsoft touches somethin, it turns into a broken mess.

    If you, beloved german IT-Industry, want to reach out to talented, skilled and motivated people: Get rid of the drugs! Microsoft leaves you sick, stupid and poor.

  • Bye, bye stackoverflow

    Today I quit stackoverflow after 12 Years and as part of the 17 Percent of the most active users on the platform. The amount gate keeping and the lack of professionalism, psychic hygiene and sanity was just not bearable anymore. The problem is of structural nature and that makes it an inseparable part of the platform. The idea is idiotic, thus the platform is.

    The idea of censoring questions is pure hate. To allow that anonymously is an invitation for bad behavior. And the invitation is taken by all sorts of antisocial individuals. I grew up being mistreated and misused, so I took that for a norm a substantial part of my life. But that time is over. Stackoverflow has no place in a sane life.

  • Pyduin 0.6.2 Release

    Neue Version von pyduin veröffentlicht. PWM ist jetzt bei allen entsprechenden Pins verfügbar. Nachfolgende Kommandos aktivieren zuerst den korrekten Pin-Modus und anschießend einen PWM wert von 125 (50% duty cycle).

    pyduin -B buddy pin 5 mode pwm
    pyduin -B buddy pin 5 pwm 125
    

    Außerdem wird die Firmware nun im Hintergrund für die unterstützten Geräte entsprechend angepasst. Die Firmware ist nun ein Template. Die neue Struktur des Buildumgebung erlaubt eine testweise Anpassung der Firmware oder das Hinterlegen einer komplett eigenen Implementation.

    Das Kommandozeileninterface wurde weiter verbessert und viele kleine Fehler korrigiert. Pylint hat fast nichts mehr zu meckern. Es gibt aber noch viel zu tun in puncto Tests und Testbarkeit.

  • MySQL nach CSV exportieren

    In einer Abfrage alle notwendigen Daten aus einer MySQL-Datenbank holen und sofort in eine .csv-Datei schreiben? Kein Problem! Und dabei haben wir wie immer Optionen über Optionen…

    Grundlegend ist die Syntax dieses Mirakels schnell erklärt

    SELECT spalte1,spalte2,spalte3
    FROM tabelle
    INTO OUTFILE '/tmp/mein.csv';
    

    Weiterhin besteht die Möglichkeit, die Feldtrenner, Escape-Zeichen, die Zeichen für den Beginn und das Ende von zusammenhängenden Zeichenketten und den Zeilenumbruch zu wählen.

    SELECT  spalte1,spalte2,spalte3
    INTO OUTFILE '/tmp/clients.csv'
    FIELDS TERMINATED BY ';' 
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY '\\' 
    LINES TERMINATED BY '\n'
    FROM tabelle;
    

    Heraus kommt eine .csv-Datei, die ; als Feldtrenner, " als Textbegrenzer, \\ als Escape-Zeichen und \n als Zeichen für den Zeilenumbruch verwendet. Alle Optionen können natürlich auch frei kombiniert werden.

  • Banana Pi headless

    Manchmal muss es eben kopflos sein. Wer will auch einen Bildschirm und eine Tastatur ständig rumliegen haben, damit er sie zur Einrichtung an den Banana Pi fummeln kann.

    Image herunterladen & auf SD-Karte kopieren

    Das Image von bananapi.com herunterladen und anschliessend mit folgendem Kommando auf eine 8GB SD-Karte schreiben:

    dd if=/pfad/zum.img of=/dev/mmcblk0 bs=4M
    

    Das kann eine Weile dauern. In der Zwischenzeit mal nebenbei die Konfiguration des NetworkManagers fuer das lokale WLAN aus dem eigenen System sichern

    cp /etc/NetworkManager/system-connections/FritzRocks7490 /tmp
    

    und dann folgende Zeile anpassen.

    mac-address=YO:UR:MA:CC
    

    Die Adresse habe ich erhalten, indem ich den WLAN-Stick an meinen Rechner angeschlossen und in der Ausgabe von ip addr nach dem entsprechenden Adapter gesucht habe.

    Dateisystem aufblasen und Configs erstellen

    Nun sollte das Image fertig auf die SD-Karte geschrieben worden sein. Es sollten zwei Partitionen zu sehen sein. Die groessere Partition habe ich mit folgenden Kommandos bis auf 7,9GB aufgeblasen

    fdisk /dev/mmcblk0
    

    Dann d (delete) und Partition 2 auswählen. Anschliessend mit n eine neue primäre Partition erstellen und alle Vorschläge (Nummer, Start, Ende) annehmen. Dann mit w das neue Layout schreiben. Nun muss noch …