Normale Ansicht

Es gibt neue verfügbare Artikel. Klicken Sie, um die Seite zu aktualisieren.
Ältere BeiträgeKoflers Blog

Kotlin-Updates: Kotlin 1.6

21. November 2021 um 17:20

Seit einigen Tagen ist Kotlin 1.6 verfügbar. Dieser Beitrag geht auf die wichtigsten Neuerungen im Vergleich zu Version 1.5 ein. Die Kurzfassung: Kotlin 1.6 ist ein »kleines« Release, für die meisten Entwickler gibt es keine wirklich dramatische Änderungen. Auch die Verbesserungen in der Standardbibliothek sind eher Kleinigkeiten.

Dieser Text bezieht sich auf die folgenden Versionsnummern:

IntelliJ: 2021.2.3
Kotlin: 1.6.0
JDK: 17

Weitere Kotlin-Update-Artikel auf meiner Website finden Sie hier:

https://kofler.info/tag/kotlin-updates

Exhaustive »when«

In Kotlin 1.6 beklagt sich der Compiler, wenn eine when-Konstruktion für Enumerationen, boolesche Werte oder für Datentypen nicht alle möglichen Fälle erfasst, also nicht »exhaustive« ist. Aktuell können Sie diese Warnung noch ignorieren, aber in Kotlin 1.7 wird daraus ein Fehler. Spätestens dann müssen Sie die when-Konstruktion so formulieren, dass sämtliche Fälle erfasst werden (am einfachsten durch einen else-Block).

enum class Days {
    Monday, Tuesday, Wednesday, Thursday, 
    Friday, Saturday, Sunday
}

val day = Days.Friday
when(day) {
    Days.Monday, Days.Tuesday -> println("Wochenanfang")
    Days.Wednesday, Days.Thursday -> println("Wochenmitte")
    Days.Friday -> println("Fast geschafft")
    // Warnung:  Non exhaustive 'when' statements on enum will be prohibited 
    // in 1.7, add 'Saturday', 'Sunday' branches or 'else' branch instead
}

Standardbibliothek

readln: Wenn Sie mit readLine() eine Datei zeilenweise auslesen, liefert die Funktion entweder die nächste Zeile oder null. Nunmehr gibt es zwei Varianten zu readline, die die ursprüngliche Form längerfristig ablösen sollen:

  • readlnOrNull() verhält sich wie ehemals readLine(), ist aber klarer benannt und hat mehr Ähnlichkeiten mit println.
  • readln() löst dagegen einen Fehler aus, wenn das Ende der Datei erreicht ist, und kann statt dem wenig eleganten readLine()!! verwendet werden.

readLine() bleibt uns vorerst erhalten, soll aber in kommenden Kotlin-Versionen deprecated werden.

typeOf: typeOf<Typ> liefert ein KClass-Objekt, das Typ beschreibt. Die Funktion stand zwar schon seit Kotlin 1.3.40 zur Verfügung, ursprünglich aber nur für die JVM-Variante. Nunmehr kann typeOf in allen drei Kotlin-Varianten (also auch JS und Native) verwendet werden.

Duration-API: Die Duration API (beschrieben in Abschnitt 7.3 meines Kotlin-Buchs) gilt nun als stabil. Das gilt allerdings nicht für andere kotlin.time-Klassen zur Zeitmessung. Die in Kotlin 1.5 abgeschaffte Notation

val myDur = 2.minutes + 3.seconds - 10.milliseconds * 0.66

ist erfreulicherweise wieder eingeführt worden, erfordert nun aber Importe der betreffenden Companion-Eigenschaften, hier also:

import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
import kotlin.time.Duration.Companion.milliseconds

Unsupported class file major version 61

Meine ersten Tests mit Kotlin scheiterten an Java 17. Auf meinem Rechner ist auch die JDK 17 installiert. Anscheinend ist das Build-System dazu nicht kompatibel. IntelliJ war nicht in der Lage, das minimalistische Console Template zu kompilieren und zeigte eine wenig hilfreiche Fehlermeldung an:

Could not open init generic class cache for initialization script '/tmp/wrapper_init4.gradle' (/crypt/home/kofler/.gradle/caches/7.1/scripts/954mesz5ux7usmane6uzpuni1).
> BUG! exception in phase 'semantic analysis' in source 
> unit '_BuildScript_' Unsupported class file major version 61

Eine kurze Suche in stackoverflow ergab, dass Kompatiblitätsprobleme zwischen Gradle und der JDK 17 die Ursache sein könnten. Ich habe dann die JDK-Version für das Build-System auf 11 zurückgesetzt, und alles funktionierte. Merkwürdig. (Es geht hier nicht um die JDK für das eigentliche Projekt, die darf sehr wohl 17 sein.)

Die von JVM eingesetzte JVM sollte nicht allzu aktuell sein …

Quellen/Links

Sonstiges:

📚 Python (2. Aufl.) erschienen

23. November 2021 um 14:12

