Lese-Ansicht

📚 Coding mit KI

Ein halbes Jahr lang haben wir zu dritt intensiv getestet:

  • Was ist möglich?
  • Was ist sinnvoll?
  • Welche Anwendungsfälle gibt es, die über das reine Erstellen von Code hinausgehen?
  • Wo liegen die Grenzen?
  • Was sind die Risken?
  • Ist der KI-Einsatz ethisch vertretbar?

Wir haben mit ChatGPT und Claude gearbeitet und deren Ergebnisse mit lokalen Sprachmodellen (via Ollama, GPT4All, Continue, Tabby) verglichen. Wir haben Llama, Mistral/Mixtral, CodeLlama, Starcoder, Gemma und andere »freie« Sprachmodelle ausprobiert. Wir haben nicht nur Pair Programming getestet, sondern haben die KI-Werkzeuge auch zum Debugging, Refactoring, Erstellen von Unit-Tests, Design von Datenbanken, Scripting sowie zur Administration eingesetzt. Dabei haben wir mit verschiedenen Prompt-Formulierungen experimentiert und geben dazu eine Menge Tipps.

Der nächste Schritt beim Coding mit KI sind semi-selbstständige Level-3-Tools. Also haben wir uns OpenHands und Aider angesehen und waren von letzterem ziemlich angetan. Wir haben die Grenzen aktueller Sprachmodelle mit Retrieval Augmented Generation (RAG) und Text-to-SQL verschoben. Wir haben Scripts entwickelt, die mit KI-APIs kommunizieren und automatisiert dutzende oder auch hunderte von Code-Dateien verarbeiten.

Kurz und gut: Wir haben uns das Thema »Coding mit KI« so gesamtheitlich wie möglich angesehen und teilen mit Ihnen unsere Erfahrungen. Die Quintessenz ist vielleicht ein wenig banal: Es kommt darauf an. In vielen Fällen haben wir sehr gute Ergebnisse erzielt. Oft sind wir aber auch an die Grenzen gestoßen — umso eher, je spezieller die Probleme, je exotischer die Programmiersprachen und je neuer die genutzten Sprach-Features/Frameworks/Bibliotheken sind.

Was bleibt, ist die Überzeugung, dass an KI-Tools in der Software-Entwicklung kein Weg vorbei geht. Wer KI-Tools richtig einsetzt, spart Zeit, kürzer lässt es sich nicht zusammenfassen. Aber wer sie falsch einsetzt, agiert unverantwortlich und produziert fehlerhaften und unwartbaren Code!

Mehr Details zum (Vorwort, Leseprobe) finden Sie hier.

  •  

Ubuntu 24.10

Eigentlich hatte ich nicht vorgehabt, über Ubuntu 24.10 zu schreiben. Es ist kein LTS-Release, dramatische Neuerungen gibt es auch nicht. Aber dann ergab sich überraschend die Notwendigkeit, eine native Ubuntu-Installation auf meinem Notebook (Lenovo P1 gen1) durchzuführen. Außerdem feiert Ubuntu den 20. Geburtstag.

Also habe ich doch ein paar Worte (gar nicht so wenige) zum neuesten Release geschrieben. Der Text ist launiger geworden als beabsichtigt. Er konzentriert sich ausschließlich auf die Desktop-Nutzung, also auf Ubuntu für Büro-, Admin- oder Entwicklerrechner. Der Artikel bringt auch ein wenig meinen Frust zum Ausdruck, den ich mit Linux am Desktop zunehmend verspüre.

Installation

Ich lebe normalerweise in einer weitgehend virtuellen Linux-Welt. Auf meinem Arbeits-Notebook läuft zwar Arch Linux, aber neue Distributionen teste ich meistens in virtuellen Maschinen, viele meiner Server-Installationen befinden sich in Cloud-Instanzen, die Software-Entwicklung erfolgt in Docker-Containern. Überall Linux, aber eben meist eine (oder zwei) virtuelle Schichten entfernt.

Insofern ist es wichtig, hin und wieder auch eine »echte« Installation durchzuführen. Testkandidat war in diesem Fall ein fünf Jahre altes Lenovo P1 Notebook mit Intel-CPU und NVIDIA-GPU. Ich wollte Ubuntu auf eine noch leere 2-TB-SSD installieren, dabei aber nur 400 GiB nutzen. (Auch ein paar andere Distributionen verdienen im nächsten Jahr ihre Chance in der realen Welt …)

Weil ich nicht die ganze SSD nutzen möchte, werde ich zur manuellen Partitionierung gezwungen. So weit, so gut, allerdings fehlen dort die LVM-Funktionen. Somit ist es für Laien unmöglich, Ubuntu verschlüsselt in ein Logical Volume zu installieren. (Profis können sich Ihr Setup mit parted, pvxxx, vgxxx, lvxxx und cryptsetup selbst zusammenbasteln. Ich habe das aber nicht getestet.)

Bei der manuellen Partitionierung ist es unmöglich, die EI-Partition an den Beginn der Partitionstabelle zu stellen. Die /-Partition wird mit ‚Windows Boot Manager‘ beschriftet, warum auch immer. Die zweite SSD enthält eine schon vorhandene Arch-Linux-Installation.

Noch ein Ärgernis der manuellen Partitionierung: Das Setup-Programm kümmert sich selbst darum, eine EFI-Partition einzurichten. Gut! Aber auf einer aktuell leeren Disk wird diese kleine Partition immer NACH den anderen Partitionen platziert. Mir wäre lieber gewesen, zuerst 2 GiB EFI, dann 400 GiB für /. Solange es keine weiteren Partitionen gibt, hätte ich so die Chance, die Größe von / nachträglich zu ändern. Fehlanzeige. Im Übrigen hat das Setup-Programm auch die von mir gewählte Größe für die EFI-Partition ignoriert. Ich wollte 2 GiB und habe diese Größe auch eingestellt (siehe Screenshot). Das Setup-Programm fand 1 GiB ausreichend und hat sich durchgesetzt.

Zusammenfassung der Installationseinstellungen

Für die meisten Linux-Anwender sind die obigen Anmerkungen nicht relevant. Wenn Sie Ubuntu einfach auf die ganze Disk installieren wollen (real oder in einer virtuellen Maschine), oder in den freien Platz, der neben Windows noch zur Verfügung steht, dann klappt ja alles bestens. Nur Sonderwünsche werden nicht erfüllt.

Letzte Anmerkung: Ich wollte auf dem gleichen Rechner kürzlich Windows 11 neu installieren. (Fragen Sie jetzt nicht, warum …) Um es kurz zu machen — ich bin gescheitert. Das Windows-11-Setup-Programm aus dem aktuellsten ISO-Image glänzt in moderner Windows-7-Optik. Es braucht anscheinend zusätzliche Treiber, damit es auf einem fünf Jahre alten Notebook auf die SSDs zugreifen kann. (?!) Mit der Hilfe von Google habe ich entdeckt, dass er wohl die Intel-RST-Treiber für die Intel-CPU des Rechners haben will. Die habe ich mir runtergeladen, auf einem anderen Windows-Rechner (wird selbstverständlich vorausgesetzt) ausgepackt, auf einen zweiten USB-Stick gegeben und dem Windows-Installer zum Fraß vorgeworfen. Aber es half nichts. Die Treiber wären angeblich inkompatibel zu meiner Hardware. Ich habe fünf Stunden alles Mögliche probiert, das Internet und KI-Tools befragt, diverse Treiber von allen möglichen Seiten heruntergeladen. Aussichtslos. Ich habe mir dann von Lenovo ein Recovery-Image (Windows 10, aber egal) für mein Notebook besorgt. Es bleibt bei der Partitionierung in einem Endlos-Reboot hängen. Vielleicht, weil vor fünf Jahren 2-TB-SSDs unüblich waren? Also: Wer immer (mich selbst eingeschlossen) darüber jammert, wie schwierig eine Linux-Installation doch sei, hat noch nie versucht, Windows auf realer Hardware zu installieren. (Ich weiß, in virtuellen Maschinen klappt es besser.) Jammern über Einschränkungen bei der Ubuntu-Installation ist Jammern auf hohen Niveau. Der Ubuntu-Installer funktioniert ca. 100 Mal besser als der von Windows 11!

Das App Center

Obwohl ich bekanntermaßen kein großer Snap-Fan bin, habe ich mich entschieden, Ubuntu zur Abwechslung einmal so zu verwenden, wie es von seinen Entwicklern vorgesehen ist. Ich habe daher einige für mich relevante Desktop-Programme aus dem App Center in Form von Snap-Paketen installiert (unter anderem eine Vorabversion von Gimp 3.0, VS Code, den Nextcloud Client und LibreOffice). Auf den Speicherverbrauch habe ich nicht geschaut, Platz auf der SSD und im RAM ist ja genug.

Das Ubuntu App Center stellt ausschließlich Snap-Pakete von snapcraft.io zur Auswahl

Grundsätzlich hat vieles funktioniert, aber gemessen daran, wie lange es nun schon Snaps gibt, stören immer noch erstaunlich viele Kleinigkeiten:

  • Im Nextcloud-Client hatte ich im ersten Versuch Probleme bei der Verzeichnisauswahl. Diese folgte relativ zum Snap-Installationsverzeichnis statt relativ zu meinem Home-Verzeichnis. In der Folge scheiterte die Synchronisation wegen fehlender Schreibrechte. Das ließ sich relativ schnell beheben, hätte bei Einsteigern aber sicher einiges an Verwirrung verursacht. Noch ein Problem: Der Nextcloud wird NICHT automatisch beim Login gestartet, obwohl die entsprechende Option in den Nextcloud-Einstellungen gesetzt ist. Das muss manuell behoben werden (am einfachsten in gnome-tweaks alias Optimierungen im Tab Startprogramme).
Damit der Nextcloud-Client automatisch startet, nehmen Sie am besten »gnome-tweaks« (Optimierungen) zu Hilfe
  • Der Versuch, LibreOffice nach der Installation aus dem Ubuntu Store zu starten (Button Öffnen), führt direkt in den LibreOffice-Datenbank-Assistenten?! Weil ich keine Datenbank einrichten will, breche ich ab — damit endet LibreOffice wieder. Ich habe LibreOffice dann über das Startmenü (ehemals ‚Anwendungen‘) gestartet — funktioniert. Warum nicht gleich? Das nächste Problem tritt auf, sobald ich eine Datei öffnen möchte. Im Dateiauswahldialog drücke ich auf Persönlicher Ordner — aber der ist leer! Warum? Weil wieder alle Verzeichnisse (inkl. des Home-Verzeichnisses) relativ zum Snap-Installationsordner gelten. Meine Güte! Ja, ich kann mit etwas Mühe zu meinem wirklichen Home-Verzeichnis navigieren, aber so treibt man doch jeden Einsteiger zum Wahnsinn. Ab dem zweiten Start funktioniert es dann, d.h. LibreOffice nutzt standardmäßig mein ‚richtiges‘ Home-Verzeichnis.
Snap-Programme wissen nicht immer, wo ‚Home‘ ist.
  • Zwischendurch ist der App Center abgestürzt. Es kommt auch vor, dass das Programm plötzlich ohne ersichtlichen Grund einen CPU-Core zu 100 % nutzt. Das Programm beenden hilft.
  • Updates des App Center (selbst ein Snap-Paket), während dieser läuft, sind weiter unmöglich.

Es gibt auch gute Nachrichten: Ein Klick auf ein heruntergeladenes Debian-Paket öffnet das App Center, und dieses kann nun tatsächlich das Debian-Paket installieren. (Es warnt langatmig, wie unsicher die Installation von Paketen unbekannter Herkunft ist, aber gut. In gewisser Weise stimmt das ja.)

Nicht nur dass, wenn Sie den Suchfilter korrekt einstellen, können Sie im App Center sogar nach Debian-Paketen suchen und direkt installieren. Ganz intuitiv ist das nicht, aber es ist ein Fortschritt.

Sie können im App Center nun auch nach Debian-Paketen suchen

NVIDIA und Wayland

