CIW: Wenn es rauscht und brummt
Ein Blick hinter die Kulissen unseres Podcasts Captain it's Wednesday. Wenn es rauscht, dann ist es echt. Eine Einladung zum Mitmachen.


Ein Blick hinter die Kulissen unseres Podcasts Captain it's Wednesday. Wenn es rauscht, dann ist es echt. Eine Einladung zum Mitmachen.


Ziemlich genau zwei Jahre nach Xfce 4.18 soll ab dem 15. Dezember der Nachfolger Xfce 4.20 erscheinen. Einer der Höhepunkte soll die initiale Unterstützung von Wayland sein.
Linux Mint 22.1 wird im Dezember, vermutlich kurz vor den Feiertagen, veröffentlicht. Vorher erscheint der Standard-Desktop Cinnamon 6.4 im überarbeiteten Design,
The Free Software Foundation Europe (FSFE) is celebrating Ada Lovelace Day on October 8 with a special event for its supporters: the global English premiere of the animated film 'Ada & Zangemann - A Tale of Software, Skateboards, and Raspberry Ice Cream'. Originally a highly successful illustrated book, now available in 10 languages and counting, the story has been adapted into a film and is licensed as an open educational resource.
Following the success of the illustrated book ‘Ada & Zangemann - A Tale of Software, Skateboards, and Raspberry Ice Cream’, the FSFE is now releasing the story as an animated movie. The book is currently available in 10 languages and has reached the hands of over 20,000 children worldwide and it was been spread through readings, discussions, and workshops.
The movie, available under a Creative Commons license, is about the famous and immensely rich inventor Zangemann and the girl Ada, a curious tinkerer. Ada begins to experiment with hardware and software and, due to Zangemann’s actions, realises how crucial technology is for her and others. It is a fascinating story for children from the age of 6 that will motivate them to tinker with hardware and software, and encourage them to actively shape their own technology.
The premiere of the English movie will take place on Ada Lovelace Day through a global online event. FSFE supporters, the donors who made this movie possible, and members of various Free Software associations will be present. Vint Cerf, often referred to as one of the "fathers of the Internet", and Franziska Heine, Executive Director of Wikimedia Germany, will give special speeches during the event.
At the end of the event, the film will be published on the FSFE's website and made available to the public under the Creative Commons By Share-Alike Licence, as an Open Education Resource. During the next months the FSFE will release other language version of the movie on https://ada.fsfe.org/movie.
Ada Lovelace Day is held every year on the second Tuesday in October. Named after the mathematician and computer science pioneer Ada Lovelace, it aims to celebrate the achievements of women in science, technology, engineering and maths (STEM), to raise the profile of women in STEM, to encourage more girls to pursue STEM careers and to support women already working in STEM.
Folge 106 des CIW Podcasts.
Welchen Matrix-Client empfehlen wir?



Die erste Beta-Version von Thunderbird für Android liegt vor. Sie basiert auf dem Android E-Mail-Client K-9. Es wird spannend sein, zu sehen, ob Thunderbird diesen wesentlich verbessern kann.
Auf der Kielux fanden zwei Vorträge zum Thema FOSS und Schule/Bildung statt. Ein Hinweis.


Firefox 131 bringt eher kleine Verbesserungen, die teilweise die Sicherheit im Browser erhöhen. So können Berechtigungen für Webseiten jetzt temporär vergeben werden.
Fake-Services, die loggen, wenn jemand versucht einen Fake-Service zu nutzen.