Die zweite Auflage von »Python — Der Grundkurs« ist erschienen. Für die Neuauflage habe ich dieses äußerst erfolgreiche Buch im Hinblick auf die aktuelle Python-Version 3.10 vollständig aktualisiert und in vielen Details verbessert:

  • Assignment Expressions (Zuweisung und Vergleich kombinieren)
  • Neue Formatierungssyntax `f'{varname}‘
  • Vereinigung von Dictionaries
  • Pattern Matching (Tupel, Listen und Sets mit Mustern auswerten)
  • Stärkere Berücksichtigung von VSCode als Python-Editor

Am Grundkonzept des Buchs hat sich nicht geändert: Der kostengünstige Grundkurs richtet sich an Einsteiger, die parallel zum Buch Python in der Schule, im Studium oder in der Arbeit lernen, sowie an Umsteiger von anderen Programmiersprachen, die rasch die Eigenheiten von Python erlernen wollen.

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/

Von Java 11 zu Java 17

21. Dezember 2021 um 19:23

Seit einigen Jahren erscheinen halbjährlich neue Java-Versionen. In dieser Versionsflut stechen die LTS-Versionen (Long Term Support) heraus. Zuletzt war das Java 11, aktuell ist es Java 17. Eine gute Gelegenheit also, einen Blick auf die Neuerungen von Java der letzten Jahre zu werfen.

Ich beschränkt mich in diesem Artikel auf die (aus meiner Sicht) wichtigsten Neuerungen. Daneben gibt es eine Menge weiterer neuer Features, die je nach Zielgruppe durchaus interessant sind. Werfen Sie gegebenenfalls einen Blick auf die Links am Ende dieses Artikels!

Oracle JDK wieder uneingeschränkt frei

In den vergangenen Jahren hat Oracle versucht, den JDK-Zugang für die kommerzielle Nutzung kostenpflichtig zu machen. Zwar standen die halbjährlichen Java-Versionen stets zum kostenfreien Download zur Verfügung, aber bei den LTS-Version wollte Oracle Geld für Updates sehen.

Man kann sich natürlich auch ins Knie schießen. Der wenig überraschende Effekt war, dass gefühlt jede größere IT-Firma ein eigenes JDK auf OpenJDK-Basis ins Leben rief. (Der Java-Quellcode ist ja Open Source.) Unter Privatanwendern außerhalb der Linux-Szene waren vor allem die Downloads der Seite https://adoptopenjdk.net/ beliebt. Mittlerweile ist daraus das Projekt Adoptium geworden, an dem unter anderem IBM, Microsoft und Red Hat mitarbeiten.

Wie dem auch sei, seit Java 17 bietet auch Oracle das JDK wieder uneingeschränkt frei an. Natürlich braucht es dazu eine eigene Lizenz, die Oracle No-Fee Terms and Conditions, leicht zu merken als NFTC. Wem fällt das alles nur ein?

Records

Die vermutlich spannendste Neuerung der letzten drei Jahre sind Records. Das neue Schlüsselwort record bietet einen besonders effizienten Weg an, um Klassen zu definieren, deren Objekte unveränderlich (immutable) sind. Die Zeile

public record Rectangle(double length, double width) { }

definiert eine Klasse mit den unveränderlichen Instanzvariablen length und width, die über die gleichnamigen Methoden ausgelesen werden können (length() und width()). Einen geeigneten Konstruktor bekommen Sie frei Haus geliefert, ebenso brauchbare Implementierungen von toString, equals und hashCode.

Bei Bedarf können Sie Records mit eigenen Methoden und (mit Einschränkungen) mit eigenem Konstruktor-Code ausstatten. Records können Schnittstellen implementieren, aber keine Vererbung nutzen (also weder selbst erben noch als Basis für Vererbung dienen).

Besonders gut eignen sich Records für Data Transfer Objects (DTOs). Dieser Fachbegriff bezeichnet den Datenaustausch zwischen Methoden oder anderen Software-Komponenten.

Mehrzeilige Zeichenketten

Ebenfalls jahrelang auf der Wunschliste vieler Java-Entwickler stand die Möglichkeit, mehrzeilige Zeichenketten zu formulieren. Wie in einigen anderen Programmiersprachen werden solche Zeichenketten mit """ eingeleitet und abgeschlossen.

String sql = """
    SELECT books.id, title, publId, name 
    FROM books 
    JOIN publishers ON publId = publishers.id  
    WHERE books.id >= 167""";

// entspricht in älteren Java-Versionen:
String sql =
    "SELECT books.id, title, publId, name\n" +
    "FROM books\n" +
    "JOIN publishers ON publId = publishers.id\n" +
    "WHERE books.id >= 167";

Die neue Syntax mit """ hat drei Besonderheiten:

  • Nach den einleitenden Zeichen """ muss eine neue Zeile folgen.
  • Nur wenn die abschließenden Zeichen """ in einer neuen Zeile angegeben
    werden, endet auch die letzte Zeile mit dem Zeilenumbruchzeichen \n.

  • Die Position der abschließenden Zeichen """ bestimmt die Einrücktiefe des
    Texts.

Der letzte Punkt erfordert noch einmal ein Beispiel:

String s = """
       abc
         efg
    """; 
// entspricht s = "   abc\n" +
//                "     efg\n";

Weil """ hier gegenüber dem Inhalt der Zeichenkette drei Zeichen weiter links platziert wurde, beginnt jede Zeile der Zeichenkette mit drei Leerzeichen.

Endlich lesbare switch-Ausdrücke

Die in den Grundzügen von C übernommene Syntax von switch war in der Vergangenheit so, dass man Einsteigern eigentlich nur davon abraten konnte. Die alte Syntax bleibt weiterhin gültig, aber parallel dazu besteht nun eine zweite Variante, die in manchen Fällen tatsächlich präzisen, gut lesbaren Code liefert:

switch(ausdruck) {
    case konstante1, k2 -> { anweisung1a; a1b; }
    case k3, k4, k5     -> { a2a; a2b; a3b}
    default             -> { a3a; a3b; }
}

Wenn der switch-Ausdruck dazu dient, einen Wert einzustellen, gibt es noch eine Vereinfachung. Wie in Kotlin können Sie die gesamte switch-Konstruktion als Ausdruck betrachten und das Ergebnis direkt einer Variablen zuweisen. Vergessen Sie nicht, dass Sie in diesem Fall den gesamten Ausdruck mit einem Strichpunkt beenden müssen!

int result = switch(ausdruck) {
               case konstante1, k2 -> 1;
               case k3, k4, k5     -> 2;
               default             -> -1;
             };

Abschließend noch ein konkretes Beispiel:

String month = "März";
int days =  
    switch(month) {
        case "Januar", "März", "Mai", "Juli", "August",
             "Oktober", "Dezember" -> 31; 
        case "April", "Juni", "September", 
             "November" -> 30;      
        case "Februar"  -> 28; // oder 29, wenn Schaltjahr
        default -> 0;
    };

Mehr Komfort für instanceof

Der Operator instanceof wird häufig vor einem Downcast verwendet, um sicherzustellen, dass die Variable tatsächlich ein Objekt des erforderlichen Typs enthält:

if(bike instanceof EBike) {
    var eb = (EBike)bike;             
    // eb gibt Zugriff auf EBike-spezifische Methoden und -Variablen 
}

In Java 17 lässt sich der Code wie folgt verkürzen:

if(bike instanceof EBike eb) {
    // eb gibt Zugriff auf EBike-spezifische Methoden und -Variablen 
}

Innerhalb des if-Blocks steht nun die Variable eb mit dem Datentyp EBike zur Verfügung.

Nächste LTS-Version vermutlich schon 2023

Oracle plant, auf einen zweijährigen LTS-Zyklus umzusteigen. Ganz fix ist das noch nicht, aber wenn der Plan realisiert wird, dann wird Java 21 die nächste LTS-Version sein und im Herbst 2023 erscheinen.

Fazit

Ich bleibe bei meiner Ansicht: Das bessere Java heißt heute Kotlin.

Aber man muss Oracle zugestehen: Im Rahmen des engen Kompatibilitätskorsetts ist gelungen, Java in wesentlichen Details zu modernisieren. Begeisterung ruft das kaum hervor, aber es natürlich dennoch ein Fortschritt für alle, die im Java-Kosmos gefangen sind. Die Dominanz von Java in bestimmten Segmenten der Software-Industrie wird damit weiter zementiert.

Quellen, Links, Downloads

Raspberry Pi Zero 2

23. Dezember 2021 um 20:15

Seit Ende Oktober 2021 ist die Raspberry-Pi-Familie um ein weiteres Mitglied gewachsen: Der Raspberry Pi Zero 2 löst die vorangegangenen Zero-Modelle ab. Das wichtigste Unterscheidungsmerkmal ist die wesentlich schnellere CPU im System-on-a-Chip (SoC) mit der Bezeichnung BCM2710A1. Dahinter versteckt sich eine Variante des SoC aus dem Raspberry Pi 3. Der Zero 2 glänzt jetzt mit 4 Cores und einer Taktfrequenz von 1 GHz. Damit ist die Rechenleistung um ein Vielfaches höher als bisher.

Persönlich war meine größte Befürchtung, dass sich die höhere Geschwindigkeit auch in einer spürbar höheren Leistungsaufnahme widerspiegeln würde. Tatsächlich ist dies aber laut Messungen von hackaday.com nur teilweise der Fall. Zwar fließen unter Volllast knapp 450 mA Strom (entspricht einer Leistungsaufnahme von 2,2 W). Die Leistungsaufnahme ist damit fast 2,5 mal höher als bei den bisherigen Zero-Modellen. Errechnet man allerdings die CPU-Leistung pro Watt, dann ist der Zero 2 der effizienteste Minicomputer, den die Raspberry Pi Foundation bisher produziert hat. Im Leerlauf sind Zero und Zero 2 fast genauso sparsam (rund 0,4 W beim Zero, rund 0,5 W beim Zero 2).

Der Raspberry Pi Zero 2

Wenn Ihnen die maximale Leistungsaufnahme des Zero 2 zu hoch ist, können Sie durch einen Kernel-Option drei der vier Cores sperren. Damit sinkt die Leistungsaufnahme unter Volllast auf die Hälfte, die Geschwindigkeit allerdings auf ein Viertel. Details dazu können Sie im Blog nachlesen.

Eigener Test

Ich habe den Zero 2 mit Raspberry Pi OS Lite (Bullseye) ausprobiert. Eigentlich wollte ich Hostnamen, WLAN und SSH-Zugang vorweg im Raspberry Pi Imager konfigurieren; beim ersten Versuch hat dies überhaupt nicht funktioniert. Beim zweiten Versuch wurden immerhin der Hostname und das Passwort korrekt gesetzt, aber die WLAN-Verbindung funktionierte wieder nicht. Es ist mir nichts anderes übrig geblieben, als den Zero 2 an einen Monitor und eine Tastatur anzuschließen und die Konfiguration manuell in raspi-config vorzunehmen. Das ist ärgerlich, weil gerade der Zero 2 mit seinen wenigen und exotischen Anschlüssen für eine Headless-Installation prädestiniert ist.

Nachdem diese Hürden gemeistert waren, verhielt sich der Zero 2 unauffällig. Gemessen daran, dass es sich um ein Zero-Modell handelt, läuft der Mini-Computer verblüffend schnell und (z.B. während Updates) ohne unangenehm heiß zu werden.

Eckdaten

  • Größe: 65 mm x 30 mm
  • SoC: BCM2710A1, 4 Cortex-A53-Cores
  • RAM: 512 MByte
  • Anschlüsse: 2 x Micro-USB (1 x Stromversorgung, 1 x Daten), Mini-HDMI, Mini-Kameraanschluss (erfordert Adapter)
  • WLAN 2,4 GHz 802.11b/g/n
  • Bluetooth 4.1
  • Leistungsaufnahme: 0,4 W (Leerlauf) bis 2,2 W (alle 4 Cores unter Volllast)
  • 40 GPIOs (Lötkontakte, keine Steckerleiste!)

Beachten Sie, dass sämtliche Zero-Modelle, also auch der neue Zero 2, mit einem Mini-HDMI-Anschluss ausgestattet sind. Der Raspberry Pi 4B verwendet dagegen Micro-HDMI. Sie brauchen also für den Zero 2 ein eigenes Kabel oder einen Adapter.

Preis

Das ursprüngliche Zero-Modell wurde ursprünglich als Raspberry Pi für nur fünf Euro beworben. Tatsächlich war er aber nur schwer zu diesem Preis erhältlich (und wenn, dann nur bei der Abnahme hoher Stückzahlen). Beim Zero 2 sieht es aktuell noch schlimmer aus: Laut geizhals ist das Gerät aktuell (Dez. 2021) generell schwer erhältlich und kostet beachtliche 30 Euro — Schnäppchen ist das keines! Der hohe Preis hat mit Corona, dem allgemeinem Chip-Mangel, dem Brexit etc. zu tun, ist also nicht unbedingt die Schuld der Raspberry Pi Foundation. Trotzdem: Wer den Zero 2 kauft, tut dies sicher nicht wegen des günstigen Preises, sondern weil er/sie einen winzigen, leistungseffizienten, Pi-kompatiblen Mini-Computer sucht.

Fazit

  • tolle Hardware, aber mit 512 MB RAM nicht Desktop-tauglich
  • aktuell viel zu teuer
  • Headless-Inbetriebnahme gescheitert

📚 Lehrbuch Datenbanksysteme

27. Juni 2022 um 12:24

Mein soeben erschienenes Buch Datenbanksysteme richtet sich an Studierende, Entwickler und Datenbankanwender. Es erklärt Ihnen, wie moderne Datenbankmanagementsysteme funktionieren. Es zeigt Ihnen, wie Sie Datenbanken korrekt und effizient entwerfen. Es erläutert den Umgang mit der Structured Query Language (SQL) und gibt einen Überblick über die Administration und Programmierung von Datenbanksystemen.

Cover

Unzählige Übungsaufgaben (mit Lösungen!) helfen Ihnen, das erlernte Wissen zu verfestigen und anzuwenden. Zusammen mit dem Buch erhalten Sie den Online-Zugriff auf mehrere Beispieldatenbanken, sodass Sie SQL-Kommandos ohne die langwierige Installation eines eigenen Datenbank-Servers ausprobieren können. Alternativ können Sie die zum Download angebotenen Beispieldatenbanken natürlich auch lokal installieren.

In das Buch fließt meine bald 30-jährige Erfahrung im Entwurf von Datenbanken, bei der Entwicklung von Datenbankanwendungen, bei der Administration von Datenbankmanagementsystemen (DBMS) sowie aus dem Unterricht ein. Ein besonderer Fokus des Buchs liegt im korrekten Datenbankdesign. Fehler, die in dieser Phase passieren, sind später praktisch nicht mehr zu korrigieren. Das Buch berücksichtigt auch neue Entwicklungen, von NoSQL bis hin zu modernen SQL-Features (Rekursion, Common Table Expressions, Window-Funktionen etc.).

Das Buch umfasst knapp 750 Seiten und kostet ca. 50 EUR. Mehr Details zum Buch finden Sie hier.

Freiexemplar für Lehrpersonal

Wenn Sie auf der Fachhochschule oder Universität eine Datenbank-Vorlesung oder -Übung abhalten: Kontaktieren Sie dozenten@rheinwerk-verlag.de und fordern Sie ein kostenloses Belegexemplar an!

Asahi Linux Alpha

26. März 2022 um 10:44

Asahi Linux ist ein Projekt, um Linux nativ auf Apple-Rechnern mit M1-CPU auszuführen. Seit einigen Tagen gibt es eine Alpha-Version eines Installers für Arch Linux. Ich konnte natürlich nicht widerstehen und habe das Programm auf meinem Mac Mini ausprobiert.

Bevor Sie »Hurra!« rufen, kurz eine Zusammenfassung der wichtigsten Einschränkungen, die aktuell gelten:

  • Die Installation muss auf eine interne SSD erfolgen. (Externe USB-Disks sind leider nicht geeignet.)
  • Es gibt keine GPU-Unterstützung. Die Geschwindigkeit der Grafik ist trotzdem OK, aber natürlich nicht überragend.
  • Beim Mac Mini muss der Monitor per HDMI angeschlossen werden. (USB-C funktioniert nicht.) Die max. Auflösung ist Full HD (kein 4k!).
  • Kein DisplayPort, kein Thunderbolt, kein HDMI bei den MacBooks, keine Kamera-Unterstützung
  • Kein Bluetooth
  • Kein Schlafmodus oder CPU deep idle, d.h. die CPU braucht im Leerlauf mehr Strom als notwendig. Bei den MacBooks ist die Akku-Laufzeit entsprechend eingeschränkt.
  • Asahi Linux verwendet 16k-Speicherseiten. Einige Programme (Google Chrome, Emacs, alle Programme auf Electron-Basis etc.) sind dazu inkompatibel und laufen daher nicht. Für manche Programme gibt es bereits Bugfixes, d.h. es ist zu hoffen, dass dieses Inkompatibilitäten im Laufe der nächsten Monate verschwinden.

Installation (Phase 1, unter macOS)

Grundsätzlich ist die Installation nicht schwierig: Zuerst stellen Sie sicher, dass macOS zumindest in Version 12.3 vorliegt, und lösen die Verbindung zu evt. vorhandenen Backup-Datenträgern. (Wenn Sie das nicht machen, vergeudet der Installer Stunden, um die Korrektheit der TimeMachine-Backups auf externen Datenträgern zu überprüfen.)

Dann führen Sie in einem Terminal führen Sie das folgende Kommando aus:

curl https://alx.sh | sh

Nun folgen Sie den Anweisungen. Im Wesentlichen müssen Sie mehrfach Ihr Passwort eingeben, die gewünschte Größe für die SSD-Partitionierung festlegen, und einen von drei Installationsmodi auswählen:

  • Installation von Arch Linux mit KDE-Desktop
  • Installation eines minimalen Arch-Systems (Textmodus)
  • Installation eines UEFI-Umgebung als Ausgangspunkt für die Installation anderer Distributionen

Ich habe mich für die zweite Variante entschieden und kann zu den anderen Optionen nichts sagen. Die folgenden Screenshots dokumentieren den Verlauf des Setup-Prozesses.

Start der Installation im Terminal
Anzeige von Systeminfos
Partitionierung der internen SSD, um Platz für Linux zu machen
Sinnlose (stundenlange) Überprüfung der TimeMachine-Snapshots eines externen (!) Datenträgers, bevor dann der interne Datenträger verändert wird
Auswahl der Installationsvariante
Vorbereitung für den ersten Bootvorgang
Letzte Anweisungen und Warnungen vor dem Reboot

Installation (Phase 2, nach Reboot)

Bevor das Setup-Script den Rechner herunterfährt, gibt es klare Anweisungen: Der Rechner muss ca. 15 Sekunden komplett ausgeschalten bleiben, bevor er neu gestartet wird (warum auch immer). Beim Neustarten muss der Power-Knopf für ca. 10 Sekunden dauerhaft gedrückt bleiben, bis am Bildschirm ein Auswahlmenü zwischen macOS und Asahi-Linux erscheint. Sie wählen Asahi-Linux aus.

Das Boot-Menü erscheint nur, wenn beim Einschalten mind. 10 Sekunden der Power-Knopf dauerhaft gedrückt wird

Allerdings wird noch nicht das fertige Linux gestartet. Vielmehr muss die Installation abgeschlossen werden. Sie müssen sich dabei zweimal authentifizieren (also das Passwort des primären macOS-Benutzers angeben), damit Linux als »sicheres« Betriebssystem in den Tiefen des verschachtelten macOS-Bootprozesses verankert werden können. Ich habe versucht, den Verlauf von Phase 2 so gut wie möglich durch Fotos zu dokumentieren.

Start der Installationsphase 2
Letzte Warnungen …
Viele Details, die nochmals bestätigt werden müssen.
Ankündigung eines weiteren Reboots

Arch Linux einrichten

Asahi Linux sollte jetzt das Default-Betriebssystem sein. Wenn alles gut geht, startet nach dem neuerlichen Reboot Arch Linux. Da ich mich für die Minimalinstallation von Arch Linux entschieden habe, erscheint eine Textkonsole. Es gibt zwei vorkonfigurierte Logins, root (Passwort root) und alarm (Passwort alarm). Die ersten Schritte sollten sein, die Passwörter dieser beiden Benutzer sofort zu ändern und dann den SSH-Server zu aktivieren.

Erste Arbeiten in der Konsole von Arch Linux

In den nächsten Schritten geht es darum, eine Minimalkonfiguration von Arch Linux durchzuführen und Xorg sowie Gnome zu installieren. Das setzt Arch-Grundkenntnisse voraus. Nach einem Login als root habe ich die folgenden Kommandos ausgeführt:

# Passwort von root und alarm ändern
passwd
passwd alarm

# SSH-Dämon starten
systemctl enable --now sshd

# Spracheinstellungen
cat <<EOF >  /etc/locale.gen
de_DE.UTF-8 UTF-8
en_US.UTF-8 UTF-8
EOF

locale-gen

echo "LANG=de_DE.UTF-8" >  /etc/locale.conf

echo "KEYMAP=de-latin1" > /etc/vconsole.conf

# sudo installieren, Benutzer 'kofler' mit sudo-Rechten anlegen
pacman -Syu sudo

useradd -m kofler
usermod -a -G wheel kofler
passwd kofler

# in /etc/sudoers die Zeile mit '%wheel' auskommentieren!

# xorg und Gnome installieren. Beim Audio-System habe ich mich 
# für die Pakete pipewire-jack und wireplumber entschieden.
pacman -Syu xorg gnome

  all xorg packages
  all gnome packages
  pipewire-jack
  wireplumber

# Grafiksystem samt Gnome-Login starten
systemctl enable --now gdm

# im Terminal von Gnome: Firefox installieren
pacman -S firefox firefox-i18n-de

Ich hoffe, ich habe nichts Wesentliches vergessen. Denken Sie daran, dass Sie bei der ersten Verwendung von pacman die Option -y angeben. Einfach pacman -S scheitert, weil die Informationen zu den Paketquellen nicht aktuell sind. pacman muss zuerst das Inhaltsverzeichnis der Paketquellen herunterladen (Option -y).

Gnome läuft sehr flüssig, wenn auch enttäuschenderweise auf meinem 4k-Monitor nur mit Full HD. Die von mir verwendete uralte USB-Apple-Tastatur wird ausgezeichnet unterstützt, nachdem ich unter Gnome die Tastatur Deutsch (Macintosh) eingestellt habe.

Gnome 41 läuft nativ auf einem Mac M1 Mini!

Default-Betriebssystem einstellen

Linux gilt nun als Default-Betriebssystem. Um macOS zu booten, müssen Sie beim Einschalten wieder gut 10 Sekunden den Einschaltknopf drücken. Damit gelangen Sie in das Boot-Menü und können dort macOS auswählen.

Das Default-Betriebssystem können Sie unkompliziert in den macOS-Systemeinstellungen festlegen. Leider gibt es keine Möglichkeit (bzw. ich habe keine gefunden), dass das Boot-Menü automatisch erscheint. Für den wechselweisen Betrieb von Linux und macOS wäre das sehr praktisch.

Einstellung des Default-Betriebssystem unter macOS

Probleme (aktualisiert 28.3.2022)

Neben den in der Einleitung bereits aufgezählten technischen Einschränkungen traten bei meinen Tests wiederholt Boot-Probleme auf. Das Boot-System für Linux findet eine Datei (oder das Root-Dateisystem?) nicht, zeigt für ein paar Sekunden kryptische Fehlermeldungen an, und startet dann neu (Boot-Loop). Früher oder später hat es dann meistens funktioniert.

Der Linux-Bootprozess funktioniert (zumindest auf meinem System) unzuverlässig

Der Fehler tritt spürbar häufiger auf, wenn ich meine externe USB-3-SSD angeschlossen habe. (Diese SSD dient unter macOS als TimeMachine-Backup-Volume und hat keine andere Aufgabe. Ich brauche sie unter Linux nicht, aber es wäre natürlich fein, wenn ich sie einfach angeschlossen lassen könnte. Davon habe ich mittlerweile abgesehen.)

Es gibt noch ein Problem, das mir anfänglich nicht aufgefallen ist: Manchmal bleibt der Monitor nach dem Start einfach schwarz. Dieses Problem tritt nur auf, wenn Linux automatisch bootet (also als Default-Betriebssystem ohne die vorherige Anzeige der Boot-Auswahl durch das lange Drücken des Einschaltknopfs). Der Rechner startet ganz normal, nach ca. 10 bis 15 Sekunden kann ich mich via SSH anmelden, ps zeigt, dass gdm läuft, aber der Monitor erhält kein Signal, bleibt schwarz und aktiviert nach ein paar Sekunden den Energiesparmodus.

Abhilfe: Booten über das Menü mit langem Drücken des Einschaltknopfs. Siehe auch diesen theregister-Kommentar von Marcan zu diversen Monitorproblemen, die anscheinend demnächst gelöst werden sollen.

Fazit

Es ist faszinierend, wie viel bereits funktioniert. Dessen ungeachtet ist Asahi Linux natürlich noch nicht praxistauglich (bzw. nur für ganz schmale Anwendungsnischen). Auf meinem Mac Mini stört aktuell die HDMI-Einschränkung auf 1920×1080. Für den Einsatz auf einem Notebook fehlen Bluetooth, eine ordentliche Unterstützung externer Schnittstellen (Thunderbolt, HDMI etc.) sowie ein besseres Energiemanagement. Der Installationsprozess ist zwar für Profis OK, aber für Einsteiger ungeeignet.

Viel wichtiger ist für mich die Perspektive: MacBooks sind aus technischer Sicht enorm attraktive Geräte (wenn auch teuer): Großartige Rechenleistung, großartige Displays, endlich wieder ein gutes Keyboard, und, für mich fast am wichtigsten: praktisch lautlos!

Aus meiner Linux-Sichtweise stört halt macOS :-) Ich streite nicht ab, dass macOS ein gutes Betriebssystem ist, aber für mich als Entwickler, Admin und Autor ist es nicht perfekt. (Größtes Hindernis: Die unkomplizierte Möglichkeit, Linux-Distributionen in virtuellen Maschinen zu testen. Das geht aktuell allerdings auch unter Asahi Linux nicht ohne Weiteres …)

Sofern das Asahi-Projekt die noch fehlenden Treiber-Lücken demnächst ebenfalls schließen kann, wäre es möglich, dass in zwei, drei Jahren ein MacBook Pro meinen Lenovo P1 ablöst.

Quellen und Links

Arch Linux mit LVM und Verschlüsselung (LUKS) installieren

06. April 2022 um 07:52

Seit ca. einem Jahr tritt Arch Linux immer stärker in meinen Linux-Fokus. Dieser Beitrag beschreibt die Installation von Arch Linux auf einem Notebook. Das neue System soll folgende Merkmale aufweisen:

  • Vollverschlüsselung (Betriebssystem + Daten)
  • LVM
  • systemd-boot (kein GRUB)

Ich gehe davon aus, dass es keine weiteren Betriebssysteme gibt und die gesamte SSD genutzt werden soll. Ich gehe auch davon aus, dass Sie nicht an UEFI Secure Boot interessiert sind. (Bei mir scheidet Secure Boot aus, weil ich auf meinem Notebook auf die NVIDIA-Treiber angewiesen bin.) Falls Sie Secure Boot verwenden wollen, müssen Sie zum Booten GRUB anstelle von systemd-boot verwenden.

Partitionierung

Die Installation beginnt im Live-System des Arch Linux Images (Download, das vorher auf einen USB-Stick übertragen werden muss. Den Umgang mit dem Live System habe ich zuletzt in diesem Blog-Beitrag beschrieben, weswegen ich hier auf Wiederholungen verzichte. Beachten Sie insbesondere die Möglichkeit, im Live-System einen SSH-Server zu starten und die weitere Installation dann auf einem anderen Rechner via SSH durchzuführen.

Die Grundidee der Arch-Linux-Installation besteht darin, dass Sie alle erforderlichen Dateisysteme manuell einrichten und unter /mnt einbinden. Erst dann startet der eigentliche Installationsprozess.

Die Partitionierung erfolgt mit parted. Beachten Sie, dass nur zwei Partitionen erforderlich sind:

  • Die erste Partition dient gleichzeitig EFI- und Boot-Partition. Sie wird später unter dem Pfad /boot genutzt und sowohl die für EFI erforderlichen Dateien (/boot/EFI) als auch die Boot-Dateien (initramfs-xxx und vmlinux-xxx direkt in /boot) enthalten. Die reservierten 2 GByte sind mehr als großzügig. Aktuell (ein Monat nach der Installation) werden nur 76 MByte genutzt. Aber ein wenig Reserve — gegebenenfalls für die Installation weiterer Distributionen — kann nicht schaden.
  • Die zweite Partition dient als LUKS-Container, wird also verschlüsselt. mkpart ... -1mib bedeutet, dass die gesamte Disk bis knapp an deren Ende genutzt werden soll.

parted /dev/nvme1n1

(parted) mklabel gpt                                                      
(parted) mkpart esp 1mib 2000mib
(parted) mkpart crypt 2001mib -1mib                                           
(parted) set 1 boot on                                                    
(parted) set 1 esp on
(parted) unit mib                                                         
(parted) print                                                            
Modell: Samsung SSD 970 EVO Plus 2TB (nvme)
Festplatte  /dev/nvme1n1:  1907729MiB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: gpt
Disk-Flags: 

Nummer  Anfang   Ende        Größe       Dateisystem  Name   Flags
 1      1,00MiB  2000MiB     1999MiB     fat32        esp    boot, esp
 2      2001MiB  1907629MiB  1905628MiB               crypt

Dateisysteme, LUKS und LVM einrichten

Für die erste Partition reicht ein simples FAT32-Dateisystem:

mkfs.fat -F 32 /dev/nvme1n1p1

In der zweiten Partition wird mit cryptsetup luksFormat ein verschlüsselter Container eingerichtet. cryptsetup luksOpen aktiviert den Container. Natürlich muss bei beiden Kommandos das gewünschte Passwort angegeben werden:

cryptsetup luksFormat --type luks2 /dev/nvme1n1p2
cryptsetup luksOpen /dev/nvme1n1p2 mycrypt

Der gesamte Container soll als Physical Volume (PV) für LVM verwendet werden:

pvcreate /dev/mapper/mycrypt

Das PV ist vorerst das einzige Element für den LVM-Datenpool, also für die Volume Group (VG):

vgcreate vgcrypt /dev/mapper/mycrypt

Innerhalb der Volume Group habe ich zwei Logical Volumes (LVs) angelegt, eine mit 200 GByte für Arch Linux und eine weitere mit 600 GByte für /home. In beiden LVs habe ich ein ext4-Dateisystem erstellt.

lvcreate -L 200G -n archroot vgcrypt
lvcreate -L 600G -n archhome vgcrypt
mkfs.ext4 /dev/mapper/vgcrypt-archroot
mkfs.ext4 /dev/mapper/vgcrypt-archhome

Dateisysteme in /mnt einbinden

Bevor die eigentliche Installation losgeht, müssen die neuen Dateisysteme unter /mnt in den Verzeichnisbaum des Live-Systems integriert werden:

mount /dev/mapper/vgcrypt-archroot /mnt
mkdir /mnt/boot
mkdir /mnt/home
mount /dev/nvme1n1p1 /mnt/boot
mount /dev/mapper/vgcrypt-archhome /mnt/home

Installation und Konfiguration des Minimalsystems

pacstrap installiert ein Minimalsystem nach /mnt. genfstab erzeugt die zum Setup passende Datei /etc/fstab. arch-chroot wechselt in das neue Minimalsystem. pacman installiert einige Basispakete.

pacstrap /mnt base linux linux-firmware
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
pacman -S lvm2 nano man zile dhclient networkmanager

Ein symbolischer Link kümmert sich um die Einstellung der richtigen Zeitzone:

ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Ich will englische und deutsche Sprachdateien, die Defaultsprache Deutsch und ein deutsches Tastaturlayout:

cat <<EOF  >  /etc/locale.gen
de_DE.UTF-8 UTF-8
en_US.UTF-8 UTF-8
EOF

locale-gen

echo "LANG=de_DE.UTF-8" >  /etc/locale.conf

echo "KEYMAP=de-latin1" > /etc/vconsole.conf

Einstellung des Hostnamens:

echo "myhostname" > /etc/hostname

cat << EOF  > /etc/hosts
127.0.0.1     localhost
::1           localhost
127.0.1.1     myhostname myhostname.fritz.box
EOF

Einstellung des root-Passworts:

passwd

Boot-Konfiguration

Damit der Boot-Vorgang funktioniert, muss die Initramfs-Datei Treiber für LVM und die Entschlüsselung des LUKS-Containers enthalten. Deswegen muss mit einem Editor die Variable HOOKS in der Datei /etc/mkinitcpio.conf angepasst werden. Achtung: Die Reihenfolge der Hooks ist wichtig!

# diese Zeile in der Datei  /etc/mkinitcpio.conf anpassen
HOOKS=(base udev autodetect keyboard modconf block encrypt lvm2 filesystems fsck)

Mit mkinitcpio erzeugen Sie nun die Initramfs-Datei.

mkinitcpio -p linux

bootctl richtet systemd-boot ein. Das Kommando setzt voraus, dass /boot die EFI System Partition (ESP) ist. Am Beginn der Installation ist diese Partition mit parted entsprechend markiert worden (set 1 boot on und set 1 esp on).

bootctl --path=/boot/ install

Nun muss noch der Bootloader konfiguriert werden. Dazu ermitteln Sie zuerst mit blkid den UUID der verschlüsselten Partition:

blkid /dev/nvme1n1p2
   /dev/nvme1n1p2: UUID="44fbbcd5-8d8e-4978-9c32-ffcaa646554f" <---
                   TYPE="crypto_LUKS" 
                   PARTLABEL="crypt" 
                   PARTUUID="798a1e88-2a94-4199-bd1e-ba34d17fbe06"

Das erste cat-Kommando erzeugt die Datei /boot/loader/loader.conf. Diese Datei besagt, dass systemd-boot standardmäßig nach 3 Sekunden die Booteinstellungen aus /boot/loader/entries/arch.conf berücksichtigen soll:

cat << EOF > /boot/loader/loader.conf
timeout 3
editor 0
default arch.conf
EOF

Das zweite cat-Kommando erzeugt den Menüeintrag für Arch-Linux.

cat << EOF > /boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options cryptdevice=UUID=todo:cryptlvm root=/dev/vgcrypt/archroot quiet rw
EOF

In diese Datei müssen Sie nun mit einem Editor die zuvor ermittelte UUID eintragen. In meinem Fall (vergleichen Sie das Ergebnis von blkid oben) sieht die Datei dann so aus:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options cryptdevice=UUID=44fbbcd5-8d8e-4978-9c32-ffcaa646554f:cryptlvm root=/dev/vgcrypt/archroot quiet rw

Zur Kontrolle können Sie bootctl ohne Parameter ausführen. Das Ergebnis sollte in etwa wie folgt aussehen:

bootctl 

System:
     Firmware: UEFI 2.60 (Lenovo 0.4992)
  Secure Boot: disabled (setup)
 TPM2 Support: yes
 Boot into FW: active

Current Boot Loader:
      Product: systemd-boot 250.3-2-arch
     Features: ✓ Boot counting
               ✓ Menu timeout control
               ✓ One-shot menu timeout control
               ✓ Default entry control
               ✓ One-shot entry control
               ✓ Support for XBOOTLDR partition
               ✓ Support for passing random seed to OS
               ✓ Load drop-in drivers
               ✗ Boot loader sets ESP information
          ESP: n/a
         File: └─/EFI/BOOT/BOOTX64.EFI

Random Seed:
 Passed to OS: no
 System Token: set
       Exists: yes

Available Boot Loaders on ESP:
          ESP: /boot (/dev/disk/by-partuuid/84bd0fe5-be18-4f5a-991c-b28c2a8899ef)
         File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 250.3-4-arch)
         File: └─/EFI/BOOT/BOOTX64.EFI (systemd-boot 250.3-4-arch)

Boot Loaders Listed in EFI Variables:
  ...

Boot Loader Entries:
        $BOOT: /boot (/dev/disk/by-partuuid/84bd0fe5-be18-4f5a-991c-b28c2a8899ef)

Default Boot Loader Entry:
        title: Arch Linux
           id: arch.conf
       source: /boot/loader/entries/arch.conf
        linux: /vmlinuz-linux
       initrd: /initramfs-linux.img
      options: cryptdevice=UUID=44fbbcd5-8d8e-4978-9c32-ffcaa646554f:cryptlvm root=/dev/vgcrypt...

Reboot, Gnome-Installation

Mit Strg+D verlassen Sie nun die chroot-Umgebung. reboot startet den Rechner neu. Wenn alles gut geht, erscheint das minimalistische Boot-Menü von systemd-boot. Wenige Sekunden später landen Sie in einer Textkonsole mit dem ebenso minimalistischen Arch Linux.

Da mein Notebook mit einem Ethernet-Kabel an das lokale Netzwerk verbunden ist, kann die Netzwerkverbindung unkompliziert durch die Aktivierung des NetworkManagers hergestellt werden.

systemctl enable --now NetworkManager

Danach habe ich den SSH-Server installiert:

pacman -Syu openssh

Für einen Verbindungsaufbau als root mit Passwort muss /etc/ssh/sshd_config geändert werden (PasswordAuthentication yes und PermitRootLogin yes). Danach aktivieren Sie den SSH-Server und können alle weiteren Arbeiten via SSH durchführen.

systemctl enable --now sshd

Im nächsten Schritt ist es zweckmäßig, einen Benutzer (hier kofler) sowie sudo einzurichten:

pacman -S sudo
useradd -m kofler
usermod -a -G wheel kofler
passwd kofler

Jetzt ist es an der Zeit, eine grafische Benutzeroberfläche zu installieren. Ich habe mich für Gnome entschieden:

pacman -S xorg gnome

pacman stellt nun eine Menge Detailfragen. Ich habe alle xorg- und Gnome-Pakete installiert und mich für wireplumber als Pipewire-Session-Manager entschieden. Das Grafiksystem starten Sie wie folgt:

systemctl enable --now gdm
Gnome 41 unter Arch Linux

Überraschend problemlos verläuft die Installation der NVIDIA-Treiber:

pacman -S nvidia
reboot

Aktuell läuft Gnome 41 unter Xorg absolut zufriedenstellend. Mit Gnome 42 werde ich später testen, ob die Kombination aus NVIDIA + Wayland + Gnome mittlerweile praxistauglich ist.

Update 7.4.2022: Getestet mit Gnome 42 und NVIDIA-Treiber (Version 510). Um das Modesetting zu aktivieren, habe ich einen neuen systemd-boot-Loader-Eintrag mit nvidia-drm.modeset=1 erstellt. Das System samt Gnome + Wayland lässt sich problemlos hochfahren, aber der externe Monitor bleibt schwarz. (Der Monitor wird in den Gnome-Einstellungen erkannt, ich kann ihn konfigurieren, aber egal was ich mache: Der Monitor bleibt im Energiesparmodus.) Ich weiß, dass xorg veraltet ist, aber es funktioniert wenigstens :-)

Erfahrungen und Anmerkungen

Die fertige Anleitung liest sich so, als könnte man nicht viel falsch machen. Das täuscht. Ich habe den Prozess zuerst in einer virtuellen Maschine samt EFI »geübt«, und es waren mehrere Versuche notwendig, bis es wirklich funktioniert hat. Natürlich gibt es im Internet Dutzende Arch-Linux-Installationsanleitungen — aber jede bezieht sich auf einen anderen Sonderfall, manche sind veraltet etc. Insofern trifft zu, was ich schon früher geschrieben habe: Arch Linux richtet sich an fortgeschrittene Anwender.

Ich habe mein Glück auch mit archinstall versucht, bin aber gescheitert. Ich bin mir nicht sicher, ob meine Setup-Wünsche für archinstall zu spezifisch waren oder ob ich einfach zu blöd bin, um archinstall korrekt zu verwenden.

Auf grafische Installer (Manjaro etc.) habe ich verzichtet, weil ich ein originales Arch-Linux-System haben wollte.

Meine Arch-Linux-Installation ist ein Experiment mit dem Ziel, Ubuntu als Haupt-Desktop-OS zu verlassen. Ob das glückt, kann ich noch nicht sagen, aber ich werde im Blog weiter darüber berichten. Aktuell habe ich Arch Linux und Ubuntu 21.10 parallel im Betrieb. Ich warte jetzt das Update auf Ubuntu 22.04 ab, aber die Tendenz geht Richtung Arch Linux :-)

Post Scriptum: PCIe-SSDs, LUKS, 4k-Blöcke und Benchmark-Tests

Es gibt im Internet Berichte, wonach LUKS deutlich schneller ist, wenn es 4k-Blöcke verwendet (siehe die Links am Ende des Artikels). Meine SSD, eine Samsung 970 EVO Plus, unterstützt aber nativ keine 4k-Blöcke, sondern meldet wie eine Uraltfestplatte 512-Byte-Blöcke. Manchmal hat man ernsthafte Zweifel am Zustand der IT-Industrie: 512-Byte-Blöcke bei einer SSD mit 2 TByte!

Meine SSD lässt sich, im Gegensatz zu stärker Pro-orientierten SSDs von Samsung, auch nicht mit nvme format auf 4k-Blöcke umstellen. Es ist aber möglich, mit cryptsetup luksFormat --type luks2 --sector-size 4096 LUKS-intern 4k-Blöcke zu erzwingen. Ich habe vor der eigentlichen Installation einige Stunden lang recherchiert und diverse Benchmark-Tests durchgeführt. Die Ergebnisse waren nicht schlüssig; manche Tests waren mit LUKS-4k schneller als bei einem Standard-LUKS-Setup, andere aber langsamer. (Ideal wäre offensichtlich eine SSD, die 4k-Blöcke nativ unterstützt. Dann verwendet auch LUKS standardmäßig 4k und alles passt zusammen. Mangels passender Hardware kann ich aber nicht sagen, wie viel Performance das gebracht hätte.)

Letztenendes habe ich dieses Nebenthema nicht mehr weiter verfolgt und bin bei den Defaulteinstellungen von cryptsetup geblieben, somit bei meiner SSD also bei 512-Byte-Blöcken. Sollten Sie vor dem Kauf einer SSD stehen und vor haben, LUKS zu verwenden, lohnt sich aber eine kurze Recherche, ob die SSD 4k-Blöcke unterstützt oder nicht.

Und noch eines: Ja, die Verschlüsselung durch LUKS kostet bei PCIe-SSDs messbar I/O-Performance. Ein ext4-Dateisystem in einer simplen Partition ist bei synthetischen Tests ca. 10 bis 25 % schneller als eines in einem LUKS-Container.

Davon losgelöst ist es selten sinnvoll, sich von synthetischen Benchmark-Tests verrückt machen zu lassen. Diese Tests haben eingeschränkte Relevanz auf den alltäglichen Desktop-Betrieb — selbst wenn man wie ich viel mit virtuellen Maschinen, deren Images sowie mit Docker hantiert. Anders sieht es aus, wenn Sie einen stark I/O-lastigen Server optimieren möchten — aber in diesem Fall werden Sie vermutlich auf die Verschlüsselung ganz verzichten.

Quellen/Links

SSD, LUKS und 4k-Blöcke

Ubuntu 22.04

21. April 2022 um 13:48

Mit Ubuntu 22.04 »Jammy Jellyfish« hat Canonical die neueste LTS-Version von Ubuntu fertiggestellt. Aktuelle Software kombiniert mit einem Update-Versprechen über fünf Jahre sind die Hauptargumente für die Distribution — und zwar gleichermaßen im Desktop- wie im Server-Segment. Fundamentale technische Neuerungen gibt es keine, einige richtungsweisende Entscheidungen aber sehr wohl: Wayland gilt nun als Default-Grafiksystem, und Firefox wird als Snap-Paket ausgeliefert. Letztere Entscheidung wird nicht nur auf Zustimmung treffen …

Anmerkung: Dieser Blog-Beitrag berücksichtigt ausschließlich das »originale« Ubuntu für den Desktop, nicht die diversen Derivate bzw. die Server-Version.

Installation

Eigentlich wollte Canonical Ubuntu einen neuen, mit der Bibliothek Flutter entwickelten Installer verpassen. Daraus ist nichts geworden, das Programm wurde nicht rechtzeitig fertig. Der Installer ist somit im Vergleich zu den Vorversionen unverändert, was aus meiner Sicht kein Nachteil ist: Das Programm ist einfach zu bedienen und funktioniert gut.

Der Platzbedarf für eine Standardinstallation beträgt ohne /swapfile ca. 6,4 GByte. Wie viel Platz der Installer für die Swap-Datei vorsieht, hängt von der Hardware des Rechners ab, auf dem Sie Ubuntu installieren.

Gut 6 GByte sind zwar angesichts des breiten Software-Angebots akzeptabel, das Attribut »schlank« trifft auf Ubuntu aber schon lange nicht mehr zu. Die Snap-Pakete sind daran nicht alleine Schuld, leisten aber natürlich auch einen Beitrag: Der Platzbedarf für /var/lib/snapd/snaps beträgt anfänglich ca. 640 MByte. Selbst wenn Sie keine weiteren Snap-Pakete installieren, verdoppelt sich der Umfang des Snap-Verzeichnisses früher oder später, weil bei Updates immer auch die vorige Version aller Snap-Pakete erhalten bleibt.

Desktop-Neuerungen

Relativ viele Änderungen bzw. neue Einstellmöglichkeiten gibt es im Gnome-Desktop. Zum Teil handelt es sich dabei einfach um neue Features von Gnome 42, zum Teil um Erweiterungen, die Canonical in den Gnome-Desktop integriert hat:

  • In den Einstellungen kann zwischen der normalen Darstellung der Fenster und dem »Dark Mode« gewechselt werden.
  • Es stehen zehn Kontrastfarben für ausgewählte Elemente zur Auswahl.
  • Auf dem Desktop können unkompliziert Icons abgelegt werden. Dazu ziehen Sie Dateien oder Verzeichnisse per Drag&Drop aus dem Dateimanager auf den Desktop. Intern werden die Dateien dadurch in das Verzeichnis Schreibtisch verschoben.
  • Bei Notebooks kann im Systemmenü einer von mehreren Energiemodis aktiviert werden.
  • Die Tools zur Aufnahme von Screenshots bzw. Screencasts wurden modernisiert.
Die Ubuntu-Variante der Gnome-Einstellungen bietet mehr Optionen als das Original
Der Gnome-Desktop im Dark Mode und mit einer grünen Kontrastfarbe

Beachten Sie, dass die Verwaltung der Gnome Shell Extensions im Snap-Firefox nicht funktioniert. Sie müssen stattdessen das Paket gnome-shell-extensions installieren und ausführen.

Unter Ubuntu sind drei Gnome Shell Extensions vorinstalliert. Die Konfiguration kann bei Bedarf über das Programm »gnome-extensions« erfolgen.

Software-Versionen

Wie üblich wurden fast alle Software-Versionen auf den aktuellen Stand gebracht. Erfreulicherweise trifft dies auch für Gnome zu, das in der aktuellen Version ausgeliefert wird. Ausgenommen sind lediglich vereinzelte Gnome-Anwendungen: In Gnome 42 wurden einige Apps auf die neue Bibliothek GTK4 aktualisiert. Ubuntu geht solchen Programmen aus dem Weg und verwendet gegebenenfalls die ältere Version. Das betrifft z.B. die Kalender-App (gnome-calendar).

Basis             Desktop             Programmierung   Server
---------------   ------------------  --------------   --------------
Kernel     5.15   Gnome          42   bash       5.1   Apache     2.4
glibc      2.35   Firefox        99   docker   20.10   CUPS       2.4
X-Server   1.21   Gimp         2.10   gcc       11.2   MySQL      8.0
Wayland    1.20   LibreOffice   7.3   git       2.34   OpenSSH    8.9
Mesa       22.0   Thunderbird    91   Java        11   qemu/KVM   6.2
Systemd     249                       PHP        8.1   Postfix    3.6
NetworkMan 1.36                       Python    3.10   Samba     4.15
GRUB       2.06 

Firefox und Snap

Wie bereits in Version 21.10 wird Firefox nicht mehr als »gewöhnliches« Paket, sondern in Kooperation mit der Mozilla-Organisation als Snap-Paket ausgeliefert. Für Canonical erleichtert das die Wartung. Für den Anwender ergeben sich daraus aber drei Nachteile:

  • Der Platzbedarf auf dem Datenträger und im RAM ist wesentlich höher.
  • Der erstmalige Start des Programms spürbar langsamer. Selbst die Ubuntu-freundliche Website omgubuntu macht sich darüber in einem Video lustig (siehe ab 3:40). Der lahme Start hat damit zu tun, dass nicht nur Firefox an sich geladen wird, sondern auch ein riesiges Paket von (vollkommen redundanten) Bibliotheken.

  • Es gibt Kompatibilitätsprobleme, z.B. im Zusammenspiel mit der Verwaltung der Gnome-Shell-Erweiterungen oder mit dem Passwort-Tool KeePass.

Wenn Sie das Firefox-Snap-Paket durch ein traditionelles Paket ersetzen möchten, gehen Sie so vor:

sudo snap remove firefox
sudo add-apt-repository ppa:mozillateam/ppa
sudo apt install -t 'o=LP-PPA-mozillateam' firefox

Vorsicht: Einfach sudo apt install firefox funktioniert nicht, weil dadurch neuerlich das Snap-Paket installiert wird! Damit das nächste apt update nicht wieder die Snap-Version von Firefox installiert, müssen Sie außerdem die Priority-Einstellungen für apt verändern:

sudo sh -c 'cat > /etc/apt/preferences.d/mozilla-ppa' << EOF
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 501
EOF

Alternativ können Sie natürlich auch Chrome (von der Google-Website) oder Chromium (Paket chromium-browser) installieren.

Wayland per Default

Wie alle gängigen Distributionen werden auch bei Ubuntu der herkömmliche Grafik-Server Xorg und das neue System Wayland parallel installiert. Nach Möglichkeit kommt in Ubuntu 22.04 standardmäßig Wayland zum Einsatz. Im Idealfall soll das sogar bei Grafikkarten mit NVIDIA-Treiber funktionieren. Auf meinem Notebook (Lenovo P1, Quadro P1000 Mobile), ist das aber nicht der Fall: Beim Login gibt es keine Wahl zwischen den unterschiedlichen Grafikbibliotheken, Gnome verwendet wie in älteren Ubuntu-Versionen Xorg (X11) als Grafiksystem. Vermutlich liegt das daran, dass Hybridsysteme (Intel + NVIDIA GPU) noch nicht unterstützt werden.

Zusammenfassung der Eckdaten in den Gnome-Einstellungen

Dafür hat Wayland bei meinen Tests anstandslos in virtuellen Maschinen funktioniert. Auch das Zusammenspiel auf Computern mit Intel- oder ADM-Grafik sollte klappen.

Distributions-Update mit »do-release-upgrade«

Auf meinem Arbeits-Notebook habe ich zwei Tage vor dem offiziellen Release ein Update von Version 21.10 auf die aktuelle Version durchgeführt. Der Prozess hat zwar ca. eine Stunde gedauert, ist aber komplett problemlos verlaufen.

sudo apt update
sudo apt dist-upgrade
sudo reboot
sudo do-release-upgrade -d --allow-third-party

  ...
  11 packages are going to be removed. 174 new packages  
  are going to be installed. 2198 packages are going to 
  be upgraded. 

  You have to download a total of 2,857 M. This download 
  will take about 7 minutes with your connection. 

  Installing the upgrade can take several hours. Once the 
  download has finished, the process cannot be canceled. 
  ...

Fazit

Für Linux-Einsteiger bzw. Leute, die Linux als Desktop-Betriebssystem anwenden möchten, ohne sich Gedanken über technische Hintergründe zu machen, ist Ubuntu weiterhin eine gute Wahl:

  • In aller Regel funktioniert Ubuntu ganz einfach.
  • Das Aussehen und Verhalten des Desktops ist (aus meiner Sicht) besser als bei Distributionen mit dem originalen Gnome.
  • Ubuntu bietet inklusive PPAs und Snaps das wohl beste Software-Angebot in der Linux-Welt.
  • Dank der großen Verbreitung ist es einfach, im Freundeskreis oder im Internet Hilfe zu finden.

Ich kann für diese Zielgruppe unter den aktuellen Distributionen keine bessere Alternative zu Ubuntu erkennen. Am ehesten ist wohl Linux Mint geeignet (das aber selbst von Ubuntu abgeleitet ist).

Persönlich spricht mich Ubuntu allerdings immer weniger an. Ich halte Snap-Pakete für einen Irrweg (und die von Red Hat favorisierte Alternative FlatPak auch nicht nennenswert besser). Der LTS-Vorteil einer langen Lebenszeit ist für mich angesichts des über den Verlauf der Jahre zunehmend veralteten Software-Stacks für meine Desktop-Anwendung als Entwickler/Admin uninteressant.

Quellen und Links

Sonstiges:

📚 Git-Handbuch (2. Aufl.) und Java-Grundkurs (4. Aufl.) erschienen

22. April 2022 um 16:39

Der April bringt gleich einen Doppelpack von Neuerscheinungen: Einerseits haben Bernd Öggl und ich unser sehr erfolgreiches Git-Handbuch auf den neuesten Stand gebracht. Von den Basics über gängige Workflows bis hin zu einer Referenz der wichtigsten Optionen — alles ist dabei. Mehr Details finden Sie hier.

Außerdem habe ich meinen seit vielen Jahren im Unterricht bewährten Java-Grundkurs aktualisiert. Hier hat sich inhaltlich deutlich mehr getan. Die letzte Auflage bezog sich noch auf Java 11, die neue berücksichtigt Java 17 inklusive der neuen Records. Ich habe die Gelegenheit genutzt, auch einige strukturelle Verbesserungen vorzunehmen, noch mehr Übungs- und Wiederholungsbeispiele einzubauen und das Buch generell einsteigerfreundlicher zu machen. Im Taschenbuchformat ist das Buch für schlanke EUR 15 erhältlich. Lesen Sie hier die detaillierte Inhaltsangabe!

   

Die Zeit ist reif für das Rolling-Release-Modell

27. April 2022 um 17:30

Warum muss ich ein Distributions-Update machen, damit ich die neueste Version von git verwenden kann? Oder von LibreOffice? Damit ich in einer aktuellen Version von Python programmieren kann? Die Zeiten, in denen sich Linux mit jedem Distributions-Update grundlegend verändert, sind seit etlichen Jahren vorbei. Die Zeit ist reif für Rolling-Release-Distributionen, bei denen eine einmalige Installation und in der Folge »kleine« Updates ausreichen.

Wer heute ein neues Notebook kauft und darauf Linux installiert, sollte dieses während der Lebenszeit des Geräts (vielleicht fünf bis sieben Jahre?) mit simplen Updates nutzen können.

In den vergangenen drei Jahren habe ich auf meinem Notebook alle halbe Jahr ein Release-Update von Ubuntu n auf Ubuntu n+1 durchgeführt. Grundsätzlich sind diese Updates keine Hexerei, aber sie dauern relativ lange und durchbrechen die »normale« Nutzung. Nicht selten gibt es während des Updates oder danach Probleme.

Die Verwendung einer LTS-Version, wie ich dies auf meinen Servern handhabe und »Normalanwendern« empfehle, kommt für mich privat nicht in Frage: Als IT-Autor muss ich die gerade neuesten Versionen diverser Programme ausprobieren und will dabei nicht (nur) in virtuellen Maschinen bzw. mit Docker arbeiten.

Natürlich könnte ich statt Ubuntu auch Debian, Fedora oder openSUSE verwenden — aber das Grundproblem ändert sich nicht. Regelmäßig sind, losgelöst von »normalen« Paket-Updates, disruptive Distributions-Updates erforderlich.

In der fernen Vergangenheit waren derartige Distributions-Updates oder gar Neuinstallationen unumgänglich, weil es fundamentale Neuerungen gab: Der Wechsel des Init-Systems von Init-V über Upstart zu systemd, der Wechsel des Dateisystems von ext2 zu ext3, reiserfs, btrfs, xfs oder ext4 (je nach Vorliebe), neue Verfahren, um das Internet per Modem, ISDN, ADSL und WLAN zu nutzen etc. Wann gab es zuletzt derart weitreichende Strukturänderungen in einer Linux-Distribution?

Linux ändert sich aktuell nur inkrementell. Das ist nichts Negatives, sondern ein Zeichen dafür, wie sehr sich Linux im Verlauf von drei Jahrzehnten stabilisiert hat.

Man kann über Extra-Paketformate wie Snap oder Flatpak streiten, über die Segnungen der neuesten Gnome-Version diskutieren, aber letztlich sind die so eingeführten Neuerungen kein zwingender Grund für einen Komplettumbau der ganzen Distribution, weder durch eine Neuinstallation, noch durch ein Distributions-Update.

Was für Firefox, Google Chrome und Thunderbird nun schon seit Jahren selbstverständlich ist, nämlich ein sofortiges Update zur nächsten Version sobald diese fertig ist, genau das will ich auch für andere Werkzeuge des täglichen Bedarfs: git, ssh, zsh, Python, Emacs, vi, Gimp, LibreOffice usw.

Rolling-Release-Distributionen

Die Lösung sind Rolling-Release-Distributionen: Nach einer einmaligen Installation werden je nach Gusto und Sicherheitslage täglich, wöchentlich oder monatlich Paket-Updates installiert. Damit bleibt die ganze Distribution auf dem aktuellen Stand — über viele Jahre hinweg (im Idealfall über die ganze Lebensdauer des Computers).

Natürlich gibt es derartige Distributionen seit Jahren, ja Jahrzehnten (!), wie der folgende Überblick ohne Anspruch auf Vollständigkeit zeigt:

  • Arch Linux (verfügbar seit 2001) richtet sich schon bei der Installation dezidiert an Experten. In seiner eng umrissenen Zielgruppe ist Arch Linux seit Jahren sehr populär und gewinnt immer mehr Zulauf, zuletzt auch vom Autor dieser Zeilen …
  • EndeavourOS und Manjaro sind benutzerfreundlichere Varianten von Arch Linux. Das reicht immerhin für die Plätze 2 und 4 im distrowatch-Ranking. Auch wenn dieses Ranking umstritten ist, ist es ein Indiz dafür, dass das Rolling-Release-Modell im Mainstream angekommen ist. (Arch Linux, also das Original, lag im April 2022 übrigens nur auf Platz 22.)

  • Mit openSUSE Tumbleweed beweist auch SUSE seit 2014, dass das Rolling-Release-Modell funktioniert. Dennoch fliegt Tumbleweed weitgehend unter dem Radar der IT-Berichterstattung. Es ist schwer zu sagen, ob das am mangelnden Marketing oder an den YaST-Eigenheiten liegt. Persönlich hat meine Begeisterung für SUSE-Distributionen jeder Art in den letzten 10 Jahren stark nachgelassen, wobei ich nicht konkret festmachen kann, weshalb: Vielleicht ist es die Kombination von vielen distributionsspezifischen Sonderwegen kombiniert mit zu wenig aktueller Dokumentation?

  • Der Rolling Rhino Remix versucht, Ubuntu zu einer Rolling-Release-Distribution macht. Im Wesentlichen ersetzt es die regulären Paketquellen durch devel-Quellen. Um die Updates kümmert sich dann das Script rhino-update. Dieser Ansatz ist zwar simpel, richtet sich aber an sehr experimentierfreudige Linux-User. (So gesehen kann man den Debian-Unstable-Zweig sid auch als Rolling-Release-Distribution bezeichnen.)

Rolling Release für die Massen?

Bei aller Begeisterung für die verfügbaren Rolling-Release-Distributionen fristen diese doch ein Nischendasein. Linux-Einsteiger starten typischerweise mit Ubuntu, Mint oder einer ähnlichen Distribution. Um das Rolling-Release-Modell massentauglich zu machen, müsste einer der Big Player, also z.B. Red Hat (IBM) oder Canonical, auf diesen Zug aufspringen. Das ist unwahrscheinlich: Das Rolling-Release-Modell entfaltet seine Attraktivität eher auf dem Desktop als auf dem Server. Red Hat, SUSE, Canonical & Co. verdienen Ihr Geld aber mit Server-Kunden.

Außerdem gibt es für technisch nicht versierte Desktop-Nutzer noch ein Hindernis: Gnome! Mit wirklich jedem Update funktioniert irgendeine der von mir genutzten Extensions nicht mehr (und ich bin schon dankbar, wenn es nur eine ist). Und leider sind viele Gnome-Konzepte einfach inkompatibel zu meinen persönlichen Vorlieben: Ohne Dash-to-Dock mag ich Gnome ganz einfach nicht verwenden.

Fazit

Meine Wünsche werden wohl Träume bleiben. Für mich persönlich heißt die Lösung aktuell Arch Linux. Nach zwei Monaten im Dauereinsatz bin ich auf keine unüberwindlichen Hindernisse gestoßen. Ob meine Begeisterung ausreicht, dass ich mein Notebook bis zu seiner Ablöse ohne Linux-Neuinstallation nutzen kann, muss sich aber erst zeigen.

Dessen ungeachtet kann ich mir nicht vorstellen, dass sich Arch Linux außerhalb der Freak- und Experten-Liga durchsetzt. Das Rolling-Release-Linux, das ich guten Gewissens auf den Rechner eines technisch nicht versierten Freunds oder einer Verwandten installieren würde, habe ich noch nicht gefunden.

Quellen/Links

AlmaLinux 9

29. Mai 2022 um 20:18

Vergleichsweise kurze drei Jahre dauerte es von RHEL 8 bis RHEL 9: Vor ca. zwei Wochen präsentierte Red Hat die neueste Version von Red Hat Enterprise Linux. Diese Linux-Distribution wird in den nächsten Jahren als Referenz für den kommerziellen Linux-Einsatz gelten.

Das Rennen, wer als erster einen RHEL9-Klon fertigstellen kann, hat AlmaLinux gewonnen. AlmaLinux zählt neben Rocky Linux und Oracle Linux zu den drei wichtigsten CentOS-Nachfolgern. (Zur Erinnerung: CentOS, der in der Vergangenheit populärste RHEL-Klon, wurde von Red Hat Ende 2021 eingestellt. CentOS Stream, ein neues Angebot von Red Hat, hat eine andere Zielgruppe als das originale CentOS.)

Nur 9 Tage nach dem RHEL-Release steht AlmaLinux 9 für dieselben vier CPU-Architekturen wie das Original zur Auswahl: x86_64, aarch64, ppc64le und s390. Zusätzlich zu den »gewöhnlichen« Installations-ISO-Images gibt es Live-Images, die neben Gnome auch die (von Red Hat nicht offiziell unterstützten) Desktop-Systeme KDE und Xfce enthalten. AlmaLinux gibt es auch in Form von Docker-Images, zur Installation für den Raspberry Pi, zur Installation im Windows Subsystem for Linux (WSL) sowie für diverse Cloud-Plattformen. Dass AlmaLinux diese riesige Software-Palette wenige Tage nach dem RHEL-Release anbieten kann, ist beeindruckend.

Dieser Blog-Beitrag wirft einen ersten Blick auf AlmaLinux 9 für x86-64-CPUs.

AlmaLinux 9 verwendet Gnome 40 als Desktop

Installation und Betrieb

An der Installation von RHEL bzw. AlmaLinux hat sich im Vergleich zu Version 8 praktisch nichts verändert. Das Installationsprogramm funktioniert unverändert. Unübersichtlich wie eh und je ist die Partitionierung der Datenträger (falls erforderlich). Alle anderen Schritte sind schnell und intuitiv erledigt.

Installation von AlmaLinux 9

Für die Konfiguration von RHEL bzw. AlmaLinux gewinnt Cockpit weiterhin an Bedeutung. Die Webkonsole muss mit systemctl enable --now cockpit.socket aktiviert werden und kann dann über Port 9090 im Webbrowser verwendet werden.

Konfiguration von AlmaLinux durch Cockpit

Für nicht offizielle Zusatzpakete ist EPEL weiterhin die erste Wahl. Die Paketquelle wird unter AlmaLinux einfach mit dnf install epel-release aktiviert.

Versionsnummern

Wie üblich steht bei RHEL 9 und damit auch bei allen Klonen Stabilität vor Aktualität. Im Vergleich zu Version 8 ist der Software-Stack aber doch deutlich aktueller. Das AppStream-Konzept wird von wichtigen Programmiersprachen und Server-Paketen in Zukunft auch neuere Versionen zur Auswahl stellen.

Basis             Desktop             Programmierung   Server
---------------   ------------------  --------------   --------------
Kernel     5.14   Gnome          40   bash       5.1   Apache     2.4
glibc      2.34   Firefox ESR    91   gcc       11.2   CUPS       2.3
X-Server   1.20   Gimp         2.10   git       2.31   MySQL      8.0
Wayland    1.19   LibreOffice   7.1   Java        11   OpenSSH    8.7
Mesa       21.3   Thunderbird    91   PHP        8.0   qemu/KVM   6.2
Systemd     250                       Podman     4.0   Postfix    3.5
NetworkMan 1.36                       Python     3.9   Samba     4.15
GRUB       2.06 

Technische Neuerungen

Abseits der Versions-Updates gibt es in RHEL9 verblüffend wenig »echte« Neuerungen.

  • Firewall: Die Firewall-Funktionen verwenden nun nft als neues Fundament. In der Praxis ändert das vorerst wenig, iptables steht als kompatibles Kommando weiterhin zur Verfügung. Die Release Notes warnen allerdings davor, die in iptables-nft enthaltenen Kommandos einzusetzen. Die Kompatibilitätsschicht wird nicht weiterentwickelt, neue Firewall-Scripts sollen nativ nft verwenden.
  • Netzwerkkonfiguration: Das traditionsreiche Verzeichnis /etc/sysconfig/network-scripts ist jetzt leer. Standardmäßig erfolgt die Konfiguration der Schnittstellen nun direkt durch Dateien im Verzeichnis /etc/NetworkManager/system-connections. (Das NetworkManager-Plugin ifcfg-rh zur Verarbeitung von Konfigurationsdateien in network-scripts steht aber weiterhin zur Verfügung und funktioniert unverändert. Es befindet sich im Paket NetworkManager. Details siehe man nm-settings-ifcfg-rh sowie man NetworkManager.conf.)

  • Core Scheduling: Mit Core Scheduling besteht die Möglichkeit, einer Gruppe von Prozessen eine CPU-Core zuzuweisen. Das kann aus Sicherheits- oder Performance-Gründen zweckmäßig sein. Mehr Details sind hier beschrieben.

  • Grafiksystem: Schon RHEL 8 setzte standardmäßig auf Wayland. Neu ist, dass X.org in den Release Notes nun als deprecated bezeichnet wird. Offensichtlich sollen die X.org-Pakete in zukünftigen RHEL-Versionen entfernt werden. Für die X-Kompatibilität ist Xwayland zuständig.

  • Virtualisierung: Wie schon in RHEL 8 ist virt-manager als deprecated markiert. Das Paket steht aber weiterhin zur Verfügung. Längerfristig soll virt-manager durch Cockpit ersetzt werden.

  • Podman: Red Hat setzt anstelle von Docker weiter auf die Eigenentwicklung Podman. RHEL/AlmaLinux 9 enthält die erst im Februar 2022 vorgestellte Version 4.0 von Podman.

Fazit

RHEL 9 ist, was die technischen Neuerungen betrifft, ein eher unspektakuläres RHEL-Release.

Erfreulich entwickelt hat sich das Angebot der RHEL-Klone: Vor zwei Jahren hatte ich befürchtet, ohne CentOS würde ein riesiges Loch in der RHEL-Welt entstehen. Stattdessen gibt es nun mit Rocky Linux und AlmaLinux zwei neue, sehr aktive und offenbar gut finanzierte Angebote. Zusammen mit Oracle Linux und einigen weiteren Anbietern ist das Klon-Angebot breiter denn je.

Es ist schwer, unter den Klonen einen eindeutigen Favoriten zu erkennen. Seit 18 Monaten sticht Alma Linux aber durch besonders schnelle Reaktionszeiten hervor — d.h. die Wartezeiten nach offiziellen RHEL-Releases beträgt jeweils nur wenige Tage. Insgesamt ist es beruhigend zu sehen, dass es nicht ein Angebot gibt, sondern eine gesunde Konkurrenz zwischen mehreren Anbietern (samt Scripts, die einen unkomplizierten Wechsel ermöglichen).

Quellen/Links

Red Hat Enterprise Linux 9

Sonstiges

Kali Linux als virtuelle Maschine unter macOS mit UTM ausführen

08. Juni 2022 um 19:30

Der Einsatz von Kali Linux auf einem »alten« Apple-Rechner ist einfach: Sie installieren zuerst VirtualBox und dann in einer virtuellen Maschine die x86-Version von Kali Linux. Die Vorgehensweise ist im Internet vielfach dokumentiert.

Schon etwas komplizierter wird die Sache, wenn Sie einen M1- oder demnächst einen M2-Mac besitzen. VirtualBox steht für diese CPU-Architektur nicht zur Verfügung. Sie haben die Wahl zwischen den beiden kommerziellen und relativ teuren Virtualisierungssystemen Parallels und VMware Fusion sowie dem Programm UTM, das auf der unter Linux beliebten Virtualisierungs-Software QEMU basiert. Dieser Blog-Beitrag zeigt, wie Sie die ARM-Variante von Kali Linux unter UTM installieren.

Die ARM-Variante von Kali Linux läuft in einem Fenster unter macOS (getestet auf einem Mac Mini M1)

UTM

Sie können UTM wahlweise für nur 10 € im Apple Store kaufen und so die Entwickler ein wenig unterstützen oder die App kostenlos von der folgenden Seite herunterladen:

https://mac.getutm.app

UTM ist eine einfache, aber funktionelle Oberfläche für das unter Linux etablierte Programm QEMU. Sie können damit Linux-Distributionen installieren, die als ARM64-Image vorliegen.

Die Virtualisierungsoberfläche »UTM« unter macOS, hier mit zwei virtuellen Maschinen, Ubuntu und Kali Linux

Kali-Installation

Als Basis für die Kali-Installation wählen Sie auf der Kali-Download-Seite die Variante Bare Metal / Apple M1 / Installer aus. Die ISO-Datei ist ca. 2,5 GByte groß:

https://www.kali.org/get-kali/#kali-bare-metal

Nun richten Sie in UTM eine neue virtuelle Maschine ein. Im ersten Dialog des Assistenten wählen Sie die Option Virtualize, im zweiten Dialog geben Sie an, dass Sie eine Linux-Distribution ausführen möchten. Im dritten Dialog wählen Sie mit Browse das zuvor heruntergeladene Kali-Installations-Image aus. Die Optionen Use Apple Virtualization und Boot from kernel image bleiben deaktiviert.

In den nächsten zwei Dialogen geht es um die Hardware-Ausstattung der virtuellen Maschine. Je nachdem, wie üppig Ihr Mac ausgestattet ist, sollten Sie der virtuellen Maschine 2 bis 4 GByte RAM sowie zwei CPU-Cores zuweisen. Kali benötigt einen virtuellen Datenträger von zumindet 15 GByte. Mit 20 bis 25 GByte haben Sie ein wenig Platzreserve.

Im folgenden Dialog Shared Directory können Sie ein macOS-Verzeichnis zum Datenaustausch mit Kali Linux auswählen. Da die Nutzung dieses geteilten Verzeichnisses unter Kali Linux nicht vorgesehen ist, können Sie diesen Punkt überspringen.

Im abschließenden Dialog Summary sollten Sie die Option Open VM Settings aktivieren. Das gibt Ihnen in der Folge die Möglichkeit, zwischen mehreren Netzwerkmodi zu wählen. Für den Einsatz von Kali Linux ist zumeist Bridged empfehlenswert: Damit erhält Kali Linux eine IP-Adresse im lokalen Netzwerk und kann mit diesem kommunizieren. (Diese Einstellung können Sie aber auch nachträglich vornehmen. Dazu stoppen Sie die virtuelle Maschine und öffnen dann im UTM-Hauptfenster den Konfigurationsdialog der virtuellen Maschine.)

Bridged Networking integriert die virtuelle Maschine in das lokale Netzwerk

Nach dem Start der virtuellen Maschine gelangen Sie in das Kali-Boot-Menü. Bei meinen Tests erwies sich das Kommando Graphical Install als nicht zielführend: Das UTM-Fenster wird dann nach wenigen Sekunden vollständig schwarz und verhindert so die Bedienung des Installationsprogramms. (Das Problem ist anscheinend relativ neu. Es gibt hier einen Fehlerbericht.)

Entscheiden Sie sich daher mit Install für eine Installation im Textmodus. Der Ablauf ist exakt gleich wie bei einer Installation im Grafikmodus, die Dialoge sehen nur weniger schön aus; zur Navigation zwischen den Eingabefeldern verwenden Sie die Tabulatortaste.

Beim Kali-Bootmenü müssen Sie »Install« auswählen. »Graphical Install« führt nach wenigen Sekunden in ein schwarzes, nicht mehr bedienbares Fenster.
Software-Auswahl während der Installation

Erster Start und Betrieb

Nach dem Abschluss der Installation wird die virtuelle Maschine neu gestartet. Statt des frisch installierten Systems erscheint allerdings wieder das Installationsprogramm. Das liegt daran, dass die virtuelle Maschine noch immer das ISO-Image als Boot-Medium verwendet. Stoppen Sie die virtuelle Maschine mit dem Button Shut down, klicken Sie dann in der auf das CD/DVD-Symbol rechts in der Fenstertitelleiste und führen Sie CD/DVD (ISO) Image / Eject aus. Beim nächsten Neustart bootet Kali Linux von der virtuellen Disk und läuft dann erfreulicherweise auch im Grafikmodus. Die gewünschte Desktop-Auflösung (und damit auch die Fenstergröße) legen Sie innerhalb von Kali Linux mit Einstellungen / Anzeige fest.

Bei meinen Tests hat Kali Linux innerhalb von UTM ausgezeichnet funktioniert. Allerdings kommt es bei der Bildschirmdarstellung aufgrund der automatisch durchgeführten Skalierung zwischen dem Grafiksystem der virtuellen Maschine und dem Monitor des Macs zu unschönen Farbverschiebungen, vor allem bei der Darstellung von Texten.

Quellen/Links

Docker Desktop für Linux

09. Juni 2022 um 13:17

Docker Desktop ist eine grafische Benutzeroberfläche zu Docker, die manche administrative Aufgaben erleichtert. Ursprünglich stand das Programm nur für Windows und macOS zur Verfügung. Seit Mai 2022 gibt es den Docker Desktop auch für Linux. Für diesen Blog-Artikel habe ich das Programm unter Ubuntu 22.04 kurz ausprobiert. Soviel vorweg: Aufgrund diverser Nachteile gibt es wenig zwingende Gründe, die für den Einsatz sprechen.

Docker Desktop unter Linux

Installation

Ich habe meine Tests unter Ubuntu 22.04 durchgeführt. Auf dem Rechner waren bisher keine Docker-Pakete installiert. Beachten Sie, dass der Docker Desktop keine Erweiterung zu einer vorhandenen Docker-Installation ist. Vielmehr sollten Sie diese vollständig entfernen, bevor Sie mit der Installation beginnen!

Bevor Sie den Docker Desktop installieren können, müssen Sie die Docker-eigene Paketquelle einrichten (Quelle):

sudo apt update

sudo apt install ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Absurderweise enthält diese Paketquelle zwar diverse Docker-Pakete, nicht aber den Docker Desktop. Den müssen Sie manuell als DEB-Paket von der folgenden Seite herunterladen. (Der Grund für diese umständliche Vorgehensweise sind vermutlich die abweichenden Lizenzen. Der Docker Desktop steht zwar Privatanwendern kostenlos zur Verfügung. Es handelt sich aber nicht um Open-Source-Code. Für den kommerziellen Einsatz sind je nach Unternehmensgröße Lizenzgebühren erforderlich.)

https://docs.docker.com/desktop/release-notes

Das lokal heruntergeladene Paket samt aller Abhängigkeiten installieren Sie nun so:

sudo apt update

sudo apt install Downloads/docker-desktop-4.9.0-amd64.deb

Zum Ende der Installation wird eine Warnung angezeigt, die Sie aber ignorieren können:

N: Der Download wird als root und nicht Sandbox-geschützt durchgeführt, 
da auf die Datei »/home/kofler/Downloads/docker-desktop-4.9.0-amd64.deb« 
durch den Benutzer »_apt« nicht zugegriffen werden kann. 
pkgAcquire::Run (13: Keine Berechtigung)

Betrieb

Im Startmenü bzw. unter Gnome mittels Aktivitäten führen Sie den Docker Desktop nun aus. Der Startvorgang dauert eine Weile. Anschließend können die Kommandos docker und docker compose wie üblich in einem Terminalfenster ausgeführt werden. Docker wurde so eingerichtet, dass das Kommando ohne sudo funktioniert. Den Containern wird standardmäßig eine Netzwerkverbindung in einem privaten Netzwerk in 172.*.*.* zugewiesen.

docker run -it --rm alpine

<alpine># ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN qlen 1000
    link/tunnel6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

Nachdem die Hürden der Installation einmal überwunden waren, hat Docker ausgezeichnet funktioniert. Im Vergleich zur reinen Verwendung des Kommandos docker hilft der Docker Desktop beim Einstieg in die Container-Welt sowie bei der Verwaltung aller jemals ausgeführten Container, aller heruntergeladenen Images sowie der von den Container genutzten Volumes. Wirklich essentiell ist keine dieser Funktionen, aber natürlich erleichtern sie die ersten Schritte.

Interna

Hinter den Kulissen ist für die Ausführung der Docker-Container eine virtuelle Maschine zuständig, die vom Docker Desktop automatisch gestartet wird. Auf meinem Rechner mit 16 GByte RAM und einer CPU mit 4 Cores hat der Docker Desktop für sich knapp 4 GByte RAM und 2 Cores reserviert. Für das Disk Image der Maschine sind 64 GByte vorgesehen. (Anfänglich ist die Datei aber zum Glück wesentlich kleiner.) QEMU-Experten können sich in der Prozessliste die Optionen ansehen, die für die Ausführung der virtuellen Maschine verwendet werden.

ps axu | grep qemu

kofler     40338  3.5 26.0 6470936 4223024 ?     Sl   13:13   0:54 qemu-system-x86_64 -accel kvm -cpu host -machine q35 -m 3962 -smp 2 -kernel /opt/docker-desktop/linuxkit/kernel -append page_poison=1 vsyscall=emulate panic=1 nospec_store_bypass_disable noibrs noibpb no_stf_barrier mitigations=off linuxkit.unified_cgroup_hierarchy=1 vpnkit.connect=tcp+bootstrap+client://gateway.docker.internal:42021/974498b84e0cf777fec14624fda4ca7bb07343ae3bbed05f397d28bbf707b784 vpnkit.disable=osxfs-data console=ttyS0 -initrd /opt/docker-desktop/linuxkit/initrd.img -serial pipe:/tmp/qemu-console1100778794/fifo -drive if=none,file=/home/kofler/.docker/desktop/vms/0/data/Docker.raw,format=raw,id=hd0 -device virtio-blk-pci,drive=hd0,serial=dummyserial -netdev user,id=net0,ipv6=off,net=192.168.65.0/24,dhcpstart=192.168.65.9 -device virtio-net-pci,netdev=net0 -vga none -nographic -monitor none -object memory-backend-memfd,id=mem,size=3962M,share=on -numa node,memdev=mem -chardev socket,id=char0,path=/home/kofler/.docker/desktop/virtiofs.sock0 -device vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=virtiofs0

Der Docker Desktop samt seiner virtuellen Maschine läuft ohne root-Rechte als Prozess des lokalen Benutzers.

systemctl --user status docker-desktop

  docker-desktop.service - Docker Desktop
     Loaded: loaded (/usr/lib/systemd/user/docker-desktop.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-09 13:13:50 CEST; 9min ago
   Main PID: 40088 (com.docker.back)
      Tasks: 157 (limit: 18937)
     Memory: 5.8G


docker version

Client: Docker Engine - Community
 Cloud integration: v1.0.25
 Version:           20.10.17
 API version:       1.41
 ...
 Context:           desktop-linux
 Experimental:      true

Server: Docker Desktop 4.9.0 (80466)
 Engine:
  Version:          20.10.16
  API version:      1.41 (minimum version 1.12)
  ...
 containerd:
  Version:          1.6.4
  GitCommit:        212e8b6fa2f44b9c21b2798135fc6fb7c53efc16
 runc:
  Version:          1.1.1
  GitCommit:        v1.1.1-0-g52de29d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Die Eckdaten der virtuellen Maschine können in der Oberfläche des Docker Desktops verändert werden.

Einstellungen für die virtuelle Maschine, in der die Docker-Container ausgeführt werden

Zukunftsvisionen: »Development Environments« versus »Development Containers«

Spannend ist eine neue Funktion, die aktuell aber erst im Preview-Stadium vorliegt: Development Environments (Link zur Dokumentation) sollen es im Zusammenspiel mit git noch einfacher machen, Testversionen bzw. Entwicklungszweige (git-Branches) im Team auszuprobieren — und das, ohne jedesmal alle möglichen Voraussetzungen manuell einzurichten. Möglicherweise führt das die Idee von gewöhnlichen Containern noch einen Schritt weiter.

Das VSCode-Plugin Remote Containers verfolgt mit Development Containern eine ganz ähnliche Idee (Link). Ob sich eines dieser Konzepte durchsetzen kann, ist aktuell noch nicht absehbar.

Fazit

Die grafische Oberfläche des Docker Desktops bietet Linux-Anwendern den gleichen Komfort wie Entwicklern, die Docker unter macOS oder Windows ausführen. Das ist an sich sehr erfreulich.

Der Docker Desktop enthält allerdings keine wirklich relevanten Funktionen, die nicht schon bisher auf Kommandoebene zur Verfügung standen. Gegen den Einsatz von Docker Desktop sprechen diverse Gründe:

  • Die Installation ist verblüffend umständlich. (Die Docker-Installation war schon immer relativ umständlich, weil nur wenige Distributionen aktuelle Docker-Pakete zur Verfügung stellen. Aber dass Docker Desktop die Sache noch komplizierter macht, ist absurd.)

  • Docker Desktop ist ein Komplettpaket inklusive aller Docker-Tools. Es ersetzt die bisherigen Pakete. Eine Installation des Docker Desktop parallel zu einem schon vorhandenen Docker-Setup ist nicht möglich.

  • Der Docker Desktop verwendet eine virtuelle Maschine zur Ausführung von Containern. Dadurch ergibt sich eine bessere Trennung zwischen dem Host-Rechner und den Docker-Container. Allerdings geht ein wesentlicher Vorteil von Docker unter Linux verloren, nämlich die nahtlose Integration von Docker-Containern in die Prozess- und Speicherverwaltung des Hosts. Der für die virtuelle Maschine reservierte Speicher wird zur Gänze Docker zugeteilt, ganz egal, wie viele oder wenige Container gerade ausgeführt werden. Auf Entwicklungsrechnern mag dieser Ansatz eine gewisse Berechtigung haben. Für das Deployment am Server ist der Docker Desktop definitiv ungeeignet (und auch gar nicht vorgesehen).

  • Weil der Docker Desktop eine virtuelle Maschine benötigt, kann der Docker Desktop nur bei nativen Linux-Installationen genutzt werden — nicht aber, wenn Linux selbst in einer virtuellen Maschine läuft. Vermutlich ist das ein Grund, warum bisher so wenig Testberichte zum Docker Desktop erschienen sind …

  • Der Docker Desktop steht Privatanwendern zwar kostenlos zur Verfügung, es handelt sich aber nicht um ein ein Open-Source-Programm. Der kommerziellen Einsatz ist in großen Unternehmen (>250 Mitarbeiter oder >10 Millionen $ Jahresumsatz) kostenpflichtig.

Quellen/Links

📚 Photovoltaik-Buch erschienen

25. November 2022 um 16:28

Zusammen mit Christian Ofenheusle habe ich im Sommer das Buch »Photovoltaik« verfasst. Es richtet sich an alle, die Stromkosten mit einer PV-Anlage senken möchten oder ein Balkonkraftwerk in Betrieb nehmen möchten. Das Buch erklärt alle relevanten Grundlagen und konzentriert sich auf die optimale Planung. Nach der Lektüre verstehen Sie Ihre (geplante) PV-Anlage und können das Angebot Ihrer Installateurfirma kritisch hinterfragen.

Cover

Erschienen: Ende November 2022
Umfang: 214 Seiten
Autoren: Michael Kofler und Christian Ofenheusle
ISBN: 978-3-8362-9439-3
Preis: Euro 39,90 (in D inkl. MWSt.)

Aus dem Inhalt

  • Von Kilo, Watt und Peak: Wie viel Strom braucht man eigentlich? Wo kann man sparen?
  • Technik: PV-Module, Wechselrichter, Maximum Power Point Tracking
  • Speichersysteme und Batterien
  • Notstromfunktion und Inselanlage
  • Das Balkonkraftwerk
  • PV-Anlagen für Ein- und Mehrfamilienhäuser
  • Wärmepumpen
  • Best Practices und Fallstricke
  • Förderungen und EEG

Mehr Details …

Multipass: Ubuntu-VMs unter Windows, macOS und Linux ausführen

19. September 2022 um 14:49

Multipass ist eine von Canonical entwickelte Software, um Ubuntu als virtuelle Maschine unter Linux, Windows oder macOS auszuführen. Ich bin über Multipass gestolpert, weil ich eine unkomplizierte Möglichkeit suchte, Ubuntu unter macOS mit M1/M2-CPU auszuführen. Dieser Artikel stellt zuerst Multipass kurz vor. Es folgt eine persönliche (= subjektive) Wertung.

Multipass installieren

  • Windows, macOS: Für Windows und macOS gibt es jeweils einen Installer, siehe https://multipass.run/install
  • Linux: Für Linux steht leider nur ein Snap-Paket zur Verfügung: sudo snap install multipass

  • Arch Linux stellt Multipass als AUR-Paket zur Verfügung: https://aur.archlinux.org/packages/canonical-multipass (Paket wird lokal kompiliert, das dauert > 15 Minuten; bei mir gab es zuletzt einen Fehler, dem ich nicht auf den Grund gegangen bin)

Multipass Command Line Interface (CLI)

Multipass wird über Kommandos in der Konsole genutzt. Um zu überprüfen, dass die Installation geklappt hat, führen Sie multipass version aus:

multipass version

  multipass   1.10.1+mac
  multipassd  1.10.1+mac

Die zur Auswahl stehenden Multipass-Images ermittelt multipass find:

multipass find

  Image     Aliases     Version    Description
  18.04     bionic      20220901   Ubuntu 18.04 LTS
  20.04     focal,lts   20220824   Ubuntu 20.04 LTS
  22.04     jammy       20220902   Ubuntu 22.04 LTS
  docker                latest     A Docker environment ...
  ...

Um eine neue Instanz zu starten, führen Sie multipass launch aus. Beim ersten Start muss das betreffende Image heruntergeladen werden, hier für Ubuntu 22.04. Der Start weiterer Instanzen erfolgt wesentlich schneller.
Das folgende Kommando erzeugt eine Instanz von Ubuntu 22.04 und gibt dieser den Namen myinstance.

multipass launch -n myinstance 22.04

Standardmäßig erhält die neue VM eine CPU, 1 GB RAM und eine Disk mit 5 GB und NAT-Networking. Andere Eckdaten können Sie mit Parametern festlegen:

  • -c <n>: Anzahl der CPU-Cores
  • -d <n>G: Disk-Größe, -d 15G für 15 GB Disk
  • -m <n>M oder -m <n>G: RAM, z.B. -m 4G für 4 GB RAM
  • -n <name> oder -n primary: gibt der VM einen Namen bzw. macht sie zur primären Instanz

multipass launch startet die VM, führt sie aber im Hintergrund aus. Um die VM zu bedienen, führen Sie multipass shell <name> aus:

multipass shell myinstance

  Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-47-generic aarch64)
  ...

Als Standard-User ist ubuntu aktiv. Dieser Benutzer ist nicht mit einem Passwort abgesichert und hat sudo-Rechte. Auch wenn Multipass-VMs normalerweise nur in einem privaten Netzwerk zugänglich sind (192.168.*.*), sollten Sie den ubuntu-Account mit einem Passwort absichern: sudo passwd ubuntu.

multipass list listet die aktuell eingerichteten Instanzen auf und gibt an, welche IP-Adresse der Instanz zugeordnet ist.

multipass list

  Name          State         IPv4             Image
  primary       Running       192.168.64.7     Ubuntu 22.04 LTS
  myinstance    Running       192.168.64.8     Ubuntu 22.04 LTS

Mit multipass info <name> können Sie mehr Details zu einer VM ermitteln.

multipass info myinstance

  Name:           myinstance
  State:          Running
  IPv4:           192.168.64.8
  Release:        Ubuntu 22.04.1 LTS
  Image hash:     9620f479bd5a (Ubuntu 22.04 LTS)
  Load:           0.28 0.25 0.10
  Disk usage:     1.4G out of 4.7G
  Memory usage:   153.5M out of 961.9M

multipass start <name> oder multipass stop <name> startet bzw. beendet die Ausführung einer VM.

multipass delete <name> löscht die VM vorläufig. Der Vorgang kann mit multipass revover rückgängig gemacht werden.

Erst multipass purge entfernt die zuvor gelöschten VMs endgültig und gibt den Speicher frei.

Weitere CLI-Kommandos sind hier dokumentiert.

Primäre VM

Eine VM kann als »primär« gekennzeichnet werden (launch -n primary ...). Das hat zwei Konsequenzen:

  • An einige multipass-Kommando braucht kein Name als Parameter übergeben werden. Beispielsweise bezieht sich multipass shell automatisch auf die primäre Instanz.
  • Innerhalb der VM steht das lokale Heimatverzeichnis (also das des Host-Computers) unter /home/ubuntu/Home zur Verfügung. Das ermöglicht einen unkomplizierten, nahtlosen Zugriff auf Host-Dateien durch die VM.

Bridged Networking

Wenn Sie VMs in das lokale Netzwerk integrieren möchten, ermitteln Sie zuerst mit multipass networks die zur Auswahl stehenden Netzwerkschnittstellen und aktivieren dann eine davon für die Netzwerkbrücke:

multipass networks

  Name     Type         Description
  bridge0  bridge       Network bridge with en2, en3
  en0      ethernet     Ethernet
  en1      wifi         Wi-Fi
  en2      thunderbolt  Thunderbolt 1
  ...

multipass set local.bridged-network=en1

In der Folge können Sie an multipass launch die Option --bridged übergeben.

Ubuntu samt Desktop installieren

Um Ubuntu samt Desktop zu installieren, müssen Sie die VM ausreichend groß dimensionieren:

multipass launch 22.04 -n primary -c 2 -m 4G -d 15G

  Launched: primary                                                               
  Mounted '/Users/kofler' into 'primary:Home'

Nach dem Einrichten verbinden Sie sich mit der VM, legen ein Passwort für den Benutzer ubuntu fest und installieren alle Updates:

multipass shell

  ubuntu@primary:~$ sudo passwd ubuntu
  New password: 
  Retype new password: 

  ubuntu@primary:~$ sudo apt update

  ubuntu@primary:~$ sudo apt full-upgrade -y

Zur Installation eines Desktops samt RDP-Server gehen Sie so vor:

  ubuntu@primary:~$ sudo apt install ubuntu-desktop xrdp -y

Sie müssen wissen, welche IP-Adresse Ihre VM hat. Dazu führen Sie innerhalb der VM hostname -I aus, oder außerhalb multipass list.

ubuntu@primary:~$ hostname -I

  192.168.64.10

Jetzt brauchen Sie einen RDP-Client. Unter Linux funktionieren die meisten VNC-Viewer. Unter macOS installieren Sie am einfachsten im App Store Microsoft Remote Desktop. Dort richten Sie eine neue Verbindung ein und verwenden die zuvor ermittelte IP-Adresse. In der Regel ist es sinnvoll, die Option Start session in full screen zu deaktivieren. Hingegen ist die Optionen Update the session resultion on resize zweckmäßig. Die Anpassung der virtuellen Bildschirmauflösung hat bei meinen Tests (macOS als Host-System) ausgezeichnet funktioniert. Außerdem sollten Sie als User account ubuntu angeben.

Beim ersten Start erscheint der Ubuntu-Setup-Assistent. Dort können Sie das deutsche Tastaturlayout hinzufügen. (Standardmäßig ist nur das englische Layout installiert.)

Der Desktop erscheint in englischer Sprache. Die Umstellung auf Deutsch können Sie im Programm Settings durchführen. Die Änderung wird nur wirksam, wenn Sie sich aus- und neu einloggen.

Grundsätzlich hat der Ubuntu-Desktop bei meinen Tests ausgezeichnet funktioniert — allerdings mit »Vanilla Gnome«, d.h. ohne die Ubuntu-spezifischen Erweiterungen wie dem verschiebbaren Dock. Auch die entsprechenden Optionen im Programm Einstellungen fehlen. (Die Optionen tauchen auf, wenn das Einstellungsprogramm mit XDG_CURRENT_DESKTOP=ubuntu:GNOME gnome-control-center gestartet wird. Aber die Ubuntu-spezifischen Einstellungen bleiben wirkungslos.)

Ubuntu wird auf einem Mac mit M1-CPU ausgeführt und über ein RDP-Fenster bedient.

Multipass versus herkömmliche Virtualisierungssysteme versus Container

Eigentlich möchte man meinen, es gäbe bereits genug Software zur Ausführung von virtuellen Maschinen und Containern. Was kann Multipass also bieten, was andere Programme nicht können? Und wo sind die Grenzen von Multipass?

Im Gegensatz zu Docker oder Podman findet bei Multipass eine echte Virtualisierung statt. Der Overhead einer Installation ist deswegen vergleichsweise groß. Andererseits steht Ubuntu »komplett« zur Verfügung, d.h. mit systemd, mit verschiedenen Benutzern etc.

Standardmäßig werden keine Desktop-Pakete installiert. Diese können nachinstalliert werden. Das setzt aber voraus, dass die VM ausreichend groß dimensioniert ist (RAM, Speicherplatz).

Im Vergleich zu Virtualisierungsprogrammen wie VirtualBox, VMware & Co. hat Multipass keine grafische Oberfläche. Für Profis ist das kein Nachteil, für Einsteiger schon. Es gibt auch keine Grafiktreiber etc. Die Desktop-Nutzung erfolgt über RDP (ein Netzwerkprotokoll) und ist vergleichsweise langsam. Ausreichend schnell für Entwickleraufgaben, aber nicht ideal, um Videos abzuspielen oder Spiele zu spielen.

Der größte Nachteil von Multipass im Vergleich zu Virtualisierungs- und Container-Software besteht darin, dass nur Ubuntu ausgeführt werden kann. Multipass ist also keine universelle Lösung, sondern ein Admin- und Developer-Tool für die Ubuntu-Gemeinde.

Positiv: Multipass ist Open-Source-Software, die Quellen sind auf GitHub zu finden.

Persönliche Bewertung

Meine Beweggründe, mich überhaupt mit Multipass auseinanderzusetzen, ist der Linux-Unterricht. 2/3 der Studentinnen arbeiten mit einem Windows-Notebook, 1/3 mit MacBooks, vielleicht halb/halb mit Intel/Apple-CPU. Jetzt sollen alle eine VM mit Ubuntu installieren. Früher war das einfach: Alle verwenden VirtualBox und richten damit eine VM mit Ubuntu ein (oder Fedora, oder Debian, egal, solange es für alle einheitlich ist).

Heute geht das nicht mehr:

  • Unter Windows zickt VirtualBox in einen unerträglichen Ausmaß. Ob Microsoft daran Schuld ist (ständige Änderungen an Hyper-V) oder Virtualbox (weil es Hyper-V nicht korrekt nutzt), kann ich nicht beurteile — es ist eigentlich egal. Fakt ist, dass in einer Gruppe von 20 Studierenden VirtualBox bei mindestens zwei nicht funktioniert und die Probleme sich nicht trivial lösen lassen.
  • Unter macOS läuft VirtualBox nur auf alten Geräten mit Intel-CPU. Auf modernen Geräten mit Apple Silicon (M1, M2 usw.) ist Virtualisierung zwar auch möglich, aber das ist entweder teuer (Parallels, VMware) oder wenig intuitiv (UTM, siehe https://mac.getutm.app/).

Unter Windows kann ich auf WSL ausweichen. Das funktioniert verblüffend gut, aber ist für den Unterricht kein vollwertiger Ersatz. Kein cron, kein systemd etc. Grafische Desktop-Oberflächen laufen auch nur über Umwegen.

Auf allen OS kann ich Docker verwenden. Aber ein Ubuntu-Container ist halt auch kein vollwertiger Ersatz, selbst wenn man vom fehlenden Desktop absieht. Docker hat eine ganz andere Zielsetzung (und da brilliert es).

Zurück zu Multipass: Der Charme besteht darin, dass es OS-übergreifend einen einheitlichen Weg bietet, um Ubuntu in einer virtuellen Maschine auszuführen. Der Desktop-Zugriff erfolgt über RDP, was für den Unterricht gut genug ist. Multipass greift auf das Virtualisierungsframework des jeweiligen Betriebssystem zurück, erfindet diesbezüglich das Rad also nicht neu.

Aber:

  • Das Einrichten einer Ubuntu-VM in Multipass ist nicht trivial. Für meinen spezifischen Einsatzzweck ist es jedenfalls ungeeignet. Multipass richtet sich an Profis, nicht an Einsteiger.
  • Ubuntu-only ist auch irgendwie sinnlos. Aus meiner Sicht ist Ubuntu für den Linux-Unterricht gut genug, aber vielleicht will ich Server-Administration unterrichten. Da wäre mir dann Rocky oder Alma Linux lieber. Oder ich bin mit Debian vertrauter als mit Ubuntu, will Snap aus dem Weg gehen usw.

  • Linux-hostseitig wird Multipass auch nur als Snap-Paket angeboten. In der engen Canonical-Welt mag das OK sein, aber nicht jeder ist ein Fan von Snap.

Langer Rede kurzer Sinn: Multipass richtet sich in erster Linie an Entwickler und Admins, die ausschließlich mit Ubuntu arbeiten. Für diese Zielgruppe ist Multipass durchaus interessant.

Multipass ist auch ein relativ einfacher Weg, um Ubuntu (samt Desktop) auf einem Mac mit M1/M2-CPU auszuführen.

Darüberhinaus ist es aber wohl doch nur eine weitere Insellösung/Eigenentwicklung von Canonical mit ungewisser Zukunft. Die Zielgruppe ist so eng, dass ein Durchbruch aus der Nische nicht zu erwarten ist. Das ist schade, weil Multipass durchaus vielversprechende Ansätze zeigt.

Quellen/Links

Ubuntu 22.04 in VirtualBox (Windows-Host) installieren

17. Oktober 2022 um 19:17

Wer Linux ausprobieren oder samt Desktop anwenden möchte, unter Windows arbeitet und keine physische Installation durchführen will, für den/die ist das Virtualisierungssystem VirtualBox eine attraktive Wahl. Dieser Artikel fasst die wichtigsten Schritte einer Installation von Ubuntu 22.04 zusammen und erklärt auch die Nutzung der Gasterweiterungen und die Konfiguration für eine SSH-Verbindung zwischen Host (=Windows) und der Virtuellen Maschine (VM).

Testumgebung: Windows-PC mit Intel-CPU, Windows 11 Pro mit 22H2-Update (Hyper-V und WSL aktiviert), VirtualBox 7.0

VirtualBox 7 unter Windows 11 mit einer virtuellen Maschine mit Ubuntu 22.04

Der erste Schritt ist die Installation von VirtualBox. Dieses Virtualisierungssystem von Oracle kann von der folgenden Seite kostenlos heruntergeladen werden:

https://www.virtualbox.org/wiki/Downloads

Beachten Sie, dass das Grundprodukt VirtualBox zwar kostenlos genutzt werden darf, das diese Regel aber nicht für das optionale VirtualBox Extension Pack gilt! Dessen Nutzung ist nur Privatnutzern bzw. zur Evaluation erlaubt, erfordert beim Einsatz in Firmen aber eine Lizenz! Die im Extension Pack enthaltenen Funktionen (RDP, Disk Image Verschlüsselung, NVMe und PXE Boot für Intel Systeme) werden normalerweise nicht benötigt. Wenn Sie unsicher sind, installieren Sie das Extension Pack nicht!

Virtuelle Maschine (VM) einrichten

Als Grundlage für die Installation müssen Sie von der Ubuntu-Website ein ISO-Image für Ubuntu 22.04 (64 Bit) herunterladen.

https://ubuntu.com/download/desktop

Mit dem Button Neu starten Sie die Installation einer neuen VM. Im ersten Dialog müssen Sie der VM einen Namen geben, einen Speicherort am Hostsystem (in unserem Fall ist das Windows) angeben, ein ISO-Image auswählen sowie Linux-Typ und -Versionsnummer auswählen.

Neue virtuelle Maschine einrichten

Ubuntu 22.04 wird von VirtualBox besonders gut unterstützt. Standardmäßig wird eine Unattended Installation durchgeführt. Damit kommen Sie mit dem Installationsprogramm von Ubuntu gar nicht in Berührung. Stattdessen geben Sie den Hostnamen, den Benutzernamen und das Passwort für die Ubuntu-VM vorweg in einem VirtualBox-Dialog an. In der virtuellen Maschine werden die sogenannten »Gasterweiterungen« automatisch installiert. Das ermöglicht eine bessere Integration zwischen Hostsystem (Windows) und Gast (Ubuntu), z.B. zum Austausch von Text über die Zwischenablage oder zum Austausch von Dateien über ein gemeinsames Verzeichnis (Shared Folder).

Tipp: Verwenden Sie ein Passwort ohne Sonderzeichen und ohne die Buchstaben Y und Z. Nach der Installation gilt für den Ubuntu-Login das US-Tastaturlayout.

Einstellungen für die »Unattended Installation«

Bevor es richtig losgeht, müssen Sie noch die Eckdaten der VM einstellen. Meine Empfehlung:

  • unbedingt 4 GByte Hauptspeicher/RAM (nicht nur 2 GByte, wie der VirtualBox-Assistent empfieht)
  • 2 CPU-Cores
  • 25 GByte Disk Size (außer, Sie haben vor, in der VM viele große Dateien zu speichern — dann brauchen Sie mehr)

Den Arbeitsspeicher und das RAM können Sie bei Bedarf später unkompliziert verändern. Die Disk-Größe kann hingegen nur sehr umständlich vergrößert werden, eine Verkleinerung ist nahezu unmöglich. Vergleichsweise einfach ist es, später eine zweite Disk hinzuzufügen. Allerdings müssen Sie schon etwas Linux-Erfahrung haben, um die zweite Disk dann auch innerhalb von Ubuntu sinnvoll nützen zu können.

RAM-Größe und CPU-Anzahl einstellen
Größe der virtuellen Disk konfigurieren
Zusammenfassung aller Einstellungen

Nach dem Zusammenfassungsdialog startet VirtualBox die virtuelle Maschine und führt darin — wie von Zauberhand — die gesamte Installation durch. Das dauert einige Minuten, während der Sie nur zusehen können (oder sich einer anderen Aufgabe zuwenden).

Erste Schritte in Ubuntu

Nach Abschluss der Installation wird die virtuelle Maschine neu gestartet. Sie können sich jetzt einloggen, wobei Sie den im Dialog »Unattended Installation« Namen und das dort gewählte Passwort angeben. Das VirtualBox-Fenster ist anfänglich ziemlich klein. Sie können es einfach vergrößern, die Auflösung des Desktops der virtuellen Maschine passt sich automatisch an.

Ein Nachteil der Unattended Installation besteht darin, dass Ubuntu beim ersten Start Englisch als Sprache verwendet und ein US-Tastaturlayout vorsieht. Um die Einstellungen zu ändern, starten Sie das Programm Settings, am einfachsten im Systemmenü, das Sie rechts oben im Panel öffnen.

Die Spracheinstellungen finden Sie im Modul Region & Lanugage. Mit Manage Installed Languages und Install/Remove Language fügen Sie German hinzu. (Dabei müssen diverse Pakete installiert werden, weswegen dieser Vorgang ca. eine Minute dauert.) Schließlich können Sie die Präferenz der Sprachen einstellen, in dem Sie Deutsch in der Liste der installierten Sprachen ganz nach oben verschieben. Die geänderte Sprache ist noch nicht aktiv — dazu müssen Sie sich aus- und neu einloggen.

Vorher sollten Sie gleich noch das Tastaturlayout ändern. Dazu wechseln Sie im Einstellungsprogramm in den Dialog Keyboard, fügen zuerst das neue Layout German hinzu und entfernen dann das Layout English (US).

Damit diese Einstellungen wirksam werden, müssen Sie sich aus- und neu einloggen. Im Systemmenü, das Sie rechts oben im Panel öffnen, klicken Sie zuerst auf Power Off/Log Out und im nun erscheinenden Untermenü auf Log Out.

Default-Sprache einstellen
Tastaturlayout einstellen

sudo-Ärger

Normalerweise hat der erste in Ubuntu eingerichtete Benutzer sudo-Rechte. Dafür gibt es unter Ubuntu kein Passwort für den Benutzer root.

Wenn Sie in VirtualBox die Unattended Installation durchgeführt haben, gelten andere Regeln: Der eingerichtete Benutzer gehört nicht zur sudo-Gruppe und hat entsprechend keine administrativen Rechte. Dafür hat der Benutzer root das gleiche Passwort, das Sie dem Standardbenutzer zugewiesen haben.

Damit sich Ubuntu auch in VirtualBox so verhält wie immer, öffnen Sie über Aktivitäten ein Terminal-Fenster und führen dann die folgenden Kommandos aus, mit denen Sie den Standardbenutzer der Gruppe sudo hinzufügen:

username$ su -l 

  Passwort: ********   (das Passwort, das Sie in VirtualBox 
                        vor der Installation angegeben haben)

root# usermod -a -G sudo <username>

Anstelle von <username> geben Sie den Namen Ihres Accounts an.

Die Änderung wird wiederum erst wirksam, wenn Sie sich in Ubuntu aus- und neu einloggen.

Nachdem Sie sudo repariert haben, können Sie — wenn Sie möchten — noch das Tastaturlayout für den Ubuntu-Login auf Deutsch umstellen. Dazu öffnen Sie ein Terminal-Fenster und führen dort sudo dpkg-reconfigure keyboard-configuration aus. Als Tastaturmodell wählen Sie Generic 105-key PC, als Sprache German. Alle weiteren Optionen bestätigen Sie einfach mit Return.

Zwischenablage aktivieren

Damit Sie unkompliziert Text zwischen dem Host-Rechner (Windows) und der virtuellen Maschine (Ubuntu) über die Zwischenablage austauschen können, führen Sie im Menü des VirtualBox-Fensters Geräte / Gemeinsame Zwischenablage / Bidirektional aus. (Diese Funktion setzt voraus, dass in der virtuellen Maschine die VirtualBox-Gasterweiterungen installiert sind. Das ist bei der Unattached Installation automatisch der Fall. Wenn Sie eine manuelle Installation von Ubuntu durchgeführt haben, müssen Sie die Pakete virtualbox-guest-utils und virtualbox-guest-x11 installieren und außerdem den Ubuntu-Standardbenutzer der zusätzlichen Gruppe vboxsf zuordnen.)

Aktivierung der gemeinsamen Zwischenablage

Gemeinsames Verzeichnis zum Dateiaustausch einrichten

Über Geräte / Gemeinsame Ordner gelangen Sie in einen Dialog, in dem Sie ein Windows-Verzeichnis (in der folgenden Abbildung: Dokumente) mit einem Verzeichnis innerhalb der virtuellen Maschine (hier: /mnt/win-documents) verbinden können. Damit können Sie innerhalb der virtuellen Maschine unkompliziert auf Windows-Dateien zugreifen. (Auch diese Funktion setzt voraus, dass zuvor die VirtualBox-Gasterweiterungen installiert wurden.)

Verzeichnis zum Austausch von Dateien zwischen Host (hier: Windows) und virtueller Maschine (hier: Ubuntu) einrichten

SSH-Zugriff aktivieren

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.

Die einfachste Lösung ist eine Port-Weiterleitung. Dazu führen Sie im VirtualBox-Fenster Geräte / Netzwerk / Einstellungen aus, 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.

Eine Port-Weiterleitung in der Netzwerkkonfiguration ermöglicht eine SSH-Verbindung zwischen Host (Windows) und Gast (Ubuntu)

Nachdem Sie die Einstellungen gespeichert haben (ein Neustart der virtuellen Maschine ist nicht notwendig), können Sie in cmd.exe oder in der PowerShell von Windows mit dem folgenden Kommando eine SSH-Verbindung in die 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.

Fazit: VirtualBox 7 für Windows ist wieder OK

Die Windows-Variante von VirtualBox 7 hat mich mit dem Programm ein wenig versöhnt. In den letzten Jahren hatte ich unter Windows nämlich derart häufig Stabilitätsprobleme (ausgelöst vermutlich durch das schlechte Zusammenspiel mit Hyper-V), dass ich den Einsatz von VirtualBox für Windows nicht mehr empfohlen habe und diesen auch im Linux-Unterricht — so gut wie möglich — vermieden habe. Mit Version 7 hatte ich diesbezüglich (bisher) keine Probleme — gut so.

Ein wenig irritierend ist der bunte Mix von deutschen und englischen Texten in den Dialogen. Aus meiner Sicht wäre English Only die beste Option. Aber wenn eine deutschsprachige GUI erwünscht ist, wäre es gut, die Lokalisierung konsequent fertigzustellen. So wirkt das halbfertig.

Die Unattended Installation überzeugt mich nicht: Was ich an Zeit während der Installation gespart habe, musste ich später wieder investieren, um Sprach- und Tastatureinstellungen zu ändern und die sudo-Konfiguration zu reparieren. Da ist mir eine manuelle Installation lieber, das weiß ich wenigstens, was ich bekomme. Als einziger Vorteil bleibt die automatische Installation der VirtualBox-Gasterweiterungen, deren manuelle Durchführung mühsam ist.

Nachwort: VirtualBox 7 für Macs mit M1/M2

VirtualBox 7 unterstützt erstmals auch Apple Rechner mit Apple Silicon (M1, M2 …). Oracle weist explizit darauf hin, dass diese Funktionen noch experimentell und langsam sind. Ich habe VirtualBox 7 auf einem Mac Mini mit M1-CPU dennoch ausprobiert, und war etwas konsterniert: Die virtuellen Maschinen müssen eine 32-Bit x86-CPU verwenden (kein 64-Bit x86, auch nicht ARM).

Ganz egal, wie die Performance ist, engt das die Auswahl doch sehr stark ein. Viele Desktop-Distributionen für x86 sind 64-Bit-only. Ich hätte eigentlich erwartet, dass VirtualBox wie UTM auf virtuelle Maschinen für die ARM-Plattform setzt, aber meine diesbezüglichen Experimente sind ins Leere gegangen.

Gescheitert bin ich selbst mit dem Versuch, eine 32-Bit-Version (i386) von Debian zu installieren — selbst hier die Nachricht unsupported CPU. Diese Beta ist wirklich noch sehr experimentell :-(

📚 Hacking & Security (3. Aufl.) erschienen

25. November 2022 um 16:20

Unser Hacking- und Security-Bestseller liegt ab sofort in der 3. Auflage vor!

Für die hier vorliegende Auflage haben wir das Buch umfassend aktualisiert. Neu hinzugekommen sind die Behandlung zusätzlicher Hacking-Techniken, Testumgebungen und Tools. Besonders erwähnen möchten wir:

  • IT-Forensik (neues Kapitel)
  • Intrusion-Detection-Systeme und Snort (neues Kapitel)
  • Bug-Bounty-Programme
  • Sliver, Starkiller, Malduino
  • Purple Teaming
  • Linux Kernel Hardening

Mehr Details und Bestellinformationen finden Sie hier.

Ärger mit Arch und NVIDIA

03. Dezember 2022 um 15:11

Wie berichtet, habe ich mein Arbeits-Notebook im Frühjahr 2022 auf Arch Linux umgestellt. Bisher für mich eine Erfolgsgeschichte, alles läuft, wie es soll, und ich habe stets aktuelle Software. Mein Interesse an anderen Distributionen hat seither spürbar nachgelassen.

Mit dem letzten Update, das ich gestern durchgeführt habe, begann allerdings das Grafiksystem zu spinnen. Während sich der Maus-Cursor weiterhin flüssig bewegt, sinkt die Framerate beim Verschieben eines Fensters auf deutlich unter 1 fps (d.h. vernünftiges Arbeiten ist undenkbar).

Die Umstände des Fehlers sind merkwürdig: Der Totaleinbruch der Grafikgeschwindigkeit kommt nur zustande, wenn mein Notebook mit einem externen 4k-Monitor verbunden ist UND der Notebook-Deckel geschlossen ist.

Hardware: Lenovo P1 mit Hybrid-Grafik Intel/NVIDIA (i7-8750H + Quadro P1000 Mobile)
Software: aktueller Kernel (6.0), aktueller proprietärer NVIDIA-Treiber (525.60), Xorg, GDM, Gnome 43)

Interessanterweise wird die Grafikgeschwindigkeit wieder normal, sobald ich den Notebook-Deckel öffne und somit BEIDE Bildschirme aktiv sind. Und, wie gesagt: das Setup hat jetzt über sieben Monate wunderbar funktioniert, ich habe nichts geändert. Irgendein Update (ich kann nicht sagen, welcher Komponente: Kernel, NVIDIA-Treiber, Xorg?) hat das fragile Gleichgewicht gestört.

Die Lösung: optimus-manager

Kurzes googlen führt zu diesem Forumbeitrag von 2021, der exakt mein Problem beschreibt:

https://bbs.archlinux.org/viewtopic.php?id=270330

Die dort beschriebene Lösung: optimus-manager installieren.

Der optimus-manager ist ein kleines Script, um den Grafiktreiber explizit zwischen einer integrierter CPU-Grafik und der externer GPU umzuschalten. Unter Ubuntu hatte ich in der Vergangenheit schon Erfahrungen mit prime-select gemacht. optimus-manager greift offenbar die gleiche Idee und (zumindest was gdm betrifft) den gleichen Code auf.

Die Aktivierung des optimus-manager verlangt die Installation von zwei AUR-Paketen, eben optimus-manager sowie gdm-prime, eine minimal veränderte Variante von gdm. Ich verwende yay zur Installation:

yay -Sy optimus-manager gdm-prime

Optimus ist anscheinend nicht Wayland-kompatibel. Bei mir ist Wayland sowieso deaktiviert (sonst funktioniert der externe Monitor gar nicht), aber gegebenenfalls müssen Sie eine Zeile in /etc/gdb/custom.conf ändern:

# Datei /etc/gdm/custom.conf
[daemon]
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false

Nach einem Rechner-Neustart wird nur die integrierte Intel-GPU verwendet. Abhilfe schafft:

optimus-manager --switch nvidia

Und danach funktioniert mein Rechner wieder wie in den letzten sieben Monate …

Zwei Stunden wertvolle Lebenszeit vergeudet :-(

Fazit

Nie wieder ein Notebook mit NVIDIA. (Ich wiederhole mich, ich weiß …)

Quellen/Links

WSL mit systemd

04. Dezember 2022 um 10:10

Das Windows Subsystem for Linux ist erwachsen geworden. Es ist nur für Windows 10 und Windows 11 im Microsoft Store erhältlich und gilt nicht mehr als »experimentell«. Der größte Vorteil der neuen Bezugsquelle: WSL-Updates werden in Zukunft unabhängig von Windows-Updates viel einfacher und schneller erfolgen.

Die Umstellung auf die Microsoft-Store-Variante ist denkbar einfach: Entweder installieren Sie WSL einfach aus dem Microsoft Store neu (vorhandene WSL-Distributionen bleiben dabei erhalten), oder Sie führen wsl --update aus (das setzt aber voraus, dass Ihre Windows-Version über alle aktuellen Updates verfügt).

Endlich systemd!

Aus meiner persönlichen Perspektive viel interessanter ist der Umstand, dass WSL nun endlich systemd unterstützt. Die Aktivierung erfolgt ganz einfach, in dem Sie in der WSL-Distribution die Datei /etc/wsl.conf verändern und dort zwei Zeilen hinzufügen:

# in /etc/wsl.conf  (innerhalb der WSL-Distribution)
[boot]
systemd=true

Die Änderung wird erst aktiv, wenn Sie die Distribution beenden, WSL herunterfahren (wsl --shutdown) und die Distribution dann neuerlich starten. Bei meinen Tests hat die systemd-Aktivierung erstaunlicherweise auch bei WSL-Distributionen funktioniert, die schon recht alt waren (z.B. Ubuntu 21.04).

Ubuntu 22.04 unter WSL 2 mit systemd und cron

Der entscheidende Fortschritt im Vergleich zu älteren WSL-Versionen ohne systemd besteht darin, dass es nun endlich unkompliziert möglich ist, Server-Dienste (SSH, Apache, MySQL usw.) so einzurichten, dass Sie mit dem Start der WSL-Distribution automatisch mitaktiviert werden. Auch Cron-Jobs funktionieren jetzt ohne Verrenkungen.

Beachten Sie, dass Server-Dienste nur zur Verfügung stehen, solange die betreffende WSL-Distribution aktiv ist, also ein WSL-Fenster geöffnet ist.

SSH-Ärger

Noch zwei Tipps zum Betrieb eines SSH-Servers unter WSL mit Ubuntu 22.04. Der initiale Start scheitert, weil es keine SSH-Host-Keys gibt, und weil die sonst übliche automatischer Erzeugung beim ersten Start aus mir nicht nachvollziehbaren scheitert. Abhilfe schafft einmalig ssh-keygen -A. Danach führt systemctl enable --now ssh zum Erfolg. Der Versuch, sich von Windows aus mit ssh <name>@172.30.xxx.yyy anzumelden, führt zum Fehler permission denied: publickey. Schuld ist die Einstellung PasswordAuthentication no in /etc/ssh/sshd_config innerhalb von Ubuntu. Stellen Sie die Option auf yes und starten Sie den SSH-Server neu, dann klappt es.

Alles in allem ist die Verwendung von SSH im Zusammenspiel mit WSL + Ubuntu 22.04 weiterhin mühsam.

WSL 1 und WSL 2

WSL liegt in zwei grundlegenden Varianten/Architekturen vor, die (noch) beide gepflegt werden.

  • WSL 2 greift auf einen »echten« Linux-Kernel zurück, der via Hyper-V in einer virtuellen Maschine ausgeführt wird. In den meisten Fällen ist diese Variante vorzuziehen. Sie ist schneller und funktioniert bei Hardware- oder Kernel-nahen Funktionen besser.
  • WSL 1 bildet dagegen Linux-Funktionen nach (und ist aus technischer Sicht viel bemerkenswerter). Die Integration der WSL-Distributionen in das lokale Netzwerk ist anders als bei WSL 2 (manchmal vorteilhafter). Der Hauptunterschied: WSL 1 erfordert keine Virtualisierung, läuft also auch dann, wenn sich Windows selbst in einer virtuellen Maschine befindet!

Standardmäßig wird bei einer WSL-Installation aus dem Microsoft Store nur WSL 2 aktiviert. Die für WSL 1 erforderlichen Features können aber problemlos mit wsl --install --enable-wsl1 nachinstalliert werden.

Losgelöst von der WLS-Architektur 1 und 2 gibt es auch eine WSL-Versionsnummer, die nichts mit der Architektur zu tun hat. wsl --version liefert aktuell 1.0.0.0 und zeigt, dass WSL dem Beta-Stadium entwachsen ist.

Nachwort

Aus meiner Linux-Perspektive ist es immer wieder erstaunlich, wie viele »offizielle« Wege es gibt, um Windows-Komponenten zu installieren:

  • Für WSL oder das neue Terminal verwenden Sie den Microsoft Store.
  • Andere Komponenten wie der SSH-Client und -Server sind tief in den Einstellungen versteckt (Apps / Optionale Features, das muss man wirklich erst mal finden …).

  • Wieder andere Komponenten wie Hyper-V & Co. gelten als Windows Features und werden über das gleichnamige Programm aktiviert.

Da soll noch einer sagen, Linux wäre schwer verständlich ;-)

Quellen/Links

📚 Englische Ausgaben von »Git« und »Docker«

13. Dezember 2022 um 17:13

Wenige Dinge erfreuen Autoren mehr, als die Übersetzung ihrer Werke ins Englische. Gleich zwei Büchern von Bernd Öggl und mir wurde diese Ehre nun zuteil. Nachdem sich die deutschen Ausgaben schon sehr passabel verkauft haben, hoffen wir nun auf einen ähnlichen Erfolg im englischen Sprachraum :-)

Die Übersetzungen sind bei Rheinwerk Publishing alias SAP Press erschienen, können aber auch beim deutschen Verlag bestellt werden:

Die beiden Bücher reihen sich in eine lange Liste weiterer Übersetzungen ein.

Programmieren im Zeitalter von ChatGPT

02. März 2023 um 17:55

ChatGPT ist in aller Munde. Es formuliert in flüssigem Deutsch oder Englisch Hausaufgaben, löst Philosophie-Wiederholungsfragen und fügt bei Bedarf frei erfundene Quellen hinzu, damit der Text seriöser/wissenschaftlicher wirkt. Wenn man das Programm hinweist, dass 2+3 keineswegs 5 ist, entschuldigt es sich höflich für seinen Fehler. Kurzum, Bananen-Software, reift beim Anwender? Ich bin nicht dieser Meinung.

Trotz aller Unzulänglichkeiten schätze ich das Programm mittlerweile so sehr, dass ich bereit wäre, für seine Anwendung zu zahlen. Bisher war das nicht notwendig. Mit ein paar Versuchen ist mir der Login noch jedes Mal gelungen, auch bei angeblich unerwartet hoher Auslastung.

Nun zähle ich nicht zu den Twitter- oder YouTube-Enthusiasten, die Ihnen versprechen, mit ChatGPT 10 x produktiver zu arbeiten oder 10.000 EUR pro Monat extra zu verdienen. Blödsinn! Aber ich bin mittlerweile überzeugt, dass mir ChatGPT mehr Zeit erspart, als ich brauche, um die ca. 23 EUR zu verdienen, die ChatGPT Plus aktuell pro Monat kostet. Und ich bin schon sehr gespannt, welche KI-Tools als Nächstes kommen!

ChatGPT unterstützt mich beim Programmieren

Berufsbedingt wechsle ich zwischen rund einem Dutzend Sprachen hin und her. Manche Sprachen brauche ich beinahe täglich oder zumindest wöchentlich, bei anderen vergehen schon mal etliche Monate von der einen Anwendung zu nächsten. Das bringt es mit sich, dass ich mir einfach nicht auswendig merken kann, wie ich die letzten drei Zeichen einer Zeichenkette in einem SQL-Statement, in der PowerShell oder in Java extrahiere. Wie ich einen regulären Ausdruck in PHP anwende, und welche Funktionen dagegen in Python verwendet werden.

Solange ich nicht in meinen eigenen Büchern nachschauen kann (deren Aufbau kenne ich so gut, dass die Suchzeit gegen Null geht), habe ich mir derartige Fragen bisher meist von Google beantworten lassen. Google führt dann in die Dokumentation der jeweiligen Sprache oder (bevorzugt) auf einen Beitrag von StackOverflow. Und natürlich weiß ich, welche Seiten am ehesten zum Ziel führen. Dessen ungeachtet dauert es üblicherweise ein paar Minuten, um das im Internet präsentierte Wissen auf die eigene Fragestellung anzuwenden, die Streu eines langatmigen Blog-Beitrags vom Weizen zu trennen. (Mit Videos habe ich mich dagegen nie recht anfreunden können. Es dauert einfach viel zu lange, um an die Stelle zu kommen, wo es interessant wird.)

In den letzten zwei Monaten ist die Anzahl meiner Google-Programmier-Suchen stark gesunken. ChatGPT kann auch programmieren! Warum soll ich umständlich nach Details suchen, wenn ChatGPT innerhalb von Sekunden Code liefert, der nicht nur für die ganz spezifische Fragestellung funktioniert, sondern den die KI auch noch erläutert?

Beispiele

Ein Bild sagt mehr als 1000 Worte? Nun denn:

Wie kann ich in einem PHP-Programm das Bearer Token eines GET-Requests ermitteln?
Vor kurzem habe ich einen regulären Ausdruck gebraucht, um ein Datum im US-Format (also mm/dd/yyyy) zu erkennen.
Hier geht es nur um einen Vorschlag für die Struktur (das Grundgerüst) eines Scripts. Um die Details kümmere ich mich dann selbst, d.h. ich mache das wofür ich bezahlt werde, aber verschwende keine Zeit an Trivialitäten.
Ich will in einem Python-Script eine Datei herunterladen, aber ohne Zusatzmodule zu verwenden.
In einer Folgefrage suche ich nach einem Weg, beim GET-Request einen eigenen Header anzugeben. ChatGPT antwortet im Kontext der vorigen Frage.
In einem Bash-Script will ich die Kennung einer Datei auslesen.
ChatGPT kennt auch Kotlin samt der Datenbankbibliothek Exposed. Die Antwort schießt ein wenig über das Ziel hinaus und enthält auch Code, um eine neue Tabelle einzurichten.
Extrem cool: Ich habe Code in einer Sprache (hier in der Bash) und brauche äquivalenten Code in einer anderen Sprache (hier für die PowerShell). Kein Problem für ChatGPT.
Hier hilft ChatGPT bei der Formatierung von Bildern in einem Markdown-Dokument, das mit Pandoc verarbeitet wird. ChatGPT weist auf die Pandoc-spezifische Erweiterung der Markdown-Syntax hin.
ChatGPT hilft auch bei der Linux-Administration. Hier geht es darum, mit »tar« ein inkrementelles Backup zu erstellen.

ChatGPT versus Copilot

Aus Sicht von Entwicklern ist der GitHub Copilot ein kostenpflichtiges Konkurrenzprodukt zu ChatGPT. Der Copilot soll die Code-Erstellung in Editoren wie VSCode beschleunigen. Im Prinzip geben Sie einen möglichst aussagekräftigen Funktions- oder Methodennamen an, und der Copilot schlägt dafür fertigen Code vor. Die Code-Schnipsel kommen aus dem riesigen Angebot öffentlicher Git-Repositories.

Auch der Copilot nutzt KI-Technik bei der Auswahl und Adaptierung von Code-Schnipsel. Copyright-technisch ist das bedenklicher als die Vorgehensweise von ChatGPT, die in der Regel Code wirklich neu generiert. Natürlich kann es passieren, dass der Copilot Code vorschlägt, der bekannte Fehler oder gar Sicherheitslücken enthält. Das sind aber Probleme, die auch bei ChatGPT auftreten können. Letztlich bleibt es die Verantwortung des Entwicklers / der Entwicklerin, den Code zu verstehen und zu entscheiden, ob er für das Problem taugt oder nicht.

Für mich liegt der wesentliche Unterschied zwischen ChatGPT und dem Copilot weniger im produzierten Code als in der Bedienung: Mit ChatGPT kann ich gewissermaßen sprechen, ich kann mein ganz spezifisches Problem in Deutsch oder (besser!) in Englisch beschreiben und erhalte eine Antwort, die exakt auf die Aufgabenstellung eingeht. Bei Bedarf kann ich sogar um eine Nachbesserung im einen oder anderen Punkt bitten. Die Arbeitsweise ist für mich ungleich intuitiver, angenehmer und »menschlicher« als der Ansatz des Copiloten, einfach nur Code zu einer Funktionsdeklaration zu liefern.

Mich hat der Copilot schon in der Beta-Phase nicht so recht begeistert, und mit ChatGPT sieht das Angebot — nur wenige Monate nach der Markteinführung — schon ziemlich alt aus.

Letzte Anmerkungen

  • Ich habe aktuell keine Angst, dass mich ChatGPT oder eine ähnliche Technik als Programmierer, Admin, Vortragender oder Autor ablöst. Für mich ist ChatGPT einfach ein neues Hilfsmittel bei meiner Arbeit.
  • Insofern halte ich es auch für verrückt, den Einsatz in Schulen, Unis etc. zu verbieten. Das Ziel muss es vielmehr sein, KI-Tools produktiv (und durchaus verantwortungsvoll) anwenden zu lernen. Dieser Grundsatz gilt ja auch für andere Werkzeuge, die wir heute als selbstverständlich einsetzen, von der Rechtschreibkorrektur bis zur Nutzung der Wikipedia.
  • Ich bin mir ziemlich sicher, dass der Nutzen von KI-Tools umso höher ist, je größer das eigene Wissen ist. Insofern ersetzen diese Tools weder qualifizierte Mitarbeiter noch deren Ausbildung.
  • Vielleicht bin ich altmodisch, aber ich pflege einen höflichen Umgangston mit ChatGPT und vergleichbaren Werkzeugen.
  • Zu guter Letzt habe ich das Gefühl (das ich aber nicht objektiv belegen kann), dass die Kommunikation in englischer Sprache zu besseren Ergebnissen führt als Anfragen in Deutsch. Grundsätzlich ist es verblüffend, dass ChatGPT nahezu jeder Sprache mächtig ist. Aber die IT-Welt ist englisch. StackOverflow ist englisch. Die Originaldokumentation nahezu jedes IT-Tools ist englisch. Selbst Entwickler, die eine andere Muttersprache haben, verwenden in der Regel englischsprachige Variablen-, Klassen- und Methodennamen, kommentieren ihren Code idealerweise in Englisch. Insofern erscheint es mir nahe liegend, Code-Fragen in Englisch zu formulieren, was sich auch in den meisten Screenshots dieses Texts widerspiegelt.

Links

Eine andere Meinung, etwas skeptischer, aber auch mit wesentlich spezielleren Fragen:

Ubuntu Pro

03. März 2023 um 15:21

Bereits seit einigen Jahren bietet Canonical »Ubuntu Pro« an. Anfänglich war Ubuntu Pro auf AWS-Kunden beschränkt, denen Ubuntu Pro Updates über einen Zeitraum von 10 Jahren garantiert (statt der üblichen fünf Jahre für Ubuntu LTS). Später wurde Ubuntu Pro auf andere Clound-Anbieter ausgedehnt, und seit ein paar Wochen ist Ubuntu Pro als kostenpflichtiges Update-Service auch für »gewöhnliche« Installationen verfügbar. Privat- bzw. Kleinanwender dürfen Ubuntu Pro für fünf Installationen kostenlos nutzen.

Canonical bewirbt Ubuntu Pro beim Login sowie bei der Ausführung des apt-Kommandos. Das hat zu Unmut bei manchen Benutzern gestört. Ich kann das nicht ganz nachvollziehen. Es wird ja niemand gezwungen, Ubuntu Pro zu verwenden. Für manche Anwender bzw. Server-Administratoren ist die 10-jährige Update-Garantie durchaus ein attraktives Angebot. In diesem Beitrag versuche ich das Angebot im Kontext anderer Distributionen (Red Hat Enterprise, kostenlose Klone) einzuordnen.

Update 19.4.2023: Canonical erlaubt im Rahmen von Ubuntu Pro zwar die kostenlose Verwendung der Kernel-Livepatches, allerdings erhalten Sie dann Patches früher als zahlende Kunden. Sie sind quasi ein Beta-Tester für die Kernel-Patches. Wenn keine Probleme auftreten, werden die gleichen Patches mit einer gewissen Verzögerung auch an zahlende Kunden ausgeliefert.

Varianten

Ubuntu Pro gibt es aktuell in vier Ausprägungen:

  • Cloud: Die Cloud-Anbieter AWS, Azure und Google bieten virtuelle Maschinen (Cloud-Instanzen) mit Ubuntu Pro an. Die monatliche Gebühr ist höher als bei Ubuntu-LTS-Instanzen, dafür beträgt der Update-Zeitraum zehn statt fünf Jahre. Über diese Form des Ubuntu-Pro-Angebots habe ich schon vor Jahren in meinem Blog geschrieben.
  • Physische Desktop/Workstation-Installation: 25 $ / Jahr, 10 Jahre Updates für die Paketquellen main und universe

  • Physische Server-Installation, »Infra-only«: 225 $ / Jahr, 10 Jahre Updates nur für die main-Paketquelle. Das Angebot richtet sich insbesondere an Server, die als Virtualisierungs-Host verwendet werden.

  • Physische Server-Installation: 500 $ / Jahr, 10 Jahre Updates für die Paketquellen main und universe

Alle vier Angebote umfassen auch Live Kernel Patches, die bisher als eigenes Produkt verkauft wurden. Zu diesen Grundangeboten gibt es diverse Support-Erweiterungen, die die Sache natürlich teurer machen:

https://ubuntu.com/pricing/pro

Technische Details

Die technische Voraussetzung für Ubuntu Pro ist das Kommando pro, das sich im Paket ubuntu-advantage-tools befindet. Es sollte standardmäßig installiert sein. pro security-status gibt einen Überblick über die installierten Pakete (hier auf einem Server mit Ubuntu 20.04 OHNE Ubuntu Pro).

$ pro security-status

1090 packages installed:
     854 packages from Ubuntu Main/Restricted repository
     228 packages from Ubuntu Universe/Multiverse repository
     3 packages from third parties
     5 packages no longer available for download

To get more information about the packages, run
    pro security-status --help
for a list of available options.

This machine is receiving security patching for Ubuntu Main/Restricted
repository until 2025.
This machine is NOT attached to an Ubuntu Pro subscription.

Ubuntu Pro with 'esm-infra' enabled provides security updates for
Main/Restricted packages until 2030.

Ubuntu Pro with 'esm-apps' enabled provides security updates for
Universe/Multiverse packages until 2030 and has 19 pending security updates.

Die Ausgabe macht auch gleich Werbung für den Abschluss eines Ubuntu-Pro-Upgrades und verspricht Updates für 19 Universe-Pakete, zu denen es ohne Ubuntu Pro eben keinen Schutz gibt. Welche Pakete das sind, können Sie mit pro security-status --esm-apps herausfinden (siehe den folgenden Screenshot).

Ubuntu Pro verspricht Sicherheits-Updates für die fett hervorgehobenen universe-Pakete

Wenn Sie dieser Wink mit dem Zaunpfahl überzeugt, entschließen Sie sich dazu, Ubuntu Pro auszuprobieren. Dazu brauchen Sie ein Konto bei Ubuntu One. Damit können Sie sich beim Ubuntu Pro Dashboard anmelden. Dort erhalten Sie fünf kostenlose Tokens für Ubuntu Pro. Wenn Sie mehr brauchen, müssen Sie dafür bezahlen.

Das Ubuntu-Pro-Dashboard

Die Aktivierung von Ubuntu Pro für eine Ubuntu-Installation ist denkbar einfach. Sie führen pro attach <token> aus, fertig!

$ sudo pro attach <token>

Enabling default service esm-apps
Updating package lists
Ubuntu Pro: ESM Apps enabled
Enabling default service esm-infra
Updating package lists
Ubuntu Pro: ESM Infra enabled
Enabling default service livepatch
Installing snapd
Updating package lists
Installing canonical-livepatch snap
Canonical livepatch enabled.
Unable to determine current instance-id
This machine is now attached to 'Ubuntu Pro - free personal subscription'

SERVICE          ENTITLED  STATUS    DESCRIPTION
esm-apps         yes       enabled   Expanded Security Maintenance for Applications
esm-infra        yes       enabled   Expanded Security Maintenance for Infrastructure
fips             yes       disabled  NIST-certified core packages
fips-updates     yes       disabled  NIST-certified core packages with priority security updates
livepatch        yes       enabled   Canonical Livepatch service
usg              yes       disabled  Security compliance and audit tools

NOTICES
Operation in progress: pro attach

Enable services with: pro enable <service>

     Account: <account-name>
Subscription: Ubuntu Pro - free personal subscription

Anschließend können Sie mit apt full-upgrade alle Pakete aktualisieren. Dabei kommen nun die Ubuntu-Pro-Paketquellen zum Einsatz:

$ sudo apt full-upgrade

Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Paketaktualisierung (Upgrade) wird berechnet... Fertig
Die folgenden NEUEN Pakete werden installiert:
  python3-defusedxml
Die folgenden Pakete werden aktualisiert (Upgrade):
  ant ant-optional composer fail2ban glances libjs-jquery-ui libopenexr24 libpython2.7
  libpython2.7-minimal libpython2.7-stdlib lynx lynx-common ntpdate php-symfony-console
  php-symfony-filesystem php-symfony-finder php-symfony-process python2.7 python2.7-minimal
19 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
19 esm-apps security updates
Möchten Sie fortfahren? [J/n] y
...

Hinter den Kulissen hat pro attach zwei neue Paketquellen eingerichtet:

$ ls /etc/apt/sources.list.d/ubuntu-esm*

/etc/apt/sources.list.d/ubuntu-esm-apps.list  
/etc/apt/sources.list.d/ubuntu-esm-infra.list

Außerdem hat pro attach die Kernel-Live-Patch-Funktion aktiviert. Beachten Sie, dass dafür ein Snap-Paket verantwortlich ist. Snap ist also eine zwingende Voraussetzung für diese Funktion. Den Status können Sie so überprüfen:

$ sudo canonical-livepatch status

last check: 6 minutes ago
kernel: 5.4.0-139.156-generic
server check-in: succeeded
patch state: ✓ no livepatches needed for this kernel yet
tier: updates (Free usage; This machine beta tests new patches.)
machine id: <id>

Im Prinzip war’s das. Ubuntu Pro läuft jetzt selbstständig, Sie müssen sich nur noch darum kümmern, regelmäßig Updates zu installieren. pro security-status verspricht jetzt Updates bis 2030 :-)

$ pro security-status

1093 packages installed:
     857 packages from Ubuntu Main/Restricted repository
     228 packages from Ubuntu Universe/Multiverse repository
     3 packages from third parties
     5 packages no longer available for download

To get more information about the packages, run
    pro security-status --help
for a list of available options.

This machine is attached to an Ubuntu Pro subscription.

Main/Restricted packages are receiving security updates from
Ubuntu Pro with 'esm-infra' enabled until 2030.

Universe/Multiverse packages are receiving security updates from
Ubuntu Pro with 'esm-apps' enabled until 2030. You have received 19 security
updates.

Ich habe das kostenlose Angebot von Ubuntu Pro aktuell auf zwei Server laufen, bisher ohne irgendwelche Probleme. Langzeiterfahrungen kann ich allerdings noch keine bieten, dafür ist das Angebot zu jung.

Kernel-Patches: »Free usage; This machine beta tests new patches.«

Ein Leser dieses Beitrags hat mich auf eine Ergebniszeile von sudo canonical-livepatch status hingewiesen:

tier: updates (Free usage; This machine beta tests new patches.)

Es ist offensichtlich so, dass für zahlende Kunden tier: stable gilt, während an nicht zahlende Kunden Kernel-Updates aus tier: updates verteilt werden. Mit anderen Worten: Wenn Sie Kernel-Patches aktivieren, ohne dafür zu zahlen, sind Sie quasi ein Beta-Tester für die zahlenden Kunden. Wenn keine Probleme auftreten, erhalten zahlende Kunden etwas später die gleichen Updates. (Ein ähnliches Schema gilt übrigens für CentOS Stream, dort für alle Update-Pakete.)

An sich ist diese Vorgehensweise nachvollziehbar. Sie hat bei mir bisher auch keine Probleme verursacht. ABER: Die Informationspolitik von Canonical ist diesbezüglich extrem intransparent. Obwohl ich eine Weile danach gesucht habe, bin ich auf kein offizielles Dokument gestoßen, dass auf diesen Umstand deutlich hinweist oder die Hintergründe erklärt. Ein paar Lese-Tipps:

Bewertung

Das Ubuntu-Pro-Versprechen ist zweiteilig:

  • Einerseits garantiert Ubuntu Pro Sicherheits-Updates für zehn Jahre statt für fünf. Der Nutzen ist leicht zu begründen. Aus der Sicht von Canonical ist das Problem aber, dass viele Admins Ihrer Server ohnedies nicht so lange laufen lassen — oder nur wenig länger. Also macht es wirtschaftlich Sinn, die ersten fünf Jahre die kostenlosen LTS-Updates zu genießen und erst für die Folgejahre Ubuntu Pro zu zahlen. Aus Anwendersicht kosteneffizient, aber für Canonical ein schlechtes Geschäftsmodell.
  • Andererseits verspricht Ubuntu Pro recht vollmundig auch Updates für die ca. 23.000 Universe-Pakete. Mit diesem Argument versucht Canonical seine Kunden davon zu überzeugen, Ubuntu Pro auch in den ersten Jahre zu bezahlen. Ubuntu Pro hat also einen Zusatznutzen, weil Canonical den Support für die universe-Paketquelle übernimmt; bisher kümmerte sich nur die etwas diffuse »Community« darum.

Ich bin allerdings sehr skeptisch, wie weit das universe-Update-Versprechen reicht. Auf https://ubuntu.com/pricing/pro steht wörtlich: »Support for over 23,000 packages in the Ubuntu Universe repository«. Aber was heißt das? Ich habe nirgendwo das Kleingedruckte gefunden, das eine Abgrenzung vornimmt, für welche Pakete das Versprechen gilt, wie groß das Sicherheitsproblem ist, damit sich Canonical um die Behebung kümmert etc.

Ein Punkt ist klar: Selbst wenn Canonical hoch motiviert ist und ein riesiges Budget für ein großes Security- und Maintenance-Team aufbringt — 23.000 Pakete parallel für fünf LTS-Releases zu warten ist schlicht unmöglich. (Aktuell gibt es nur universe-Updates für die Versionen 18.04, 20.04 und 22.04, weil die universe-Wartungszusage für ältere Releases nicht gilt; aber in drei Jahren müssten die universe-Quellen für Ubuntu 18.04, 20.04, 22.04, 24.04 und 26.04 gleichzeitig gewartet werden! Das sind dann über 100.000 Pakete von Programmen und Bibliotheken in unterschiedlichen Versionen. Man könnte jetzt weiter rechnen, wie viele Zeilen Code das sind, mit wie vielen Maintainer Kontakt gepflegt wird etc.)

Red Hat (IBM) verspricht RHEL-Updates für ein viel kleineres Paketangebot und für weniger Releases zugleich (weil RHEL-Major-Versionen in der Regel drei bis vier Jahre auseinander liegen) — aus gutem Grund! Die restlichen Pakete befinden sich in der EPEL-Paketquelle oder anderen externen Paketquellen, dafür übernimmt Red Hat keine Verantwortung.

Es fällt schwer zu glauben, dass Canonical ein Kunststück gelingt, das Red Hat (mit sicher mehr Einnahmen) nicht einmal anstrebt.

Wartungszeitraum verschiedener Server-Distributionen

Bei aller Kritik: Ubuntu Pro ist ein attraktives Angebot. Es erlaubt den Einsatz von Ubuntu gerade im Server-Bereich für längere Zeiträume als bisher, zu vertretbaren Kosten (und für fünf Server sogar kostenlos, extrem fair!). Ein kurzer Vergleich zu anderern Distributionen:

  • Red Hat Enterprise Linux: 10 Jahre (mit Einschränkungen sogar 13 Jahre), kostenpflichtig
  • RHEL-Klone (Rocky, AlmaLinux etc.): 10 Jahre, kostenlos, aber ohne Garantien
  • SUSE Linux Enterprise: 10 Jahre (mit Einschränkungen sogar 13 Jahre), kostenpflichtig
  • Ubuntu LTS: 5 Jahre kostenlos
  • Ubuntu Pro: 10 Jahre kostenpflichtig (wobei es möglich ist, Ubuntu LTS die ersten fünf Jahre kostenfrei zu nutzen und erst dann auf Ubuntu Pro umzusteigen)

Ich bin gespannt, in welchem Ausmaß Canonical liefern kann, was es aktuell verspricht. Und wie viele zahlende Ubuntu-Pro-Kunden Canonical finden kann. Für das Linux-Universum wäre es auf jeden Fall gut, wenn Canonical erfolgreich ist. Je mehr Firmen es gibt, die mit Linux Geld verdienen, desto besser ist das für alle Linux-Anwender, zahlende wie nicht zahlende!

Links/Quellen

Ältere Blog-Artikel auf kofler.info zu diesem Thema:

Kernel Live Patches: updates=beta tier versus stable tier:

Kurztipp: IPv6-Konflikte bei geklonten RHEL-9-Instanzen vermeiden

05. März 2023 um 20:13

Kürzlich bin ich beim Klonen von virtuellen Maschinen mit AlmaLinux 9 unter KVM/libvirt als Virtualisierungs-Host auf Netzwerk-Probleme gestoßen: Obwohl ich sämtlichen VMs per Script Netzwerkadapter mit eigenen MACs, IPv4- und IPv6-Adressen zugewiesen haben, traten IPv6-Netzwerkkonflikte auf — und zwar nicht für die reguläre Adressen, sondern für die Link-Local-Unicast-Adressen (fe80-xxx).

Eine kurze Google-Suche führt zur Ursache des Problems: Der NetworkManager wertet offenbar /etc/machine-id aus, um »eindeutige« fe80-Adressen zu generieren. Bei den geklonten VMs war /etc/machine-id aber immer identisch. Die resultierenden IPv6-fe80-Adressen waren daher ebenfalls identisch und führten zu Adresskonflikten (IPv6 Duplicate Address Detected) und letztlich zur Deaktivierung des betreffenden Netzwerkadapters.

Abhilfe ist zum Glück einfach: /etc/machine-id muss gelöscht und neu erzeugt werden:

rm /etc/machine-id
systemd-machine-id-setup

In meinen Setup gibt es ein Script, das beim ersten Start in jeder VM ausgeführt wird. Es führt zuerst die statische Konfiguration der Netzwerkschnittstellen durch, dann die beiden obigen Kommandos und zuletzt einen reboot. Damit gelingt der Parallelbetrieb diverser geklonter VMs wieder problemlos.

Quelle

https://raj-anju.medium.com/virsh-cloning-vms-dad-ipv6-duplicate-address-detected-dadfailed-errors-centos-rhel8-210fca0af724

Fedora 38

19. April 2023 um 15:50

Der Frühlingsreigen neuer Distributionen hat begonnen, überraschenderweise mit Fedora statt wie sonst mit Ubuntu. (Ubuntu 23.04 ist diese Woche auch noch an der Reihe.) Heute habe ich einen ersten Blick auf Fedora 38 geworfen. Mein letzter derartiger »Minitest« liegt schon eineinhalb Jahre zurück (siehe Fedora 35).

Um es kurz zu machen: Abseits neuer Versionsnummern gibt es wenig Neuerungen — sowohl an der Oberfläche als auch hinter den Kulissen. Dass es überhaupt optische Änderungen gibt, ist dem neuen Hintergrundbild sowie Gnome 44 geschuldet. Selbst die Release Notes, sonst ein Konglomerat technischer Details, sind diesmal verblüffend leer.

Fedora 38 mit Gnome 44

Software-Versionen

Wie üblich konzentriere ich in dieser Kurzvorstellung auf die Workstation-Variante von Fedora. Die wichtigsten Versionsnummern des Software-Stacks sehen so aus:

Basis             Desktop             Programmierung   Server
---------------   ------------------  --------------   --------------
Kernel      6.2   Gnome          44   bash       5.2   Apache     2.4
glibc      2.37   Gimp         2.10   gcc       13.0   CUPS       2.4
X-Server   1.20   LibreOffice   7.5   git       2.40   MariaDB   10.5
Wayland    1.21                       Java        17   OpenSSH    9.0
Mesa       23.0                       PHP        8.2   qemu/KVM   7.2
Systemd     253                       Podman     4.4   Postfix    3.7
NetworkMan 1.42                       Python    3.11   Samba     4.18
GRUB       2.06 

Auf die Angabe der Versionsnummern von Thunderbird, Firefox und Chromium verzichte ist — diese Pakete werden ohnedies regelmäßig aktualisiert.

Technische Neuerungen

Fedora arbeitet an einem Unified Kernel Support. Das Ziel ist es, von am Rechner erzeugten Initramfs-Dateien wegzukommen und stattdessen den Kernel und die Initramfs-Datei als ein Paket auszuliefern. Das soll langfristig die Sicherheit verbessern. Details zu diesem Projekt können Sie auf der folgenden Seite nachlesen. Aktuell steckt das Projekt allerdings noch in den Kinderschuhen. Fedora 38 soll lediglich das Fundament für weitere Tests schaffen.

https://fedoraproject.org/wiki/Changes/Unified_Kernel_Support_Phase_1

Links

❌
❌