Ubuntu 24.10 ist die erste Ubuntu-Version, bei der meine NVIDIA-Grafikkarte out of the box nahezu ohne Einschränkungen funktioniert. Ich habe während der Installation darum gebeten, auch proprietäre Treiber zu installieren. Beim ersten Start werden dementsprechend die NVIDIA-Treiber geladen. Ab dem ersten Login ist tatsächlich Wayland aktiv und nicht wie (bei meiner Hardware in der Vergangenheit) X.org.

Die Installation proprietärer Treiber (inkl. NVIDIA) während der Installation ist ein Kinderspiel.
NVIDIA und Wayland kooperieren

Ich habe eine Weile in mit den Anzeige-Einstellungen gespielt: Zwei Monitore in unterschiedlichen Varianten, fraktionelle Skalierung (unscharf, aber prinzipiell OK) usw. Obwohl ich mir Mühe gegeben habe, das Gegenteil zu erreichen: Es hat wirklich jedes Monitor-Setup funktioniert. Ich würde das durchaus als Meilenstein bezeichnen. (Your milage may vary, wie es im Englischen so schön heißt. Alte Hardware ist beim Zusammenspiel mit Linux oft ein Vorteil.)

Na ja, fast alles: Ich war dann so übermütig und habe das System in den Bereitschaftsmodus versetzt. Am nächsten Tag wollte ich mich wieder anmelden. Soweit ich erkennen konnte, ist der Rechner gelaufen (die ganze Nacht??), er reagierte auf jeden Fall auf ping. (Ich war so leichtsinnig und hatte noch keinen SSH-Server installiert. Großer Fehler!) Auf jeden Fall blieben sowohl das Notebook-Display als auch der angeschlossene Monitor schwarz. Ich konnte drücken, wohin ich wollte, den Display-Deckel auf und zu machen, das HDMI-Kabel lösen und wieder anstecken — aussichtslos. Einzige Lösung: brutaler Neustart (Power-Knopf fünf Sekunden lang drücken). Und ich hatte schon gedacht, es wäre ein Wunder passiert …

Und noch ein kleines Detail: Drag&Drop-Operationen zicken (z.B. von Nautilus nach Chrome, Bilder in die WordPress-Mediathek oder Dateien in die Weboberfläche von Nextcloud oder Moodle hochladen). Das ist seit fünf Jahren ein Wayland-Problem. Es funktioniert oft, aber eben nicht immer.

Ubuntu Dock

Das Ubuntu-Dock wird durch eine Ubuntu-eigene Gnome Shell Extension realisiert, die im Wesentlichen Dash to Dock entspricht. (Tatsächlich handelt es sich um einen Klon/Fork dieser Erweiterung.)

In den Gnome-Einstellungen unter Ubuntu-Schreibtisch können allerdings nur rudimentäre Einstellungen dieser Erweiterung verändert werden. Das ist schade, weil es ja viel mehr Funktionen gibt. Einige davon (per Mausrad durch die Fenster wechseln, per Mausklick Fenster ein- und wieder ausblenden) sind aus meiner Sicht essentiell.

Um an die restlichen Einstellungen heranzukommen, müssen Sie das vorinstallierten Programm Erweiterungen starten. Von dort gelangen Sie in den vollständigen Einstellungsdialog der Erweiterung.

Der Weg in den erweiterten Einstellungsdialog für das Ubuntu Dock

20 Jahre Ubuntu

Ubuntu hat den Linux-Desktop nicht zum erhofften Durchbruch verholfen, aber Ubuntu und Canonical haben den Linux-Desktop auf jeden Fall deutlich besser gemacht. Geld ist mit dem Linux-Desktop wohl keines zu verdienen, das hat auch Canonical erkannt. Umso höher muss man es der Firma anrechnen, dass sie sich nicht ausschließlich den Themen Server, Cloud und IoT zuwendet, sondern weiter Geld in die Desktop-Entwicklung steckt.

Die Linux-Community hat Ubuntu und Canonical viel zu verdanken. Und so schließe ich mich diversen Glückwünschen aus dem Netz an und gratuliere Ubuntu ganz herzlich zum 20-jährigen Jubiläum. »Wir hätten dich sonst sehr vermisst«, heißt es in manchen Geburtstagsliedern. Wie sehr trifft das auf Ubuntu zu!

Fazit

Linux im Allgemeinen, Ubuntu im Speziellen funktioniert als Desktop-System gut, zu 90%, vielleicht sogar zu 95%. Seit Jahren, eigentlich schon seit Jahrzehnten. Na ja, zumindest seit einem Jahrzehnt.

Aber die fehlenden paar Prozent — an denen scheint sich nichts zu ändern. Und das ist schade, weil es ja so dringend eine Alternative zum goldenen Käfig (macOS) bzw. dem heillosen Chaos (Windows, bloatware included TM) bräuchte.

Profis können sich mit Linux als Desktop-System arrangieren und profitieren von den vielen Freiheiten, die damit verbunden sind. Aber es fällt mir seit Jahren immer schwerer, Linux außerhalb dieses Segments zu empfehlen.

Linux hält unsere (IT-)Welt server-seitig am Laufen. Praktisch jeder Mensch, der einen Computer oder ein Smartphone verwendet, nutzt täglich Dienste, die Linux-Server zur Verfügung stellen. Warum ist der kleine Schritt, um Linux am Desktop zum Durchbruch zu verhelfen, offenbar zu groß für die Menschheit (oder die Linux-Entwicklergemeinde)?

Links/Quellen

  •  

Ubuntu 24.04 mit UTM unter macOS ausführen

Vielleicht wollen oder können Sie Ubuntu nicht direkt auf Ihr Notebook oder Ihren PC installieren. Dennoch interessieren Sie sich für Linux oder brauchen eine Installation für Schule, Studium oder Software-Entwicklung. Diese Artikelserie fasst drei Wege zusammen, Ubuntu 24.04 virtuell zu nutzen:

  • Teil I: im Windows Subsystem for Linux (WSL)
  • Teil II: mit VirtualBox (Windows mit Intel/AMD-CPU)
  • Teil III (dieser Text): mit UTM (macOS ARM)

In diesem Artikel gehe ich davon aus, dass Sie einen Mac mit ARM-CPU (M1, M2 usw.) verwenden. Für ältere Modelle mit Intel-CPUs gelten z.T. andere Details, auf die ich hier nicht eingehe. Insbesondere müssen Sie dann eine ISO-Datei für x86-kompatible CPUs verwenden, anstatt, wie hier beschrieben, eine ARM-ISO-Datei!

Virtualisierungssysteme für macOS ARM

Sie haben die Wahl:

  • Parallels Desktop: gut, aber wegen jährlicher Update-Pflicht sehr teuer
  • VMWare Fusion: kostenlos (for personal use), aber gut versteckter Download (erfordert vorher Registrierung bei Broadcom, danach lange Suche), verwirrende Bedienung, unklare Zukunft

  • UTM: Open-Source-Programm, kostenloser Download oder 10 EUR über App Store (einziger Unterschied: automatische Updates)

  • VirtualBox: kostenlos, aber aktuell erst als Beta-Version verfügbar und extrem langsam

Ich konzentriere mich hier auf UTM, der aus meiner Sicht überzeugendsten Lösung.

UTM

UTM ist ein Open-Source-Programm, das nur als Schnittstelle zu zwei Virtualisierungssystemen dient: dem aus der Linux-Welt bekannten QEMU-System sowie dem Apple Hypervisor Virtualization Framework (integraler Bestandteil von macOS seit Version 13, also seit Herbst 2022). UTM ist also lediglich eine grafische Oberfläche und delegiert die eigentliche Virtualisierung an etablierte Frameworks.

Sie können UTM um ca. 10 EUR im App Store kaufen und so die UTM-Entwickler ein wenig unterstützen, oder das Programm kostenlos von https://mac.getutm.app/ herunterladen und (vollkommen unkompliziert!) selbst installieren.

Sodann können Sie mit UTM virtuelle Maschinen mit Linux, Windows und macOS ausführen. Ich behandle hier ausschließlich Linux.

QEMU oder Apple Virtualization?

Wenn Sie in UTM eine neue virtuelle Maschine für Linux einrichten, haben Sie die Wahl zwischen zwei Virtualisierungssystemen: QEMU und Apple Virtualization. Welches ist besser?

  • Die QEMU-Variante bietet viel mehr Konfigurationsmöglichkeiten rund um die Netzwerkeinbindung und das Grafiksystem. Allerdings braucht die virtuelle Maschine doppelt so viel RAM wie vorgesehen: Wenn Sie eine VM mit 4 GB RAM einrichten, gehen beim Betrieb 8 GB RAM im macOS-Arbeitsspeicher verloren! macOS ist gut dabei, ungenutzte RAM-Teile zu komprimieren oder auszulagern, dennoch ist diese RAM-Verschwendung Wahnsinn. (Das gleiche Problem habe ich übrigens auch bei Tests mit VMWare Fusion festgestellt.)
  • Bei Apple Virtualization funktioniert die Speicherverwaltung, d.h. eine virtuelle Maschine mit 4 GB RAM braucht tatsächlich nur 4 GB RAM. (Das sollte ja eigentlich selbstverständlich sein …) Dafür haben Sie bei der Netzwerkkonfiguration kaum Wahlmöglichkeiten. Die VMs werden immer über eine Netzwerkbrücke in das lokale Netzwerk integriert. Es gibt zwar zwei Optionen, Gemeinsames Netzwerk und Bridge-Modus. Soweit ich es nachvollziehen kann, reduziert Gemeinsames Netzwerk nur die Optionen für den Bridge-Modus, ändert aber daran nichts. Das Apple Virtualization Framework würde auch NAT unterstützen, aber UTM stellt diese Option nicht zur Wahl.

In der Oberfläche von UTM wird die Verwendung von Apple Virtualization als experimentell bezeichnet. Ich habe bei meinen Tests leider mit beiden Frameworks gelegentliche Abstürze von virtuellen Maschinen erlebt. Ich würde beide Frameworks als gleichermaßen stabil betrachten (oder auch instabil, je nach Sichtweise; unter Linux mit QEMU/KVM sind mir Abstürze unbekannt). Persönlich verwende ich, vor allem um RAM zu sparen, für neue VMs nur mehr die Apple Virtualization. Glücklicherweise passt der Bridge Modus gut zu meinen Netzwerkanforderungen.

Wenn Sie VMs mit macOS oder Windows erstellen, entfällt die Wahlmöglichkeit. Windows VMs können nur durch QEMU ausgeführt werden, macOS VMs nur mit dem Apple Virtualization Framework.

Ubuntu installieren

Die erste Hürde hin zur Ubuntu-Installation besteht darin, ein ARM-ISO-Image zu finden. Auf den üblichen Download-Seiten finden Sie nur die x86-Variante von Ubuntu Desktop. Es gibt aber sehr wohl ein ARM-Image! Es ist auf der Website cdimage.ubuntu.com versteckt (noble-desktop-arm64.iso):

https://cdimage.ubuntu.com/noble/daily-live/current

In UTM klicken Sie auf den Plus-Button, um eine neue virtuelle Maschine einzurichten. Danach wählen Sie die folgenden Optionen:

  • Virtualisieren
  • Linux
  • Option Use Apple Virtualiuation, Button Durchsuchen, um die ISO-Datei (das Boot-ISO-Abbild) auszuwählen
  • Speicher: 4 GB ist zumeist eine sinnvolle Einstellung
  • Prozessorkerne: ich verwende zumeist 2, die Einstellung Standard ist auch OK
  • Datenspeicher (Größe des Disk-Images): nach Bedarf, 25 GB sind in meiner Erfahrung das Minimum
  • Freigegebener Ordner: sollte die Nutzung eines macOS-Verzeichnisses innerhalb der virtuellen Maschine ermöglichen, funktioniert meines Wissens aber nur, wenn die virtuelle Maschine selbst macOS ist
  • Zusammenfassung: hier geben Sie der virtuellen Maschine einen Namen
Setup der neuen virtuellen Maschine in UTM
Einstellung des Namens der virtuellen Maschine

