Sie sind auf Seite 1von 100

Anzeige:

12/23

Slack-Alternativen
für mehr Privacy S. 58 Java 21 S. 74 Firecracker S. 52
Fünf handliche Open-Source-Lösungen, Attraktives Release mit Mit Vollvirtualisierung
mit denen Sie beim Firmen-Chat die zahlreichen Neuerungen, kurzfristig auftretende
volle Kontrolle über Ihre Daten behalten aber ohne LTS-Support Lasten effizient auffangen

Lösungswege für wiederkehrende Programmierprobleme formalisieren

SOFTWARE DESIGN
PATTERNS
Mit Entwurfsmustern bei
der Softwareentwicklung
wertvolle Erfahrungen
speichern und immer
wieder nutzen ab S. 16

ԏ Fünfgrafische Download-
Manager im Vergleich S. 38
ԏ Reguläre Ausdrücke optimal ein-
setzen: Grundlagen und Tricks S. 48

KI-Basics: Clustering S. 68 • Ransomware attackiert Linux S. 72 • Ranges und Views in C++20 S. 79

Deutschland Österreich Schweiz Benelux Spanien Italien


www.linux-magazin.de € 8,99 € 9,70 sfr 14,90 € 10,50 € 11,00 € 11,00 4 192587 308993 12
Ist Ihre Cloud-Lösung
zukunftsfähig? Wir
beraten Sie gerne!
Für Unternehmen, die sich auf cloudbasierte IT-Infrastruktur verlassen, kann
die Abhängigkeit von Service-Providern zum Problem werden. Eine zuverlässige
Strategie für den Fall Cloud wird täglich wichtiger. Aber ist der Ausstieg aus der
Cloud für Sie rentabel? Und wie lässt sich ein solcher Plan umsetzen? Analyse,
Konzeption, Umsetzung – oder alles zusammen? Stellen Sie die Weichen für
Ihren maßgeschneiderten Weg in oder aus der Cloud, mit dem nötigen Know-
how von Thomas-Krenn$ƀ0#',#/3*'i8'#02# ,21!&#'"3,%;

3 Stufen
Cloud Consulting & Cloud Exit

Stufe 1: Stufe 2: Stufe 3:


Abhängigkeits- Aufbau Cloud- Begleitung des
und Kostenanalyse Exit-Szenario Cloud Exit

Jetzt planen:
thomas-krenn.com/cloud3
+49 (0) 8551.9150-300
Login Editorial

Unfrei und zufrieden

Jens-Christoph Brendel
Stellv. Chefredakteur

Das Gleichgewicht des seligen Gebens wächst ihm eine starke Konkurrenz, die Definition schließt eine Nutzungsein-
und Nehmens in der Open-Source-Welt seinen Umsatz schmälert. Außerdem schränkung für bestimmte Bereiche ex-
hatte von Anfang an keine wirtschaftliche kommt der Provider schon deshalb viel plizit aus. Hintergeht Hashicorp seine
Basis. Selbst wenn ein Entwickler seinen billiger davon, weil er nichts zur Entwick- Anwender und Entwickler, wenn es den
Code allen umsonst zur Verfügung stellte lung und Pflege des Produkts beiträgt. Er Open-Source-Status aufgibt? Sind die
und im Gegenzug von allen profitieren kann beliebig viele Interessenten bedie- Investoren die Wurzel des Übels? Sollte
würde, die Verbesserungen beitragen: nen, hat aber kaum Kosten. Für den Ent- man das Projekt zur Strafe forken und
Von irgendetwas muss er oder die Firma, wickler stellt sie sich dann plötzlich wie- einer Stiftung übergeben? Das ist inzwi-
die ihn bezahlt, leben. Oft soll ihm sein der, die Existenzfrage. schen geschehen: Die Linux Foundation
Produkt den Unterhalt sichern, und dann Tatsächlich war es ein Datenbankher- hat den Fork adoptiert und damit Stel-
ist es meist nicht die beste Lösung, es zu steller, MariaDB, der 2016 als erster einen lung bezogen. Open-Source-Ikone Bruce
verschenken. Stattdessen sollen es soge- Ausweg fand: die Business Source License. Perens sieht es hingegen so: „Im Allge-
nannte Open-Source-Geschäftsmodelle Sie erlaubt zunächst ganz ähnlich wie meinen befürworte ich Systeme, die es
ermöglichen, von einem Open-Source- eine Open-Source-Lizenz die Einsicht in Menschen ermöglichen, mit der Erstel-
Projekt zu leben. Dazu kombinieren sie den Quellcode, dessen Anpassung und lung von Open Source Geld zu verdienen,
beispielsweise freie Core-Versionen mit Weitergabe sowie die unbeschränkte selbst wenn der Preis dafür ist, dass die
bezahlten Enterprise-Features (Dual Li- Nutzung der Software – jedoch nur für Software für einige Zeit nicht unter einer
censing) oder kostenfreie Software mit den nicht kommerziellen Bereich. Für die vollständigen Open-Source-Lizenz ver-
kostenpflichtigem Support und Schulun- gewerbliche Nutzung schränkt sie diese fügbar ist. Open Source zu machen sollte
gen. Das hat eine ganze Weile lang leid- Rechte für ein paar Jahre ein, danach nicht bedeuten, dass man ein Büßer-
lich funktioniert – dann kam die Cloud. tritt automatisch eine reine Open-Source- hemd trägt und von Almosen lebt, wäh-
Die Cloud erlaubte es, dass ein Provider Lizenz an ihre Stelle. Wer die Software rend die Nutzer des eigenen Produkts,
sich einige begehrte Open-Source-Pro- in den ersten Jahren nach Lizenzierung oft die größten Unternehmen der Wall
gramme kostenlos herauspicken und sie für eigene Zwecke in einer produktiven Street, die Knete einstecken.“ So spricht
anschließend als Services seiner Wolke Umgebung nutzen will, der muss dafür ein kluger Pragmatiker.
teuer verkaufen konnte, etwa eine freie bezahlen. Diesem Modell haben sich
Datenbank als Service in einer Public inzwischen etliche bekannte Hersteller
Cloud. Für die Kunden des Providers kann angeschlossen, darunter CockroachDB,
das attraktiv sein: Sie haben mit Installa- Couchbase, Sentry oder erst vor Kurzem
tion, Wartung oder Skalierung nichts Hashicorp, der Produzent von Terraform,
mehr zu tun, zudem können sie von der Consul und Vagrant.
engen Verzahnung mit anderen Cloud- Dieser Schritt erlaubt den Entwicklern,
Diensten profitieren. Für den Datenbank- eine Zeitlang ihr Produkt zu monetarisie-
hersteller ergeben sich aber fast nur ren und damit zu überleben. Allerdings
Nachteile: Durch den Cloud-Provider er- gibt es auch Bedenken: Die Open-Source-

12.2023 www.linux-magazin.de 3
12
###### #######

Das Singleton ist ein bekanntes

Grundlegende Entwurfsmuster
24 Design Pattern, das nur einmal
vorkommende Objekte modelliert. Py- Wie man wartungsfreundliche
16 konservieren Erfahrungen und
sparen auf diese Weise bei der Software-
thon bietet verschiedene Möglichkeiten,
ein Singleton zu implementieren, die alle
30 und zukunftssichere Schnitt-
stellen mit API Design Patterns aufsetzt,
entwicklung viel Zeit, Geld und Nerven. spezifische Vor- und Nachteile haben. zeigt Mike Schilli am Beispiel von LROs.

Aktuell Titelthema Titelthema

News ............................................... 6 Grundlegende Entwurfsmuster ...16 API Design Patterns.....................30


• Exascale-Superrechner für Jülich Passt eine gute Lösung auf eine Vielzahl Auch beim Design von APIs lohnen sich
• OpenStack „Bobcat“ ist da von Problemen, erspart das eine lange, Patterns, damit wartungs- und zukunfts-
• BSI-Befragung zu kritischer Infrastruktur anstrengende und potenziell fehlerbe- sichere Systeme entstehen. Mike Schilli
• Incus: Erstes Release des LXD-Forks haftete Suche nach dem schon bekannten widmet sich in einem Beispiel Anfragen,
• Curl-Entwickler entschuldigt sich Weg. In der Softwareentwicklung können die von Natur aus etwas länger dauern.
• RaspiOS wechselt auf Debian Bookworm Entwurfsmuster wertvolle Erfahrungen
speichern und nachnutzbar machen.
Zahlen & Trends ........................... 10 Software
• Schlechte Noten für die DSGVO Singelton mit Python................... 24 Einführung .................................... 35
• Wirtschaft setzt auf Open Source
Das Singleton-Pattern garantiert, dass es Auf der DELUG-DVD finden Sie diesmal
• Laion: Großes Sprachmodell für Deutsch
nur eine Instanz einer Klasse gibt. Die reprä- die Distributionen DietPi, LMDE und
• Rust-Compiler wird Open Source
sentiert in der Regel ein Objekt, das in der Porteus, 19 Vorträge vom zweiten Tag
• Red Hat schließt Security-Liste
Realität nur einmal vorkommt, zum Beispiel der Froscon 2023, fünf quelloffene Slack-
IT-SA 2023 .....................................14 ein Dateisystem. Python kennt mehrere Alternativen und vieles andere mehr.
Möglichkeiten, ein Singleton abzubilden.
In Nürnberg gab sich Anfang Oktober alles
ein Stelldichein, was in der boomenden
Security-Branche Rang und Namen hat –
inklusive ranghoher Bundesbeamter.

Service
Editorial ........................................... 3
IT-Profimarkt ................................ 92
README ........................................94
Der von Amazon ent-
Inserenten/Autoren/Events ...... 96
Impressum ................................... 97
52 wickelte Virtual Machine
Manager Firecracker bietet auch
Vorschau ...................................... 98 eine Alternative zu Containern.

4 www.linux-magazin.de 12.2023
###### #####

Für die interne Firmenkommu-

Grafische Download-Manager
58 nikation per Chat gibt es durch-
aus Alternativen zu Slack, die mehr Pri- Für das Durchstöbern seiner
38 helfen Ihnen dabei, auch bei
umfangreicheren Download-Aktionen
vacy und Datenschutz realisieren als der
populäre, aber unverschlüsselte Cloud-
84 Google-Drive-Bibliothek per
Textmustersuche hat sich Mike Schilli
nicht den Überblick zu verlieren. Dienst. Wir stellen Ihnen fünf davon vor. in Go ein kleines CLI-Tool geschrieben.

Software Sysadmin Know-how

Tooltipps ....................................... 36 Slack-Alternativen ....................... 58 Insecurity Bulletin ....................... 72


Cat-Ersatz Bat, Syntaxprüfer Cppcheck, Der Chat fungiert in vielen Unternehmen Seit März 2023 macht die Ransomware Aki-
DNS-Alternative Goodhosts, JSON-Muster- als zentrales Kommunikationsmedium, ra mit immer neuen Angriffen Schlagzeilen.
prüfer Jq, Suchhelfer Searxng, Verbin- aber viele Firmen scheuen davor zurück, Im August 2023 brachte sie es unter die Top
dungsverwalter Ssh-tunnel-manager. sensible Inhalte über gehostete Angebote 10 der Ransomware-Attacken. Die neueste
wie Slack zu teilen. Doch es gibt Alterna- Variante befällt nun auch Linux-Systeme.
Bitparade ...................................... 38 tiven für jene, die lieber die volle Kontrolle
über die eigenen Daten behalten.
Im Internet steht eine Fülle interessanter Programmieren
Inhalte zum Herunterladen bereit. Grafische
Tools helfen dabei, den Überblick auch bei Forum Java 21 ........................................... 74
vielen parallelen Downloads zu behalten. Das Mitte September pünktlich bereit-
Recht .............................................64 gestellte Java 21 enthält wieder eine
Sysadmin Die Ampelkoalition will bei der Nutzung Reihe interessanter Feature. Es gab diverse
von Autodaten eigentlich ein Treuhänder- Änderungen an der Sprache und an den
Admin-as-a-Service......................48 modell umsetzen, doch ein Expertenkreis verfügbaren Implementationen. Allerdings
Mit regulären Ausdrücken quälen angeb- schlägt ein völlig anderes Konzept vor. hat Oracle auch die Zahlung einiger Unter-
lich Informatikprofessoren ihre Studenten. haltsleistungen eingestellt.
Tatsächlich bilden Regexe im Linux-Uni- Buchtipps ......................................66
versum ein überaus mächtiges Werkzeug. Ein Buch demonstriert effektives Strukturie- C++ (Folge 71) ............................... 79
ren, das zweite wirft agile Blicke auf unter- Die Ranges-Bibliothek öffnet C++ 20 für
Firecracker .................................... 52 schiedliche Unternehmensebenen. ganz neue Ideen aus der funktionalen Welt.
Vor gut vier Jahren überraschte Amazon
Snapshot .......................................84
die IT mit Firecracker: Der Emulator fußt Know-how
auf PVOps im Linux-Kernel und ist deutlich Damit Mike Schilli seine Google-Drive-Da-
effizienter und sicherer als das Urgestein KI-Serie (Teil 4) ............................ 68 teien mit verschiedenen Pattern Matchern
KVM. Mittlerweile hat Firecracker sich auch Clustering-Verfahren aus dem Bereich des prüfen kann, baut er sich in Go ein Kom-
als Alternative zu Containern etabliert. unüberwachten Lernens sortieren Daten mandozeilenwerkzeug mit lokalem Cache.
in Gruppen und erlauben so eine nützliche
Segmentierung komplexer Datensätze.

12.2023 www.linux-magazin.de 5
Aktuell News

News
Europäischer Exascale-Supercomputer für Jülich
Die europäische Supercomputing-Initiative EuroHPC JU und
das deutsch-französische Supercomputerkonsortium ParTec-
Eviden haben den Bau des Exascale-Supercomputers JUPITER
vertraglich besiegelt. JUPITER steht für „Joint Undertaking Pio-
neer for Innovative and Transformative Exascale Research“. Das

© Forschungszentrum Jülich
System wird als erster europäischer Superrechner der Exascale-
Klasse mit einer Rechenleistung von mehr als 1 Exaflop/s am
Forschungszentrum Jülich in Nordrhein-Westfalen aufgebaut.
Dort betreibt ihn das Jülich Supercomputing Centre (JSC), eines
der drei nationalen Supercomputing-Zentren des Gauss Centre
for Supercomputing (GCS).
Das für rechenintensive Simulationen und KI-Anwendungen
in Wissenschaft und Industrie konzipierte System soll be- Jülich erwartet den ersten Exascale-Rechner.
reits 2024 in Betrieb gehen. Die Kosten für JUPITER und dessen
Betrieb über einen Zeitraum von voraussichtlich sechs Jahren
belaufen sich auf 500 Millionen Euro, teilt das Forschungszen- neuen in Europa entwickelten und hergestellten Rhea-Prozessor
trum Jülich mit. Die Finanzierung übernehmen zur Hälfte die von SiPearl. Die CPU soll eine außergewöhnlich hohe Speicher-
Europäischen Union und jeweils zu einem Viertel das Bundes- bandbreite für komplexe Arbeitslasten bieten. Beim Booster-
ministerium für Bildung und Forschung (BMBF) sowie das Mi- Modul kommt die beschleunigte Computing-Plattform von
nisterium für Kultur und Wissenschaft des Landes Nordrhein- Nvidia zum Einsatz.
Westfalen (MKW NRW). Die Komponenten integriert Eviden direkt in seine flüssig-
JUPITER basiert laut den Verantwortlichen auf einer modu- keitsgekühlte BullSequana-XH3000-Plattform. Die Cluster- und
laren Supercomputer-Architektur und verfügt über ein hoch Booster-Module betreibt ParTec dynamisch als einheitlichen
skalierbares Booster-Modul sowie ein eng damit verbundenes, Supercomputer unter Verwendung seines modularen ParaSta-
universell einsetzbares Cluster-Modul. Letzteres nutzt den tion-Modulo-Betriebssystems. Ӻ

OpenStack „Bobcat“ ist da


Die OpenStack-Community hat mit der neuen Version namens Keystone, dem Authentifizierungs-Service von OpenStack. Ak-
„Bobcat“ die inzwischen 28. Version ihrer quelloffenen Cloud- tiviert ein Benutzer TOTP auf Keystone, dann ist das Verfahren
Infrastruktursoftware veröffentlicht. Die neue Ausgabe enthält auch auf Horizon aktiviert. Das Bare-Metal Provisioning Ironic
10 476 Änderungen von mehr als 580 Autoren, teilt die bei enthält nun eine grundlegende Unterstützung für die Wartung
OpenStack federführende OpenInfra Foundation mit. Zu den von Knoten, was eine Wartung an bereitgestellten Knoten im
Neuerungen bei den Komponenten zählt beim Shared-File- aktiven Zustand ermöglicht. Bislang konnte Ironic keine Opera-
system-Service Manila, dass sich dort Shares und Zugriffsregeln tionen an aktiven Nodes ausführen.
gegen Löschen sperren lassen. Dafür hat man ein generisches „Bobcat“ ist die zweite Version eines neuen Release-Zyklus,
Framework für Ressourcensperren eingeführt. Mit der Funktion bei dem die Nutzer nicht mehr zwangsläufig alle sechs Monate
können Benutzer auch sensible Felder von Zugriffsregeln aus- ein Upgrade vornehmen müssen. Sie können sich nun für einen
blenden, lässt die Foundation wissen. jährlichen Upgrade-Zyklus entscheiden und nur mit jedem
Für mehr Sicherheit beim OpenStack-Dashboard Horizon soll SLURP-Release – das Kürzel steht für Skip Level Upgrade Re-
die Einführung eines TOTP-Algorithmus (Time-based One-time lease Process – eine Aktualisierung anstoßen. Nicht-SLURP-Re-
Password) führen. Die TOTP-Authentifizierung erfordert eine leases stehen wie bisher alle sechs Monate für diejenigen zur
Authentifizierung über ein zweites Gerät. Diese Funktion nutzt Verfügung, die ein häufigeres Upgrade bevorzugen. OpenStack
die bereits vorhandene Zwei-Faktor-Authentifizierung von „Bobcat“ zählt zu den Nicht-SLURP-Releases. Ӻ

6 www.linux-magazin.de 12.2023
mitp-Verlag
IT Web Fotografie Online-Marketing

BSI: Befragung zu kritischer Infrastruktur


Das Bundesamt für Sicherheit in der Informa- etwas höheren prozentualen Anteil in Sicherheit
tionstechnik (BSI) hat Betreiber kritischer Infra- investieren als Großunternehmen, äußern sich
struktur (KRITIS) zur Wirksamkeit der gesetz- häufiger zufrieden.
lichen Maßnahmen des IT-Sicherheitsgesetzes 70 Prozent der für die Studie Befragten neh-
befragt. Das Ergebnis: Die Unternehmen haben men gegenwärtig eine erhöhte IT-Bedrohungs-
insbesondere bei organisatorischen Sicherheits- lage wahr; der Effekt ist bei Großunternehmen
maßnahmen noch Nachholbedarf, und die Si- deutlich stärker ausgeprägt als bei kleinen und
cherheitsbudgets fallen zu klein aus. mittleren. Hauptursachen sind der Ukraine-Krieg,
Die Umsetzung technischer Sicherheitsmaß- die geopolitische Lage sowie die zunehmenden,
nahmen ist bei den meisten Unternehmen weit gezielten Angriffe auf KRITIS-Betreiber. Nicht alle,
vorangeschritten, nur in Einzelfällen fehlen noch aber immerhin doch ein Großteil der besorgten
VPN und Zugangskontrolle. Bei der Umsetzung Unternehmen erlebte in den vergangenen zwei
organisatorischer Sicherheitsmaßnahmen liegen Jahren eine stärkere Gefährdungslage speziell
die Unternehmen dagegen weiter zurück. Weit- aufgrund häufigerer Cyberangriffe auf die eige-
Auch als E-Book oder Bundle
gehend flächendeckend eingeführt sind jedoch nen IT-Systeme. Auch davon waren Großunter- in unserem Shop erhältlich:
die Aufrechterhaltung des aktuellen Informa- nehmen stärker betroffen als kleine. Die mit Ab- www.mitp.de/0652
tionsstands und die Sensibilisierung sowie Schu- stand häufigsten Cyberattacken erfolgten dem-
lung der Beschäftigten. Die größten Defizite zei- nach in Form von Phishing und Schadsoftware
gen sich bei der Einführung von Security Opera- in E-Mail-Anhängen. Ӻ
tions und einer sicheren Do-
kumentenerstellung.
Das Budget für IT-Sicherheit
beurteilt die Mehrheit der Be-
fragten als nicht angemessen,
obwohl fast zwei Drittel der
Unternehmen es in den letz-
ten zwei Jahre erhöht haben.
Im Durchschnitt beträgt es
14 Prozent des gesamten IT-
© BSI

Budgets – das hält lediglich


jedes dritte Unternehmen für
ausreichend. KMU, die einen Das BSI hat auch die Bekanntheit eigener Publikationen abgefragt.

Auch als E-Book oder Bundle


in unserem Shop erhältlich:
www.mitp.de/0745
Raspberry Pi OS wechselt auf Debian „Bookworm“
Die offizielle Distribution für den Einplatinen- dieser Kombination soll der Desktop jetzt deut-
computer Raspberry Pi basiert ab sofort auf lich stabiler und auch flotter arbeiten. Deshalb
Debian 12. Die Desktop-Umgebung startet zu- kommt Wayland auf dem Raspberry Pi 4 und 5
dem in einer Wayland-Sitzung und bietet neue ab sofort standardmäßig zum Einsatz. Auf den
Plugins. Unter der Haube arbeitet PulseAudio, älteren Raspberry-Pi-Modellen schrauben die
ins Internet geht auf Wunsch eine angepasste Entwickler derzeit noch an der Performance von
Fassung von Firefox. Wayfire. Mittelfristig soll Wayfire aber auch dort
Abgesehen von aktualisierter Software bietet als Bestandteil der Standardkonfiguration Ver-
der Umstieg auf Debian 12 keine großen Neue- wendung finden.
rungen, betonen die Entwickler von Raspberry Die Desktop-Umgebung von Raspberry Pi OS
Pi OS in ihrer Ankündigung. Das betrifft aller- erscheint auf den ersten Blick unverändert, den-
dings nur das Basissystem. noch gibt es auch hier eine ganze Reihe von An-
Die Desktop-Umgebung von Raspberry Pi OS passungen. So stellt das Panel am oberen Bild-
2023-10-10 zeichnet erstmals Wayland anstelle schirmrand ab sofort die Anwendung Wf-panel-
von X11 auf den Bildschirm. Konkret kommt der pi bereit, die ihrerseits auf der Wf-shell von Way-
Compositor Wayfire zum Einsatz, der seinerseits fire basiert. Die Abkürzung Wf-panel-pi steht für Auch als E-Book oder Bundle
auf der Wayland-Bibliothek Wlroots basiert. In „Wayfire Panel for Raspberry Pi“. Ӻ in unserem Shop erhältlich:
www.mitp.de/0628

12.2023 www.linux-magazin.de
www.mitp.de
Aktuell News

Kurznachrichten
Kraft 1.1: Mit Kraft verwalten Handwerker Entwicklern. Neu: Zu den Updates gehört 86Box 4.0: Ähnlich wie Dosbox, emuliert
ihre Dokumente und vor allem ihre Rechnun- ein flexibleres F-String-Parsing, das Be- auch 86Box ältere PC-Modelle. Neu: Erst-
gen. Neu: Die neue Version erlaubt erstmals schränkungen in der Syntax aufhebt. Es mals lassen sich die Grafikkarten ATI Mach 8
Makros in Kopf- und Fußzeilen. Über eine erlaubt jetzt beispielsweise jeden gültigen und Mach 32 emulieren. Dabei handelt es
neue Schaltfläche lassen sich dort an der Python-Ausdruck als Ausdruckskomponen- sich nicht um klassische GPUs, sondern um
aktuellen Cursor-Position schnell Templates ten innerhalb von F-Strings. Darunter fallen Erweiterungskarten, die bestimmte 2D-Ope-
einfügen. In der Vorversion konnte man ledig- Zeichenketten, die denselben Typ Anfüh- rationen beschleunigen können. Außerdem
lich den kompletten Text gegen ein Template rungszeichen verwenden wie der enthalten- haben die Entwickler am Code für Tastaturen
ersetzen. Lizenz: GPL de F-String, mehrzeilige Ausdrücke, Kom- und die Maus geschraubt. Im Ergebnis re-
https://volle-kraft-voraus.de/De/De mentare, Backslashes sowie Unicode-Es- agiert die Mausemulation jetzt flotter. Der
cape-Sequenzen. Darüber hinaus gibt es virtuelle Controller für Keyboards mit AT-
Slax 12.1/15.0.2: Die schlanke Linux-Distribu-
jetzt eine Debugging-API, die eine breite und PS/2-Anschluss soll zudem nicht mehr
tion arbeitet standardmäßig als Live-System
Palette von Ereignissen abdeckt, darunter plötzlich bei der Eingabe stoppen. 86Box 4.0
und pflegt Versionen mit Debian und Slack-
Aufrufe, Rückgaben, Zeilen, Ausnahmen und kann sich nun via VDE-Protokoll mit anderen
ware als Unterbau. Neu: Das neueste Release
Sprünge. Lizenz: PSFL laufenden 86Box-Maschinen verbinden, der-
basiert wahlweise auf Debian 12.1 oder
https://www.python.org zeit aber nur unter Linux Lizenz: GPLv2
Slackware 15.0.2-current. Von diesen Distri-
https://86box.net
butionen übernimmt Slax auch die Versions- Deno 1.37: Mit dem Node.js-Konkurrenten
nummern. Bislang speicherte Slax alle Än- lassen sich komplette Anwendungen in Java- Porteus 5.01: Die kompakte Distribution eig-
derungen im Verzeichnis /slax/changes/. script entwickeln. Neu: Die jüngste Version net sich besonders für den Betrieb von Wech-
Mehrere verschiedene Sessions waren so erzeugt auf Wunsch einen sogenannten Deno selmedien. Neu: Das aktuelle Release basiert
nicht möglich. Das ändert die neue Version, Kernel, über den sich die Javascript-Runtime auf Slackware 15.0 und enthält die Updates
die jeder Session einen eigenen Ordner un- auch in Jupyter Notebooks nutzen lässt. aus Slackware-15.0-patches. Als Paketma-
terhalb davon spendiert. Beim Boot-Vorgang Deno 1.37 verbessert zudem die Integration nager stehen Slapt-get, Slackpkg sowie Slpkg
muss sich der Anwender entscheiden, ob er in Visual Studio Code samt Language Server bereit. Das neue Tool Slapt-mod ist ein Wrap-
eine neue Session starten oder eine der be- (LSP). Die entsprechende Erweiterung ent- per für Slapt-get, der ein Modul aus einem
stehenden fortsetzen möchte. Lizenz: GPL deckt intelligenter die deno.json, versteht Package erzeugt. Das neue Skript Convertz
https://www.slax.org die neue Einstellung deno.disablePaths konvertiert sämtliche XZ-komprimierten
und unterstützt das Umbenennen von Datei- Module in Zstd-komprimierte Fassungen.
Python 3.12: Die Programmiersprache
en besser. Lizenz: MIT Lizenz: GPL
kommt in einer neuen Major-Version zu den
https://deno.land http://www.porteus.org

Neu: Linux Mint 21.2 Edge und Debian Edition


Die Linux-Mint-Macher entwickeln neben ihrer auf Ubuntu ba- kurz LMDE genannte Version von Linux Mint auf der Debian-
sierenden Distribution auch noch zwei weitere Varianten, die Distribution. Linux Mint 21.2 basiert auf der LTS-Version von
jetzt in neuen Versionen vorliegen. Während Linux Mint Edge Ubuntu. Diese wiederum enthält zwar stabile Software, aber
den Anwendern einen aktuelleren Kernel offeriert, basiert die auch den etwas älteren Linux-Kernel 5.15. Daher kann Linux
Mint auf aktueller Hardware Probleme bereiten und beispiels-
weise den Start verweigern. Abhilfe schafft hier das Linux-
Mint-Team mit einer Edge getauften Variante mit dem deutlich
jüngeren Kernel 6.2. Die Edge-Fassung ist allerdings nicht so
gut getestet wie das normale Linux Mint. Folglich sollte man
nur dann zu ihr greifen, wenn Linux Mint 21.2 die eigene Hard-
ware verschmäht.
Was würde passieren, wenn es Ubuntu nicht mehr gibt? Um
für diesen Fall gerüstet zu sein, pflegt das Linux-Mint-Team eine
auf Debian basierende Fassung seiner Distribution. Diese Linux
Mint Debian Edition (LMDE) liegt mittlerweile in der Version 6
© Linux Mint

vor. Als Basissystem dient Debian 12 „Bookworm“, der Kernel


meldet sich in Version 6.1. Damit einher geht auch ein Update
der Softwarepakete. Als Desktop kommt Cinnamon 5.8 zum
Einsatz. Anders als bei der Ubuntu-basierten Fassung stellen
Die Linux Mint Debian Edition. die Macher keine Varianten mit Mate und XFCE bereit. Ӻ

8 www.linux-magazin.de 12.2023
Incus: Erstes Release des LXD-Forks
Das Linux Containers Project hat eine erste Veröffentlichung von Incus in Version 0.1
angekündigt. Incus ist ein Fork von Canonicals LXD, der von Aleksa Sarai gestartet
wurde und nun unter dem Dach des Linux Containers Projects angesiedelt ist. Der
Fork war der Entscheidung von Canonical gefolgt, LXD von Linux Containers zu tren-
nen. Die erste Incus-Version entspricht in etwa LXD 5.18, enthält aber neben der offen-
sichtlichen Umbenennung noch eine Reihe von Änderungen. Mit der ersten Version
hat Linux Containers unter anderem die Gelegenheit genutzt, eine Menge obsoleter
oder problematischer Funktionen aus LXD zu entfernen.
So hatte LXD als reines Container-Projekt begonnen und seine REST-API /1.0/con- Akademie
tainers verwendet. Bei der Einführung virtueller Maschinen übernahm der neue End-

$JC(ŝGMV
punkt /1.0/instances alle Operationen sowohl für Container als auch für VMs, dennoch
behielt Canonical /1.0/
containers für Legacy-
Clients bei. Darüber
hinaus fügte es aber
einen Endpunkt /1.0/
IGUWEJV"
virtual-machines hin- Schulungen für Linux-Admins, die
zu, der jedoch nie durchblicken wollen. Fachlich und didak-
verwendet wurde. Bei tisch kompetente Dozenten, spannende
Incus haben die Ent- Schulungsthemen und eine lockere
wickler diese Legacy- Atmosphäre im Kurs – all das erwartet
Endpunkte entfernt, Sie bei uns an der Heinlein Akademie.
© Incus

die einzige Möglich-


keit zur Interaktion
mit Instanzen ist jetzt
Incus testen unter: https://linuxcontainers.org/incus/try-it/. /1.0/instances. Ӻ Die nächsten Kurse

ab 27.11.
Foreman / Katello
Curl-Entwickler entschuldigt sich
Der Hauptentwickler des Open-Source-Werkzeugs Curl, Daniel Stenberg, hat die ak- ab 27.11.
tuelle Version 8.4.0 veröffentlicht und dabei eine mehrere Jahre alte Sicherheitslücke IPv6 Grundlagen
(CVE-2023-38545) behoben. Laut Stenberg handelte es sich um die gravierendste
Lücke in Curl seit Jahren. Die Ursache ist ein Heap-Buffer-Overflow im Ablauf eines ab 04.12.
Socks5-Proxy-Handshakes. In seinem Blog beschreibt Stenberg, wie es zu dem Fehler OpenShift: Installation & Administration
kam, und geht dabei auch auf die fehlende Speichersicherheit von C ein, in dem Curl
programmiert ist.
Der Entwickler, der das Projekt seit 1996 leitet und als profilierter C-Programmierer ab 04.12.
gilt, schreibt dazu: „Wenn man den Code jetzt liest, ist es unmöglich, den Fehler nicht Puppet und Bolt Entwicklung
zu sehen. Ja, es tut wirklich weh, die Tatsache akzeptieren zu müssen, dass ich diesen
Fehler gemacht habe, ohne es zu merken, und dass der Fehler dann 1315 Tage lang ab 11.12.
unentdeckt im Code blieb. Ich bitte um Entschuldigung. Ich bin auch nur ein Mensch.“ Logfile-Analyse
Weiter erklärt Stenberg, dass die Lücke wohl auch mit besseren Tests hätte entdeckt
werden können. Aber schon jetzt nutze das Projekt zahlreiche Werkzeuge zur statischen
ab 11.12.
Analyse, und die Lücke sei dabei nicht aufgefallen. Wie Stenberg einräumt, hätte man
DNS und DNSsec mit BIND
diese Art Lücke aber auch durch die Wahl einer Programmiersprache mit Speicher-
sicherheit verhindern können. Eine entsprechende Portierung könne er als einziger
Entwickler des Projekts allerdings nicht stemmen. Er will jedoch künftig mehr Abhän-
Jetzt anmelden
gigkeiten mit einer speichersicheren Sprache nutzen.
Künftig könnten stückweise Teile von Curl ersetzt werden, wie das mit Hyper geschieht,
www.heinlein-akademie.de
schreibt Stenberg. Hyper ist eine in Rust geschriebene HTTP-Bibliothek, die Curl als
Backend nutzen kann. Diese Veränderungen geschähen aber sehr langsam und zeig-
ten schmerzhaft die damit verbundenen Probleme, so Stenberg. Ӻ

12.2023 www.linux-magazin.de
Aktuell Zahlen & Trends

Zahlen & Trends


Cyber Readiness Report: Angriffszahlen steigen
Der siebte internationale Cyber Readiness Report des Spezial- Unternehmen hat in Deutschland deutlich zugenommen: Im
versicherers Hiscox zeigt, dass in Deutschland Cyberangriffe letzten Jahr lag der Median bei 6, in diesem bei 10 Angriffen.
von 43 Prozent der Befragten erneut als größtes Geschäftsrisiko Das macht Deutschland nach Irland zum am zweithäufigsten
angesehen werden. International ist aber angegriffenen Land. Im Fall von Ransom-
ein leichter Stimmungsumschwung zu ware-Angriffen hat die Untersuchung
beobachten: Nur noch fünf von acht ergeben, dass von den Unternehmen,
Ländern nennen Cyberrisiken als größte die sich für das Zahlen von Lösegeld
Gefahr für Unternehmen. Die Fallzahlen entschieden haben, nur 37 Prozent ihre
bleiben jedoch konstant hoch: Mehr als Daten wiederbekommen haben.
jedes zweite Unternehmen (53 Prozent) Der Cyber Readiness Report des Spezi-
war 2022 wieder Opfer einer Attacke. alversicherers Hiscox wird seit 2017 jähr-
Die Zahl der angegriffenen Unterneh- lich von Forrester erstellt und basiert auf
men stieg laut dem Report im dritten einer Umfrage unter 5005 Führungskräf-
Jahr in Folge (2023: 53 Prozent, 2022: ten, Abteilungsleitern, IT-Managern und
48 Prozent, 2021: 43 Prozent). Auch in anderen Fachleuten. Es handelt sich um
Deutschland kommt es öfter zu Cyber- eine repräsentative Auswahl von Unter-
© Hiscox

angriffen. Die Ergebnisse zeigen sogar nehmen verschiedenster Größen und


einen zweistelligen Anstieg von 46 Pro- Branchen aus den acht Ländern Belgien,
zent im Vorjahr auf aktuell 58 Prozent. Frankreich, Deutschland, Niederlande,
Auch die Zahl der Cyberattacken pro Attacken auf deutsche Unternehmen. Spanien, Großbritannien, Irland, USA. Ӻ

Rust-Compiler wird Open Source Red Hat schließt Security-Liste


Das Unternehmen Ferrous Systems will in Kürze Ferrocene, Red Hat hat die Abonnenten der Mailing-Liste Red Hat Product
seinen Rust-Compiler für sicherheitskritische Anwendungen Security (rhsa-announce) darüber informiert, dass es die Liste
und Cybersicherheit, als Open-Source-Projekt veröffentlichen. zum 10. Oktober abgeschaltet hat. Das Unternehmen sendet
Als Lizenz soll Apache 2.0 oder MIT zum Einsatz kommen. keine weiteren Sicherheitshinweise mehr an diese Liste, die Ar-
Ferrocene bildet den Rust-Compiler Rustc ab, den Ferrous chive bleiben jedoch unter https://listman.redhat.com/archives/
Systems aber qualitätsgeprüft und für den Einsatz in Auto- rhsa-announce/ verfügbar. Red Hat machte keine weiteren An-
mobil- und Industrieumgebungen qualifiziert hat (derzeit ge- gaben dazu, weshalb dieser Schritt erfolgt ist. Auf der populären
mäß ISO 26262/IEC 61508). Der Compiler ist dem Rust-Projekt Security-Liste gab es über Jahre hinweg Security Advisories zu
als Downstream angeschlossen, um die Qualität auf bestimm- Red Hat Enterprise Linux und einer ganzen Reihe von verwand-
ten Plattformen weiter zu verbessern, teilt das Unternehmen ten Produkten.
mit. Man habe zwei Jahre an dem Compiler gearbeitet und sei Wer nach dem Schalterschluss der Mailingliste weiter Infor-
nun bereit, ihn vollständig quelloffen verfügbar zu machen. mationen über veröffentlichte Sicherheitshinweise empfangen
Daneben will Ferrous Systems auch kostenpflichtige vorge- möchte, kann laut dem Unternehmen als eingeloggter Be-
fertigte Ferrocene-Binaries anbieten. Die seien validiert und nutzer mit einem aktivem Red-Hat-Abonnement unter https://
mit langfristigem Support von Rust-Experten flankiert, lässt www.redhat.com/wapps/ugc/protected/notif.html entspre-
das Unternehmen wissen. Die Kosten sollen insbesondere den chende Benachrichtigungen einrichten. Alternativ dazu kön-
langfristigen Support abdecken. In der derzeit aktuellen Ferro- nen alle Anwender den RSS-Feed Red Hat Security Errata nut-
cene-Version 23.06.0 stecken noch proprietäre Anteile aus einer zen (https://access.redhat.com/security/data/metrics/rhsa.rss).
früheren Partnerschaft. Der freie Ferrocene-Compiler 23.06.1 In einem maschinenlesbaren Format lassen sich die Sicher-
soll in den kommenden Monaten erscheinen, sobald die pro- heitshinweise unter https://access.redhat.com/security/data/
prietären Teile entfernt sind. Ӻ csaf/v2/advisories/ abrufen. Ӻ

10 www.linux-magazin.de 12.2023
Zahlen & Trends Aktuell

Linux-Entwickler wollen RNDIS erneut entfernen


Neues Spiel, neues Glück – das ist offenbar die Devise von Linux- Das proprietäre Protokoll wird fast ausschließlich zusammen
Kernel-Entwickler Greg Kroah-Hartman, der nun erneut anstrebt, mit USB genutzt. Dabei entsteht eine Art virtueller Netzwerk-
das veraltete und von Sicherheitsrisiken geplagte Microsoft-Pro- verbindung, die an die Windows-Schnittstelle für Netzwerktrei-
tokoll RNDIS aus dem Linux-Kernel zu entfernen. ber (NDIS) angelehnt ist.
Bereits im vergangenen Jahr startete Das grundlegende Konzept von RNDIS
Kroah-Hartman eine Diskussion um die- ist laut Kroah-Hartman, der unter ande-
sen Schritt und setzte die Änderung rem den USB-Zweig in Linux verantwor-
zunächst auch vorläufig im Code um. Er tet, nicht nur unsicher und angreifbar,
musste sie aber zurücknehmen, da es sondern lässt sich vor allem auch nicht
dagegen zahlreiche Einsprüche gab. Das absichern. Außerdem gibt es im USB-Pro-
wohl größte Problem: RNDIS ist für viele tokoll selbst mehrere offene und stan-
Nutzer die wichtigste Komponente, um dardkonforme Alternativen zu RNDIS.
ihren Rechner per Tethering über ein An- Ob sich an der Problematik in Bezug
droid-Smartphone mit dem Internet zu auf das Tethering seit der ersten Diskus-

© Linux-Magazin
verbinden. Darüber hinaus nutzen auch sion etwas geändert hat und warum
Geräte wie Router RNDIS für Netzwerk- Kroah-Hartman diesen neuen Versuch
verbindungen. zum Entfernen von RNDIS unternimmt,
Die von Microsoft initiierte Remote ist noch nicht klar. Es bleibt abzuwarten,
Network Driver Interface Specification ob der Patch jetzt tatsächlich in den
stammt aus den Zeiten von Windows XP. Will RNDIS kicken: Greg Kroah-Hartman. Hauptzweig des Kernels wandert. Ӻ

CCC lädt zum 37. Chaos Communication Congress


Nach einer langen Corona-bedingten Pause lädt der Chaos live gestreamt und sind danach für die absehbare Zukunft ab-
Computer Club vom 27. bis 30. Dezember 2023 zum 37. Chaos rufbar, heißt es in der Mitteilung. Im CCH sind die Plätze gegen-
Communication Congress (37C3) in Hamburg ein. Dabei wird es über den Zeiten vor Corona etwas eingeschränkt, und auch das
unter anderem um Staatstrojaner vor dem Bundesverfassungs- Vortragsprogramm muss mit weniger Bühnen auskommen. Der
gericht, den KI-Hyper-Hype sowie Chat-Kontrolle gehen, teilt Ticket-Verkauf sowohl über Voucher als auch im offenen Vor-
der Club mit. Ergänzend zur Präsenzveranstaltung im Neubau verkauf soll später beginnen und kürzer ausfallen als gewohnt.
des Congress Center Hamburg (CCH) werden die Vorträge auch Weitere Details nennt das Blog unter https://events.ccc.de. Ӻ

Milliardenschwerer KI-Deal Checkmk und SDEA kooperieren


Nachdem Microsoft Anfang des Jahres seine Partnerschaft mit Die bekannte Monitoring-Lösung Checkmk und die Swiss Data-
OpenAI ausgeweitet hat und 10 Milliarden Dollar in den Chat- center Efficiency Association (SDEA) arbeiten jetzt offiziell zu-
GPT-Schöpfer investierte, zieht nun Amazon Web Services nach sammen. Die SDEA ist ein Konsortium aus Industrie und Hoch-
uns steckt ebenfalls Milliarden in den Konkurrenten Anthropic schulinstituten, das sich zusammengefunden hat, um einen
und dessen Sprachmodell Claude. umfassenden Ansatz für die Effizienz- und Emissionszertifizie-
Die Amazon-Cloud-Sparte Amazon Web Services will zunächst rung von Rechenzentren zu entwickeln. Die Kooperation erfolgt
Anthropic-Anteile für 1,25 Milliarden US-Dollar übernehmen. aufgrund der wachsenden Bedeutung präziser IT-Effizienzkenn-
Weitere Anteile über 2,75 Milliarden Dollar könnten folgen. zahlen in der Rechenzentrumsbranche.
Damit würde Amazon Anthropic mit insgesamt vier Milliarden Die Messung von IT-Effizienz-KPIs wird immer wichtiger. Die
Dollar unterstützen. Im Gegenzug sollen Amazon und dessen Industrie verwendet zur Ermittlung des Energieverbrauchs die
Kunden über Amazons KI-Plattform Bedrock bevorzugten Zu- Kennzahl PUE (Power Usage Effectiveness), wobei der Wert in
griff auf die KI-Technologien des Startups erhalten. Die KI-Mo- modernen Rechenzentren bei etwa 1,2 liegt und der meiste
delle von Anthropic sollen überwiegend auf der AWS-Cloud- Strom an die IT geliefert wird. Obwohl die SDEA ihre IT-KPIs klar
infrastruktur laufen, für Entwicklung und Training neuer Basis- definiert hat, stellt die Datenerfassung für viele Kunden eine
modelle will man in Zukunft die Trainium- und Inferentia-Chips Herausforderung dar. An der Stelle kommt Checkmk ins Spiel:
von AWS nutzen. Laut Amazon können Amazon-Entwickler und Es bietet eine Komplettlösung an, um die Daten zur Messung
-Ingenieure über Bedrock mit Anthropic-Modellen arbeiten, um von IT-Effizienz-KPIs zu erfassen. Checkmk liefert damit wert-
generative KI-Funktionen in ihre Arbeit zu integrieren. Ӻ volle Erkenntnisse für die Optimierung der IT-Infrastruktur. Ӻ

12.2023 www.linux-magazin.de 11
Aktuell Zahlen & Trends

Schlechte Noten für die DSGVO


Nach fünf Jahren im Einsatz bekommt die Datenschutzgrund-
verordnung (DSGVO) laut einer Umfrage des Digitalverbands
Bitkom von deutschen Unternehmen schlechte Noten: Die 2018
eingeführte Verordnung sei praxisfern und zu kompliziert, be-
mängeln die Befragten.
Obwohl inzwischen zwei Drittel (65 Prozent) der Unterneh-
men die Regelungen vollständig oder größtenteils umgesetzt

© Bitkom
haben, sind die Herausforderungen nach wie vor groß, teilt der
Bitkom mit. In der repräsentativen Umfrage unter 503 Unter-
nehmen ab 20 Beschäftigten in Deutschland beklagen die Be-
fragten vor allem, dass die DSGVO Geschäftsprozesse kompli- Meinungen zur DSGVO.
zierter mache (78 Prozent) und zu praxisfern sei (77 Prozent).
56 Prozent berichten, dass durch die DSGVO die Entwicklung Jedes zweite Unternehmen treibt seit der DSGVO-Einführung
neuer Produkte und Dienstleistungen verzögert werde. Rund einen höheren Aufwand für den Datenschutz und geht davon
die Hälfte (48 Prozent) stellt fest, dass Innovationen aus an- aus, dass das auch so bleiben wird (2022: 47 Prozent). 33 Prozent
deren Regionen aufgrund der DSGVO in der EU nicht genutzt der Befragten haben einen höheren Aufwand und erwarten,
werden könnten. dass dieser weiter zunehmen wird (2022: 30 Prozent). 86 Pro-
Zugleich räumen die Unternehmen in der Fünf-Jahres-Rück- zent der Datenschutzverantwortlichen in den Unternehmen
schau durchaus auch Vorteile der Datenschutzregeln ein: Die schaffen es kaum, aktuellen Entwicklungen beim Datenschutz
Datensicherheit im Unternehmen habe sich verbessert, und die in der Rechtsprechung zu folgen (2022: 81 Prozent).
DSGVO setze weltweit Maßstäbe (jeweils 61 Prozent), zudem Drei Viertel (74 Prozent, 2022: 64 Prozent) stellen fest, dass Da-
sei das Vertrauen in digitale Prozesse gestärkt worden (51 Pro- tenschutz in Deutschland so kompliziert geworden ist, dass es
zent). Die Wettbewerbsbedingungen in der EU seien nun ein- ihnen schwerfällt, Mitarbeiter über Datenschutz aufzuklären.
heitlicher (45 Prozent). 12 Prozent der Befragten plädieren so- Eine deutliche Mehrheit von 69 Prozent sieht in der DSGVO
gar dafür, die DSGVO zu verschärfen, um die Bürgerinnen und einen Nachteil im internationalen Wettbewerb gegenüber an-
Bürger besser zu schützen. deren Unternehmen, die nicht der DSGVO unterliegen. Ӻ

Deutsche Wirtschaft setzt auf Open Source


Ob Bürosoftware, Videokonferenzen oder Grafikbearbeitung – öffentlicht hat. Für die Studie wurden 1155 Unternehmen ab
für die meisten Anwendungen gibt es auch quelloffene Lösun- 20 Beschäftigten in Deutschland sowie 102 Personen aus der
gen. Sie werden inzwischen in der deutschen Wirtschaft breit- öffentlichen Verwaltung befragt.
flächig eingesetzt: 7 von 10 Unternehmen (69 Prozent) nutzen Als größte Vorteile von Open Source nennen 35 Prozent der
Open-Source-Software. Nur 18 Prozent stehen Open Source Befragten Kosteneinsparungen und 16 Prozent den Zugang
komplett ablehnend gegenüber. Das sind Ergebnisse des Open zum Quellcode. Dahinter folgen die einfache Anpassung an ei-
Source Monitor 2023, den der Digitalverband Bitkom jetzt ver- gene Bedürfnisse (7 Prozent) sowie der leichte Anbieterwechsel
(6 Prozent). Wichtigstes Kriterium bei der Auswahl von Open-
Source-Lösungen ist für Unternehmen, die bereits quelloffene
Software verwenden, die Funktionalität: Sie spielt für 95 Pro-
zent der Unternehmen eine entscheidende Rolle. Große Be-
deutung haben außerdem die Sicherheit und verfügbare Si-
cherheitszertifizierungen (93 Prozent) sowie die Darlegung von
Urheberschaft und Rechteinhaberschaft (85 Prozent).
Jedes zweite Unternehmen leistet einen finanziellen Beitrag
zu Open Source, am häufigsten durch Inanspruchnahme kosten-
pflichtigen Supports oder Erwerb von Lizenzen für Enterprise-
© Bitkom Research

Varianten entsprechender Lösungen (41 Prozent). In jedem


vierten Unternehmen arbeiten aber auch Teams oder Beschäf-
tigte aktiv an freien Projekten mit, 15 Prozent stellen veränder-
ten Quellcode selbst wieder zur Verfügung. Allerdings gehen
viele Unternehmen den Open-Source-Einsatz nicht strategisch
Unternehmen sind gegenüber Open Source aufgeschlossen. an: Nur 32 Prozent haben eine Open-Source-Strategie. Ӻ

12 www.linux-magazin.de 12.2023
Zahlen & Trends Aktuell

Laion: Massives Sprachmodell für Deutsch trainiert


Zahlreiche große Sprachmodelle (LLMs) wie GPT-4 oder das Qualität des Modells reiche inzwischen zwar an kommerzielle
intern von Google eingesetzte Palm sind zwar mehrsprachig, und proprietäre Modelle heran. Da das Training dafür jedoch
offene und frei verfügbare Sprachmodelle gibt es in den aller- hauptsächlich mit englischsprachigen Daten vorgenommen
meisten Fällen aber ausschließlich in Englisch. Die in Deutsch- worden sei, enthalte Llama 2 zahlreiche Verzerrungen, die etwa
land initiierte offene KI-Forschungsgruppe Laion setzt dem mit auf die US-Kultur oder auf die Sprache selbst zurückzuführen
LeoLM (Linguistically Enhanced Open Language Model) nun seien. „Wir versuchen, diese Probleme in der Fallstudie für die
ein deutschsprachiges Modell entgegen. deutsche Sprache zu lindern, indem wir viele der modernen
LeoLM basiert auf dem frei verfügbaren Llama 2 und liegt Techniken anwenden, um ein wirklich fähiges, lokalisiertes und
derzeit in Varianten mit 7 oder 13 Milliarden Parametern vor. zweisprachiges LLM zu entwickeln“, schreibt Laion dazu.
Diese Größen sollen sich dank einiger Optimierungen dafür Das Team passt Llama für Deutsch mit einer zweiten soge-
eignen, auch auf heimischen Rechnern und Grafikkarten aus- nannten Pre-Training-Phase an. Dabei wird das Llama-Modell
geführt zu werden statt ausschließlich im auf Grundlage eines weiteren deutschen
Rechenzentrum. Darüber hinaus ist laut Textkorpus trainiert. Zum Überprüfen der
der Ankündigung bereits ein Modell mit Ergebnisse des so trainierten Modells ha-
70 Milliarden Parametern in Arbeit. Trai- ben die Beteiligten bisher nur in Englisch
niert wird LeoLM mit Unterstützung von verfügbare Benchmarks ins Deutsche
HessianAI, einem Forschungsverbund übersetzt. Wie zu erwarten, liefert LeoLM
mehrerer hessischer Universitäten, und auf Deutsch etwas bessere Ergebnisse
dessen Supercomputer 42, der mehr als als Llama 2, schneidet aber auf Englisch

© Laion
600 Nvidia-A100-Karten nutzt. ein wenig schlechter ab. Dabei wögen
Als Motivation für die Arbeit an LeoLM die Vorteile durch die Verbesserungen
nennen die Beteiligten die starke Bin- für Deutsch schwerer als die Verschlech-
dung von Llama 2 ans Englische. Die Trainingsparameter der deutschen Version. terungen für Englisch, betont Laion. Ӻ
Anzeige

So viel gelernt wie lange nicht mehr:


~$ Training bei den Open-Sourcelern
# ausgewählte Kurse mit Termingarantie:
---

Docker: # 2 Tage
- 20. November (online)
- 11. Dezember

Kubernetes: # 3 Tage
- 22. November (online)
- 10. Januar

DHCP mit KEA: # 3 Tage


- 18. Dezember

Python Programmierung: # 5 Tage


- 15. Januar

Ansible: # 3 Tage
- 12. Februar
- 10. Juni

Ansible für Fortgeschrittene: # 2 Tage chen:


- 15. Februar Jetzt bu 00
1 8536-6
- 13. Juni Tel.: 020 tel.de
nuxho
info@li

Rund 100 Intensivkurse pro Jahr: linuxhotel.de


© NürnbergMesse / Thomas Geiger
IT-SA 2023: 800 Aussteller aus 31 Ländern, 10 Milliarden Euro für Security

„Wir brauchen Sie!“


Was in der unaufhörlich Cybersicherheit lohnt sich. So kurz und Verteidigern hilft: Polymorpher Code ist
knapp klingt der Tenor der auf der IT- leichter zu erzeugen, aber schwerer zu
boomenden Security-Bran- SA 2023 1 vertretenen Unternehmen, erkennen; Threat-Intelligenz, Teilautoma-
den Frank Venjakob vom Veranstalter tisierung und KI-Erkennung unterstützen
che Rang und Namen hat, NürnbergMesse direkt aufgreift: „Die jedoch ebenso den Verteidiger.
gute Nachricht: Die IT-SA ist wichtig. Die Das Vortragsprogramm in den fünf Fo-
gab sich Anfang Oktober in schlechte Nachricht: Die Bedrohung ist ren war breit gestreut, nicht immer stand
hoch und wird immer komplexer.“ Wer dabei die Technik im Vordergrund: Panels
Nürnberg ein Stelldichein – durch die drei rappelvollen Hallen 1 und Präsentationen reichten vom Social
streifte, sah 100 Aussteller mehr als im Engineering bis hin zum um sich greifen-
inklusive ranghoher Bundes- Vorjahr; sogar der Bundesstaat Virginia, den gravierenden Fachkräftemangel.
Heimat diverser US-Regierungsdienste, Passend zum Ada-Lovelace-Tag gab es
beamter. Markus Feilner war vertreten. Vorträge rund um Gleichberechtigung
Auch wenn so manche Marketing-Ab- in der IT. Zu den Neuvorstellungen zählte
teilung Fragwürdiges produziert – bei- die Open-Source-Cloud des bayerischen
spielsweise „Multi-Immutable Storage“ Kultusministeriums für alle Schulen im
oder die magentafarbenen Crossbody Freistaat. Zudem fand die Jahrestagung
Bags von T-Systems – bleibt das Dauer- der IT-Sicherheitsbeauftragten der Län-
Hype-Thema KI allgegenwärtig. Der Vor- der und Kommunen auf dem Congress@
standsvorsitzende des Bundesverbands IT-SA ihr diesjähriges Zuhause.
IT-Sicherheit Prof. Norbert Pohlmann er- 2
In der offiziellen Pressekonferenz
läutert, wie KI sowohl Angreifern als auch trafen überwiegend Fachjournalisten auf

14 www.linux-magazin.de 12.2023
IT-SA 2023 Aktuell

die frischgebackene BSI-Chefin Claudia


Plattner 1 und den Bundes-CIO Markus
Richter 1. Plattner, schon lange als Be-
auftragte in Sachen IT für die Bundes-
regierung unterwegs, verdeutlichte, wo-
rauf es derzeit ankommt: „Wir müssen
besser werden, und dazu brauchen wir
auch Ihre Hilfe!“, rief sie der anwesenden
Presse zu. Große Diskrepanz liege vor
allem zwischen der realen Bedrohungs-
lage und dem Sicherheitsbewusstsein

© NürnbergMesse / FrankBoxler
der Menschen und Firmen. Hier gebe es
immer noch Informationsbedarf.
„Stellen Sie sich einmal vor, was man
alles Gutes tun könnte mit den 200 Mil-
liarden Schaden, den Ransomware verur-
sacht!“, sinnierte Plattner. Es sei schlicht
nicht mehr die Frage, ob man getroffen
werde, sondern nur noch, wann. Backup, 2 BSI-Chefin Claudia Plattner (links) und Bundes-CIO Markus Richter (Mitte).
Restore, Resilienz, Awareness – allerorts
müsse das Sicherheitsniveau signifikant
erhöht werden, meint die BSI-Chefin: Richter freut sich, für das BSI „eine Präsi- mit echter Resilienz wird es möglich sein,
„Es darf nicht mehr so leicht sein, uns dentin mit viel Kompetenz und Energie den freien Raum Internet zu bewahren,
anzugreifen – so etwas kann das Weiter- gefunden zu haben. Das ist das, was so wie wir das alle wollen.“
bestehen einer Firma bedrohen.“ Deutschland jetzt braucht.“ Sabotage, Es bleibt zu hoffen, dass sich die IT-
Nach der viel diskutierten Unabhängig- Spionage, Cybercrime – Angreifer setzen Security-Branche wirklich, wie Richter es
keit beziehungsweise der Weisungsge- immer perfidere Mittel ein, aber „vieles sich wünscht, zum Motor des Fortschritts
bundenheit des BSI gefragt, betonten wäre vermeidbar, wenn man nur die entwickelt, den Deutschland für eine er-
Plattner und Richter die gute Zusammen- Empfehlungen des BSI beachten würde.“ folgreiche Digitalisierung dringend be-
arbeit der Behörde mit dem Bundesinnen- Der Bundes-CIO betonte, gerade mit EU- nötigt. Das Geld ist da, bestätigt auch der
ministerium. Dem ist das BSI zwar unter- Vorgaben wie NIS-2 1 und dem Cyber Branchenverband Bitcom: 13 Prozent
stellt (als Exekutivorgan), will aber zu- Resilience Act (CRA 1) hätten die Unter- mehr wollen Unternehmen im nächsten
gleich „vollständige wissenschaftliche nehmen mittelfristig viele Hausaufgaben Jahr für IT-Security ausgeben, was die
Unabhängigkeit“ bewahren. zu machen, permanent und überall. „Nur Summe der Ausgaben 2024 voraussicht-
lich erstmals über die 10-Milliarden-Euro-
Grenze treiben wird.
Fast zur Randnotiz geriet auf der IT-SA
das Thema Open Source – allerdings ein-
deutig im positiven Sinne, denn FOSS gilt
als zentral und unersetzlich. Die Bundes-
regierung will Open Source weiterhin
stärken, das Zentrum für Digitale Souve-
ränität (ZenDiS 1) wird zum Jahres-
wechsel anfangen, Personal einzustellen,
und man startet darüber hinaus Koope-
rationen mit anderen europäischen Län-
dern. Denn, so resümierten Plattner und
Richter unisono: Open Source nimmt in
der IT-Sicherheit eine so zentrale Rolle
ein, dass man das nicht mehr besonders
erwähnen muss. (csi/jlu) Ӻ
© Markus Feilner

Weitere Infos und


interessante Links
www.lm-online.de/qr/49894
1 Rappelvoll: Besucherandrang in den Hallen der IT-SA 2023.

12.2023 www.linux-magazin.de 15
Entwurfsmuster in der objektorientierten Softwareentwicklung

Musterhafte Software
Passt eine gute Lösung auf eine Vielzahl von Problemen, Welcher Softwareentwickler kennt das
nicht: Man steht vor einer größeren Pro-
erspart das eine lange, anstrengende und potenziell fehler- grammieraufgabe, und es beschleicht
einen das Gefühl, eine ähnliche Aufgabe
behaftete Suche nach dem schon bekannten Weg. In der schon einmal gelöst zu haben. Wie ge-
nau, das will einem jedoch beim besten
Softwareentwicklung können Entwurfsmuster wertvolle Er- Willen nicht mehr einfallen. Nun muss
man also erneut Energie in einen eigent-
fahrungen speichern und nachnutzbar machen. Mirko Sonntag lich nicht neuen Entwurf stecken. Zu
schade, denn wie schön wäre es gewe-
sen, hätte man von der zuvor gemachten
Erfahrung profitieren können, oder noch
besser: könnte man sogar aus dem Er-
fahrungsschatz einer ganzen Community
schöpfen! In diesem Artikel geht es um

16 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema

diesen Erfahrungsschatz und damit um


Entwurfsmuster in der objektorientierten public Toolbar createToolbar(String style) {
Softwareentwicklung. Toolbar tb = null;
if ("Light".equals(style)) {
Vor ungefähr 80 Jahren entstanden mit
// light theme
der Z3 und dem Eniac die ersten pro- tb = new LightToolbar();
grammierbaren Maschinen und bald da- tb.addButton(new LightButton("Neu"));
tb.addButton(new LightButton("Speichern"));
rauf auch die ersten einfachen Program- tb.addButton(new LightButton("Einfügen") );
miersprachen, später folgten die soge- }else if("Dark".equals(style)){
// dark theme
nannten Hochsprachen. Es entwickelten tb = new DarkToolbar();
sich Programmierkonzepte wie Kontroll- tb.addButton(new DarkButton("Neu"));
strukturen, Variablen, Prozeduren sowie tb.addButton(new DarkButton("Speichern"));
tb.addButton(new DarkButton("Einfügen"));
Funktionen und schließlich auch die ob- }
jektorientierte Programmierung. In ra- return tb;
}
santem Tempo erweitert sich die Liste
der Programmiersprachen permanent,
etwa um mit technischen Entwicklungen LightButton
Schritt zu halten, eine bestimmte fach-
liche Domäne zu adressieren oder das ...
TextProcessingApp
Programmieren zu vereinfachen.
Es mag der Eindruck entstehen, man createToolbar(String style)
brauche sich lediglich für die richtige DarkButton
Programmiersprache zu entscheiden, um ...
gute Software zu schreiben. In gewisser
Hinsicht stimmt das sogar, denn gute
Bibliotheken und Frameworks nehmen
Entwicklern unliebsame oder langweilige 1 Eine erste Lösung für die Werkzeugleiste einer Textverarbeitung.
Tätigkeiten ab, sodass weniger mensch-
liche Fehler passieren. Dennoch ist die
Softwareentwicklung eine kreative Tätig- eine der Routen lässt sich nachträglich sung beliebig oft anwenden können,
keit, bei der es konkrete Anforderungen zwar noch ändern, das zöge jedoch zu- ohne sie jemals ein zweites Mal gleich
auf eine abstrakte Art und Weise zu lösen sätzliche Kosten nach sich – etwa einen auszuführen.“ 1
gilt, sodass ein Rechner die Lösung wie- Umweg. Das Beispiel lässt sich auf die Wer jetzt glaubt, dass es in dem Zitat
derholt ausführen kann. Häufig existieren Softwareentwicklung übertragen: um Muster in der Informatik geht, der
viele völlig verschiedene Wege, um die • Jede Entwurfsentscheidung hat Vor- irrt. Christopher Alexander war Architekt.
Anforderungen technisch umzusetzen. züge und Nachteile. Seine Muster bezogen sich auf Entwürfe
Aber welcher Weg ist der richtige? Gibt • Selbst eine gut begründete Entwurfs- für Gebäude oder für Städte. Wenn ein
es überhaupt einen richtigen Weg, oder entscheidung kann sich in Anbetracht Handwerker einen neuen Holzfußboden
sind alle Wege gleich gut, solange sie nur künftiger Änderungen als unpraktisch in ein Zimmer legen soll, dann folgt die
dasselbe Ziel erreichen? erweisen. Problemlösung ebenfalls einem tech-
Nun, das hängt von mehreren Fakto- • Eine Entwurfsentscheidung lässt sich nischen Muster: Der Untergrund ist vor-
ren ab. Für meinen Arbeitsweg mit dem später revidieren, was jedoch zusätz- zubereiten (sauber, gerade, gegebenen-
Auto im Großraum Stuttgart haben sich liche Kosten verursacht. falls gedämmt); die Bretter müssen einen
für mich drei Routen etabliert. Bevor ich Es erweist sich, dass Probleme nicht für bestimmten Abstand zur Wand haben;
losfahre, befrage ich einen Kartendienst sich allein stehen, sondern manche da- es gilt, die Sockelleisten zu montieren.
und wähle einen der Wege nach gerings- von kleinere oder größere Gemeinsam- In manchen Parametern weichen die
ter voraussichtlicher Fahrtzeit aus. Diesen keiten aufweisen. Das ist eine gute Nach- Lösungen jedoch voneinander ab: Zim-
Vorteil (Zeitersparnis) erkaufe ich durch richt für die Problemlöser, denn ähnliche mer haben unterschiedliche Maße und
potenzielle Nachteile (zum Beispiel eine Probleme lassen sich durch ähnliche Lö- Winkel; Parkett ist dicker als Laminat; Par-
längere oder bergige Strecke und somit sungen – sogenannte Patterns – bewäl- kett lässt sich sägen, Laminat kann man
mehr Benzinverbrauch, eine Strecke mit tigen. Für diese Entwurfsmuster gibt es schneiden; Sockelleisten können je nach
mehr Ampeln und dadurch mehr Stress). allerdings keine allgemeine Definition. Wandbeschaffenheit genagelt oder müs-
Außerdem basiert meine Entscheidung Wesentlich mitgeprägt wurde der Be- sen verschraubt werden.
auf der aktuellen Verkehrssituation. Die griff 1977 von Christopher Alexander: Auch in anderen Domänen gibt es
kann sich allerdings schnell ändern, zum „Jedes Muster beschreibt ein in unserer Muster. In der Mode denke man an die
Beispiel durch einen Verkehrsunfall auf Umwelt beständig wiederkehrendes Pro- Abendgarderobe oder Business Casual.
meiner Strecke, und somit meine Wahl blem und erläutert den Kern der Lösung In der Literatur kennt man die Span-
verschlechtern. Meine Entscheidung für für dieses Problem, sodass Sie diese Lö- nungskurve für die Handlung eines

12.2023 www.linux-magazin.de 17
Titelthema Grundlegende Entwurfsmuster

public Toolbar createToolbar() {


Toolbar tb = tbFact.createToolbar();
TextProcessingApp tb.addButton(tbFact.createButton("Neu"));
tb.addButton(tbFact.createButton("Speichern"));
TextProcessingApp(ToolbarFactory tbFact) tb.addButton(tbFact.createButton("Einfügen"));
createToolbar() return tb;
}
uses uses

Button ToolbarFactory
{abstract} {abstract}

name createToolbar()
createButton(String name)
...

LightButton ComicButton LightToolbarFactory DarkToolbarFactory ComicToolbarFactory

... ... createToolbar() createToolbar() createToolbar()


createButton(String name) createButton(String name) createButton(String name)

DarkButton

...

2 Das Abstract-Factory-Muster delegiert die Erzeugung von Objekten an ein separates Fabrikobjekt. Familien von Produkten lassen
sich so an einer zentralen Position erstellen und ganz neue Produktfamilien einfach einführen.

Dramas. Knapp 20 Jahre nach Christopher Software 1. Mittlerweile gibt es Muster- sind eine Sammlung von Erfahrungen
Alexanders Veröffentlichung wurde der sammlungen für Softwarearchitekturen, vieler Köpfe. Sie verbessern die Kom-
Ansatz auf die Informatik übertragen. Die Enterprise Application Architecture 1, munikation unter Experten, zeigen un-
sogenannten Viererbande (Gang of Four: Enterprise Integration 1, Cloud Compu- terschiedliche Alternativen bei der Pro-
Erich Gamma, Richard Helm, Ralph John- ting 1, Workflows 1 oder den Entwurf blemlösung auf, erhöhen die Flexibilität
son und John Vlissides) verschriftlichte von APIs 1, um nur einige zu nennen. einer Lösung oder verbessern die Wie-
die Entwurfsmuster für objektorientierte Das ist nur logisch, denn Musterkataloge derverwendung.

Was ist ein guter Entwurf?


Aber zurück zu objektorientierten Ent-
wurfsmustern. Objektorientierte Pro-
Document Bild grammierung lebt von Abstraktionen in
Form von Klassen und ihren Objekten,
load() getSize()
paint()
der Kapselung (also Information Hiding
load() und Schnittstellen), der Vererbung, Poly-
save()
morphie und Assoziationen (etwa die
Aggregation). Wer diese Konzepte oder
einen Teil davon verstanden hat, kann
objektorientiert entwickeln. Objektorien-
// ...
tierung allein führt jedoch noch nicht zu
Size size = bild.getSize(); bild = load();
// ... return bild.getSize(); guten Softwareentwürfen: Das Zerlegen
eines Systems ist und bleibt schwierig.
Es gilt, unheimlich viele Entwurfsent-
scheidungen zu treffen, die bestimmte
3 Ausgangspunkt: Das Dokument lädt schnell, nur Bilder dauern. Konsequenzen nach sich ziehen. Welche

18 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema

Klassen soll das System haben, und in können, ohne den bereits bestehenden Softwareentwurf beispielhaft Entwurfs-
welcher Granularität? Wo und wie sollen Code verändern zu müssen. Diese und muster aus diesen drei Kategorien an.
welche Klassen instanziiert werden? Wie weitere Prinzipien liegen den Entwurfs-
viele Instanzen darf es für welche Klassen mustern zugrunde.
Wie Objekte erstellen?
geben? Welche Schnittstellen soll es ge- Aber aufgepasst! Kein Entwickler soll
ben? Welche Art von Beziehungen sollen Prinzipien und Muster exzessiv anwen- Die Frage klingt zunächst einmal trivial,
die Klassen und Objekte zueinander be- den. Es ist weder nötig noch möglich, an entpuppt sich bei genauerer Betrach-
sitzen? Wie kann man Komponenten fle- jeder Stelle allen Prinzipien zu folgen tung aber als ein ernsthaftes Problem.
xibel zusammensetzen? Wie lassen sich oder ein Muster an das nächste zu reihen. Um ein einzelnes Objekt anzulegen, be-
Algorithmen leicht wiederverwenden? Das führt nur zu sehr komplexem Code. nutzt man den Konstruktor der Klasse
Bei der Softwareentwicklung können Prinzipien muss man an manchen Stellen und übergibt, falls nötig, die entspre-
wir uns auf eine Konstante immer ver- verletzen, Muster haben Grenzen. Ein chenden Parameter zur Initialisierung.
lassen: die Veränderung. Wenn Anwen- Entwickler sollte danach streben, Prin- Gilt es jedoch, komplexere Strukturen
dungen längere Zeit in Gebrauch bleiben, zipien und Muster dort einzusetzen, wo anzulegen, verliert man auf diese Weise
dann entsteht zwangsläufig der Bedarf, zukünftig Erweiterungen zu erwarten an Flexibilität. Möchte man in Zukunft
sie aus verschiedensten Gründen zu än- sind. An anderen Stellen im Code, die fallbasiert unterschiedliche Objekte an-
dern: Kunden wollen eine neue Funktion voraussichtlich stabil bleiben, kann man legen, muss man unschöne Abfragen ein-
haben, die Schnittstelle eines Drittsystems mit weniger Flexibilität gut leben. Tech- bauen und die Anwendung verändern.
ändert sich, die neue Version einer ge- nische und fachliche Erfahrung hilft bei Angenommen, wir entwickeln ein
nutzten Bibliothek verlangt ein anderes diesen Entscheidungen maßgeblich. Textverarbeitungsprogramm, konkret
Datenformat. Diese Liste lässt sich quasi Objektorientierte Entwurfsmuster teilt dessen Werkzeugleiste. Wir betrachten
beliebig verlängern. Gute Entwürfe ge- man in drei verschiedene Kategorien ein: lediglich einen Teilaspekt: Wir wollen
hen vorausschauend mit möglichen Ver- Erzeugungsmuster, Verhaltensmuster Buttons für verschiedene Zwecke hinzu-
änderungen um und erhöhen den Grad und Strukturmuster. Erzeugungsmuster fügen, und es soll unterschiedliche gra-
an Wiederverwendung. kümmern sich darum, neue Objekte von fische Darstellungen (Light Mode, Dark
Dabei haben sich bestimmte Prinzipien Klassen anzulegen. Strukturmuster be- Mode) je nach Vorliebe des Benutzers
herauskristallisiert, die zu guten Ent- schreiben Möglichkeiten, Klassen oder geben. Im einfachsten Fall entsteht eine
würfen führen. Das Prinzip, auf eine Objekte geschickt so miteinander zu as- 1
Lösung wie in Abbildung . Das ist zu-
Schnittstelle hin zu programmieren statt soziieren, dass dabei beispielsweise grö- nächst einmal völlig in Ordnung, denn
auf eine konkrete Implementierung, hilft ßere, aber flexible Strukturen entstehen irgendwo müssen schließlich Entschei-
bei der Entkopplung von Klassen und oder gute Schnittstellen zu Klassen, Da- dungen getroffen werden.
führt damit zu mehr Robustheit. Die Im- tenstrukturen oder Systemen eingeführt Betrachten wir den initialen Entwurf
plementierung einer Schnittstelle kann werden. Der Fokus von Verhaltensmus- durch die Brille der Erweiterbarkeit: Mög-
man problemlos austauschen, ohne die tern hingegen liegt auf Algorithmen, liche zukünftige Erweiterungen können
aufrufende Klasse (also den Klienten) an- Zuständigkeiten für und Interaktionen die Einführung neuer Stile, neuer Knöpfe
passen zu müssen. zwischen Objekten. Im Folgenden sehen oder eines vollkommen anderen Layouts
Ein weiteres Prinzip ist es, Objektkom- wir uns anhand von Leitfragen beim der Werkzeugleiste sein. In jedem Fall
position gegenüber der Klassenverer-
bung zu bevorzugen. Sowohl Komposi-
tion als auch Vererbung ermöglichen das Grafik
Document
Erweitern einer Anwendung durch neues {abstract}
if (echtesBild == null) {
Verhalten. Bei der Klassenvererbung load() getSize() return size;
überschreibt eine Kindklasse das Verhal- paint() } else {
load() return echtesBild.getSize()
ten der Elternklasse. Das ist eine statische save() }
Änderung, die bereits zur Kompilierzeit
feststeht. Die Komposition hingegen de-
legiert die Ausführung eines Algorithmus BildProxy
an ein anderes Objekt. Auf diese Weise
lässt sich ein bestimmtes Verhalten oder Bild echtesBild: Bild
sogar ein ganzer Algorithmus zur Lauf-
getSize() getSize() if (echtesBild == null) {
zeit austauschen. paint() paint() echtesBild = load();
Das dritte hier zu nennende Prinzip ist load() load() }
das Open/Closed-Prinzip. Es besagt, dass save() save() echtesBild.paint();

ein Entwurf offen für Erweiterungen sein


soll und geschlossen für Veränderungen.
Anders ausgedrückt: Man soll das Ver- 4 Das Proxy-Muster ermöglicht Lazy Loading. Der Proxy liefert einfache Daten wie die
halten einer Anwendung leicht erweitern Maße sofort. Das echte Bild kann später oder parallel geladen werden.

12.2023 www.linux-magazin.de 19
Titelthema Grundlegende Entwurfsmuster

einfache Anfragen beantworten (Höhe,


Breite). Er lädt das tatsächliche Bild aber
Rechteck Kreis nur dann vollständig, wenn es wirklich
angezeigt werden soll. So kann man ein
zeichne() zeichne()
Lazy Loading auch in anderen Kontexten
umsetzen und das Laden des Originals so
TextMitRahmen BildMitScrollbar
MitScrollbar MitRahmen weit wie möglich hinauszögern. Je nach
Implementierung kann man vor dem
TextMitScrollbar BildMitRahmen
Komponente
Klienten sogar gänzlich verbergen, dass
TextMitRahmen {abstract} BildMitScrollbar er nur mit dem Proxy und nicht mit dem
Text zeichne() Bild Original kommuniziert.

zeichne() zeichne()
Flexible Komponenten
Manchmal steht man vor dem Problem,
dass es Komponenten mit mehreren
Tabelle kombinierbaren Ausprägungen geben
soll. Unsere Textverarbeitung soll ver-
zeichne()
schiedene Komponenten wie Text, Ta-
bellen, Bilder und geometrische Formen
grafisch darstellen können. Da liegt es
5 Das objektorientierte Herangehen kann zu einer Inflation der Klassenanzahl führen. nahe, jeder Komponente eine Klasse zu
spendieren. Wir erhalten also die Klassen
Text, Tabelle, Bild, Rechteck, Kreis
müssten wir unsere Hauptklasse Text- Welche Schnittstellen? und so weiter, die alle von der abstrakten
ProcessingApp anfassen. Ein besserer Klasse Komponente erben.
Entwurf wäre es, die Erstellung der Ob- In einer komplexen Software gibt es viele Jetzt kommt die Anforderung hinzu,
jekte in eine Fabrik auszulagern, also in verschiedene Arten von Schnittstellen. einen schönen dicken Rahmen um jede
eine Klasse, deren Zweck die Erstellung Objekte haben eine Schnittstelle, Sys- Komponente ziehen zu können. Geben
2
von Objekten ist . teme und Subsysteme ebenfalls. Es gibt wir dem üblichen objektorientierten Re-
Dieses Erzeugermuster nennt sich Ab- interne und externe Schnittstellen, aktu- flex nach, diese Anforderung per Klassen-
stract Factory. Jeder Stil wird durch eine elle und veraltete. Sehen wir uns das am vererbung zu lösen, stehen wir plötzlich
eigene Fabrik abgebildet, deren gemein- Beispiel einer Art Objektschnittstelle an. mit doppelt so vielen Klasse da: Text-
same Schnittstelle eine abstrakte Klasse Wenn man in einer Textverarbeitung MitRahmen, TabelleMitRahmen, BildMit-
ist. Jede Fabrik erstellt Familien von Ob- ein Dokument öffnet, dann muss es zu- Rahmen und so weiter. Als wäre das nicht
jekten (hier: Werkzeugleiste und zuge- erst vollständig geladen sein, damit das schon aufwendig genug, bemerkt der
hörige Buttons). Die Hauptklasse ist nun Programm es anzeigen kann . Nun 3 Kunde, dass größere Texte, Bilder oder
nicht mehr selbst dafür zuständig, die lässt sich der Text schnell einlesen, die Tabellen nicht mehr auf den Bildschirm
Objekte zu erzeugen. Stattdessen wird Bilder jedoch nicht. Wenn ein Dokument passen, und wünscht sich für diese Fälle
ihr eine konkrete Fabrik übergeben, die mehrere große Bilder enthält, dauert der auch noch eine Scrollbar.
sie zum Erzeugen der Werkzeugleiste Ladevorgang entsprechend lange, was Mit der Klassenvererbung explodiert
verwendet. So lässt sich ein neuer Stil für den Benutzer unschön ist. Besser wäre spätestens jetzt die nötige Anzahl der
einfach hinzufügen, indem man eine es, wenn die Software den Text unmittel- 5
Klassen : Text, TextMitRahmen, Text-
zusätzliche Fabrik und neue Produkte bar anzeigt und die Bilder eines nach dem MitScrollbar, TextMitRahmenUnd-
(Werkzeugleiste, Button) anlegt. Ein Stil anderen einfach nachlädt. Besonders ele- Scrollbar, und so weiter. Was ist, wenn
lässt sich auch zur Laufzeit austauschen: gant klappt das, wenn bereits Metadaten jetzt noch jemand auf die Idee kommt,
Man muss lediglich der Hauptklasse die über die Bilder vorliegen, vor allem die den Komponenten Überschriften zu ge-
entsprechende Fabrik zuweisen und die Maße, sodass sich der Text dann schon ben? So kann es nicht weitergehen. Was
Werkzeugleiste neu zeichnen. korrekt formatieren lässt. wir hier eigentlich tun, ist, Objekten zu-
Die Hauptklasse besitzt keine statischen Das Strukturmuster Proxy schafft hier sätzliches Verhalten in verschiedenen
Abhängigkeiten mehr zu den konkreten 4
Abhilfe . Unser BildProxy ist ein Stell- Kombinationen zu geben.
Implementierungen der Produkte. Der vertreterobjekt für das echte Bild. Proxy Das Strukturmuster Decorator Pattern
Nachteil dieses Ansatzes liegt darin, dass und das Bild implementieren dieselbe löst dieses Problem durch Anwendung
das Einführen ganz neuer Produkte (zum Schnittstelle, der Proxy kontrolliert aber des Prinzips Komposition über Vererbung.
Beispiel Dropdowns) zu einer Änderung den Zugriff auf das Bild. Er verhält sich Wie schon zuvor sind die grafischen
der abstrakten Fabrik und aller konkreten genauso wie das echte Bild, besitzt Bild- Komponenten Kinder einer abstrakten
Fabriken führt. informationen und kann auf diese Weise 6
Klasse . Die grafischen Erweiterungen

20 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema

Client
Komponente komp = new Rahmen(3, new Scrollbar(
tuEtwas() new Überschrift("Ein Bild", new Bild( ... ))));

komponente komponente.zeichne()

Komponente Decorator
Text {abstract} {abstract}
super.zeichne();
zeichne() zeichne() zeichne()
zeichneMitRahmen();

Bild
Rahmen
zeichne()
zeichne()
zeichneMitRahmen()

Tabelle Kreis Rechteck Scrollbar Überschrift

zeichne() zeichne() zeichne() zeichne() zeichne()


zeichneMitScrollbar() zeichneMitÜberschrift()

6 Das Decorator-Muster erweitert die Funktionalität einer Klasse, ohne die Methoden mithilfe von Vererbung zu überschreiben. Im
Beispiel werden grafische Komponenten flexibel mit zusätzlichen Elementen wie einem Rahmen oder einer Scrollbar erweitert.

(Rahmen, Scrollbar, Überschrift) wer- mehrung der Klassen zu erzwingen oder schieden ausrichten: linksbündig, rechts-
den jedoch bei Bedarf als Komposition komplexe Fallabfragen innerhalb der bündig oder zentriert. Es gibt aber noch
hinzugefügt. Man spricht dabei von so- Klassen auszulösen. Die Komponenten weitere Komponenten, die man auf diese
genannten Dekorierern. lassen sich sogar zur Laufzeit mit zusätz- Weise formatieren kann, zum Beispiel
Es gibt einen abstrakten Dekorierer, lichem Verhalten erweitern. Tabellenzellen, Kopfzeilen oder Bilder.
ebenfalls als Kindklasse der Komponen- Da die Dekorierer geschachtelt werden, Naiv könnte man die Algorithmen für
te, von dem die konkreten Dekorierer muss der Entwickler die Reihenfolge im die Ausrichtung in eine Klasse Absatz
erben. Der Dekorierer hält eine Referenz Blick haben, denn die Ausführung der stecken. Sie erhält eine Variable mit der
auf eine grafische Komponente (echte Logik folgt ihr. Das Muster birgt außer- Art der Ausrichtung und wählt abhängig
Komponente oder Dekorierer) und kann dem Gefahren. Zum einen erben Kom- davon den passenden Algorithmus aus.
somit sowohl deren Logik als auch die ponenten und Dekorierer von derselben Das führt allerdings zu einer Duplizie-
eigene dekorierende Logik ausführen. Nun abstrakten Komponentenklasse, obwohl rung des Codes in den entsprechenden
kann man Dekorierer beliebig kombi- Dekorierer eigentlich gar keine Kompo- Klassen, etwa für Tabellenzellen und so
nieren und einer konkreten Komponente nenten sind. Das muss man berücksich- weiter. Folglich erstellen wir lieber eine
hinzufügen. So erzeugt new Scroll- tigen, wenn aus bestimmten Gründen die abstrakte Klasse Komponente, von der die
bar(new Text()) einen Text mit einer Objektidentität eine Rolle spielen sollte. Klassen Absatz, Tabellenzelle, Kopf-
Scrollbar und new Überschrift("Ein Zum anderen können viele kleine Deko- zeile sowie Bild erben 7 . Status und
Bild", new Rahmen(3, new Bild())); riererklassen entstehen, die sehr ähnlich Logik der Ausrichtung liegen in der Klas-
ein Bild mit Überschrift und Rahmen. aussehen, nur wenig Funktionalität ent- se Komponente und werden von allen vier
Das Decorator Pattern erzeugt hierbei halten und deren Objekte verschachtelt Klassen verwendet.
Veränderlichkeit hinsichtlich unter- sind. Das kann für ungeübte Entwickler Was nach einem logischen Entwurf
schiedlicher konkreter Ausprägungen schwer zu verstehen sein und erschwert klingt, beschränkt jedoch die Flexibilität
der grafischen Komponenten. Es lassen außerdem das Debugging. und Erweiterbarkeit. Um eine neue Aus-
sich sehr einfach neue grafische Aspekte richtungsart einzuführen, den Blocksatz,
hinzufügen, ohne das bestehende Pro- müssen wir jetzt die Klasse Komponente
Flexible Algorithmen
gramm anpassen zu müssen. Das ermög- verändern. Es entsteht ein neuer Ausrich-
licht, auf sehr elegante Art und Weise die Bleiben wir beim Beispiel der Textver- tungsstatus, und es gilt, den bestehen-
verschiedenen Aspekte zu kombinieren, arbeitung. Ein Dokument besteht aus den Algorithmus anzupassen. Das ist
ohne dadurch eine explosionsartige Ver- Absätzen. Jeder Absatz lässt sich ver- zwar unschön, aber machbar. Allerdings

12.2023 www.linux-magazin.de 21
Titelthema Grundlegende Entwurfsmuster

stehen bald weitere Anforderungen vor tierungen mit den jeweiligen Algorith- Einschränkungen?
der Tür, die unseren Entwurf strapazieren, men erben. Die Komponenten besitzen
wie eine Ausrichtung abhängig von der nun für jede Algorithmenfamilie eine Die Muster funktionieren weitgehend
Art der Komponente, etwa bei Tabellen- Member-Variable und rufen die Logik bei unabhängig von konkreten objektorien-
zellen oben linksbündig oder mittig Bedarf auf. tierten Programmiersprachen, und es
rechtsbündig. Außerdem kommen wei- Der Entwickler kann den Komponen- gibt Codebeispiele für viele Sprachen 1.
tere ergänzende Formatierungsarten ten ihr Formatierungsverhalten nun fle- Manche Muster, zum Beispiel Adapter
hinzu, etwa Schriftart oder Aufzählung. xibel zuweisen, die Konfiguration lässt oder Fassade, lassen sich auch bei pro-
Es gibt jetzt also drei Familien von Al- sich auch noch zur Laufzeit ändern. Die zeduralen Sprachen einsetzen.
gorithmen (Ausrichtung, Schriftart, Auf- Auswahl eines Algorithmus erfolgt nicht Es gibt einige wenige Fälle, bei denen
zählung), von denen jeweils eine heran- mehr auf Basis von Bedingungsanwei- sich Muster in einer objektorientierten
gezogen wird. In der Vererbungshierar- sungen, sondern über eine Zuweisung. Sprache leichter oder schwerer umsetzen
chie müsste man nun anfangen, in den Neue Algorithmen oder auch deren Va- lassen. Zwei Beispiele: Das Singleton-
konkreten Komponenten Ausnahmen rianten lassen sich damit einführen, ohne Muster kann man in Python auf recht
vom Standardverhalten einzurichten, dass man dafür den bestehenden Code unterschiedliche Arten implementieren
indem man Methoden überschreibt: Ein anpassen müsste. (mit einer Meta-Klasse oder den Kon-
Bild hat keine Schriftart, eine Tabellen- Allerdings gilt es zu bedenken, dass struktoren __new__ oder __init__), die
zelle nutzt die genannten besonderen die Algorithmen den Komponenten für Ungeübte teilweise schwer zu lesen
Ausrichtungen. Vererbung ist hier nicht irgendwo zugewiesen werden müssen. sind. In Java gibt es keine Mehrfachver-
der richtige Ansatz und führt zu Code- Der Client-Code muss folglich die Al- erbung, weshalb sich das klassenbasierte
duplikaten, wenn mehrere Komponenten gorithmen, deren Unterschiede und Adapter-Muster nicht realisieren lässt.
dieselben Ausnahmen implementieren. möglicherweise spezifisiche Implemen- Das sind jedoch eher Ausnahmen.
Außerdem muss man bei der Einführung tierungsdetails kennen. Ein weiterer Entwurfsmuster lassen sich universell
neuer Algorithmen in den drei Familien Nachteil: Die Algorithmen einer Familie einsetzen und in jedem Softwareprojekt
mehrere Klassen adaptieren. teilen sich notwendigerweise eine nutzen, unabhängig von der Größe oder
Wie finden wir aus dieser Misere einen Schnittstelle. Deshalb müssen einfachere der Fachdomäne. Auch die gewählte Ent-
Ausweg? Sie erinnern sich: Komposition Algorithmen unter Umständen eine wicklungsmethodik spielt keine Rolle.
über Vererbung! Das Verhaltensmuster komplexere Schnittstelle implementie- Ob man nun nach V-Modell oder Scrum
8
Strategy ist hierbei der richtige Weg . ren als eigentlich nötig. Beispielsweise entwickelt, beeinflusst solche codenahen
Wir verlagern die Familien verwandter erhalten sie Parameter übergeben, die Entwurfsentscheidungen nicht. Relevan-
Algorithmen in separate Klassen. Für sie gar nicht benötigen. Darüber hinaus ter ist da die persönliche Qualifikation.
jede Familie gibt es eine abstrakte Ober- führt das Muster zu einer erhöhten An- An den Umgang mit Entwurfsmustern
klasse, von der die konkreten Implemen- zahl von Objekten in der Anwendung. nicht gewohnte Entwickler werden zu-
nächst etwas mehr Probleme haben, den
Programmcode zu verstehen oder so zu
erweitern, dass das Muster nicht verletzt
if (("links").equals(ausrichtung)) { wird. Das sollte sich jedoch nach einer
// Elementlinks ausrichten Phase der Einarbeitung legen.
} else if (("rechts".equals(ausrichtung)) {
// Element rechts ausrichten Aus der Praxis ist nicht selten der Ein-
} else { wand zu hören, dass Entwurfsmuster zu
// Element zentriert ausrichten
}
schlechter Performance führen. Hier gilt
es zu differenzieren. Einerseits ist es tat-
sächlich so, dass manche Muster zu einer
deutlich höheren Anzahl von Objekten
Absatz
führen, zu zusätzlichen Klassen und As-
soziationen. Das Ziel ist ja schließlich
Komponente
Kopf {abstract} eine bessere Erweiterbarkeit und nicht
bessere Performance. Andererseits gibt
String ausrichtung es viele verschiedene nicht-funktionale
Tabellenzelle ausrichten()
Anforderungen, und die Geschwindig-
keit steht in vielen Fällen gar nicht an
erster Stelle. Eine robustere Software
Bild oder eine einfachere Softwarewartung
sind häufig wichtiger.
In der Welt der Embedded Software
7 Die naive Lösung für die Ausrichtung sieht einfach aus, beschränkt aber die Flexibili- kann es aber in der Tat auf Millisekunden
tät. Zudem erzwingt sie komplizierte Ausnahmen, wenn Anforderungen hinzukommen. ankommen – denken Sie zum Beispiel an

22 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema

aufzählung

Absatz schriftart

Komponente ausrichtung AusrichtungStrategie SchriftartStrategie AufzählungStrategie


Kopf {abstract} {abstract} {abstract} {abstract}

ausrichten() ausrichten() schriftartSetzen() aufzählungSetzen()


schriftartSetzen()
aufzählungSetzen()
Tabellenzelle

Bild

AusrichtungLinks usw. usw.

AusrichtungRechts
ausrichten()

AusrichtungZentriert
ausrichten()
ausrichtung.ausrichten()
AusrichtungBlocksatz
ausrichten()

ausrichten()

8 Das Stragegy-Muster kapselt Familien von Algorithmen. Das ermöglicht, Algorithmen leicht zuzuweisen und auszutauschen, sogar
zur Laufzeit. Das gezeigte Beispiel weist grafischen Elementen verschiedene Formatierungsalgorithmen zu.

die Steuerung von Ventilen oder Geräte- dokumentieren und teilen möchten, nicht de Probleme etabliert haben. In welcher
steuerungen im Fahrzeug (Airbag, ABS). selten aus der wissenschaftlichen Com- anderen Branche würde man schon frei-
Die Entscheidung zwischen Flexibilität munity. Man kann also davon ausgehen, willig auf einen so breiten Erfahrungs-
und Performance ist immer ein Trade-off, dass in Zukunft noch weitere Muster zum schatz verzichten? Daher empfehle ich
man kann nicht beides in vollem Maß Wissensschatz hinzukommen. jedem Entwickler, seine Axt zu schärfen,
bekommen. Höhere Flexibilität führt zu Die Liste der objektorientierten Ent- bevor er in den Wald geht – in diesem
Geschwindigkeitseinbußen. Mit allge- wurfsmuster ist hingegen stabil, und Fall mit dem Wissen über objektorientier-
meinen Aussagen zur Performance einer das wird voraussichtlich auch so bleiben. te Entwurfsmuster. Diese Investition zahlt
Lösung sollte man dennoch vorsichtig Der Bedarf ist eher anderer Natur: Zwar sich schnell aus. (jcb/jlu) Ӻ
sein. Letztendlich können nur Messun- gehören Entwurfsmuster zu einer guten
gen der konkreten Umsetzung von Algo- softwaretechnischen Ausbildung, doch
rithmen in einer konkreten Umgebung es gibt noch viele Entwickler, denen sie Weitere Infos und
Unterschiede in der Laufzeit offenbaren. nicht geläufig sind. Der Mangel an IT- interessante Links
Alles andere ist Stochern im Nebel. Fachkräften verstärkt diesen Effekt noch. www.lm-online.de/qr/49566
Dadurch gibt es unter den Entwicklern
immer mehr Quereinsteiger, denen be-
Wohin geht die Reise?
stimmte Teile der Ausbildung fehlen. Die-
Wie eingangs erwähnt, wurden in den se Tatsache und der Umstand, dass es in Der Autor
letzten Jahren neue Muster entwickelt der Softwareentwicklung oft sehr schnell
Prof. Dr. Mirko Sonntag lehrt Softwaretech-
oder entdeckt. Das liegt zum einen am gehen muss, führen zu Entwürfen, die
nik an der Hochschule Esslingen, mit den
beschleunigten technischen Fortschritt: man im weiteren Verlauf eines Projekts
Gebieten Programmieren, Softwaretechnik,
Dadurch gibt es immer wieder zusätz- oder über die Lebensdauer eines Produkts
Software Testing und Advanced Software
liche Bereiche, für die Lösungen gefragt oft adaptieren muss. Das verursacht bei
Engineering. Zusätzlich forscht er am Fraun-
sind. Mit dem Einsatz von KI in der Soft- der Softwarewartung einen ärgerlichen,
hofer Anwendungszentrum KEIM an neuen
wareentwicklung und dem Aufkommen unnötigen Mehraufwand.
Mobilitätskonzepten. Darüber hinaus unter-
vom Quantencomputing sind bereits Schriftlich festgehaltene Entwurfsmus-
stützt er die berufliche Weiterbildung durch
spannende Gebiete am Horizont zu er- ter gibt es schon seit fast 30 Jahren. Sie
Schulungen im Bereich Softwaretechnik an
kennen. Zum anderen gibt es viele Ex- umfassen eine Sammlung von Lösungs-
der Technischen Akademie Esslingen.
perten, die gern Wissen und Erfahrungen wegen, die sich für wiederholt auftreten-

12.2023 www.linux-magazin.de 23
Das Singleton-Pattern in Python Die berühmte Gang of Four (GoF 1)
definiert ein Singleton so: „Ensure a class
only has a single instance, and provide a

Einzigartig global point of access to it.“ Singletons


können nützlich sein, um Objekte abzu-
bilden, die in der Realität nur einmal auf-
treten können, wie ein Dateisystem oder
einen Printer-Spooler. Singletons sind glo-
Das Singleton-Pattern garantiert, dass es nur eine Instanz bale Objekte, die Nachteile von globalen
Variablen vermeiden wollen, aber trotz-
einer Klasse geben kann. Die repräsentiert in der Regel ein dem programmweit direkt verfügbar
sind. Wird ein Singleton an verschiedenen
Objekt, das in der Realität nur einmal vorkommt, zum Beispiel Stellen in einem Programm modifiziert,
kann es allerdings zu unerwarteten Effek-
ein Dateisystem. Python bietet verschiedene Möglichkeiten, ten kommen. Python bietet aber Möglich-
keiten, sie bei Bedarf zu vermeiden.
um ein Singleton abzubilden. Mike Müller
Module sind Singletons
Python bietet von Haus aus schon ein
eingebautes Singleton: Module in Py-
thon sind natürliche Singletons. Das liegt
© 3dart / 123RF.com
Singleton mit Python Titelthema

an der Funktionsweise des Import-Sys- Python in sys.modules nach, findet dort singleton_module aus dem Dictionary,
tems. Der Befehl import module_name den Eintrag os und holt sich das Modul- sodass beim nächsten Import wieder
importiert das Modul mit dem Namen objekt, ohne den Einleseprozess noch- der gesamte Einlesevorgang stattfindet.
module_name. So importiert beispiels- mals zu durchlaufen. Dieses Nachschla- Damit ist das Singleton kaputt, da bei
weise import os das Modul os aus der gen im Dictionary sys.modules läuft um dem Import from module import sing-
Standardbibliothek, das viele betriebs- mehrere Größenordnungen schneller leton_module eine neue Singleton-In-
systemnahe Funktionen abstrahiert und ab als das Einlesen beim ersten Import. stanz entsteht.
damit plattformübergreifend zur Ver- Jedes Python-Objekt hat einen Referenz- Python agiert so dynamisch, dass sich
fügung stellt, zum Beispiel das Erstellen zähler, der angibt, wie viele Referenzen fast immer ein Weg finden lässt, um der-
von Verzeichnissen oder den Abruf von auf es zeigen. Bei jedem Import erhöht artige Zwänge wie hier beim Singleton
Metadaten. sich dieser Zähler, und sys.getref- zu umgehen. Das dynamische Neuladen
Für das Singleton-Verhalten beim count(os) gibt jedes Mal eine größere von Modulen kann aber durchaus nütz-
komplexen Import-Prozess ist das Ca- Zahl zurück. lich sein und gute Dienste leisten, bei-
ching maßgebend. Beim ersten Import Listing 1 zeigt eine Singleton-Imple- spielsweise dann, wenn Systeme vom
eines Moduls liest Python den Datei- mentierung, die das Modul-Caching Nutzer erstellten Code zur Laufzeit ak-
inhalt ein und wandelt ihn in mehreren nutzt. Im selben Modul, das die Klasse tualisieren müssen.
Schritten in ein Python-Objekt um. Die- definiert, entsteht die Instanz singleton Eine weitere Möglichkeit, ein Singleton
ses Objekt speichert es dann im Dictio- = Singleton(100). Der Operator del umzusetzen, bietet die spezielle Metho-
nary sys.modules mit dem Modulnamen löscht ein Objekt. Das passiert hier direkt de __new__. Im Vergleich zur speziellen
als Schlüssel und dem Modulobjekt nach der Instanziierung. Damit steht
als Wert. Beim Import import os sieht die Klasse Singleton nicht länger bereit.
Es kann also lediglich eine einzige In- Eingebaute Module
stanz geben, die mit dem Import from
Bei sys handelt es sich um ein eingebautes
Listing 1: Singleton mit Modul singleton_module import singleton
Modul, also eines, das im Python-Inter-
class Singleton:
an beliebig vielen Stellen im Programm
zur Verfügung steht. preter integriert ist. Im Gegensatz zum
"""Only one instance planned. Modul os, dessen Quelltext in der Datei
""" os.py vorliegt, gibt es für sys keine Datei
# pylint: disable-msg=too-few-
Singletons mit __new__ sys.py. Beim interaktiven Ausprobieren
public-methods Dieser Ansatz lässt sich aber umgehen, von sys.getrefcount(os) in Systemen
def __init__(self, value): wenn man es denn darauf anlegt. Das wie IPython oder JupyterLab kann der
self.value = value Dictionary sys.modules ist veränderbar Zähler zwischen zwei Importen durchaus
und lässt nicht nur das Hinzufügen von um zwei, drei oder mehr ansteigen, da die-
Schlüssel-Wert-Paaren zu, sondern auch se Systeme selbst zusätzliche Referenzen
singleton = Singleton(100)
das Löschen. So entfernt del sys.mo-
del Singleton auf Objekte erzeugen.
dules['singleton_module'] das Modul

Listing 2: Singleton mit __new__


class Singleton: self.value = value
"""Singleton always returning the same instance in
`__new__`. def __repr__(self):
""" return f'{id(self)}: {self.__class__.__name__}
def __new__(cls, *args, **kwargs): (value={self.value!r})'

# pylint: disable=unused-argument
def create_only_one():
if '_inst' not in vars(cls):
"""Test singleton.
cls._inst = super().__new__(cls)
"""
return cls._inst
print('singleton 1:', OnlyOne(10))
print('singleton 2:', OnlyOne(20))
class OnlyOne(Singleton):
"""Test singleton. ### Aufruf ###
Each instance sets a new value. create_only_one()
""" singleton 1: 4815132688: OnlyOne(value=10)
def __init__(self, value): singleton 2: 4815132688: OnlyOne(value=20)

12.2023 www.linux-magazin.de 25
Titelthema Singleton mit Python

Methode __init__, die es bei den meis- __new__ als erstes Argument cls, also frei wählen könnte, haben sich self und
ten Klassen gibt, kommt __new__ sel- die Klasse. Während __init__ nichts cls als Konvention etabliert.
tener vor. Während __init__ als erstes (None) zurückgeben darf, muss __new__ Listing 2 zeigt eine Singleton-Umset-
Argument self übergeben bekommt, die neue Instanz zurückgeben. Obwohl zung mit __new__. Entscheidend ist hier
also eine Referenz auf die Instanz, erhält man die Namen für die Argumente auch cls._inst, das eine Referenz auf die ein-
zige Instanz enthält. Existiert cls._inst
noch nicht, kommt __new__ der Eltern-
Listing 3: Singleton mit initialen Argumenten klasse zum Zug und erzeugt eine Instanz.
class OnlyOneInitOnce(OnlyOne): Beim nächsten Aufruf von __new__ exis-
tiert cls._inst bereits, sodass aus dem
"""Test singleton.
Aufruf von cls._inst_ als Ergebnis die
Subsequent instances cannot set a new value. bereits bestehende Instanz resultiert.
""" Die Klasse OnlyOne erbt von der
_first = True Singleton-Klasse und implementiert ihr
spezifisches Verhalten, das im Beispiel
def __init__(self, value): minimal ausfällt: Die Instanz speichert
nur einen Wert mit dem generischen
if self.__class__._first:
Namen value. Wichtig ist die spezielle
super().__init__(value)
Methode __repr__, die eine Text-Re-
self.__class__._first = False präsentation einer Instanz zurückgibt.
Idealerweise sollte dieser String mit
def create_only_one_init_once(): eval(object_string) wieder eine In-
"""Test singleton that can only be initialized with `value` once. stanz erzeugen. Hier enthält der Objekt-
String zusätzlich noch die Objekt-ID, um
"""
die Objekte einfacher auseinanderhalten
print('singleton init once 1:', OnlyOneInitOnce(10))
zu können. In Produktionscode ist das
print('singleton init once 2:', OnlyOneInitOnce(20)) typischerweise nicht so.
Die Funktion create_only_one in Lis-
### Aufruf ### ting 2 erzeugt zwei Instanzen mit unter-
create_only_one_init_once() schiedlichen Anfangswerten und zeigt
deren String-Repräsentation an. Die
singleton init once 1: 4920752400: OnlyOneInitOnce(value=10)
identische Zahl für die ID beweist, dass
singleton init once 2: 4920752400: OnlyOneInitOnce(value=10)
es sich bei den vermeintlich zwei Instan-
zen eigentlich nur um eine handelt. Das
ist das Verhalten eines Singletons.
Listing 4: Variation zu Listing 3 Durch die zweite Instanziierung mit
SENTINEL = object()
einem anderen Anfangswert ändert sich
auch der Wert von value in der ersten
Instanz, da es sich ja um zwei Referenzen
class OnlyOneInitOnceRaise(OnlyOne): auf dieselbe Instanz handelt. Das kann
"""Test singleton. durchaus das gewünschte Verhalten sein.
Subsequent instances cannot set a new value. Es ergibt sich aber ein gewisser Geister-
effekt, da die Änderung von value in der
Values in `__init__` raise an exception
ersten Instanz nicht offensichtlich ist.
"""
Listing 3 zeigt eine Variation, bei der
_first = True man den Wert von value nur bei der
ersten Instanziierung setzen kann. Beim
def __init__(self, value=SENTINEL): zweiten Mal ignoriert der Code in
__init__ den Wert von value. Damit
if self.__class__._first:
fällt der Geistereffekt der indirekten Än-
value = None if value is SENTINEL else value
derung von value in der ersten Instanz
super().__init__(value) weg. Hier steuert das Klassenattribut
self.__class__._first = False _first, ob value eine Wirkung hat.
else: Jetzt hat allerdings der Wert von value
bei der zweiten Instanziierung keine Wir-
if value is not SENTINEL:
kung – ein möglicherweise unerwünsch-
raise TypeError('cannot use arguments in `__init__`')
tes Verhalten. Listing 4 zeigt eine weitere

26 www.linux-magazin.de 12.2023
Basics.
Variation, die Werte für value nur bei der den Fällen (a) „ein Argument an __init__
Projekte.
ersten Instanziierung erlaubt. Ab der
zweiten Instanziierung wirft die Metho-
de __init__ eine Ausnahme, wenn man
übergeben“ und (b) „kein Argument
übergeben“ zu unterscheiden, ist ein
eindeutiges Objekt nötig. Es hat hier den
Ideen.
ihr ein Argument übergibt. Um zwischen Namen SENTINEL und muss außerhalb
Know-how.
Listing 4: Variation zu Listing 3 (Fortsetzung von vorheriger Seite)

def create_only_one_init_once_raise():
Jet z t
testen!
"""Test singleton that can only be initialized with `value` once.
Raises exception if `value` is given the second time.
"""

30% sparen
print('singleton init once raise 1:', OnlyOneInitOnceRaise(10))
print('singleton init once raise 2:', OnlyOneInitOnceRaise())
try:
OnlyOneInitOnceRaise(20)
except TypeError as err:
nur 8,00 €
print(err)

### Aufruf ###


create_only_one_init_once_raise()
singleton init once raise 1: 4819040848: OnlyOneInitOnceRaise(value=10)
singleton init once raise 2: 4819040848: OnlyOneInitOnceRaise(value=10)
cannot use arguments in `__init__`

Listing 5: Metaklasse für Singleton


class MetaSingleton(type):
"""Meta class for s singleton """
_singleton_internals_defaults = {
'first': True,
'instance': None,
'new_args_allowed': False
}

def __call__(cls, *args, **kwargs):


"""This called when `ClassName()` is used.
Returns a class instance.
"""
_singleton_internals = '_singleton_internals'
if _singleton_internals not in cls.__dict__:
setattr(cls, _singleton_internals,

Jetzt
cls._singleton_internals_defaults.copy())
if hasattr(cls, '_overide_singleton_internals'):
cls._singleton_internals.update(
cls._overide_singleton_internals)
if cls._singleton_internals['first']: bestellen!
• Tel.: 0911 / 993 990 98
• E-Mail: computec@dpv.de
Oder bequem online bestellen unter
12.2023 www.linux-magazin.de
shop.raspberry-pi-geek.de
Titelthema Singleton mit Python

der Klasse definiert sein, damit es zur spezifischen, also der erbenden Klasse. Klassen, die diese neuen Metaklassen be-
Klassendefinitionszeit verfügbar ist. Per Listing 5 zeigt eine alternative Implemen- erben, verhalten sich wieder auf eigene
Konvention bestehen globale Variablen- tierung mit einer Metaklasse. Sie fällt Weise. Im Unterschied zu Methoden in
namen nur aus Großbuchstaben. wesentlich komplexer aus als die Lösung Klassen, die als erstes Argument die In-
in Listing 4. Der große Vorteil besteht in stanz erhalten, bekommen Metaklassen
der Isolierung der gesamten Singleton- als erstes Argument die Klasse. Per Kon-
Singleton mit Metaklasse
Funktionalität in der Metaklasse. vention kommt für das erste Argument
Die Implementierung in Listing 4 ver- Metaklassen verhalten sich zu Klassen bei Klassenmethoden der Name self
schiebt einen großen Teil der Singleton- wie Klassen zu Instanzen. Alle Klassen zum Einsatz, bei Metaklassenmethoden
Funktionalität in die erbende Klasse. haben standardmäßig die Metaklasse dagegen der Name cls.
Damit vermischt sich die Singleton-Funk- type. Indem Klassen von type erben, las- Die spezielle Methode __call__ einer
tionalität mit der für die Anwendung sen sich eigene Metaklassen erzeugen. Metaklasse ruft Python auf, wenn die
runden Klammern nach dem Klassen-
namen erscheinen. Somit bewirkt Class-
Listing 5: Metaklasse für Singleton (Fortsetzung von vorheriger Seite) Name(*args, **kwargs) den Aufruf
cls._singleton_internals['first'] = False __call__(cls, *args, **kwargs) der
Metaklasse von ClassName. Durch die
instance = object.__new__(cls)
Implementierung von __call__ der
instance.__init__(*args, **kwargs) Metaklasse lässt sich der Prozess der Er-
cls._singleton_internals['instance'] = instance zeugung einer Klasseninstanz komplett
else: anpassen. Listing 5 zeigt diese Anpas-
if (not cls._singleton_internals['new_args_allowed'] and sung, um denselben Effekt wie den von
(args or kwargs)): Listing 4 zu erreichen.
Das Klassenattribut _singleton_inter-
raise TypeError('cannot use arguments in `__init__`')
nals ist ein Dictionary, das alle für die
return cls._singleton_internals['instance']
Steuerung der Instanziierung nötigen
Informationen enthält. Wenn die Klasse
dieses Attribut noch nicht besitzt, erhält
Listing 6: Singleton mit Metaklasse sie eine Kopie des Dictionarys _single-
ton_internals_defaults. Verfügt die
class Singleton(metaclass=MetaSingleton):
Klasse über das Attribut _overide_sing-
"""Singleton with metaclass."""
leton_internals, überschreiben dessen
def __init__(self, value=None): Werte die Vorgabewerte.
self.value = value Bei der ersten Instanziierung, wenn also
cls._singleton_internals['first']

def __repr__(self):
den Wert True hat, erzeugt die Methode
eine neue Instanz und speichert sie unter
return f'{id(self)}: {self.__class__.__name__}(value={self.
dem Schlüssel instance in _single-
value!r})'
ton_internals. Je nach Einstellung von
new_args_allowed wirft die Methode
def create_singleton(): eine Ausnahme, wenn sie ab dem zwei-
"""Create instances of Singleton.""" ten Aufruf Argumente erhält. Am Ende
gibt sie die gespeicherte Instanz zurück.
print(Singleton(10))
Die Nutzung dieser Metaklasse zeigt
print(Singleton())
Listing 6. Hier legt class Singleton(me-
try: taclass=MetaSingleton) die Metaklasse
Singleton(20) fest. Ansonsten gibt es in der Klasse kei-
except TypeError as err: nen Code, der sich mit der Singleton-
Funktionalität beschäftigt. Das Ergebnis
print(err)
entspricht dem aus Listing 4.
Listing 7 zeigt die Anpassung des Ver-
### Aufruf ### haltens mithilfe von _overide_single-
create_singleton() ton_internals. Hier erlaubt new_args_
5088426896: Singleton(value=10) allowed==True Argumente auch ab
der zweiten Instanziierung. Erneut über-
5088426896: Singleton(value=10)
nimmt die Metaklasse die gesamte Sing-
cannot use arguments in `__init__`
leton-Funktionalität.

28 www.linux-magazin.de 12.2023
Singleton mit Python Titelthema

Das Borg-Pattern zeichen eine neue Referenz auf das Ob- lässt es sich mit wenig Aufwand als ein
jekt rechts vom Gleichheitszeichen. Damit Python-Modul oder stattdessen als Meta-
Alex Martelli argumentiert 1, nicht die teilen sich alle Instanzen __dict__, das klasse mit vollständiger Kontrolle über
Identität der Instanzen setze die ge- alle Instanzattribute enthält. Die Funktio- das Klassenverhalten implementieren.
wünschte Singleton-Funktionalität am nalität in Listing 8 entspricht bis auf die Python ist äußerst dynamisch und er-
besten um, sondern der Shared State verschiedenen Objekt-IDs der in Listing 2. laubt tiefgehende Eingriffe in das Pro-
zwischen Instanzen: Die Instanzen sind Für das Borg-Pattern kann auch eine grammverhalten zur Laufzeit, die bei an-
unterschiedliche Objekte, verhalten sich Metaklasse zum Einsatz kommen. Der deren Sprachen eher zur Compile-Zeit
aber identisch. Angelehnt an die Mensch- Code in Listing 6 bildet dazu eine gute erfolgen. Zudem eignet sich die Sprache
Maschine-Hybriden aus Star Trek, die alle Grundlage. für Anwender mit unterschiedlichen Pro-
miteinander ihre Gedanken teilen, hat er grammiererfahrungen: Experten können
für das Muster den Namen Borg gewählt. komplexe Implementierungen mit Meta-
Fazit
Listing 8 zeigt eine Implementierung. klassen umsetzen. (jcb/jlu) Ӻ
Wichtig ist die Zuweisung von _shared_ Python bietet mehrere Möglichkeiten,
state zu __dict__ aller Instanzen. Eine das Singleton-Pattern umzusetzen. Je
Zuweisung erzeugt links vom Gleichheits- nach Anspruch und Anwendungsfall Weitere Infos und
interessante Links
www.lm-online.de/qr/49533
Listing 7: Singleton mit Metaklasse und Option
class SingletonWithNewArgs(Singleton):
"""Singleton with metaclass, no arguments to further instantiation
Der Autor
allowed.
Dr.-Ing. Mike Müller, Geschäftsführer der
"""
Python Academy 1 und erfahrener Python-
_overide_singleton_internals = {'new_args_allowed': True} Trainer, nutzt Python als bevorzugte Pro-
grammiersprache, seit er es 1999 entdeckte.
def create_singleton_with_new_args(): Er ist erster Vorstandsvorsitzender des
Python Software Verband e.V. 1 und war
"""Create instances of SingletonWithNewArgs."""
Chairman der EuroPython 2014 in Berlin.
print(SingletonWithNewArgs(10)) Auch die EuroSciPy 2008 und 2009 sowie
print(SingletonWithNewArgs()) die PyCon DE 2011 und 2012 hat er erfolg-
print(SingletonWithNewArgs(20)) reich geleitet.

Listing 8: Borg
class Borg: return f'{id(self)} {self.__class__.__name__}
"""All instances share state. (value={self.value!r})'
"""
_shared_state = {} def create_borgs():
"""Make instance.
def __new__(cls, *args, **kwargs): """
instance = super().__new__(cls) borg1 = AllTheSame(10)
instance.__dict__ = cls._shared_state print('borg1:', borg1)
return instance borg2 = AllTheSame(20)
print('borg2:', borg2)
class AllTheSame(Borg): print('borg1:', borg1)
"""Test borg.
""" ### Aufruf ###
def __init__(self, value=None): create_borgs()
self.value = value borg1: 6008347600 AllTheSame(value=10)
borg2: 6008346320 AllTheSame(value=20)
def __repr__(self): borg1: 6008347600 AllTheSame(value=20)

12.2023 www.linux-magazin.de 29
sp Ravlo / 123RF.com
API-Design mit Patterns

Kasper
Auf Antwort warten

© Ka
Auch beim API-Design lohnen sich Patterns, damit wartungs- und zukunftssichere Systeme
entstehen. Mike Schilli widmet sich Anfragen, die von Natur aus länger dauern. Mike Schilli

Man sollte nicht glauben, dass das The- stimmten Implementierungen vorab Schema F, die Dokumentation zwar im
ma API Design Patterns so viel hergibt: kennt, kann ein wartungsfreundliches Augenwinkel, aber eigentlich unnötig.
Schließlich hat sich REST zum Anlegen, und zukunftssicheres System bauen.
Auflisten, Modifizieren oder Löschen von Jedenfalls gilt es, sich beim Entwurf
Baldrian für Ungeduldige
Ressourcen auf der Server-Seite seit Jahr- von APIs ähnlich wie beim Design von
zehnten als Standard etabliert. Aber es Applikationscode das geplante Endpro- Ein interessantes Design Pattern für APIs
gibt ein dickes Buch zum Thema 1, das dukt aus der Sicht zukünftiger Anwender ist das für Server-Antworten, die etwas
ausführlich, wenngleich auch für meinen vorzustellen. Wird es so funktionieren, mehr Zeit benötigen. Normale Requests
Geschmack etwas zu weitschweifig, die oder warten böse Überraschungen beim verarbeitet der Server so schnell wie
Vor- und Nachteile bestimmter Design- ersten Ausprobieren? möglich, doch manche brauchen von
entscheidungen beleuchtet. Natur aus länger. Verlangt ein User zum
Ist es besser, den Zugriff auf zwei ver- Beispiel Akteneinsicht in seine Google-
Doku im Augenwinkel
wandte Ressourcen einheitlich oder durch Daten, lässt sich der Riese ein paar Tage
getrennte Aufrufe zu implementieren? Bei APIs besteht die Zielgruppe häufig Zeit, bis die Antwort als Datei vorliegt.
Welche Schnittstelle bevorzugt ein Client, aus Entwicklern, die schon mit etlichen Eine natürliche, aber voreilige Design-
der lange laufende Server-Prozesse per Webschnittstellen Erfahrung gesammelt Entscheidung wäre es, Requests einfach
API kontrollieren möchte? Was spricht für haben und einfach annehmen, dass sofort zu beantworten, wenn die Ant-
und gegen persistente Datenhaltung? bestimmte Aktionen immer auf gleiche wort vorliegt. Das bringt aber API-User in
Wie sollte der Server längliche Ergebnis- Weise ablaufen: neue Ressourcen erzeu- die Bredouille: Wie lange soll der Client
se scheibchenweise an den Client über- gen, bestehende auflisten, modifizieren warten, bis die Antwort eintrifft – zehn
mitteln? All dies will vor dem Schreiben oder löschen. Idealerweise schreiben Sekunden, eine Minute, eine Stunde? Zu
der ersten Codezeile überlegt sein, denn Anwender die Schnittstelle ihres Appli- keiner Zeit kann er sich sicher sein, dass
nur wer die Vor- und Nachteile von be- kationscodes zur Web-API einfach nach der Server noch an der Antwort arbeitet.

30 www.linux-magazin.de 12.2023
API Design Patterns Titelthema

Nach allen Regeln der Kunst könnte er Das Python-Paket Celery/


auch abgeschmiert sein, und länger zu speedtest-cli Client Webserver Redis
warten, wäre reine Zeitverschwendung. kontaktiert dazu POST start
Das Design-Pattern API für LROs (Long den Google-Server
Trigger Speedtest
Running Operations) bietet darum nicht und ermittelt den
einen API-Call, sondern eine Handvoll: Datendurchsatz in result.id:xxx.xxx
eine Funktion zum Absetzen des Requests, beide Richtungen,
eine weitere zur Prüfung, wie lange es als Up- und Down-
denn noch dauern wird, und eine dritte, load-Geschwindig- GET result /xxx.xxx
1
die das Ergebnis abholt . Eine Luxus- keit. Je nach Band- Polling ready:false
variante böte noch Schnittstellen zum breite und Server-
Speedtest
Abbrechen laufender Server-Arbeiten, Auslastung kann
finished
oder auch zum Pausieren und Wieder- die Messung
anlaufen einmal gestarteter Prozesse. durchaus 10 oder
20 Sekunden dau- GET result /xxx.xxx
ern. Sie übersteigt Ready
Radarmessung im Netz ready:true
damit den akzep- result:123456
Artikel in diesem Magazin beschreiben tierten Rahmen für
nie nur graue Theorie, sondern liefern Web-Requests von
praktische Anwendungsbeispiele, also im- ein paar Hundert
plementieren wir eine LRO in Form einer Millisekunden bei 1 Diagramm der Client-Server-Kommunikation.
Brandbreitenmessung auf Server-Seite. Weitem.
Der API-Server
startet auf einen Request des Clients hin laufenden Server absetzen. Die Antwor-
Listing 1: Client den Netzwerktest. Statt zu warten, bis ten kommen im Erfolgsfall im JSON-For-
#!/usr/bin/env python3
er terminiert, und dann das Ergebnis der mat zurück, und die Python-Library de-
Messung dem immer noch wartenden kodiert die Antworten mit json() in in-
import requests
Client zu senden, schickt er dem Client terne Datenstrukturen. Im vorliegenden
import logging sofort nach Eingang des Requests eine Fall ist die Antwort jeweils ein Dictionary,
import time ID als Antwort zurück und beendet die das Schlüsseln wie result_id oder ready
Verbindung. Derweil läuft die Netzwerk- entsprechende Werte zuweist . 3
BASE_URL='http://localhost:8001' messung im Hintergrund an, und über
die ID kann der Client nun neue Anfragen
Wunder der Technik
logging.basicConfig(
absetzen und so laufend abfragen, ob
auf dem Server schon ein Ergebnis vor- Wie sieht denn nun die Implementierung
format='%(asctime)s %(message)s',
liegt. Kommt der Polling-Call als ready dieses Wunderwerks auf der Server-Seite
level=logging.INFO, zurück, steht in der JSON-Antwort auch aus? Selbst eine Skriptsprache wie Py-
datefmt='%H:%M:%S') noch das Ergebnis der Messung in Bytes thon, die ein hohes Maß an Abstraktion
pro Sekunde für Up- und Download bietet und teilweise geradezu abenteuer-
start_url=f"{BASE_URL}/start" 2
(markierte Zeile in Abbildung ). liche Magie an den Tag legt, erfordert
logging.info(start_url)
Die Implementierung des Clients zeigt hier einige geistige Klimmzüge, selbst
Listing 1. Die Python-Library requests wenn der eigentliche Code dann schön
response=requests.post(start_url)
(installiert mit pip3 install requests) kurz und bündig gerät.
logging.info(response.json()) kann mit post() und get() HTTP-Kom- Auch die Umgebung, in der der Web-
mandos an den später implementierten server läuft, benötigt das ein oder andere
id=response.json()["result_id"] und auf localhost auf dem Port 8001 zusätzlich bewegliche Rädchen. Das Do-

while True:
res_url=f"{BASE_URL}/result/{id}"
logging.info(res_url)
response=requests.get(res_url)
logging.info(response.json())
if response.json()["ready"]:
break
time.sleep(10)
2 Die Ausgabe des Clients.

12.2023 www.linux-magazin.de 31
Titelthema API Design Patterns

Redis sorgt als Back- Zeile 11 dekoriert die Funktion run_


end für das persistente speedtest() ab Zeile 12 mit einer Por-
Speichern der Ergeb- tion Celery, und nur deshalb existiert
nisse. Dazu initialisiert run_speedtest.delay() überhaupt.
der Code des API-Ser-
vers (Listing 3, api-
Frankenstein
server.py) eine Celery-
Verbindung und stellt Zeile 19 ruft diese Frankenstein-Funktion
3 Das Ergebnis im Webbrowser. als Broker und Back- bei jedem auf /start hereinkommenden
end den lokalen Redis- POST-Request auf. Im Rückgabewert
Server ein (Zeile 8). result liegt anschließend eine Daten-
ckerfile in Listing 2 erzeugt ein auf Ubun- Auch Flask und Celery müssen vonein- struktur, unter deren Attribut id die ID des
tu 22.04 basierendes Image, in das es ander wissen. Deswegen teilt Zeile 9 mit auf Celery ausgelagerten Tasks mit der
Python 3 und dessen Package-Manager update der Konfiguration in celery_app Speedtest-Funktion liegen. Während das
Pip3 pflanzt. Das Python-Modul flask stellt die Konfiguration des Flask-Frameworks Framework sich um deren Ausführung
den API-Server bereit. Dessen Routinen mit. Später wird der externe Celery- kümmert, baut der Web-Router in Zei-
weisen auf Python-Funktionen, die De- Worker-Prozess auch auf Listing 3 losge-
corators mit dem Webserver verlinken. lassen, wo er sich die Variable celery_
Für später im Hintergrund angestoße- app herauspickt und somit um die Redis- Listing 2: Dockerfile
ne Tasks auf eingehende Requests wird Konfiguration seines Backends weiß. FROM ubuntu:22.04
allerdings schweres Gerät aufgefahren – Kommt im API-Server ein Request für
RUN apt-get update
ein Webserver sollte sich ja nur mit der eine Bandbreitenmessung am Webserver
schnellen Bearbeitung von Requests als /start an, überlässt Flask den Aufruf RUN apt-get install -y curl vim
befassen. Das nicht gerade triviale Ab- der Python-Funktion run_speedtest() make
setzen sowie die Kontrolle von Hinter- ab Zeile 12 dem celery-Framework. Zum RUN apt-get install -y python3
grund-Tasks sollte man an Spezialsoft- Aufsetzen des Handlers dekoriert Zeile 17 python3-pip
ware delegieren. die Funktion start_task() ab Zeile 18. RUN apt-get install -y
Diese ruft run_speedtest.delay() auf, redis-server
eine magische Erweiterung der Funktion RUN pip3 install flask celery
Schweres Gerät
run_speedtest() ab Zeile 12, nur dass redis
Der Python-Task-Manager Celery 1 be- Python diese asynchron aufruft.
RUN pip3 install speedtest-cli
herrscht verteiltes Task-Management aus Woher stammt dieses Hexenwerk?
WORKDIR /build
dem Effeff, und die NoSQL-Datenbank Der Decorator @celery_app.task() in

Listing 3: API-Server
01 #!/usr/bin/env python3 18 def start_task() -> dict[str, object]:
02 from flask import Flask 19 result = run_speedtest.delay()
03 from celery import Celery, Task 20 return {"result_id": result.id}
04 import time 21
05 import speedtest 22 @app.get("/result/<id>")
06
23 def task_result(id: str) -> dict[str, object]:
07 app = Flask(__name__)
24 result = celery_app.AsyncResult(id)
08 celery_app = Celery(app.name, broker="redis://
25 return {
localhost", backend="redis://localhost")
26 "ready": result.ready(),
09 celery_app.conf.update(app.config)
10 27 "successful": result.successful(),

11 @celery_app.task() 28 "value": result.result if result.ready() else


None,
12 def run_speedtest():
29 }
13 st = speedtest.Speedtest()
14 st.get_best_server() 30

15 return st.download(), st.upload() 31 # Run the web server

16 32 if __name__ == '__main__':
17 @app.route('/start', methods=['POST']) 33 app.run(debug=True, host='0.0.0.0', port=8001)

32 www.linux-magazin.de 12.2023
API Design Patterns Titelthema

le 20 die JSON-Antwort mit einen wahren Wert zurück.


der ID unter dem Schlüssel Dieses Status-Update geht
result_id als JSON-Paket zu- dann vom Webserver zu-
sammen, das das Flask-Frame- rück an den anfragenden
work verzögerungsfrei an Client. Der beendet darauf-
den Client zurücksendet. hin am Ende von Listing 1
Unter der Haube dieser Ak- per break seine Endlos-
tion geht es jetzt richtig los. schleife. Vorher hat er noch
Die Funktion run_speedtest. per logging.info() das
delay() übergibt die Ausfüh- Messergebnis ausgegeben.
rung von run_speedtest() 4 Die Log-Einträge des Web- und des Celery-Servers. Dank der persistenten
an den Celery-Taskmanager. Speicherung des Resultats
Der erste Eintrag mit dem im Redis-Server kann der
Schlüsselwort Task in der Log-Datei aus Route /result/<id> beim Celery-Dienst Client auch noch nach geraumer Zeit
Abbildung 4 zeigt mit received an, per AsyncResult() (Zeile 24) nach der den Status der Messung und die ermit-
dass Celery zum Zeitpunkt 17:39:43 den übermittelten ID. Der externe Celery-Pro- telten Bandbreitenwerte abfragen. Das
Auftrag angenommen hat. Dessen Aus- zess kontaktiert dann sein Backend, einen klappt so lange, bis ein externer Prozess
führung dauerte bis 17:40:08,910, also Redis-Server, und liefert eine Statusmel- oder eine Redis-Konfiguration die Mess-
gut 25 Sekunden. Die entsprechende dung. Läuft die Messung noch, erhält das werte aus Platzgründen abräumt.
Zeile der Log-Datei bestätigt mit succee- Feld ready einen falschen Wert.
ded auch den erfolgreichen Abschluss. Nach dem Zeitpunkt 17:40:08,910 ist
Bereit zum Abheben
der Speedtest laut der Log-Datei in Ab-
Zieleinlauf bildung4 abgearbeitet, das Ergebnis Vor dem Start des API-Servers in Listing 3
für Up- und Download-Geschwindigkeit muss die laufende Plattform noch einen
Nach dem Start der Messung erkundigt liegt vor. Der Celery-Server gibt auf Celery-Worker starten. Der nimmt LROs
sich der Webserver bei Anfragen auf der Anfrage des Webservers im Feld ready als Tasks entgegen, führt sie aus, über-

MAGAZIN 33 % Rabatt
TESTEN SIE JETZT 3 AUSGABEN FÜR 21,00 €
OHNE DVD 17,00 €

-GUT SCHEIN
5 EURO

SICHERN SIE SICH


Telefon: 0911 / 9939 90 98 JETZT IHR GESCHENK! EIN AMAZON-GUTSCHEIN ÜBER 5,00 €
E-Mail: computec@dpv.de

Einfach bequem online bestellen: shop.linux-magazin.de


Titelthema API Design Patterns

wacht sie und speichert die Ergebnisse in Listing 4 deshalb eine Datei startup.sh. tion -p8001:8001 die beiden Welten beim
einer Redis-NoSQL-Datenbank. Die muss Sie feuert das Duo mittels & im Hinter- Aufruf von docker run. Die Option --rm
ebenfalls als Server-Prozess laufen, damit grund ab, bevor es ans Starten des Py- räumt den Container ab, nachdem der
das ganze System funktioniert. thon-Webservers in api-server.py geht. User mit [Strg]+[C] abgebrochen hat.
Zur Vermeidung von Installationsmüll Das Makefile in Listing 5 definiert das Wichtig ist die Option host='0.0.0.0'
liegt die Testumgebung in einem Docker- Target docker, um das Docker-Image aus des API-Servers aus Listing 3. Sie veran-
Container gemäß dem Dockerfile aus dem Dockerfile (Listing 2) zusammen- lasst den Server dazu, sich mit allen Inter-
Listing 2. Naturgemäß läuft in einem zubauen. Das Image erhält dabei das faces des Containers zu verbinden. Nur so
Container jedoch immer nur ein einziger Tag api-patterns, und das Target start kann dieser die Port-Öffnung zum kon-
Prozess im Vordergrund, und das soll der startet mit docker run einen auf dem trollierenden Host durchstoßen.
API-Server von Listing 3 sein. Für die bei- Docker-Image basierenden Container.
den Begleitprozesse, den Celery-Worker
Dienstags Müllabfuhr
sowie die Redis-Datenbank, definiert
Vom Urknall zum Zerfall
In dieser Version hält der Redis-Server als
Die vermischten Aus- Backend einmal gewonnene Ergebnisse
gaben der insgesamt dauerhaft vor. Das würde bei einem öf-
drei verschiedenen fentlich verfügbaren Dienst schnell dazu
Server nach dem Star- führen, dass veraltete Daten Platz ver-
ten des Containers schwenden. Deswegen muss sich ein
zeigt Abbildung .5 robustes System selbst ums Aufräumen
Nach einigen Sekun- kümmern. Die dazu aktivierte Methode
den ist alles betriebs- hängt von der Anwendung ab. In unse-
bereit, und die Anzeige rem Fall könnte ein Cronjob alle fünf Mi-
verharrt mit dem API- nuten anspringen und Einträge löschen,
Server im Vordergrund. die älter als zehn Minuten sind. Wenn
Nun darf der Client Clients die Ergebnisse ihrer Messungen
auf dem Host seine bis dahin nicht abgeholt haben, brauchen
Requests absetzen. sie sie wohl auch nicht mehr.
Wer mag, kann auch Läuft der API-Service auf mehreren In-
mit einem Webbrowser stanzen, kommen Client-Anfragen nicht
auf der API herumfuhr- immer beim selben Server an, und das
werken. Der Container Backend muss von allen Instanzen aus
läuft, bis ein [Strg]+[C] erreichbar sein. Nur so kann ein weiterer
von der Konsole ihn Bearbeiter den von einem anderen Server
herunterfährt und die gestarteten Task über dessen ID finden
Begleitprozesse wegen und den Status melden. (uba/jlu) Ӻ
des zerfallenden Uni-
versums mit in den
Orkus reißt. Listing 4: Startup-Skript
Der API-Server #!/bin/bash
lauscht im Container
/usr/bin/redis-server &
auf Port 8001. Damit
celery -A api-server.celery_app
er für den Client auch
worker --loglevel=info &
außerhalb des Con-
./api-server.py
tainers, also auf dem
Host, zur Verfügung
5 Der Container startet mit drei Servern. steht, verbindet die Op-
Dateien zum Artikel
herunterladen unter
Listing 5: Makefile
www.lm-online.de/dl/48773
DOCKER_TAG=api-patterns
start:
docker run -v`pwd`:/build -p8001:8001 -it --rm $(DOCKER_TAG)
./startup.sh
Weitere Infos und
interessante Links
docker:
www.lm-online.de/qr/48773
docker build -t $(DOCKER_TAG) .

34 www.linux-magazin.de 12.2023
Einführung Software

In eigener Sache: DELUG-DVD

Neues auf der Heft-DVD


Auf DELUG-DVD zu dieser
Ausgabe finden Sie diesmal
die Distributionen LMDE 6,
DietPi v8.22 und Porteus 5.01,
19 Vorträge vom zweiten Tag
der Froscon 2023, fünf quell-
offene Slack-Alternativen
und vieles andere mehr.
Tim Schürmann 1 LMDE 6 basiert auf Debian 12 und nutzt Cinnamon 5.8 als grafische Oberfäche.

Neben dem Linux-Magazin ohne DVD als Unterbau und ist auf den Betrieb von Software und Tools
gibt es die DELUG-Ausgabe mit einem Wechselmedien aus zugeschnitten.
speziell zusammengestellten Datenträger. Beim Download von sehr vielen oder
Gebündelt unter einer HTML-Oberfläche sehr großen Dateien helfen die in der Bit-
Seite B: Froscon 2023 (Teil 2)
enthält er Programme und Tools, die wir parade vorgestellten Tools Gabut Down-
in der jeweiligen Ausgabe testen, sowie Die Rückseite der DVD hält ein HTML- load Manager, KGet, Motrix, Persepolis
nicht im Heft besprochene Software, die Menü mit zahlreichen weiteren Inhalten Download Manager und Xtreme Down-
die Redaktion besonders empfiehlt. bereit. Darunter fallen zunächst 19 Vor- load Manager. Java-Programmierer be-
träge vom zweiten Veranstaltungstag kommen die neue Version 2023-09 der
der Froscon 2023, die die Videos aus der Entwicklungsumgebung Eclipse an die
Seite A: LMDE 6
letzten Ausgabe ergänzen. Die Referen- Hand. Sie unterstützt allerdings noch
Auf Seite A der DVD offeriert Ihnen ein ten beschäftigen sich unter anderem mit nicht die neuen Funktionen des aktu-
HTML-Menü drei aktuelle Distributionen. moderner Webentwicklung in Python, ellen OpenJDK 21, das ebenfalls auf der
Den Anfang macht die schlanke und der Datenbank Firebird, Open-Source- DVD auf seinen Einsatz wartet. Mehr
flexible Server-Distribution DietPi v8.22 Software in der öffentlichen Verwaltung, zum neuen Java 21 lesen Sie ab Seite 74.
für den Raspberry Pi und x86-Rechner. Containern und Kubernetes im Embed- Bei Interesse betreiben Sie außerdem
Als Desktop-System empfiehlt sich die ded-Umfeld, den Umgang mit Legacy- alte MS-DOS- und Windows-Versionen
Debian Edition von Linux Mint, die in der Code und schließlich noch mit Dingen, im Emulator 86Box, starten mit Amazon
1
brandneuen Version 6 vorliegt . Por- für die man besser keine Tabellenkal- Firecracker gertenschlanke virtuelle
teus 5.01 schließlich nutzt Slackware 15 kulation verwenden sollte. Maschinen, speichern wichtige Informa-
tionen in PostgreSQL 16, automatisieren
Aufgaben mit Rundeck, lassen in Jupyter
Fünf Slack-Alternativen
Inhalt Notebooks untergebrachten Javascript-
Wollen Sie Absprachen im Team lieber Code von der Laufzeitumgebung Deno
36 Tooltipps
nicht über den kommerziellen Cloud- ausführen, schreiben Server-Programme
Sechs CLI-Werkzeuge im Kurztest Dienst Slack abwickeln, finden Sie auf in Go, lösen mit NumPy mathematische
38 Bitparade der DVD gleich fünf quelloffene Alter- Aufgaben in Python oder vertiefen sich
nativen: den IRC-Server InspIRCd, Matrix, in Software zu den weiteren Artikeln aus
Fünf grafische Download-Manager
Mattermost, Rocket.Chat und Zulip. diesem Heft. (jlu) Ӻ

12.2023 www.linux-magazin.de 35
Software Tooltipps

Bat 0.23.0 Cppcheck 2.12.0 Goodhosts 1.1.1

Cat-Alternative C/C++-Code prüfen hosts-Dateien verwalten

Quelle: https://github.com/danmar/ Quelle: https://github.com/goodhosts/cli


Quelle: https://github.com/sharkdp/bat
cppcheck
Lizenz: Apache 2.0 Lizenz: MIT
Lizenz: GPLv3
Alternativen: Cat Alternativen: Cpplint Alternativen: keine direkte

Viele Anwender verwenden GNU Cat zur Das C-basierte Werkzeug Cppcheck über- Die Namensauflösung über hosts-Datei-
Konsolenausgabe von Textdateien. Die prüft C/C++-Code auf Fehler und unsau- en bietet in kleinen Netzen eine simple
Rust-basierte Alternative Bat liefert eine bere Codestrukturen. Viele Distributionen Alternative zum Betrieb eines komplexen
optisch aufbereitete Ausgabe. Die meis- liefern ältere Versionen des Tools aus, DNS-Servers. Das Bearbeiten der /etc/
ten Distros enthalten nur ältere Versio- das aktuelle Release müssen Sie selbst hosts per Editor birgt aber auch Fehler-
nen, Binärpakete des aktuellen Releases kompilieren. Um eine oder mehrere quellen, die das Go-Tool Goodhosts zu
finden Sie auf Github. Bat 0.23 be- Quelldateien auf Korrektheit zu prüfen, umgehen versucht. Fertige Binärpakete
herrscht eine neue Notation für nicht geben Sie sie beim Aufruf als Parameter finden Sie bei Github.
druckbare Zeichen und versteht mit -S an. Geben Sie stattdessen einen Ordner- Für seine Arbeit benötigt Goodhosts
ein Alias für --wrap=never. namen an, nimmt sich Cppcheck den administrative Rechte. Ohne Parameter
Wie bei Cat übergeben Sie die auszu- kompletten dahinterliegenden Verzeich- aufgerufen, gibt es den aktuellen Inhalt
gebende Datei als Aufrufparameter. Bat nisbaum vor und arbeitet alle enthalte- der /etc/hosts aus. Neue Einträge legen
erkennt die verwendete Programmier- nen C- und C++-Dateien ab. Eine Zusam- Sie mit dem Unterbefehl add an, gefolgt
oder Satzsprache selbst und wählt ein menfassung des Ergebnisses gibt das von der IP-Adresse und dem oder den
geeignetes Highlighting. Eine Liste aller Tool in der Konsole aus, mit --xml erfolgt zugehörigen Host-Namen. Mit check und
gut 170 unterstützten Sprachen liefert die Ausgabe auf Wunsch auch im XML- remove suchen beziehungsweise entfer-
die Option -L, mit der Sie bei Bedarf Format. Einen detaillierten Report erhal- nen Sie Einträge. Die Unterbefehle back-
auch ein bestimmtes Highlighting fest ten Sie mit der Option --checkers-re- up und restore ermöglichen das Anlegen
vorgeben. Anders als Cat besitzt Bat ei- port, hinter der Sie den Namen der Datei und Wiedereinspielen von Sicherungen.
nen integrierten Pager, der ein beque- angeben, in der Cppcheck das Ergebnis Beim Bearbeiten von Einträgen mit dem
mes Navigieren durch den Inhalt erlaubt. ablegen soll. Das Tool nimmt eine Viel- Unterbefehl edit öffnet Goodhosts le-
Er lässt sich mit -P aber auch deaktivie- zahl von Prüfungen vor. So untersucht es diglich die hosts-Datei im Standardedi-
ren. Nicht druckbare Zeichen blendet Bat zum Beispiel den Codestil und bemängelt tor des Systems. Generell ist das Tool
aus, sofern Sie sie nicht mit -A explizit ungenutzte Funktionen. Mit dem Para- nicht auf die Arbeit mit der /etc/hosts
einblenden lassen. Das Tool nummeriert meter --enable beschränken Sie die Prü- beschränkt: Mit dem Parameter --file
alle Ausgabezeilen. Mit --style wählen fung bei Bedarf auf bestimmte Bereiche, können Sie damit auch andere Dateien
Sie dabei aus knapp einem Dutzend plattformspezifische Tests stoßen Sie mit pflegen, die einen ähnlichen Aufbau wie
verschiedener Formatierungen, mit -p --plattform an. Standardmäßig prüft eine hosts-Datei aufweisen.
schalten Sie die Nummerierung ab. Da- das Werkzeug, ob der Code C11- respek- MMMMm Goodhosts bietet vor allem
neben bietet Bat rund 20 Themes, mit tive C++20-kompatibel ist. Die Prüfung Einsteigern die Sicherheit, beim Bearbei-
denen Sie das Erscheinungsbild nach auf ältere Versionen erzwingen Sie ge- ten der /etc/hosts keine gravierenden
Wunsch anpassen. Eine Liste aller ver- gebenenfalls mit dem Parameter --std. Fehler zu machen, kann aber durchaus
fügbaren Varianten liefert --list-the- MMMMM Cppcheck bietet umfang- auch erfahrenen Anwendern die Arbeit
mes, das Wunsch-Theme geben Sie hinter reiche Möglichkeiten, um C/C++-Code erleichtern. Es erledigt seine Aufgabe
--theme an. auf Fehlerquellen zu prüfen. Einige Dis- tadellos, lediglich das Fehlen einer Man-
MMMMM Wer eine schicke Alternative tributionen liefern Zusatz-Tools wie gra- page fällt unangenehm auf. Immerhin
zu Cat sucht, wird bei Bat fündig. Ӻ fische Frontends mit. Ӻ gibt es eine Online-Hilfe (-h). Ӻ

36 www.linux-magazin.de 12.2023
Tooltipps Software

Jq 1.7 Searxng latest Ssh-tunnel-manager latest

JSON-Prozessor für die Kommandozeile Meta-Internet-Suchmaschine SSH-Tunnel verwalten


Quelle: https://github.com/searxng/ Quelle: https://github.com/magdyamr542/
Quelle: https://github.com/jqlang/jq
searxng ssh-tunnel-manager
Lizenz: MIT
Lizenz: AGPLv3 Lizenz: Freeware
Alternativen: Sed, Awk Alternativen: Searx Alternativen: Ssh

Sed, der Standard-Stream-Editor auf Searxng, die Weiterführung des im Sep- SSH unterstützt seit Langem das Tunneln
Unix-Systemen, stößt bei Formaten wie tember 2023 eingestellt Searx-Projekts, von Verbindungen. Wollen Sie nicht jedes
JSON an seine Grenzen. Hier springt das streut Internet-Suchanfragen über meh- Mal alle Verbindungsparameter manuell
in C implementierte Jq in die Bresche. rere Suchmaschinen, um die Privacy zu eingeben, können Sie auf das Go-basierte
Das aktuelle Release 1.7 liegt auf Github verbessern. Während sich Searx in den Werkzeug Ssh-tunnel-manager zurück-
in Form fertiger Binärpakete für viele Repos der meisten Distributionen findet, greifen. Release- oder Binär-Pakete gibt
Plattformen und Betriebssysteme vor. gibt es von Searxng bisher nur eine Ent- es noch nicht; Sie müssen das Repository
Jq erwartet die zu verarbeitenden wicklerversion, die Sie via git clone be- klonen und den Code selbst kompilieren.
Daten als Datenstrom über die Standard- ziehen, per make install in einer virtu- Nach der Installation legen Sie mit add
eingabe, wobei Leerzeichen als Trenner ellen Entwicklungsumgebung einrichten eine neue Konfiguration an, die das Tool
fungieren. Als Parameter geben Sie den und mit make run lokal starten. als JSON-Datei im Ordner $HOME/.ssh-
Filterausdruck an, den Jq auf die einge- Das Werkzeug prüft die Verbindung zu tunnel-manager/ ablegt. Für jeden Tun-
henden Daten anwenden soll. Die durch- den genutzten Suchportalen und öffnet nel geben Sie einen eindeutigen Namen,
laufen dann sequenziell alle vorgegebe- einen Browser mit der Suchoberfläche, den FQDN des SSH-Gateways, den ver-
nen Filter. Einige Parameter für Jq können die an die frühe Google-Suchplattform wendeten Gateway-Benutzernamen
Steuerelemente enthalten, die manche erinnert. Geben Sie einen Suchbegriff ein, sowie FQDN und Port des Ziels an. Die
Shell als eigene Meta-Elemente interpre- ermittelt Searxng das Ergebnis auf ver- Authentifizierung erfolgt per passwort-
tiert. Die Jq-Entwickler empfehlen da- schiedenen Plattformen und gibt es ge- losem SSH-Key, das Tool unterstützt we-
rum, Parameter grundsätzlich in einfache bündelt aus. Dabei ergänzt es jeden Tref- der passwortgeschützte Schlüssel noch
Anführungszeichen zu setzen. Standard- fer um die Angabe, über welche Such- herkömmliche Credentials. Mit list auf-
mäßig interpretiert Jq eingehende JSON- maschinen es den jeweiligen Link gefun- gerufen, zeigt Ssh-tunnel-manager alle
Objekte sofort bei Eintreffen und filtert den hat. Zudem bietet es eine Reihe al- konfigurierten Verbindungen an, nicht
sie. Soll es seine Arbeit erst beginnen, ternativer Suchvorschläge an. Im Menü mehr benötigte Einträge entfernen Sie
wenn alle Daten vorliegen, geben Sie oben rechts treffen Sie Einstellungen zum mit remove. Eine Verbindung starten Sie
den Schalter -s an. Im Gegensatz dazu Erscheinungsbild sowie zur Privatsphäre mit dem Unterbefehl tunnel, gefolgt
interpretiert Jq mit -R alle Daten im Roh- und legen fest, welche Suchplattformen vom Verbindungsnamen. Über weitere
format und filtert sie zeilenweise. Das Searxng bei einer Anfrage kontaktiert. Da- Parameter geben Sie den Port an, auf
Resultat der Verarbeitung landet in der bei können Sie getrennt angeben, welche dem die Zielmaschine eingehende Ver-
Standardausgabe, wobei optionale Para- Plattformen das Tool für allgemeine, Bild-, bindungen erwartet. Lauscht der SSH-
meter für die Formatierung und farbliche Video- oder Dateisuchen nutzt. So befragt Dienst des Gateway-Servers nicht auf
Aufbereitung sorgen. Eine Ausgabe im es beispielsweise bei der Videosuche Port 22, lässt sich Ssh-tunnel-manager
ASCII-Format gelingt mit -a. auch CCC-TV, Peertube und die öffent- nicht verwenden, die Angabe eines alter-
MMMMM Die aktuelle Version ist das lich-rechtlichen Mediatheken. nativen Ports ist nicht vorgesehen.
erste Major-Release des Projekts seit fünf MMMMm Derzeit eignet sich Searxng MMMmm Der noch junge Ssh-tunnel-
Jahren. Jq 1.7 korrigiert zahlreiche Fehler eher für experimentierfreudige Anwen- manager ist ein interessantes Tool mit
und poliert viele Optionen auf. Ein Up- der. Es lohnt sich jedoch durchaus, das Potenzial, es fehlen aber noch grundle-
date lohnt sich also. Ӻ Projekt im Auge zu behalten. Ӻ gende Funktionen. (Uwe Vollbracht/jlu) Ӻ

12.2023 www.linux-magazin.de 37
y S
valnyuk
© Zavalnyuk r ey / 123RF.com
Serg

Grafische Download-Manager im Vergleich nicht mehr gepflegt und weiterentwickelt.


Andere folgen einem Freemium-Ver-
triebsmodell: Die proprietäre Anwendung

Lademeister darf man als privater Nutzer zwar kosten-


los verwenden, muss dann aber häufig
zwangsweise eingeblendete Werbung
ertragen. Für manche der Freemium-An-
wendungen muss man sich registrieren,
Im Internet steht eine Fülle interessanter Inhalte zum ohne genau zu wissen, was der Anbieter
mit den so erlangten Daten anstellt. Wir
Herunterladen breit. Grafische Werkzeuge helfen dabei, haben daher nur Applikationen berück-
sichtigt, die den gängigen Kriterien freier
selbst bei vielen parallelen Downloads den Überblick zu Software entsprechen und die weder
lästige Reklame transportieren, noch eine
behalten. Erik Bärwaldt Registrierung benötigen.

ԏ Gabut Download Manager


Für ambitionierte Anwender, aber auch fiehlt sich deswegen der Einsatz eines
für System- und Netzwerkadministra- grafischen Frontends, das Ordnung in Der distributionsunabhängige und platt-
toren gehört das Herunterladen von In- das Chaos bringt und oft auch nützliche formübergreifend erhältliche Gabut
halten verschiedenster Formate zur täg- Zusatzfunktionen bietet. Wir haben uns Download Manager 1 stammt aus Indo-
lichen Arbeit. Egal, ob es sich um einzelne mehrere freie Download-Manager für die nesien. Die in der Programmiersprache
Programme, Multimediainhalte, Doku- GUI näher angesehen. Vala entwickelte Software gibt es als
mente oder ganze ISO-Abbilder handelt Snap und Flatpak sowie als Paket für das
– beim Herunterladen geht schnell der AppCenter von Elementary OS. Nach
Probleme
Überblick verloren, und abgebrochene der Installation sehen Sie in der Menü-
Downloads im Webbrowser erzwingen Zwar gibt es Download-Manager für Li- struktur der Arbeitsumgebung einen
meist, den kompletten Vorgang zu wie- nux wie Sand am Meer, doch viele der entsprechenden Starter, der ein sehr
derholen. Bei häufigen Downloads emp- Anwendungen werden schon seit Jahren spartanisch wirkendes Programmfenster

38 www.linux-magazin.de 12.2023
Bitparade Software

öffnet. Darin finden Sie lediglich in der tomatisch ein Fenster


Titelleiste einige Buttons zum schnellen mit bereits einge-
Aufruf von Funktionen und am unteren tragenem Download-
Rand eine Leiste mit Schaltflächen zur Verweis. So können
Anzeige statistischer Informationen . 1 Sie durch einen Klick
Im mittleren Fenstersegment erscheinen auf Download das
nach dem Start einzelner Downloads die Herunterladen un-
entsprechenden Anzeigen dazu. mittelbar starten
Im ersten Schritt empfiehlt es sich, die oder den Auftrag
Software zu konfigurieren. Dazu klicken durch einen Klick auf
Sie oben rechts in der Titelleiste auf den Download Later in
Knopf mit den Zahnradsymbolen. In dem eine Warteschlange
sich öffnenden Dialog rufen Sie in einer 3
transferieren .
Reiterstruktur alle notwendigen Einstell- Der Dialog schließt
optionen auf. Neben der Definition des sich dann, und im 1 Das Programmfenster des Gabut Download Manager.
Zielordners im Reiter Sharing empfiehlt primären Programm-
sich vor allem eine Anpassung der Band- fenster finden Sie
breitennutzung unter Default, um bei den Auftrag nun ge-
langsameren Internet-Zugängen auch sichert und pausiert.
noch das parallele Surfen im Internet zu Um einen von mehre-
2
ermöglichen . Im selben Reiter legen ren anstehenden
Sie auch fest, ob Gabut große Dateien Downloads zu ak-
aufteilt und ab welchem Umfang das tivieren, klicken Sie
erfolgt. Geben Sie dazu im Feld Split die rechts neben dem
Ziffer Null ein, bleiben die Dateien am entsprechenden Lis-
Stück. Das ist speziell bei ISO-Images und teneintrag auf Pause.
Multimediainhalten sinnvoll. Der Download startet 3 Die neue Download-URL übernimmt der Download-
sofort, wobei Gabut Manager automatisch aus dem Webbrowser.
für alle aktiven Vor-
Nutzung
gänge jeweils die
Gabut integriert sich sehr gut in das je- Geschwindigkeit, den Fortschritt und die erscheint daraufhin in der Liste Paused,
weilige System und eröffnet verschiede- 4
Restdauer des Vorgangs anzeigt . Diese die Sie mit einem Klick auf den gleich-
ne Optionen, um Daten aus dem Internet Anzeige erhalten Sie auch nach einem namigen Button am unteren Bildschirm-
herunterzuladen. Wenn Sie zum Beispiel Klick auf den Button Downloading unten rand einsehen können. In der Listenan-
bei geöffnetem Download-Manager eine im Programmfenster. sicht All taucht er bis zum Beenden des
vollständige Download-URL vom Web- Klicken Sie bei einem oder mehreren Programms auf, jedoch nicht mehr in
browser in die Zwischenablage kopieren, der Listeneinträge erneut ganz rechts der Liste Downloading. Ein Klick auf das
erkennt die Software das und öffnet au- auf Play, pausiert der Download-Mana- Besensymbol entfernt den Eintrag aus der
ger die Verarbeitung des Eintrags. Der Liste und den nicht beendeten Down-
load aus dem Dateisystem.
Nicht berücksichtigt Treten während des Herunterladens
Fehler auf, markiert Gabut den entspre-
Neben grafischen Download-Managern
chenden Eintrag mit einem roten Aus-
gibt es unter Linux auch zahlreiche Kom-
rufezeichen. Außerdem finden Sie den
mandozeilenwerkzeuge zum selben Zweck. Vorgang in der Liste Error.
Sie gaben wir ebenso wenig berücksichtigt
wie Programme, die deren Entwickler nicht
mehr pflegen. Dazu zählen unter anderem
Torrents
uGet 1 (zuletzt 2020 aktualisiert) und die Gabut Download Manager kann direkte
seit mehr als einem Jahrzehnt nicht mehr Downloads parallel zum Down- und Up-
überarbeiteten Programme Tucan Mana- load von Torrents ausführen. Um einen
ger 1 und Multiget File Downloader 1. simultanen Up- und Download mithilfe
Senior dieser Riege ist das nach wie vor von Torrent-Peers zu starten, laden Sie
auf Sourceforge.net erhältliche wxDown- zunächst von der Webseite die dazu-
load Fast 1, dessen letzte Version 0.6.0 gehörige Metadatei herunter und öffnen
auf den Oktober 2009 datiert. 2 Der Gabut Download Manager bietet sie im Download-Manager. Dazu klicken
zahlreiche Einstelloptionen. Sie in der Titelleiste oben links auf den

12.2023 www.linux-magazin.de 39
Software Bitparade

load-Geschwindig- Downloads. Außerdem finden sich in


keit beschränken. der Schalterleiste zwei Buttons zum Ent-
Das ist vor allem fernen von ausgewählten Inhalten oder
dann sinnvoll, wenn aller abgeschlossenen Downloads.
mehrere simultane Darunter führt KGet die Downloads
Downloads die ge- in Tabellenform auf. Dabei zeigt es für
samte Bandbreite jeden Vorgang neben der Dateigröße
belegen, Sie aber auch die Transfergeschwindigkeit und
nebenher den Web- die noch einzuplanende Restzeit für das
browser nutzen Herunterladen an .6
4 Das Info-Fenster von Gabut hält Sie auf dem Laufenden. möchten.
Im Hauptfenster
Bedienung
der Anwendung er-
scheinen Torrent-Ver- Um einen Download anzustoßen, klicken
bindungen genauso Sie oben links in der Schalterleiste auf
wie herkömmliche Neuer Download. Im folgenden Dialog
Downloads. Lediglich geben Sie zunächst die URL im Feld Ad-
ein blaues Ordner- resse an und ergänzen darunter das Ziel-
symbol vor einem verzeichnis, falls es von den Systemvor-
Eintrag weist auf gaben abweicht. Nach einem anschlie-
einen Torrent-Down- ßenden Klick auf OK schließt sich der
load hin. Dialog, und der neue Download wird im
primären Fenster sichtbar.
ԏ KGet Durch einen Klick auf eines der Steuer-
symbole oben in der Schalterleiste mo-
5 Gabut arbeitet Bittorrent-Downloads simultan ab. Der Download-Mana- difizieren Sie den markierten Listenein-
ger KGet stammt aus trag. Beispielsweise können Sie einzelne
dem Fundus der KDE- Downloads jederzeit pausieren, um so
Button mit dem Dateiordnersymbol. Im Plasma-Arbeitsumgebung 1. Die Soft- die belegte Bandbreite zu reduzieren.
nun eingeblendeten Dialog wählen Sie ware findet sich in den Repos aller gängi-
die Torrent- oder Metalink-Datei aus und gen Distributionen und ist darüber hin-
Einstellungssache
öffnen sie. Nach kurzer Zeit erscheint ein aus für einige BSD-Derivate erhältlich.
weiteres Statusfenster mit Informationen KGet öffnet nach der Installation eine Für die Konfiguration von KGet nutzen
zum Torrent-Download. Darin sehen Sie- eingängig zu bedienende Oberfläche, Sie das im System-Tray der Arbeitsum-
die Transferraten, den Umfang der he- die allerdings nur die wichtigsten Grund- gebung angelegte Symbol der Anwen-
runtergeladenen Inhalte, die Zahl der funktionen eines Download-Managers dung. Ein Rechtsklick darauf öffnet ein
Verbindungen und die Restzeit bis zum anbietet. So können Sie HTTP(S)- und Kontextmenü, in dem Sie den Einstel-
Abschluss des vollständigen Downloads. FTP-Quellen integrieren, Downloads lungsdialog durch einen Klick auf den
Der Reiter Files dieses Fensters zeigt pausieren und abgebrochene Vorgänge Eintrag KGet einrichten aufrufen. Der
zudem den Fortschritt beim Herunter- erneut aufnehmen. optisch an den KDE-Konventionen ori-
5
laden der Dateien , im Reiter Speed In einem separaten Steuerbereich de- entierte Dialog gestattet nicht nur das
Limiter können Sie die Up- und Down- finieren, starten oder pausieren Sie die Modifizieren der Anwendungsoptik,
sondern ermöglicht auch das Anpassen
wichtiger Einstellungen. So passen Sie
in der Gruppe Netzwerk die Anzahl der
simultan auszuführenden Downloads
sowie die maximale Up- und Download-
Geschwindigkeit an . 7
Mithilfe der Optionen Alle starten und
Alle anhalten im Kontextmenü des Sys-
tem-Trays aktivieren oder pausieren Sie
global alle Aufträge. Voreingestellt ar-
beitet KGet allerdings nur zwei Aufträge
parallel ab. Befinden sich weitere Aufträge
in der Liste, bleiben sie zunächst inaktiv,
bis ein anderer Download beendet ist.
6 Das Programmfenster von KGet zeigt nur die nötigsten Informationen. Insbesondere bei schnellen Internet-Zu-

40 www.linux-magazin.de 12.2023
Bitparade Software

gängen und zahlreichen Aufträgen kann symbolen, um einige Ein-


dieses Verhalten lästig werden. stellungen zur Konfigura-
Neben herkömmlichen Download-Auf- tion des Programms vor-
trägen beherrscht KGet auch den Um- zunehmen. Rechts öffnet
gang mit Bittorrent-Daten. Dazu laden sich dann ein Konfigura-
Sie einfach im Webbrowser die entspre- tionsdialog, der sich in die
chende Steuerdatei herunter und ziehen drei Kategorien Standard,
sie anschließend mit der Maus in das Erweitert und Experimen-
Fenster von KGet. Das öffnet daraufhin tell unterteilt.
den Download-Dialog, in dem Sie den Unter Standard modi-
Start nur bestätigen müssen. Bittorrent- fizieren Sie das Erschei-
Downloads laufen dabei problemlos nungsbild der Anwen-
neben konventionellen Aufträgen ab. dung, den Zielpfad, die
Um genauere Informationen zu einzel- verwendete Sprache 7 Der umfangreiche Einstellungsdialog von KGet.
nen Aufträgen zu erhalten, klicken Sie sowie Einstellungen
im Hauptfenster des Programms mit der zur Bandbreite. Darüber
rechten Maustaste auf den gewünschten hinaus legen Sie hier auch fest, wie viele datei aufteilen soll. Den Zielordner kön-
Listeneintrag. Aus dem Kontextmenü ru- Aufträge Motrix simultan abarbeitet. 9
nen Sie hier ebenfalls modifizieren .
fen Sie dann die Option Details anzeigen Abschließend sichern Sie alle Modifika- Ein Klick auf Übernehmen befördert den
auf. In der Listenansicht präsentiert KGet tionen durch einen Klick auf die Schalt- Auftrag in die Liste im Hauptfenster und
nun unterhalb des betreffenden Eintrags fläche Speichern & übernehmen. Über die startet das Herunterladen.
in einem blau eingefärbten Bereich die Option Erweitert in der zweiten Spalte Wollen Sie mit Motrix einen Bittorrent-
Details zum jeweiligen Download. Hier von links öffnen Sie einen weiteren Dia- Download starten, dann wählen Sie nach
finden Sie Details wie die Dateinamen, log, in dem Sie die automatische Update- dem Klick auf das Plussymbol im Haupt-
Pfade, die Download-Geschwindigkeit Funktion aktivieren können sowie einige fenster im Einstellungsdialog den Reiter
und – bei Bittorrent-Aufträgen – Informa- Server-Einstellungen vornehmen. Der Torrent. Dann ziehen die zuvor im Web-
tionen zu den Seedern und Leechern . 8 Dialog Experimentell erlaubt es, einige browser heruntergeladene Steuerdatei
Browser-Erweiterungen für Chrome und in den entsprechend gekennzeichneten
ԏ Motrix Firefox zu beziehen. Bereich des Fensters. Bei Bedarf passen
Um einen neuen Download-Auftrag Sie noch die Zahl der Splits und den Ziel-
Motrix ist ein noch recht junges freies anzulegen, klicken Sie in der Steuerleiste ordner an und starten den Auftrag dann
Projekt 1. Der Download-Manager be- ganz links auf das Plussymbol. In einem mit einem Klick auf Übernehmen. Die
herrscht neben den Protokollen HTTP kleinen Dialog tragen Sie nun die Down- Software übernimmt den Auftrag nun in
und FTP auch Bittorrent-Downloads und load-URL ein und ergänzen optional ei- die Liste im Hauptfenster und startet ihn.
verfügt über ein modern wirkendes In- nen abweichenden Dateinamen sowie Torrents und konventionelle Downloads
terface. Bislang führen nur wenige Distri- dieAnzahl der Teile, in die Motrix die Ziel- 0
lassen sich simultan ausführen .
butionen das Werkzeug in ihren Paket-
quellen, Sie können Motrix kann jedoch
als Flatpak oder über die Webseite des
Projekts als Appimage, RPM- und DEB-
Paket beziehen 1. Auch für ARM-basierte
Systeme gibt es ein passendes Binary.

Bedienung
Nach dem Start der Anwendung öffnet
sich das modern gestaltete Programm-
fenster mit drei Bereichen. In einer dun-
kel eingefärbten Steuerleiste auf der lin-
ken Seite finden Sie die wichtigsten Be-
dienelemente, daneben erscheinen die
nach ihrem Status sortierten Aufgaben.
Das größte Fenstersegment ganz rechts
nehmen die tabellarisch untereinander
angeordneten Download-Listen ein.
Klicken Sie zunächst links unten auf
den Button mit den drei Schieberegler- 8 Im Infobereich präsentiert KGet alle nötigen Informationen zum aktuellen Download.

12.2023 www.linux-magazin.de 41
Software Bitparade

Um alle aufgeführten Auf- einmal ausgegraut. Zunächst müssen Sie


träge zu pausieren oder durch einen Klick auf das Plussymbol ei-
fortzusetzen, verwenden nen Download-Auftrag erfassen. Im sich
Sie die Schaltflächen rechts nun öffnenden Dialog tragen Sie einen
oberhalb der Auftragsliste. Download-Link ein und ändern bei Be-
Pausierte Aufträge über- darf der Dateinamen dafür.
nimmt Motrix in die An- Persepolis kennt außerdem zwei ver-
zeige Warteschlange und schiedene Betriebsmodi, die Sie in die-
entfernt sie nach dem Fort- sem Fenster auswählen können: Neben
setzen wieder daraus. dem Modus Single Downloads für unmit-
9 Das Anlegen eines neuen Download-Auftrags ist in telbare Downloads gibt es den Modus
Motrix etwas unkonventionell geregelt.
ԏ Persepolis DM Scheduled Downloads für zeitgesteuerte
Aufträge. Für Einstellungen wie eine
Der Persepolis Download Bandbreitenbeschränkung oder die Mo-
Zu jedem Listeneintrag im primären Manager setzt auf Aria2 auf, einem uni- difikation des Zielpfads klicken Sie auf
Fenster gibt es rechts oben eine kleine versellen Download-Manager für die den Link Show more options. Wenn Sie
Steuerleiste, mit der Sie den jeweiligen Kommandozeile 1. Er kann Dateien per die Kategorie Scheduled Downloads ge-
Auftrag pausieren oder entfernen. Au- HTTP und FTP herunterladen, Bittorrent wählt haben, klappt nach Übernahme des
ßerdem können Sie sich durch einen beherrscht er nicht. Das grafische Pro- neuen Auftrags in das Hauptfenster in
Klick auf das Ordnersymbol die Inhalte gramm findet sich in den Paketquellen dessen vertikaler Kategorienleiste unten
des Downloads anzeigen lassen. Um vieler Distributionen. Darüber hinaus links ein kleiner Dialog auf, in dem Sie die
die jeweilige URL oder den Bittorrent- können Sie die plattformübergreifend er- Start- und Endzeit angeben.
Magnet-Link in die Zwischenablage zu hältliche Software auch durch Einbinden Um Änderungen an der Konfiguration
kopieren, klicken Sie auf das Kettensym- des Projekt-Repos in Ihr Ubuntu- oder eines Download-Auftrags vorzunehmen,
bol. Während des Herunterladens zeigt Debian-basiertes System beziehen. Die markieren Sie den fraglichen Eintrag mit
Motrix zu jedem Auftrag einen Fort- Projektseite hält Installationsanleitungen einem Rechtsklick und wählen anschlie-
schrittsbalken, die Übertragungsraten für zahlreiche Linux-Derivate bereit. ßend aus dem Kontextmenü den Eintrag
sowie die noch verbleibende Zeit an. Die Anwendung öffnet nach der In- Properties aus. Stattdessen können Sie
Ganz unten rechts im Fenster erscheint stallation ein optisch sehr schlicht ge- nach dem Markieren des Eintrags auch
ein Tachosymbol, das Auskunft über die haltene Fenster. Es umfasst neben einem durch einen Klick auf das Zahnradsymbol
maximale Bandbreite gibt. großen Listenbereich nur eine Steuer- in der Steuerleiste den Einstellungsdia-
Detaillierte Informationen zum jewei- leiste am oberen Fensterrand sowie eine log aufrufen. Er gestattet alle relevanten
ligen Auftrag erhalten Sie nach einem w
Kategorienliste links . Ähnlich unge- Modifikationen an den Einstellungen.
Klick auf das Info-Symbol rechts im Listen- wöhnlich gestaltet sich auch die Bedie- Stellen sie dabei allerdings die Kategorie
eintrag. Neben allgemeinen statistischen nerführung. So können Sie nach dem eines Auftrags auf Single Download um,
Daten gibt es hier eine ansprechend ge- ersten Start keinerlei Konfiguration vor- startet das Herunterladen der Inhalte
staltete Übersicht, die Sie mit einem Klick nehmen, das in der Steuerleiste dafür nach der Übernahme der neuen Konfi-
auf das Kachelsymbol erreichen . q vorgesehene Zahnradsymbol bleibt erst guration nicht automatisch: Sie müssen

0 Motrix zeigt den Fortschritt der einzelnen Aufträge an. q Ausführliche Informationen gibt es im Dialog Task Details.

42 www.linux-magazin.de 12.2023
Bitparade Software

diesen Auftrag zuerst explizit mit einem gen, klicken Sie im Programmfenster auf die Anwendung dann jedoch nur solche
Klick auf das Start-Symbol in der Steuer- den Schalter mit dem Fenstersymbol. Downloads, die wir mithilfe eines direk-
leiste aktivieren. ten Links über das HTTP-Protokoll ange-
Ein von vorneherein als Single Down- stoßen hatten. Per FTP erfolgende Down-
Inkonsistenzen
load gekennzeichneter Auftrag startet loads erschienen in der Liste weiter als
stattdessen sofort nach der Übernahme. Vor allem bei der Steuerung mehrerer downloading. Erst das erneute Markieren
Im Hauptfenster reiht er sich dann rechts simultan ablaufender Aufträge zeigt Per- der FTP-Downloads und die wiederholte
in die Download-Liste ein, und Persepolis sepolis noch Inkonsistenzen. Auswahl der Pausenfunktion hielt auch
zeigt die üblichen statistischen Daten Mithilfe des Hamburger-Menüs oben diese Aufträge an.
dazu an. In einem gesonderten Fenster links in der Schalterleiste steuern Sie die Um wirklich alle aktiven Aufträge un-
können Sie außerdem nahezu in Echtzeit Oberfläche und die Aufträge. Um alle abhängig vom verwendeten Protokoll
die aktuellen Informationen zum ablau- aktivierten Downloads zu pausieren, temporär zu deaktivieren, müssen Sie im
fenden Download nachvollziehen . e nutzen Sie den Menüpunkt Download | System-Tray mit der rechten Maustaste
An dieser Stelle lassen sich auch unvoll- Stop all active downloads. Im Test stoppte auf das rote Symbol des Download-Ma-
ständige Downloads be-
enden oder pausieren.
Für jeden neuen Auftrag
öffnet Persepolis ein eige-
nes Info-Fenster, sodass
bei zahlreichen simultan
ausgeführten Downloads
schnell die Übersicht ver-
loren geht.
Um das Info-Fenster mit
den Echtzeitinformationen
zu einem Auftrag anzuzei- w Das Programmfenster des Persepolis Download Managers wirkt optisch recht altbacken.

Hier finden Sie Linux-Profis


ganz in Ihrer Nähe!
Online IT-Profimarkt

PROFI
ITMARKT Computec Media GmbH
Anzeigenabteilung
Dr.-Mack-Str. 83
D-90762 Fürth

Tel.: +49 (0) 911 / 2872-252


Fax: +49 (0) 911 / 2872-21

E-Mail: anzeigen@linux-magazin.de

Print, im Marktteil

90 www.linux-magazin.de 03.2021

PROFI
IT MARKT www.it-profimarkt.de
Software Bitparade

nagers klicken und im gezeigten Spalten und modifizieren die


sich öffnenden Kontext- Zielpfade. Eine Lokalisierung der Soft-
menü die Option Stop all ware erlaubt der Dialog jedoch nicht .r
active downloads aus-
wählen. Nur dann ändert
Logs
Persepolis zuverlässig den
aktuellen Status aller Auf- In seiner Log-Datei protokolliert der Per-
träge im Programmfens- sepolis Download Manager alle manuell
ter und blendet für einige ausgeführten Arbeitsschritte sowie die
Sekunden entsprechende aufgetretenen Fehler. Sie erreichen das
Meldungen ein. Protokoll über den Eintrag Help | Show
e Auch im Persepolis Download Manager können Sie Die Funktion Resume log file im Hamburger-Menü. Die dort
jeden Auftrag detailliert nachvollziehen. Download aus dem Un- aufgeführten Ausrutscher des Programms
termenü Download des können Sie per Knopfdruck direkt an die
Hamburger-Menüs ent- Entwickler melden und damit zur Fehler-
faltet ihre Wirkung sogar behebung und zur Verbesserung der An-
nur auf den ersten mar- wendung beitragen . t
kierten Auftrag, während
alle weiteren per einfa-
ԏ Xtreme Download Manager
chem Mausklick markier-
ten Aufträge davon unbe- Der plattformübergreifend verfügbare
rührt bleiben. Sie müssen Xtreme Download Manager 1 richtet
sie alle einzeln erneut per sich primär an Nutzer, die sehr viele In-
Rechtsklick und Auswahl halte aus dem Internet beziehen und
der Option Resume Down- deshalb nicht nur hohe Geschwindigkei-
load aktivieren. ten benötigen, sondern auch zusätzliche
Funktionen, um beispielsweise unterbro-
chene Downloads nahtlos fortzusetzen.
Einstellungen
Die Software harmoniert außerdem mit
Um die Software optisch den gängigen Webbrowsern und kann
anzupassen, öffnen Sie via deren Download-Routinen ersetzen.
Hamburger-Menü die Das Projekt bietet seine Software als
Option Edit | Preferences. distributionsunabhängig installierbaren
Daraufhin gestattet ein Tarball zum Download an 1. Das TAR.XZ-
r Im Konfigurationsdialog des Persepolis Download Dialog das detaillierte An- Paket der aktuell stabilen Version 7.2.11
Managers fehlt eine Option zur Lokalisierung. passen des Erscheinungs- hat gut 50 MByte Umfang. Sie entpacken
bilds der Anwendung. Hier das Archiv in ein beliebiges Verzeichnis
definieren Sie zum Bei- und rufen danach den Installer mittels
spiel die im Listensegment sudo ./install.sh auf. Die Routine in-
des Programmfensters an- tegriert das Programm in Ihre Desktop-

t Inkonsistenzen in Persepolis Download Manager


lokalisieren Sie mithilfe einer Log-Datei. z Das unscheinbare Programmfenster des Xtreme Download Managers.

44 www.linux-magazin.de 12.2023
Bitparade Software

Umgebung, sodass Sie dort anschlie- Programmfenster zeigt rechts in einem Steuermöglichkeiten. So ordnen Sie im
ßend einen Starter vorfinden. Die aktu- großen Segment die Menü Downloads |
ellere, bislang noch als Beta deklarierte laufenden Aufträge in- Queue and scheduler
Version 8.0.29 gibt es als DEB- und RPM- klusive ihres jeweiligen Aufträge verschiedenen
Paket sowie in einer Variante für Arch- u
Status an . Warteschlangen zu, die
Linux-basierte Distributionen 1. In den Reitern In- der Download-Manager
complete und Complete dann zeitgesteuert ab-
oberhalb der Auftrags- arbeitet. Dabei können
Nutzung
liste zeigt Xtreme Sie nicht nur Uhrzeiten
Nach dem Start öffnet die stabile Variante Download Manager i Für Videodateien hält der für das Abarbeiten der
des Programms ein kompaktes, modern die unvollständigen Xtreme Download Manager Warteschlangen ange-
gestaltetes Programmfenster, in dem beziehungsweise abge- eigene Dialoge bereit. ben, sondern auch Ter-
beim ersten Aufruf ein Hinweis zur Instal- schlossenen Aufträge minaufträge täglich wie-
lation eines Browser-Addons erscheint. an. Auf diese Weise be- derholen lassen.
Diese für diverse gängige Webbrowser halten Sie auch bei sehr vielen Aufträgen
verfügbare Erweiterung integrieren Sie stets den Überblick.
Multimediales
durch einen Klick auf die Schaltfläche Links neben dem Listenbereich finden
Install addon unterhalb des jeweiligen Sie mehrere Kategorien, in denen sich Besondere Aufmerksamkeit widmet der
Browser-Namens in Ihr System . z die heruntergeladenen Dateien ablegen Xtreme Download Manager Multimedia-
Das Addon benötigt der Download- lassen. Beim Anlegen eines neuen Down- inhalten. Videos lassen sich von allen
Manager für das Monitoring des Web- load-Auftrags wählen Sie eine der Ziel- gängigen Plattformen herunterladen,
browsers. Er erkennt darüber automa- kategorien aus, indem Sie im Feld File meist sogar in definierter Qualität. So-
tisch, wenn Inhalte aus dem Internet rechts auf das kleine Dreieck klicken und bald Sie ein Video betrachten, blendet
heruntergeladen werden sollen. Nach aus der sich daraufhin öffnenden Liste Xtreme Download Manager rechts unten
dem Einbinden des Addons öffnet der den gewünschten Zielpfad auswählen. im Bildschirm den Hinweisbalken Down-
Download-Manager sofort ein kleines In der Titelleiste befinden sich noch load Video ein. Ein Klick darauf öffnet ein
Fenster New Download mit den benötig- vier weitere Menüs. Dabei eröffnen File, Menü mit den verfügbaren Dateiformaten
ten Einstellungen für das Herunterladen Downloads und Tools einige zusätzliche und Dateigrößen für das Herunterladen.
von Inhalten, sobald Sie auf Ein Linksklick auf einen der Einträge
einer Webseite einen Down- führt in einen Download-Dialog, der im
load-Link anklicken. Feld File bereits den passenden Eintrag
Soll der Download ohne für die gewünschte Videodatei vorhält.
weitere Umstände starten, Nach einem Klick auf das Ordnersymbol
klicken Sie auf Download rechts definieren Sie den Zielpfad für die
Now unten in Fenstermitte. Videodatei. Das Auswahlfeld Convert to
Die Anwendung öffnet nun darunter gestattet es, den Clip in ein an-
ein kleines Informations- i
deres Format zu konvertieren . Passen
fenster mit statistischen An- alle Einstellungen, starten Sie das Herun-
gaben zum laufenden Auf- terladen über die Schaltfläche Download
trag. Darin können Sie den Now unten mittig im Fenster. Die Anwen-
Download bei Bedarf auch dung zeigt den Verlauf des Downloads in
pausieren. Das eigentliche u Die schlichte Auftragsliste von Xtreme DM. einem gesonderten Fenster an.

INODES, INIT & IDEEN


N SOURCE
LINUX UND OPEre m Newsletter
topaktuell mit unse

www.linux-magazin.de/subscribe
Software Bitparade

net die Software nach einem nehmen. Der Gabut Download Manager
Klick auf das vorhandene Da- richtet sich an anspruchsvollere Nutzer,
teiformat einen Einstelldialog, die Wert auf eine moderne Oberfläche
in dem Sie das Zielformat aus- mit intuitiver Bedienung legen. Motrix
wählen. Zudem lassen sich liefert ähnlich wie KGet lediglich Grund-
Parameter wie die Frame- funktionen, bietet jedoch eine sehr mo-
Rate, der verwendete Codec derne Oberfläche. Der Persepolis Down-
und dessen Qualität sowie load Manager erfüllt trotz rustikaler Op-
die Sample-Rate und das Sei- tik seine Aufgaben ebenfalls zuverlässig
tenverhältnis anpassen . o und gibt einen sehr guten Überblick
Nach einem Klick auf OK über die abzuarbeitenden Aufträge. Der
und anschließend einem Xtreme Download Manager verwöhnt
weiteren Mausklick im Kon- Power-User mit vielen Multimedia-Son-
vertierungsfenster auf den derfunktionen, die eine entsprechende
o Videodateien können Sie im Xtreme Download Schalter Convert unten rechts Browser-Erweiterung und sogar ein Kon-
Manager jederzeit nachbearbeiten. wird die Ausgangsdatei in das verterprogramm überflüssig machen.
Zielformat umgewandelt. Vor der Installation eines Download-
Managers sollten Sie sich also darüber
Nach Abschluss des Vorgangs zeigt der schlüssig werden, welche Funktionen Sie
Fazit
Xtreme Download Manager den Datei- wirklich benötigen. (jlu) Ӻ
namen und Speicherpfad an. Sie haben Unter Linux gibt es eine Vielzahl freier
nun die Möglichkeit, entweder das Video Download-Manager, die sich funktional
durch einen Klick auf den Open abzu- keineswegs vor ihren proprietären Kon- Dateien zum Artikel
spielen oder den Zielordner mit einem kurrenten für andere Betriebssysteme herunterladen unter
Klick auf Open Folder zu öffnen. verstecken müssen. Dabei decken die www.lm-online.de/dl/48774
Da die heruntergeladenen Videos auch Programme das gesamte Anwendungs-
im Hauptfenster des Download-Managers spektrum ab.
erscheinen, können Sie mit einem Rechts- KGet aus dem Fundus des KDE-Plasma-
klick auf die gewünschte Datei und an- Desktops eignet sich eher für anspruchs- Weitere Infos und
schließender Wahl der Option Convert lose Anwender, die lediglich mehrere interessante Links
das Video auch nachträglich noch in ein parallele Downloads abwickeln möchten, www.lm-online.de/qr/48774
anderes Format konvertieren. Dazu öff- ohne Sonderfunktionen in Anspruch zu

Grafische Download-Manager
Gabut DM KGet Motrix PersepolisDM Xtreme DM
Lizenz LGPLv2.1 GPLv2 MIT GPLv3 GPLv2
plattformübergreifend ԏ ԏ ԏ ԏ ԏ
Anpassung Bandbreite ԏ ԏ ԏ ԏ ԏ
Anpassung simultaner Downloads ԏ ԏ ԏ ԏ ԏ
Dateien splitten ԏ ԏ ԏ ԏ ԏ
zeitgesteuerte Downloads ԏ ԏ ԏ ԏ ԏ
Unterstützung HTTP(S)/FTP ԏ ԏ ԏ ԏ ԏ
Unterstützung Bittorrent ԏ ԏ ԏ ԏ ԏ
Unterstützung für ԏ ԏ ԏ ԏ ԏ
Video-Downloads (Streaming)
Videokonverter integriert ԏ ԏ ԏ ԏ ԏ
Pausieren von Downloads ԏ ԏ ԏ ԏ ԏ
Wiederaufnahme ԏ ԏ ԏ ԏ ԏ
abgebrochener Downloads
Download-Kategorien wählbar ԏ ԏ ԏ eingeschränkt ԏ
Log-Dateien ԏ ԏ ԏ ԏ ԏ
Schnellfunktion über System-Tray ԏ ԏ ԏ ԏ ԏ

46 www.linux-magazin.de 12.2023
LINUX-
MAGAZIN
IHRE DIGITALE AUSGABE
ÜBERALL DABEI!

Das Linux-Magazin begleitet Sie jetzt überall –


egal, ob auf dem Tablet, dem Smartphone,
dem Kindle Fire oder im Webbrowser.
Das Linux-Magazin ist ab sofort immer dabei.

1x im Shop registrieren – überall mobil lesen.


Mit Ihren Login-Daten erhalten Sie überall Zugriff auf Ihre gekauften Digital-Ausgaben,
im Shop-Account, in der Linux-Magazin-App und auf epaper.linux-magazin.de.

shop.linuxmagazin.de
Reguläre Ausdrücke clever einsetzen (Teil 1)

Schreckgespenster

ka
©k terinamore / 123RF.com
ateri
Mit regulären Ausdrücken quälen angeblich Informatikpro- äe, äi oder ee. Bevor wir uns der Lösung
dieses Problems widmen, beleuchte ich
fessoren ihre Studenten. Tatsächlich bilden Regexe im Linux- zunächst den Sonderfall der Negation.
Möchte ich einen Ausdruck, der Vokale
Universum ein überaus mächtiges Werkzeug. Thomas Reuß explizit ausschließt, muss ich die Zeichen-
klasse negieren: [^AEIOUaeiou]. Das Zir-
kumflex-Zeichen dreht die Logik inner-
Wer programmiert, stolpert irgendwann welche Zeichen vorkommen sollen. Die halb der eckigen Klammern um. Statt nur
zwangsläufig über sie: reguläre Ausdrü- Komplexität kennt hier kaum Grenzen. auf Vokale trifft der Ausdruck jetzt auf
cke. In Programmiersprachen sind sie alles außer Vokale zu. Alternativ zur No-
praktisch allgegenwärtig, es gibt sie für tation mit eckigen Klammern definiert
Zeichenklassen
PHP, C, Python und Java. Außerdem tau- die Spezifikation für wichtige Zeichen-
chen sie unweigerlich im Kontext von Möchte ich zum Beispiel die Menge der klassen Kurzschreibweisen. So lassen sich
Unix-Urgesteinen wie Grep, Sed und Awk Vokale der deutschen Sprache als Aus- Dezimalzahlen durch \d, alphanumeri-
auf. Dabei dienen reguläre Ausdrücke druck definieren, formuliere ich sie als sche Zeichen per \w und Weißraum per
stets demselben Zweck, dem Erkennen [AEIOUaeiou]. Die eckigen Klammern \s ausdrücken 1. In den Links zum Ar-
von Mustern. Immer dann, wenn dafür kennzeichnen eine Menge, die Buchsta- tikel finden Sie die Definitionen 1.
die simple Suchen-Ersetzen-Funktion im ben stehen für die Vokale. Wenn es um
Editor nicht mehr genügt, gelten Regexe die Menge der Diphthonge geht, also der
Quantifizieren
als das Mittel der Wahl. Doppellaute au, äu, ei, eu und so weiter,
Das Schreckgespenst verliert viel von gestaltet sich die Sache schon schwieri- Mithilfe von Zeichenklassen können Sie
seinem Schrecken, sobald Sie verstanden ger. Selbstverständlich könnte ich die eine Menge von Zeichen definieren, die
haben, dass im Rahmen von regulären Doppellaute über die Zeichenklassen ab- vorhanden sein müssen. Allerdings kön-
Ausdrücken eine Reihe von Zeichen eine bilden, etwa als [aäe][eiu]. nen Sie auf diese Weise nicht angeben,
völlig neue Bedeutung bekommen. Da- Wie Sie sehen, liefert die Aneinander- ob Sie genau einen Vokal möchten oder
rüber hinaus sollten Sie begreifen, dass reihung von Zeichenklassen genau die vielleicht doch mindestens zwei. Dazu be-
reguläre Ausdrücke auf Zeichenfolgen gewünschte Funktion. Allerdings hat die nötigen Sie Quantoren. Sie ermöglichen,
operieren. Das heißt, dass Sie damit an- Sache auch einen Haken: Der Ausdruck die Anzahl der angeforderten Zeichen
hand von Zeichenmengen beziehungs- passt nicht nur auf die gewünschten festzulegen. Wollen Sie zum Beispiel eine
weise Zeichenklassen angeben, wie oft Werte au, äu, ei, eu, sondern ebenso auf ae, deutsche Postleitzahl erkennen, müssen

48 www.linux-magazin.de 12.2023
Admin-as-a-Service Sysadmin

Sie einen Ausdruck schreiben, der log/syslog. Als Admin ist es


auf Wörter aus genau fünf Dezimal- mein tägliches Brot, Logs nach
ziffern passt. Eine Zeichenklasse ist Fehlern zu durchsuchen. Dazu
schnell bestimmt: [0-9]. Darauf- setze ich Grep ein. Möchte ich die
hin könnten Sie durch Aneinan- Log-Messages des laufenden Tags
derreihung den entsprechenden erhalten, benutze ich das Werk-
Ausdruck [0-9][0-9][0-9][0-9] zeug mit einem Ausdruck, der es
[0-9] festlegen. Das mag im Ein- anweist, Zeilen auszugeben, die
zelfall Sinn ergeben, erweist sich 1 Grep nach Ziffern liefert beispielsweise die Release- mit dem heutigen Datum begin-
aber für große Längen als unprak- Nummern von Debian-Maschinen. nen: grep '^2023-09-24'. Der
tikabel und bei variablen Längen vorangestellte Zirkumflex ^ steht
als völlig ungeeignet. 2
für den Zeilenanfang .
Wieder greife ich auf überaus nützliche An dieser Stelle verfügen Sie über das Geht es mir um den Fehler am Zeilen-
Hilfsmittel zurück. Wenn ich ausdrücken notwendige Instrumentarium, um die ende, lautet der Aufruf grep '/var/log/
möchte, dass ein Zeichen höchstens ein- ersten sinnvollen Daten auf der Kom- [bw]tmp$'. Hier verwende ich gleich
mal vorkommen darf, verwende ich das mandozeile zu ermitteln. Dass Grep Da- zwei Features, die Sie bereits kennen. Zu-
Fragezeichen, also im Beispiel [0-9]?. teien nach Zeichenketten durchsuchen nächst fasse ich wtmp und btmp über eine
Hier passt keine oder genau eine Ziffer. kann, dürften zahlreiche Leser wissen. Zeichenklasse [wb] zusammen. Abschlie-
Selbstverständlich klappt das genauso Dass das Tool die erweiterte Regex-Spe- ßend lege ich fest, dass hinter [bw]tmp
mit ganz konkreten Zeichen: E? definiert, zifikation und sogar teilweise Perl Com- nur noch das Zeilenende kommt. Das er-
dass ich entweder kein oder genau ein E patible Regular Expressions (PCRE) be- ledigt das Dollar-Zeichen $.
suche. Möchten Sie angeben, dass min- herrscht, ist so manchem vielleicht neu.
destens ein E gefordert ist, kommt der Mit diesem Wissen kann ich zum Beispiel
Grüppchenbildung
Quantor + zum Einsatz, also E+. über den Befehl aus Listing 1 die Release-
Ein anderes Beispiel: Sie wollen die Nummer meiner Debian-Maschinen in Mit den bisher vorgestellten Funktionen
Altersangabe innerhalb eines Formulars Erfahrung bringen . 1 lässt sich schon eine ganze Menge an-
bereinigen. Wer sein Alter angibt, darf fangen. Trotzdem fällt es nach wie vor
ausschließlich Dezimalziffern verwenden, schwer, aus Log-Dateien etwa sämtliche
Verankern
also [0-9]* oder \d*. Das Sternchen de- Einträge mit den Schweregraden error
finiert, dass der Ausdruck entweder auf Wenn niemand festlegt, wo relevante Da- und warning zu ermitteln. Ein regulärer
das leere Wort passt oder aber auf be- ten anfangen oder enden, ist es schwie- Ausdruck wie [ew][ra]r[on][ri]n?g?
liebig viele Dezimalziffern. Eine derartige rig, sinnvoll mit diesen Daten umzuge- passt nicht nur auf error und warning,
Altersprüfung würde sogar Senioren hen. Ein prosaischer Text, in dem sich sondern genauso auf earoin. Für solche
buchstäblich biblischen Alters akzeptie- Zahlen und Zusammenhänge verbergen Situationen benötigen Sie ein Konstrukt,
ren, denn \d* erkennt auch 1300. (besser bekannt als Textaufgabe), eignet das entweder auf error oder auf warning
Offensichtlich fehlt hier eine obere sich somit logischerweise kaum als Spiel- passt: Gruppen. Die recht intuitive Syntax
Schranke. Nachdem reguläre Ausdrücke feld für Regexe. Tabellarische Daten da- dazu lautet (error|warning). Die runden
auf Wörtern aus Alphabeten operieren, gegen taugen hier ausgesprochen gut. Klammern legen fest, dass es sich um
also keine Zahlensemantik kennen, kön- Reguläre Ausdrücke benötigen häufig eine Gruppe handelt, das Pipe-Zeichen |
nen Sie nicht mit den vertrauten Kleiner- eine Art Verankerung. In nahezu allen trennt die Optionen. Ein Regex, der den
und Größer-Operatoren < und > arbeiten. Fällen kommen Sie problemlos zurecht, drei Artikeln des Deutschen entspricht,
Was Sie aber sagen können: Menschen wenn Sie als Ankerpunkte den Zeilenan- lautet somit d(er|ie|as).
mit einhundert oder mehr Jahren Alter fang oder das Zeilenende auswählen. Das Auch für Gruppen gelten Quantoren
gibt es, Tausendjährige dagegen nicht. gilt vor allem für Dateien in Tabellenform. und Anker. Das heißt, Sie können ab
Dazu ziehen Sie eine Verkettung von Zei- Dazu gehören Log-Dateien wie /var/ sofort etwa Wortwiederholungen identi-
chenklassen heran: [0-9][0-9]?[0-9]?.
Die Fragezeichen deklarieren die beiden
hinteren Zeichenklassen als optional, was
zum gewünschten Ergebnis führt.
Für definierte Wortlängen, etwa von 7
bis 23 Ziffern, gibt es eine eigene Regex-
Syntax: [0-9]{7,23}. In geschweiften 2 Grep und ein Regex liefern gezielt Zeilen, die mit dem aktuellen Datum anfangen.
Klammern legen Sie eine Unter- und
Obergrenze fest, wobei Sie auf die Ober-
grenze verzichten dürfen. Somit sind \d? Listing 1: Distro-Version ermitteln
und [0-9]{0,1} sowie [a-z]+ und [a-z] $ grep -E '[0-9]{2,}' /etc/os-release grep -P '\d{2,}' /etc/os-release
{1, } äquivalente Ausdrücke.

12.2023 www.linux-magazin.de 49
Sysadmin Admin-as-a-Service

fizieren. Der Regex Anzahl (*). Die Klammern


(d(er|ie|as) ?)+ deckt bewirken außerdem, dass
der, die, das, der der und der gewünschte Text zur
derdiedas ab. Die innere Weiterverarbeitung als
Gruppe erkennt die Ar- Gruppe geliefert wird. Als
tikel, gefolgt von einem Trennzeichen tritt das Se-
optionalen Leerzeichen 3 Über Gruppen sucht Grep die richtigen Zeilen aus dem Syslog heraus. mikolon auf.
(?). Die äußere Gruppe Um reguläre Ausdrücke
gestattet eine Wieder- in Python verwenden zu
holung der inneren Gruppe (+). a+ nicht auf leere Strings zu, wohl aber können (Listing 4), importieren Sie zuerst
Dank Gruppen lasse ich mir außerdem auf a, aa, aaa und so weiter. Obendrein in der ersten Zeile die nötige Bibliothek.
die richtigen Zeilen aus dem Syslog per können Sie Bereiche angeben und über In Zeile 2 habe ich den eben vorgestellten
Grep ausgeben (Listing 2). Das angege- {m,n} fordern, dass ein Zeichen, eine Zei- Ausdruck um ein vorangestelltes ?: er-
bene Suchmuster definiert wieder per chenklasse oder eine Gruppe mindes- weitert. Das bewirkt, dass ein Klammern-
Anker das Datum am Zeilenanfang. Da- tens m Mal vorkommen muss und höchs- paar nicht als Capturing Group interpre-
nach gestatte ich per .* beliebige Zei- tens n Mal auftreten darf. tiert wird, sondern ausschließlich der Zu-
chen (.) in beliebiger Menge (*). Damit Was aber, wenn es keine Information sammenfassung dient. Zeile 3 wendet
kann ich die Uhrzeiten überspringen, um über die Länge gibt? Was, wenn ich in danach diesen Ausdruck auf die Adress-
im Anschluss die Anwesenheit von ent- einer CSV-Datei den Inhalt einer Zelle aus- tabelle aus Listing 3 an. In Zeile 4 passiert
weder error oder warning zu fordern .3 lesen will? Hier liegt im Unklaren, welche etwas Unerwünschtes: Da das Muster
Zeichen in den Zellen vorhanden sein „greedy“ formuliert ist, findet Python ge-
können. Deswegen kommt prinzipiell nau eine Übereinstimmung, und zwar
Gier
ausschließlich der Punkt . als Muster in- die gesamte Zeile exklusive des abschlie-
Wie erwähnt, deckt der Asterisk beliebig frage – er passt ja auf alle Zeichen. Be- ßenden Strichpunkts.
viele Zeichen ab: a* passt auf das leere kannt ist zudem, dass Strichpunkte ; die Das entspricht nicht dem, was Sie
Wort (das Sternchen lässt ja auch keiner- einzelnen Zellen und Newlines \n die möchten. Um die Inhalte der einzelnen
lei Vorkommen zu), auf a, auf aa und so Zeilen trennen (Listing 3). Zellen der Tabelle als Gruppenelemente
weiter. Möchten Sie das leere Wort aus- Um hier sämtliche Spalten als Captu- zu erhalten, müssen Sie wie in Zeile 5 den
schließen, bestimmen Sie über den Quan- ring Groups zu ermitteln, verwenden Sie Ausdruck als non-greedy deklarieren:
tor + das mindestens einmalige Vorkom- den Ausdruck ((.*);). Das Muster er- (?:(.*?);). Hier kommt es auf das Fra-
men des Zeichens. So trifft der Ausdruck kennt beliebige Zeichen (.), in beliebiger gezeichen hinter dem Sternchen an. Ein
erneuter Aufruf der Funktion findall()
liefert das Wunschergebnis, eine Liste (zu
Listing 2: Syslog auswerten erkennen an den eckigen Klammern) mit
$ grep -E '^2023-09-24.*(error|warning)' /var/log/syslog
allen gefundenen Übereinstimmungen.

Fazit
Listing 3: CSV-Datei Mit diesem Artikel sind Sie schon ein gu-
Name;Vorname;E-Mail; tes Stück in der Welt der regulären Aus-
drücke herumgekommen und fähig, in
Eberhofer;Franz;franz.eberhofer@niederkaltenkirchen.bayern;
Dateien nach recht komplizierten Mus-
Flötzinger;Ignaz;info@rohrfrei-floetz.business;
tern zu suchen. Doch damit ist die Macht
Simmerl;Max;metzger@simmerl.shop; der Regexe und vor allem der damit aus-
gestatteten Tools längst noch nicht aus-
geschöpft. Im zweiten Teil dieses Artikels
Listing 4: Non-greedy Regex werde ich auf fortgeschrittene Features
01 >>> import re eingehen und dabei vor allem zeigen,
02 >>> r = re.compile(r"(?:(.*);)") wie Sie damit nicht nur Inhalte finden,
sondern sie auch für umfassende Ände-
03 >>> r.findall(r"Eberhofer;Franz;franz.eberhofer@niederkaltenkirchen.
bayern;") rungen einsetzen können. (csi) Ӻ
04 ['Eberhofer;Franz;franz.eberhofer@niederkaltenkirchen.bayern']
05 >>> r = re.compile(r"(?:(.*?);)")
Weitere Infos und
06 >>> r.findall(r"Eberhofer;Franz;franz.eberhofer@niederkaltenkirchen.
interessante Links
bayern;")
07 ['Eberhofer', 'Franz', 'franz.eberhofer@niederkaltenkirchen.bayern'] www.lm-online.de/qr/49801

50 www.linux-magazin.de 12.2023
LUKAS
VERONIKA
Games Group
E-Commerce
SciFi-Nerd
CosPlay-Nerd

JOHANNES
N-Zone
Nintendo-Nerd
MANUEL
PCGH
Notebook-Nerd
SASCHA
play5 | PC Games
MATTHIAS Fantasy-Nerd
PC Games
Video-Nerd

SANTI
PCGH
Video-Nerd
TANJA

Wir lieben es.


PC Games MMore
MMORPG-Nerd

Wir leben es.


_ Lieblingsthemen: Gaming. IT. Entertainment.
_ Mehr Stories. Mehr Hintergründe. Mehr Herz.
_ Gründlicher. Übersichtlicher. Unterhaltsamer.
_ Magazine. Apps. Webseiten. Streams. Podcasts. Und mehr.

shop.computec.de | Oder in eurem Store nach dem Magazin-Namen suchen:

Computec Media. Von Nerds für Nerds.


Folgt uns:
© donets / 123RF.com
Amazon Firecracker bietet effiziente Vollvirtualisierung plex und kompliziert, vor allem unter der
Haube – dabei sind Kubernetes und der
Layer Cake, der implizit mit Containern

Ein Kracher einhergeht, nun auch nicht gerade trivial.


Da bleibt mancher Admin doch lieber
im gewohnten Umfeld der Vollvirtualisie-
rung, mit allen negativen Konsequenzen,
die das mit sich bringt. KVM und Qemu
Vor gut vier Jahren überraschte Amazon die IT mit Firecracker: etwa sagt man nach, sie kämen mit mas-
sivem Overhead daher und verfeuerten
Der Emulator fußt auf PVOps im Linux-Kernel und ist deutlich 15 bis 20 Prozent der verfügbaren Res-
sourcen allein für den eigenen Betrieb.
effizienter und sicherer als das Linux-Urgestein KVM. Mittler- Dass KVM und Qemu nicht gerade
leichtfüßig sind, ist auch Amazon schon
weile hat Firecracker sich auch als Alternative zu Containern aufgefallen, dem Klassenprimus der
Cloud-Branche. Für AWS hat man sich je-
etabliert. Martin Loschwitz doch dort schon 2018 einen alternativen
Ansatz ausgedacht: Auf Basis der Virtua-
lisierungsfunktion PVOps im Kernel ent-
Virtualisierung gilt heute in der IT als wickelt man einen neuen VMM (Virtual
weitgehend abgefrühstücktes Thema, Machine Manager) namens Firecracker.
zumal die klassische Voll- und Paravir- Er präsentiert sich als schlanker Gegen-
tualisierung in den vergangenen Jahren entwurf zu KVM und Qemu und soll voll-
massiv an Bedeutung verloren hat. Die virtualisierte Systeme mit möglichst ge-
Containerisierung macht es möglich: Wo ringem Overhead ermöglichen.
viele Administratoren früher selbstver- Wir haben über Firecracker bereits
ständlich zu KVM und Qemu oder gar zu 2019 ausführlich berichtet 1. Fast vier
VMware griffen, tun es heute Container Jahre später hat sich viel getan. Manche
im Tandem mit Kubernetes oft ebenso. Hoffnungen der Firecracker-Entwickler
Paradoxerweise gilt KVM als hochkom- haben sich erfüllt, andere Aspekte sind

52 www.linux-magazin.de 12.2023
Firecracker Sysadmin

bis heute nicht optimal gelöst oder stellen kann. Dafür sorgt
sogar noch ein echtes Hindernis für den neben dem in der VM
produktiven Betrieb dar. Zeitgleich hat vorhandenen BIOS
Firecracker den Markt nicht annähernd der Umstand, dass in
so radikal durchdrungen, wie man es sich entsprechenden In-
bei AWS erhofft haben dürfte. Das hat stanzen üblicherweise
aber nicht zwingend etwas mit der Qua- Linux-Systeme auf
lität von Firecracker zu tun, sondern eher Basis von Standard-
mit dem Umfeld und der Tatsache, dass distributionen zum
noch immer fast alle Augen auf Container Einsatz kommen. Fire-
und Kubernetes gerichtet sind. cracker geht deutlich
Höchste Zeit also für ein Update: Was schneller zu Werke
kann Firecracker mittlerweile, in welche und startet neue In-
externen Lösungen passt es sich ein, und stanzen in unter einer

© Mathis Joffre
wie integrieren umsteigewillige Adminis- Sekunde, sofern die
tratoren die Lösung? in der Instanz gestar-
tete Distribution mit-
spielt. Häufig kommt
Die Technik
Alpine Linux zum 1 Firecracker fungiert im Gespann mit KVM als Hypervisor
An dieser Stelle kann ein kurzer Exkurs Einsatz, das sich in und als leichtfüßige Alternative zu Qemu.
in die Technik hinter Firecracker nicht solchen Einsatzszena-
schaden, denn die hat sich in den ver- rien bewährt hat.
gangenen vier Jahren verändert. Zur Er- Unter der Haube folgt Firecracker da- KVM selbst ist ja zunächst einmal nur ein
innerung: Firecracker ist eine AWS-eige- bei einer nicht sonderlich komplexen Satz verschiedener Funktionen aus dem
ne Entwicklung für den Dienst Lambda. 1
Architektur . AWS hat gut daran getan, Linux-Kernel, der seinerseits auf PVOps
Der kommt laut AWS für die Verarbei- das Rad in Sachen Virtualisierung nicht fußt. Unter der Bezeichnung PVOps fir-
tung von Daten zum Einsatz und führt vollständig neu zu erfinden, sondern auf miert wiederum eine Technik, die einst
auf Zuruf bestimmte Programme aus, einige bewährte Komponenten aus der auf Geheiß von Linus Torvalds persönlich
die in einer strikt separierten Umgebung Open-Source-Welt zu setzen. Noch heute Einzug in den Linux-Kernel fand und
laufen sollen. erstaunt es viele, wenn sie hören, dass Standardfunktionen definierte, um Voll-
Es geht bei Lambda – und das wird KVM als technischer Kern für Firecracker und Paravirtualisierung zu ermöglichen.
später noch wichtig werden – also nicht dient – eben jener VMM also, den AWS Egal, ob KVM oder Xen: Wer heute unter
primär um virtuelle Instanzen für den all- selbst im Kontext klassischer Para- und Linux virtualisiert, nutzt PVOps. Amazon
gemeinen Zweck. Dafür gibt es bei AWS Vollvirtualisierung eigentlich verteufelt. hat quasi eine Abkürzung genommen,
schließlich EC2, und Lambda soll keine An dieser Stelle kommt es nun allerdings indem es keinen komplett neuen Hyper-
In-House-Konkurrenz für EC2 sein. Der auf die Details an. visor entwickelt, sondern auf KVM ge-
relevante Unterschied: Die im Rahmen
von Lambda gestarteten Instanzen über-
nehmen kurzzeitig eine einzelne Auf-
gabe, wobei der Dienst implizit annimmt,
dass er die VM nach Abwicklung eben-
dieser Aufgabe löschen kann.
Ein valides Beispiel wäre etwa eine Re-
chenaufgabe aus dem KI- oder Machine-
Learning-Kontext. Rechnet eine Anwen-
dung gerade einen Datensatz durch, be-
nötigt sie dafür Rechenleistung. Lambda
eröffnet ihr die Möglichkeit, beliebig
viele virtuelle Instanzen zu starten, um
die anstehende Aufgabe zu berechnen,
und sie danach wieder zu deaktivieren.
Dieses Beispiel zeigt, warum klassische
Vollvirtualisierung für AWS keine Option
war: Eine KVM-Qemu-Instanz benötigt
locker eine halbe Minute, um überhaupt
so weit hochzufahren, dass sie ein vom 2 Anders als etwa Qemu kommt Firecracker mit einer ReSTful-API daher, über die sich
Nutzer eingepflegtes Programm starten der Betrieb und der Start von Instanzen steuern und kontrollieren lässt.

12.2023 www.linux-magazin.de 53
Sysadmin Firecracker

(oder MicroVM) ist in diesem Kontext ein


zentraler Begriff. Dieses Schlagwort be-
zeichnet Instanzen, die für den kurzzeiti-
gen Betrieb eines einzelnen, meist nicht
sonderlich großen oder ressourceninten-
siven Diensts konzipiert sind. Solche VMs
benötigen lediglich die Komponenten für
den Betrieb der fraglichen Software so-
wie einige wenige Treiber, um den Netz-
werkverkehr mit dem Host abzuwickeln
und auf dessen Arbeitsspeicher und sei-
ne CPU zuzugreifen. Anders formuliert:
Firecracker fehlen sämtliche Funktionen,
die AWS Lambda schlicht nicht benötigt.
© Hocus

Dort wird eine Instanz ja nur kurz ge-


startet, führt eine Aufgabe aus und ter-
miniert dann sofort wieder.
3 Von wegen leichtfüßig: Hocus konnte beweisen, dass langfristig laufende Firecracker- Was passiert, wenn man die Faktoren
Instanzen viel mehr RAM benötigen als die Qemu-Pendants. Kein Wunder: Für diesen Ein- MicroVM sowie kurzlebige Workloads
satzzweck wurde Firecracker schlicht nicht konzipiert. außer Acht lässt und Firecracker als voll-
ständigen Ersatz für KVM und Qemu
einsetzt, hat man bei Hocus am eigenen
setzt hat. Die Art und Weise, wie der Datenschutz einher, für die gehosteten Leib erfahren. Hocus bietet vorgefertigte,
Hypervisor gesteuert und gemanagt Kunden ebenso wie für AWS selbst. vorkonfigurierte virtuelle Instanzen für
wird und welcher Emulator zum Einsatz Firecracker bringt zudem ein Werkzeug den Betrieb verschiedener Entwicklungs-
kommt, um die eigentlichen virtuellen namens Jailer mit, mit dessen Hilfe sich umgebungen und Anwendungen auf
Instanzen zu betreiben, macht jedoch die Sandbox konfigurieren und dyna- Knopfdruck an und kommt auch mit ei-
den entscheidenden Unterschied zum misch nutzen lässt. Ab Werk ist eine Fire- nem gehosteten Angebot in der Cloud
Gespann aus KVM und Qemu aus. cracker-Instanz gar nicht zwangsläufig daher. Entwickler sollen laut Anbieter
Wie eingangs schon beschrieben, ist mit Storage- oder Netzwerkressourcen davon profitieren, dass sie reproduzier-
Firecracker eigentlich ein Virtual Machine versehen. Werden diese doch benötigt, bare, saubere Umgebungen für unter-
Monitor (VMM). Das bedeutet, dass Fire- alloziert der Jailer die benötigten Res- schiedliche Aufgabenbereiche vorfinden,
cracker virtuelle Instanzen so vorbereitet, sourcen und aktiviert sie in der Sandbox ohne diese vor Ort selbst entwickeln zu
dass sie sich unter Verwendung der KVM- einer virtuellen Instanz, sodass sie sich müssen. Der Haken an der Sache: Hocus-
Funktionen des Linux-Kernels starten dort nutzen lassen. Kunden nutzen ihre virtuellen Umgebun-
lassen. Einen entsprechenden Emulator gen durchaus länger, als es mit der De-
liefert Firecracker mit. Es bereitet unter finition von Kurzlebigkeit nach Lambda-
Kritische Stimmen
anderem entsprechende Festplattenab- Standards vereinbar ist. Das führte ins-
bilder vor und führt einen Kernel samt Gerade in jüngerer Vergangenheit mehr- besondere in der Anfangszeit von Hocus
Bootloader aus. Obendrein konfiguriert ten sich allerdings die kritischen Stim- zu Problemen, denn die ersten Pilotver-
Firecracker Netzwerk- und Storage-Funk- men im Hinblick auf Firecracker. An und sionen des Diensts setzten statt auf KVM
tionen so, dass Firecracker-Instanzen sie für sich ist das Tool eine hervorragende mit Qemu auf Firecracker.
unmittelbar nutzen können. Ein Meta- Lösung für Einsatzbereiche, in denen Dabei traten regelmäßig zwei Probleme
daten-Dienst und eine eigene ReSTful- voll- oder paravirtualisierte Instanzen zutage. Zum einen geben Firecracker-
API machen Firecracker von außen und kurzzeitig laufen sollen, aber eben nur Instanzen einmal vom Host allozierten
aus der Ferne steuerbar .2 dafür. AWS selbst weist darauf immer Speicher nicht mehr an diesen zurück.
Firecracker selbst läuft zudem in einer wieder hin und spricht von „short-lived Wer darin also einen Dienst aufruft, der
Sandbox, die KVM zur Verfügung stellt. instances“, also kurzlebigen Instanzen. 32 Gigabyte Arbeitsspeicher benötigt
Auf diese Weise führt selbst ein Ausbruch Manche Administratoren und Entwickler und sich nach getaner Arbeit beendet,
aus einer virtuellen Instanz nicht zu ei- ignorieren den dezenten Hinweis aller- hat anschließend eine leere Firecracker-
nem unmittelbaren Zugriff auf andere dings, und holen sich damit eine blutige Instanz, die nach wie vor 32 Gigabyte
Ressourcen des Hosts. Für AWS wäre das Nase, wie die letzten vier Jahre zeigten. RAM auf dem Host bindet 3 .
der Super-GAU: Auf einem AWS-Server Die Firecracker-Entwickler betrachten Zumindest für dieses Problem ver-
laufen VMs von Dutzenden, wenn nicht vor allem jene Funktionalität als unnötig, spricht Firecracker zwar eine Lösung in
Hunderten Kunden. Ein einzelner Aus- die den Speicherfußabdruck einer Micro- Form eines eigenen Ballooning-Treibers
bruch ginge hier also mit massiven Ge- Instanz erhöht oder die Angriffsfläche für für KVM, praktisch nutzbar ist der in einer
fahren in Sachen Datensicherheit und Hacker vergrößert. Auch Micro-Instanz Lösung wie Hocus laut dessen Entwick-

54 www.linux-magazin.de 12.2023
Firecracker Sysadmin

lern allerdings nicht. Damit der Kernel


des Host-Systems den Arbeitsspeicher
aus einer Instanz zurückfordern kann,
muss er zuverlässig sicherstellen, dass
die Instanz ihn tatsächlich nicht mehr
benötigt. Dazu müsste eine Firecracker-
Komponente auf dem Host in die Instanz
hineinschauen. Das würde einerseits hef-
tige Anpassungen erfordern und anderer-
seits die gewünschte strikte Trennung
zwischen Host und Gast aufweichen.

© Kata Containers
Eine zweite Schwachstelle besteht laut
Hocus-Entwicklern in der Art und Weise,
wie Firecracker auf an die Instanz an-
geschlossenen Blockspeicher zugreift.
Dafür kommt eine modifizierte Imple-
mentierung von Virtio-blk zum Einsatz, 4 Kata Containers bietet eine CRI-O-kompatible Laufzeitumgebung für den Betrieb von
des paravirtualisierten Treibers für den Containern, verschachtelt die Container dabei jedoch auf Wunsch in Firecracker-Instanzen.
Zugriff auf Blockspeichergeräte. Diese
benötigt laut Hocus zwar tatsächlich
deutlich weniger Arbeitsspeicher als die erst dann wirklich Fahrt aufnehmen werde, ist schon längst wieder in die ewigen
Standardimplementierung, bietet aller- wenn sie mit anderen Tools wie Libvirt Jagdgründe eingegangen. Weder für den
dings auch einen deutlich geringeren oder OpenStack integriert würde. Bis Betrieb mit Libvirt noch für den Betrieb
Datendurchsatz. Das bremst insbeson- heute liegt für Firecracker noch keine innerhalb von OpenStack ergeben sich
dere Anwendungen aus, die auf hohe Libvirt-Integration vor, und von Open- mithin sinnvolle Use Cases, zumindest
Bandbreiten bei den angeschlossenen Stack war bisher noch gar nicht die Rede. im Augenblick.
Speichergeräten angewiesen sind. Laut Das ist allerdings kein sträfliches Ver- Anders sieht die Sache aus, lässt man
Hocus realisiert Firecracker ausschließlich säumnis der Entwickler, sondern hat vor seinen Blick in die hippe Welt der Mikro-
einen MMIO-basierten Transport von allem mit den schon beschriebenen Ein- architektur-Apps und der Container
Daten, während Qemu bei der Paravir- satzszenarien für Firecracker zu tun. schweifen. Dort hat sich etwa Kata Con-
tualisierung auch die schnellere PCI-Vari- Ein Gespann aus Firecracker und Lib- tainers seit einigen Jahren Meriten erar-
ante verwenden kann. virt wäre nur dann sinnvoll, wenn das Ziel beitet, und das mit einem relativ simplen
Das Ende vom Lied hat wohl jeder darin bestünde, kurzlebige virtuelle In- Konzept: Die Lösung wirbt damit, klassi-
geahnt: Hocus entschied sich letztlich stanzen auf Standard-Servern auszurollen. sche Workloads aus der Container-Welt
gegen Firecracker und für das klassische Das gilt noch viel mehr für die Kombi- auszuführen, allerdings in Kombination
Gespann aus Qemu und KVM, mit vielen nation mit OpenStack. Wie beschrieben, mit ebenfalls klassischer Virtualisierung.
lokalen Anpassungen. Allerdings weisen taugt Firecracker jedoch kaum als voll- Wie OpenStack ist auch Kata Containers
die Entwickler ausdrücklich darauf hin, wertiger Ersatz für KVM und Qemu. Eine ein Projekt der OpenInfra Foundation. Im
dass das nicht als Kritik an Firecracker zu mögliche Integration mit Libvirt oder Grunde handelt es sich um ein Manage-
verstehen sei. Man habe die Software OpenStack ergäbe also nur Sinn, wenn es ment-Framework für den Betrieb von
lediglich in einer anderen Art und Weise explizit um den Betrieb entsprechender Containern, das Kubernetes ähnelt.
genutzt, als vom Hersteller vorgesehen. Workloads ginge. Primär ist Kata jedoch eine CRI-O-kom-
Seinen eigenen Blog-Eintrag 1 möchte Und genau da liegt der Hase im Pfeffer: patible Laufzeitumgebung für Container.
Hocus insofern vor allem als Warnung Dass Administratoren auf einem Stan- Der offene Standard CRI-O definiert eine
für Unternehmen verstanden wissen, die dard-Server mit KVM ohne umfassende Laufzeitumgebung für Container und
einen breitflächigen Ersatz von KVM und Verwaltungssoftware drumherum kurz- ermöglicht das Entwickeln verschiedener
Qemu durch Firecracker ins Auge fassen. lebige Instanzen mit Firecracker ausführen Implementierungen nach standardisier-
Sollen Instanzen lange laufen und dabei und das von Libvirt steuern lassen, ist, ten Vorgaben. Anders als etwa bei der
kontinuierlich Server-Dienste anbieten, wenn überhaupt, ein sehr seltener Use klassischen Docker-Laufzeitumgebung
ist Firecracker vermutlich nicht das rich- Case. Im Gespann mit OpenStack ergäbe oder Podman von Red Hat sitzt bei Kata
tige Werkzeug für die Aufgabe. Firecracker nur Sinn, um einen Dienst wie aber immer auch eine echte virtuelle In-
AWS Lambda nachzubauen. Dafür fehlt stanz im Boot. Laut Entwicklern erhöht
in OpenStack jedoch der gesamte Unter- das den Grad der Abstraktion und damit
Integration ist wichtig
bau. Einen Nachbau von AWS Lambda implizit die Sicherheit der Workloads in
Unser erster Artikel zu Firecracker ende- gab es für OpenStack – wenn überhaupt Containern. Weil Kata CRI-O implemen-
te 2019 mit der Anmerkung, dass die – in Form von Qinling 1 nur in Ansätzen. tiert, lässt es sich unmittelbar mit Kuber-
Lösung in der Open-Source-Welt wohl Selbst dieses Subprojekt von OpenStack netes verwenden. Administratoren brau-

12.2023 www.linux-magazin.de 55
Sysadmin Firecracker

Cloud-Umgebung, kommt dabei jedoch


deutlich weniger komplex daher und
lässt sich insgesamt leichter einrichten.
Darüber hinaus verfügt OpenNebula
über ein eigenes Framework zur Orches-
trierung von Containern, analog zu Kuber-
5
netes . Für dieses Konstrukt kommt
ähnlich wie bei Kata in OpenNebula mitt-
lerweile Firecracker zum Einsatz. Auch
hier geht es also nicht darum, Qemu für
klassische Virtualisierungsszenarien den
Garaus zu machen.

Firecracker ausprobieren
Administratoren kritisieren an Firecracker
oft, dass man es kaum lokal testen könne,
um ein Gefühl für die Funktion und die
© OpenNebula

Features der Lösung zu bekommen. So


pauschal trifft diese Aussage mittlerweile
jedoch nicht mehr zu, denn tatsächlich
lässt sich Firecracker lokal relativ problem-
5 OpenNebula entwickelt eine alternative Managementlösung für Container und setzt los ausprobieren.
dabei unter der Haube auf Firecracker. Dadurch spart man erheblich Ressourcen. Dabei stellt sich die Frage, ob man die
Instanz aus Firecracker heraus lokal über
einen API-Aufruf starten will – eigentlich
chen sich also nicht zwischen den bei- Qemu auch Firecracker als Backend für der empfohlene Weg –, oder ob der Auf-
den zu entscheiden, sondern können den geschachtelten Betrieb von Con- ruf mittels einer lokalen Konfigurations-
die zwei Welten auch gut miteinander tainern nutzen. Das stutzt die nutzlose datei für Testzwecke ausreicht. Falls ja,
kombinieren . 4 Vergeudung von Ressourcen auf den ei- ist der Rest schnell erledigt: Listing 1 ent-
Zunächst setzte man bei Kata auf das gentlichen Compute-Knoten erheblich. hält die gesamte Konfiguration zum Start
Gespann aus KVM und Qemu, gerade im Andere Projekte interessieren sich einer Firecracker-Instanz mit einer vir-
Container-Kontext tut der resultierende mittlerweile ebenfalls für Firecracker. Zu tuellen Netzwerkkarte. Um das Beispiel
Overhead dieser Lösung ressourcentech- den bekannteren davon gehört dabei auf der eigenen Hardware nachzustellen,
nisch allerdings weh. So gesehen kam zweifelsohne OpenNebula: Es verspricht laden Sie mit den Befehlen aus den ersten
Firecracker den Kata-Entwicklern gerade Administratoren ähnlich wie OpenStack zwei Zeilen von Listing 2 einen Kernel
recht: Mittlerweile lässt sich anstelle von den Aufbau und Betrieb einer privaten und ein Dateisystem herunter.

Listing 1: Firecracker-Instanz starten


# example_image.json }
{ ],
"boot-source": { "machine-config": {
"boot_args": "ro console=ttyS0 noapic reboot=k "mem_size_mib": 2048,
panic=1 pci=off nomodules random.trust_cpu=on ip=10. "vcpu_count": 4
10.10.1::10.10.10.2:255.255.255.252::eth0:off", },
"kernel_image_path": "/tmp/hello-vmlinux.bin" "network-interfaces": [
}, {
"drives": [ "guest_mac": "02:FC:00:00:00:05",
{ "host_dev_name": "tap0",
"drive_id": "rootfs", "iface_id": "eth0"
"is_read_only": false, }
"is_root_device": true, ]
"path_on_host": "/tmp/hello-rootfs.ext4" }

56 www.linux-magazin.de 12.2023
Firecracker Sysadmin

Damit das Beispiel funktioniert, muss auf Features fehlen, um über Monate oder große Sprünge hat die Firecracker-Ent-
dem Hostsystem KVM aktiviert und ge- gar Jahre laufende virtuelle Instanzen wicklung zumindest in der jüngeren Ver-
laden sein. Zudem müssen Sie eine TAP- sinnvoll zu betreiben, die kontinuierlich gangenheit nicht mehr gemacht. Gut
Netzwerkschnittstelle anlegen und mit eine Anwendung beherbergen. Für der- möglich also, dass die Lösung sich ein
dem eigentlichen Netzwerkgerät des artige Einsatzgebiete mangelt es Fire- Standbein vor allem im Container-Kon-
Systems verbinden. Haben Sie alle Vor- cracker an den von seinen Entwicklern text sowie im KI/ML-Umfeld erarbeiten
kehrungen getroffen, lässt die Instanz als unnötig betrachteten Funktionen, zum wird. Wer 2019 noch die Palastrevolution
sich mit dem Kommando aus der letzten Beispiel an einer Form der interaktiven im Hinblick auf KVM und Qemu ersehnte
Zeile von Listing 2 starten. Das hier ge- Speicherverwaltung zwischen Host und (oder je nach Standpunkt befürchtete),
nutzte Abbild einer Instanz beherrscht virtueller Instanz. sieht sich jedenfalls eines Besseren be-
zugegebenermaßen nicht sonderlich Tatsächlich beschränkt das in der Pra- lehrt. Damit Firecracker KVM und Qemu
viele Befehle. Möchten Sie die virtuelle xis die Einsatzzwecke von Firecracker in der Breite ablösen könnte, müssten
Firecracker-Instanz genauer untersuchen, weniger, als man glauben könnte. Ein seine Entwickler zuerst einige zentrale
finden Sie im Netz aber auch Abbilder für großer Teil der Container in der Industrie Funktionen nachrüsten.
Ubuntu mit umfassenderer Ausstattung. läuft heute selbst in virtuellen Instanzen, Ein Interesse daran hat Amazon allem
was doppelt ineffektiv ist: Wer Container Anschein nach nicht. Schließlich hätte
in KVM einpackt, holt sich neben dem niemand etwas davon, bauten die Fire-
Fazit
satten Overhead von Qemu obendrein cracker-Entwickler peu à peu ein Qemu
Firecracker ist nach wie vor eine ausge- den impliziten Overhead der Container- mit anderen Mitteln nach. (jcb/jlu) Ӻ
sprochen spannende Technologie für Umgebung ins Haus. Gerade in der Con-
die Verwendung im Rahmen des von tainer-Welt ist es normal, dass Instanzen
AWS entwickelten Einsatzszenarios. Das kommen und gehen, beispielsweise beim Dateien zum Artikel
Werkzeug adressiert spezifisch Einsatz- Skalieren einer Anwendung in die Breite. herunterladen unter
gebiete, in denen vollständig vom Host Hier kann Firecracker eine valide Alter- www.lm-online.de/dl/49906
abgeschirmte Rechenpower gefragt ist, native zu KVM und Qemu bieten. Ent-
um kurzlebige Aufgaben abzuwickeln. sprechend ist das Werkzeug heute – an-
Als vollständiger Ersatz für das klassische ders als noch vor vier Jahren – in Lösun-
Gespann aus KVM und Qemu taugt Fire- gen wie Kata Containers eingebettet. Weitere Infos und
cracker dagegen nicht, und will das auch Hinzu kommt, dass Firecracker aus interessante Links
gar nicht. Die AWS-Entwickler selbst AWS-Sicht mittlerweile einigermaßen www.lm-online.de/qr/49906
weisen darauf hin, dass in Firecracker durchentwickelt zu sein scheint. Allzu

Listing 2: Vorbereitung und Aufruf Der Autor


$ curl -fsSL -o /tmp/hello-vmlinux.bin https://s3.amazonaws.com/spec. Martin Loschwitz ist ein freier IT-Journalist,
ccfc.min/img/hello/kernel/hello-vmlinux.bin der auf viel Berufserfahrung in der Adminis-
$ curl -fsSL -o /tmp/hello-rootfs.ext4 https://s3.amazonaws.com/spec. tration und Kundenberatung namentlich
ccfc.min/img/hello/fsfiles/hello-rootfs.ext4 im Cloud- und Containerumfeld und bei ska-
[...] lierbaren Speicherlösungen zurückblicken
$ ./firecracker --api-sock /tmp/firecracker.socket --config-file kann. Er zählt zu den dienstältesten Autoren
example_vm.json des Linux-Magazins.

NEWS, BLOGS & JOBS


N SOURCE
LINUX UND OPEre m Newsletter
topaktuell mit unse

www.linux-magazin.de/subscribe
Digitale Chat-Souveränität: Fünf Slack-Alternativen Der Mensch ist bekanntlich ein kom-
munikatives Wesen. Schon Paul Watzla-
wick stellte ganz treffend fest, dass man

Flurfunk nicht nicht kommunizieren kann. Das gilt


sowohl für das private als auch für das
berufliche Umfeld: Viele Branchen leben
davon, dass die handelnden Akteure
regen Informationsaustausch betreiben.
Der Chat fungiert in vielen Unternehmen als zentrales Kom- Vielerorts ist dafür ein klassischer Chat
das Mittel der Wahl. Chat-Systeme sind
munikationsmedium, doch scheuen viele Firmen davor zu- flexibler als die Kommunikation per E-
Mail, ermöglichen wie diese aber den-
rück, sensible Inhalte über gehostete Angebote wie Slack zu noch asynchrone Kommunikation. Will
man sich mal eben mit der Kollegin oder
teilen. Doch es gibt Alternativen für jene, die lieber die volle dem Kollegen austauschen, verkürzt eine
Chat-Nachricht oft den Dienstweg mehr
Kontrolle über die eigenen Daten behalten. Martin Loschwitz als eine formale Mail. Das gilt umso mehr,
als längst nicht jeder dem Inbox-Zero-
Prinzip folgt und Mails vielerorts auf dem
großen Haufen der abzuarbeitenden
Anfragen landen. Das ist im Chat anders:
Hier poppt üblicherweise sofort eine Be-
nachrichtigung beim Kommunikations-
partner auf, und das Gegenüber weiß,
dass Klärungsbedarf besteht.
Wie jede Technik in der IT ist auch der
Chat Gegenstand teilweise massiver Ver-
änderungen. Als der Autor dieser Zeilen

58 www.linux-magazin.de 12.2023
Slack-Alternativen Sysadmin

© Gabriel Engel
1 IRC, der Klassiker unter den Chat-Systemen, ist merklich in die Jahre gekommen und
taugt heute nur noch für grundlegende Aufgaben.

Nachrichten geschieht. Ende-zu-Ende- der Tatsache, dass die bunten Bildchen


Verschlüsselung hat Slack bis heute nicht schon längst normaler Teil der Internet-
implementiert. Man muss also davon Folklore sind.
ausgehen, dass den Slack-Besitzern die Dieser Artikel stellt fünf Alternativen
seine IT-Karriere startete, war das Mittel Inhalte sämtlicher Nachrichten im Klar- zu Slack vor, die mit ganz eigenen Funk-
der Wahl vielerorts das klassische IRC- text zur Verfügung stehen. tionen und Features auf Kundenfang
Protokoll (Internet Relay Chat), das in Wer aus eben diesen Gründen Slack gehen. Ein zentrales Kriterium bei der
seiner ursprünglichen Form aus den nicht nutzen möchte, steht allerdings Auswahl der Lösungen im Vergleich war
1990er-Jahren stammt und sich seither vor der Herausforderung, eine adäquate dabei, dass der jeweilige Dienst unter
nur wenig verändert hat. Auch heute Alternative zu finden. Der Anspruch, mit einer freien Lizenz steht und sich lokal –
hat IRC noch eine treue Fan-Basis, den dem Ersatz nicht schlechter zu fahren also On-Premises – betreiben lässt.
Ton geben aber längst andere und viel als mit Slack, impliziert das viel mehr, als
mächtigere Lösungen an. Zu so etwas manchem Administrator am Anfang sei-
Chat-Styles
wie der Go-to-Lösung hat sich in den ner Überlegungen klar ist. Eine zentrale
letzten Jahren Slack entwickelt. Der in Anforderung an einen zentralen Chat- Bevor die Probanden sich der Reihe nach
der Cloud gehostete Dienst bietet alle Dienst besteht heute vielerorts etwa da- vorstellen, sei allerdings noch ein kurzer
Features früherer Chat-Generationen, rin, dass er sich mit einem Verzeichnis Absatz über Chat-Systeme im Allgemei-
wartet aber auch mit vielseitigen Inte- zum Benutzermanagement verbinden nen eingeschoben. Wer das Internet
grationen in etliche externe Systeme auf. lässt, üblicherweise also LDAP oder Active noch zu IRC-Zeiten kennengelernt hat,
Es gibt eine reiche Auswahl an Clients für Directory. Nur so lässt sich – anders als denkt das Thema Chat üblicherweise in
verschiedene Plattformen, die Einstiegs- bei einer lokalen Benutzerverwaltung in- Dimensionen von Kanälen (Channels)
hürden liegen tief. nerhalb des Diensts – sicherstellen, dass und privaten Konversationen (Queries).
Nicht wenigen IT-Verantwortlichen ist neue Kolleginnen und Kollegen automa- Dieses Kommunikationsmuster findet
allerdings nicht sonderlich wohl bei dem tisch Zugriff auf den Dienst erhalten und sich auch heute noch bei vielen freien
Gedanken, Slack zu benutzen: Über den Ausscheidende ihren Zugriff verlieren. Alternativen zu Diensten wie Slack.
internen Chat eines Unternehmens tau- Auch an die Nachrichten selbst stellen In den letzten Jahren wurde aber auch
© Kasper Ravlo / 123RF.com

schen die Mitarbeitenden oft sensible In- Anwender heute höhere Anforderungen ein anderes Chat-Prinzip populär, das
formationen aus, manchmal sogar solche als früher. Dass ein Chat für die Kommu- sich von etablierten Ansätzen insbeson-
von enormer wirtschaftlicher Bedeutung nikation etwa animierte GIFs und Emojis dere durch die Sortierung und die Dar-
für die Firma. Da Slack in der Cloud ge- unterstützen muss, ergibt sich aus den stellung von Themen unterscheidet. Hier
hostet ist, haben Firmen aber keine Kon- veränderten Kommunikationsgewohn- stehen nicht Kanäle und Queries im Vor-
trolle darüber, was mit den übermittelten heiten des letzten Jahrzehnts sowie aus dergrund, auch wenn diese Funktionen

12.2023 www.linux-magazin.de 59
Sysadmin Slack-Alternativen

in der Regel noch unterstützt werden. ԏ Der Oldie: IRC darf eintreten. Etliche IRC-Server bieten
Stattdessen denken zahlreiche moderne zwar die Möglichkeit, Verbindungen ein-
Chat-Systeme Kommunikation ähnlich Das gute alte IRC-Protokoll darf auch in zuschränken, beispielsweise anhand der
wie Mails in Form von Threads. Wenn einer Chat-Übersicht des Jahres 2023 IP-Adresse des Gegenübers. Bis auf die
es Kanäle gibt, kommunizieren die Teil- nicht fehlen. Noch immer finden sich et- Ebene einzelner Anwender hinunter funk-
nehmer darin nicht wild drauflos wie zum liche gut gepflegte IRC-Server, die sich in tioniert das aber nicht. Wer verhindern
Beispiel bei IRC. Stattdessen starten sie kürzester Zeit auf einer handelsüblichen will, dass sich ganz bestimmte Clients
unter der Haube von spezifischen Themen Linux-Maschine installieren lassen. Zudem mit einem Server nach IRC-Standard ver-
oder Fragestellungen entweder in öffent- gibt es nur für wenige Chat-Protokolle so binden, muss serverseitig entsprechend
lichen Kanälen oder privaten Konversa- viele gut erprobte Clients für praktisch grobschlächtig die erlaubten IP-Adress-
tionen einen Kommunikationsfaden, auf 1
jedes Betriebssystem wie für IRC . Wer räume konfigurieren.
den andere Nutzer dann antworten. Die lediglich für ein kleines Unternehmen Wie schon gesagt: IRC eignet sich aus
grafische Darstellung erfolgt dabei ge- oder ein einzelnes Team einen Weg zur heutiger Sicht nur dann als Slack-Alter-
trennt nach Themen. schnellen Kommunikation benötigt, der native, wenn es ausschließlich um die
Zulip, einer der von uns untersuchten kommt mit einem flugs aufgesetzten IRC- bloße Kommunikation zwischen Mitar-
Probanden, fokussiert sich auf diese Art Server schnell ans Ziel. beiterinnen und Mitarbeitern ohne die
der Darstellung, die speziell im Entwick- Das kann aber nicht darüber hinweg- Einhaltung der meisten üblichen Com-
ler-Kontext manchen Vorteil gegenüber täuschen, dass IRC altersbedingt etliche pliance-Regeln geht. Im Gegenzug erhält
der klassischen Darstellung bietet. So Schwächen in verschiedenen Bereichen der Administrator einen stabilen und
lassen sich hier Fragen zu einzelnen Bug- aufweist. Bis heute unterstützt es offiziell leicht zu administrierenden Dienst, der
Reports oder Commits in Chat-Fäden keinerlei Transportverschlüsselung von nur sehr wenige Ressourcen benötigt
packen. Auf diese Weise können mehrere Daten. Der Transfer zwischen Server und und sich schnell aufsetzen lässt.
Konversationen in öffentlichen Kanälen Client erfolgt also stets im Klartext. Das
zu verschiedenen Themen geordnet und ist kein Problem, wenn der IRC-Server
ԏ Rocket.Chat
trotzdem gleichzeitig stattfinden. sich sowieso nur aus dem lokalen Netz
Auf welche Weise ein Chat-System der Firma erreichen lässt. Verbinden sich Wer mit dem IRC-Feature-Set nicht aus-
einzelne Gesprächsthemen darstellt die Teilnehmer dagegen etwa per VPN kommt, landet auf der Suche nach Alter-
und ordnet, das ist für die Nutzer der mit dem Firmennetz, resultiert daraus ein nativen früher oder später mit einiger
Lösung von entscheidender Bedeu- handfestes Compliance-Problem. Wahrscheinlichkeit bei Rocket.Chat :2
tung. Bei der Auswahl des passenden Hinzu kommt, dass IRC jegliches Be- Das hat sich zu einer Art Standardalter-
Werkzeugs für das eigene Unterneh- nutzermanagement fehlt. Wer sich mit native zu Slack entwickelt, und das aus
men darf man eben diesen Faktor also einem Server verbindet, gibt den Spitz- guten Gründen: Das Programm kommt
nicht unterschätzen. namen an, den er nutzen möchte, und komplett quelloffen daher und unter-
stützt heute die meisten Features, die
auch Slack anbietet. Die Geschichte des
Werkzeugs ist dabei durchaus bewegt:
Bis 2015 war Rocket.Chat als Teil von
Konecty keine freie Lösung. Mittlerweile
steht der gesamte Quelltext unter der
MIT-Lizenz.
Ähnlich wie Slack bietet Rocket.Chat
eine Vielzahl von darstellbaren Formaten
für die Kommunikation. Das umfasst so-
wohl klassische Kanäle und Queries als
auch die bereits beschriebene Thread-
Ansicht. Über Themes lässt sich die grafi-
sche Erscheinung von Rocket.Chat indi-
viduell anpassen. Hier kommt eine Spezi-
alität zum Tragen, die auch bei anderen
Lösungen noch Thema sein wird: Das
Chat-Protokoll, das Rocket.Chat nutzt, ist
© Rocket.Chat

zwar grundsätzlich frei und offen. Auf


dem Markt gibt es aber nur einen Client,
der sich auf den verschiedenen Betriebs-
systemen Rocket nutzen lässt. Dessen
2 Rocket.Chat ist der umfassendste freie Slack-Ersatz und überzeugt Entwickler haben also letztlich die volle
durch ein sinnvolles Feature-Set und eine ordentliche Lizenzpolitik. Kontrolle über die Optik der Lösung.

60 www.linux-magazin.de 12.2023
Slack-Alternativen Sysadmin

Selbst, wenn man das Werkzeug in ande-


re Instant Messenger wie Franz integriert,
zeigen die stets nur die Webansicht des
Chats an, wie man sie auch per HTTP-In-
terface erreicht. Vorbildlich: Die gesamte
grafische Oberfläche von Rocket.Chat ist
in über 30 Sprachen übersetzt. Weil Ad-
mins längst nicht davon ausgehen kön-
nen, dass in Unternehmen jeder Kom-
munikationsteilnehmer des Englischen
mächtig ist, stellt das einen echten Mehr-
wert dar. Jeder Nutzer kann die Sprache

© Mattermost
des eigenen Clients nach seinen persön-
lichen Bedürfnissen einstellen.
Darüber hinaus liest sich die Feature-
Liste von Rocket.Chat wie die einer ak-
tuellen und umfangreichen Chat-Lösung. 3 Mattermost richtet sich vorrangig an Entwickler, zählt aber eher zur Riege der Free-
So bietet die Software wahlweise eine mium-Anwendungen: Notwendige Enterprise-Features gibt es nur gegen Geld.
eigene Nutzerverwaltung oder lässt sich
an LDAP- oder SAML-Verzeichnisse sowie
OAuth anbinden. Single-Sign-on unter- ein wie Markdown oder Mehrzeilencode. merzielle Version des Diensts an. Sie ent-
stützt das Produkt ebenso. Zur Auswahl Mathematische Formeln lassen sich mit- hält noch ausgefeiltere Optionen, um
steht dabei das Login über die Accounts tels einer TexMath-Implementierung um- die Optik an die CI der Firma anzupassen,
von Facebook, Github, Google, Microsoft setzen, animierte GIFs zeigt der Client kennt eine Agent-Struktur zum Beispiel
und etlichen weiteren Anbietern. Hinzu klaglos an, und in Sachen Emojis unter- für die Integration von Rocket.Chat in
kommen verschiedene Kommunikations- stützt Rocket.Chat sämtliche modernen Endanwender-Support-Systeme, liefert
funktionen, die über bloßen Chat weit Zeichensätze. Nachrichten lassen sich an vorgefertigte Skalierbarkeitskonzepte
hinausgehen. So bietet Rocket.Chat zum Ort und Stelle mit Reaktionen und auch für Rocket.Chat und offeriert auch kom-
Beispiel Audio- oder Videotelefonate. mit einer Bewertung nach dem Sterne- merziellen Support. Allerdings stehen die
Das ist zwar kein neues Feature, doch wer Prinzip versehen. Hilfreich ist häufig das zu dieser Lösung gehörenden Kompo-
den Chat nutzt, freut sich im Bedarfsfall Off-the-Record-Messaging: Dabei kom- nenten nicht unter einer freien Lizenz.
über die nahtlose Integration. munizieren zwei Teilnehmer via Slack Wer auf der Suche nach einer simplen
Besonders in Sachen Textkommunika- Ende-zu-Ende-verschlüsselt. Wer drin- Chat-Lösung für ein kleines oder ein mit-
tion leistet Rocket.Chat sich dabei keinen genden Bedarf verspürt, Dampf über den telgroßes Unternehmen ist, wird diese
Lapsus. Neben etlichen Formatierungs- Chef abzulassen, liegt hier also richtig. Features aber ohnehin kaum benötigen
möglichkeiten für Nachrichten bettet der Zusätzlich zu seinem Open-Source- und dürfte mit der selbst gehosteten
Rocket-Client Videos ebenso problemlos Produkt bietet Rocket.Chat eine kom- Open-Source-Variante gut zurechtkom-

AUSGABE VERPASST?
Alle Artikel
6,99 € zzgl. Versandkosten

des Jahrgangs 2022


(HTML + PDF) auf DVD
Mehr Infos unter:
shop.linux-magazin.de/jahres-dvd/2022

Bequem online Telefon: 0911 / 993 990 98 E-Mail: computec@dpv.de


bestellen: shop.linux-magazin.de/jahres-dvd/2022
Sysadmin Slack-Alternativen

zu einem bestimmten Grad trifft das so-


gar zu, doch richten sich Mattermost und
Rocket.Chat an etwas unterschiedliche
Zielgruppen. Mattermost betrachtet sich
eher als Werkzeug, mittels dessen Ent-
wickler untereinander kommunizieren
können. Zahlreiche Integrationen mit ty-
pischen Entwicklungswerkzeugen wie
Github legen davon Zeugnis ab. Rocket.
Chat sieht sich eher als zentrale Kommu-
nikationsschnittstelle im ganzen Unter-
nehmen. Der Fokus auf Entwicklung ist
entsprechend etwas weniger ausgeprägt.
Die wichtigsten Unterschiede beim
Produktzuschnitt waren ja schon Thema;
so ist die Community-Edition von Rocket.
© Zulip

Chat im Wesentlichen freie Software,


während sich Mattermost eher als „Free-
4 Zulip sortiert Beiträge im Thread-Style und hebt sich so von den anderen Probanden ab. mium“-Software betiteln ließe: Features,
die die meisten Unternehmen brauchen,
gibt es nur gegen Geld.
men. Die liefert Rocket mittlerweile be- anders vor als Rocket.Chat. Aus der Sicht
vorzugt in Form eines Containers aus, eines Administrators ist das eher unan-
ԏ Zulip
der sich schnell und automatisiert in Be- genehm, denn Mattermost verlangt Geld
trieb nehmen lässt. für viele Funktionen, die es bei Rocket. Einen vollkommen anderen Ansatz ver-
Übrigens: Wer sich vom geliebten IRC- Chat zumindest grundsätzlich auch in 4
folgt Zulip . Zwar gibt es von der selbst
Protokoll nicht ganz verabschieden kann der freien Version gibt. Beispiele dafür gehosteten Version von Zulip ebenfalls
oder möchte, findet in Rocket.Chat eine sind die Anbindung an SSO-Dienste und eine Enterprise-Variante. Sie enthält aber
Vielzahl sogenannter Slash-Kommandos die umfassende Möglichkeit, die Optik nur Features, die für spezifische Einsatz-
– also Befehlen, die man mit / einleitet per Theme zu verändern. zwecke in – meist sehr großen – Unter-
und die stark an IRC erinnern. Bei den Grundfunktionen leistet sich nehmen benötigt werden, etwa in Sachen
auch Mattermost sich keine Patzer, ge- Compliance. Die Community-Edition von
ԏ Mattermost rade nicht in der freien und kostenlosen Zulip dagegen enthält ähnlich wie Rocket.
Community-Edition. Kanäle und private Chat alles für die Verwendung im Firmen-
Hinsichtlich des perfekten Open-Source- Konversationen, flankiert von nativen alltag Relevante und Nötige. Dazu ge-
Ersatzes für Slack rüttelt schon seit eini- Clients für alle gängigen Betriebssysteme, hören ein firmenspezifisches Branding,
ger Zeit Mattermost 3 heftig am Thron gehören also ebenso zum Lieferumfang SSO und LDAP-Integration sowie umfas-
von Rocket.Chat. Wie sein Konkurrent wie die Möglichkeit, Threads zu starten sende Chat-Features für private und öf-
steht Mattermost unter einer freien Li- und die unbegrenzte Suche in Inhalten fentliche Nachrichten.
zenz, einzelne Teile des Quelltexts unter- der Vergangenheit. Das ist ein wohltu- Dennoch unterscheidet sich Zulip von
liegen allerdings verschiedenen Lizen- ender Unterschied etwa zu Slack, wo die den bisher besprochenen Probanden in
zen. Grundsätzlich steht dabei die GNU Suche ja sogar zeitlich und von der Men- einem zentralen Punkt: Es ordnet sämt-
AGPL v3.0 im Vordergrund, für einzelne ge her begrenzt ist, wenn man nicht den liche Konversationen nach Threads. Frei
Codeteile gilt hingegen die Apache-Li- Geldbeutel öffnet. Video- und Audioan- Schnauze drauflos schreiben ist in Zulip
zenz oder eine kommerzielle Lizenz, falls rufe sowie Gruppentelefonate gehören also nicht möglich. Daran ändert sich
man kompilierte Versionen von Matter- bei Mattermost ebenfalls zum Lieferum- auch nichts, wenn man statt über die
most unter bestimmten Bedingungen fang. Die gut dokumentierte Installation standardisierte Weboberfläche über einen
weitergeben möchte. gestaltet sich einfach, selbst wenn man der Clients für die gängigen Betriebssys-
Das dürfte für die meisten Administra- als Administrator bislang mit Mattermost teme auf den Dienst zugreift.
toren jedoch ohnehin nicht im Vorder- noch nicht zu tun hatte. Zugegeben, diese Form der Konversa-
grund stehen, denn Mattermost verteilt Administratoren, die Rocket.Chat und tion muss man mögen. Besonders, wer
fertige Binaries der Software in paketier- Mattermost vergleichen, stellt sich mög- eher IRC gewohnt ist, muss sich mit Zulip
ter und containerisierter Form. Viel wich- licherweise die Frage, worin der Haupt- vermutlich erst anfreunden. Im Gegen-
tiger: Mattermost geht beim Zuschnitt unterschied zwischen den beiden Lösun- zug erhalten Admins aber eine relativ
seiner Produkte – also der freien Variante gen liegt. Aus der Ferne könnte nämlich leicht zu installierende und einfach zu
sowie der ebenfalls verfügbaren Enter- durchaus der Eindruck entstehen, die betreibende Chat-Software, die es mit
prise- und Professional-Versionen – ganz Lösungen ähnelten sich weitgehend. Bis Rocket.Chat in vielerlei Hinsicht absolut

62 www.linux-magazin.de 12.2023
Slack-Alternativen Sysadmin

aufnehmen kann. Zu den Feature-High-


lights von Zulip zählen eine umfassende
Integration in Dienste wie Nagios, Github
oder Jenkins und ein Kommandozeilen-
Client für den Zugriff auf den Chat. Chat-
Statistiken, eine Suche über sämtliche
jemals durchgelaufenen Nachrichten so-
wie Audio- und Videotelefonate machen
in Zulip ebenfalls Lust auf mehr.
Mannigfaltig konfigurierbare Notifica-

© Wikipedia / VulcanSphere
tions für eingehende Nachrichten runden
das Angebot ab und zeigen: Zulip ist
vor allem individuell anpassbar. Das mag
manchem Administrator gerade ohne
einschlägige Zulip-Erfahrung anfangs
fast zu viel sein, doch keine Sorge: An das
Handling einer Zulip-Instanz gewöhnt
man sich schnell. 5 Element ist ein Matrix-Client und hilft dabei, ein Jabber-ähnliches Chat-Netz mit
Kanälen und Unterstützung für neueste Technologien zu nutzen.
ԏ Matrix
Dezentrales Messaging, das im Prinzip selbst. Wer ihn nicht ausrollen will, be- daher, und Matrix bietet ein paar der
eher funktioniert wie eine E-Mail und sorgt sich stattdessen einen Account bei Grundfunktionen, die IRC aus heutiger
Nachrichten über ein beliebig erweiter- einer bestehenden Instanz. Die eigent- Sicht so schmerzlich vermissen lässt.
bares Netzwerk austauscht – da klingelt liche Teilnahme an Chats erfordert dann
es beim einen oder anderen Administra- im Anschluss einen Client. Es gibt einige
Fazit
tor möglicherweise. Richtig: Wer schon Matrix-Clients für die gängigen Betriebs-
einmal mit Jabber und mit dem Betrieb systeme; Element 5 und Cinny gehören Wer Slack nicht nutzen will oder darf, der
einer Jabber-Instanz zu tun hatte, dem zu den beliebteren und sind beide für alle findet in der Welt der freien Software viele
kommen diese Konzepte durchaus ver- gängigen Desktop-OS verfügbar. Ist ein gute Alternativen. An der Spitze rangiert
traut vor. Mit dieser Vorerfahrung ver- entsprechender Client installiert und mit dabei Rocket.Chat als universellste Lö-
steht man auch die Ideen und Prinzipien dem angelegten Account einer Matrix- sung mit dem größten Feature-Set ohne
hinter Matrix schnell, denn das verspricht Instanz verbunden, kann die Schnatterei Münzeinwurf. Mattermost ist ebenfalls
im Grunde eine ähnliche Funktionalität. losgehen. Wer nicht schreiben will, kann auf der Höhe der Zeit, versteckt aber das
Dabei ist hier die korrekte Nutzung über Matrix komplementär auch Video- eine oder andere Feature zu viel hinter
zentraler Begrifflichkeiten durchaus und Audioanrufe tätigen. der Bezahlschranke. IRC taugt als Oldie
wichtig, denn hinter Matrix verbirgt sich Sehr angenehm dabei: Matrix spielt heute nur noch für einfache Einsatzszena-
im Chat-Kontext keine Chat-Software, ebenso wie die meisten verfügbaren rien, hat in Form von Matrix aber einen
sondern nur ein Protokoll. Es beschreibt Clients keine Spielchen in Sachen frei, würdigen Quasi-Nachfolger dezentraler
das Austauschformat für Nachrichten nicht ganz frei oder Freemium. Alle re- Bauart gefunden. Zulip schließlich richtet
zwischen Server und Client sowie zwi- levanten Funktionen der verfügbaren sich durch seine Darstellung von Nach-
schen Server und Server und implemen- Clients stehen ausnahmslos ohne finan- richten an eine sehr spezifische Benutzer-
tiert dabei einige zentrale Punkte, die zielle Gegenleistung zur Verfügung. Als gruppe von zumeist Administratoren. Es
bei Jabber fehlen. Dazu gehören instanz- Wermutstropfen kommen die mangelnde performt in der Kategorie Thread Views
übergreifende Chat-Räume für mehrere Bekanntheit und Verbreitung von Matrix aber beinahe so gut, dass man es außer
Personen. Matrix selbst ist als Stiftung ins Spiel. Beide Faktoren spielen aber Konkurrenz starten lassen müsste. Ad-
organisiert und verspricht, den entspre- kaum eine Rolle, will man lediglich ein ministratoren, die heute ein Chat-System
chenden Standard stets frei zu halten. kleineres Unternehmen mit einem Chat- einführen wollen, stehen damit also vor
Technisch präsentiert sich das Matrix- System versorgen. Zudem lassen sich der Qual der Wahl und sollten die Lösun-
Protokoll auf der Höhe der Zeit: Details Matrix-Server mittels Plugins um be- gen im Vorfeld auf jeden Fall gründlich
wie Verschlüsselung bezieht es in seine stimmte Funktionen erweitern; LDAP- evaluieren. (jcb) Ӻ
Vorgaben selbstverständlich ein. Unterstützung etwa fehlt ab Werk, man
Damit das Matrix-Netzwerk funktio- kann sie per Plugin aber nachrüsten.
niert, bedarf es dezentraler Server. Nicht Stil und Einfachheit von Matrix erin- Weitere Infos und
jeder Nutzer muss jedoch einen eigenen nern schon fast ein wenig an das gute, interessante Links
Matrix-Server betreiben. Den Code für alte IRC, jedoch kommen die gängigen www.lm-online.de/qr/49907
den Server liefert das Matrix-Projekt Matrix-Clients im moderneren Gewand

12.2023 www.linux-magazin.de 63
M ia
oss Med
V rtos
© Vi a / 123RF.com
om
Streit um die Autodaten

Sicherheitsalbtraum?
Die Ampelkoalition will bei der Nutzung von Autodaten ein gesetzt wurden. Den Angaben zufolge
erarbeitet das Verkehrsministerium einen
Treuhändermodell umsetzen, doch ein Expertenkreis schlägt Gesetzesentwurf, der „eine Ermächti-
gungsgrundlage für die Aufgaben des
ein anderes Konzept vor. Friedhelm Greis Datentreuhänders für den Bereich Kraft-
fahrzeuge vorsieht“.
Es dürfte sinnvoll sein, eine EU-Verord-
„Moderne Autos sind ein Datenschutz- zu Fahrzeugdaten. Grund dafür: Auf EU- nung abzuwarten, denn nach deren In-
albtraum.“ Um diese Einschätzung 1 der Ebene soll nach langer Verzögerung eine krafttreten könnte sie auch in Deutsch-
Mozilla-Stiftung zu ändern, könnte eine sektorspezifische Ergänzung der Daten- land gelten. Das hängt nach Angaben des
gesetzliche Regelung zur Nutzung von verordnung (Data Act) vorgelegt werden. Verbraucherzentrale Bundesverbands
Autodaten hilfreich sein. Nun scheint Be- Auf Anfrage teilte das Bundesverkehrs- davon ab, „inwieweit der europäische
wegung in die Pläne der Ampel zu kom- ministerium mit, der vom Wirtschaftsmi- Gesetzgeber mit der Änderung der Ty-
men, eine laut Koalitionsvertrag „wettbe- nisterium eröffnete Prozess diene einer pengenehmigungsverordnung eine Voll-
werbsneutrale Nutzung“ dieser Autoda- Vorabpositionierung angesichts einer harmonisierung vornehmen wird“.
ten zu ermöglichen. Doch die Einschät- möglichen EU-Regulierung zu Fahrzeug- Dazu schreibt das Ministerium: „Tech-
zung eines Expertengremiums wider- daten, -funktionen und -ressourcen und nisch und rechtlich gibt es konkurrieren-
spricht dem von SPD, Grünen und FDP finde derzeit auf Arbeitsebene statt. de Ideen und Konzepte, um den Zugang
bislang präferierten Treuhändermodell. zu Daten in Kraftfahrzeugen zu regeln.
Vor Kurzem startete das Bundesminis- Die Bundesregierung wird die Vorschläge
Gesetzesentwurf in Arbeit
terium für Wirtschaft und Klimaschutz ei- der EU-Kommission daher prüfen und
nen Abstimmungsprozess innerhalb der Das Thema Autodaten gehört zu den Pro- sich positionieren, sobald diese vorliegen,
Bundesregierung. Dabei geht es um die jekten der Ampel, die zwar im Koalitions- auch mit Blick auf das im Koalitionsver-
Vorbereitung einer sektoralen Regelung vertrag stehen, jedoch noch nicht um- trag angestrebte Treuhändermodell.“

64 www.linux-magazin.de 12.2023
Recht Forum

Nur noch wenig Zeit ter zusammengeführt werden (wie zum Kommunikation zwischen dem Fahrzeug
Beispiel im Adaxo-Konzept des VDA be- und dem Server des Fahrzeugherstellers
Das Problem an dem anstehenden Kom- schrieben)“. Das Thema Datentreuhänder sicher“, schreibt der VDA in seinem aus-
missionsvorschlag: Bis zur Wahl des neu- taucht hingegen nicht auf. führlichen Adaxo-Konzept 1.
en Europaparlaments dauert es nur noch Zentrale Aspekte des Papiers sind
rund ein halbes Jahr. Es dürfte schwierig durchaus begrüßenswert. So heißt es:
Kontrolle über Datencockpit
werden, bis dahin eine komplette Ver- „Grundvoraussetzung für die Nutzung
ordnung durch Parlament, Ministerrat der Daten ist die Zustimmung und Frei- Im Gegensatz zur Autoindustrie forderte
und die Trilogverhandlungen zu bringen. gabe durch den Nutzenden des Fahr- der Verbraucherzentrale Bundesverband
Über die Frage, wie man einen solchen zeugs und die DSGVO-konforme Nut- (VZBV) in einem Positionspapier 1 vom
Datentreuhänder konkret umsetzen zung der Daten.“ Nachvollziehbar ist November 2022 die Einrichtung eines
könnte, zeigten sich in einer Diskussion auch die Feststellung: „Ein genereller sogenannten Mobilitätsdatenwächters.
vor einem Jahr große Unterschiede zwi- direkter Remote-Zugriff auf die im Fahr- Über diese Autorisierungsstelle, eine
schen Ministerium und Autoindustrie. zeug verfügbaren Daten, Funktionen Art Datencockpit im Auto oder auf dem
Als Alternative zum Treuhändermodell und Ressourcen ist kritisch in Bezug auf Smartphone (Personal Information Ma-
entwickelte der Verband der Automobil- Fahrzeugsicherheit, Datenschutz, Haf- nagement Systems, PIMS), sollen die Fah-
industrie (VdA) schon 2017 das Nevada- tung, Zertifizierungsfähigkeit und Cyber rer mehr Kontrolle über ihre Fahrdaten
Konzept, das inzwischen durch das Ada- Security. Zudem ist auch der Schutz von erhalten. „Es würde transparent ersicht-
xo-Konzept ersetzt wurde. Adaxo steht geistigem Eigentum und Geschäftsge- lich werden, warum Unternehmen be-
als Abkürzung für „automotive data ac- heimnissen zu berücksichtigen.“ stimmte Informationen benötigen, wie
cess, extended and open“ und bedeutet Nach Ansicht des Expertenkreises, dem lange sie gespeichert werden und welche
so viel wie erweiterter und offener Fahr- 13 Mitglieder aus Automobilindustrie, Dritte darauf zugreifen dürfen“, schreiben
zeugdatenzugriff. Forschung und Gewerkschaften ange- die Verbraucherschützer.
Für die Autoindustrie ist laut VDA- hören, ist lediglich „ein direkter Fahr- Die Daten selbst sollten über einen
Geschäftsführer Marcus Bollig entschei- zeugzugriff im abgesicherten Zustand, Datentreuhänder ausgeleitet und dann
dend, „dass der erste direkte Zugriff auf wie er beispielsweise im Service- und an Hersteller, an private Anbieter oder
die Daten im Fahrzeug über diese eine, Wartungsfall durch einen zertifizierten staatliche Organe weitergegeben werden,
wohl definierte Schnittstelle zu einem Service-Anbieter erfolgt, … für freigege- sofern der Fahrer das autorisiert. Über
Hersteller erfolgt. Danach kann über bene Funktionen unkritisch“. Das bedeu- die Schnittstelle des Datentreuhänders
einen Konnektor, zum Beispiel zu einem tet jedoch, dass Fahrzeuge nur in weni- könnten auch Daten in das Fahrzeug flie-
neutralen Server, dort die Treuhänder- gen Situationen ihre Daten übermitteln ßen, beispielsweise für Updates. Aller-
funktion implementiert werden“. könnten und ist für viele Anwendungen dings planen Hersteller inzwischen auch
Ein Ministeriumsvertreter widersprach des vernetzten Fahrens unzureichend. die Steuerung von Autos aus der Ferne.
dem jedoch entschieden. „Dieser eine
Schritt ist uns zu viel“, sagte Unterabtei-
Funktionale Sicherheit Umsetzung offen
lungsleiter Andreas Krüger und fügte
hinzu: „Das, glaube ich, wird nicht wahr Der Expertenkreis schlägt daher vor, den Wie die Bundesregierung den Koalitions-
werden. Wenn wir das Backend durch Datenzugriff vom Anwendungsfall ab- vertrag umsetzen wird, ist noch nicht ab-
den Treuhänder ersetzen, dann, denke hängig zu machen. Dabei könne man sehbar. Schwerer als der aktuelle Daten-
ich, werden wir uns einig.“ Doch nach sich an den Sicherheitsanforderungen schutzalbtraum würde der Sicherheits-
einer solchen Einigung sieht es derzeit der Autoindustrie nach ASIL (Automotive albtraum wiegen, wenn Fahrzeuge über
nicht gerade aus. Safety Integrity Level 1) orientieren. „Nur die neue Schnittstelle zu den Datentreu-
auf Daten, Funktionen und Ressourcen händern gehackt würden oder durch ei-
der Stufe QM (Non-ASIL) sollte für Dritte nen Ausfall der Systeme der Datenfluss
Handlungsempfehlungen
ein Zugriff möglich sein. Die Rückwir- komplett ausfiele. (uba) Ӻ
So legte der von der Bundesregierung kungsfreiheit des Zugriffs auf andere
gegründete Expertenkreis Transforma- Funktionen (egal welcher ASIL-Stufe) und
tion 1 der Automobilwirtschaft im Sep- die Cyber-Security des Fahrzeuges müs- Dateien zum Artikel
tember 2023 „Handlungsempfehlungen sen jederzeit sichergestellt werden.“ herunterladen unter
zur Erhöhung der Datennutzung und für Eine Option zum Zugriff auf diese Da- www.lm-online.de/dl/48770
die Umsetzung einer möglichen sekto- ten, Funktionen und Ressourcen bietet
ralen Regulierung“ vor. Das neunseitige das sogenannte Extended-Vehicle-Ver-
Papier 1 spricht sich für den Vorschlag fahren (ExVe) auf das Backend des Auto-
der Autoindustrie aus: „Datenangebot herstellers oder auf eine abgesicherte In- Weitere Infos und
und Datennachfrage sollten durch ein Vehicle-Sandbox. „Die ExVe-Web-Schnitt- interessante Links
’Structured Forum’ mit Datenhalter, Da- stelle ist bei allen modernen Fahrzeugen www.lm-online.de/qr/48770
tennachfrager und Datenservice-Anbie- verfügbar und stellt so die gesicherte

12.2023 www.linux-magazin.de 65
Forum Bücher

Bücher über Kanban und Business-Agilität dem Visualisieren, also den Klebezetteln.
Daneben geht sie auf fünf weitere, allge-
mein gültige Praktiken ein: Limitieren der

Tux liest parallelen Arbeit, Managen des Arbeits-


flusses, Explizitmachen der Regeln, Imple-
mentieren von Feedback-Schleifen sowie
gemeinsames Verbessern und experimen-
telles Weiterentwickeln.
Ein Buch zeigt, wie effektives und effizientes Strukturieren Zudem leistet Bartel den Lesern Start-
hilfe für eigene Kanban-Projekte. Von
klappt, das zweite wirft agile Blicke auf unterschiedliche der Warnung vor der Teamfalle über eine
Checkliste, einen Musterfahrplan und
Unternehmensebenen. Carina Schipper unterschiedliche Rollen bis hin zu Bei-
spielen aus der Praxis gibt sie das nötige
Rüstzeug an die Hand, um die Methode
erfolgreich umzusetzen. Dabei wird die
Viele bunte Klebezettel Autorin nicht müde, zu betonen, dass
Kanban mehr ist als nur ein Klebezettel-
Unter dem Begriff Kanban können sich dung oder Problemlösung etwa passt Board. Bleibt zu sagen, dass das Buch
viele etwas vorstellen – Mindestens as- Kaban kaum, da „im kreativen Chaos (im sich nicht nur wegen der übersichtlichen
soziieren sie damit Bürowände, gespickt tatsächlichen Sinne)“ kein wiederkehren- Grafiken und der kohärenten Gliederung
mit Zetteln in bunten Farben. Um die der Prozess oder Arbeitsfluss existiert. gut als Einführung wie auch Nachschlage-
häufig richtigen, aber doch mitunter dif- Daraufhin bespricht die Autorin zu- werk für Fortgeschrittene eignet. Ӻ
fusen Definitionen weiß Susanne Bartel. nächst Grundlagen. Dabei pocht sie voll-
In ihrem Buch räumt sie mit dem Begriff kommen zu Recht auf die vier, stets gül-
auf. Verständlich und strukturiert, wie es tigen Kanban-Prinzipien. Das mechani-
Susanne Bartel
einer Methode zum Organisieren, Steu- sche Umsetzen der bis zu 150 Praktiken
ern und Optimieren von Arbeit gebührt, ohne Verständnis der darunter liegenden Kanban – kurz & gut
erklärt sie, was Kanban leisten kann. Prinzipien und Werte führt laut Bartel O’Reilly 2023
Außerdem widmet sie sich explizit den zu „blutleeren“, wenig nützlichen Imple- 326 Seiten, 20 Euro
Grenzen der Instrumente. Zur Ideenfin- mentierungen. Der Praxisteil startet mit ISBN: 978-3-96009-178-3

Vom Flugverkehr und Unternehmen


Klaus Leopold und Siegfried Kaltenecker springen können. Das erweist sich als Flight-Level-Modells. Mit ihrem Buch ver-
bestechen in ihrem Buch durch Zweier- wertvolle Navigationshilfe, da das Buch mitteln die Autoren ihren Lesern pro-
lei: Beim bloßen Durchblättern der Sei- gerade anfangs viele, vermutlich be- fundes Wissen zu Business-Agilität und
ten bleibt das Auge an den aufwendig kannte Punkte wie das Agile Manifest wie sich diese in Unternehmen etablie-
gestalteten Grafiken und farbig hinter- oder das Klären der Ist-Situation wieder- ren lässt. Das im Titel angesprochene
legten Infokästen hängen. Daneben ist holt und vertieft. Daraufhin konzentriert „führen“ richtet den Inhalt zwar konkret
es ihnen gelungen, mit der Flughöhen- es sich auf die koordinative (2) und stra- an Führungsetagen oder Personen in
metapher ein eingängiges Bespiel dafür tegische Ebene (3). Die operative Ebene leitenden Positionen, braucht allerdings
zu finden, was Agilität in Unternehmen spart es bewusst aus und verweist da- keinesfalls abzuschrecken – sich ein voll-
bedeutet. Die Autoren setzen sich dazu rauf, dass es zu agilen Methoden und Co. ständiges Bild der eigenen (Unterneh-
mit drei Flight Levels oder Ebenen aus- in Teams mehr als genug Literatur gebe. mens-)Landschaft aus unterschiedlichen
einander: mit der strategischen, der ko- Nach dem Design der Flight Levels 2 Flughöhen zu machen, ergibt in jeder
ordinativen und der operativen Ebene. und 3, also der Abbildung, dem Betrei- Position Sinn. Ӻ
Im Vorwort klingt ein wesentlicher ben und der Verbesserung konkreter Ar-
Aspekt der Thematik deutlich an: Es ist beitssysteme wendet sich das Buch „dem
komplex, will heißen, Business-Agilität Herzstück des Flight-Level-Modells“ zu:
K. Leopold, S. Kaltenecker
umfasst eine ganze Reihe verschiedener der Systemarchitektur. Dazu beleuchtet
Perspektiven und Ansatzpunkte. Dazu es die vorhandenen Systeme sowie de- Flight Levels
schlagen die Autoren den Lesern exem- ren Zusammenhänge und Wechselwir- dpunkt.verlag 2023
plarisch vor, wie sie im Buch je nach Vor- kungen. Letztlich beziehen die Autoren 304 Seiten, 40 Euro
kenntnisstand an die passende Stelle sich auf den konkreten Betrieb eines ISBN: 978-3-86490-971-9

66 www.linux-magazin.de 12.2023
IT-Konferenz für Software-
technologie, Künstliche Intelligenz,
DevOps, IT-Security, Datenbanken,
Agile und IT-Management

Jetzt anmelden! 11. –14.12.2023


www.it-tage.org
GUTSCHEINCODE ITT23-13LM Frankfurt am Main
© tevarak11 / 123RF.com
KI-Serie, Teil 4: Clustering

Gruppenbildung
Clustering-Verfahren aus dem Bereich des unüberwachten Eine weitere wichtige Aufgabe im un-
überwachten Lernen ist die Dimensions-
Lernens sortieren Daten in Gruppen und erlauben so eine reduktion. Bei dieser Aufgabe versucht
der Algorithmus, die Anzahl der Daten-
nützliche Segmentierung komplexer Datensätze. merkmale (die Dimensionen) zu redu-
zieren, während er gleichzeitig so viele
Mark Vogelsberger relevante Information wie möglich er-
hält. Das hilft, die Daten zu vereinfachen
und gleichzeitig die nützlichen Informa-
Beim überwachten Lernen sollen die aufgaben des unüberwachten Lernens: tionen beizubehalten.
Algorithmen einen funktionalen Zusam- das Clustering, die Dimensionsreduktion Man kann unüberwachtes Lernen da-
menhang zwischen Features und Labels und die Anomalieerkennung. rüber hinaus auch zur Anomalieerken-
erkennen. Diesen Zusammenhang er- Die Cluster-Bildung stellt beim un- nung einsetzen. In diesem Fall versucht
lernen die Algorithmen anhand von Trai- überwachten Lernen eine häufige Auf- der Algorithmus, abnormes Verhalten
ningsdaten mithilfe statistischer Modelle. gabe dar. Dabei ordnet ein Algorithmus oder Ausreißer in den Daten zu identifi-
Beim unüberwachten Lernen dagegen ähnliche Datenpunkte aufgrund ihrer zieren, ohne dass explizite Informationen
liegen nur Features vor, die keine Labels Merkmale oder Eigenschaften in Cluster über diese Ausreißer vorhanden sind.
besitzen. Hier kann und soll also kein oder Gruppen ein. Dieses Clustering hilft Das spielt in vielen Anwendungsfällen
funktionaler Zusammenhang gefunden dabei, Muster sowie Strukturen in den eine Rolle, beispielsweise bei der Erken-
werden. Stattdessen hat das unüber- Daten zu erkennen. Ein gutes Beispiel nung von betrügerischen Transaktionen
wachte Lernen je nach Anwendungs- aus dem E-Commerce-Bereich wäre die in Finanzdaten oder bei der Identifizie-
bereich verschiedene Aufgaben. Grund- Gruppierung von Kunden in Segmente rung von fehlerhaften Produkten in der
sätzlich gibt es drei verschiedene Haupt- auf Basis ihres Kaufverhaltens. Qualitätskontrolle.

68 www.linux-magazin.de 12.2023
KI-Serie Know-how

Arten des Clusterings


Eine der wichtigsten Aufgaben des un-
überwachten Lernens liegt im Erkennen
von Mustern und Strukturen in Daten
anhand von Clustering-Verfahren. Dazu
kommen verschiedene Arten von Cluste-
ring-Algorithmen zum Einsatz. Am wei-
Initialisierung Zuordnung Neue Cluster-Zentren
testen verbreitet sind dabei zentroid-
basiertes, dichtebasiertes und hierarchie-
basiertes Clustering. 1 Die ersten Schritte beim k-Means-Clustering, der letzte wird im Bedarfsfall wiederholt.
Zentroidbasiertes Clustering ist eines
der bekanntesten Verfahren. Man ver-
wendet dabei Zentroiden (Cluster-Zen- Hier ist S=(C,U) die Menge der Partitionen Zentrum den Schwerpunkt (Durchschnitt)
tren), um Cluster zu bilden. Dazu platziert C mit einzelnen Partitionen ci und der aller Datenpunkte in jedem Cluster bil-
man mehrere Zentroiden in den Daten- Menge der Zentren der Partitionen U mit det. Danach ordnet der Algorithmus die
punkten und ordnet jeden Datenpunkt einzelnen Zentren μi. Der Abstand wird Datenpunkte den nun neuen Zentren
dem nächstgelegenen Zentroiden zu. über die euklidische Entfernung ||…|| nach Maßgabe der Nähe zum Zentrum
Dies ist die am häufigsten verwendete gemessen. Ziel des Clustering-Algorith- erneut zu, wobei einzelne Punkte ihre
Methode des Clusterings und eignet sich mus ist es, die Menge S zu finden, die Cluster wechseln können. Nach der wie-
für viele Anwendungen. die Doppelsumme minimiert. Eine Idee, derholten Berechnung der Zentren wird
Beim dichtebasierten Clustering grup- dieses Problem zu lösen, besteht darin, jedes Mal geprüft, ob die Rechnung kon-
piert man Datenpunkte, indem man im alle möglichen Partitionen und Zentren vergiert. Das ist der Fall, wenn sich die
Feature-Raum Bereiche mit hoher Daten- auszuprobieren. Das Problem ist aller- Cluster-Zentren im Vergleich zur vorheri-
punktdichte sucht, die von Bereichen mit dings die Zeitkomplexität dieses Ansat- gen Iteration nicht ändern. In diesem Fall
niedriger Dichte umgeben sind. zes. Sie beläuft sich auf: ist der k-Means-Algorithmus zum Ende
Ein hierarchiebasiertes Clustering er- gekommen. Liegt noch keine Konvergenz
folgt normalerweise auf hierarchisch vor, erfolgt eine nächste Iteration, bis das
strukturierten Daten. Der Algorithmus Konvergenzkriterium erfüllt ist.
erstellt dazu eine Baumstruktur von Clus- Dieses Verhalten hat zur Folge, dass man Da k-Means-Clustering lediglich ein lo-
tern, was die Hierarchie von oben nach den Algorithmus nicht für größere Da- kales Minimum des Clustering Objective
unten organisiert. tenmengen verwenden kann, da er mit auffinden kann, hängt das Ergebnis des
Jede dieser Cluster-Arten hat ihre eige- steigendem N immer langsamer wird. Algorithmus von den zufälligen Cluster-
nen Vor- und Nachteile und eignet sich Aus diesem Grund gibt es andere Techni- Zentren während der Initialisierung ab.
für verschiedene Arten von Daten und ken, die das Cluster Objective zwar nicht Normalerweise initialisiert man k-Means-
Anwendungen. Die Wahl des richtigen global minimieren, aber ein lokales Mini- Clustering deshalb mit verschiedenen
Clustering-Algorithmus hängt von den mum dieser Zielfunktion finden können. Clustering-Zentren, bis man eine mög-
spezifischen Anforderungen und der Be- Das genügt oft für die Anwendung. lichst gute Zuordnung der Datenpunkte
schaffenheit der Daten ab. erzielt. Die Qualität des Clusterings lässt
sich anhand des Clustering Objective be-
K-Means-Clustering
urteilen. Die Zeitkomplexität dieses Ver-
Zentroidbasiertes Clustering
Eines dieser Verfahren ist die k-Means- fahrens steigt linear mit den Datenpunk-
Das zentroidbasierte Clustering-Problem Clustering-Methode. In einem ersten ten und liegt bei O(T k N d), wobei T die
lässt sich im Grunde genommen auf recht Schritt1 bestimmt man dabei zunächst maximale Anzahl von Iterationen be-
einfache Weise formulieren: Gegeben k Cluster-Zentren. Dabei können zufällig zeichnet, bis der Algorithmus konvergiert.
seien N Datenpunkte in einem D-dimen- ausgewählte Datenpunkte als Cluster- Das bedeutet, dass sich das k-Means-
sionalen Feature-Raum. Die Datenpunkte Zentren dienen. Anschließend legt man Verfahren auch auf große Datensätze
sollen durch das Clustering in k Gruppen die Zugehörigkeit aller Datenpunkte zu effizient anwenden lässt.
(Partitionen) eingeteilt werden. Dabei je einem der Cluster fest. Dazu weist der Den Hyperparameter k, die Zahl der
gilt es, die Aufteilung in die Gruppen Algorithmus jeden Datenpunkt demjeni- Cluster, muss der Anwender des k-Means-
derart zu wählen, dass das Clustering gen Cluster zu, dessen Zentrum ihm am Clustering-Verfahrens selbst bestimmen.
Objective minimiert wird. Diese Zielfunk- nächsten liegt. Das erfolgt in der Regel Dafür eignet sich das sogenannte Elbow-
tion erreicht ein Minimum, wenn die ge- durch die Berechnung des euklidischen 2
Verfahren . Dabei lässt man den k-
bildeten Gruppen (also die Cluster) maxi- Abstands zwischen jedem Datenpunkt Means-Algorithmus mit verschiedenen k-
mal homogen sind: und den Zentren. Werten laufen. Für jeden k-Wert wird der
Anschließend werden neue Cluster- Wert des Clustering Objective bestimmt.
Zentren derart berechnet, dass das neue Trägt man nun das Clustering Objective

12.2023 www.linux-magazin.de 69
Know-how KI-Serie

liche Ergebnisse liefern. gefasst sind. Das ergibt eine Hierarchie


K-Means++ führt des- von Clustern, deren grafische Darstel-
halb eine verbesserte lung man als Dendrogramm bezeichnet.
Initialisierung ein, die Dabei handelt es sich um ein Baumdia-
die Wahrscheinlichkeit gramm, das die Schritt-für-Schritt-Fusion
Cluster-Objective

schlechter Ausgangs- der Cluster zeigt.


zentren reduziert. Dazu Abbildung 3 zeigt ein Beispiel für die
Ellbow-Point initialisiert es die Clus- sechs Datenpunkte A bis F. Zuerst fasst
ter-Zentren so, dass sie der Algorithmus die Datenpunkte A und
weiter auseinander B sowie E und F zusammen, danach fu-
liegen, sodass sie in der sioniert er den Cluster (E,F) mit dem Da-
Regel schneller konver- tenpunkt D zu einem Cluster. Der auf
gieren. diese Weise entstandene Cluster wird im
Zunächst wählt K- folgenden Schritt mit dem Datenpunkt C
Anzahl der Cluster K
Means++ zufällig einen in einem neuen Cluster zusammenge-
Datenpunkt als erstes führt. In einem letzten Schritt fließt die-
2 Das Elbow-Verfahren bestimmt die optimale Cluster-Anzahl. Cluster-Zentrum aus. ser Cluster dann mit dem Cluster (A,B)
Danach berechnet der zusammen. Auf diese Weise entsteht das
Algorithmus für jeden abgebildete Dendrogramm.
als Funktion von k auf, so nimmt es zu- Datenpunkt dessen Abstand zum nächst- Am oberen Ende des Dendrogramms
nächst ab und verläuft dann ab einem gelegenen, zuvor gewählten Zentrum. sind sämtliche Datenpunkte in einem
bestimmten k-Wert flach. Die Form des Anschließend wählt er das nächste Zen- Cluster zusammengefasst. Man schnei-
Graphen erinnert an die Form eines El- trum so aus den Datenpunkten aus, dass det das Dendrogramm dann in einer be-
lenbogens, daher auch der Name. Der der Punkt mit dem größten Abstand zum stimmten Höhe ab, um die gewünschte
Wert am Knickpunkt des Ellenbogens nächsten Zentrum am wahrscheinlichsten Anzahl von Clustern zu erhalten. Dieser
stellt den k-Wert dar, der die optimale als Nächstes an die Reihe kommt. Diese Schritt wird häufig als Schwellwertfest-
Anzahl Cluster angibt. Schritte wiederholen sich, bis alle k-Zen- legung oder als Cut-off-Punkt bezeich-
tren ausgewählt sind. Diese Art der Initia- net. Die gewünschte Anzahl von Clustern
lisierung vermeidet die Schwachstellen und die Einteilung in Cluster ergibt sich
K-Means++
des k-Means-Verfahrens. aus der Festsetzung eines entsprechen-
Das K-Means-Verfahren liefert oft schon den Schwellwerts.
brauchbare Clustering-Ergebnisse, hat
Hierarchiebasiertes Clustern
allerdings auch einige Schwächen. Um
Fazit
diese zu adressieren, wurde k-Means++ Das hierarchiebasierte Clustering kommt
als Verbesserung des klassischen Algo- ohne Cluster-Zentren aus. Es beruht da- Clustering-Verfahren sind mächtige und
rithmus entwickelt. rauf, naheliegende Datenpunkte in einem vielseitige Werkzeuge zur Identifizierung
Der ursprüngliche k-Means-Algorith- Cluster zusammenzufassen. Im ersten von Mustern in Daten. Sie kommen bei
mus hängt unter anderem stark von Schritt betrachtet es dazu jeden Daten- der Kundensegmentierung im Marketing,
der zufälligen Auswahl der anfänglichen punkt als eigenen Cluster. Danach iden- der medizinischen Diagnose, der Text-
Cluster-Zentren ab. Je nachdem, welche tifiziert es die beiden Cluster, deren Zen- analyse, der Optimierung von Finanz-
Punkte man als anfängliche Zentren aus- tren den geringsten Abstand zueinander portfolios, der Verkehrsflussanalyse und
wählt, kann der Algorithmus in verschie- haben, und fasst sie zusammen. Diese zahlreichen anderen Anwendungen zum
dene lokale Minima des Clustering Ob- Schritte werden wiederholt, bis alle Da- Einsatz. Zum Beispiel helfen sie Unter-
jective konvergieren und unterschied- tenpunkte zu einem Cluster zusammen- nehmen, Kundenpräferenzen besser zu
verstehen, unterstützen Ärzte bei der
Diagnosestellung, helfen News-Aggrega-
toren bei der Organisation von Inhalten
B oder erleichtern beispielsweise Investo-
D
A
ren die Portfolioverwaltung.
Clustering trägt dazu bei, versteckte
F
Strukturen in Daten zu enthüllen und auf
E A B C D E F
dieser Grundlage dann datengesteuerte
C Entscheidungen zu treffen. Zentroidba-
Dendogramm
sierte Clustering-Verfahren gehören da-
bei zu den bekanntesten und am häu-
3 Das Dendrogramm entsteht beim hierarchischen Clustern aus der Gruppierung der figsten eingesetzten Methoden des Clus-
jeweils zueinander nächstgelegenen Datenpunkte. terings. (jcb/jlu) Ӻ

70 www.linux-magazin.de 12.2023
ANZEIGE

JETZT NEU heft 02/2023


PCGH-Sonder .
für nur € 8,99
jetzt am Kiosk n n en ten
erhalten Abo
Im Webshop en ei.
fr
r versandkost
das Heft soga version
ch als Digital
Erhältlich au 99.
p) für nur € 7,
(PDF oder Ap
e/sohe
www.pcgh.d

QR-Code scannen
und hinsurfen!

Jetzt am Kiosk erhältlich oder einfach


online bestellen unter: www.pcgh.de/sohe
Sie erlaubt entfernten Angreifern eine
Brute-Force-Attacke, um gültige Kombi-
nationen von Benutzername und Pass-
wort zu identifizieren. Außerdem lässt
sich darüber eine nicht autorisierte SSL-
VPN-Sitzung ohne Client mit einem au-
thentifizierten entfernten Angreifer eta-
blieren. Außerdem verwendet Akira Re-
mote-Zugriffs-Tools wie RustDesk, um
Zugang zu bestimmten Netzwerken zu
erhalten. Die inzwischen geschlossene
Sicherheitslücke entsteht aufgrund einer
unsachgemäßen Trennung der Authenti-
fizierung, Autorisierung und Abrechnung
(AAA) zwischen der Funktion für den
Remote-Zugriff auf das VPN und den
HTTPS-Management- sowie Site-to-Site-

© Jan Mikš / 123RF.com


VPN-Funktionen.
Bis Mitte September 2023 hatte Akira
bereits mehr als 100 Opfer ins Visier ge-
nommen, hauptsächlich in den USA und
in Großbritannien. Die Attacken verteilten
sich über eine breite Palette von Branchen,
Ransomware Akira nun auch auf Linux aktiv darunter Bildung, Finanzen, Immobilien,
Fertigung und Beratung. Die Angreifer
wenden verschiedene Erpressungstech-

Top-Erpresser niken an. Sie verfügen über eine eigene,


separate Leak-Website im Darknet. Sie
listet die Opfer auf und offeriert die ge-
stohlenen Daten, falls ein Opfer den Lö-
segeldforderungen nicht nachkommt.
Seit März macht die Ransomware Akira mit immer neuen An- Eine Notiz informiert die Opfer darüber,
wie sie über ein Tor-basiertes Portal über
griffen Schlagzeilen. Im August kam sie unter die Top 10. Die das Lösegeld verhandeln können.
Avast veröffentlichte bereits vor einer
neueste Variante befällt nun auch Linux. Mark Vogelsberger Weile ein kostenloses Entschlüsselungs-
werkzeug für Akira. Allerdings war es
lediglich gegen frühere Versionen der
Ransomware verschlüsselt in der Regel zeuge über das Darknet oder das Inter- Ransomware wirksam. Akira wird kon-
Dateien oder sperrt den gesamten Zu- net an Interessenten. So können auch tinuierlich weiterentwickelt und erhält
griff auf das System. Anschließend zeigt Personen ohne umfangreiche technische in jeder Kampagne neue Funktionen
sie eine Lösegeldforderung an: Das Opfer Kenntnisse oder Fähigkeiten Ransom- und Fähigkeiten. In jüngerer Zeit begann
muss einen bestimmten Geldbetrag be- ware-Angriffe ausführen, indem sie auf die Schadsoftware, ihre Reichweite über
zahlen, um den Key für das Entschlüsseln vorgefertigte Software und Dienstleis- Windows hinaus auf Linux-basierte Sys-
der Daten zu erhalten oder den Zugriff tungen zurückgreifen. teme auszudehnen, und nahm zudem
zurückzuerlangen. Die Forderungen vari- Akira nutzt eine Schwachstelle in der virtuelle Maschinen in Vmware ESXi ins
ieren und sollen meist in Kryptowährung Cisco Adaptive Security Appliance (ASA) Visier. Sicherheitsforscher vermuten, dass
bezahlt werden, um die Anonymität der und Cisco Firepower Threat Defense aus. es sich bei der Ransomware Megazord
Angreifer zu wahren. Opfer werden häu- Es attackiert Cisco-ASA-VPNs ohne Multi- um eine neue Version oder um ein Re-
fig mit der Drohung unter Druck gesetzt, faktorauthentifizierung 1. Ciscos VPN- branding von Akira handelt, da sie die
dass ihre Daten ohne die Zahlung dauer- Lösungen kommen in vielen Branchen Infrastruktur von Akira nutzt. (jcb) Ӻ
haft verloren sind. zum Einsatz, um Remote-Mitarbeitern
Wie andere aktuelle Ransomware ba- eine sichere, verschlüsselte Datenüber-
siert auch Akira auf dem Ransomware- tragung ins Unternehmensnetzwerk zu Weitere Infos und
as-a-Service-Modell. Dabei vermieten ermöglichen. Cisco gab kürzlich bekannt, interessante Links
oder verkaufen Cyberkriminelle Ransom- dass es tatsächlich eine Sicherheitslücke www.lm-online.de/qr/48772
ware-Dienste und entsprechende Werk- (CVE-2023-20269) in ASA-Geräten gibt.

72 www.linux-magazin.de 12.2023
WISSEN, WIE DER
HASE LÄUFT!

■ Top-News auf einen Blick

■ Job-Angebote für Linux-Profis

■ Tipps für die Praxis

Jetzt kostenfrei anmelden für den


COMMUNITY NEWSLETTER!
www.linux-community.de/newsletter
n Chow
anto
ha
Shush
©S C uvo / 123RF.
dhury shuvo com
3 F.com

Im Überblick: Neuerungen in Java 21 oder Incubator-Status. Dazu kommen


noch gut 80 kleinere Änderungen und
diverse Bugfixes. Daneben entfielen eini-

Nächste Runde ge nicht mehr gewünschte Features aus


der Sprache, der Laufzeitbibliothek und
den mitgelieferten Tools. Beim Thema
LTS sieht es dagegen weniger rosig aus –
mehr dazu später.
Java 21 enthält eine Reihe interessanter Features, darunter
Projekt Amber
diverse Änderungen an der Sprache und den verfügbaren
Das Projekt Amber 1 arbeitet an Funk-
Implementierungen. Allerdings hat Oracle auch die Zahlung tionen, die Java produktiver machen sol-
len. Weniger Codevolumen und bessere
wichtiger Unterhaltsleistungen eingestellt. Carsten Zerbst Unterstützung durch den Compiler ste-
hen dabei ganz oben auf der Wunschliste.
Sowohl die Record Patterns (JEP 440) als
auch das Pattern Matching for Switch
Java 21 erschien Mitte September 2023 (JEP 441) stammen aus diesem Projekt
pünktlich im mittlerweile eingespielten und sind nun allgemein verfügbar.
Halbjahrestakt. Das Release 1 wurde seit Wie Listing 1 demonstriert, dürfen
Jahren als erste wesentliche Version nach Sie Records jetzt einfach mit einem in-
Der Autor Java 11 und 17 angekündigt. Außerdem stanceof identifizieren, wobei Sie das
sollte es dank Langzeit-Supports (LTS) Casten und Zuweisen zu einer Variable
Carsten Zerbst erstellt Software für Ingeni-
zur neuen Standardversion avancieren. dann gleich miterledigen. Das funktio-
eure, vom einfachen Konverter bis hin zur In Sachen Neuerungen hat Java 21 ei- niert nicht nur für die einfachen Werte
unternehmenskritischen Integrationslösung. niges zu bieten: Allein 15 JDK Enhance- eines Records (Zeile 5), sondern auch für
Sein Team sucht für nächstes Jahr Verstär- ment Proposals (JEPs) stehen in den geschachtelte Records (Zeile 7).
kung in Hamburg und bietet interessante Release Notes 1. Acht davon sind zur Darüber hinaus erweiterten die Ent-
allgemeinen Verwendung gedacht, die wickler das Switch-Statement. Ähnlich
Themen für Abschlussarbeiten an.
anderen befinden sich noch im Preview- wie bei instanceof gibt es hier eine

74 www.linux-magazin.de 12.2023
Java 21 Programmieren

und Codeanalyse, dass die Variable selbst Einfacher Java-Code lässt sich schon län-
nicht zum Einsatz kommt. Das funktio- ger ohne Kompilieren direkt auf der Kom-
niert für Switches (Zeile 22) sowie für Try- mandozeile starten, erwartet jedoch ein
Catch-Statements (Zeile 31). gültiges Java-Main-Program mit einer
Klasse und der statischen Main-Methode.
Dank der Unnamed Classes and Instance
Previews
Main Methods (JEP 445) können Sie da-
Darüber hinaus befinden sich zwei wei- rauf verzichten: Das Beispiel aus Listing 2
tere interessante Features im Preview- ohne Klasse lässt sich nun direkt starten.
Status. Die Scoped Values (JEP 446), in Wegen des Preview-Status müssen Sie
Java 20 vorgestellt, sollen als bessere Al- 1
das Feature extra freischalten .
ternative zu den Thread-Locale-Variablen
dienen. Gegenüber der ursprünglichen
Interpoliert
Beschreibung 1 flossen keine wesent-
lichen Änderungen ein, wahrscheinlich Mit Java 21 haben die Entwickler unter-
werden die Scoped Values in Java 22 all- schiedliche Modifikationen an den mit-
gemein zur Verwendung bereitstehen. gelieferten Bibliotheken vorgenommen.

Listing 1: Record Patterns, Pattern Matching, Unnamed Patterns


01 public static record Eintrag(int klasse, String schüler) {}
02 public static record Seite(Date tag, Eintrag e1, Eintrag e2) {};
03 Object o = [...]
04 if (o instanceof Eintrag(int k, String s)) {
05 System.out.printf("Eintrag für %s aus Klasse %d %n",s,k);
automatische Zuweisung zur Variablen 06 } else if (o instanceof Seite(Date d, Eintrag a, Eintrag b)) {
(Zeile 19) sowie die Möglichkeit zusätz- 07 System.out.printf("Seite vom %tD: %s, %s %n",d, a.schüler,
licher Nebenbedingungen mit dem b.schüler);
When-Statement (Zeile 14). Das hätte 08 } else if (o instanceof String s) {
man auf den ersten Blick genauso mit If-
09 System.out.printf("String %s %n", s);
Statements erledigen können, das neue
10 }
Switch-Statement verspricht allerdings
deutlich mehr Sicherheit. Dabei überprüft 11 switch(o) {
der Compiler, ob der Code alle vorkom- 12 // Typ und Nebenbedingungen
menden Möglichkeiten mit einem case 13 case Seite(var d, var a, var b)
abdeckt. Falls nicht, meldet der Compiler 14 when 10 == a.klasse -> {
einen Fehler, und Sie müssen den Code 15 System.out.printf("Untersekunda %s\n",a.schüler, b.schüler);
mit weiteren Case-Statements oder einem
16 }
generischen default erweitern.
17 // Typ
Wie schon erwähnt, haben weitere Än-
derungen aus dem Projekt Amber Einzug 18 case Seite(var d, var a, var b) -> {
in Java 21 gehalten. Da die Features den 19 System.out.printf("Klasse %d %s\n",a.klasse, a.schüler);
Preview-Status bisher nicht verlassen ha- 20 }
ben, müssen Sie beim Kompilieren und 21 // Preview: Unnamed Variable
zur Laufzeit die Option --enable-preview 22 case Eintrag(_, var schüler) -> {
angeben. Bei den Unnamed Patterns and
23 System.out.printf("Schüler%s\n",schüler);
Variables (JEP 443) geht es um die Fälle, in
24 }
© Shushanto Chowdhury shuvo / 123RF.com

denen Sie Variablen aus Syntaxgründen


aufnehmen müssen, ohne sie inhaltlich 25 default: {
zu nutzen. Die statische Codeanalyse in 26 System.out.printf("Anderes %s\n",o);
der IDE oder Werkzeuge wie Sonar me- 27 }
ckern dann legitim, aber unnötigerweise 28 }
über ungenutzte Variablen. Dank der Syn- 29 try {
taxerweiterung können Sie solche Vari-
30 [...]
ablen in Zukunft mit einem Unterstrich
31 } catch (IllegalArgumentException _) {}
(_) schreiben. Damit wissen Compiler

12.2023 www.linux-magazin.de 75
Programmieren Java 21

sors lassen sich eigene erzeugen. Für die


Formatierung mit deutschen Tages- oder
Monatsnamen wurde in Zeile 6 ein FMT-
Processor mit deutscher Locale erzeugt.
In Zeile 8 schließt sich ein mehrzeiliges
Template mit spezieller Datumsformatie-
rung an. Die Ausgabe von Listing 3 se-
2
hen Sie in Abbildung .
Das Implementieren eigener Proces-
sors funktioniert anders als mit der Syn-
1 Ausführen des Java-Codes aus Listing 2 auf der Kommandozeile. tax $". Ein Anwendungsfall dafür besteht
im Kapseln von Sonderzeichen in Vari-
ablenwerten, die bei Sprachen wie JSON
Eine echte Überraschung sind die im aus, aber auch deutlich mächtiger. Als oder XML nicht erlaubt sind. Ein JSON-
Preview-Status befindlichen String Tem- Templates dienen Strings, die neben Processor kann auf diese Weise das dop-
plates (JEP 430). Mit ihnen soll Java zu konstantem Text Variablennamen ent- pelte Anführungszeichen (") in einem
anderen Sprachen wie C#, Javascript halten. Letztere ersetzt ein Processor beim Variablenwert durch das äquivalente \"
oder Python aufschließen und einen ein- Auswerten durch die Variablenwerte. ersetzen, ein Processor für SQL-State-
fachen und leserlichen Weg zur String- Zur Kennzeichnung der entsprechenden ments kann das Einfügen von aktivem
Interpolation bieten. Zum Erstellen von Variablennamen dienen \{- und }-Paare Code unterbinden und so weiter.
Strings auf Basis von Variablen gab es (Listing 3, Zeile 8). Statt des fest in der Zu guter Letzt erlaubt das Interface
in Java bisher lediglich die String Conca- Sprachsyntax verankerten Dollar-Zei- StringTemplate.Processor sogar die
tenation, seit Java 1.5 das Format-State- chens zur Deklaration der String-Inter- Definition anderer Rückgabewerte als
ment und separate Bibliotheken wie polation hängen Sie das Template ein- Strings. So legt Zeile 10ff von Listing 3
Freemarker 1. Ein Äquivalent zu der oft fach zur Auswertung an ein Processor- einen Processor fest, der erst einen JSON-
mit $"..." geschriebenen String-Inter- Objekt. Im einfachsten Fall nutzen Sie formatierten String erzeugt und diesen
polation fehlte hingegen. einen der mitgelieferten Processors wie im nächsten Schritt direkt als JSON-Ob-
Die im aktuellen Release gewählte Lö- STR oder FMT, die als statische Variable jekt zurückgibt. Das Kapseln der Anfüh-
sung fällt im Vergleich zu den Ansätzen bereitstehen (Listing 3, Zeile 1). rungszeichen und Parsen des Strings fin-
in anderen Sprachen etwas aufwendiger Der Processor STR ersetzt die Variablen- den im Processor statt.
namen durch den String-Wert der Variab- Die Sequenced Collections (JEP 431)
len. Der etwas aufwendigere Processor erleichtern die Arbeit mit Kollektionen.
Listing 2: Code ohne Klassen FMT unterstützt darüber hinaus Formatie- Wie Sie in Listing 4 sehen, können Sie
void main() {
rungshinweise wie die Anzahl von Dezi- ohne weitere Klimmzüge ein Element
malstellen oder die Angabe, welche Teile vom Anfang und vom Ende her adres-
System.err.println("Klassenlos");
eines Datumsobjekts genutzt werden sieren. Dazu haben die Entwickler das
} sollen. Neben den eingebauten Proces- spezielle Interface SequencedCollection

Listing 3: String Templates


01 import static java.lang.StringTemplate.STR; 14 String roh = value != null ? value.toString()
02 var name = "Erika Mustermann"; : "null";
03 var tag = new java.util.Date(); 15 String gekapselt= roh.replace("\"", "\\\"");
04 16 ersatz.add(gekapselt);
05 System.out.println(STR."Hallo \{name}"); 17 }
06 var fp = FormatProcessor.create(Locale.GERMAN); 18 var result = StringTemplate.interpolate(
07 System.out.println(fp.""" template.fragments(), ersatz);
08 \{name}, am %tA\{tag} %te\{tag} %tB\{tag} 19 return new JSONObject(result);
09 """); 20 };
10 StringTemplate.Processor<JSONObject, 21 System.out.println(JSON."""
JSONException> JSON = template -> { 22 {
11 String quote = "\""; 23 "name": "\{name}",
12 List<Object> ersatz = new ArrayList<>(); 24 }
13 for (Object value : template.values()) { 25 """);

76 www.linux-magazin.de 12.2023
Java 21 Programmieren

geschaffen, das Lists sowie Sets und Maps Neben diesen allgemein anwendbaren Vector API (JEP 448) zur Vektorberech-
mit Sortierreihenfolge unterstützen. Änderungen gibt es mit Java 21 zusätz- nung direkt auf der CPU. Sie hat mit dem
Ohne JEP kamen kleinere Änderungen liche Bibliothekserweiterungen, die nur sechsten Incubator-Status fast transzen-
im String-Umfeld aus. Das neue indexOf wenige Programmierer direkt nutzen dente Höhen erreicht. Allerdings scheite-
in Zeile 7 sucht nur von Position 6 bis 19 dürften. Dazu gehört unter anderem die re ich nicht als einziger daran, damit eine
nach dem String von2 und reicht den für neuere Verschlüsselungsverfahren bessere Performance als mit normalem
Index der Fundstelle zurück; Zeile 8 er- wie elliptische Kurven notwendige Key Java-Code zu erreichen. Den kompletten
ledigt dasselbe für einzelne Buchstaben. Encapsulation Mechanism API (JEP 452). Beispielcode für diese API und alle ande-
Bei splitWithDelimeters lässt sich die Sie läuft in der Regel unter der Haube ren finden Sie auf Github 1.
maximale Anzahl der Teile angeben: In eines HTTPS-Aufrufs.
Zeile 9 bekommen Sie die Teile abc und ; Die weiteren Änderungen befinden
Unterhaltsleistungen
sowie den ungeteilten Rest cde;efg. sich nun schon länger in der Mache und
scheinen gefühlt nie zu einem Ende zu In sämtlichen Roadmaps war Java 21
kommen. Die Foreign Function & Me- bisher als LTS-Edition gekennzeichnet.
Verwoben
mory API (JEP 442) soll erlauben, C-Bib- Dementsprechend galt es für die meis-
Das Project Loom 1 kümmert sich seit liotheken aus Java heraus zu verwenden, ten Anwender als diejenige Java-Ver-
Java 19 um die Programmierung neben- befindet sich aber inzwischen bereits in sion, die sie nach 11 und 17 produktiv
läufiger Prozesse. Mit Java 21 haben die der dritten Preview. einsetzen wollten. Die kleine Fußnote
Virtual Threads (JEP 444) offiziell Einzug Noch weiter entfernt von einer tat- LTS/non-LTS designation and dates are
gehalten. Für Programmierer verhalten sächlichen Implementierung als die subject to change 1 ging dabei nahezu
sie sich nicht anders als herkömmliche Foreign Function & Memory API ist die unter. Umso größer war die Überra-
Threads, werden jedoch nicht eins zu
eins auf einen Thread im Betriebssystem
abgebildet. Stattdessen verteilt die JVM
die Last auf mehrere Threads im Betriebs-
system, was weniger Ressourcen erfor-
dert. Gerade Webserver mit vielen kurz-
lebigen Threads können auf diese Weise
mehr Anfragen beantworten.
Die damit zusammenhängende Struc-
tured Concurrency (JEP 453) verharrt
allerdings noch im Preview-Status. Dank
ihr lassen sich mehrere parallel ablaufen-
de Unterprozesse so bündeln, dass Sie
die gesamte Gruppe bezüglich der Er-
gebnis- oder Fehlerbehandlung einfach 2 Die Ausgabe der ausgefüllten Templates aus Listing 3.
zusammenfassen können.

PROBELESEN OHNE RISIKO


T
TESTEN
N SIE
E JET
JETZT 3 AUSGABEN FÜR 19 € Abo-Vorteile
OHNE DVD 15 €

33%
Rabatt
CHEIN
-GUTS
5 EURO
Günstiger als am Kiosk
Versandkostenfrei
bequem per Post
SICHERN SIE SICH JETZT IHR GESCHENK! Pünktlich und aktuell
Keine Ausgabe verpassen
EIN AMAZON-GUTSCHEIN ÜBER 5,00 €

Telefon:
Telefon: 0911
0911 / 993
993 990
990 98
98 E
E-Mail: computec@dpv de
Mail: computec@dpv.de
Einfach bequem online bestellen: shop.linuxuser.de
Programmieren Java 21

muss (zumindest momentan) kosten-


pflichtigen LTS-Support für Java 21 bei
Azul oder Oracle einkaufen. Idealerweise
würde zum Beispiel Adoptium Java 21
pflegen und als LTS für die nächsten zwei
bis drei Jahre kostenlos bereitstellen.

Fazit
Rein von der technischen Seite her be-
trachtet ist Java 21 sehr attraktiv: Viele
Änderungen machen das Programmie-
ren sicherer und schneller oder stellen
komplett neue Möglichkeiten bereit. Al-
lerdings erweist Oracles Politikänderung
in Sachen Langzeit-Support dem Erfolg
von Java einen echten Bärendienst. So-
lange es keine kostenlose Java-Version
mit LTS-Stempel gibt, werden wohl viele
Anwender und Bibliotheken schlicht an
Java 17 festhalten.
3 JavaFX-Anwendungen können auch im Webbrowser laufen. Anders sieht es zum Beispiel bei der
von Gluon gepflegten Oberflächen-
bibliothek JavaFX aus. Das moderne UI-
schung, als Nicolai Parlog im Juli 2023 in bereit. Pünktlich zu Java 21 entschied Toolkit erschien zeitgleich mit Java 21
seinem Blog den Artikel „Java 21 is no LTS das Unternehmen nun, diese erweiterte als JavaFX 21, Gluon bietet jedoch im
Version“ postete 1. Unterhaltsleistung für den Sprössling Gegensatz zu Oracle kostenfreien LTS-
Darin weist der bei Oracle angestellte nicht mehr zu finanzieren. Support an 1. JavaFX 21 selbst bringt
Java Developer Advocate noch einmal Sieht man sich in der Presse und im knapp 90 Verbesserungen und Bugfixes
darauf hin, dass sich eine LTS-Version Internet um, stellt man fest, dass diese mit sich. Linux-spezifisch ist der finale
technisch nicht von einer anderen Java- Nachricht noch nicht bei allen angekom- Schritt auf GTK3 vollzogen. Die alte
Version wie 19 oder 20 unterscheidet. men ist, denn Java 21 wird immer noch GTK2-Bibliothek wird nicht länger unter-
Laut Parlog kommt es darauf an, ob je- als LTS bezeichnet. Allerdings existiert stützt – 25 Jahre nach dem Erscheinen
mand die fragliche Version über mehrere anders als für Java 11 und Java 17 keine von GTK3 sicherlich kein übereilter Schritt.
Jahre pflegt und dabei Sicherheitslücken Möglichkeit, eine kostenlose JVM mit dem JavaFX selbst zeigt sich ähnlich mäch-
und Bugs beseitigt. Das eigentliche Java- LTS-Stempel herunterzuladen. tig wie die Alternative von Microsoft, es
Entwicklungsteam konzentriert sich ja Je nach Anwendungsfall können Java- lässt sich aber plattformunabhängig ein-
nach der Freigabe eines Releases auf die Nutzer derzeit aus drei Optionen für den setzen. Eine besondere Demo dafür bie-
Arbeit an den nächsten Versionen. Das Einsatz von Java 21 wählen. Wer keinen tet JavaFX Central. Hinter dieser Webseite
Unterhalten der bestehenden Veröffent- LTS-Bedarf hat, kann direkt auf Java 21 steckt mehr als nur eine reine Sammlung
lichungen übernahm bisher Oracle und wechseln und sich der neuen Features von JavaFX-Beispielanwendungen und
stellte in den letzten Jahren insgesamt erfreuen. Wer dagegen ausschließlich Bibliotheken: JavaFX steht alternativ als
28 Bugfix-Releases für Java 11 sowie 17 LTS-Version einsetzen will oder darf, lokale Desktop-Applikation beziehungs-
weise als Webanwendung im Browser 1
3
zur Verfügung . (csi/tre) Ӻ
Listing 4: Collections und Strings
01 var liste = new ArrayList<String>();
Dateien zum Artikel
02 liste.add("B");
herunterladen unter
03 liste.addFirst("B");
www.lm-online.de/dl/49601
04 liste.addLast("C");
05 liste.removeFirst();
06 liste.removeLast();
07 int idx = "von1,von2,von3,von2".indexOf("von2",6,19); Weitere Infos und
interessante Links
08 idx = "von,von,von ".indexOf((int)'v',4,8);
www.lm-online.de/qr/49601
09 String[] teile = "abc;cde;efg".splitWithDelimiters(";",2);

78 www.linux-magazin.de 12.2023
© Ta an
tsia
atsia
ts F.com
v / 123RF
tsevich
na Yats o

Modernes C++ in der Praxis – Folge 71

Neu in der Library


Die Ranges-Bibliothek stellt eine zweite Variante der Stan- hang für die Verknüpfung von Funktionen:
Zuerst akzeptieren die Zeilen 8 bis 10
dard Template Library dar. Sie öffnet C++20 für ganz neue alle Elemente, die gerade sind (Zeile 9).
Im Anschluss daran wird dann jedes der
Ideen aus der funktionalen Welt. Rainer Grimm ausgefilterten Elemente verdoppelt (Zei-
len 11 bis 13).
Dieses soeben demonstrierte kleine
Dank der Ranges-Bibliothek in C++20 Eine erste Berührung Beispiel offenbart bereits zwei der neuen
wird der Umgang mit der Standard Tem- Features der Ranges-Bibliothek: Hier
plate Library (STL) angenehmer, und ihre Jeder Artikel zu Ranges sollte mit einem kommt zum einen eine Funktionskom-
Ausdrucksmöglichkeiten wachsen. Die „Hello-World“-Pendant für die Bibliothek position zum Einsatz, zum anderen aber
Algorithmen der Ranges-Bibliothek sind beginnen. Listing 1 übernimmt diese agiert diese Funktionskomposition direkt
lazy, agieren direkt auf den Containern Aufgabe. Den Ausdruck ab Zeile 7 muss auf dem Container. In Zeile 14 des Lis-
und lassen sich verknüpfen. Diese Eigen- man von links nach rechts lesen. Das tings ist die Ausgabe direkt als Kommen-
schaften beruhen auf funktionalen Ideen. Pipe-Symbol steht in diesem Zisammen- tar enthalten.

12.2023 www.linux-magazin.de 79
Programmieren C++ (Folge 71)

Das war das „Hello World“ von Ranges. findet. Views besitzen keine Daten, kon- mehr Views als die beiden im Beispiel
Jetzt ist es an der Zeit, tiefer in die Ma- sequenterweise sind ihre Copy-, Move- verwendeten. Die Tabelle Views in C++20
terie einzutauchen. und Zuweisungsoperationen konstant. stellt sämtliche Views-Varianten kurz und
In Listing 1 ist numbers die Range, kompakt vor.
während std::views::filter und Die meisten Views lassen sich über
Ranges und Views
std::views::transform für die Views einen alternativen Namen ansprechen.
Zuerst einmal enthält die Ranges-Biblio- stehen. Freilich besitzt C++20 deutlich So kann man statt std::views::trans-
thek zwei sehr interessante Concepts 1:
Ranges und Views.
Eine Range ist eine Menge von Ele- Views in C++20
menten, über die man iterieren kann.
View Funktion
Diese Range verfügt über einen Begin-
std::views::all Nimmt alle Elemente eines Views.
Iterator sowie einen Sentinel (das Ab-
schlusselement). Selbstverständlich std::ref_view Nimmt alle Elemente eines anderen Views.
handelt es sich bei den Containern der std::views::filter Nimmt die Elemente, die das Prädikat erfüllen.
Standard Template Library um Ranges. std::views::transform Transformiert jedes Element.
Ein View lässt sich auf eine Range
std::views::take Nimmt die ersten n Elemente eines anderen Views.
anwenden, wobei eine Operation statt-
std::views::take_while Nimmt die Elemente eines anderen Views, solange
das Prädikat gültig ist.
std::views::drop_while Überspringt die ersten Elemente eines anderen Views,
bis das Prädikat nicht erfüllt ist.
std::views::join Verbindet Views.
std::views::split Teilt einen View mithilfe eines Trennzeichens.
std::views::common Konvertiert einen View in einen Range.
std::views::reverse Iteriert in umgekehrter Reihenfolge.
std::istream_view Gibt die Elemente eines Views aus.
std::views::elements Erstellt einen View auf das n-te Element von Tupeln.
std::views::keys
1 Direktes Agieren auf dem Container
Erzeugt einen View auf das erste Element eines Paars.

mit der Ranges-Bibliothek. std::views::values Erzeugt einen View auf das zweite Element eines Paars.

Listing 1: Filtern und Transformieren eines Ranges


01 #include <iostream> 09 return n % 2 == 0
02 #include <ranges> 10 ;}) |
03 #include <vector> 11 std::views::transform([](int n){
04 12 return n * 2;
05 int main() { 13 });
06 std::vector<int> numbers = {1,2,3,4,5,6}; 14 for (auto v: results) std::cout << v << " ";
07 auto results = numbers | // 4 8 12
08 std::views::filter([](int n){ 15 }

Listing 2: Direktes Agieren auf dem Container


01 #include <iostream> 08 std::unordered_map<std::string,int> freqWord{
02 #include <ranges> 09 {"witch", 25}, {"wizard", 33}, {"tale", 45},
03 #include <string> 10 {"dog", 4}, {"cat", 34}, {"fish", 23}
04 #include <unordered_map> 11 };
05 12
06 int main() { 13 std::cout << "Keys" << std::endl;
07 std::cout << '\n'; 14 auto names = std::views::keys(freqWord);

80 www.linux-magazin.de 12.2023
C++ (Folge 71) Programmieren

form auch den Namen std::transform_ sie zum einen die Kom-
view verwenden. Views werden auch position und zum an-
häufig als Range Adaptors bezeichnet. deren die Bedarfsaus-
Die genaue Beschreibung der Views und wertung unterstützen.
der mit C++23 eingeführten neuen Das direkte Arbeiten
Views liefert in bekannter Manier Cpp- auf dem Container ist in
reference.com 1. C++ keine Revolution,
Die drei herausragenden Features von Funktionskomposition
Ranges sind, dass man sie auf den Con- und Bedarfsauswertung
tainer direkt anwenden kann und dass aber sehr wohl. 2 Funktionskomposition mit der Ranges-Bibliothek.

Listing 2: Direktes Agieren auf dem Container (Fortsetzung von S. 80)


15 for (const auto& name : names){ 25 auto values = std::views::values(freqWord);
16 std::cout << name << " "; 26 for (const auto& value : values){
17 }; 27 std::cout << value << " ";
18 std::cout << std::endl; 28 };
19 for (const auto& name : 29 std::cout << std::endl;
std::views::keys(freqWord)){ 30 for (const auto& value :
20 std::cout << name << " "; std::views::values(freqWord)){
21 }; 31 std::cout << value << " ";
22 std::cout << "\n\n"; 32 }
23 33 std::cout << "\n\n";
24 std::cout << "Values: " << std::endl; 34 }

Listing 3: Funktionskomposition
01 #include <iostream> 22 std::cout << name << " ";
02 #include <ranges> 23 };
03 #include <string> 24 std::cout << std::endl;
04 #include <map> 25
05 26 std::cout << "The first 4 words: ";
06 int main() { 27 for (const auto& name :
07 std::cout << std::endl; std::views::keys(freqWord)

08 std::map<std::string, int> freqWord { 28 | std::views::take(4)) {

09 {"witch", 25}, {"wizard", 33}, {"tale", 45}, 29 std::cout << name << " ";

10 {"dog", 4}, {"cat", 34}, {"fish", 23} 30 };

11 }; 31 std::cout << std::endl;

12 32

13 std::cout << "All words: "; 33 std::cout << "All words starting with w: ";

14 for (const auto& name : 34 auto firstw = [](const std::string& name){


std::views::keys(freqWord)) { 35 return name[0]=='w';
15 std::cout << name << " "; 36 };
16 }; 37 for (const auto& name :
17 std::cout << std::endl; std::views::keys(freqWord)

18 38 | std::views::filter(firstw)) {

19 std::cout << "All words reverse: "; 39 std::cout << name << " ";

20 for (const auto& name : 40 };


std::views::keys(freqWord) 41 std::cout << "\n\n";
21 | std::views::reverse) { 42 }

12.2023 www.linux-magazin.de 81
Programmieren C++ (Folge 71)

Direkt auf dem Container die Keys der std::map<std::string, Funktion dient als Fabrik, die eine Sequenz
int>. Zuerst stellt der Codeblock ab Zei- von Zahlen erzeugt, indem sie einen
Das Programm aus Listing 2 erzeugt di- le 13 alle Schlüssel dar, der ab Zeile 19 sor- Ausgangswert sukzessiv inkrementiert.
rekte Views auf den Schlüsseln und tiert sie umgekehrt. Dagegen interessiert Diese Sequenz kann endlich oder un-
Werten einer std::unordered_map. Hier sich der Code ab Zeile 26 nur für die ersten endlich sein. Der Aufruf std::view::io-
agieren sowohl die Zeilen 15 und 19 als vier Keys, der ab Zeile 33 ausschließlich ta(0) erzeugt einen unendlichen Daten-
auch die Zeilen 26 und 30 direkt auf dem für jene, die mit dem Buchstaben „w“ be- strom, der bei 0 startet und auf Anfrage
Container. Während die Zeilen 15 und 19 ginnen. Abbildung 2 zeigt die Ausgabe. die nächste Zahl erzeugt. Dieses Pro-
die Schlüssel der std::unordered_ Das Pipe-Symbol bietet Syntactic duzieren eines Werts auf Anfrage nennt
map<std::string, int> ansprechen, Sugar 1 für die Funktionskomposition. man Bedarfsauswertung oder auch Lazy
sind es in den Zeilen 26 und 30 deren Damit lässt sich C(R) einfacher als R | C Evaluation 1.
Werte. Abbildung 1 zeigt die Ausgabe. schreiben. Die zwei Zeilen aus Listing 4 Dank Bedarfsauswertung und Funk-
sind also äquivalent. tionskomposition lässt sich die Ranges-
Bibliothek sehr elegant einsetzen, um die
Funktionskomposition
ersten 20 Primzahlen zu finden, die bei
Bedarfsauswertung
In Listing 3 kommt eine std::map zum 1 000 000 beginnen. Listing 5 stellt dazu
Einsatz, denn die Ordnung der Schlüssel In unserem nächsten Beispiel kommt eine iterative Strategie in vier einzelnen
ist hier entscheidend. Alles dreht sich um std::views::iota zum Einsatz. Diese Schritten vor.

Listing 4: Syntactic Sugar Dateien zum Artikel


auto rev = std::views::reverse(ranges::views::keys(freqWord));
herunterladen unter
auto rev2 = std::views::keys(freqWord) | ranges::views::reverse; www.lm-online.de/dl/49692

Listing 5: Erste 20 Primzahlen ab 1000000


01 #include <iostream> 23 | std::views::filter(odd)) {
02 #include <ranges> 24 if (i % 100 == 1) std::cout << i << " ";
03 25 }
04 bool isPrime(int i) { 26 std::cout << "\n\n";
05 for (int j=2; j*j <= i; ++j){ 27
06 if (i % j == 0) return false; 28 std::cout << "Prime numbers from 1000000 to
07 } 1001000: " << std::endl;
08 return true; 29 for (int i: std::views::iota(1000000, 1001000)
09 } 30 | std::views::filter(odd)
10 31 | std::views::filter(isPrime)) {
11 int main() {
32 std::cout << i << " ";
12 std::cout << '\n';
33 }
13
34 std::cout << "\n\n";
14 std::cout << "Numbers from 1000000 to 1001000
35
(displayed each 100th): " << std::endl;
36 std::cout << "20 prime numbers starting with
15 for (int i: std::views::iota(1000000, 1001000))
1000000: " << std::endl;
{
37 for (int i: std::views::iota(1000000)
16 if (i % 100 == 0) std::cout << i << " ";
38 | std::views::filter(odd)
17 }
39 | std::views::filter(isPrime)
18 std::cout << "\n\n";
19 40 | std::views::take(20)) {

20 auto odd = [](int i){ return i % 2 == 1; }; 41 std::cout << i << " ";

21 std::cout << "Odd numbers from 1000000 to 42 }


1001000 (displayed each 100th): " << std::endl; 43 std::cout << "\n\n";
22 for (int i: std::views::iota(1000000, 1001000) 44 }

82 www.linux-magazin.de 12.2023
C++ (Folge 71) Programmieren

Um sicherzugehen, dass die erzeugten


Zahlen die ersten 20 Primzahlen enthal-
ten, erzeugt der Code ab Zeile 14 mittels
std::views::iota(1000000:1001000)
1000 Zahlen und gibt jede hundertste
aus. Die gewünschten Zahlen müssen
selbstredend ungerade sein. Daher ent-
fernt der Block ab Zeile 20 die geraden
Zahlen und gibt jede hundertste unge-
rade Zahl aus.
Jetzt ist es Zeit für den nächsten Filter
(ab Zeile 28). Das Prädikat isPrime (ab
Zeile 4) prüft, ob es sich bei der Zahl um
eine Primzahl handelt. Dabei kommt als
Strategie das Sieb des Eratosthenes 1 3 Iterative Bestimmung der ersten 20 Primzahlen, die mit 1 000 000 beginnen.
zum Einsatz. Die Ausgabe des Programms
in Abbildung 3 demonstriert unzweifel-
haft, dass die gewählte Strategie zu Faulheit ist auch eine Tugend. Aus diesem Wie geht es weiter?
gierig war: Die 1000 gefundenen Zahlen Grund kommt im nächsten Codeblock
enthalten 75 Primzahlen. ab Zeile 36 std::views::iota als ein Die Ranges-Bibliothek zählt zu den wich-
unendlicher Zahlengenerator zum Ein- tigsten vier Features von C++20. Daher
satz, der bei einem Anfangswert von wundert es nicht, dass es in den kom-
Weitere Infos und 1 000 000 startet. Dieser Generator wird menden Folgen dieser Serie noch viel
interessante Links durch den View std::views::take(20) dazu zu erzählen gibt. Der nächste Arti-
www.lm-online.de/qr/49692 in Zeile 40 angestoßen, der dann genau kel dreht sich um Projektionen, Sentinels,
20 Zahlen anfordert. Concepts und Sicherheit. (jcb/jlu) Ӻ
ONLINE

MAGAZIN
NEWSLETTER FÜR IT-PROFIS

Sie sind IT-Profi für Linux und Open Source? Bleiben Sie informiert mit
dem werktäglichen Newsletter für IT-Profis vom Linux-Magazin!

Newsletter
Q Tagesaktuelle IT-News
Q Security-Infos des

DFN-CERT
Q Online-Stellenmarkt

Jetzt kostenfrei abonnieren! www.linux-magazin.de/subscribe


Vejcik / 12
n Vej
Marian
©M RF.com
123RF.
3RF.co
c
Dateien prüfen per Go-Kommandozeilenwerkzeug

Suche im Einmachglas
Damit Mike Schilli seine Google-Drive-Dateien mit drei ver- Zum Glück bietet Google eine intuitiv zu
bedienende API 1 auf die Nutzerdaten
schiedenen Pattern Matchern prüfen kann, baut er sich in Go in Google Drive. Da bietet sich ein Kom-
mandozeilenwerkzeug zur Auswertung
ein Kommandozeilenwerkzeug mit lokalem Cache. Mike Schilli an. Wenn wir schon dabei sind, lohnt ein
Ausflug in die Welt der Pattern Matcher,
von denen es unterschiedlichste Vari-
anten gibt. So matcht die Shell mit einem
Meine digitale Bibliothek gescannter Glob-Mechanismus, Programmiersprachen
Papierbücher liegt in Form von PDF- dagegen üblicherweise mit regulären
Dateien in einem Account bei Google Ausdrücken. Ein simpler String Matcher
Drive. Zwar hat Google bislang meine wie das Grep-Kommando ist oft die prak-
Daten vorbildlich vorrätig gehalten, aber tischste Lösung.
mit dem Such-Interface werde ich ein-
fach nicht recht warm. Google-typisch
Parallele Regex-Welten
Der Autor präsentiert der Browser ein Suchfeld,
über das sich der indizierte Volltext aller Wer auf der Kommandozeile ls *.jpg
Michael Schilli arbeitet als Software Engi-
Dateien in allen Ordnern fix durchforsten eintippt, erwartet, dass der Match-Me-
neer in der San Francisco Bay Area in Kali-
lässt. Eine simple Antwort auf die Frage, chanismus der Shell alle Dateien mit
fornien. In seiner seit 1997 laufenden Kolum-
ob ich ein bestimmtes Buch bereits ab- der Endung .jpg findet. Dieser Muster-
ne forscht er jeden Monat nach praktischen
gelegt habe, fällt schon schwerer, denn abgleich unterscheidet sich grundlegend
Anwendungen verschiedener Programmier-
dazu müsste man die Dateinamen unter- von den in Programmiersprachen ver-
sprachen. Unter mschilli@perlmeister.com
suchen und die Suche auf bestimmte wendeten regulären Ausdrücken nach
beantwortet er gern Ihre Fragen.
Ordner beschränken. PCRE (Perl Compatible Regular Expres-

84 www.linux-magazin.de 12.2023
Snapshot Programmieren

2 Eine SQLite-Datenbank speichert alle Dateipfade aus Google Drive.


1 Drei verschiedene Pattern Matcher in Aktion.
Die Joker-Karte der Regex- Shell-Globbing wäre „*“ wie bei *.jpg
Welt ist „.*“: Der Ausdruck erläutert, allerdings mit einer Einschrän-
sions 1). Die entsprangen witzigerweise passt auf beliebige Strings. Dabei lässt kung: Die Shell matcht niemals über
vor vielen Jahren der Skriptsprache Perl, der Punkt im Pattern beliebige Zeichen den Pfadseparator hinaus. Folglich passt
aber alle modernen Sprachen von Python zu, und der nachfolgende Stern steht /tmp/f* nicht auf /tmp/foo/bar.
über Java und C++ bis hin zu Go unter- für beliebig viele Wiederholungen (in- Grep hingegen akzeptiert mit dem
stützen sie ebenfalls. klusive keiner). Das Äquivalent beim Suchstring foo die Zeile /tmp/foo/bar.

Listing 1: gdls.go
01 package main 26 gddb.RegexFu = func(re, s string) (bool, error)
02 import ( {

03 "flag" 27 var matches bool


28 var err error
04 "log"
29 switch *matchMethod {
05 "os"
30 case "contains":
06 "path"
31 matches = strings.Contains(s, re)
07 "path/filepath"
32 case "glob":
08 "regexp"
33 matches, err = filepath.Match(re, s)
09 "strings"
34 case "regex":
10 )
35 matches, err = regexp.MatchString(re, s)
11 func main() {
36 default:
12 matchMethod := flag.String("match", "contains",
37 log.Fatalf("Unknown: %s", *matchMethod)
"match method (contains, glob, regex)")
38 }
13 update := flag.Bool("update", false, "Update
39 if err != nil {
from Google Drive")
40 return false, err
14 flag.Parse()
41 }
15 gddb := NewGdDb()
42 return matches, nil
16 defer gddb.Close()
43 }
17 if *update {
44 gddb.Search(pattern)
18 gddb.Init()
45 }
19 updater(gddb)
46 func dbPath() string {
20 return
47 dir, err := os.UserHomeDir()
21 } 48 if err != nil {
22 pattern := "" 49 panic(err)
23 if flag.NArg() == 1 { 50 }
24 pattern = flag.Arg(0) 51 return path.Join(dir, ".gdrive.db")
25 } 52 }

12.2023 www.linux-magazin.de 85
Programmieren Snapshot

3 Freischalten der Google Drive API vor der Nutzung. 4 Anmelden der App auf der Google Cloud Console.

Es interpretiert den Schrägstrich also Kommandozeilen-Flag --match. Es darf und schreibe 15 in meiner Bibliothek
keineswegs gesondert und ist schon zu- die Werte contains (Standard), glob befinden. Um die Anzahl der Treffer zu
frieden, wenn das Pattern auch nur auf oder regex annehmen. Entsprechend begrenzen, schiebt das dritte Kommando
einen Bruchteil der Eingabe passt. An- verzweigt der Code ab Zeile 29 in einen die Treffer nach Unix-Manier in ein nach-
ders ausgedrückt, verzichtet Grep auf reinen Substring-Match (Bibliotheksfunk- gestelltes Grep-Kommando. Das lässt aus
das sogenannte Ankern (Anchoring), ein tion strings.Contains()), einen Glob- den 15 Treffern ein Buch übrig, dessen
Ausstopfen des Patterns mittels *foo* ist Match (Match() aus dem Standardpaket Titel die Zeichenkette „mad“ enthält.
nicht notwendig. filepath) oder einen vollen Regex-Match Alternativ filtert der Regex-Match mit
aus der Go-Regexp-Library mit regexp. „bukowski.*mad“ im vierten Kommando
MatchString(). schon vorab den einzigen Treffer heraus.
Treffer nach Gusto
Abbildung 1 zeigt das neu erstellte Der Ausdruck passt auf Dateien mit dem
Damit Sie mit dem vorgestellten Binary Programm Gdls in Aktion. Ein Substring- entsprechenden Namen, unabhängig
gdls später Ihre Match-Strategie in den Match auf „bukowski“ findet alle Bücher davon, in welchem Ordner sie sich be-
Google-Drive-Daten nach Ihrem Gusto des amerikanischen Schriftstellers finden. Im Gegensatz dazu passt der
wählen können, spendiert Listing 1 das Charles Bukowski, von denen sich sage Glob-Match mit der Shell-typischen Stern-

Listing 2: Token-Abfrage
01 package main 20 func getTokenFromWeb(config *oauth2.Config)
02 import ( *oauth2.Token {

03 "context" 21 authURL := config.AuthCodeURL("state-token",


oauth2.AccessTypeOffline)
04 "encoding/json"
22 fmt.Printf("Launch in browser and copy auth
05 "fmt" code: \n%v\n", authURL)
06 "golang.org/x/oauth2" 23 var authCode string
07 "os" 24 fmt.Scan(&authCode)
08 ) 25 tok, err := config.Exchange(context.TODO(),
09 const tokenFile = "token.json" authCode)
10 func readToken() (*oauth2.Token, error) { 26 panicOnErr(err)
11 f, err := os.Open(tokenFile) 27 return tok
12 if err != nil { 28 }
13 return nil, err 29 func saveToken(token *oauth2.Token) {
14 } 30 f, err := os.Create(tokenFile)
15 defer f.Close() 31 panicOnErr(err)
16 tok := &oauth2.Token{} 32 defer f.Close()
17 err = json.NewDecoder(f).Decode(tok) 33 err = json.NewEncoder(f).Encode(token)
18 return tok, err 34 panicOnErr(err)
19 } 35 }

86 www.linux-magazin.de 12.2023
Snapshot Programmieren

Syntax und Pfadrestriktionen in der letz- Hierzu müssen Sie auf der
ten Zeile nur auf Dateien, die im Ordner Google Cloud Console 1
books/ liegen. Es ist also für jeden Ge- zunächst ein Projekt anlegen,
schmack etwas dabei. die Google-Drive-API freischal-
Damit die Suchkommandos in Abbil- ten 3 und eine neue Client-
dung 1 flüssig Ergebnisse liefern, fragt Applikation hinzufügen . 4
das Go-Programm Google Drive nicht Der Server antwortet mit einer
direkt ab, sondern nutzt eine lokale Ko- neu generierten Client ID und
pie der Dateinamen in einer SQLite-Da- 5
einem Client secret .
tenbank auf dem ausführenden Rechner. Das Client-Geheimnis be-
Diesen lokalen Cache frischen Sie bei rechtigt allerdings noch nicht
Bedarf über den Aufruf gdls --update zum Zugriff auf die Daten,
auf. Daraufhin kontaktiert Gdls Ihren sondern lediglich zum Ein-
Google-Drive-Account, holt die Namen holen eines Access-Tokens
aller aktuell gespeicherten Dateien und auf dem Google-API-Server.
speist sie in die Tabelle files einer SQ- Liegt später solch ein Token
Lite-Datenbank in der lokalen Datei dem Request an die Google-
~/.gdrive.db ein 2 . Drive-API bei, rückt der Server
Listing 1 verpackt die drei verschie- die Daten heraus. Das Access- 5 Client ID und Client secret dienen als Ausweis.
denen Queries als Library-Aufrufe in der Token gilt nur zeitlich be-
Funktion RegexFu() (ab Zeile 26). Lis- schränkt, lässt sich aber mit
ting 4 registriert diese später mit der En- dem gleichzeitig zugeteilten Refresh- Secret ein. Zu diesem Zeitpunkt liegt
gine der SQLite-Datenbank. Die SQLite- Token wieder und wieder auffrischen. noch kein Access-Token vor, also ruft Gdls
Session in Abbildung 2 sucht noch Das Client secret steht im Dialog in Abbil- die Funktion getTokenFromWeb() aus
händisch und SQL-typisch nach like dung 5 im JSON-Format zum Down- Listing 2 auf (ab Zeile 20). Sie schreibt
%bukowski% – ein viertes Verfahren zum load bereit, und Sie legen es in der Datei die URL zur Credential-Aktivierung auf
Pattern-Matching. Die Suchanfragen des creds.json im lokalen Verzeichnis ab. die Standardausgabe und fordert Sie auf,
Go-Programms nutzen später die in SQ- Beim ersten Aufruf mit gdls --update die Adresse in das Eingabefenster eines
Lite eingebaute Funktion regexp(), die liest das Programm die Credentials-Datei Webbrowsers einzutippen. Der damit
wir mit der benutzerdefinierten Funktion creds.json mit Client-ID und Client- kontaktierte Google-Server stellt dann
RegexFu überladen.

Ausweis, bitte!
Wie landen nun aber die Metadaten aus
Google Drive in der SQLite-Datenbank?
Google gestattet den Zugriff auf die
Drive-Daten nur für ausgewiesene Be-
nutzer. Deswegen muss ein Programm,
das die Namen der darin enthaltenen
Dateien abholen möchte, sich entspre-
chend autorisieren. 6 Abholen des Access-Tokens beim ersten Aufruf.

DEBIAN, DDOS & DEBATTEN


N SOURCE
LINUX UND OPEre m Newsletter
topaktuell mit unse

www.linux-magazin.de/subscribe
Programmieren Snapshot

Dazu liest die Bibliotheksfunktion google.


ConfigFromJSON() in Zeile 17 erst die
Client-ID und das Client-Secret aus der
Konfigurationsdatei. Dann versucht get-
Client() ab Zeile 24 zunächst, ein gül-
tiges Access-Token zu finden. Schlägt
das fehl, beginnt getTokenFromWeb() in
Zeile 27 den vorher erwähnten Token-
Tanz mit dem Browser.
Der neu erstellte Client hilft dann der
in Zeile 11 importierten Library drive/v3,
die OAuth-spezifische Kommunikation
zu erledigen. Diese von Google offiziell
herausgegebene Library macht es gar
nicht so einfach, das Drive komplett ab-
7 Google warnt vor der hoch suspekten, selbst 8 Der User gibt im Browser zusuchen und dabei die Ordnerstruktur
geschriebenen App. sein Einverständnis. im Auge zu behalten.
Die Funktion listAllFiles() fängt
beim obersten Ordner (mit der ID root)
zunächst sicher, dass der Google-Drive- wieder ein. Beim nächsten Aufruf nutzt an, alle enthaltenen Einträge mit dem
Besitzer in seinen Account eingeloggt ist. das Programm hinter den Kulissen auf Query in Zeile 33 abzufragen. Dort even-
Dann fragt er in einem Dialog ab, ob es diese Weise das noch gültige Access-To- tuell gefundene Verzeichnisse erkennt
in Ordnung geht, der neuen Applikation ken oder besorgt sich mit dem Refresh- sie mit der Typprüfung in Zeile 40 und
entsprechende Rechte einzuräumen. Token ein neues. Sie bekommen davon ruft sich jeweils rekursiv auf, um sich in
Dazu bringt Google zunächst eine War- nichts mit, ausgenommen vielleicht, dass der Hierarchie immer weiter nach unten
nung 7 und dann einen OAuth-Consent- es hin und wieder ein paar Sekunden zu bohren. Die Namen normaler Dateien
8
Dialog , den Sie abnicken müssen. So länger dauert, bis der Zugriff auf Google kopiert es mit dem beim Aufruf herein-
weiß der API-Server, dass Sie damit ein- Drive wieder klappt. gereichten Objekt gddb und dessen
verstanden sind, dass eine unregistrierte Alle Listings dieser Ausgabe behandeln Funktion Add() in Zeile 44 in den lokalen
und damit suspekte Applikation private Fehler aus Platzgründen mit der Utility- SQLite-Cache. Dank der mittels Rekursion
Drive-Daten lesen darf. Funktion panicOnErr(). Ausgereifte durchgeschleiften Ordnerpfade stehen
Applikationen nutzen das Modul log für auf diese Weise die absoluten Dateipfade
Meldungen und geben Fehler an auf- aus dem Google Drive bereit.
Mit Haken und Ösen
rufende Programmteile zurück, statt mit
Stimmen Sie dem Prozess trotz Warnun- panic() gleich alles hinzuwerfen.
Häppchenweise
gen zu, dirigiert der Server den Browser
zu einer voreingestellten URL auf local- Googles API liefert auf eine Search-Query
Fangfrisch eingeweckt
host, auf der mangels lokaler Konfigu- hin keineswegs alle Dateien in einem
ration niemand lauscht. Entsprechend Mit den Zugriffsdaten darf die Funktion Ordner. Sie paginiert das Ergebnis unge-
meldet der Browser einen Fehler .9 updater() aus Listing 3 mittels listAll- fragt, falls mehr als 100 Treffer vorliegen.
Aber nicht verzagen: Die angezeigte Files() (ab Zeile 32) die Namen der in Liegt im JSON einer Server-Antwort ein
URL im Eingabefenster enthält im Para- Google Drive verstreuten Dateien holen. nextPageToken vor, geht es noch weiter.
meter code den Autorisierungscode,
den Sie kurzerhand in die Eingabe des
6
wartenden Programms kopieren . Das
kontaktiert daraufhin den Google-Server
und erhält gegen Ablieferung des Codes
das erwartete Access-Token. Damit klappt
der Zugriff auf die Daten, und der Down-
load-Prozess beginnt loszurattern.
Damit diese Zirkusnummer nicht bei
jedem Aufruf des Programms von Neuem
beginnt, speichert Gdls in saveToken()
(Listing 2, ab Zeile 29) das Access-Token
samt dem ebenfalls beiliegenden Refresh-
Token in der Datei token.json. Von dort
liest readToken() ab Zeile 10 es später 9 Der Autorisierungscode steht im Parameter code.

88 www.linux-magazin.de 12.2023
Snapshot Programmieren

Der Server muss übrigens keine 100 Er- packt die Funktionen, die auf
gebnisse in eine Antwort packen. Diese die Datenbank zugreifen, in
voreingestellte Größe ist ein Maximal- ein objektorientiertes Format.
wert, den der Dienst unterschreiten darf. Der Konstruktor NewGdDb()
Clients, die nur dann eine Folgeseite an- ab Zeile 12 öffnet die Ver-
fordern, wenn sie 100 Ergebnisse finden, bindung zur Datenbank und 0Diese Build-Kommandos erzeugen das Go-Binary.
liefern ohne Fehlermeldungen auszuge- verpackt das Handle in eine
ben unvollständige Daten. Struktur vom Typ GdDb (de-
finiert ab Zeile 7). Nach dem Ausfüllen die den laufenden IDs die vollständigen
gibt er sie für künftige Aufrufe zurück. Pfade gefundener Dateien zuweist. In
Abgeheftet Ruft der Client später db.Init() auf, Abbildung 2 war bereits das Daten-
löscht der Code ab Zeile 21 mithilfe eines bankschema zu sehen.
Das Tool speichert die bei Drive gefun- SQL-Kommandos die Tabelle files (falls Die Funktion Add() ab Zeile 31 fügt
denen Dateinamen in der SQLite-Datei sie in einer alten Version aus vorherigen mit dem SQL-Kommando insert() neue
.gdls.db im Home-Verzeichnis. Listing 4 Läufen existiert) und legt eine neue an, Pfadeinträge als Tabellenzeilen an, wäh-

Listing 3: Google-Drive-Zugriff
01 package main 32 func listAllFiles(service *drive.Service, gddb
02 import ( GdDb, folderID, parentPath string) {
03 "context" 33 query := fmt.Sprintf("trashed=false and '%s' in
04 "fmt" parents", folderID)

05 "io/ioutil" 34 pageToken := ""

06 "net/http" 35 for {

07 "path/filepath" 36 r, err := service.Files.List().Q(query).

08 _ "github.com/mattn/go-sqlite3" Fields("nextPageToken, files(id, name,


mimeType)").PageToken(pageToken).Do()
09 "golang.org/x/oauth2"
37 panicOnErr(err)
10 "golang.org/x/oauth2/google"
38 for _, file := range r.Files {
11 "google.golang.org/api/drive/v3"
39 fullPath := filepath.Join(parentPath, file.
12 )
Name)
13 func updater(gddb GdDb) {
40 if file.MimeType == "application/vnd.
14 credentialsFile := "creds.json"
google-apps.folder" {
15 data, err := ioutil.ReadFile(credentialsFile)
41 listAllFiles(service, gddb, file.Id,
16 panicOnErr(err)
fullPath)
17 config, err := google.ConfigFromJSON(data,
42 } else {
drive.DriveReadonlyScope)
43 fmt.Printf("Adding %s\n", fullPath)
18 panicOnErr(err)
44 gddb.Add(fullPath)
19 client := getClient(config)
45 }
20 service, err := drive.New(client)
46 }
21 panicOnErr(err)
47 pageToken = r.NextPageToken
22 listAllFiles(service, gddb, "root", "")
48 if pageToken == "" {
23 }
49 break
24 func getClient(config *oauth2.Config) *http.
Client { 50 }
25 tok, err := readToken() 51 }
26 if err != nil { 52 }
27 tok = getTokenFromWeb(config) 53 func panicOnErr(err error) {
28 saveToken(tok) 54 if err != nil {
29 } 55 panic(err)
30 return config.Client(context.Background(), tok) 56 }
31 } 57 }

12.2023 www.linux-magazin.de 89
Programmieren Snapshot

rend Search() ab Zeile 35 Einträge nach Zeile 56 iteriert über genehmigte Treffer dem der Go-Compiler die im Code refe-
den vordefinierten Match-Algorithmen und schreibt sie in die Standardausgabe. renzierten Libraries aus dem Netz he-
absucht und Treffer ausgibt. Dazu regis- runtergeladen und vorkompiliert hat. Bei
triert die Funktion in SQLite die benutzer- Bedarf können Sie die Suchfunktionen
Abteilung, marsch!
definierte Funktion regex() und setzt weiter an eigene Bedürfnisse anpassen.
sie auf die in den Konstruktor hereinge- Der Dreisprung aus Abbildung führt0 Der Fantasie sind dabei keine Grenzen
reichte Go-Funktion mit den drei Match- zu einem ausführbaren Programm, nach- gesetzt. (uba/jlu) Ӻ
Algorithmen. Davon ist bereits einer vom
Hauptprogramm her vorausgewählt.
Beim Suchen mit SELECT in der SQL- Dateien zum Artikel Weitere Infos und
Datenbank springt die benutzerdefinier- herunterladen unter interessante Links
te Funktion in einer Where-Klausel ein www.lm-online.de/dl/49803 www.lm-online.de/qr/49803
und filtert die Treffer. Die For-Schleife ab

Listing 4: Datenbankzugriff
01 package main 34 }
02 import ( 35 func (gddb GdDb) Search(pattern string) {
03 "database/sql" 36 sql.Register("sqlite3_FunctionRegistration",
04 "fmt" &sqlite3.SQLiteDriver{
05 "github.com/mattn/go-sqlite3" 37 ConnectHook: func(conn *sqlite3.SQLiteConn)
06 ) error {

07 type GdDb struct { 38 if err := conn.RegisterFunc("regex", gddb.

08 Db *sql.DB RegexFu, true); err != nil {

09 RegexFu func(re, s string) (bool, error) 39 return err

10 TableName string 40 }

11 } 41 return nil

12 func NewGdDb() GdDb { 42 }})

13 db, err := sql.Open("sqlite3", dbPath()) 43 db, err := sql.Open("sqlite3_


FunctionRegistration", dbPath())
14 panicOnErr(err)
44 panicOnErr(err)
15 return GdDb{Db: db, TableName: "files"}
45 defer db.Close()
16 }
17 func (gddb GdDb) Close() { 46 query := fmt.Sprintf("SELECT path FROM %s",
gddb.TableName)
18 gddb.Db.Close()
47 var rows *sql.Rows
19 }
48 if pattern == "" {
20 func (gddb GdDb) Init() {
49 rows, err = db.Query(query)
21 sql := `DROP TABLE If EXISTS ` + gddb.TableName
50 } else {
22 _, err := gddb.Db.Exec(sql)
51 query += fmt.Sprintf(" WHERE regex(?, path)")
23 panicOnErr(err)
52 rows, err = db.Query(query, pattern)
24 sql = `CREATE TABLE ` + gddb.TableName + ` (
53 }
25 id INTEGER PRIMARY KEY AUTOINCREMENT,
26 path TEXT 54 panicOnErr(err)

27 );` 55 defer rows.Close()

28 _, err = gddb.Db.Exec(sql) 56 for rows.Next() {

29 panicOnErr(err) 57 var name string

30 } 58 panicOnErr(rows.Scan(&name))

31 func (gddb GdDb) Add(path string) error { 59 fmt.Printf("%s\n", name)

32 _, err := gddb.Db.Exec("INSERT INTO "+gddb. 60 }


TableName+" (path) VALUES (?)", path) 61 panicOnErr(rows.Err())
33 return err 62 }

90 www.linux-magazin.de 12.2023
ANZEIGE

Gaming-PCs
von PCGH

Konfigurierbare
PCs von Dubaro

Jeder PC kann vor der


Bestellung individuell
angepasst werden

Vorschläge zur
Konfiguration vom
PCGH-Ratgeber-Team

Für PC-Schrauber:
Bestellung aller Hardware-
Komponenten auch als
Bausatz möglich

POWERED BY

Mehr Infos unter: www.pcgh.de/gaming-pcs


Service IT-Profimarkt

PROFI
IT
hochwertige Produkte und Leistungen
Weitere Informationen:
an. Die exakten Angebote jeder Firma
entnehmen Sie deren Homepage. Der Computec Media GmbH
MARKT ersten Orientierung dienen die sechs
Kategorien Hardware, Software, Seminar-
Anzeigenabteilung
anbieter, Systemhaus, Netzwerk/TK sowie Dr.-Mack-Straße 83
Schulung/Beratung. Der IT-Profimarkt- D-90762 Fürth
Sie fragen sich, wo Sie maßgeschneiderte
Eintrag ist ein Service von Linux-Magazin
Linux-Systeme sowie kompetente An-
und LinuxUser.
sprechpartner zu Open-Source-Themen Tel.: +49 (0) 911 / 2872-252
finden? Der IT-Profimarkt weist Ihnen Besonders komfortabel finden Sie einen
hier als zuverlässiges Nachschlagewerk Linux-Anbieter in Ihrer Nähe online über Fax: +49 (0) 911 / 2872-21
den richtigen Weg. Die im Folgenden die Umkreissuche. Schauen Sie einfach
gelisteten Unternehmen beschäftigen einmal rein unter:
E-Mail: anzeigen@linux-magazin.de
Experten auf ihrem Gebiet und bieten http://www.it-profimarkt.de.

IT-Profimarkt
1 = Hardware 2 = Netzwerk 3 =Systemhaus 4 = Seminaranbieter 5 = Software 6 = Schulung/Beratung
Firma Anschrift Telefon Web 1 2 3 4 5 6

Schlittermann internet & unix support 01099 Dresden, Tannenstraße 2 0351-802998-1 www.schlittermann.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Heinlein Support GmbH 10119 Berlin, Schwedter Straße 8/9b 030-405051-0 www.heinlein-support.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

PC-COLLEGE Training GmbH 10963 Berlin, Stresemannstraße 78 0800-5777333 linux.pc-college.de ‫ط‬ ‫ط‬

Compaso GmbH 13125 Berlin, Achillesstraße 61 030-326933-0 www.compaso.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

talicom GmbH 30169 Hannover, Calenberger Esplanade 3 0511-123599-0 www.talicom.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

HECKER CONSULTING 40231 Düsseldorf, Erkrather Str. 401 0211-54248040 www.hco.de ‫ط‬ ‫ط‬

Linux-Systeme GmbH 45277 Essen, Langenberger Straße 179 0201-298830 www.linux-systeme.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Linuxhotel GmbH 45279 Essen, Antonienallee 1 0201-8536-600 www.linuxhotel.de ‫ط‬

dass IT GmbH 50674 Köln, Händelstraße 25-29 0221-3565666-0 www.dass-it.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Anzeigen

NEWS,
BLOGS
X25
& JOBS
Immer aktuell informiert mit dem LINUX UND OP EN SOURCE
serem Newsletter
topaktuell mit un
COMMUNITY NEWSLETTER!
www.linux-community.de/newsletter www.linux-magazin.de/subscribe

92 www.linux-magazin.de 12.2023
IT-Profimarkt Service

IT-Profimarkt
os-cillation GmbH 57072 Siegen, Hohler Weg 75 0271-313680 www.os-cillation.de ‫ط‬ ‫ط‬ ‫ط‬

GONICUS GmbH 59755 Arnsberg, Möhnestraße 55 02932-916 0 www.gonicus.de ‫ط‬ ‫ط‬

LinuxHaus Stuttgart 70565 Stuttgart, Hessenwiesenstraße 10 0711-2851905 www.linuxhaus.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Manfred Heubach EDV und Kommunikation 73730 Esslingen, Hindenburgstraße 171 0711-4904930 www.heubach-edv.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

in-put – Das Linux-Systemhaus GmbH 75179 Pforzheim, Kurze Steig 31 07231- 440785 -0 www.in-put.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Tralios IT GmbH 76133 Karlsruhe, Douglasstraße 24-26 0721-94269664 www.tralios.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Bodenseo 78224 Singen, Pomeziastraße 9 07731-1476120 www.bodenseo.de ‫ط‬ ‫ط‬

Concat AG 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

B1 Systems GmbH 85088 Vohburg, Osterfeldstraße 7 08457-931096 www.b1-systems.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Tuxedo Computers GmbH 86159 Augsburg, Alter Postweg 101 0821-89982992 www.tuxedocomputers.com ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

OSTC Open Source Training and Consulting GmbH 90425 Nürnberg, Waldemar-Klink-Straße 10 0911-3474544 www.ostc.de ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

Thomas-Krenn.AG 94078 Freyung, Speltenbach-Steinäcker 1 08551-9150-400 www.thomas-krenn.com ‫ط‬

LinuxCampus.net A-2700 Wiener Neustadt, Brodtischgasse 4 +43 (0)2622-42255-20 www.LinuxCampus.net ‫ط‬ ‫ط‬

Siedl Networks GmbH A-3500 Krems a. d. Donau, Dr.-Franz-Wilhelm-Str. 2 +43 (0)2732-71545-0 www.siedl.net ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬ ‫ط‬

CATATEC CH-3013 Bern, Dammweg 43 +41 (0)31-3302630 www.catatec.ch ‫ط‬ ‫ط‬ ‫ط‬

Anzeigen

COMMUNITY-  Linux-Erfahrung seit 1992


Linux-Erfahrung
Ihr
 Ihr Dienstleister seit 1998
GNU / Linux

EDITION CC-Lizenz:
Frei kopieren und
weiter verteilen!
Netzwerke
Systeme

Jeden Monat 30 Seiten als kostenloses PDF!


 Mailsysteme
Mailsysteme
sicher: DANE, DNSSEC, TLS/SSL
flexibel: Exim (SMTP),
Dovecot (POP3/IMAP)
Jetzt bestellen unter:
http://www.linux-user.de/ce
 - MTA
-
Consulting
Schulung
Entwicklung

internet & unix support


Tannenstr. 2, 01099 Dresden

Tel./Fax: +49 351 8029981/83

12.2023 www.linux-magazin.de 93
Service README

stphot
ostph
© tto 123 F
to,123R
oto,
README
In jedem Artikel in diesem Magazin liefert eine Reihe spezieller Textauszeichnungen und
hilfreicher grafischer Elemente wichtige Zusatzinformationen zum Text. Jörg Luther

Der Mensch lebt nicht vom Text allein: Der „Umbruchhaken“ am Ende der ersten dem ein blauer Pfeil nach rechts weist: 1.
Zu so gut wie jedem Artikel im Linux- Zeile des Codes verweist hier darauf, dass Wenn Sie häufig im WWW unterwegs
Magazin gehört eine Reihe von Zusatz- es sich eigentlich bei dem Codesegment sind, ist Ihnen ein solches oder ähnliches
informationen, die das bloße Narrativ um eine einzige Eingabezeile handelt, Element dort mit Sicherheit schon be-
um weiterführende Inhalte ergänzen. die lediglich aus Platzgründen im Druck gegnet: Im Heft wie im Netz bezeichnet
Manche davon integrieren sich direkt umbrochen werden musste. In Listing- es den Verweis auf eine weiterführende
in den Textfluss, andere stehen als ge- Kästen gibt es diesen Umbruchhaken Information.
sonderte grafische Elemente in einer der nicht, hier ist jede Zeile farbig hinterlegt. Im Netz kann man sich durchklicken,
Textspalten. Alle diese Elemente folgen Doch zurück zur Kursivierung: Sie kann auf dem Papier funktioniert das leider
gewissen Konventionen, die denen, die außer Platzhaltern auch andere Elemente nicht. Um an die Links zum Artikel zu
sie kennen, das Verständnis des Texts bezeichnen, zum Beispiel Paketnamen gelangen, blättern Sie ans Ende des Bei-
erleichtern oder aufzeigen, auf welchem und Benutzerkonten, etwa build-essential trags, wo Sie einen Kasten Weitere Infos
Weg sie an zusätzliches Material gelangen und root. Aber auch Menüpunkte dru- und interessante Links finden. Entweder
können. Da diese Konventionen nicht cken wir kursiv ab, wobei in Menüfolgen tippen Sie die dort angegebene URL
immer ganz intuitiv ausfallen, wollen wir eine Pipe die einzelnen Elemente trennt: www.lm-online.de/qr/Nummer in einen
sie im Folgenden kurz erläutern. Sonstiges | Textkodierung | Unicode. Webbrowser ein – das führt Sie auf eine
Webseite mit allen Links zum Artikel –,
oder Sie scannen mit dem Smartphone
Typografische Konventionen Tasten und Tastenfolgen
oder dem Tablet den im Kasten ebenfalls
Der Fließtext jedes Artikels im Linux- Begegnet Ihnen im Text ein Buchstabe abgedruckten QR-Code ein und surfen
Magazin folgt typografischen Konven- oder eine Buchstabenfolge in eckigen auf diesem Weg zur Seite mit den Links.
tionen, die die Orientierung erleichtern Klammern, wie [Esc], handelt es sich da- Apropos QR-Code: In manchen Artikeln
und Elemente leichter identifizierbar bei um eine symbolische Taste, die für finden Sie auch einen Kasten Dateien
machen sollen. So hebt eine blaue einen Tastendruck steht. Als Schreibweise zum Artikel herunterladen unter mit der
Einfärbung Verweise auf Tabellen und dient dabei grundsätzlich die Beschrif- URL www.lm-online.de/dl/Nummer. Er
Kästen hervor: siehe Kasten Kastentitel. tung der Tasten einer deutschen Tastatur. funktioniert analog zum Kasten mit den
Die Kursivierung signalisiert hier, wie in Ein Druck auf [T] erzeugt also ein kleines Links und bringt Sie auf eine Webseite,
vielen anderen Fällen, eine symbolische „t“, die Kombination [Umschalt]+[T] ein die auf herunterladbare Dateien zum
Bezeichnung; in einem Codebrocken großes „T“. Das Pluszeichen zwischen den Artikel verweist. In vielen Fällen handelt
könnte das etwa so aussehen: Tasten signalisiert, dass man sie gleich- es sich dabei um die zugehörigen Lis-
zeitig drücken muss, ein Komma dagegen, tings. Das auf dieser Seite abgedruckte
$ cat "EinTextbrocken" >> ® dass es sie nacheinander zu betätigen Exemplar dient allerdings lediglich als
Ausgabe.txt gilt. Das allseits beliebte Copy & Paste Beispiel und führt ins Nirgendwo. Q
gelingt also mit [Strg]+[C], [Strg]+[V].

Dateien zum Artikel Infos und Downloads Weitere Infos und


herunterladen unter interessante Links
www.lm-online.de/dl//48723 An zahlreichen Stellen im Text finden www.lm-online.de/qr//48723
Sie ein blau umrandetes Quadrat, aus

94 www.linux-magazin.de 12.2023
WIEDER AM FALSCHEN
ENDE GESPART?

... nicht mit

DIE PREMIUM-
WÄRMELEITPASTE
FÜR GAMER!

www.pcgh-gear.de
Service Inserenten

Inserenten
B1 Systems GmbH www.b1-systems.de 1, 100 LinuxUser www.linux-user.de 77, 93, 96
Computec Media GmbH www.computec.de 51, 95 mitp-Verlag www.mitp.de 7
Fernschule Weber GmbH www.fernschule-weber.de 92
PC Games Hardware www.pcgameshardware.de 71, 91
Heinlein Consulting GmbH www.heinlein-support.de 9
Raspberry Pi Geek www.raspberry-pi-geek.de 27
Informatik Aktuell www.it-tage.org 67
Schlittermann internet & unix support www.schlittermann.de 93
IT-Profimarkt www.it-profimarkt.de 43
Thomas Krenn AG www.thomas-krenn.com 2
Linux-Community www.linux-community.de 73, 92
Linux-Magazin www.linux-magazin.de 33, 47, 61, 98 TUXEDO Computers GmbH www.tuxedocomputers.com 99

Linux-Magazin Online www.linux-magazin.de 45, 57, 83, 87, 92 Einem Teil dieser Ausgabe liegt eine Beilage der Firma Strato AG (www.strato.de) bei.
Linuxhotel www.linuxhotel.de 13 Wir bitten unsere Leser um freundliche Beachtung.

Autoren
Autor/-in Artikel Seite Mike Schilli Auf Antwort warten 30
Erik Bärwaldt Lademeister 38 Mike Schilli Suche im Einmachglas 84
Markus Feilner "Wir brauchen Sie!" 14
Carina Schipper Tux liest 66
Friedhelm Greis Sicherheitsalbtraum? 64
Mirko Sonntag Musterhafte Software 16
Rainer Grimm Neu in der Library 79
Mark Vogelsberger Top-Erpresser 72
Martin Gerhard Loschwitz Ein Kracher 52
Mark Vogelsberger Gruppenbildung 68
Martin Gerhard Loschwitz Flurfunk 58
Mike Müller Einzigartig 24 Uwe Vollbracht Tooltipps 36

Thomas Reuß Schreckgespenster 48 Carsten Zerbst Nächste Runde 74

Events
03.-05.11.2023 10.-12.11.2023 11.-14.12.2023
Ubuntu Summit 2023 Tux-Tage 2023 Frankfurter IT-Tage
Riga, Lettland Online Frankfurt a. M.
https://events.canonical.com/event/31/ https://www.tux-tage.de https://www.ittage.informatik-aktuell.de

06.11.2023 18.11.2023 27.-30.12.2023


OpenAI DevDay Linux Presentation Day 2023.2 37C3
San Francisco, CA, USA An vielen Orten in Deutschland Hamburg
https://devday.openai.com https://l-p-d.org https://events.ccc.de

07.-09.11.2023 28.11.2023 03.-04.02.2024


OSMC 2023 Open Forum Academy Symposium FOSDEM 2024
Nürnberg Berlin Brüssel, Belgien
https://osmc.de https://symposium.openforumeurope.org https://fosdem.org/2024/

10.-11.11.2023 27.-29.11.2023 04.-05.03.2024


SFSCON 2023 Deutsche Open-Source-Tage FOSS Backstage
Bozen, Italien Berlin Berlin / Online
https://www.sfscon.it https://deutsche-opensource-tage.de https://24.foss-backstage.de

AUSGABE VERPASST?
6,50 €
ALLE ARTIKEL DES JAHRGANGS 2022 . ............
en
zzgl. Versandkost

Alle Artikel des Jahrgangs 2022 auf DVD


Mehr Infos unter: shop.linuxuser.de/jahres-dvd/2022

Bequem online Telefon: 0911 / 993 990 98 E-Mail: computec@dpv.de


bestellen: shop.linuxuser.de/jahres-dvd/2022
Impressum Service

ABONNEMENT
Preise Print Deutschland Österreich Schweiz
Probeabo (3 Ausgaben)
No Media-Ausgabe € 17,00 € 17,00 € 17,00
DVD-Ausgabe € 21,00 € 21,00 € 21,00 Ein Unternehmen der MARQUARD MEDIA GROUP AG
Verleger: Jürg Marquard
Jahresabo (12 Ausgaben)
No-Media-Ausgabe € 92,00 € 100,00 € 107,00 Redaktion Computec Media GmbH
Redaktion Linux-Magazin
DVD-Ausgabe € 112,00 € 120,00 € 127,00 Dr. -Mack-Straße 83
Jahres-DVD zum Abo 1 € 6,70 € 6,70 € 6,70 90762 Fürth
Telefon: (0911) 2872-110
Preise Digital Deutschland Österreich Schweiz
E-Mail: redaktion@linux-magazin.de
Heft-PDF Einzelausgabe € 8,50 € 8,50 € 8,50 Web: http://www.linux-magazin.de
Digtal-Abo (12 Ausgaben) € 84,99 € 84,99 € 84,99 Geschäftsführer Christian Müller, Rainer Rosenbusch
Kombi Digital + Print € 104,00 € 112,00 € 119,00
Chefredakteur,
(No-Media-Ausgabe) (12 Aus-
gaben) Brand/Editorial Director Jörg Luther (V.i.S.d.P.), joerg.luther@computec.de (jlu)
Stv. Chefredakteur Jens-Christoph Brendel, jens-christoph.brendel@computec.de (jcb)
Kombi Digital + Print € 124,00 € 132,00 € 139,00 Redaktionsltg. Online Ulrich Bantle, ulrich.bantle@computec.de (uba)
(DVD-Ausgabe) (12 Ausgaben) Redaktion Carina Schipper, carina.schipper@computec.de (csi)
nur erhältlich in Verbindung mit einem Jahresabo Print Ständige Mitarbeiter Rainer Grimm, Martin Loschwitz, Jürgen Quade, Thomas Reuß (tre), Mike Schilli,
Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises Tim Schürmann, Mark Vogelsberger, Uwe Vollbracht, Carsten Zerbst
oder einer aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei Verlängerung neu zu Schlussredaktion Sabine Schmitt
erbringen. Andere Abo-Formen, Ermäßigungen im Ausland etc. auf Anfrage. Adressänderungen bitte um- DELUG-DVD Tim Schürmann, info@tim-schuermann.de
gehend beim Kundenservice mitteilen, da Nachsendeaufträge bei der Post nicht für Zeitschriften gelten. Grafik Judith Erb (Rohmaterial Titelseite: Siarhei Yurchanka,123RF.com)
Bildnachweis 123RF.com, Fotolia.de, Photocase.com, Pixelio.de, freeimages.com und andere

Marketing Jeanette Haag (Ltg.), Simon Schmid, marketing@computec.de


Krypto-Info
Produktion Martin Closmann (Ltg.), martin.closmann@computec.de
GnuPG-Schlüssel der Linux-Magazin-Redaktion: Uwe Hönig, uwe.hoenig@computec.de
pub 1024D/44F0F2B3 2000-05-08 Redaktion Linux-Magazin Anzeigen Print/Digital Es gilt die Anzeigenpreisliste Nummer 32.
<redaktion@linux-magazin.de> Sales Director Jens-Ole Quiel, jens-ole.quiel@computec.de, Telefon: +49 911 - 2872-253
Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3 Mediaberatung D, A, CH Bernhard Nusser, anzeigen@linux-magazin.de, Telefon: +49 911 - 2872-254
Mediaberatung USA Brian Osborn, bosborn@linuxnewmedia.com
Public-Key der DFN-PCA: und weitere Länder
pub 2048R/7282B245 2007-12-12,
Internet http://www.linux-magazin.de
DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009) Täglicher Newsletter http://www.linux-magazin.de/mc/subscribe
<https://www.pki.dfn.de/pgp> Heftarchiv http://www.linux-magazin.de/Ausgaben
Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A Leserbriefe redaktion@linux-magazin.de
Fragen zu Heft-DVDs cdredaktion@linux-magazin.de
PGP-Zertifikat der DFN-User-CA: Allgemeine Anfragen info@linux-magazin.de
pub 2048R/6362BE8B (2007-12-12),
ISSN 1432 – 640 X
DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)
<https://www.pki.dfn.de/pgp> Abo Die Abwicklung (Rechnungsstellung, Zahlungsabwicklung und Versand)
Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06 erfolgt über unser Partnerunternehmen:
DPV Deutscher Pressevertrieb GmbH
Root-Zertifikat der CAcert: Leserservice Computec
Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/Email=sup- 20080 Hamburg
port@cacert.org Deutschland
SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33 Ansprechpartner für Reklamationen und Ersatzbestellungen ist Ihr Computec-Team in Deutschland
E-Mail: computec@dpv.de
MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B
Tel: 0911 – 993 990 98
GPG-Schlüssel der CAcert: Fax: 01805 – 861 8002*
pub 1024D/65D0FD58 2003-07-11 [expires: 2033-07-03] Support: Montag 07:00 – 20:00 Uhr, Dienstag-Freitag: 07:30 – 20:00 Uhr,
Samstag 09:00 – 14:00 Uhr
Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58
(* 14 Cent/Min. aus dem dt. Festnetz, max. 42 Cent/Min. aus dem dt. Mobilfunk)
uid CA Cert Signing Authority (Root CA) <gpg@cacert.org> in Österreich, der Schweiz und weiteren Ländern
E-Mail: computec@dpv.de
Tel: +49 911 – 993 990 98
Rechtliches Fax: +49 1805 – 861 8002
Support: Montag 07:00 – 20:00 Uhr, Dienstag-Freitag: 07:30 – 20:00 Uhr,
COMPUTEC MEDIA ist nicht verantwortlich für die inhaltliche Richtigkeit der Anzeigen und Samstag 09:00 – 14:00 Uhr
übernimmt keinerlei Verantwortung für in Anzeigen dargestellte Produkte und Dienst- Abo-Infoseite http://shop.computec.de
leistungen. Die Veröffentlichung von Anzeigen setzt nicht die Billigung der angebotenen Abo-Bestellung http://shop.linux-magazin.de
Produkte und Service-Leistungen durch COMPUTEC MEDIA voraus. Sollten Sie Beschwerden
zu einem unserer Anzeigenkunden, seinen Produkten oder Dienstleistungen haben, möch- Pressevertrieb DMV Der Medienvertrieb GmbH & Co. KG • Meßberg 1 • 20086 Hamburg
ten wir Sie bitten, uns dies schriftlich mitzuteilen. Schreiben Sie unter Angabe des Magazins, https://dermedienvertrieb.de
in dem die Anzeige erschienen ist, inklusive der Ausgabe und der Seitennummer an: CMS Druck EDS Zrínyi Zrt., Nádas utca 8, 2600 Vác, Ungarn
Media Services, Franziska Behme, Anschrift siehe oben rechts.
Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung für die Unix-ähnli-
chen Betriebssysteme verschiedener Hersteller benutzt. Linux ist eingetragenes Marken-
zeichen von Linus Torvalds und wird in unserem Markennamen mit seiner Erlaubnis ver-
wendet.
Eine Haftung für die Richtigkeit von Veröffentlichungen kann trotz sorgfältiger Prüfung
durch die Redaktion vom Verlag nicht übernommen werden. Mit der Einsendung von Deutschland:
Manuskripten gibt der Verfasser seine Zustimmung zum Abdruck. Für unverlangt ein- 4PLAYERS, AREAMOBILE, BUFFED, GAMESWORLD, GAMESZONE, GOLEM, LINUX-COMMUNITY,
gesandte Manuskripte kann keine Haftung übernommen werden. Das Exklusiv- und LINUX-MAGAZIN, LINUXUSER, N-ZONE, GAMES AKTUELL, PC GAMES, PC GAMES HARDWARE,
Verfügungsrecht für angenommene Manuskripte liegt beim Verlag. Es darf kein Teil des PC GAMES MMORE, PLAY 4, RASPBERRY PI GEEK, VIDEOGAMESZONE
Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in irgendeiner Form Marquard Media Hungary:
vervielfältigt oder verbreitet werden. JOY, JOY-NAPOK, INSTYLE, SHOPPIEGO, APA, ÉVA, GYEREKLÉLEK, FAMIILY.HU, RUNNER`S WORLD

12.2023 www.linux-magazin.de 97
Vorschau
auf 01/2024
Die nächste Ausgabe
erscheint am 01.12.2023

3R com
c m
BITTE BEACHTEN SIE:

23RF.
Identity Management
12
hov / 1
Aufgrund einer Umstellung beim Vertrieb
Für das Verwalten digitaler Identitäten acchov
ga
g
© dollg erscheint das Linux-Magazin ab sofort am
existieren in der Open-Source-Welt ver- ersten Freitag statt wie bislang am ersten
schiedene Lösungen, die teils auch als Donnerstag eines Monats.
gehostete Services angeboten werden.
Der Schwerpunkt der nächsten Ausgabe
des Linux-Magazins beleuchtet dieses Fingerpointing Malen nach Zahlen
Thema näher und stellt Keycloak vor, das
ein Identitäts- und Zugangsmanagement Die Setups in der IT werden stetig kom- Hinter allen Tricks, Bilder mittels Filtern
für moderne Anwendungen und Dienste plizierter, für das gewünschte Ergebnis zu schärfen und zu schönen, steckt pure
mit Single Sign-on ermöglicht. Als Alter- müssen immer mehr Komponenten zu- Mathematik. Wir erläutern anhand zahl-
native untersuchen wir im selben Artikel sammenspielen. Geht etwas schief, führt reicher Beispiele, wie solche Filter funk-
Octa, eine Identity-Management-Platt- das oft dazu, dass sich niemand verant- tionieren, wie sie aufgebaut sind und wie
form, die damit wirbt, sich benutzer- wortlich fühlt und stattdessen alle mit dem sie sich in Python implementieren lassen.
freundlich, herstellerneutral und nahtlos Finger auf die anderen deuten. Wir zeigen, Unter anderem machen wir damit ein
in jeden Tech-Stack integrieren zu lassen. wie man dieser Sackgasse entkommt. verblichenes Notenblatt wieder leserlich.

LinuxUser 12/2023 erscheint am 17.11.2023

Wissen verwalten Breitbandmessung


Um perfekt informiert zu sein, muss man Bei Problemen mit dem Internet-Zugang
nicht alles wissen – aber man muss zu- wimmeln Anbieter erboste Kunden gern
mindest wissen, wo es steht. Anwendun- ab. Damit Sie Übertragungsraten gerichts-
gen zum Wissensmanagement helfen fest belegen können, stellt die Bundes-
dabei, Informationsschnipsel aller Art zu netzagentur eine spezielle Prüfsoftware
erfassen und zu organisieren. Wir stellen zur Verfügung. Damit stellen Sie schnell
Ihnen die besten Anwendungen für die- fest, ob Sie Ihren Vertrag kündigen oder
sen Zweck ausführlich vor. das Entgelt mindern können.
© Jacekkita / 123RF.com

JETZT REGELMÄSSIG PER POST


IM ABO OHNE VERPFLICHTUNG
Jahres-Abo
12 Ausgaben
nur 112,00 €
15 % Rabatt (auch als Magazin-Variante ohne DVD bzw. mit Jahres-DVD
erhältlich – mehr unter shop.linux-magazin.de)

Telefon: 0911 / 993 990 98 Fax: 01805


5/8
866 1180
80 0
02
2 E-Mail: ccomputec@dpv.de
Bequem online bestellen: shop.linux-magazin.de

Das könnte Ihnen auch gefallen