Der aktuelle Entwicklungsstand samt angedachter Features für die Version 6.12 des Linux-Kernels ist in Form eines Release Candidates erschienen und bietet Ausblick auf die kommenden Funktionen des Betriebssystems. Echtzeit-Kernel, neue Hardware und Funktionen zeugen von großen Veränderungen.
Der IT-Service gehört zu den Hauptsäulen jedes Krankenhauses. Oder zumindest sollte es so sein, denn viele Häuser stehen noch immer vor der gewaltigen Aufgabe, ihre Abläufe zu modernisieren und zugleich die strengen Sicherheitsvorgaben als Teil der Kritischen Infrastruktur einzuhalten. Noch komplizierter wird es, wenn dies an zwei unabhängigen Standorten parallel geschehen und die IT zudem vereinheitlicht werden soll. Zwei Kliniken, eine in Rheinland-Pfalz, eine in Baden-Württemberg, haben sich dieser Herausforderung gestellt. Die passende Lösung dafür fanden sie in Sachsen.
Adfinis, ein führender, international tätiger Open-Source-Anbieter, und Element, ein anerkannter Dienstleister für sichere und dezentrale Echtzeit-Kommunikationslösungen, werden künftig kooperieren.
KI ist heute allgegenwärtig. So auch in der jetzt im Handel verfügbaren Kamera für den Raspberry Pi, die auf dem Sony IMX500 Intelligent Vision Sensor basiert.
Hörbücher sind eine entspannte Art, um Literatur, Belletristik oder Sachbücher zu genießen. Mit Audiobookshelf gerät auch die selbst-gehostete Verwaltung zum Vergnügen.
StarLab vertreibt ein elegantes Linux-Tablet mit Stiftunterstützung, welches ich für den Unterricht verwenden möchte. Ich teile meine ersten Erfahrungen und Tipps.