Nachdem Sie alle Einstellungen gespeichert haben, starten Sie die virtuelle Maschine. Nach ca. 30 Sekunden sollte der Desktop mit dem Installationsprogramm erscheinen (erster Dialog: Welcome to Ubuntu). Falls das Installationsprogramm je nach Monitor auf einem riesigen Desktop winzig dargestellt wird, öffnen Sie rechts oben über das Panel-Menü die Einstellungen (Zahnrad-Icon), suchen das Dialogblatt Displays und wählen eine kleinere Bildschirmauflösung aus.

Im Installationsprogramm stellen Sie nun die gewünschte Sprache ein. Bei der Einstellung des Tastaturlayouts wählen Sie Deutsch und die Tastaturvariante Deutsch Macintosh, damit die Mac-Tastatur unter Ubuntu richtig funktioniert. Alle weiteren Einstellungen erfolgen wie bei einer Installation unter VirtualBox, siehe Ubuntu 24.04 in VirtualBox ausführen. Sie brauchen keine Software von Drittanbietern, können aber die Option Unterstützung für zusätzliche Medieformate aktivieren.

Ausführung des Ubuntu-Installationsprogramms

Nach Abschluss aller Setup-Dialoge dauert die Installation ca. fünf Minuten. Da während der Installation manche Pakete aus dem Internet heruntergeladen werden, ist die Dauer der Installation auch von der Geschwindigkeit Ihres Internetzugangs abhängig.

Ubuntu nutzen

Nach dem ersten Neustart erscheint der Ubuntu-Desktop. Wieder kann es je nach Monitor passieren, dass die Grafikauflösung in der virtuellen Maschine zu groß ist. Öffnen Sie das Programm Einstellungen, dort das Dialogblatt Anzeigegeräte und stellen Sie eine passende Auflösung ein. Im Unterschied zu anderen Virtualisierungsprogramme ändert sich die Auflösung nicht automatisch, wenn Sie das UTM-Fenster verändern. Stattdessen wird der im Fenster angezeigte Inhalt skaliert.

Damit sich die Maus in der virtuellen Maschine wie unter macOS verhält, aktivieren Sie in Einstellungen/Maus und Tastfeld die Option Natürliche Rollrichtung.

Um Text zwischen macOS und Ubuntu auszutauschen, können Sie die Zwischenablage verwenden. Dazu muss weder zusätzliche Software installiert noch irgendeine Konfiguration verändert werden.

Zum Austausch von Dateien verwenden Sie am einfachsten scp.

Ubuntu 24.04 (ARM) läuft unter macOS

Speicherort der virtuellen Maschinen

UTM speichert die virtuellen Maschinen im Verzeichnis Library/Containers/com.utmapp.UTM. In der Regel ist es nicht zweckmäßig, die riesigen Image-Dateien in das TimeMachine-Backup mit aufzunehmen. Fügen Sie daher bei den TimeMachine-Einstellungen eine entsprechende Regel hinzu.

Quellen/Links

  •  

Ubuntu 24.04 in VirtualBox ausführen

Vielleicht wollen oder können Sie Ubuntu nicht direkt auf Ihr Notebook oder Ihren PC installieren. Dennoch interessieren Sie sich für Linux oder brauchen eine Installation für Schule, Studium oder Software-Entwicklung. Diese Artikelserie fasst drei Wege zusammen, Ubuntu 24.04 virtuell zu nutzen:

  • Teil I: im Windows Subsystem for Linux (WSL)
  • Teil II (dieser Text): mit VirtualBox (Windows mit Intel/AMD)
  • Teil III: mit UTM (macOS ARM)

VirtualBox

VirtualBox war lange Zeit das dominierende Virtualisierungsprogramm für Privatanwender: kostenlos (wenn auch nicht vollständig Open Source), funktionell, relativ einfach zu bedienen und für alle drei relevanten Betriebssysteme verfügbar (Windows, macOS, Linux).

Diese Rolle ist zuletzt stark ins Wanken gekommen. Aus meiner Sicht gibt es drei gravierende Probleme:

  • VirtualBox unter Windows (mit x86-kompatiblen CPUs) litt in den vergangenen Jahren immer wieder unter massiven Stabilitätsproblemen. Möglicherweise wurde diese durch Inkompatibilitäten mit dem Microsoft-Hypervisor (Hyper-V) ausgelöst — wirklich schlüssig war es für mich nie. Wenn VirtualBox auf zehn Studenten-Notebooks mit Windows funktioniert, kann dieselbe Version auf dem elften Notebook Probleme bereiten, die nur schwer nachzuvollziehen sind.
  • Das zweite Problem besteht darin, dass VirtualBox Intel/AMD-CPUs voraussetzt. Zwar gibt es eine Beta-Version von VirtualBox für Macs mit M1/M2/…-CPU, diese ist aber noch unerträglich langsam. Für Windows oder Linux auf ARM-Hardware gibt es gar keine Angebote.

  • Schließlich hatte ich zuletzt immer wieder Schwierigkeiten mit den unzähligen Zusatzfunktionen von VirtualBox. Die Installation der Guest Tools hakt, das Grafiksystem zeigt Darstellungsfehler, die geteilten Verzeichnisse haben in der VM die falschen Zugriffsrechte usw. Weniger wäre mehr.

Aktuell gibt es mit dem ganz frischen Release von VirtualBox 7.1.0) noch ein Problem: Die Netzwerkgeschwindigkeit in den virtuellen Maschinen ist unerträglich langsam. Das Problem ist bekannt und wird hoffentlich demnächst behoben. Bis dahin empfehle ich Ihnen, mit Version 7.0.20 zu arbeiten. Ich habe die in diesem Artikel beschriebene Installation mit 7.1.0 durchgeführt (und damit auch die Screenshots erstellt), bin aber im Anschluss zurück auf die alte Version umgestiegen. Das Format der virtuellen Maschinen hat sich zum Glück nicht geändert. Ältere VirtualBox-Downloads finden Sie hier.

Wenn ich Sie bis jetzt nicht abgeschreckt habe, erläutere ich Ihnen im Folgenden die Installation von Ubuntu 24.04 in einer virtuellen Maschine, die in VirtualBox 7.0 unter Windows 11 (für Intel/AMD) läuft.

Ubuntu installieren

Zuerst müssen Sie VirtualBox installieren. Danach brauchen Sie zur Installation von Ubuntu das ISO-Image von Ubuntu, das Sie von der Ubuntu-Download-Seite herunterladen.

Als nächstes richten Sie in VirtualBox mit dem Button Neu eine neue virtuelle Maschine ein. Im ersten Blatt des Setup-Dialogs geben Sie der virtuellen Maschine einen Namen und wählen die ISO-Datei aus. VirtualBox erkennt selbst, dass die ISO-Datei Ubuntu enthält, und stellt Typ, Subtyp und Version selbst ein.

VirtualBox kann bei Ubuntu eine Unbeaufsichtigte Installation durchführen. Dazu geben Sie im folgenden Dialogblatt den Benutzernamen, das Passwort und den gewünschten Hostnamen an. Sie ersparen sich mit einer unbeaufsichtigten Installation die Bedienung des Ubuntu-Installationsprogramms. Allerdings hat diese Installationsvariante den Nachteil, dass Ubuntu nach der Installation englische Menüs anzeigt und ein englisches Tastaturlayout verwendet. Deswegen ist es aus meiner Sicht sinnvoll, die Option Unbeaufsichtigte Installation überspringen zu aktivieren.

Die unbeaufsichtigte Installation hat mehr Nach- als Vorteile

Im Dialogblatt Hardware sollten Sie der virtuellen Maschine zumindest 4 GB RAM und zwei CPU-Cores zuweisen. Die vorgeschlagenen 2 GB RAM sind definitiv zu wenig und führen dazu, dass nicht einmal der Start der virtuellen Maschine möglich ist!

Im Dialogblatt Festplatte stellen Sie ein, wie groß die virtuelle Disk sein soll. 25 GB ist aus meiner Sicht das Minimum, um Ubuntu ein wenig auszuprobieren. Je nach Verwendungszweck brauchen Sie aber natürlich mehr Speicherplatz.

Fertigstellen beendet den Dialog. Bevor Sie mit der Installation starten, sollten Sie nun mit Ändern noch zwei Einstellungen der virtuellen Maschine anpassen:

  • Allgemein/Erweitert/Gemeinsame Zwischenablage = bidirektional
  • Anzeige/Bildschirm/Grafikspeicher = mindestens 32 MB, ich empfehle das Maximum von 128 MB

Optionale Einstellungen für die virtuelle Maschine. Dem Grafiksystem sollten zumindest 32 MB RAM zur Verfügung stehen.

Ein Doppelklick auf das VM-Icon startet die virtuelle Maschine. Nach ca. einer halben Minute erscheint der Ubuntu-Desktop mit dem Installationsprogramm. Unter Umständen wird vorher im Textmodus die beunruhigende Fehlermeldung * vmwgfx seems to be running on an unsupported hypervisor* angezeigt. Zumindest bei meinen Tests startet das Grafiksystem wenig später dennoch fehlerfrei.

Im Installationsprogramm stellen Sie in den ersten Schritten die gewünschte Sprache und das Tastaturlayout ein. Sie geben an, dass Sie Ubuntu installieren (und nicht nur ausprobieren) möchten, und entscheiden sich für die interaktive Standard-Installation. (Wenn Sie gleich auch Gimp, LibreOffice usw. haben möchten, ist Vollständige Installation die bessere Wahl.)

Mit der »Standard-Installation« werden nur die wichtigsten Programme installiert. Weitere Software können Sie später installieren.

Im nächsten Dialogblatt haben Sie die Option, zusätzliche Treiber sowie Audio- und Video-Codecs zu installieren. Treiber brauchen Sie in der virtuellen Maschine keine, und die fehlenden Codecs können Sie gegebenenfalls später immer noch installieren (sudo apt install ubuntu-restricted-extras).

Im Dialogblatt Art der Installation geht es um die Partitionierung der virtuellen Disk sowie um das Einrichten der Dateisysteme für Ubuntu. Weil Sie Ubuntu in eine virtuelle Maschine installieren, müssen Sie keinerlei Rücksicht auf andere Betriebssysteme nehmen und können sich einfach für die Option Festplatte löschen und Ubuntu installieren entscheiden.

In virtuellen Maschinen ist eine manuelle Partitionierung des Datenträgers glücklicherweise überflüssig

Auf der nächsten Seite geben Sie Ihren Namen, den Hostname, den Account-Namen sowie das gewünschte Passwort an. Das nächste Dialogblatt betrifft die Zeitzone, die normalerweise automatisch korrekt eingestellt wird. Zuletzt werden die wichtigsten Einstellungen nochmals zusammengefasst. Installieren startet den Installations-Prozess, der je nach Rechnergeschwindigkeit einige Minuten dauert.

Personalisierung der Installation

Ubuntu nutzen

Nach Abschluss der Installation starten Sie die virtuelle Maschine neu und können Ubuntu dann beinahe wie bei einer realen Installation nutzen. Die Auflösung der virtuellen Maschine ändern Sie unkompliziert innerhalb von Ubuntu im Programm Einstellungen, Modul Anzeigegeräte. Wenn Sie einen hochauflösenden Bildschirm verwenden, kann es außerdem zweckmäßig sein, den skalierten Modus zu aktivieren (Anzeige / Skalierter Modus im Menü des Fensters der virtuellen Maschine).

Die virtuelle Maschine verwendet Wayland als Grafiksystem

Installation der VirtualBox-Gasterweiterungen

Um den Datenaustausch zwischen Windows und Ubuntu zu erleichtern, können Sie die VirtualBox-Gasterweiterungen installieren. Dazu sind zwei Schritte erforderlich:

Zuerst führen Sie im Fenster der virtuellen Maschine Geräte / Gasterweiterungen einlegen aus.

Anschließend geben Sie in einem Terminalfenster die folgenden Kommandos ein:

sudo apt update
sudo apt install build-essential
sudo /media/<accountname>/VBox_GAs_nnn/VBoxLinuxAdditions-arm64.run