Dieser Artikel gibt meine Motivation für den Bau von Container-Images und die Vorgehensweise wieder und zeigt, wie ich mit Buildah meine OCI-kompatiblen Container-Images erstelle.
Es handelt sich dabei mehr um einen Erfahrungsbericht als ein Tutorial und ich erhebe keinen Anspruch auf Vollständigkeit. Das behandelte Beispiel ist jedoch zum Einstieg und zur Nachahmung für all jene geeignet, die Container ausführen können und diese gerne ohne Verwendung von Containerfiles bauen möchten.
Ich möchte die Ansible-Rollen aus meiner Collection tronde.nextcloud mit Molecule und Podman-Containern testen. Als Zielplattform für das Deployment der Nextcloud unterstütze ich zunächst Debian und RHEL.
Die Tests sollen verifizieren, dass Nextcloud im Container in einer rootless-Podman-Umgebung bereitgestellt werden kann. Da der Test unter Verwendung von Podman-Containern durchgeführt werden soll, müssen diese Container eine solche rootless-Podman-Umgebung bereitstellen.
Für RHEL 8 und RHEL 9 habe ich entsprechende Container-Images gefunden. Für Debian bin ich nicht fündig geworden und habe daher beschlossen, diese Container-Images selbst zu erstellen.
Buildah ist das Werkzeug meiner Wahl, da:
containerfile(5) benötigt undFür mich sind dies ausreichend Gründe, um mich kopfüber in ein neues Container-Projekt zu stürzen. Wer mehr über die Beziehung von Buildah zu Podman erfahren möchte, dem empfehle ich den englischsprachigen Artikel: Buildah and Podman Relationship von Tom Sweeney.
Um rootless Podman in einem Container zum Laufen zu bekommen, habe ich mich an dem englischsprachigen Artikel How to use Podman inside of a container von Dan Walsh orientiert. Das Ergebnis findet ihr in meinem GitHub-Repo tronde/container-image-forge.
Die folgenden Code-Blöcke zeigen Auszüge aus dem Skript buildah_create_debian_bookworm_with_rootless_podman.sh (Commit 7634ed8). Die enthaltenen Befehle werden unter dem jeweiligen Code-Block erläutert. Alle Befehle werden als normaler Benutzer ohne Root-Rechte ausgeführt.
# Name of target container image
tctri=debian_rootless_podman
# Get a base image
ctr=$(buildah from --pull=newer docker://docker.io/library/debian:bookworm)
tctri nimmt den Namen des Container-Images auf, welches ich erzeugen werdectr nimmt den Namen des Containers auf, welcher durch den buildah-from(1)-Befehl erzeugt wird; mit diesem Container wird im Folgenden gearbeitet--pull=newer sorgt dafür, dass das Image nur dann aus der angegebenen Registry heruntergeladen wird, wenn es aktueller als das evtl. lokal gespeicherte Image istbuildah run -- $ctr apt -y update
buildah run -- $ctr apt -y upgrade
buildah run -- $ctr apt -y install podman fuse-overlayfs libvshadow-utils libcap2-bin ca-certificates
buildah-run(1) werden Befehle innerhalb des Arbeits-Containers ausgeführtca-certificates wird benötigt, um später Container-Images aus einer Registry herunterladen zu könnenbuildah run -- $ctr useradd podman
buildah run -- $ctr sh -c "echo podman:1:999 > /etc/subuid"
buildah run -- $ctr sh -c "echo podman:1001:64535 >> /etc/subuid"
buildah run -- $ctr sh -c "echo podman:1:999 > /etc/subgid"
buildah run -- $ctr sh -c "echo podman:1001:64535 >> /etc/subgid"
buildah run -- $ctr setcap cap_setuid+epi /usr/bin/newuidmap
buildah run -- $ctr setcap cap_setgid+epi /usr/bin/newgidmap
podman erstellt/etc/sub[g,u]id habe ich mir aus dem ubi9/podman-Image abgeschautsetcap-Befehle sind notwendig, um rootless Podman ausführen zu können; ich habe sie durch Internetrecherche und Trial-and-Error zusammengestelltbuildah config -v /var/lib/containers $ctr
buildah config -v /home/podman/.local/share/containers $ctr
/var/lib/containers/home/podman/.local/share/containersbuildah run -- $ctr chown -R podman:podman /home/podman
buildah run -- $ctr sh -c "mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers /var/lib/shared/vfs-images /var/lib/shared/vfs-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock; touch /var/lib/shared/vfs-images/images.lock; touch /var/lib/shared/vfs-layers/layers.lock"
buildah config --env _CONTAINERS_USERNS_CONFIGURED="" $ctr
podman bekommt ein HOME-Verzeichnisbuildah run -- $ctr apt -y reinstall uidmap
buildah run -- $ctr apt -y clean
buildah run -- $ctr rm -rf /var/lib/apt/lists/*
uidmap neu installiert werden, um ein UID/GID-Mapping sicherzustellen; dies scheint analog zur Neuinstallation der shadow-utils in Artikel [7] notwendig zu sein# Commit to an image
buildah commit --rm $ctr $tctri
# Alternative: Use this and add GPG fingerprint for image signing
# buildah commit --sign-by <fingerprint> --rm $ctr $tctri
# Tag the image just created
buildah tag $tctri $tctri:bookworm-$(date --iso)
buildah-commit(1) wird der Inhalt des Arbeits-Containers $ctr in ein Container-Image namens $tctri geschrieben--rm wird der Arbeits-Container entferntbuildah-tag(1) fügt dem Image einen Tag mit Datumsstempel hinzu; siehe auch: Recommendations for tagging and versioning container imagesDer Befehl buildah-commit(1) fügt dem neuen Image übrigens nur einen weiteren Layer hinzu, egal wie viele Befehle zuvor im Arbeits-Container ausgeführt wurden. Das erzeugte Image umfasst also die Layer des Basis-Image plus einen weiteren.
An diesem Punkt habe ich ein Basis-Image ausgewählt, mithilfe von buildah zusätzliche Software installiert, einen Benutzer hinzugefügt und ein neues Image erzeugt.
Um den Build-Prozess zu automatisieren, habe ich die notwendigen Befehle in Bash-Skripte geschrieben und unter https://github.com/Tronde/container-image-forge abgelegt.
Die fertigen Images halte ich in der Registry https://quay.io/repository/rhn-support-jkastnin/debian_rootless_podman vor. Fühlt euch frei, diese für eigene Experimente zu benutzen, doch verwendet sie nur mit Vorsicht in Produktion. Ich erzeuge diese Images nur nach Bedarf neu, so dass die veröffentlichen Versionen veraltet und voller Sicherheitslücken sein können.
Jetzt, wo die Images fertig sind, kann ich prüfen, ob sich rootless Podman darin auch wie gewünscht ausführen lässt.
Die Prozesse innerhalb des von meinem Container-Image instanziierten Containers laufen als Benutzer root. Um die Prozesse als Benutzer podman auszuführen, ist dies beim Aufruf von podman run explizit mit anzugeben. Der folgende Code-Block verdeutlicht dies und zeigt zugleich den ersten Fehler beim Versuch rootless Podman auszuführen.
]$ podman run --rm localhost/debian_rootless_podman:bookworm-2024-09-21 id
uid=0(root) gid=0(root) groups=0(root)
]$ podman run --rm --user podman localhost/debian_rootless_podman:bookworm-2024-09-21 id
uid=1000(podman) gid=1000(podman) groups=1000(podman)
]$ podman run --rm --security-opt label=disable --user podman --device /dev/fuse localhost/debian_rootless_podman:bookworm-2024-09-21 podman info
time="2024-09-21T18:43:35Z" level=error msg="running `/usr/bin/newuidmap 15 0 1000 1 1 1 999 1000 1001 64535`: newuidmap: write to uid_map failed: Operation not permitted\n"
Error: cannot set up namespace using "/usr/bin/newuidmap": exit status 1
Der Fehler deutet auf fehlende capabilities(7) hin. Um diese Hypothese zu testen, wiederhole ich den letzten Befehl mit der Option --privileged (siehe dazu podman-run(1)):
]$ podman run --rm --security-opt label=disable --user podman --device /dev/fuse --privileged localhost/debian_rootless_podman:bookworm-2024-09-21 podman info
host:
…
Damit funktioniert es. Leider geben sich viele Menschen an dieser Stelle mit dem Ergebnis zufrieden. Doch ich möchte diese Container nicht einfach mit --privileged ausführen. Also studiere ich die Manpage capabilities(7) und teste mich Stück für Stück heran, bis ich mit dem folgenden Kommando ebenfalls erfolgreich bin:
]$ podman run --rm --user podman --security-opt label=disable --device /dev/fuse --cap-add=setuid,setgid,sys_admin,chown localhost/debian_rootless_podman:bookworm-2024-09-21 podman info
host:
…
Dies ist schon deutlich besser, da dem Container hiermit deutlich weniger Privilegien eingeräumt werden müssen. Das Thema Container-Privilegien und capabilities(7) werde ich noch genauer untersuchen. Eventuell folgt dazu dann auch ein weiterer Artikel. Für den Moment ist das Ergebnis gut genug.
In dieser Woche gab es Neuerungen beim COSMIC Desktop, Fractal, und einiges mehr.


CachyOS ist eine auf Arch Linux basierte Distribution. Im Gegensatz zum Vorbild, werden Bestandteile des Betriebssystems eigens kompiliert und hierfür Optimierungen moderner x86-Prozessoren umgesetzt. Dadurch kann ein System auf gleicher Hardware schneller laufen, insbesondere native Software und Spiele.
Nicht immer lässt sich zeitnah über jede Neuigkeit rund um das freie Betriebssystem berichten, manche Ereignisse sind es aber dennoch wert, Erwähnung zu finden. In dieser Zusammenfassung überblickt die Redaktion alle wichtigen Meldungen aus der Linux-Welt der vorangegangenen Woche.
Die letzten wichtigen verbleibenden Bausteine für den Realtime-Support für Linux wurden in den Mainline-Zweig aufgenommen. Das bedeutet, dass Linux 6.12 voraussichtlich in einem echtzeitfähigen Modus betrieben werden kann, wenn der Kernel entsprechend kompiliert wird.
Echtzeitfähigkeit wird insbesondere in Embedded-Szenarien benötigt, wenn auf eine Eingabe innerhalb einer vorhersagbaren Zeit eine Antwort erwartet wird. Speziell in der Robotik, aber auch in der Multimediaproduktion gibt es solche Anforderungen. Dabei kommt es nicht darauf an, dass eine Aufgabe schnell abgearbeitet wird, sondern, dass sie in einer deterministischen Zeit begonnen wird.
An dieser Stelle mag sich die Frage stellen, was diese Echtzeitfähigkeit, von der hier geredet wird, überhaupt ist. Das lässt sich gut am Beispiel eines Line-following Robot klären. Was ein solcher Roboter tut, kann man sich z. B. in diesem YouTube-Video ansehen. Technisch besteht so ein Roboter aus zwei (oder mehr) Kameras als Sensoren, zwei Motoren für jeweils ein Rad als Aktoren und einem Controller zur Steuerung. Die Kameras sollen den Kontrast ermitteln, damit festgestellt werden kann, ob sie noch auf die schwarze Linie zeigen. Bemerkt eine der Kameras beim Fahren, dass sie den Sichtkontakt zur Linie aufgrund z. B. einer Kurve verliert, müssen die Motoren durch eine leichte Drehung nachsteuern, um auf der Linie zu bleiben.
Diese Kameras lösen üblicherweise entsprechend ihrer Abtastfrequenz auf dem Controller für die Steuerung einen Interrupt aus. Das führt zur Abarbeitung der Steuerungsroutine, die für beide Motoren die Geschwindigkeit berechnet, mit der sie sich drehen sollen.
Entscheidend ist, dass nicht beide Kameras den Sichtkontakt verlieren, damit der Roboter weiterhin weiß, in welche Richtung er nachsteuern muss. Üblicherweise wird das beim Testen funktionieren, aber es kann in bestimmten Randbedingungen bei normalen Betriebssystemen, wenn der Controller z. B. mit vielen anderen Aufgaben zufälligerweise beschäftigt ist, passieren, dass auf einmal nicht schnell genug die Routine aufgerufen wird. Der Roboter verliert dann den Sichtkontakt.
Der Entwickler eines solchen Roboters kann nun eine Echtzeitanforderung formulieren, dass z. B. auf ein Interrupt von den Kameras innerhalb von 1 Millisekunde reagiert werden muss. Er kann mit dieser Anforderung jetzt die maximale Geschwindigkeit des Roboters so wählen, dass der Roboter langsam genug fährt, um nicht die Linie – trotz der Latenz von im worst-case 1 Millisekunde – nicht zu verlieren.
Diese 1 Millisekunde muss aber auch vom Controller, seinem Betriebssystem und schließlich seinem Kernel garantiert werden. Der Kernel muss also in jeder Situation in der Lage sein, auf eine Anforderung innerhalb einer vorbestimmten Zeit zu reagieren. Unabhängig von der zwingenden Fähigkeit, präemptiv zu arbeiten, also jederzeit anderer Prozesse unterbrechen zu können, darf der Kernel auch nicht mit sich selber unvorhersehbar lange beschäftigt sein, wenn z. B. eine Synchronisation hängt.
Und genau hierum geht es beim grob gesagt beim PREEMPT_RT-Patch. Der Kernel muss so nachgebessert werden, dass keine Komponente sich unnötig lange aufhängt und somit die Abarbeitung von Aufgaben behindert, für die eine garantierte Ausführungszeit festgelegt wurde.
Die ursprüngliche Arbeit begann bereits im Jahr 2004 auf einem getrennten Zweig und hatte viele Verbesserungen in den Kernel gebracht, zuletzt an der printk()-Infrastruktur. Jetzt sollten die Arbeiten so weit sein, dass Realtime nicht mehr auf einem getrennten Zweig, sondern im Hauptzweig entwickelt werden kann.
Die Echtzeitfähigkeit gab es somit in speziell präparierten Kernels schon lange. Neu ist, dass der Code im Hauptzweig gepflegt wird und somit besser mit Änderungen anderer Maintainer abgestimmt werden kann. Denn eine Änderung an einer anderen Komponente reicht schon aus, um die Echtzeitfähigkeit zu unterminieren.
Linux echtzeitfähig zu machen, ist somit ein großer Aufwand gewesen, weil man solche Fähigkeiten oft nur in spezialisierten Betriebssystemen (sogenannten Real-time operating systems, RTOS) vorfindet. Insbesondere Thomas Gleixner und John Ogness haben hier große Anstrengungen unternommen. Jetzt, nach knapp 20 Jahren Arbeit, dürfte das Vorhaben einen wichtigen Meilenstein erreichen.
Wer sich für einen tieferen Einblick in die Linux-RT-Welt interessiert, kann einerseits den Artikel von Thomas Leemhuis auf Heise Online von letzter Woche lesen oder sich auf LWN durch das Artikelarchiv zu der Thematik arbeiten.