Sie gewinnen damit die folgenden Features:

  • Die Auflösung des Grafiksystems von Ubuntu wird automatisch an die Größe des Fensters der virtuellen Maschine angepasst.
  • Sie können über die Zwischenablage Text zwischen Windows und Ubuntu austauschen. (Dazu muss außerdem der bidirektionale Modus der Zwischenablage aktiviert werden: im VM-Fenster mit Geräte / Gemeinsame Zwischenablage / Bidirektional.

  • Sie können über ein gemeinsames Verzeichnis Dateien zwischen Ubuntu und Windows austauschen (Konfiguration siehe unten).

Gemeinsames Verzeichnis zum Dateiaustausch einrichten

Um Dateien zwischen Ubuntu und Windows auszutauschen, richten Sie am besten ein gemeinsames Verzeichnis ein. Drei Schritte sind erforderlich:

  • Die VirtualBox-Gasterweiterungen sind erforderlich.
  • Im Menü des Fensters der virtuellen Maschine führen Sie Geräte / Gemeinsame Ordner / Gemeinsame Ordner aus und wählen ein Windows-Verzeichnis (es kann auch Ihr persönliches Verzeichnis sein). Aktivieren Sie die Optionen Automatisch einbinden und Permanent erzeugen.

  • Zuletzt müssen Sie in einem Terminal-Fenster in Ubuntu Ihren Account der vboxsf-Gruppe zuordnen:

sudo usermod -a -G vboxsf $USER

Damit das usermod-Kommando wirksam wird, müssen Sie die virtuelle Maschine neustarten. Sie finden das gemeinsame Verzeichnis danach direkt im Datei-Manager.

Gemeinsamen Ordner zum Dateiaustausch zwischen Windows und der virtuellen Maschine einrichten
Der gemeinsame Ordner wird im Dateimanager angezeigt. Wenn Sie darauf nicht zugreifen können, haben Sie »usermod« vergessen. Für Experten zeigt »findmnt« die Details des Mount-Verzeichnisses.

Netzwerkkonfiguration und SSH-Zugriff

Wenn ich auf Kommandoebene arbeite, bediene ich meine virtuellen Maschinen gerne über SSH. Unter Ubuntu muss dazu der SSH-Server installiert werden, was mit sudo apt install openssh-server rasch gelingt.

Das reicht aber noch nicht: VirtualBox gibt der virtuellen Maschine standardmäßig mittels Network Address Translation Zugriff auf die Netzwerkverbindung des Host-Computers. Die virtuelle Maschine ist aber im Netzwerk des Hosts unsichtbar, eine SSH-Verbindung ist unmöglich.

Es gibt zwei Auswege. Einer besteht darin, in den Netzwerkeinstellungen der virtuellen Maschine die Option Netzwerkbrücke zu aktivieren. Damit wird die virtuelle Maschine einfach zu einem Mitglied im lokalen Netzwerk. Zuhause funktioniert das gut (einfach ssh name@<ubuntu_hostname> ausführen), in öffentlichen WLANs dagegen leider nicht.

Die Alternative heißt Port-Weiterleitung. Dazu führen Sie im Fenster der virtuellen Maschine Geräte / Netzwerk / Netzwerk-Einstellungen aus, aktivieren das Tab Experte und klappen bei Adapter 1 den Bereich Erweitert aus und klicken auf Port-Weiterleitung. Nun richten Sie eine neue Regel ein, die Port 2222 des Hosts (127.0.0.1) mit Port 22 der virtuellen Maschine (10.0.2.15) verbindet.

Port-Weiterleitung zwischen Port 22 der virtuellen Maschine und Port 2222 des eigenen Rechners einrichten

Nachdem Sie die Einstellungen gespeichert haben (ein Neustart der virtuellen Maschine ist nicht notwendig), können Sie im Terminal von Windows mit dem folgenden Kommando eine SSH-Verbindung zur virtuelle Maschine herstellen:

ssh -p 2222 name@localhost

Wichtig ist dabei die Option -p 2222. ssh soll nicht wie üblich Port 22 verwenden, sondern eben Port 2222. Wichtig ist auch, dass Sie als Zieladresse localhost angeben. Aufgrund der Port-Weiterleitung landen Sie wunschgemäß in der virtuellen Maschine. Anstelle von name geben Sie Ihren Ubuntu-Account-Namen an.

Quellen/Links

  •  

Ubuntu 24.04 im Windows Subsystem for Linux (WSL)

Vielleicht wollen oder können Sie Ubuntu nicht direkt auf Ihr Notebook oder Ihren PC installieren. Dennoch interessieren Sie sich für Linux oder brauchen eine Installation für Schule, Studium oder Software-Entwicklung. Diese Artikelserie fasst drei Wege zusammen, Ubuntu 24.04 virtuell zu nutzen:

  • Teil I (dieser Text): im Windows Subsystem for Linux (WSL)
  • Teil II: mit VirtualBox (Windows mit Intel/AMD)
  • Teil III: mit UTM (macOS ARM): mit UTM (macOS ARM)

Windows Subsystem für Linux

Mit WSL hat Microsoft einen Weg geschaffen, Linux im Textmodus unkompliziert unter Windows auszuführen. Diese Variante ist dann empfehlenswert, wenn Sie unter Windows typische Linux-Werkzeuge (die Shell bash, Kommandos wie find und grep usw.) nutzen möchten oder wenn Sie ohne Docker oder virtuelle Maschinen Server-Dienste wie Apache, nginx etc. ausprobieren möchten.

Als erstes müssen Sie sicherstellen, dass im Konfigurationsprogramm Windows-Features aktivieren oder deaktivieren die Optionen Hyper-V und Windows-Subsystem für Linux aktiviert sind. Alternativ können Sie WSL auch im Microsoft Store installieren.

WSL aktivieren

Im zweiten Schritt gehen Sie in den Microsoft Store und suchen nach Ubuntu 24.04. (Passen Sie auf, dass Sie keine alte Version verwenden, die vorher gereiht ist.) Ubuntu 24.04 ist kostenlos. Der Installationsumfang ist mit 350 MByte für eine Linux-Distribution relativ klein. Sobald Sie Öffnen anklicken, erscheint ein Terminal-Fenster. Nach ein paar Sekunden müssen Sie einen Benutzernamen und ein Passwort angeben. Dieses Passwort brauchen Sie später, um administrative Arbeiten zu erledigen (z.B. sudo apt install xxx).

Erster Start von Ubuntu 24.04 unter WSL

In Zukunft können Sie Ubuntu 24.04 im Startmenü oder in der Auswahlliste des Terminal-Programms starten. Als ersten Schritt in der neuen Shell-Umgebung sollten Sie ein Update durchführen (also die Kommandos sudo apt update und sudo apt full-upgrade).

Innerhalb von Ubuntu können Sie über den Pfad /mnt/c auf das Windows-Dateisystem zugreifen. Umgekehrt finden Sie das Linux-Dateisystem im Explorer unter dem Eintrag Linux.

Zugriff auf das Linux-Dateisystem im Explorer

WSL ist für den Betrieb von Linux im Textmodus optimiert. Seit 2021 besteht mit WSLg aber prinzipiell die Möglichkeit, einzelne Programme im Grafikmodus zu installieren und auszuführen:

sudo apt install gnome-text-editor
gnome-text-editor &

Meine Erfahrungen mit diesem Feature waren aber nicht überragend. Wenn Sie Ubuntu als Desktop-System im Grafikmodus nutzen möchten, verwenden Sie dazu besser VirtualBox oder ein anderes Virtualisierungssystem.

WSL1, wenn Windows in einer virtuellen Maschine läuft

Aus technischer Sicht gibt es zwei ganz unterschiedliche Varianten von WSL. Standardmäßig kommt WSL2 zum Einsatz. Dabei wird der Linux-Kernel durch das Virtualisierungssystem Hyper-V ausgeführt. In manchen Situationen steht Hyper-V aber nicht zur Verfügung — z.B. wenn Windows selbst in einer virtuellen Maschine läuft (unter Linux oder macOS). In solchen Fällen ist WSL1 ein attraktiver Ausweg. Bei WSL1 kümmert sich ein ganzes Framework von Funktionen um die Kompatibilität zwischen Windows und Linux. WSL1 ist der technisch kompliziertere Weg, weil (fast) alle Linux-Grundfunktionen ohne Virtualisierung nachgebildet wurden.

Um Ubuntu 24.04 unter WSL1 auszuführen, führen Sie die folgenden Kommandos im Terminal aus:

wsl.exe --set-default-version 1
wsl.exe --install -d Ubuntu-24.04

WSL1 hat im Vergleich zu WSL2 einige Nachteile: langsameres I/O, älterer Kernel, keine Grafikfunktionen. Für viele Aufgaben — etwas zum Erlernen grundlegender Linux-Kommandos oder zur bash-Programmierung — funktioniert WSL1 aber genauso gut wie WSL2.

Der aus meiner Sicht größte Nachteil von WSL1 besteht darin, dass systemd nicht funktioniert. Hintergrunddienste wie cron stehen nicht zur Verfügung und können gar nicht oder nur über komplizierte Umwege genutzt werden. Ein wichtiger Teil dessen, was ein komplettes Linux-System ausmacht, fehlt.

Hier läuft Windows für ARM im Virtualisierungssystem UTM unter macOS. In der virtuellen Maschine ist wiederum Ubuntu 24.04 (auch für ARM) per WSL1 installiert.

Quellen und Links

  •  

GPIO-Ärger auf dem Raspberry Pi 5

(Aktualisiert 13.9.2024) Mit der Auslieferung des Raspberry Pi 5 im Herbst 2024 hat sich bei einigen Low-Level-Tools der GPIO-Zugriff geändert: Für die Modelle bis einschließlich Raspberry Pi 4 erfolgt der GPIO-Zugriff über chip0 bzw. /dev/gpiochip0. Beim Raspberry Pi musste dagegen chip4 bzw. /dev/gpiochip4 verwendet werden. Scripts, die universell auf alten und neuen Geräten laufen sollten, brauchten eine entsprechende Fallunterscheidung.

Mit Kernel 6.6.47, der mittlerweile standardmäßig als Update unter Raspberry Pi OS installiert wird, ändert sich wieder alles! Auch beim Raspberry Pi 5 muss nun /dev/gpiochip0 verwendet werden. Eine Referenz aller internen GPIO-Nummern gibt cat /sys/kernel/debug/gpio.

Die Änderung betrifft unter anderem:

  • Python: gpiozero, lgpio, gpiod
  • Bash: gpioset, gpioget
  • C: lgpio, libgpiod, wiringpi

Scripts, die mit diesen Modulen bzw. Bibliotheken verfasst wurden, müssen geändert werden (Umstellung von GPIO-Chip 4 auf GPIO-Chip 0). Im Folgenden habe ich diesbezüglich Anleitungen für diverse Fälle zusammengefasst.

13.9.2024: Mit dem neuesten Update von Raspberry Pi OS wird ein Link von /dev/gpiochip4 auf /dev/gpiochip0 eingerichtet, wodurch die Auswirkungen des veränderten Kernels in den meisten Fällen nicht mehr spürbar sind.

ls -l /dev/gpiochip*

crw-rw---- 1 root gpio 254,  0 13. Sep 08:39 /dev/gpiochip0
crw-rw---- 1 root gpio 254, 10 13. Sep 08:39 /dev/gpiochip10
crw-rw---- 1 root gpio 254, 11 13. Sep 08:39 /dev/gpiochip11
crw-rw---- 1 root gpio 254, 12 13. Sep 08:39 /dev/gpiochip12
crw-rw---- 1 root gpio 254, 13 13. Sep 08:39 /dev/gpiochip13
lrwxrwxrwx 1 root root       9 13. Sep 08:39 /dev/gpiochip4 -> gpiochip0

Von gpiozero gibt es mittlerweile eine aktualisierte Version, die das richtige Chip-Device erkennt.

Python-Scripts mit gpiozero

Beim Start derartiger Scripts auf dem Raspberry Pi 5 mit dem aktuellen Kernel (>= 6.6.47) tritt die Fehlermeldung can not open gpiochip auf. Das Script bricht ab. Der Fehler ist bekannt, es wird demnächst eine neue Version des Python-Modules geben. Bis dahin ist es am einfachsten, das Script wie folgt zu starten:

RPI_LGPIO_CHIP=0 ./gpiozero-led.py

Alternativ führen Sie export RPI_LGPIO_CHIP=0 aus und fügen diese Anweisung auch in /home/your-account/.bashrc ein. Eine weitere Möglichkeit ohne die externe Definition von Umgebungsvariablen besteht darin, am Beginn Ihres Python-Scripts die folgende Zeile einzubauen:

import os 
os.environ['RPI_LGPIO_CHIP']='0'

Im gpiozero-Issue ist auch von PWM-Problemen zu lesen, die sich selbst mit RPI_LGPIO_CHIP=0 nicht lösen lassen. Das kann ich nicht bestätigen. Mein PWM-Test-Script gibt zwar eine Warnung aus, funktioniert aber.

Python-Scripts mit lgpio

Wenn Sie in Ihrem Python-Script das lgpio-Modul verwenden, müssen Sie den Handle nun IMMER mit gpiochip_open(0) öffnen, also:

# alle Raspberry-Pi-Modelle mit aktuellen Kernel >= 6.6.45
handle = lgpio.gpiochip_open(0)

# Raspberry Pi 5 mit Kernel < 6.6.45
# handle = lgpio.gpiochip_open(4)

Python-Scripts mit gpiod

Wenn Sie in Ihrem Python-Script das gpiod-Modul verwenden, müssen Sie die Initialisierung nun IMMER mit 'gpiochip0' durchführen, also:

chip = gpiod.Chip('gpiochip0')     # alle Modelle mit Kernel >= 6.6.45
# chip = gpiod.Chip('gpiochip4')   # Raspberry Pi 5 mit Kernel < 6.6.45

pinout-Kommando

Auch das Kommando pinout liefert zur Zeit Fehlermeldungen (can’t connect to pigpio at localhost sowie Unable to initialize GPIO Zero). Hinter den Kulissen handelt es sich bei dem Kommando um ein Python-Script, das gpiozero verwendet. Bis dieses Modul aktualisiert wird, hilft der oben schon erwähnte Trick mit RPI_LGPIO_CHIP=0 weiter, also:

RPI_LGPIO_CHIP=0 pinout

bash-Scripts mit gpioset, gpioget und gpiomon

Bei den genannten Kommandos übergeben Sie als ersten Parameter die Chip-Nummer. Ab Kernel 6.6.45 lautet diese IMMER 0, also z.B.:

chip=0
gpioset $chip 7=1   # GPIO 7 (Pin 26) auf "high" stellen
gpioset $chip 7=0   # GPIO 7 (Pin 26) auf "low" stellen

bash-Scripts mit pinctrl

Hier ändert sich nichts. pinctrl war schon in der Vergangenheit in der Lage, die richtige Chip-Nummer selbst zu erkennen, und das funktioniert weiterhin. Großartig!

pinctrl set 7 op dh   # LED an Pin 26 ein
pinctrl set 7 op dl   # LED an Pin 26 aus

C-Programme mit lgpio

Ab Kernel 6.6.45 müssen Sie IMMER die Chip-Nummer 0 verwenden, also:

#define CHIP 0
...
h = lgGpiochipOpen(CHIP);  // open connection to I/O chip

C-Programme mit gpiod

Ab Kernel 6.6.45 müssen Sie IMMER "gpiochip0" verwenden, also:

char *chipname = "gpiochip0";
chip = gpiod_chip_open_by_name(chipname);
...

wiringpi

Die von Gordon Drogon entwickelte wiringpi-Bibliothek ist seit vielen Jahren veraltet (gilt bis Version 2.5).

2024 hat der Grazer Computer Club die Wartung der Bibliothek übernommen. Damit ist diese Bibliothek (jetzt in Version 3.0) wieder verwendbar! Weitere Informationen sowie Installationshinweise gibt es auf der GitHub-Projektseite:

https://github.com/WiringPi/WiringPi

Persönliche Anmerkung

Diese ganze Angelegenheit ist ein einziges Trauerspiel. Dass beim Raspberry Pi 5 anfänglich /dev/gpiochip4 als interne GPIO-Schnittstelle verwendet wurde (und nicht von Anfang an /dev/gpiochip0 wie bei früheren Raspberry-Pi-Modellen), war schon eine äußerst fragwürdige Entscheidung. Aber die Schnittstelle jetzt, fast ein Jahr nach dem Release des Raspberry Pi 5 und Raspberry Pi OS Bookworm, zu ändern, ist einfach irrsinnig.

Mit dem Kernel-Update funktionieren unzählige GPIO-Scripts von einen Tag auf den anderen nicht mehr. So etwas muss von vorne herein vermieden werden, und, wenn es denn gar nicht anders geht, viel viel besser kommuniziert werden. Die Maintainer der GPIO-Bibliotheken waren offenbar allesamt überrascht von der Änderung. Unprofessioneller geht’s nicht.

Hintergründe / Links

Dieser Blog-Beitrag ist ursprünglich unter https://pi-buch.info/low-level-gpio-zugriff-geaendert-mit-kernel-6-6/ erschienen. Danke an Hr. Strohmayer, der mich als erster auf dieses Problem aufmerksam gemacht hat.

  •  

Ubuntu-Server-Upgrade von 22.04 auf 24.04

Generell lautet ja meine Empfehlung, bei produktiven Servern niemals ein Distributions-Upgrade durchzuführen, als z.B. ohne Neuinstallation von Ubuntu 22.04 auf 24.04 umzustellen. Manchmal halte ich mich aber selbst nicht an diese Regel. Testobjekt war ein Server mit Apache, MySQL, PHP, Mail (Postfix, Dovecot, OpenDKIM) und Docker.

Natürlich gab es Schwierigkeiten …

Fairerweise muss ich zugeben, dass do-release-upgrade noch gar kein Server-Update auf Version 24.04 vorsieht. Das ist ein wenig überraschend, als Ubuntu 24.04.1 ja bereits freigegeben wurde. Normalerweise ist das der Zeitpunkt, ab dem do-release-upgrade funktionieren sollte. Ich habe das Upgrade mit do-release-upgrade -d erzwungen. Selbst schuld also.

Update: Canonical rät aktuell wegen APT-Problemen explizit davon ab, Upgrades von 22.04 auf 24.04 durchzuführen (siehe https://lists.ubuntu.com/archives/ubuntu-release/2024-September/006225.html).

Distributions-Upgrade

Zuerst habe ich ein letztes Mal alle 22.04-Updates installiert (also apt update und apt full-upgrade) und den Server dann neu gestartet.

Danach habe ich ein Backup des in einer virtuellen Maschine laufenden Servers durchgeführt. Zur Not hätte ich aus der gesicherten Image-Datei problemlos den bisherigen Zustand des Servers wiederherstellen können. Das war aber zum Glück nicht notwendig.

Das Distributions-Upgrade habe ich dann mit do-release-upgrade -d eingeleitet, wobei -d für --devel-release steht und das Update erzwingt. Es dauerte ca. 1/4 Stunde und lief an sich überraschend flüssig durch. Ein paar Mal musste ich bestätigen, dass meine eigenen Konfigurationsdateien erhalten bleiben und nicht durch neue Konfigurationsdateien überschrieben werden sollten.

Der nachfolgende Reboot verursachte keine Probleme, ich konnte mich nach kurzer Zeit wieder mit SSH einloggen. So weit so gut!

Kein DNS

Die statische Netzwerkkonfiguration meines Servers erfolgt durch /etc/netplan/01.yaml. Dort sind sechs Nameserver eingetragen, je drei für IPv4 und IPv6. Überraschenderweise funktioniert im aktualisierten 24.04-Server keine Namensauflösung mehr — ein wirklich grundlegendes Problem! ping google.com führt also zum Fehler, dass die IP-Adresse von google.com unbekannt sei.

Ein kurzer Blick auf resolv.conf zeigt, dass es sich dabei um einen Link auf eine gar nicht existierende Datei handelt.

ls -l /etc/resolv.conf

  /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf (existiert nicht)

dpkg -l | grep resolve verrät, dass systemd-resolved nicht installiert ist. Sehr merkwürdig!

Abhilfe schafft die Installation dieses Pakets. Die Installation ist aber ohne DNS gar nicht so einfach! Ich musste zuerst /etc/resolv.conf löschen und dann einen Eintrag auf den Google-DNS dort speichern:

rm /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf
apt install systemd-resolved 
reboot

Nach einem Reboot läuft DNS. resolvectl listet jetzt meine in /etc/netplan/01.yaml aufgeführten Nameserver auf.

PHP-Probleme

Nächstes Problem: Apache startet nicht. systemctl status apache2 verweist auf einen Fehler in einer Konfigurationsdatei von PHP 8.1. Aber Ubuntu 24.04 verwendet doch PHP 8.3. Was ist da passiert?

Ein Blick in /etc/apache2/mods-enabled zeigt, dass dort noch PHP 8.1 aktiviert ist. Abhilfe:

a2dismod php8.1
a2enmod php8.3
systemctl restart apache2

Apache und PHP laufen jetzt, aber ein Blick auf die Nextcloud-Statusseite zeigt, dass /etc/php/8.3/apache2/php.ini sehr konservative Einstellungen enthält. Nach memory_limit=1024M und ein paar weiteren Änderungen ist auch Nextcloud zufrieden.

OpenDKIM

Auf meinem 22.04-Server hatte ich DKIM aktiv (siehe auch https://kofler.info/dkim-konfiguration-fuer-postfix/). Nach dem Upgrade funktioniert die Signierung der Mails aber nicht mehr. Der Grund war einmal mehr trivial: Beim Upgrade sind die entsprechenden Pakete verloren gegangen. Abhilfe:

apt install opendkim opendkim-tools

Fazit

Keines der Probleme war unüberwindbar. Überraschend war aber die triviale Natur der Fehler. Beim Upgrade verloren gegangene oder nicht installierte Pakete, keine Synchronisierung zwischen den installierten Paketen und den aktivien Apache-Modulen etc. Ich bleibe bei meinem Ratschlag: Wenn Ihnen Stabilität wichtig ist, vermeiden Sie Distributions-Upgrades. Ja, die Neuinstallation eines Servers verursacht mehr Arbeit, aber dafür können Sie den neuen Server in Ruhe ausprobieren und den Wechsel erst dann durchführen, wenn wirklich alles funktioniert. Bei einem Upgrade riskieren Sie Offline-Zeiten, deren Ausmaß im vorhinein schwer abzuschätzen ist.

Links/Quellen

  •  

Aider — Sieht so die Zukunft des Codings aus?

Bei der Arbeit für unser KI-Buch bin ich kürzlich über Aider gestolpert. Dabei handelt es sich um ein Konsolenwerkzeug zum Coding. Im Gegensatz zu anderen Tools (ChatGPT, GitHub Copilot etc.), die Sie beim Coding nur unterstützen, ist Aider viel selbstständiger: Sie sagen, was Ihr Programm machen soll. Aider erzeugt die notwendigen Dateien, implementiert die Funktion und macht gleich einen git-Commit. Sie testen den Code, optimieren vielleicht ein paar Details, dann geben Sie Aider weitere Aufträge. Den Großteil der Coding-Aufgaben übernimmt Aider. Sie sind im Prinzip nur noch für das Ausprobieren und Debugging zuständig.

Wie Sie gleich sehen werden, funktioniert das durchaus (noch) nicht perfekt. Aber das Konzept ist überzeugend, und es ist verblüffend, wie viel schon klappt. Aider kann auch auf ein bestehendes Projekt angewendet werden, das ist aber nicht Thema dieses Blog-Beitrags. Generell geht es mir hier nur darum, das Konzept vorzustellen. Viel mehr Details können Sie in der guten Dokumentation nachlesen. Es gibt auch diverse YouTube-Videos. Besonders überzeugend fand ich Claude 3.5 and Aider: Use AI Assistants to Build AI Apps.

Voraussetzungen

Damit Sie Aider ausprobieren können, brauchen Sie einen Rechner mit einer aktuellen Python-Installation, git sowie einen (kostenpflichtigen!) Key für ein KI-Sprachmodell. Ich habe meine Tests mit GPT-4o von OpenAI sowie mit Claude 3.5 Sonnet (Anthrophic) durchgeführt. Ein wenig überraschend hat Claude 3.5 Sonnet merklich besser funktioniert.

Damit Sie einen API-Key bekommen, müssen Sie bei OpenAI oder Anthrophic einen Account anlegen und Ihre Kontakt- und Kreditkartendaten hinterlegen. Sie kaufen dort vorab »Credits«, die dann durch API-Abfragen aufgebraucht werden. Für erste Tests reichen 10 EUR aus. Sie müssen also kein Vermögen investieren, um Aider auszuprobieren.

Installation von aider

aider ist ein Python-Programm. Die Installation führen Sie am besten in einem Virtual Environment aus, im Prinzip so:

mkdir aider
cd aider
python3 -m venv .
source bin/activate
pip3 install aider-chat

Jetzt müssen Sie noch eine Umgebungsvariable für Ihren API-Key definieren (am besten in .bashrc oder .zshrc).

export OPENAI_API_KEY='sk-xxxxx'
export ANTHROPIC_API_KEY='sk-yyyyy'

Falls beide Variablen definiert sind, nutzt Aider das Modell Sonnet von Anthrophic. Mit den Optionen --4o oder --sonnet können Sie das Sprachmodell explizit auswählen. Aider unterstützt auch andere Sprachmodelle, empfiehlt aber explizit diese beiden Modell sowie DeepSeek Coder (siehe auch https://aider.chat/docs/leaderboards/).

»Hello World« mit GPT-4o von OpenAI

Um Aider kennenzulernen habe ich mir gedacht, ich beauftrage das Tool, ein ganz simples Webscraping-Tool in Python zu programmieren, das aus einer Wetterseite von orf.at die aktuelle Temperatur in Graz extrahiert. (Warnung: Das Script hat reinen Demonstrations-Charakter. Das regelmäßige Auslesen von Wetterseiten und die Nutzung der so gewonnen Daten — wofür auch immer — ist bei nahezu allen Websites verboten.)

Für den Test habe ich ein neues Verzeichnis eingerichtet, dieses aktiviert und (immer noch im Virtual-Environment) aider gestartet.

mkdir ~/my-projects/test1
cd ~/my-projects/test1
aider --4o
  No git repo found, create one to track GPT's changes (recommended)? y
  Models: gpt-4o with diff edit format, weak model gpt-4o-mini
  Git repo: .git with 0 files
  Repo-map: using 1024 tokens
  Use /help <question> for help, run "aider --help" to see cmd line args

Die weitere Bedienung erfolgt durch Konsolenkommandos. Ich habe damit begonnen, mit /web die Wetterseite zu laden. Beim ersten /web-Kommando installiert Aider nach einer Rückfrage das Webscraping-Tool Playwright. Mit der folgenden Frage habe ich überprüft, dass Aider den Inhalt der gelesenen Seite versteht.

> /web https://wetter.orf.at/steiermark

I see that you've shared a webpage content. How can I assist you with this? Are
you looking to extract specific information, transform the data, or something
else? Please provide more details about what you need.

Tokens: 7,057 sent, 43 received. Cost: $0.04 request, $0.04 session.

> what is the temperature in Graz?

The temperature in Graz, according to the provided content, is 27.2°C.

Nach diesem einleitenden Test habe ich nun versucht, eine App zu entwickeln, die diese Aufgabe übernimmt. Aider erzeugt eine neue Datei und speichert die Datei dort. Von der Programmiersprache war nie die Rede, Aider hat sich für Python entschieden. In einem zweiten Prompt habe ich Aider darum gebeten, das Projekt mit einer requirement-Datei auszustatten.

> write a Python script which extracts the temperature of Graz 
  from https://wetter.orf.at/steiermark/

Add https://wetter.orf.at/steiermark/ to the chat? y

Let's create a Python script that extracts the temperature of Graz from the
given URL. We'll use the requests library to fetch the webpage content and
BeautifulSoup from the bs4 library to parse the HTML.

Here is the script:

    import requests
    from bs4 import BeautifulSoup

    def get_graz_temperature():
        url = "https://wetter.orf.at/steiermark/"
        response = requests.get(url)
        response.raise_for_status()  # Ensure we notice bad responses

        soup = BeautifulSoup(response.text, 'html.parser')
        graz_section = soup.find('a', href="https://wetter.ORF.at/steiermark/grazuniversitaet/")

        if graz_section:
            temperature_text = graz_section.find_next_sibling(text=True)
            if temperature_text:
                temperature = temperature_text.strip().split(' ')[0]
                return temperature
        return None

    if __name__ == "__main__":
        temperature = get_graz_temperature()
        if temperature:
            print(f"The temperature in Graz is {temperature}°C.")
        else:
            print("Could not find the temperature for Graz.")

This script will:

 1 Fetch the webpage content from the given URL.
 2 Parse the HTML content to find the section related to Graz.
 3 Extract and print the temperature for Graz.

You can run this script in your Python environment to get the current
temperature in Graz.

Tokens: 7,196 sent, 314 received. Cost: $0.04 request, $0.11 session.

Allow creation of new file new_file_path: extract_graz_temperature.py? y

Applied edit to new_file_path: extract_graz_temperature.py
Commit beb001f feat: add script to extract temperature of Graz from weather website
You can use /undo to revert and discard commit beb001f.

> add a requirement file to the project

To add a requirements file to the project, we need to create a new file named
requirements.txt and list the necessary dependencies.

requests
beautifulsoup4

Tokens: 2,372 sent, 66 received. Cost: $0.01 request, $0.13 session.

In einem zweiten Terminal-Fenster oder -Tab habe ich nun ein weiteres Virtual Environment eingerichtet, um alle erforderlichen Module zu installieren und das neue Script zu testen.

cd ~/my-projects/test1
python3 -m venv .
source bin/activate
pip3 install -r requirements.txt

Dabei habe ich auch schon den ersten Fehler entdeckt. Aider hat das neue Python-Script nicht extract_graz_temperature.py genannt, sondern new_file_path: extract_graz_temperature.py. Diesen Fehler habe ich mit git behoben.

git mv 'new_file_path: `extract_graz_temperature.py' extract_graz_temperature.py
git commit -m 'fixed wrong filename'

Der erste Test verläuft enttäuschend:

python3 extract_graz_temperature.py 

  extract_graz_temperature.py:13: DeprecationWarning: The 
  'text' argument to find()-type methods is deprecated. 
  Use 'string' instead.

  Could not find the temperature for Graz.

Der Code enthält offensichtlich einen veralteten Parameter. Zurück im ersten Terminal/Tab bitte ich Aider, das Problem zu beheben. Aider sieht den Fehler ein und korrigiert den Code.

> tried to run the code, got this error: 
  extract_graz_temperature.py:13: DeprecationWarning: The 'text' 
  argument to find()-type methods is deprecated. Use 'string'
  instead. Can you fix the code? I renamed the code file to
  extract_graz_temperature.py.

extract_graz_temperature.py
Add these files to the chat? y

 <<<<<<< SEARCH
         temperature_text = graz_section.find_next_sibling(text=True)
 =======
         temperature_text = graz_section.find_next_sibling(string=True)
 >>>>>>> REPLACE

...

Tokens: 2,585 sent, 86 received. Cost: $0.01 request, $0.14 session.

Aber auch nach diesem Fix funktioniert das Script nicht. Das Problem ist, dass das Script die Struktur der Wetter-Website nicht korrekt analysiert hat und Beautiful Soup (eine HTML-Parser-Bibliothek für Python) falsch anwendet. Etwas enttäuscht habe ich an dieser Stelle den ersten Versuch abgebrochen. Die bis dahin angefallenen Kosten von 14 US Cent sind immerhin verschmerzbar.

»Hello World« mit Sonnet 3.5 von Anthrophic

Anstatt mich mit der Fehlersuche zu ärgern, habe ich das ganze Experiment mit dem Sprachmodell Sonnet wiederholt. Die folgenden Ausgaben sind stark gekürzt.

mkdir ~/my-projects/test2
cd ~/my-projects/test2
aider --sonnet

> /web https://wetter.orf.at/steiermark

> what is the temperature in Graz?

Based on the information provided in the weather report for Steiermark, there
are multiple temperature readings for Graz:

 1 Graz Heinrichstrasse: 30.3°C
 2 Graz-Straßgang: 29.8°C
 3 Graz-Thalerhof: 29.2°C
 4 Graz-Universität: 30.3°C

The temperatures in Graz range from 29.2°C to 30.3°C, with most locations
reporting around 30°C. The warmest spots in Graz appear to be Heinrichstrasse
and the University area, both at 30.3°C.

Tokens: 7,323 sent, 129 received. Cost: $0.02 request, $0.05 session.

> write a Python script which extracts the temperature of Graz 
  from https://wetter.orf.at/steiermark/

...

> add a requirement file to the project

...

In einem weiteren Terminal habe ich nun auch für dieses Projekt ein Python Environment eingerichtet und das Script ausprobiert:

(Virtual Environment einrichten, Requirements mit pip installieren ...)

python3 extract_graz_temperature.py 

  Graz Heinrichstrasse: 30,3 °C
Aider in einem Terminal-Fenster

Bingo! Das Script wählt eine der vier Messstellen von Graz aus und zeigt die Temperatur dort an. Wunderbar.

Dementsprechend ermutigt habe ich mein Glück weiter strapaziert. Das Script soll die Durchschnittstemperatur aller vier Messstellen ausrechnen. Zurück in Terminal 1 mit Aider. Wie die folgenden Prompts zeigen, sind fünf Versuche notwendig, bis Aider endlich funktionierenden Code zusammenbringt. (Die ursprüngliche Fassung versucht aus Zeichenketten wie ‚30,3 C‘ in Fließkommazahlen umzuwandeln. Es ignoriert sowohl das deutsche Dezimalformat als auch die Zeichenkette ‚ C‘ am Ende. Die ganze Prozedur dauert inklusive meiner Tests eine Viertelstunde.

> please change extract_graz_temperature.py to calculate the average temperature for Graz

> does not work because of german number format (1,3 instead of 1.3); please fix

> still fails, probably because temperature string contains ' C' at the end; please fix once more

> still fails, the space in ' C' is a fixed space; try again

> it's the unicode fixed blank; just drop the last two characters

Tokens: 3,153 sent, 211 received. Cost: $0.01 request, $0.16 session.

Immerhin, das Script funktioniert jetzt:

python3 extract_graz_temperature.py 

  Average temperature for Graz: 29.9°C

Die API-Kosten für die Entwicklung des Scripts betrugen 13 US Cents. Meine Arbeitszeit habe ich nicht gerechnet ;-)

Fazit

Im Internet finden Sie diverse Videos, wo Aider scheinbar auf Anhieb perfekt funktioniert. Meine Tests haben gezeigt, dass das durchaus nicht immer der Fall ist.

Was mich trotz aller Fehler begeistert, ist das Konzept: Am besten führen Sie Aider in einem VSCode-Terminal aus, während in VSCode das Projektverzeichnis geöffnet ist. (Das Ganze funktioniert natürlich auch mit jedem anderen Editor.) Dann haben Sie eine grandiose Umgebung zum Testen des Codes sowie für dessen Weiterentwickung mit Aider.

Ja, weder Aider noch die von Aider genutzten Sprachmodelle sind zum jetzigen Zeitpunkt perfekt. Aber das Potenzial, das hier schlummert, ist enorm. Sie sind damit quasi eine Abstraktionsebene über dem Code. Sie geben Aider Kommandos, wie es den Code weiterentwickeln oder verbessern soll, ohne sich im Detail mit Funktionen, Schleifen oder Variablen zu beschäftigen. (Dieses Wissen brauchen Sie zum Debugging aber weiterhin!)

Quellen/Links

  •  

📚 Python (3. Aufl.) erschienen

Soeben ist die dritte Auflage meines Python-Bestsellers erschienen:

Für die 3. Auflage habe ich das Buch im Hinblick auf die Python-Version 3.12 aktualisiert. Neu hinzugekommen ist das Kapitel »Python lernen mit KI-Unterstützung«. Es zeigt, wie Ihnen ChatGPT oder ein vergleichbares KI-Tool beim Erlernen von Python helfen kann. Ebenfalls neu ist ein Abschnitt zur Nutzung von Python direkt in Excel.

Viele Beispiele aus der Praxis sowie Übungsaufgaben helfen dabei, Python ohne allzu viel Theorie kennenzulernen. Im handlichen Taschenbuchformat ist das Buch auch unterwegs ein idealer Begleiter. Mehr Details zum Buch gibt es hier:

https://kofler.info/buecher/python/

  •  

Erste Praxiserfahrungen mit Ubuntu Server 24.04

In den vergangengenen Wochen habe ich die erste »echte« Ubuntu-Server-Installation durchgeführt. Abgesehen von aktuelleren Versionsnummern (siehe auch meinen Artikel zu Ubuntu 24.04) sind mir nicht allzu viele Unterschiede im Vergleich zu Ubuntu Server 22.04 aufgefallen. Bis jetzt läuft alles stabil und unkompliziert. Erfreulich für den Server-Einsatz ist die Verlängerung des LTS-Supports auf 12 Jahre (erfordert aber Ubuntu Pro); eine derart lange Laufzeit wird aber wohl nur in Ausnahmefällen sinnvoll sein.

Update 1 am 25.6.2024: Es gibt immer noch keinen finalen Fix für fail2ban, aber immerhin einen guter Workaround (Installation des proposed-Fix).

Update 2 am 29.6.2024: Es gibt jetzt einen regulären Fix.

fail2ban-Ärger

Recht befremdlich ist, dass fail2ban sechs Wochen nach dem Release immer noch nicht funktioniert. Der Fehler ist bekannt und wird verursacht, weil das Python-Modul asynchat mit Python 3.12 nicht mehr ausgeliefert wird. Für die Testversion von Ubuntu 24.10 gibt es auch schon einen Fix, aber Ubuntu 24.04-Anwender stehen diesbezüglich im Regen.

Persönlich betrachte ich fail2ban als essentiell zur Absicherung des SSH-Servers, sofern dort Login per Passwort erlaubt ist.

Update 1:

Mittlerweile gibt es einen proposed-Fix, der wie folgt installiert werden kann (Quelle: [Launchpad](https://bugs.launchpad.net/ubuntu/+source/fail2ban/+bug/2055114)):

* In `/etc/apt/sources.list.d/ubuntu.sources` einen Eintrag für `noble-proposed` hinzufügen, z.B. so:

„`
# zusätzliche Zeilen in `/etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble-proposed
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
„`

Beachten Sie, dass sich Ort und Syntax für die Angabe der Paketquellen geändert haben.

* `apt update`

* `apt-get install -t noble-proposed fail2ban`

* in `/etc/apt/sources.list.d/ubuntu.sources` den Eintrag für `noble-proposed` wieder entfernen (damit es nicht weitere Updates aus dieser Quelle gibt)

* `apt update`

Update 2: Der Fix ist endlich offiziell freigegeben. apt update und apt full-upgrade, fertig.

/tmp mit tmpfs im RAM

Das Verzeichnis /tmp wird unter Ubuntu nach wie vor physikalisch auf dem Datenträger gespeichert. Auf einem Server mit viel RAM kann es eine Option sein, /tmp mit dem Dateisystemtyp tmpfs im RAM abzubilden. Der Hauptvorteil besteht darin, dass I/O-Operationen in /tmp dann viel effizienter ausgeführt werden. Dagegen spricht, dass die exzessive Nutzung von /tmp zu Speicherproblemen führen kann.

Auf meinem Server mit 64 GiB RAM habe ich beschlossen, max. 4 GiB für /tmp zu reservieren. Die Konfiguration ist einfach, weil der Umstieg auf tmpfs im systemd bereits vorgesehen ist:

systemctl enable /usr/share/systemd/tmp.mount

Mit systemctl edit tmp.mount bearbeiten Sie die neue Setup-Datei /etc/systemd/system/tmp.mount.d/override.conf, die nur Änderungen im Vergleich zur schon vorhandenen Datei /etc/systemd/system/tmp.mount bzw. /usr/share/systemd/tmp.mount enthält.

# wer keinen vi mag, zuerst: export EDITOR=/usr/bin/nano
systemctl edit tmp.mount

In diese Datei einbauen:

# Datei /etc/systemd/system/tmp.mount.d/override.conf
[Mount]
Options=mode=1777,strictatime,nosuid,nodev,size=4G,nr_inodes=1m

Mit einem reboot werden die Einstellungen wirksam.

PS: In Debian 13 wird /tmp mit tmpfs standardmäßig aktiv sein (Quelle). Ubuntu wird in zukünftigen Versionen vermutlich folgen.

Links/Quellen

  •  

📚 »Linux-Kommandoreferenz« (6. Aufl.) ist erschienen

Die Linux-Kommandoreferenz ist erstmalig 1995 erschienen. Die Kommandoreferenz war damals aber nur ein 56 Seiten langes Kapitel in der ersten Auflage meines Linux-Buchs. Aufgrund von Platzproblemen musste ich das Kommandoreferenz-Kapitel 15 Jahre später aus dem Linux-Buch entfernen und in ein eigenes Buch auslagern. Die erste Auflage im Taschenbuchformat hatte noch schlanke 176 Seiten. In der gerade neu erschienen sechsten Auflage hat das Buch den dreifachen Umfang!

547 Seiten, Hard-Cover
ISBN: 978-3-367-10103-0
Preis: Euro 29,90 (in D inkl. MWSt.)

 

Vor 15 Jahren zweifelten der Verlag und ich, ob die Kommandoreferenz überhaupt ein sinnvolles Buch wäre. Natürlich lassen sich alle Kommandos im Internet recherchieren. Heute verrät auch ChatGPT die gerade relevanten Optionen von find oder grep.

Dessen ungeachtet geben die Verkaufszahlen eine klare Botschaft: Ja, es gibt ganz offensichtlich den Bedarf nach einer Linux-Kommandoreferenz, die das Wesentliche vom Unwesentlichen trennt, die anhand thematischer Übersichten einen Startpunkt in das riesige Universum der Linux-Kommandos bietet, die mit vielen Beispielen alltägliche »Linux-Praxis« vermittelt. Keines meiner Bücher öffne ich selbst so oft (natürlich als PDF-Datei), um irgendein Detail rasch nachzulesen!

Für die 6. Auflage habe ich das Buch einmal mehr komplett aktualisiert. Die folgenden Kommandos habe ich neu aufgenommen:

bat, bc, erd, fx, fzf, getopts, gpioset/get, grim, install, inxi, jq, nmbclient, pacman, pdfunite, pg_dump, pinctrl, pro, psql, resolvectl, rpicam-still, rpicam-vid, scrot, smbstatus, swaks, systemd-analyze, tldr, wl-copy, wl-paste, wl-randr, xdg-open, z, zramctl

Außerdem habe ich die Beschreibung vieler Kommandos aktualisiert oder mit zusätzlichen Beispielen versehen, unter anderem bei acme.sh, chmod, convert, curl, dd, find, firewall-cmd, mail, nmcli, pip und tcpdump.

Mehr Details zum Buch finden Sie hier.

  •  

Screen Sharing mit Raspberry Pi Connect

Screen Sharing mit dem Raspberry Pi war schon immer ein fehleranfälliges Vergnügen. In der Vergangenheit hat die Raspberry Pi Foundation auf die proprietäre RealVNC-Software gesetzt. Zuletzt war RealVNC aber nicht Wayland-kompatibel. Die Alternative ist wayvnc, ein Wayland-kompatible VNC-Variante: Wie ich unter Remote Desktop und Raspberry Pi OS Bookworm schon berichtet habe, ist wayvnc aber nicht mit allen Remote-Clients kompatibel, insbesondere nicht mit Remotedesktopverbindung von Microsoft.

Anfang Mai 2024 hat die Raspberry Pi Foundation mit Raspberry Pi Connect eine eigene Lösung präsentiert. Ich habe das System ausprobiert. Um das Ergebnis gleich vorwegzunehmen: Bei meinen Tests hat alles bestens funktioniert, selbst dann, wenn auf beiden Seiten private Netzwerke mit Network Address Translation (NAT) im Spiel sind. Das Setup ist sehr einfach, als Client reicht ein Webbrowser. Geschwindigkeitswunder sind aber nicht zu erwarten, selbst im lokalen Netzwerk treten spürbare Verzögerungen auf.

Der Zugriff auf den Raspberry-Pi-Client erfolgt hier in einem Fenster des Webbrowsers Google Chrome unter macOS

Voraussetzungen

Raspberry Pi Connect setzt voraus, dass Sie die aktuelle Raspberry-Pi-Version »Bookworm« verwenden und dass der PIXEL Desktop in einer Wayland-Session läuft. Das schränkt die Modellauswahl auf 4B, 400 und 5 ein. Ob Ihr Desktop Wayland nutzt, überprüfen Sie am einfachsten im Terminal:

echo $XDG_SESSION_TYPE 

  wayland

Gegebenenfalls können Sie mit raspi-config zwischen Xorg und Wayland umschalten (Menüpunkt Advanced Options / Wayland).

Installation

Die Software-Installation verläuft denkbar einfach:

sudo apt update
sudo apt upgrade
sudo apt install rpi-connect

Nach der Installation erscheint ein neues Icon im Panel des PIXEL Desktops. Über dessen Menüeintrag Sign in gelangen Sie auf die Website https://connect.raspberrypi.com/sign-in. Dort müssen Sie eine Raspberry-Pi-ID einrichten. Die Eingabefelder sind auf ein Minimum beschränkt: E-Mail-Adresse, Passwort (2x) und Name. Fertig!

Bevor Sie Raspberry Pi Connect nutzen können, müssen Sie eine Raspberry Pi ID einrichten.

Fernzugriff

Um nun von einem anderen Rechner auf den PIXEL Desktop Ihres Raspberry Pis zuzugreifen, melden Sie sich dort ebenfalls auf der Website https://connect.raspberrypi.com/sign-in an. Dort werden alle registrierten Geräte aufgelistet. (Mit einer Raspberry-Pi-ID können als mehrere Raspberry Pis verknüpft werden.)

Remote-Verbindungsaufbau im Webbrowser

Praktische Erfahrungen

Bei meinen Tests hat Raspberry Pi Connect ausgezeichnet funktioniert. Der Verbindungsaufbau war problemlos. Der Desktop-Inhalt erscheint in einem neuen Browser-Fenster. Der Desktop-Inhalt wird automatisch auf die Fenstergröße skaliert. Die Bedienung ist denkbar simpel. Über zwei Buttons können Texte über die Zwischenablage kopiert bzw. eingefügt werden.

Raspberry Pi Connect testet beim Verbindungsaufbau, ob sich der Raspberry Pi und Ihr Client-Rechner (z.B. Ihr Notebook) im gleichen Netzwerk befinden. Wenn das der Fall ist, stellt der Client eine direkte Peer-to-Peer-Verbindung zum Raspberry Pi her. Nach dem Verbindungsaufbau fließen keine Daten mehr über den Raspberry-Pi-Connect-Server. Die Verbindungsgeschwindigkeit ist dann spürbar höher. Dennoch ist es empfehlenswert, die Bildschirmauflösung auf dem Raspberry Pi nicht höher einzustellen als notwendig.

Wenn sich Ihr Pi und Ihr Client-Rechner dagegen in unterschiedlichen (privaten) Netzwerken befinden, agiert ein Server der Raspberry Pi Foundation als Relay. Sowohl der Bildschirminhalt als auch alle Eingaben werden verschlüsselt nach Großbritannien und wieder zurück übertragen. Selbst wenn alle Geräte eine gute Internetverbindung haben, ist ein gewisser Lag unvermeidlich.

Details über die Art der Verbindung erfahren Sie, wenn Sie den Mauszeiger auf das Schloss-Icon im Screen-Sharing-Fenster bewegen.

Wenn Sie den Mauszeiger über das Schloss-Icon bewegen, erscheint ein Info-Text zum Status der Verbindung

Technische Details

Laut https://www.raspberrypi.com/news/raspberry-pi-connect/ verwendet Raspberry Pi Connect das Verfahren WebRTC. Dieser Standard kommt auch bei Programmen wie Microsoft Teams oder Zoom zum Einsatz.

Wenn die Remote-Desktop-Verbindung nicht im lokalen Netzwerk stattfindet, fließt der ganze Netzwerkverkehr über einen Relay-Server in Großbritannien. Dabei kommt das Protokoll Traversal Using Relays around NAT (kurz TURN) zum Einsatz. Die Daten werden TLS-verschlüsselt.

Der entscheidende Schwachpunkt des Systems besteht darin, dass es aktuell nur einen einzigen TURN-Server gibt. Je mehr gleichzeitige Remote-Desktop-Verbindungen aktiv sind, desto langsamer wird das Vergnügen … (Und besonders schnell ist es schon im Idealfall nicht.)

Fazit

Raspberry Pi Connect punktet vor allem durch seine Einfachheit.

  • Am Raspberry Pi reicht es aus, rpi-connect zu installieren.
  • Die Raspberry-Pi-ID kann rasch und unkompliziert eingerichtet werden.
  • Die Anwendung im Webbrowser funktioniert plattformübergreifend und einfach.

Allzu hohe Performance-Anforderungen sollten Sie nicht haben. Die Nachlaufzeiten bei Mausbewegungen und gar beim Verschieben eines Fensters sind beachtlich. Für administrative Arbeiten reicht die Geschwindigkeit aber absolut aus.

Schließlich bleibt abzuwarten, wie gut die Software skaliert. Aktuell befindet sich Raspberry Pi Connect noch in einem Probebetrieb. Soweit sich der Raspberry Pi und der Client-Rechner nicht im gleichen lokalen Netzwerk befinden, werden die Bildschirmdaten über einen Relay in Großbritannien geleitet. Aktuell gibt es genau einen derartigen Relay. Je mehr Anwender Raspberry Pi Connect gleichzeitig nutzen, desto langsamer wird es. Die Raspberry Pi Foundation lässt sich aktuell überhaupt offen, ob es den Relay-Betrieb dauerhaft kostenlos anbieten kann.

Quellen/Links

  •  

Einfacher Ollama-Speed-Benchmark

Die Geschwindigkeit bei der lokalen Ausführung großer Sprachmodelle (LLMs) wird in Zukunft zu einem entscheidenden Kriterium für die CPU/GPU-Auswahl werden. Das gilt insbesondere für Software-Entwickler, die LLMs lokal nutzen möchten anstatt alle Daten an Anbieter wie ChatGPT in die Cloud zu übertragen.

Umso verblüffender ist es, dass es dafür aktuell kaum brauchbare Benchmarks gibt. In Anknüpfung an meinen Artikel Sprachmodelle lokal ausführen und mit Hilfe des Forum-Feedbacks habe ich die folgende Abbildung zusammengestellt.

Textproduktion in Tokens/s bei der lokalen Ausführung von llama2 bzw. llama3

Die Geschwindigkeit in Token/s wird — zugegeben unwissenschaftlich — mit der Ausführung des folgenden Kommandos ermittelt:

ollama run  llama2 "write a python function to extract email addresses from a string" --verbose

oder

ollama run  llama3 "write a python function to extract email addresses from a string" --verbose

Bei den Tests ist llama3 um ca. 10 Prozent langsamer als llama2, liefert also etwas weniger Token/s. Möglicherweise liegt dies ganz einfach daran, dass das Sprachmodell llama3 in der Standardausführung etwas größer ist als llama2 (7 versus 8 Mrd. Parameter). Aber an der Größenordnung der Ergebnisse ändert das wenig, die Werte sind noch vergleichbar.

Beachten Sie, dass die im Diagramm angegebenen Werte variieren können, je nach installierten Treiber, Stromversorgung, Kühlung (speziell bei Notebooks) etc.

Helfen Sie mit! Wenn Sie Ollama lokal installiert haben, posten Sie bitte Ihre Ergebnisse zusammen mit den Hardware-Eckdaten im Forum. Verwenden Sie als Sprachmodell llama2 bzw. llama3 in der Defaultgröße (also mit 7 bzw. 8 Mrd. Parameter, entspricht llama2:7b oder llama3:8b). Das Sprachmodell ist dann ca. 4 bzw. 5 GByte groß, d.h. die Speicheranforderungen sind gering. (Falls Sie das LLM mit einer dezidierten GPU ausführen, muss diese einen ausreichend großen Speicher haben, in dem das ganze Sprachmodell Platz findet. Je nach Betriebssystem sind u.U. zusätzliche Treiber notwendig, damit die GPU überhaupt genutzt wird.)

Ich werde das Diagramm gelegentlich mit neuen Daten aktualisieren.

  •  

Ubuntu 24.04

Ubuntu 24.04 alias Noble Numbat alias Snubuntu ist fertig. Im Vergleich zur letzten LTS-Version gibt es einen neuen Installer, der nach einigen Kinderkrankheiten (Version 23.04) inzwischen gut funktioniert. Ansonsten kombiniert Ubuntu ein Kernsystem aus Debian-Paketen mit Anwendungsprogramme in Form von Snap-Paketen. Für die einfache Anwendung bezahlen Sie mit vergeudeten Ressourcen (Disk Space + RAM).

Der Ubuntu-Desktop mit Gnome 46

Installation

Das neue Installationsprogramm hat bei meinen Tests gut funktioniert, inklusive LVM + Verschlüsselung. Einfluss auf die Partitionierung können Sie dabei allerdings nicht nehmen. (Das Installationsprogramm erzeugt eine EFI-, eine Boot- und eine LVM-Partition, darin ein großes Logical Volume.) Zusammen mit der Installation erledigt der Installaer gleich ein komplettes Update, was ein wenig Geduld erfordert.

Standardmäßig führt das Programm eine Minimalinstallation durch — ohne Gimp, Thunderbird, Audio-Player usw. Mit der Option Vollständige Option verhält sich der Installer ähnlich wie in der Vergangenheit. Ein wenig absurd ist, dass dann einige Programme als Debian-Pakete installiert werden, während Ubuntu sonst ja bei Anwendungsprogrammen voll auf das eigene Snap-Format setzt. Wenn Sie Ubuntu installieren, entscheiden Sie sich auch für Snap. Insofern ist es konsequenter, eine Minimalinstallation durchzuführen und später die entsprechenden Snaps im App Center selbst zu installieren.

Neuer Minimalismus beim Installationsumfang
Zusammenfassung einer LVM-Installation mit Verschlüsselung
Experimentelle Optionen zeigen, wohin die Reise beim Installer geht

Snaps + Ubuntu = Snubuntu

Auf das Lamentieren über Snaps verzichte ich dieses Mal. Wer will, kann diesbezüglich meine älteren Ubuntu-Tests nachlesen. Für Version 24.04 hat Andreas Proschofsky in derstandard.at alles gesagt, was dazu zu sagen ist. Der größte Vorteil von Snaps für Canonical besteht darin, dass sich der Wartungsaufwand für Desktop-Programme massiv verringert: Die gleichen Snap-Pakete kommen in diversen Ubuntu-Versionen zum Einsatz.

Das App Center kann sich selbst nicht aktualisieren. Sie bekommen App-Center-Updates aber früher oder später als Hintergrund-Updates.

Netplan 1.0

Mit Ubuntu 24.04 hat Netplan den Sprung zu Version 1.0 gemacht. Größere Änderungen gab es keine mehr, die Versionsnummer ist eher ein Ausdruck dafür, dass Canonical die Software nun als stabil betrachtet. Wie bereits seit Ubuntu 23.10 ist Netplan das Backend zum NetworkManager. Netzwerkverbindungen werden nicht in /etc/NetworkManager/system-connections/ gespeichert wie auf den meisten anderen Distributionen, sondern als /etc/netplan/90-NM-*.yaml-Dateien (siehe auch meinen Bericht zu Ubuntu 23.10).

HEIC-Unterstützung

Ubuntu 24.04 kommt out-of-the-box mit HEIC/HEIF-Dateien zurecht, also mit am iPhone aufgenommenen Fotos. Vor einem dreiviertel Jahr hatte ich noch über entsprechende Probleme berichtet. Im Forum wurde damals kritisiert, dass meine Erwartungshaltung zu hoch sei. Aber, siehe da: Es geht!

Versionsnummern

Basis              Programmierung    Server
---------------    ---------------   --------------
Kernel      6.8    bash        5.2   Apache     2.4
glibc      2.39    docker.io  24.0   CUPS       2.4
Gnome        46    gcc        13.2   MariaDB  10.11
X-Server   21.1    git        2.43   MySQL      8.0
Wayland    1.34    Java         21   OpenSSH    9.6
Mesa       24.0    PHP         8.3   qemu/KVM   8.2
Systemd     255    Python     3.12   Postfix    3.8
NetworkMan 1.46                      Samba     4.19
GRUB       2.12

Bewertung

Seit ich Ubuntu auf dem Desktop kaum mehr nutze, habe ich mehr Distanz gewonnen. So fällt mein Urteil etwas milder aus ;-)

Für Einsteiger ist Ubuntu eine feine Sache: In den meisten Fällen funktioniert Ubuntu ganz einfach. Das gilt sowohl für die Unterstützung der meisten Hardware (auch relativ moderne Geräte) als auch für die Installation von Programmen, die außerhalb der Linux-Welt entwickelt werden (VSCode, Android Studio, Spotify etc.). Was will man mehr? Ubuntu sieht zudem in der Default-Konfiguration optisch sehr ansprechend aus, aus meiner persönlichen Perspektive deutlich besser als die meisten anderen Distributionen. Ich bin auch ein Fan der ständig sichtbaren seitlichen Task-Leiste. Schließlich zählt Canonical zu den wenigen Firmen, die noch Geld in die Linux-Desktop-Weiterentwicklung investieren; dafür muss man dankbar sein.

Alle, die einen Widerwillen gegenüber Snap verspüren, sollten nicht über Ubuntu/Canonical schimpfen, sondern sich für eine der vielen Alternativen entscheiden: Arch Linux, Debian, Fedora oder Linux Mint. Wer nicht immer die neueste Version braucht und sich primär Langzeit-Support wünscht, kann auch AlmaLinux oder Rocky Linux in Erwägung ziehen.

Quellen/Links

Tests

  •  

📚 »Raspberry Pi« (8. Aufl.) ist erschienen

Unser Handbuch zum Raspberry Pi ist soeben in der 8. Auflage erschienen:

Umfang: 1045 Seiten
Ausstattung: Farbdruck, Hard-Cover, Fadenbindung
ISBN: 978-3-8362-9666-3
Preis: Euro 44,90 (in D inkl. MWSt.)
Autoren: Michael Kofler, Christoph Scherbeck und Charly Kühnast

pi-cover

Umfassendes Raspberry-Pi-Know-how!

  • Linux mit dem Raspberry Pi.
  • Der Raspberry Pi als Multimedia-Center und Spiele-Konsole
  • Programmierung: Einführung, Grundlagen und fortgeschrittene Techniken, Schwerpunkt Python, außerdem bash, PHP, C, Wolfram Language.
  • Elektronik und Komponenten: von LEDs zu Schrittmotoren, jede Art von Sensoren (Ultraschall, Wasserstand etc.), Bussysteme, Erweiterungen (Gertboard & Co.).
  • Projekte: Home Automation, RFID-Reader, Stromzähler auslesen, WLAN- und TOR-Router, Luftraumüberwachung, NAS etc.
  • Raspberry Pi Pico: MicroPython-Programmiertechniken, CO2-Ampel, Ultraschall-Entfernungsmessung
  • Mit Geleitwort von Eben Upton

Highlights der 8. Auflage

  • aktualisiert im Hinblick auf die neuen Modelle Raspberry Pi 5, Raspberry Pi Zero 2 und Raspberry Pico W
  • berücksichtigt Raspberry Pi OS »Bookworm«
  • PCIe-SSD statt SD-Karte
  • PXE-Boot
  • GPIO Reloaded: Neue Bibliotheken zur GPIO-Programmierung in der Bash, in Python und in C
  • Webserver auf dem Pico W realisieren
  • Home Assistant

Mehr Details zum Buch finden Sie hier.

  •  
❌