Sie sind auf Seite 1von 94

Anzeige:

07/19

Die Suche nach dem


Flaschenhals Cloud-Security Log-Sammler
Wer Anwendungen ausla- Kaum Aufwand und sogar
Großer Vergleichstest: Benchmark-Tools gert, muss deren Sicherheit als Webapp: System-Mel-
für Festplatten und SSDs S. 52 neu konzipieren S. 69 dungen zentralisieren S. 63

Irre gut getestet


Wege, um Software den nötigen Reifegrad zu verpassen
n Ein Muss: Statische Code-Analyse S. 22
n Bessere Unittests für C++-Code S. 28
n Selbst veranstaltete Chaos-Tage für
die eigene IT-Infrastruktur S. 36
n M
it Karma: Javascript durch Unmengen
Webbrowser schießen S. 42
n D
ie Testkonzepte der Kernel-
Community S. 46
n R
eal-World-Checks für Go-
Programme S. 82

n Einfache
Betriebssystem-
Automation per FAI S. 64
n Orion:
Eclipse-IDE in der
Server-Variante S. 78
Denver-Plan: Open Stack Foundation weitet ihr Interesse auf die ganze IT-Infrastruktur aus S. 20

Deutschland Österreich Schweiz Benelux Spanien Italien


www.linux-magazin.de 4 6,90 4 7,80 sfr 11,50 4 8,20 4 8,90 4 8,90 4 192587 306906 07
07/2019
Editorial
Gebannte Blicke

Login
www.linux-magazin.de
3

Das richtige Händchen bei der Gründung eines Firma zu haben, ist nicht
selbstverständlich. Neben das Auswahl einer lukrativen Branche gilt es
auch, das Risiko der Unternehmung zu bewerten. Wer sich zum Beispiel
auf die Produktion von Anreicherungsturbinen für Uran eingeschossen
oder bolivianische Drogenkartelle als Hauptabnehmer hat, muss mehr
Störungen seiner verdienstvollen Tätigkeit befürchten als jemand, der
die Weltherrschaft in der Schnürsenkel-Branche anstrebt.

Doch selbst risikoscheue Firmen kann ein Bann wie der Blitz aus heiterem
Himmel treffen, der die Umsätze einbrechen lässt. Denn mittlerweile ist
es nicht mehr nötig, etwas Schlimmes zu verkaufen; es genügt die Fähig-
keit, dies zu können. Das jüngste Beispiel dafür ist schnell zu finden, aber
schwierig auszusprechen: Huawei.

Der chinesische Technolgiekonzern ist auf eine US-Sanktionsliste geraten,


Jan Kleinert, Chefredakteur
die sich aus Donald Trumps ausgerufenen Telekommunikationsnotstand
ergibt. „Telekommunikationsnotstand“ klingt nach einem verstopften
präsidialen Twitter-Kanal. Doch so ulkig ist das für Huawei nicht, wenn sich von dem Konzern seine Technolgie-
Zulieferer abwenden: ARM, Qualcomm, Intel (Chips) sowie Google (Android) und Microsoft (anderes Zeugs).

Der Vorwurf der US-Regierung: Huawei könnte in ihre Mobilfunk-Netztechnik Hintertüren einbauen. Dafür,
dass die Firma, die der chinesischen Regierung nahestehen soll, tatsächlich Spähsoftware ausliefert, gibt es
keinen Beweis. In einem Rechtsstaat würde man wohl die Unschuldsvermutung ansetzen, ein Privileg, das die
US-Firma Cisco ungleich schwerer geltend machen kann. Die musste im Jahr 2014 einräumen, dass hinter dem
Port 32 764 vieler ihrer Router eine Backdoor eifrig klappert.

Huaweis Behandlung als Aussätzige bietet zudem Gelegenheit, Androids angeblich umfassenden Freiheitsrechte
für Benutzer zu betrachten. Offenbar ist es so, dass trotz GPL und Apache-Lizenz bei Smartphone-Herstellern
in der Praxis das Licht ausgeht, wenn Google sein fütterndes Händchen ängstlich zurückzieht.

Was können künftige Firmengründer aus dem Vorfall lernen? Schneidet eure Produkte und Dienstleistungen so
zu, dass ihr Alternativen habt, wenn es dumm oder wenn Trump kommt. Freier Zugang zur Technik und deren
Offenheit schützen vor Unbill und sichern eine dauerhafte Geschäftstätigkeit. Dass dies nach freier Software
klingt, ist kein Zufall. Und dass Huawei fieberhaft an eigenen Betriebssystemen arbeitet, auch nicht.

Wat dem Unternehmen sin Uhl’, ist dem Staat sin Nachtigall: Gerade hat Südkoreas Regierung angekündigt,
ihre Ministerien Zug und Zug auf Linux-Clients umzustellen. Mit Blick auf Münchens rückabgewickelte Linux-
Migration mag mancher einwenden, die Leute in Seoul lebten wohl etwas hinterm Mond.

Sollte das so sein, dann sind sie dort selber hingeflogen: Südkorea hat unter den OECD-Staaten die höchste
Rate von Absolventen in Naturwissenschaften und Ingenieurswesen, gibt mit 4,3 Prozent seines Brutto-
Inlandsproduktes mehr für Forschung und Entwicklung aus als jeder andere und führt den Bloomberg Innovation
Index an. Dass das Land das schnellste Internet der Welt besitzt und seit 2001 einen zweiten, funktionierenden
Hauptstadt-Flughafen, kann nun kaum mehr überraschen.
07/2019
Inhalt
07/2019

4
www.linux-magazin.de

Wo Entwickler arbeiten, passieren Fehler – zwei Stück pro 1000 Zeilen Code sind normal,
aber nicht akzeptabel. Das wirksamste Mittel dagegen ist testen, testen, testen. Der
Schwerpunkt dieser Ausgabe pickt sich funktional besonders aussichtsreiche, technisch
interessante und im Alltag gut handhabbare Aspekte heraus.

Aktuell Titelthema: Irre gut getestet

6 News
n Fedora 30 bringt System Roles

n KDE Partition Manager 4.0

n Firefox' Armagadd-on 2.0:

n Bei Qemu ist mehr ARM drin

n Windows Subsystem 2 für Linux

n RHEL 8 geht in Boston vom Stapel

Hinter Karma stehen testbereit ganze Heerscharen von Browsern diverser Plafformen.

Red-Hat-CEO Jim Whitehurst und IBM-Chefin 22 Statische Code-Analyse 42 Karma für Javascript
Titel
Ginni Rometty beim Red Hat Summit. Reviews und gute Code-Analysetools Web-Code automatisch testen.
sind ein Muss für sichere Software.
12 Zahlen & Trends 46 Kern-Technik – Folge 104
n Matrix.org zieht Lehren aus Attacke 28 Unittests für C++ Das Testkonzept der Kernel-Community
n Debian: Habemus DPL Die besten Programme entstehen, wenn sorgt für eine sehr niedrige Fehlerrate.
n Flow schwenkt auf Open Source der Entwickler die Tests dafür selbst
n Yelp gibt Bento frei programmiert – und zwar vorab.
n Einbruch in Docker-Hub-Datenbank

n Urban Computing Foundation in Bau 36 Stresstest für Infrastrukturen


Bevor es Fremde tun, sollte der Admin
selbst den wichtigen Teilen seiner IT
harte Chaos-Tage verordnen. So geht das: Selbsttests im Kernel aktivieren.

Doppelseitiger
Uber bringt Kepler.gl in die Stiftung ein, das DELUG-DVD Datenträger, S. 51
Geodaten visualisieren kann.

18 Kernel-News
Fedora 30 64 Bit Susecon 2019
Mit Gnome 3.32, Bash 5.0, GCC 9, 3,5 Stunden Nashville-Sound:
Kernel 5.1: »a.out« fliegt raus, »io_uring« PHP 7.3 und schnellerem DNF. Neun Keynote-Videos von Suses
kommt an Bord, Teo macht die Pausen. Bootet von der A-Seite der DVD Entwicklerkonferenz im April

Pop OS 19.04 64 Bit E-Book mit Karma


20 Open Infrastructure Summit Workflow-optimiertes, stylisches Die Masterarbeit „Javascript Test
Foundation erklärt in Denver, warum der Derivat von Ubuntu 19.04 unter Runner“ erklärt Design und die
Mithilfe eines 5er Kernels Implementierung von Karma
Open Stack Summit jetzt anders heißt.
07/2019
Inhalt
07/2019
52 Auf Herz und Nieren 69 Sicher in den Wolken 78 Sternzeichen Entwickler
5

www.linux-magazin.de
Benchmark-Werkzeuge helfen Linux- Wie sichern Admins ihre Services in Eclipse, die Lichtgestalt unter den
Admins dabei, Probleme und Engpässe der Wolke effizient gegen Attacken IDEs, ist bei Entwicklern beliebt, bei
im Zusammenhang mit Massenspei- ab? Der Artikel weist Wege und erklärt Admins weniger. Der Aufstieg von
cher genauer und früher zu erkennen. funktionierende Strategien. Orion könnte diesen Mangel beheben.

Software Sysadmin Know-how

51 Einführung 63 Einführung 77 Insecurity Bulletin


Titel
In eigener Sache: DELUG-DVD. Aus dem Alltag eines Sysadmin: Log- Schwachstellen bei der Implementierung
Management per Log2ram und Frontail. von E-Mail-Signaturen.
52 Bitparade
Titel
Der große Vergleichstest untersucht 64 IT-Automation in der Praxis
Titel
Benchmark-Tools, die Leistungswerte FAI installiert Betriebssysteme einfach,
von HDDs und SSDs erfassen. schnell und vor allem massenhaft.

Mit gefälschter Unterschrift durchgekommen?

Programmieren
FAI setzt Pxelinux aufs Gleis, das automatisch
in einen Installer startet. 78 Eclipse Orion
Titel
Iozone liefert in Richtung Terminal eine Die Eclipse-IDE ist für Arbeitsgruppen
enorme Informationsvielfalt 69 Ratgeber Cloud-Security schwer zu administrieren. Die Server-
Titel
Wie Admins sich gegen Angriffe in AWS & Variante Orion hat das Problem nicht.
60 Tooltipps Co. wappnen
Im Kurztest: Ddgr 1.6, Mtag 2.2.4, Uritool
1.0.0, Guider 3.9.5, LF r12, Termshark 1.0.0.

Die Einstiegsseite des Orion-Demo-Servers.


Kali Linux ist, in der Cloud als VM aufgezogen,
ein effizientes Pen-Testing-Tool.
82 Snapshot
Termshark als Wireshark-Alternative. Michael Schilli zeigt eine Testsuite, die
Forum Go-Programme unter Simulation realer
Bedingungen testet.
Service 74 Recht
3 Editorial Das deutsche Bundeskartellamt prüft
Vergleichsportale im Internet.
86 IT-Profimarkt
88 Veranstaltungen 76 Bücher
88 Inserenten Eine Einführung zu
Software Defined Net-
89 Impressum
working und ein Werk Mit Mocking und Dependency Injection laufen
90 Vorschau über neuronale Netze. Tests sogar ohne Netz.
07/2019
Aktuell

News
News
www.linux-magazin.de

Red Hat lässt RHEL 8 vom Stapel

Mit dem Slogan „Control,


Confidence, Freedom“ starte-
te Red Hat Anfang Mai beim
Firmen-Summit 2019 den Ver-
trieb der neuen Version seines
Basisprodukts Red Hat Enter-
prise Linux (RHEL). Für die
Bühne in Boston waren neben
Red-Hat-CEO Jim Whitehurst
auch Ginni Rometty von der
Konzernmutter in spe IBM so-
wie der Microsoft-Chef Satya
Nadella gebucht.
Fast fünf Jahre hat Raleigh

© Red Hat
sich zwischen RHEL 7 und 8
Zeit gelassen – deutlich mehr
als ursprünglich geplant. Red-Hat-CEO Jim Whitehurst und IBM-Chefin Ginni Rometty beim Red Hat Summit in Boston.
Künftig will die Firma alle drei
Jahre eine neue Haupt- und Dem Enterprise-systembe- tät bedachten Rest der Linux- Policy) und eine Menge wei-
alle sechs Monate eine kleine dingten Problem der altern- Distribution. terer Dienste und Tools. Die
Version herausbringen. Fürs den Software begegnet das Weitere Neuzugänge sind das prominentesten Abgänge be-
Upgrade von 7 auf 8 müssen Neugeborene mit den so ge- als SaaS ausgeführte Überwa- treffen Btr-FS und KDE. Zeit-
Subscription-Kunden laut ei- nannten Application Streams chungs- und Expertensystem gleich mit RHEL 8 verkündet
nem Firmensprecher nicht – in ihnen aktualisieren die Insights, ein über den Port Red Hat die Verfügbarkeit des
mehr zwingend eine Neuin- Paketmaintainer schnellle- 9090 erreichbares Admin-GUI abgeleiteten Universal Base
stallation vornehmen, son- bige Sprachen, Frameworks (Linux Web Console), ein Image, ein Userspace-Image,
dern dürfen dem Pfad einer und auch Entwicklertools systemweiter Verschlüsse- um Container zu bauen, die
Inplace-Migration folgen. häufiger als den auf Stabili- lungsumschalter (Encryption Red-Hat-zertifiziert sind. n

Fedora 30 bringt Linux System Roles


Die Workstation-Fassung des vorgang haben die Entwickler Linux-Kernel werkelt im Hin- richtet sich die Workstation-
neuen Fedora nutzt als Desk- weiter verbessert. tergrund in Version 5.0. Fassung an Desktop-Nutzer.
top-Umgebung standardmäßig Zur Software-Grundausstat- Die Server-Ausgabe bietet die Der Fedora Server vereint die
Gnome 3.32. Dank besser ge- tung gehören unter anderem Linux System Roles, einen vormals Server und Cloud ge-
packter Metadaten arbeitet GCC 9, die Bash 5.0 und PHP Satz mit Rollen und Modulen nannten Versionen. Core OS
die Paketverwaltung via DNF 7.3. Fedora 30 nutzt zudem für Ansible, über die Adminis- ersetzt den vormals angebo-
schneller. Der Bootmanager nicht den Dbus-Daemon, tratoren die Konfiguration von tene Atomic Host. Genau wie
folgt der Boot Loader Speci- sondern den Dbus-Broker zur mehreren Systemen automati- sein Vorgänger ist Core OS für
fication der Systemd-Macher. Interprozesskommunikation. sieren können. den Betrieb in der Cloud ge-
Den mit der Vorversion ein- Die neue Implementierung Mit Fedora 30 ändern sich dacht, allerdings bislang noch
geführten flackerfreien Start- soll schneller arbeiten. Der auch die Varianten: Weiterhin nicht erhältlich. n
07/2019
Aktuell
KDE Partition Manager 4.0 nutzt Kauth Support für Ubuntu 14.04 LTS beendet

News
Nach rund eineinhalb Jah- der nicht gepflegten Libata- Wer noch auf Ubuntu 14.04 zum endgültigen End-of-Life
ren Entwicklungszeit ist der smart auf die Smartmontools mit Langzeitsupport (Trusty im April 2022 sicher weiter-
KDE Partition Manager in portiert. Die beiden Ports ver- Tahr) setzt, sollte sich rasch zubetreiben.
Version 4.0 erschienen. Als helfen KPM Core und dem etwas einfallen lassen: Der Wer weiterhin den kosten-

www.linux-magazin.de
7
Highlight der neuen Version KDE Partition Manager zu Standardsupport für die Dis- losen Standardsupport für
präsentieren die Entwickler mehr Portabilität, heißt es. In tribution ist seit Ende April Ubuntu in Anspruch neh-
die Verwendung des Kauth- naher Zukunft könne es daher beendet. Wie der Name ver- men möchte, muss entweder
Framework. Damit sei es auch einen Port zu Free BSD rät, ist Ubuntu 14.04 im April auf die nächst jüngere LTS-
nicht länger nötig, das gra- geben. 2014 erschienen, genau ge- Version wechseln (Ubuntu
fische Nutzerinterface (GUI) Zu den weiteren Neuerungen nommen am 17. April. Der 16.04) oder gleich weiter auf
als Root laufen zu lassen. Das zählt ein verbesserter Support offizielle Supportzeitraum galt die aktuelle LTS-Version 18.04
GUI als unprivilegierter Nut- für Luks2. Bei Luks2-Contai- bis April 2019. springen. Den Upgrade-Pfad
zer funktioniere auch beim nern ließe sich jetzt die Grö- Unternehmen, die mehr Zeit von einer LTS-Version zur
Wayland-Port, heißt es in der ße ändern, vorausgesetzt sie benötigen und weiter auf nächsten unterstützt Cano-
Ankündigung. nutzen keine speziellen Fea- 14.04 setzen wollen, können nical offiziell, er funktioniert
Im Zuge der Umstellung auf tures, heißt es. Die Entwickler über Ubuntu Advantage eine in der Regel reibungslos. Die
Kauth sei auch das KPM-Core- nennen in ihrer Ankündigung Extended Security Maintai- aktuelle Version 18.04 erhält
Backend von Libparted zu Sf- noch verschiedene Bugfixes nance erwerben, die dann Standard-Support bis April
dis portiert worden. Und auch und einen erweiterten Einsatz sofort einspringt. Damit ist 2023, End-of-Life hierfür ist
SMART.-Code habe man von moderner C++-Features. n es möglich, Ubuntu 14.04 bis im April 2028. n

Anzeige
07/2019
Aktuell

Armagadd-on 2.0: Firefox deaktiviert Add-ons


News

Wer Anfang Mai Firefox star- nur zu Verlusten ihrer Konfi-


tete, konnte eine Überra- guration, die Neu-Installation
schung erleben: Zahlreiche scheiterte aber.
zentrale Add-ons, aber auch Schuld war, wie sich schnell
www.linux-magazin.de

8
das Suchen und Sprachpakete herausstellte, ein nicht ver-
funktionierten plötzlich nicht längertes Zwischenzertifi-
mehr und ließen sich auch kat. Das Mozilla-Projekt hat
nicht mehr neu installieren. die Verlängerung offenbar
Schuld war ein abgelaufenes schlicht vergessen. Ist die-
Zwischenzertifikat. ses lokale Zertifikat abgelau-
Das passende Motto für die fen, und das passierte in der
Add-on-Krise war schnell ge- Nacht auf den 4. Mai, lässt

© Mozilla
funden: Armagadd-on 2.0. So sich die Vertrauenswürdigkeit
jedenfalls steht es unter ande- von Mozillas Add-ons nicht Wer das Studien-Feature vorübergehend aktivierte (oder niemals deaktiviert
rem im Bugreport des Mozil- mehr überprüfen. Diese ge- hatte), erhielt ein Hotfix für das Problem.
la-Projekts. Die Krise wurde währleistet ein Zertifikat auf
sichtbar, als Firefox per Info- dem Add-on-Server, das sich Erweiterungen. Auf zahlrei- allen Browsern funktionierte.
balken meldete, dass einige allerdings dank des abgelau- chen Tech-Seiten häuften sich Wer die Studien-Option akti-
Add-ons deaktiviert worden fenen Zwischenzertifikats Berichte über das Problem. vierte, konnte den Hotfix er-
seien. Nutzer fanden dann nicht mehr verifizieren lässt. Auch andere Projekte waren halten und das Zertifikat so
die meisten zentralen Add- Die Add-ons stellen dann die indirekt betroffen: So war im verlängern. Mittlerweile ist
ons außer Funktion, darunter Arbeit ein. Tor Browser, der auf Firefox Firefox 66.0.4 erschienen, die
Adblocker, Anti-Tracking-Er- Das blieb nicht lange unbe- basiert, das Noscript-Add-on neue Version soll das Problem
weiterungen, Rechtschreib- merkt, denn viele Firefox- deaktiviert. auf Firefox für den Desktop,
prüfungen und so weiter. Nutzer verwenden den Zunächst gab das Projekt über die Android-Versionen und
Versuche, diese neu aus dem Browser gerade wegen seiner ein Studien-Feature einen Hot- die ESR-Version beheben.
Netz zu installieren, führten Adblock- und Anti-Tracking- fix heraus, der aber nicht mit Auch Tor ist gepatcht. n

Linux Station von QNAP bekommt Ubuntu-Update

Die Linux Station von QNAP 18.04 LTS alias Bionic Beaver zugreifen und sollen von er- Die Linux Station kann mit
bekommt als Software-Update spendiert. Nutzer können so höhter Sicherheit profitieren, mehreren Ubuntu-Versionen
die Unterstützung von Ubuntu auf die Gnome-Umgebung teilt der Anbieter mit. ausgerüstet werden. Der Nut-
zer schließt über den HDMI-
Anschluss einen Monitor an
das NAS von QNAP an, nebst
Tastatur und Maus. Damit
wird die Station zum abge-
speckten Linux-Rechner.
Ubuntu 18.04 kommt als
Kylin-Ausführung auf die
Station, lässt der Hersteller
wissen. Nutzer können dann
diverse Anwendungen aus
dem Software-Center installie-
ren, darunter Libre Office und
Inkscape. Außerdem unter-
stütze die Linux Station eine
© QNAP

Remote-Desktop-Verbindung
QNAP-NAS im Einsatz als Linux Station. mit Audio-Ausgabe. n
07/2019
Aktuell
Nextcloud bringt Machine Learning und ACLs

News
Nextcloud 16 verbessert die App kontinuierlich auf drei In- nen Dateien und Verzeichnis- allen Dateien und Ordnern da-
Security und das Teilen mit stanzen. Sie funktioniert um- se zu behalten. rin spezifische Zugriffsrechte
Hilfe von Machine Learning. so genauer, je häufiger sich Nextcloud 16 führt diese Mög- verleihen. Wer viele Dateien
Damit will die Collboration- der Nutzer vom selben Ort lichkeit für Gruppenordner in seine Nextcloud schiebt,

www.linux-magazin.de
9
Suite nicht nur bösartige Log- aus anmeldet. ein: Der Admin kann mit ACLs stellt mitunter fest, dass die
ins entdecken, sondern auch Dateien zwar an unterschied-
Teilungsempfehlungen geben. lichen Orten im Filesystem lie-
Die gelten für Gruppen und gen, aber zum selben Projekt
Menschen, mit denen Nutzer gehören. Mit Projects lässt
häufiger Inhalte teilen. Auch sich einfacher feststellen, wel-
eine neue Empfehlungs-App che Dateien und auch Chats
ist an Bord. Sie weist den Nut- zu einem spezifischen Kun-
zer auf Dateien und Ordner den gehören.
hin, die er womöglich inter- Im ebenfalls neu eingeführ-
essant findet. Diese Empfeh- ten Privacy Center lässt sich
lungen basieren auf seinen nachschauen, wo die Daten

© Nextcloud
aktuellen Aktivitäten. der Nutzer liegen, wer Zugriff
Der Login-Schutz funktioniert darauf hat und welche Daten
so, dass die Suspicious Login KI: Das Training mit Logins soll verdächtige Anmeldungen erkennen. die Anwender teilen. n

Detection App standardmäßig


60 Tage lang erfolgreiche Neue Wege, auch in Unter-
Anzeige
Login-Versuche trackt und so nehmen Dateien zu teilen,
ein Modell trainiert. Basie- liefern die neuen Access
rend auf diesen Erfahrungen Control Lists. Sie erlauben
schreibt das trainierte Modell es dem Admin in klassischen
später Einträge von verdäch- Netzwerken, über eine fein-
tigen Anmeldeversuchen in granulare Rechtevergabe für
ein Log und informiert den Dateien, Ordner und Unter-
betroffenen Benutzer und den ordner die Kontrolle über die
Sysadmin. Getestet wurde die Zugriffsrechte auf die einzel-

Qemu verbessert ARM-Emulationen

Die Neuerungen in Qemu Kernel auf Wunsch oberhalb


konzentrieren sich vor allem der Speichergrenze von 4
auf die Emulation von ARM-, GByte. Hinzugekommen sind
MIPS-, PowerPC- und RISC-V- außerdem weitere ARMv8+-
Systemen. Die x86-Emulation Extensions. Neu ist die Emu-
unterstützt Intels Hardware lation von Musca- und MPS2-
Accelerated Execution (HAX) Rechnern.
jetzt neben Darwin auch auf Mit Qemu 4.0 erstellte vir-
anderen Posix-Systemen wie tuelle Maschinen nutzen
etwa Linux. standardmäßig jetzt die ma-
Virtuelle ARM-Maschinen ximale PCIe-4.0-Geschwindig-
dürfen jetzt mehr als 255 keit. »virtio-blk« unterstützt
GByte Hauptspeicher besit- »DISCARD« und »WRITE_ZE-
zen. Verbessert haben die ROES«, was SSDs entgegen-
Entwickler auch die Emu- kommt. Nicht mehr an Bord
lation der ARM-PMU. Auf sind Intels Memory Protection
Aarch64-Systemen startet der Extensions (MPX). n
07/2019
Aktuell

Kurznachrichten

Wordpress 5.2: Die Macher des populären CMS widmen die jüngste die Übertragungsrate nun angestiegen sein, zum anderen sei die Konfi-
News

Ausgabe dem Jazz-Bassisten Jaco Pastorius. Neu: Die so genannten guration von WLAN-Geräten nun genauer einstellbar. Lizenz: BSD-Lizenz
Site-Health-Funktionen ergänzen zwei Seiten, die typische Konfigurati- und ISC-Lizenz [https://www.openbsd.org]
onsfehler aufdecken. Zudem können Erweiterungen dort Debugging-In- GCC 9.1: Die nächste Major Release der GNU Compiler Collection verspricht
formationen für den Seitenbetreiber einblenden. Aktualisierungen lassen substanzielle neue Funktionen. Neu: Zu den Neuerungen zählen die Ma-
sich dank Signaturen nicht mehr einfach manipulieren. Sollte ein Plugin cher die nun nicht länger als experimentell gekennzeichnete Unterstüt-
www.linux-magazin.de

10 eine höhere als die genutzte PHP-Version erfordern, schließt es Wordpress zung von C++17. Das C++-Frontend implementiere nun die vollständige
automatisch aus. Wordpress selbst setzt ab sofort mindestens PHP 5.6.20 C++17-Sprache und der Support für die C++-Standardbibliothek sei nahezu
voraus. Lizenz: GPLv2 oder höher [https://de.wordpress.org] komplett. Ein neues Frontend für die D-Sprache ist ebenfalls dabei. Zudem
Tails 3.13.2: Rücksicht auf Privatsphäre und Anonymität verspricht The sei der Support für Open ACC 2.5 fast vollständig. Die Unterstützung für
Amnesic Incognito Live System, kurz Tails. Neu: Die neue Version bringt Open MP 5.0 dagegen ist als partiell gekennzeichnet. Lizenz: GPLv3 und
neben einem aktualisierten Tor Browser noch ein paar weitere Änderun- LGPL 2.1 [https://gcc.gnu.org]
gen mit. So entfernt die neue Version das Open-PGP-Applet und Pidgin Geany 1.35: Der Texteditor mit Funktionen einer integrierten Entwick-
aus dem Panel am oberen Rand. Beide sind weiterhin über den System lungsumgebung basiert auf Scintilla und dem GTK+-Toolkit. Neu: Während
Tray in der linken unteren Bildschirmecke zu finden. Des Weiteren las- die Kernversion unter anderem den Umgang mit IPC-Sockets verbessert,
sen sich zusätzliche Sprachpakete nachinstallieren, darunter auch für gibt es auch Änderungen an Plugins wie Geany VC und Vim Mode. Symbole
Deutsch, Italienisch und Französisch. Enthalten sind dabei Übersetzungen in Javascript, HTML, Cobol und Actionscript parst Geany nun deutlich
für Thunderbird und Libre Office sowie Wörterbücher. Lizenz: GPLv3 schneller. Nicht zuletzt sollen auch Massenersetzungen wesentlich zügi-
[https://tails.boum.org] ger vonstatten gehen. Lizenz: GPL [http://geany.org]
Open BSD 6.5: Sechs Monate nach dem Vorgänger erscheint eine neue Pop OS 19.04: Das von Hardware-Hersteller System76 gepflegte Linux
Version des Unix-Derivats. Neu: Die Entwickler proklamieren neue Fea- soll Software-Entwickler, Maker und Profis ansprechen. Neu: Als Basis
tures auf nahezu allen Ebenen. Eine Reihe von Treibern für verbesserten dient ab sofort Ubuntu 19.04, im Hintergrund werkelt ein Kernel der
Hardware-Support sind ein Teil davon. Dazu zählt ein Treiberpaket für 5.0-Reihe. Darüber hinaus lässt sich die Distribution erneut installieren,
Octeon-GPIO-Kontroller, das nun unter anderem automatisch die Zahl der ohne dass Anwender dabei ihre Daten und Konfigurationsdateien in ihrem
verfügbaren Cores anzeigt. Eine manuelle Einstellung der Bootparameter Heimatverzeichnis verlieren. Das mitgelieferte Theme kennt einen Slim
für den Wert »numcores« sei dennoch nötig, schreiben die Entwickler. Mode, der den Fenstern schmalere Titelleisten verpasst. Der neue Dark
Neue Treiber gibt es zudem für diverse Ethernet-Karten von Intel und Mode taucht den Desktop in dunkle Farben und soll vor allem das Arbei-
für Marvell-Armada-7K/8K-GICP-Controller. Verbessert haben die Open ten in den Abendstunden angenehmer machen. Lizenz: AGPLv3 [https://
BSD-Macher auch die Unterstützung für den WLAN-Stack. Zum einen soll system76.com/pop]

Microsoft zeigt Version 2 von Windows Subsystem für Linux IDE-Treiber fliegt
aus dem Kernel
Bei der Microsoft-Entwick- len auf der Kommandozeile vollständige Kompatibilität
lermesse Build hat der Soft- in Windows 10. Entwickelt für Systemaufrufe mit. Damit Die zuständigen Maintainer
warekonzern Anfang Mai hat Microsoft das Subsystem geht ein Novum einher. Ist Christoph Hellwig und David
das Windows Subsystem für zusammen mit Canonical. WSL 2 fertig, liefert Microsoft Miller haben den IDE-Treiber
Linux (WSL) in Version 2 Microsoft versteht das WSL erstmals einen Linux-Kernel offiziell für veraltet erklärt.
vorgestellt. Die neue Version als Toolset zum Testen von zusammen mit Windows aus. Er soll bis 2021 endgültig aus
soll Ende Juni verfügbar sein. Apps unter Windows 10. Den hat Microsoft aus den dem Kernel entfernt werden.
Das Windows Subsystem für In der neuen Version WSL 2 jüngsten stabilen Branches Wie Hellwig auf der Kernel-
Linux dient Entwicklern zum bringt die Software einen eige- von Kernel 4.19 gebaut und Mailingliste schreibt, ist die-
Ausführen von Linux-Befeh- nen Linux-Kernel und damit für die eigenen Zwecke an- ser Schritt überfällig.
gepasst, was Größe und Ge- Mit der Entfernung des alten
schwindigkeit betrifft. IDE-Subsystems bleibt der
Der Kernel erhält, unter Win- Support für die IDE-Schnitt-
dows 10, dann auch Support stelle allerdings erhalten. Es
über die Windows-Updates, übernimmt dann die Biblio-
teilt Microsoft mit. Außerdem thek Libata. Letztere ist in den
arbeite die neue Ausgabe meisten Linux-Distributionen
deutlich schneller als WSL 1. ohnehin schon seit vielen Jah-
Microsoft berichtet von zwan- ren die erste Wahl für ATA-
zigfacher Geschwindigkeits- Controller und -Geräte, und es
© Microsoft

steigerung beim Entpacken gibt diverse Treiber, die darauf


eines Tarball im Vergleich zu basieren. (Tim Schürmann/
Die WSL-2-Architektur im Überblick. Version 1. n jcb/jk/kki/uba) n
07/2019
Aktuell
Zahlen & Trends

Zahlen & Trends


www.linux-magazin.de

12

Post mortem: Matrix.org zieht Lehren aus dem Angriff

Sicherheitszwischenfälle kön- Modular.im-Hosts angesetzt. auf. Aufgrund eines falsch


nen auch ihre guten Seiten Die sollte die alte Infrastruk- ausgetauschten Cloudflare-
haben: Wenn die Opfer der tur ablösen, doch sie existier- API-Keys konnten sie noch
Angriffe ausführlich über ihre te weiter. ein Defacement der Webseite
Erfahrungen berichten, lernen Am 9. April warnte ein Si- starten, indem sie den DNS-
Admins etwas. So wie im Fall sollte später das Setup härten, cherheitsforscher, dass dem Eintrag von Cloudflare auf
von Matrix.org. In einem so was aber nie passierte. verwendeten Jenkins ein Si- eine Github-Seite umleiteten.
genannten Post mortem be- Das Team traf in der Eile ein cherheitsupdate fehlte. Als Auch dieses Problem ließ sich
richten die Macher des dezen- paar Entscheidungen, die ihm die Admins die Sache am noch recht schnell beheben,
tralen Kommunikationsnetz- später auf die Füße fielen: Da- 10. April anschauten, stellte indem das Team den tatsäch-
werks ausführlich über den zu gehörte zum Beispiel ein sich heraus, dass jemand die lichen Cloudflare-Admin-API-
Einbruch in den Home-Server. unsicher konfiguriertes SSH Lücke (CVE-2019-1003000) Key änderte.
Tatsächlich, und das ist dem statt VPN-Zugängen. Das ausgenutzt hatte, um auf Mittlerweile steht die Infra-
Projekt wichtig, basierte der Team verwendete Standard- einem Jenkins-Slave einen struktur von Matrix.org wie-
Angriff nicht auf Schwächen Debian-Images, die Root- eigenen SSH-Key zu instal- der auf festen Füßen – mit ei-
im Matrix-Protokoll, sondern access per SSH und SSH- lieren. Dank der schlechten nigen zentralen Änderungen.
auf einer veralteten Infra- Agent-Forwarding erlaubten. SSH-Voreinstellungen (SSH- So ist der SSH-Zugang stark
struktur. Zugleich setzte es auf ein Agent-Forwarding) gelangte eingeschränkt und mittels 2FA
Das gehackte Setup stammte offenes Jenkins, das übers In- der Angreifer dann auf die abgesichert, und Ansible ver-
demnach vom August 2017 ternet erreichbar war. anderen Hosts. waltet Secrets in einem ver-
und war Folge eines übereil- Wie so oft halten Proviso- Das Matrix-Team tauschte schlüsselten Vault. Buildkite
ten Umzugs aufgrund eines rien länger als geplant. Das daraufhin die Schlüssel aus, ersetzt Jenkins, und anstelle
auslaufenden Fundings. Den Matrix-Team erhielt einen Rie- isolierte alte Hosts und setzte von Wordpress als CMS ver-
Umzug der 30 Hosts umspan- senauftrag aus Frankreich und neue Hosts mit neuen Sec- wenden die Projektmitarbei-
nenden Infrastruktur über- versank über beide Ohren in rets auf. Am 11. April wur- ter nun eine simple statische
nahm das Team, das sich ge- Arbeit. Ein neues Ops-Team de schließlich die Nachricht Webseite. Gitlab löst Cgit ab,
wöhnlich um den Riot-Client wurde zwar etabliert, aber zum Security-Zwischenfall zudem gibt es eine neue und
und den Synapse-Server küm- direkt auf eine dringend be- veröffentlicht. Doch die An- neu abgesicherte Paketinfra-
mert. Ein reguläres Ops-Team nötigte neue Infrastruktur mit greifer gaben noch nicht struktur. n

Deutsche Rechenzentren effizient und zuverlässig

In einem Positionspapier stellt und 80 000 indirekte Vollzeit- einer hohen Energieeffizienz in nennenswertem Maße ge-
der Digitalverband Bitkom Arbeitsplätze. Die von funk- gäbe es aber beispielsweise nutzt worden sei, bemängelt
deutschen Rechenzentren ein tionierenden Rechenzentren bei der Nutzung von Abwär- der Verband. Der Bitkom for-
gutes Zeugnis aus: Sie seien komplett abhängige Internet- me noch großen Nachholbe- dert hier, die Abwärmenut-
sehr energieeffizient und ge- wirtschaft erziele alleine in darf. So seien in deutschen zung müsse regulatorisch ge-
hörten zu den zuverlässigs- Deutschland einen Umsatz Rechenzentren 2018 rund 12 fördert werden. Zudem tritt er
ten und vertrauenswürdigsten von über 100 Milliarden Euro Terawattstunden Strom ver- dafür ein, Rechenzentren von
der Welt. In deutschen Re- jährlich. braucht und als Wärme ab- der EEG-Umlage zu befreien,
chenzentren gäbe es, so der Der größte Kostenfaktor sei- gegeben worden, ohne dass die einen deutschen Standort-
Bitkom, rund 130 000 direkt en die Stromkosten. Trotz diese enorme Wärmemenge nachteil darstelle. n
07/2019
Aktuell
KDE Akademy 2019 kommt nach Mailand Debian hat einen neuen Projektleiter

Zahlen & Trends


Die KDE-Entwicklerkonfe- ge für Talks reserviert. Es fol- Mit Sam Hartman hat das De- Insgesamt standen vier Kan-
renz Akademy 2019 gastiert gen fünf Tage mit Workshops, bian-Projekt einen neuen Lei- didaten zur Wahl. Auf den
in Norditalien. Das haben die Birds of a Feather, Trainings ter bestimmt. Der Debian Pro- zweiten Platz kam Martin
Verantwortlichen bekannt und Coding-Sessions. Zudem ject Leader (DPL) ist auf ein Michlmayr, Platz drei beleg-

www.linux-magazin.de
13
gegeben. Die Konferenz fin- sollen die Entwickler sich per- Jahr gewählt. Sam Hartman te Jonathan Carter, Platz vier
det vom 7. bis 13. September sönlich kennenlernen. hat bei der Wahl die Mehrheit Joerg Jaspert.
an der Universität Mailand- Der KDE e.V. organisiert die der 378 abgegebenen Stim- Die Wahl hatte mit einer Ver-
Bicocca statt. Wie das KDE- Akademy zusammen mit der men auf sich vereint. zögerung begonnen, weil sich
Projekt mitteilt, sind für die Linux User Group der Univer- Debian nutzt für die Wahl anfangs keine Kandidaten
Konferenz zu Beginn zwei Ta- sität Milano-Bicocca. n die Condorcet-Methode. Die gemeldet hatten. Dann aber
einzelnen Ergebnisse sind platzte innerhalb weniger
unter [https://www.debian.org/ Stunden der Knoten, und es
vote/2019/vote_001] veröffent- stellten sich mehr Bewerber
licht. Die Vorstellung von Sam als in den vergangenen Jahren
Hartman für seine Kandidatur zur Wahl.
© CC BY 4.0, Ingride Costa

steht unter [https://www.debian. Mit dem Ende der Amtspe-


org/vote/2019/platforms/hartmans] riode des amtierenden DPL
ebenfalls bei Debian. Hart- Chris Lamb im April hat die
man ist seit dem Jahr 2000 Amtszeit für den Projektleiter
KDE-Entwicklertreffen 2018 in Wien. beim Projekt dabei. umgehend begonnen. n
07/2019
Aktuell

Yelp gibt Android-UI-Framework Bento frei


Zahlen & Trends

Die Empfehlungsseite Yelp In Bento sehen die Yelp-Ent-


gibt das Open-Source-Frame- wickler viele Vorteile. Es sei
work Bento frei, mit dem modular aufgebaut, einfach
sich modularisierte grafische zu testen, die Komponenten
www.linux-magazin.de

14
Oberflächen für Android ent- seien wiederverwendbar, es
wickeln lassen. lasse sich mit bestehenden
Benannt ist das Bento-Frame- Anwendungen kombinieren
work laut der Ankündigung und skaliere gut. Da Bento
von Yelp nach den gleichna- auf Type Annotations verzich-
migen japanischen Essensbo- te und nur wenige Klassen
xen, die die einzelnen Speise- mitbringe, sei es zudem recht
komponenten mit Hilfe von leichtgewichtig.

© Yelp.com
Trennwänden voneinander Ein Grund für die Publikation
separieren. Auch Apps seien dürfte sein, dass Yelp Ben-
häufig farbige Komponenten, Der Komponenten-Workflow in Bento. to weiterentwickeln möchte
arrangiert in einem Raster. Oft und Helfer sucht. Bento sei
handle es sich dabei um Kom- ren Views als Recyclerviews Viewpagers und Listview. nicht perfekt, heißt es in der
ponenten von Recyclerviews, anzeigen soll. Hier kommt Die Kombination aus View Ankündigung. So fehle ein
die Views für die Daten in ei- laut Yelp nun Bento ins Spiel. Types und ihrer Bedienlogik asynchroner Layoutaufbau,
ner Liste auf den Bildschirm Es soll in der Lage sein, ver- bezeichnen die Entwickler da- um einzelne Komponenten
bringen. schiedene View Types und bei als Komponenten. Wie das getrennt vom Hauptthread
Problematisch sei dies aber dynamische Positionen der funktioniert, zeigen die Grafik aufzubauen. Als Program-
dort, wo verschiedene Da- Views in einer Liste zu arran- und der Yelp-Blogpost [https:// miersprachen setzt Bento auf
tentypen ins Spiel kommen gieren. Das betreffe nicht nur engineeringblog.yelp.com/2019/05/ Kotlin und Java, als Lizenz
oder Android Daten in ande- Recyclerviews, sondern auch introducing-bento.html]. auf die Apache 2.0. n

Urban Computing Foundation für vernetzte Städte Ubuntu 19.10 heißt


Eoan Ermine
Die Linux Foundation will in der Energieversorgung. Die gung, das von Uber stammt.
mit der Gründung der Urban Foundation will dafür ein Fo- Es soll eine Visualisierung Das für Oktober erwartete
Computing Foundation Open rum darstellen und auch die von Geodaten ermöglichen, Ubuntu 19.10 trägt den Code-
Source Software für die Si- nötigen Tools anbieten. ohne große Programmierun- namen Eoan Ermine. Ein Er-
cherheit, die Infrastruktur Das erste Projekt, Kepler.gl, gen zu erfordern. Unterneh- mine ist ein kurzschwänziges
und die Mobilität in vernetz- stellt ein Tool für die geospa- men wie Airbnb nutzen Kep- Wiesel, während man Eoan
ten Städten voranbringen. Die tiale Datenanalyse zur Verfü- ler.gl bereits. n etwa mit Dämmerung über-
neue Stiftung für die urbanen setzten kann. Der Codename
Herausforderungen der Zu- tauchte noch vor der offiziel-
kunft hat Uber, Facebook, len Ankündigung von Ubun-
Google, Here Technologies, tu-Gründer Mark Shuttle-
IBM, Interline Technologies, worth in einem Bugreport bei
Senseable City Labs, Street- Ubuntu auf.
cred Labs und die University Ubuntu 19.10 ist die letzte Re-
of California San Diego als lease mit Halbjahressupport.
Gründungsmitglieder. Es folgt dann im Jahr 2020 mit
Zu den Zielen der Urban Ubuntu 20.04 die nächste LTS-
Computing Foundation zählt Version. Für die 19.10 werden
die Kompatibilität in den ver- dann der Kernel 5.3, Gnome
schiedenen Systemen, die ei- 3.34 und Mesa 19.2 erwartet
© Uber

ne moderne Stadt benötigt, sei sowie ein neuer Desktop-


es im Straßenbau oder auch Uber bringt Kepler.gl in die Stiftung ein, das Geodaten visualisieren kann. Installer. n
07/2019
Aktuell
Unternehmen tappen bei Daten im Dunkeln

Zahlen & Trends


Die amerikanische Firma zent) der gesamten Daten Zwar möchten fast alle Un- tisch. Zwar sind sich 76 Pro-
Splunk Inc., die sich darum eines Unternehmens um so- ternehmen (92 Prozent) mehr zent von ihnen einig, dass
bemüht, maschinelle Daten genannte Dark Data. über ihre Daten in Erfahrung der Wert ihrer Daten für den
für eine Auswertung zu er- Zwar glauben rund drei bringen, begeistert davon ist Gesamterfolg ihres Unterneh-

www.linux-magazin.de
15
schließen, hat jetzt eine Stu- Viertel der Befragten, dass aber nur gut die Hälfte. Fast mens sehr hoch ist. Trotzdem
die zu Dark Data veröffent- sich das Unternehmen mit ebenso viele unter den befrag- schätzt die Mehrheit der Be-
licht. Unter Dark Data sind der höchsten Datennutzung ten Führungskräften schätzen fragten aus Deutschland (58
Daten zu verstehen, von de- durchsetzen wird. Aber zu- sich selber als zu alt ein, um Prozent), dass über die Hälfte
nen Unternehmen entweder gleich räumt über die Hälfte noch neue Datenkompeten- ihrer Daten nicht erfasst oder
gar nichts wissen oder von der Verantwortungsträger ein, zen zu erwerben. Eine große genutzt wird – verglichen mit
denen zumindest unbekannt dass „Daten-bezogen“ in ih- Mehrheit sieht bei der Aus- 60 Prozent weltweit.
ist, wie sie zu finden und zu rem Unternehmen nur eine wertung von Daten ein be- Sie glauben nicht daran, dass
nutzen sind. Parole ist. Ein Drittel der Be- sonders großes Potenzial bei KI das Problem, dass es zu
Der Studie zufolge, für die fragten glaubt sogar, dass sie künstlicher Intelligenz. wenig Fachpersonal mit Da-
weltweit mehr als 1300 Füh- von 75 Prozent aller anfallen- Die vergleichsweise größten tenkenntnissen gibt, lösen
rungskräfte aus der Geschäfts- den Daten in ihrem Unterneh- Zweifel haben die Australier, kann, sie glauben auch nur
führung und der IT befragt men nichts wissen oder zu- die höchsten Akzeptanzra- bedingt an eine Revolution
wurden, handelt es sich bei mindest zu wenig, um davon ten erreicht China. Deutsche hin zu einer datengesteuerten
mehr als der Hälfte (55 Pro- profitieren zu können. Unternehmen sind eher skep- Zukunft. n

Einbruch in Docker-Hub-Datenbank
Docker meldete einen Ein-
bruch in eine Docker-Hub-
Datenbank, die Nutzerda-
ten und Repository-Tokens
enthielt. Auswirkungen habe
das vor allem auf Autobuild-
Nutzer. Potenziell betroffen
von dem Ende April bemerk-
ten Einbruch seien 190 000 die möglicherweise übernom-
Accounts. menen Github-Tokens und
Zu den kompromittieren Da- -Zugriffsschlüssel. Als Kon-
ten gehören unter anderem sequenz scheitern damit Au-
Benutzernamen, gehashte tobuilds, die sich auf Docker
Passwörter für einen kleinen Hub stützen.
Teil der betroffenen Nutzer Docker fordert die Nutzer
sowie Github- und Bitbucket- außerdem dazu auf, einen
Tokens, die einige Anwender Blick auf ihren Dienst zu
benötigen, um Autobuilds werfen und zu prüfen, ob es
anzuschieben. Die offiziellen unerwartete Zugriffe gegeben
Docker-Images, die viele An- habe. Zudem müssten be-
wender als Vorlage für Contai- troffene Nutzer Github- und
ner nutzen, seien nicht betrof- Bitbucket-Accounts unter Um-
fen, teilt Docker mit. ständen neu verlinken.
Docker ruft seine Nutzer in Was genau den Einbruch aus-
einer Mitteilung dazu auf, löste, wie der oder die Einbre-
umgehend ihre Passwörter cher vorgingen und wie Do-
auf Docker Hub zu ändern. cker ihnen auf die Spur kam,
Zugleich sperrte die Firma ist bislang aber unklar. n
07/2019
Aktuell

Flow wird Open Source


Zahlen & Trends

Die Programmiersprache und Fußabdruck zu entwickeln. Compiler Flowc mit, der ver- Zusammenarbeit in großen
App-Plattform Flow steht nun Mit ihr sollten sich komple- schiedene Zielplattformen ab- Teams und mit Designern und
unter Open-Source-Lizenzen, xe, aber einfach nutzbare und deckt (I-OS, Android, Linux, UI/UX-Experten spiele Flow
die Entwickler glauben dar- wunderschöne UIs entwickeln Windows, Mac). Inkrementell seine Stärken aus.
www.linux-magazin.de

16
an, dass die Welt eine weitere lassen. Im August 2010 lief bedeutet, dass der Compiler Den großen Vorteil gegenüber
Programmiersprache braucht. das erste Flow-basierte Pro- nicht in jedem Durchlauf den dem weit verbreiteten HTML
Flow ist eine funktionale gramm auf Flash- und HTML- kompletten Code übersetzt, 5 sehen die Entwickler dar-
Sprache. Zugleich dient sie als 5-Basis. 2013 (I-OS) und 2014 sondern nur Teile davon, was in, dass sich Flow weniger
Plattform, um Apps für Mobil- (Android) erschienen erste die Übersetzung deutlich be- stark verändere und zugleich
geräte und Desktoprechner zu schleunigt. weniger Code brauche. Eine
schreiben. Flow bevorzugt funktiona- Aufteilung in HTML, CSS und
Flow ist aber keine neue Pro- len Code, ähnelt syntaktisch Javascript sei nicht nötig. Zu-
grammiersprache. Laut Blog- aber C, um die Java- und Ja- gleich sei die Semantik ein-
post begann die Entwicklung vascript-Entwickler abzuho- facher als die von Javascript
bereits vor neun Jahren, also len. Es ist dabei recht flexibel: und Typescript.
2010. HTML 5 steckte noch Flow lässt sich auch mit Refe- Gegenüber Multiparadigmen-
in den Kinderschuhen, Adobe renzen und mit dynamischer Sprachen wie Java, C++ und
Flash war der Quasi-Standard. Typisierung verwenden. Swift habe Flow den Vorteil,
© Flow9.oorg

Flow entstand, weil die Ent- Die besondere Stärke liegt einfach zu sein. Es gebe kein
wickler wussten, dass Flash nach Meinung der Flow-Ent- Überladen, keine impliziten
sterben wird. Also suchten sie Tic Tac Toe braucht in React 112 Zeilen wickler in der Standardbiblio- Konvertierungen, Nullpoin-
nach einer Software, die alter- Javascript, 38 Zeilen HTML und 51 thek für grafische Oberflächen ter und kein Methode-Über-
nativ auf I-OS und Android CSS – in Flow genügen 83. namens Material, die sich an schreiben. Zugleich betrachte
läuft. Googles Material-Design- Flow HTML als erstes Target,
Haxe war der erste Kandidat, Apps, im November 2015 mi- Richtlinien orientiert. Es sei die anderen Sprache würden
lieferte auf den damaligen grierte Flow im Browser kom- die vierte Iteration dieser Art nur über Umwege im Browser
Smartphones aber nicht die plett auf HTML 5, weg von von Bibliothek. Weil sie über laufen. Als funktionale Spra-
gewünschte Performance. Al- Flash. Jahre hinweg entstanden sei, che ähnle Flow am ehesten
so entschied sich Area9, die Die statisch typisierte Pro- steckt in ihr eine Menge Er- ML, Ocaml und F#, die Syntax
Firma hinter Flow, eine Pro- grammiersprache beherrscht fahrung hinsichtlich der Be- sei aber an C angelehnt, was
grammiersprache für Smart- Typ-Inferenz und bringt den dürfnisse von Mobilplattfor- auch den größten Unterschied
phones mit möglichst kleinem inkrementell arbeitenden men. Insbesondere bei der ausmache. n

Huawei überholt Apple bei Smartphones Apache Foundation migriert auf Github

Dem weltweiten vierteljährli- den dritten Platz verdrängt. Die Apache Software Founda- den von der Apache Founda-
chen Bericht über den Smart- Huawei verkaufte 59,1 Mil- tion ist nun auf Github vertre- tion gepflegten Git- und SVN-
phone-Absatz von Markt- lion Geräte und legte dabei ten. Die Stiftung hat die Mig- Repositories. Das interne Git
forscher IDC zufolge, sind im Jahresvergleich um über ration seiner 350 Projekte er- wurde nun in Rente geschickt,
die Smartphoneverkäufe im 50 Prozent zu. Ganz anders folgreich abgeschlossen. Von nur ein Backup-Mirror läuft
ersten Quartal verglichen mit erging es Apple, das im Ver- der Zusammenarbeit wollen noch auf der Seite der Apache
dem Vorjahr um über 6 Pro- gleich mit dem Vorjahr satte Github und Apache profitie- Software Foundation.
zent zurückgegangen. 30,2 Prozent einbüßte und es ren. Github wird noch mehr Github-Eigner Microsoft ist
Spitzenreiter unter den Her- nur noch auf 36,4 Millionen zur zentralen Anlaufstelle für Platin-Sponsor der Apache
stellern bleibt, trotz eines Geräte brachte. Für andere Open-Source-Code, denn Apa- Foundation und zahlt jährlich
Rückgangs um 8 Prozent, Hersteller wie Xiaomi, Vivo che liefert rund 200 Millionen 125 000 US-Dollar ein. Github
weiter Samsung mit 71,9 oder Oppo sind insbesondere Zeilen davon. will mit Apache Dienste ent-
Millionen Geräten. Der neue die Märkte in China, Indien Dafür half das Unternehmen wickeln, die Apache-Program-
Zweitplatzierte ist nun Hua- und im asiatisch-pazifischen dem Projekt bei der Migrati- mierern dienen sollen. (jcb/
wei, das damit Apple auf Raum interessant. n on. Zuvor streckte der Code in kki/uba) n
07/2019
Aktuell

Kernel 5.1: »a.out« ist draußen, »io_uring« neu an Bord

Hop-on, hop-off
Kernel-News
www.linux-magazin.de

18
Kernel 5.1 bewältigt endlich gepufferte asynchrone Ein- und Ausgaben, mustert »a.out« aus, verbessert Fano-
tify, unterstützt kumulative Livepatches und ergänzt einen neuen Energiespar-Governor. Jörg Thoma, Kristian Kißling

Versuche, »aio« zu verbessern, führten


am Ende offenbar nicht zum gewünsch-
ten Erfolgserlebnis.
Im Kontrast dazu kommt »io_uring« auch
mit gepufferten Ein- und Ausgaben zu-
recht, was die überwiegende Zahl an
Usecases abdeckt. Solche ließen sich mit
dem alten System noch nicht asynchron
umsetzen.
In der Praxis nutzt das Interface zwei
Warteschlangen, eine Submission und
eine Completion Queue. In die Submis-
sion Queue schickt die Anwendung ihre
Anforderungen. Der Kernel arbeitet sie
© Mark Bowden, 123RF

im Laufe der Zeit ab und schiebt das Er-


gebnis in die Completion Queue. Details
warten unter [1]. Dank der Bibliothek
Liburing setzen Entwickler zugleich vor-
gefertigte »io_uring«-Instanzen auf und
Linus Torvalds hat die neue Version 5.1 Künftig wird es möglich, nicht-flüchtigen nutzen sie über ein simples API.
des Linux-Kernels freigegeben. Seit der NVDIMM-Speicher als Arbeitsspeicher
letzten Vorabversion seien zwar nur we- in das System einzubinden. Zwar laufen Initram-FS umgehen
nige Änderungen eingeflossen, einige die Zugriffe auf solche Laufwerke deut-
aber erst in letzter Minute, gab der Ker- lich langsamer ab, vergleicht man sie mit Eine weitere Neuerung: Beim Systemstart
nelchef auf der Mailingliste an. jenen auf flüchtigen Arbeitsspeicher. Sie dürfen Admins über den Device Mapper
Torvalds selbst ist diesmal an der Aus- sind dennoch schnell genug, um in eini- (DM) angesprochene virtuelle Block-
musterung des betagten Dateiformats gen Szenarien als Speichererweiterung zu orientierte Geräte auch außerhalb eines
»a.out« beteiligt. Längst haben das flexi- dienen, zum Beispiel auf Datenbankser- Initram-FS-Archivs adressieren. In die-
blere ELF (Executable and Linking For- vern oder als günstigere Alternative auf sen Archiven liegen gewöhnlich die für
mat) und Coff (Common Object File For- virtuellen Servern. den Start benötigten Dateien, zum Bei-
mat) »a.out« abgelöst. Moderne Compiler spiel die Basis-Treiber. Über einen nun
würden das Format ohnehin nicht mehr Endlich asynchron ergänzten Kernelparameter darf Linux
unterstützen, schreibt Torvalds. Er ent- ein DM-Dateisystem auch direkt starten,
fernte kurzerhand den entsprechenden Mit »io_uring« [1] landet eine hochper- etwa einen Raid-Verbund.
Core-Dump-Code, der Speicherabzüge formante Schnittstelle für asynchronen Mit Fanotify gibt es bereits seit Linux
generiert, sobald der Kernel abstürzt. Der Datenverkehr im neuen Kernel 5.1. Das 2.6.36 eine Schnittstelle, um Änderungen
Code sei laut Torvalds ohnehin kaum ge- bisherige asynchrone Interface »aio« fris- an Dateisystemen zu überwachen. Es gilt
pflegt und voller Bugs. tete aufgrund zahlreicher Einschränkun- als Ersatz für Inotify, das veraltet ist und
Vollends entfernen mochte er »a.out« je- gen eher ein Nischendasein. Zum einen auf großen Dateisystemen nur schlecht
doch nicht. Im eher unwahrscheinlichen kam es nur mit direkten Ein- und Ausga- funktioniert. Nun haben Entwickler die
Fall, dass Entwickler das Format doch ben zurecht (»O_DIRECT«), zum ande- Arbeit an Fanotify – nach einigen Anpas-
noch benötigen, lässt es sich wieder ak- ren blockierte es gelegentlich doch, weil sungen in Linux 4.20 – erneut aufgenom-
tivieren – notfalls auch im Userspace, wie es auf Metadaten wartete. Nicht zuletzt men. Über die Funktion »Super Block
Entwickler Alan Cox anmerkte. brachte es ein suboptimales API mit. Die Root Watch« [2] haben sie das Kernel-
07/2019
Aktuell
modul fit für die inzwischen immer grö- Bürde. Wenn etwa
ßer werdenden Datenträger und die dar- eine Funktion mehr-

Kernel-News
auf eingesetzten Dateisysteme gemacht. fach gepatcht wird
und der Entwickler die
Mit Teo abhängen Patches in einer be-
stimmten Reihenfolge
Ein eigenes Kernel-Subsystem (»cpuidle«) stapeln muss. Will er
beschäftigt sich mit der Frage, wie der ein älteres Patch aus

www.linux-magazin.de
19
Kernel seine freie Zeit am besten und dem Stapel entfernen,
– vor allen Dingen – am effizientesten setzt mitunter der
nutzt. Mit Teo, dem Timer Events Orien- Jenga-Effekt (Abbil-
ted Governor, erhält der Kernel 5.1 nun dung 1) ein und das
einen weiteren Modus für die Freizeitge- Konstrukt fällt in sich
staltung. Teo soll effizienter arbeiten als zusammen.
der Governor Menu, der bislang als erste Atomare Ersetzungen
Wahl für Tickless-Systeme gilt und am sollen das ändern. Sie
meisten Strom spart. erlauben es, kumula-
Kernelentwickler Rafael Wysocki hatte tive Patches anzubrin-
zwar einige Probleme mit Menu identi- gen. Die versammeln
fiziert. Diese zu beheben hätte allerdings alle erwünschten äl- Abbildung 1: Der Jenga-Effekt betrifft mitunter auch Patches.
womöglich legitime Workloads gestört, teren Änderungen in
also ergänzte er mit Teo kurzerhand ei- einem Superpatch, das sich leichter ver- Über den Eintrag »usbcore.authorized_
nen neuen Governor [3]. walten lässt. Steht das »Replace«-Flag in default=2« im Verwaltungsdateisystem
Dass das von Facebook entwickelte Datei- »struct klp_patch« auf »true«, leitet der Sys-FS schaltet der Admin künftig alle
system Btr-FS bereits seit einer Weile die Kernel alle Prozesse auf das kumulative externen USB-Laufwerke ab. Die internen
Zstd-Kompression nutzt, überrascht we- Patch um, sobald es eingepflegt ist. Die bleiben dabei online. Alternativ findet
nig. Schließlich wächst auch Zstd unter älteren Patches fliegen ebenso raus wie der Admin eine entsprechende Option in
Facebooks Fittichen heran. Überraschen- die Ftrace-Handler für die nicht mehr ver- der Anwendung USB-Guard.
der ist, dass Nutzer von Btr-FS bislang änderten Funktionen. Herunterladen lässt sich der Kernel 5.1
den Kompressionslevel nicht einstellen wie gewohnt auf [kernel.org]. n
konnten, was den Einsatz des Dateisys- Schutz für den Schutz
tems erschwerte.
Das soll sich nun dank der neuen Mount- Gegen Angriffe, die die Schutzmechanis- Infos
option »-o compress=zstd:level« ändern. men SMEP (Supervisor Mode Execution [1] »io_uring«: [http://kernel.dk/io_uring.pdf]
Die Commitnachricht verrät auch, wie Protection), SMAP (Supervisor Mode [2] Super Block Root Watch:
stark und in welcher Geschwindigkeit Access Prevention) sowie UMIP (User- [https://github.com/amir73il/fsnotify-utils/
die verschiedenen Kompressionslevel Mode Instruction Prevention) in CPUs wiki/Super-block-root-watch]
Dateien komprimieren, zum Testen dient ungewollt deaktivieren, gibt es neuer- [3] Neuer Menu-Governor:
der Silesia Corpus [4]. dings ein Patch. Das schaltet einfach die [https://lkml.org/lkml/2018/10/26/373]
Livepatching ist eine gute Sache, die Schreibfunktionen auf die CPU-Schalter [4] Silesia Corpus: [http://sun.aei.polsl.pl/
Komplexität gerät aber manchmal zur CR0 und CR4 ab. ~sdeor/index.php?page=silesia]
07/2019
Aktuell

Open Infrastructure Summit Ende April, Anfang Mai in Denver

Nachbarschaftshilfe
Open Stack
www.linux-magazin.de

20
Mit der Umwidmung des Open Stack Summit in Open Infrastructure Summit setzt die Open Stack Foundation
eine einladende Botschaft an das Ökosystem rund um ihre Cloudsuite ab. In Denver versuchte die Stiftung, die
Hinwendung zur Infrastruktur zu erklären, ohne Open Stack aus dem Fokus zu verlieren. Ulrich Bantle

übereinstimmend. Probleme für Anwen-


der würden entstehen, wenn sie versu-
chen Open-Source-Technologien für ihre
Bedürfnisse zu vermischen. „Wir verfü-
gen über eine riesige Community, und
Open Stack ist deren Zentrum“, sagte
Bryce. Es gäbe aber niemanden, der
ausschließlich Open-Stack-Code nutze,
sagte Bryce während einer Presserunde.
Deshalb seien die Zusammenarbeit und
eine reibungslose Integration von Open
Source Software so wichtig.

Projektpflege
Die Foundation gab auch bekannt, dass
mit Kata Containers und Zuul inzwischen
zwei Projekte den Status Confirmed OSF
Project erlangt haben. Die Open Stack
In Denver steht erstmals die Infrastruk- was sie für ihr Business benötigen, selbst Foundation führt beide Projekte damit
tur namengebend für den Summit. Ent- entwickeln zu wollen. ähnlich wie die Apache Foundation als
sprechend versuchte Jonathan Bryce, Top-Level-Projekte, die über eine aktive
Executive Director der Open Stack Foun- Funktionierende Strukturen Community verfügen, sich an Entwick-
dation (OSF), den Wert der an dieser In- lungsrichtlinien halten und eine funkti-
frastruktur teilnehmenden Projekte ins Das Kernthema des Summit, die Konzen- onierende Organisationsstruktur aufwei-
rechte Licht zu rücken. Für eine erfolgrei- tration auf die Infrastruktur, beschäftigte sen. Bereits beim Summit in Berlin hatte
che Zukunft müsse man funktionierende die Führungsriege der Stiftung durchge- die Führungsriege die Aufnahme von
Systeme durch Zusammenarbeit über hend. Jonathan Bryce und Mark Collier, neuen Projekten verkündet, falls diese
Communities, Länder und Unternehmen Chief Operating Officer der Foundation, sich unter die Obhut der Open Stack
hinweg entwickeln, sagte er bei seiner wurden nicht müde zu erklären, dass es Foundation begeben wollen.
Keynote im Colorado Convention Center. nicht darum gehe, Open Stack aus dem „Die Bestätigung unserer ersten beiden
Open Source sei keine Marketing-Initia- Fokus zu verlieren. Es habe sich gezeigt, Pilotprojekte steht für einen wichtigen
tive und kein Geschäftsmodell, es sei eine dass die wachsende Anwenderschaft Meilenstein der Foundation auf dem
Philosophie für Innovation. von Open Stack neue Usecases hervor- Weg zu einer umfassenderen Mission,
Technologie sei eben kein nachhaltiger gebracht habe, und damit seien einige nämlich der Unterstützung der offenen
Vorteil, auf dem ein Unternehmen auf- Lücken in der Funktionalität zu Tage Infrastruktur-Communities bei ihrer Zu-
bauen könne, warnte Jonathan Bryce: getreten. Diese Lücken versuche man sammenarbeit und ihrem Erfolg“, sagte
„Es gibt immer jemanden, der dich ko- zu schließen, sagte Collier, etwa in Rich- Alan Clark, Vorsitzender des OSF-Verwal-
piert, zu dir aufschließt und dich schließ- tung Edge Computing. Zu diesem Zweck tungsrats in Denver.
lich überholt.“ Deshalb sei die Kultur von unterstütze die Foundation Projekte und Jonathan Bryce erklärte, dass die Zahl
Open Source so wichtig. Firmen mögen nehme sie unter die Fittiche. der Projekte kein Gradmesser für den Er-
das verinnerlichen. Und sie sollten sich Das weitere große Anliegen sei die Zu- folg der Foundation darstelle. Die Orga-
von der unnötigen Bürde befreien, alles, sammenarbeit, sagten beide Vorstände nisation sei nicht daran interessiert, Dut-
07/2019
Aktuell
zende von Projekten zu starten, es gehe
darum, strategische Lücken zu schließen.

Open Stack
Stiftungsfragen
Canonical-Chef Mark Shuttleworth kri-
tisierte die Open Stack Foundation für
ihren Schritt hin zur Betreuung von Pro-

www.linux-magazin.de
21
jekten. Es gäbe zwischen den Stiftungen
einen Konkurrenzkampf um lukrative
Open-Source-Projekte mit zahlungskräf-
tigen Sponsoren, so Shuttleworth wäh-
rend seiner Keynote. Die Verantwortli-
chen der Open-Stack-Foundation wiesen
die Vorwürfe von Shuttleworth zurück. Abbildung 1: Der Marketplace des Summit, Treffpunkt für Firmen, Projekte und Besucher.
Es gäbe zwischen den Stiftungen keinen
Konkurrenzkampf, sagte Mark Collier, Der Anteil der Frauen unter den Besu- der Community in eine weitere für Open
Chief Operating Officer der Foundation, chern lag bei 11 Prozent. Nach ihren Stack in Zukunft vielversprechende Rich-
im Pressegespräch. Betätigungsgfeldern gefragt, antworteten tung: 5G. Der amerikanische Telekom-
Und es gehe auch nicht darum, Hunderte 20 Prozent der Besucher mit Cloud Ar- munikationskonzern AT&T hatte Airship
von Projekten zu akquirieren. Die beiden chitekt, 16 Prozent mit Upstream-Deve- zusammen mit Intel, SKT und der OSF
nun als Top-Level-Projekte aufgenomme- loper, 12 Prozent mit Sysadmin und 10 vor Jahresfrist als Open-Infrastructure-
nen seien etwa für das Ökosystem von Prozent mit Business Development und Projekt vorgestellt.
Open Stack wichtig. Er könne Shuttle- Marketing. 7 Prozent bezeichneten sich In Denver gab es dennoch bereits die
worth allerdings zustimmen, es gehe als CIO, CTO oder IT-Manager, 6 Prozent Präsentation von Airship 1.0. Die Open-
um Innovation, um die bestmögliche In- gaben Produkt Management an und 5 Source-Tool-Sammlung für die Auto-
frastruktur auf die Beine zu stellen. Die Prozent Cloud Application Developer. matisierung der Cloud-Bereitstellung
Stiftung biete mit ihrer Expertise gute Vo- Als lediglich schlichte Open-Stack-Nutzer hat damit schnell Fahrt aufgenommen.
raussetzungen, um Projekte auf diesem bezeichneten sich 5 Prozent. Es waren Airship 1.0 biete gegenüber der Pilot-
Weg zu unterstützen, ergänzte Jonathan zudem 3 Prozent CEOs vor Ort. Phase unter anderem Verbesserungen in
Bryce, Geschäftsführer der Foundation. den Bereichen Sicherheit, Belastbarkeit,
Man verfüge dafür etwa über ausgereifte Bare Metal Continuous Integration und in der Doku-
Tools und Workflows für das Testing und mentation. Airship verfügt über eine rege
könne auch die Hosting-Fragen klären. Ein weiteres Feld, auf dem Open Stack Community mit 137 Teilnehmern, die
erfolgreich mitspielt, ist Bare Metal. Beim von 17 Unternehmen aus Asien, Europa
Zahlenspiele Summit verkündete die Foundation, dass und den Vereinigten Staaten stammen,
die Bare-Metal-Werkzeuge von Open teilte die OSF mit.
Bryce gab auch Zahlen zum Open-Stack- Stack inzwischen eine Million Cores ma- Amy Wheelus, Vice President Network
Projekt bekannt, das mit über 100 000 nagen. Mit dem in Denver vorgestellten und Cloud bei AT&T, nutzte ihre Keynote,
Mitgliedern in nahezu jedem Land der Programm Ironic Open Stack Bare Metal um die Errungenschaften von Airship
Welt vertreten sei. Die Community habe soll das kommerzielle Ökosystem rund 1.0 beim Summit vorzustellen. AT&T
bereits 19 Releases hervorgebracht. Open um Ironic und die Entwicklung der Soft- setzt bei seinen 5G-Aktivitäten auf eine
Stack zähle zu den drei aktivsten Open- ware selbst gestärkt werden. 30 Unter- Airship-basierte Open-Stack-Cloud, so
Source-Projekten, und IDC habe den nehmen sind Mitglieder im Programm, Wheelus. AT&T habe sein 5G-Netzwerk
durch Open Stack erzeugten kommerzi- darunter Red Hat, Suse, Mirantis und das in 189 amerikanischen Städten ausge-
ellen Marktwert auf 6,1 Milliarden US- CERN. Die Nutzergemeinde hat im Feb- rollt, sagte die Managerin. Im Jahr 2020
Dollar geschätzt, sagte Bryce. ruar auch eine Bare Metal Special Interest soll es in den USA bereits flächendeckend
In der Statistik zur Veranstaltung war zu Group (SIG) gegründet. Sie soll sich der verfügbar sein. Den dabei eingesetzten
lesen, dass der Summit 2000 Besucher Usability von Ironic widmen sowie das 5G Evolved Packet Core manage AT&T
nach Colorado gelockt hat, weniger als Anwendungsspektrum und den Nutzen – wie sollte es anders sein – selbstver-
die 2700, die noch sechs Monate zuvor des Bare-Metal-Dienstes ausweiten. ständlich mit Airship. n
in Berlin gezählt wurden. Die Teilnehmer
kamen laut den Registrierungsdaten aus 5G im Blick
51 Ländern. 35 Prozent gaben an, erst- Infos
mals den Summit der OSF zu besuchen. Mit Airship, einer Sammlung von Tools [1] Open Infrastructure Summit Denver:
454 Firmen seien durch die Anwesenden für die automatisierte Bereitstellung von [https://www.openstack.org/summit/
repräsentiert gewesen (Abbildung 1). Private Clouds, zielt das Engagement denver-2019]
07/2019
Titelthema

Statische Codeanalyse findet vermeidbare Fehler

Arbeiten an der Quelle


Codeanalyse
www.linux-magazin.de

22
Seit 1972 sind Buffer-Overflow-Angriffe verstanden, und doch dominieren Pufferüberläufe bis heute die Warn-
Listen von Security-Spezialisten. Ein Plädoyer für das Einhalten von Coding-Standards, mehr und bessere
Sourcecode-Reviews sowie den Gebrauch guter Tools zur statischen Analyse. Tobias Eggendorfer

muss, ob sein Kollege zum Beispiel seine


geschweiften Klammern richtig einge-
rückt hat. Tools können und sollten sol-
che stupiden Arbeiten übernehmen, doch
die müssen flexibel sein.
Schon allein bei der optischen Anord-
nung der geschweiften Klammern und
ihrer Einrück-Tiefe scheiden sich die
Geister: Während der Autor des Arti-
kels seine Pascal-Vergangenheit nie ganz
abschütteln kann und für ihn ein Block
auf einer neuen Zeile mit einer Klammer
(Pascal-»begin«-artig) losgeht, sehen
viele schon den Schleifenkopf oder die
© Irina Kharchenko, 123RF

Bedingung als ausreichend an und setzen


die öffnende Klammer an deren Ende.
Listing 1 verdeutlicht die Unterschiede
in Pseudocode.
Auch die Einrücktiefe im Quelltext ist
Ein Bonmot des Rechtsmediziners Wolf- Overflow-Angriffs [1], seit 1998 sind SQL- Interpretationssache: Zwei Leerzeichen,
gang Eisenmenger zur nachlässigen Lei- Injections [2] verstanden. Beide stellen oder ein Tab? Und wie viele Leerzeichen
chenschau in Deutschland lässt sich pro- heute noch die Mehrheit der Ursachen für maximal sind das Äquivalent zum Tabu-
blemlos auch auf Software ummünzen: IT-Sicherheitslücken, und beide lassen lator? Klar, dass kriegt sicher ein unter-
Gliche die Qualität von Autos der von sich leicht vermeiden: Buffer Overflows stützendes Tool geregelt, aber setzt es
Software, wären alle Pannenstreifen über- durch die »n«-Funktionen wie »strncpy()« das Verbot von »strcpy()« und Funktio-
füllt. Ausbildungsmängel, unzureichende statt »strcpy()«, SQL-Injections durch »pre- nen, die als »deprecated« markiert sind,
Qualitätssicherung und Kontrolle sind ur- pared«-Statements. Doch wer prüft, ob durch? Ein umfangreiches Beispiel für
sächlich für pannenreiche Software. Der Entwickler sich daran halten? Coding-Standards für Entwicklung von
Artikel zeigt wie Codeanalyse die Quali- Coding-Standards, die sichere Funktio- Embedded-Software in C liefert [3].
tät und Sicherheit steigern kann. nen vorschreiben, würden helfen solche
Schon 1972 gab es die erste, wenn auch alten Fehler nicht zu wiederholen. Doch Inhalt
theoretische Beschreibung des Buffer- kaum eine Firma und kaum ein Projekt
28 C++ wirksam checken
erklären solche Leitlinien als verbindlich, Bessere Unittests für C++-Code
Listing 1: Zwei Arten zu klammern geschweige denn kontrolliert jemand de- 36 Lasttests am laufenden System
01 if (x == y) then ren Einhaltung. Damit entwickeln die we- Selbst veranstaltete Chaos-Tage für die
02 { nigsten Entwickler eine Neigung, sich an eigene IT-Infrastruktur.
03 do something;
Sicherheitsvorgaben zu orientieren. 42 Mit Karma
Javascript durch Unmengen Webbrowser
04 }
schießen.
05 Klammern und einrücken 46 Kern-Technik
06 while ( x < y) {
Es macht die Code-Review als Arbeits- Die Testkonzepte der Kernel-Community
07 x = x+1;
aufgabe zudem nicht attraktiver, wenn 82 Snapshot
08 } Real-World-Checks für Go- Programme
der damit Beauftragte von Hand prüfen
07/2019
Titelthema
Manche Entwicklungsumgebungen,
Eclipse oder Vim beispielsweise, unter-

Codeanalyse
stützen bereits ab Werk das Einhalten
von Standards ganz oder teilweise. Da-
neben gibt es eigenständige Programme
wie Uncrustify [4].

Schule fürs Leben

www.linux-magazin.de
23

Bereits optisch aufzuräumen hilft Fehler


in Kontrollstrukturen zu erkennen. Den
ersten Erfolg hierbei fuhr der Autor be-
reits als Schüler ein. Als sich einmal das
selbst geschriebene Lernprogramm einer
Lehrerin unter hämischer Anteilnahme
der Klasse eigenartig verhielt, drückte
sie dem vorlauten Tobias den Quelltext
in Form einer Diskette in die Hand, kom-
biniert mit der Hausaufgabe, eventuelle
Fehler zu entfernen.
Der Quellcode war mal eingerückt, mal
nicht, es ging zu wie Kraut und Rüben. Abbildung 1: JS Lint äußert Kritikpunkte zum Beispielprogramm.
Nachdem ein Code-Beautifier drüberge-
laufen war, zeigte sich, dass an einigen Overflow in Zeile 8 und die Formatstring- -Wall«, also die Ausgabe mit allen War-
Stellen Blockenden nicht markiert waren. Schwachstelle in Zeile 9 auf. GCC kom- nings, entdeckt (Listing 4).
Um dem Compiler das Maulen abzuge- piliert den Quellcode aber ohne größe-
wöhnen, hatte die Lehrerin die unterzäh- ren Widerstand zu einem ausführbaren Fehlerbericht
ligen Blockabschlüsse einfach an anderen Programm. Abbildung 2 bestätigt den
Stellen platziert. Die Anekdote zeigt: Al- Eindruck, wie marode das Programm ist. Als erstes Warning kommt der Hinweis
lein durch optisch saubere Programmie- Bevor Splint zeigen kann, ob es die Män- auf die mögliche Format-String-Schwach-
rung sind Fehler zu vermeiden. gel auch erkennt, gilt es den klassischen stelle in Zeile 9. Das ist für eine Check-
Fünfkampf aus Download, Auspacken, Software nicht schwer zu erkennen, denn
JS Lint: Kritikerpapst für Kompilieren und gegebenenfalls Instal- diese »printf()«-Funktion besitzt einen
lieren zu absolvieren: variablen Parameter, was gefährlich ist.
Javascript-Autoren
Hier darf ein Angreifer »printf()«, wie
tar -xzf splint-3.1.2.src.tgz
Einen Schritt über sauberen Stil hinaus cd splint-3.1.2
Abbildung 2 zeigt, einfach einen For-
gehen Codeanalyse-Tools: Für Javascript ./configure matstring übergeben. Printf erwartet
zum Beispiel bietet JS Lint [5] einen On- make dann die Daten auf dem Stack und ver-
line-Check an, der sich in Abbildung 1 make install # wenn gewünscht sucht, nicht vorhandene Daten auszule-
testweise das Skript »quadrat.js« aus [6] Ist der Kampf gewonnen, muss Splint sen. Mit ein paar Kunstgriffen kann ein
vornimmt. Die initial viel zu ausführli- noch erfahren, wo es die Informationen Angreifer so auch den Stackinhalt über-
che Kritik grenzt ein, wer JS Lint anweist, zu den Headerfiles findet. Ohne Installa- schreiben.
sich auf einen Browser zu beschränken. tion liegen die im Unterverzeichnis »lib«, Die Lösung ist einfach: »printf()« braucht
Gleichwohl zeigt sich JS Lint von Fall der Pfad lautet somit zum Beispiel »ex- immer mindestens einen fixen For-
zu Fall überkritisch. So moniert es gern port LARCH_PATH=home/tobias/code/ matstring und, soweit nötig, die dort ein-
den Umgang mit den Gänsefüßchen, den splint-3.1.2/lib/"«.
anerkannte Referenzen wie [7] deutlich Manche Distributionen halten in ihren Listing 2: »example1.c« mit Fehlern
entspannter sehen. Repositories auch die aktuellen Splint- 01 #include <strings.h>
Binaries vor. Auf jeden Fall darf es jetzt 02 #include <stdio.h>

C-Programmierer hantieren losgehen mit: 03

mit Splint /bin/splint -strict example1.c


04
05
#define BUFSIZE 10
int main(int argc, char * argv [])

Analog zu JS Lint liefert Splint [8] für Listing 3 zeigt die Ausgabe und damit 06 {
07 char buffer [BUFSIZE];
C eine gründliche Analyse des Codes. das volle Ausmaß des digitalen Grauens.
08 strcpy(buffer, argv[1]);
Listing 2 zeigt ein bewusst misslungenes Splint deckt unnachgiebig jede Schlam-
09 printf(buffer);
Beispielprogramm. Schon bei manueller perei auf und bringt mit sieben War-
10 } // end main()
Durchsicht fallen der potenzielle Buffer nings deutlich mehr als die eine, die »gcc
07/2019
Titelthema

zusetzenden Zeichenketten. Zeile 9 lautet die Array-Grenzen der Variable »buffer« Programm einfach an, dass es einen Para-
damit richtig »printf("%s", buffer)«. hinausschriebe. Das ist zwar etwas ver- meter gibt. Wer es ausprobiert, bekommt
Codeanalyse

Die zweite, neue Warnung bezieht sich brämt formuliert, beschreibt aber genau einen weiteren Segmentation Fault. Auf
auf den unsauberen Stil: »main()« ist mit den hier möglichen Überlauf. Die Lösung den Fehler deutet auch das letzte War-
einem Rückgabewert vom Typ Integer dafür heißt »strncpy()« – übrigens 1990 in ning hin: »argc« sei zwar als Funktions-
deklariert. Doch findet sich im Kontroll- den ISO-C-Standard aufgenommen und parameter deklariert, doch nie benutzt.
fluss keine einzige Return-Anweisung, damit alt genug, dass es Programmierer
»main()« bekommt also keinerlei Rück- endlich standardmäßig benutzen. Zwischenfazit
www.linux-magazin.de

24
gabewert. Auch das kann zu unschönen In derselben Zeile entdeckt Splint noch
Überraschungen führen. einen weiteren Fehler, einen möglichen Wer Splint regelmäßig über seine Pro-
Vor dem Buffer Overflow warnt Splint an Out-of-Bounds-Read: Was passiert bei gramme laufen lässt, entdeckt die klei-
dritter Stelle: Es könne nicht erkennen, einem Aufruf ohne weitere Parameter? nen Flüchtigkeitsfehler schnell und ist
wie sichergestellt ist, dass niemand über Statt zuerst »argc« zu checken, nimmt das gleichzeitig vor groben Mängeln gewarnt.
Eigentlich sollte das Standard sein, denn
Listing 3: »splint -strict example1.c« diese Art der Qualitätsicherung verhin-
01 Splint 3.1.2 --- 11 May 2019 dert effektiv Sicherheitslücken.
02
03 example1.c: (in function main)
Splint instruieren
04 example1.c:9:5: Format string parameter to printf is not a compile-time
05 constant: buffer Es kommt durchaus vor, dass Splint
06 Format parameter is not known at compile-time. This can lead to security warnt, weil ihm Informationen fehlen,
07 vulnerabilities because the arguments cannot be type checked. (Use um Code richtig einzuschätzen. Der Pro-
08 -formatconst to inhibit warning)
grammierer kann dies aber über Kom-
09 example1.c:9:5: Called procedure printf may access file system state, but
mentare im Quellcode beheben. Eine
10 globals list does not include globals fileSystem
korrigierte Version von Listing 1 zeigt
11 A called function uses internal state, but the globals list for the function
Listing 5. Es enthält einige Steuerin-
12 being checked does not include internalState (Use -internalglobs to inhibit
formationen, die bewirken, dass Splint
13 warning)
keine Warnings mehr absondert.
14 example1.c:9:5: Undocumented modification of file system state possible from
15 call to printf: printf(buffer)
Die Hinweise an Splint sind in C als
16 report undocumented file system modifications (applies to unspecified Kommentar verpackt, der mit einem
17 functions if modnomods is set) (Use -modfilesys to inhibit warning) »@«-Symbol startet und endet, wie bei-
18 example1.c:10:4: Path with no return in function declared to return int spielsweise in Zeile 6. Hier verspricht der
19 There is a path through a function declared to return a value on which there Programmierer, dass anderweitig sicher-
20 is no return statement. This means the execution may fall through without gestellt ist, dass mindestens »argv[1]«
21 returning a meaningful result to the caller. (Use -noret to inhibit warning) existiert. Nun verschwindet das Out-of-
22 example1.c:8:5: Possible out-of-bounds store: strcpy(buffer, argv[1]) Bounds-Read-Warning. Tatsächlich prüft
23 Unable to resolve constraint: Zeile 12 brav »argc«, und der Program-
24 requires maxRead(argv[1] @ example1.c:8:20) <= 9
mierer löst das Versprechen ein.
25 needed to satisfy precondition:
Zeile 7 sagt Splint zu, dass keine Datei-
26 requires maxSet(buffer @ example1.c:8:12) >= maxRead(argv[1] @
systemoperationen geplant seien, und be-
27 example1.c:8:20)
schwichtigt es damit bezüglich »printf()«
28 derived from strcpy precondition: requires maxSet(<parameter 1>) >=
in Zeile 15, das zudem nun um einen
29 maxRead(<parameter 2>)
ordentlichen Format-String reicher ist.
30 A memory write may write to an address beyond the allocated buffer. (Use
31 -boundswrite to inhibit warning)
Zeile 10 ist eine Kurzschreibweise, die
32 example1.c:8:20: Possible out-of-bounds read: argv[1] das gesamte Array mit Ascii 0 befüllt.
33 Unable to resolve constraint: Diese Syntax kennt Splint nicht und
34 requires maxRead(argv @ example1.c:8:20) >= 1 würde monieren, nicht alle Elemente des
35 needed to satisfy precondition: Arrays seien gefüllt. Zeile 9 schaltet diese
36 requires maxRead(argv @ example1.c:8:20) >= 1 Warnung ab. Damit Splint den Rest des
37 A memory read references memory beyond the allocated storage. (Use Codes weiterhin kritisch beschaut, schal-
38 -boundsread to inhibit warning) tet Zeile 11 die Überwachung wieder ein.
39 example1.c:5:14: Parameter argc not used Das Plus beziehungsweise Minus vor
40 A function parameter is not used in the body of the function. If the argument
dem Wert macht die Musik.
41 is needed for type compatibility or future plans, use /*@unused@*/ in the
In Zeile 14 ist eine explizite Typkonver-
42 argument declaration. (Use -paramuse to inhibit warning)
sion dazugekommen – sonst beschwert
43
sich Splint über den falschen Datentyp.
44 Finished checking --- 7 code warnings
Dort ist übrigens ein klassischer Pro-
07/2019
Titelthema
den Vorteil, über die bekannten Sicher-
heitsthemen hinaus auch weitere Prob-

Codeanalyse
leme im Quelltext aufzuzeigen. Splint
prüft auch konkreter. Zum Vergleich:
Die korrigierte Programm-Fassung aus
Listing 5 wirft bei RATS zwei Warnungen
aus, die beide nicht zutreffen, getriggert
Abbildung 2: Es ist gut zu erkennen, von dem Beispielprogramm ist in erster Linie Unheil zu erwarten. durch die Erkennungsmerkmale „feste

www.linux-magazin.de
25
Puffergröße“ und »strncpy()«.
grammierdenkfehler berücksichtigt: C nungen gibt das Tool zu kritischen Code-
terminiert Strings mit der binären Null. Stellen allgemeinere Hinweise. Installiert Problem mit der Fangquote
Auch diese verbraucht ein Byte im Puf- kriegt man es wieder entlang der klassi-
fer. Daher passen in einen zehn Zeichen schen Fünferkette: Treten substanzlose Warnungen an den
fassenden Puffer maximal neun lesbare Tag, steigt die Gefahr des Überblätterns
unzip rough-auditing-tool-for-securityU
Zeichen. Wer es ausprobieren möchte, -master.zip
echter Hinweise. Der entstehende Ein-
nimmt Listing 6, das mit allen nötigen cd rough-auditing-tool-for-security-master druck, alles in Sachen Sicherheit erledigt
Splint-Hinweisen ausgestattet explizit ./configure zu haben, ist natürlich fatal. Auf die Ha-
warnt (Abbildung 3). make ben-Seite kann RATS sich aber buchen,
make install # wenn gewünscht

Warum es sich lohnt Was »rats« mit den Parametern »-w3 Listing 4: »gcc -Wall example1.c«
example1.c« aus Listing 2 macht, zeigt 01 example1.c:9:12: warning: format string is
Für Splint extra Kommentare in den Listing 7. Wer das Tool nur im aktuellen not a string literal (potentially insecure)
Quelltext einzufügen, klingt unproduktiv. Verzeichnis liegen und nicht installiert [-Wformat-security]

Es gilt aber zu bedenken: Splint moniert hat, muss mit »-d« noch den Pfad zur 02 printf(buffer);

nur, was unüblich ist, also worüber ein »rats-c.xml« übergeben, die typische C- 03 ^~~~~~

Dritter, der den Quellcode liest, stolpern Fehler beschreibt. 04 example1.c:9:12: note: treat the string as an

würde. (Nach ein paar Monaten wird Anhand der RATS-Meldungen finden argument to avoid this
05 printf(buffer);
übrigens der Programmautor selbst prak- Entwickler im Code die kritischen Stel-
06 ^
tisch zum Dritten.) Außerdem machen len auch, die Erklärungen sind gerade in
07 "%s",
Splint-Kommentare bewusst, wo die Fal- Bezug auf die Sicherheitsprobleme etwas
08 1 warning generated.
len liegen. Gesichtet und dokumentiert, verständlicher. Allerdings bietet Splint
sind sie auch schnell umschifft.
Die Kommentare erinnern an das Hoare- Listing 5: Das Beispiel mit Splint-Anweisungen
Kalkül, ein Verfahren zur formalen Pro- 01 #include <strings.h> 11 /*@+initallelements@*/
grammverifikation. Dabei definiert der 02 #include <stdio.h> 12 if ( ( argc > 0 ) && (argv != NULL) )
Entwickler Vorbedingungen, einen Re- 03 13 {
chenschritt und eine Endbedingung. Die 04 #define BUFSIZE 10
14 strncpy(buffer, argv[1], (size_t)
Endbedingung muss sich aus der Vorbe- 05 int main(int argc, char * argv [])
(BUFSIZE-1));
dingung durch den Rechenschritt herlei- 06 /*@requires maxRead(argv) >= 1 @*/
15 printf("%s\n",buffer);
07 /*@-modfilesys@*/
ten lassen. Wer sich detaillierter einlesen
08 { 16 }
will, findet den Originalartikel unter [9]
09 /*@-initallelements@*/ 17 return 0;
und etwas lesefreundlichere Vorlesungs-
10 char buffer [BUFSIZE] = {'\0'}; 18 } // end main()
folien der FU Berlin unter [10].
Diese sehr formale Herangehensweise
ist für viele Anwendungsprogramme Listing 6: Ein Zeichen zu viel
nur beschränkt geeignet, aber eine gute 01 #include <stdio.h> 13 char target [BUFSIZE] = { '\0' };
Denkschule. Denn sie zwingt dazu, die 02 #include <string.h> 14 /*@+initallelements@*/
einzelnen Programmschritte nicht „nur 03 #define BUFSIZE 10 15 char source [17] = "0123456789ABCDEF";
einfach“ in Codeform zu bringen, son- 04
16
dern wirklich zu überdenken. 05 int main(/*@unused@*/ int argc,
17 printf("source: %s\ntarget: %s\n",source,
06 /*@unused@*/ char * argv []
target);
07 )
RATS-Fänger 08 /*@-modfilesys@*/
18 strncpy(target, source, (size_t) BUFSIZE );

19 printf("source: %s\ntarget: %s\n",source,


09 {
Wem Splint zu pingelig und zu aus-
10 /*@unused@*/ target);
führlich arbeitet, sollte versuchen RATS
11 char pwd[18] = "It is top secret!"; 20 return 0;
(Rough Auditing Tool for Security, [11])
12 /*@-initallelements@*/ 21 }
zu domestizieren. Statt konkreter War-
07/2019
Titelthema

ärmere Software. Dass statische Codeana-


lyse, Reviews und Coding-Standards in
Codeanalyse

der Realität etwas bringen, zeigt Open


BSD mit nur zwei remote ausnutzbaren
Sicherheitslücken in 20 Jahren. (jk) n

Infos
www.linux-magazin.de

26
[1] James P. Anderson, „Computer Security
Technology Planning Study, Volume II“:
[https://csrc.nist.gov/csrc/media/
publications/conference-paper/1998/10/
08/proceedings-of-the-21st-nissc-1998/
documents/early-cs-papers/ande72.pdf]
[2] Rain.forest.puppy, „NT Web Technology
Vulnerabilities“: Phrack Magazine, Volume
Abbildung 3: Splint warnt, wie der Probelauf zeigt, zurecht. 8, Issue 54, Dec 1998, [http://phrack.org/
issues/54/8.html#article]
dass es Code in vielerlei Sprachen zu ren. Den Service nutzt unter anderem der [3] „Embedded C Coding Standard“: [https://
prüfen in der Lage ist. Linux-Kernel – seither hat sich gemessen barrgroup.com/Embedded-Systems/
an der Zahl der Findings die Codequalität Books/Embedded-C-Coding-Standard/
Löhnen für Coverity deutlich erhöht. Introduction]
[4] Uncrustify:
Keine freie Software, aber wegen seiner Aus der Not eine Tugend [http://uncrustify.sourceforge.net]
Aufspür-Fähigkeiten in der Open-Source- [5] JS Lint: [http://www.jslint.com]
Szene gut beleumundet [12] ist Coverity Wer sich einen gründlichen und sauberen [6] Javascript-Tutorials:
[13], ein kommerzielles Werkzeug zur Programmierstil angewöhnen möchte, ist [https://wiki.selfhtml.org/wiki/JavaScript/
statischen Codeanalyse von C-, C++-, zweifellos mit Splint gut beraten und in Tutorials/Einstieg/Einbindung_in_HTML]
C#- und Java-Programmen. Dabei gibt es guter Gesellschaft. Entwickler, die auch [7] W3schools, „Javascript Strings“: [https://
eine lokale Variante und eine Lösung als jedem False Positive gründlich nachge- www.w3schools.com/js/js_strings.asp]
Clouddienst. Wie letztere sich mit den hen wollen, finden in RATS einen hel- [8] Splint: [http://splint.org]
eigenen Unternehmenszielen verträgt, fenden Weggefährten. [9] C. A. R. Hoare, „An Axiomatic Basis for
muss jeder selbst schauen. Wichtig ist in allen Fällen das Ergebnis: Computer Programming“: [https://web.
Wer ein vom Hersteller anerkanntes Zwang zur Qualitätssicherung, Umden- archive.org/web/20160304013345/
Open-Source-Projekt verwaltet, darf auf ken und Umlernen durch die stete, un- http://www.spatial.maine.edu/~worboys/
den Cloud-Ableger [14] zurückgreifen nachgiebige Kritik der Kontrollpro- processes/hoare%20axiomatic.pdf]
und gratis eine Codeanalyse durchfüh- gramme und dadurch Sicherheitspannen- [10] Margarita Esponda, „Programmverifika-
tion“: [http://www.inf.fu-berlin.de/lehre/
Listing 7: »rats -w3 example1.c« SS12/ALP2/slides/V11_Programmverifika-
01 Entries in c database: 310 tion.ALP2.pdf]
02 Analyzing example1.c [11] RATS: [https://github.com/andrew-d/
03 example1.c:7: High: fixed size local buffer rough-auditing-tool-for-security]
04 Extra care should be taken to ensure that character arrays that are allocated on the stack are used [12] Artikel und News zu Coverity: [https://
safely. They are prime targets for buffer overflow attacks. www.linux-magazin.de/?s=Coverity]
05 [13] Coverity Static Application Security
06 example1.c:8: High: strcpy Testing (SAST): [https://www.synopsys.
07 Check to be sure that argument 2 passed to this function call will not copy more data than can be com/software-integrity/security-testing/
handled, resulting in a buffer overflow. static-analysis-sast.html]
08 [14] Coverity Scan: [https://scan.coverity.com]
09 example1.c:9: High: printf

10 Check to be sure that the non-constant format string passed as argument 1 to this function call does
Der Autor
not come from an untrusted source that could have added formatting characters that the code is not
Tobias Eggendorfer ist Professor für IT-Sicherheit
prepared to handle.
in Ravensburg, freiberuflicher IT-Berater und fest
11
überzeugt, dass Software sicher sein kann – si-
12 Total lines analyzed: 11
chert man endlich mal ihre Qualität. Die Nutzer
13 Total time 0.000192 seconds
müssen die Qualität aber einfordern, statt sich
14 57291 lines per second
resigniert mit Abstürzen abzufinden.
07/2019
Titelthema

Testen in C++

Gut gereift
C++

28
www.linux-magazin.de

Wer guten C++-Code schreiben möchte, sollte über testgetriebenes Entwickeln nachdenken. Der Artikel veran-
schaulicht, was Unittests für C++-Code leisten, wie Entwickler diese anlegen und welche Werkzeuge den doch
recht umständlichen Testprozess vereinfachen. Detlef Wilkening

des täglichen Entwicklerlebens. Hier


gilt es, verschiedenen Stolpersteinen
geschickt auszuweichen. Zum Beispiel
muss ein Programmierer für viele, auch
automatische Tests nicht selten spezielle
Voraussetzungen erfüllen, bevor er sie
ausführen kann.
Er benötigt bestimmte Dateien, einen
laufenden Webserver, Zugriff auf eine
Datenbank, das Internet mit Google-
Maps-Anbindung oder Ähnliches. Diese
Erfordernisse machen das Aufsetzen oder
Reproduzieren eines Tests sehr kompli-
ziert – weil etwa das Netzwerk streikt
© yelenayemchuk, 123RF

oder die Datenbank nicht die richtigen


Daten anbietet.
Als besonders herausfordernd erweisen
sich Tests, die außergewöhnliche Fehler-
situationen nachstellen sollen. Konkret
Beginnen Einsteiger zu programmieren, adressieren. Also nimmt er andere Werte kann es etwa um zeitabhängige Berech-
testen sie eigentlich immer nur manuell. und übersieht den in Feature A neu ein- nungen während eines Tageswechsels
Das bedeutet: Sie schreiben zum Beispiel geschleppten Fehler. oder um eine Zeitumstellung von Som-
ein kleines Programm mit Feature A und Gibt der Entwickler die Testwerte spon- mer- auf Winterzeit gehen. Oder der Test
testen es auf der Kommandozeile mit ein tan ein, besteht zudem die Gefahr, dass erfordert es, dass in einem ganz bestimm-
paar Eingaben. Funktionieren diese Tests, er nicht alle sinnvollen Testwerte über- ten Augenblick die Netzwerkverbindung
erklären sie Feature A für fertig und be- blickt und daher nicht umfassend testet. ausfällt. Dabei muss der Entwickler auch
ginnen mit Feature B und testen dies mit Gerade Fehler- und Sonderfälle fallen so bei solchen Tests dokumentieren, was er
anderen Eingaben. oft unter den Tisch. beim erneuten Ausführen testen will und
Das mag für ein kleines Programm rei- Und ganz ehrlich: Wer gibt schon gern was er, entgegen der ursprünglichen Pla-
chen, scheitert aber umgehend, sobald verschiedenste Testwert-Kombinationen nung, doch nicht getestet hat.
die Realität etwas komplexer wird. So ein, wenn das Programm doch scheinbar
kann die Implementierung von Feature reibungslos funktioniert? Da programmie- Versionschaos
B auch Feature A beeinträchtigen, etwa ren Entwickler doch lieber am nächsten
weil beide eine gemeinsame Hilfsfunk- Feature – das macht mehr Spaß. Kurzum: Programme sind in der realen Welt au-
tion verwenden. Testet der Nachwuchs- Wer auf diese Weise vorgeht, testet nicht ßerdem nicht nur in einer, sondern in
entwickler Feature A nicht erneut, be- komplett. Zugleich sind umfassende verschiedenen Versionen im produktiven
merkt er den Fehler nicht. Tests dieser Art sehr zeitaufwändig. Einsatz. Zusätzlich finden sich in der Ent-
Beim nächsten Mal will er schlauer sein. wicklung oft mehrere Branches, die sich
Er stellt Feature B einen Tag später fertig, Steine im Weg in ihrer Funktionalität unterscheiden.
testet aber auch Feature A noch einmal. Stellt sich die Frage: Welche Tests gehö-
Nun erinnert er sich aber nicht mehr Neben diesen relativ einfach zu überbli- ren zu welchem Versionsstand? Existie-
daran, mit welchen Werten er Feature ckenden Problemen beim Testen gibt es ren die Tests nur in den Köpfen der Ent-
A gefüttert hatte, um alle Probleme zu auch die wirklichen Herausforderungen wickler oder gibt es Dokumente darüber?
07/2019
Titelthema
Und wie gut funktionieren die Tests mit sollten Entwickler in der Lage sein, Tests Auch spezielle Last- oder Performance-
den existierenden Versionen? zu schreiben, ohne dabei ihre Umgebung Tests decken Unittests oft nicht ab. Das
Übernimmt später ein anderer Entwick- und, im Idealfall, die Sprache wechseln ändert nichts daran, dass sie ein sehr

C++
ler das Programm, muss er sich zunächst zu müssen. Das vereinfacht es für sie, die wirksames Werkzeug für die Entwick-
einarbeiten. Dazu gehört es, zu verste- Tests zu schreiben. lung darstellen.
hen, wie und was die ursprünglichen Zu guter Letzt gibt es Projekte, bei de-
Entwickler des Programms testen woll- nen der Kunde zu jeder Release eine aus- Was Unittests erreichen
ten. Spätestens nach einem bis zwei führliche Dokumentation der getesteten 29

www.linux-magazin.de
Monaten wirkt zudem selbst der eigene Fälle inklusive der Ergebnisse erwartet. Unittests setzen direkt am Code an. Es
Code fremd, was den Originalentwickler Der Autor selbst durfte an einigen davon handelt sich um Tests, die ein Entwick-
quasi zu einem neuen Entwickler macht. mitarbeiten und tagelang Excel-Tabellen ler selbst programmiert – meist in der
Zugleich müssen die Tests auch auf ei- anlegen – das wünscht sich niemand. gleichen Sprache wie den eigentlichen
ner anderen Maschine, mit anderen Be- Code. Zwingend ist dies allerdings nicht.
nutzerrechten, in einem anderen Umfeld Challenge accepted Er testet jeweils eine kleine Einheit von
problemlos laufen. Code. Dies darf eine einzelne Klasse
Verändern Programmierer Quellcode, Gute Tests sollten also einfach zu erzeu- sein, aber auch eine einzelne Funktion,
aber nicht dessen Funktionalität, heißt gen sein und vollständig, was die Test- eine Gruppe von Funktionen oder eine
das auf Neudeutsch Refactoring. Das fälle angeht. Sie müssen reproduzierbar Gruppe von Klassen und die ihnen zuge-
soll die Struktur verbessern oder die sein, unabhängig von äußeren Bedingun- ordneten Funktionen.
Performance erhöhen. Eigentlich müss- gen funktionieren, simpel aufzusetzen In Sprachen mit starkem Klassenbewusst-
ten Entwickler danach auch dieses Pro- sein und sich einfach, automatisch und sein, etwa Java oder C#, deckt eine Unit
gramm komplett neu testen. Und für schnell ausführen lassen. Sie unterliegen eigentlich immer eine einzelne Klasse ab.
die Entwicklung wäre es zudem schön, einer Versionierung, ermöglichen es, spe- In C++, das freie Funktionen kennt und
diese Tests nach jedem Schritt auszufüh- zielle Testsituation abzudecken, sollten offenere Strukturen erlaubt, testet eine
ren. Außerdem wäre es hilfreich, würden intern und extern gut dokumentiert sein, Unit meist eine Gruppe von zusammen-
die Tests schnell durchlaufen. Auf diese den gesamten Code abdecken, aber auch gehörigen Funktionen oder eine Klasse
Weise bekäme der Umschreiber mög- spezielle Testaspekte wie zum Beispiel mit zugehörigen Funktionen.
lichst früh eine Rückmeldung, ob noch Lasttests berücksichtigen.
alles funktioniert. Doch je aufwändiger Einen großen Teil dieser Herausforderun- So sieht’s aus
die Tests sind, desto seltener passiert die- gen, aber nicht alle, meistern Unittests.
ser Schritt. Sie stoßen lediglich bei Systemtests, die Wie das in der Praxis aussieht, zeigt
Viele Projekte benötigen zudem spezi- überprüfen, wie alle beteiligten Soft- der Blick auf ein sehr simples Beispiel,
elle Tests wie beispielsweise Last-, Per- warekomponenten eines Systems mit- etwa die Implementierung der Fakul-
formance- oder Usability-Tests. Auch einander interagieren, an ihre Grenzen. tätsfunktion mit selbst implementierten

Listing 1: Beispiel eines simplen Unittest


01 #include "iostream" 22 {

02 using namespace std; 23 cout << "Fehler: fac(1) ist nicht 1 sondern " << res << endl;

03 24 return 1;

04 unsigned int fac(unsigned int v) 25 }

05 { 26 if (auto res = fac(2); res != 2)

06 unsigned int res = 1; 27 {

07 for (unsigned int i = 2; i <= v; ++i) 28 cout << "Fehler: fac(2) ist nicht 2 sondern " << res << endl;

08 { 29 return 1;

09 res *= i; 30 }

10 } 31 if (auto res = fac(3); res != 6)

11 return res; 32 {

12 } 33 cout << "Fehler: fac(3) ist nicht 6 sondern " << res << endl;

13 34 return 1;

14 int main() 35 }

15 { 36 if (auto res = fac(12); res != 479'001'600)

16 if (auto res = fac(0); res != 1) 37 {

17 { 38 cout << "Fehler: fac(12) ist nicht 479'001'600 sondern "

18 cout << "Fehler: fac(0) ist nicht 1 sondern " << res << endl; << res << endl;

19 return 1; 39 return 1;

20 } 40 }

21 if (auto res = fac(1); res != 1) 41 }


07/2019
Titelthema

Tests (Listing 1). Wer das nachvollziehen det die zweite einen Fehlschlag. Letzte- neue Testfälle ergänzen, etwa für
möchte, muss den Code mit der Option rer entsteht, wenn der Entwickler in der Sondersituationen (leere Container,
»--std=c++17« kompilieren. Zeile 9 »res *= i;« fehlerhaft in »res += negative Zahlen und so weiter). Die
C++

Jeder routinierte Entwickler bemängelt i;« verwandelt. Testfälle dienen also auch als interne
sofort, dass dies zu viel Schreibarbeit Dokumentation darüber, was der Ent-
erfordert. Hier ließe sich Code in eine So helfen Unittests wickler testet und welches Verhalten
Bibliothek auslagern. Das muss der er dabei erwartet. In gewisser Weise
30 Entwickler aber zum Glück nicht selbst Bevor der Artikel einen intensiveren Blick dokumentieren die Tests damit sogar
www.linux-magazin.de

erledigen – es gibt hervorragende C++- auf C++-Unittest-Frameworks wie Catch die Anforderungen an die Unit. Viele
Unittest-Frameworks. Eine Liste in der wirft, sollte er noch definieren, was Unit- Entwickler betrachten das Schreiben
englischsprachigen Wikipedia unter [1] tests ausmacht. Folgende Aspekte wur- von Unittests daher als eine Art Re-
zählt über 75 verschiedene C++-Unittest- den bereits angesprochen: quirements Engineering auf unterster
Frameworks auf. Setzt der Entwickler n Da der Entwickler seine Tests (meist) Ebene.
zum Beispiel auf das Catch-Framework in der gleichen Sprache schreibt wie n Führt der Entwickler die Tests aus,
[2], vereinfacht dies den Beispielcode den normalen Code, kann er Unittests triggert dies stets sämtliche Tests.
stark (Listing 2). einfach integrieren. n Da die Tests in Codeform vorliegen,
Eine Ausführung des Beispiels mit Catch n Da sie als Code vorliegen, kann er sie gibt es ein ausführbares Unittest-Pro-
liefern die Abbildungen 1 und 2. Wäh- gut lesen und schnell nachvollziehen, gramm. Das vereinfacht den Zugang
rend die erste den Erfolgsfall zeigt, mel- was sie testen. Er kann problemlos und erlaubt es, die Tests stets automa-
tisch auszuführen.
Listing 2: Beispiel mit Catch-Framework n Als Code lassen sich die Tests wie nor-
01 #define CATCH_CONFIG_MAIN 14 TEST_CASE("Berechnung der Fakultaet", maler Code in die Versionsverwaltung
02 #include "catch.hpp" "[fakultaet]") einchecken. Sie unterliegen derselben
03 15 { Versionierung wie der Code, den sie
04 unsigned int fac(unsigned int v)
16 REQUIRE(fac( 0) == 1);
prüfen. Alte Versionen oder Branches
05 {
17 REQUIRE(fac( 1) == 1);
bereiten so keine Probleme.
06 unsigned int res = 1;
18 REQUIRE(fac( 2) == 2);
07 for (unsigned int i = 2; i <= v; ++i)
08 {
19 REQUIRE(fac( 3) == 6); Unabhängig testen
20 REQUIRE(fac( 4) == 24);
09 res *= i;
Extrem wichtig für Unittests ist, dass sie
21 REQUIRE(fac( 5) == 120);
10 }
komplett unabhängig von äußeren Ab-
11 return res; 22 REQUIRE(fac(10) == 3'628'800);
hängigkeiten funktionieren. Daher dürfen
12 } 23 REQUIRE(fac(12) == 479'001'600);
sie zum Beispiel niemals eine Datenbank
13 24 }
oder das Internet nutzen. Sie sollten nicht
auf das Dateisystem zugreifen, nicht die
Listing 3: Abhängigkeiten simulieren Uhrzeit abfragen und keinen Zufallszah-
01 #define CATCH_CONFIG_MAIN 21 lengenerator benutzen. Aber auch auf
02 #include "catch.hpp" 22 explicit BusinessLogic(IDatabase& db) : Benutzer-Interaktionen – egal ob über
03 #include <string> db(db) {} die Konsole oder mit GUI – verzichten
04 23 Unittests besser.
05 struct IDatabase 24 std::string doit() Alle diese Dinge würden dafür sorgen,
06 {
25 { dass sich die Tests nicht oder nur sehr
07 virtual std::string getName() const = 0;
26 // Hier folgt einiger komplizierter Code, schwer reproduzieren lassen, dass sie
08 };
der getestet werden muss... nicht einfach und automatisch zu nut-
09
27 auto name = db.getName(); zen sind, nicht performant ablaufen und
10 struct DatabaseStub : IDatabase
28 // Hier folgt einiger komplizierter Code, nicht ohne Zutun auf einer beliebigen
11 {
der getestet werden muss... Maschine funktionieren.
29 return "<" + name + ">"; Probleme machen hier also all jene Co-
12 std::string getName() const override
30 } depassagen, die auf die Umgebung zu-
13 {
31 };
greifen und von ihr abhängen, indem sie
14 return "Albert Einstein";
32
etwa eine Datenbank verwenden. Der
15 }
33 TEST_CASE("Abfrage der Datenbank", "[db]")
Entwickler sollte daher den Zugriff aus
16 }; 34 {
dem zu testenden Code entfernen oder
17 35 DatabaseStub db;
ihn testen, indem er das externe Element
18 struct BusinessLogic 36 BusinessLogic bl(db);
simuliert. Diese Simulationen heißen
19 { 37 REQUIRE(bl.doit() == "<Albert Einstein>");
wahlweise Fakes, Stubs oder Mocks – je
20 IDatabase& db; 38 }
nach Qualität der Simulation (siehe Ab-
07/2019
Titelthema
schnitte „Fakes” weiter unten). Eine ganz derungen beim Schrei-
einfache Simulation, die das Prinzip ver- ben von Unittests. Es
deutlichen soll, zeigt Listing 3. lässt sich oft nicht tri- Abbildung 1: Catch meldet, dass alle Unit-Tests erfolgreich waren.

C++
Der zu testende Code ist in diesem Fall vial erledigen.
die Klasse »BusinessLogic«, genauer die
Element-Funktion »doit()«, die, wie der Zwischenstand
Kommentar andeutet, viel komplizierten
Code enthält. Teile dieses Codes wollen Offen bleibt noch das 31

www.linux-magazin.de
auf eine Datenbank zugreifen. Thema externe Doku-
Das passiert nicht direkt, sondern indi- mentation. Aber wie
rekt über das Interface »IDatabase«. Die der Beispielcode für
eigentliche Datenbank-Implementierung Catch zeigt, ergänzt
tauscht der Konstruktor aus. Wo also der Entwickler meist
der reale Code den Datenbanktreiber jeden Testfall um eine
anspricht, verwendet der Testcode eine Beschreibung – dar- Abbildung 2: Aber hier hat sich wohl ein Fehler eingeschlichen.
eigene Test-Implementierung »Database- aus sollte sich auch
Stub« mit speziellen Testdaten (hier »Al- automatisch ein Dokument für den Kun- nieren (Listing 3). Im Normalfall jong-
bert Einstein«). den generieren lassen. Manche Unittest- liert der Entwickler aber mit vielen Test-
Das Ganze über den Konstruktor abzuwi- Frameworks bringen dafür schon ent- Quelltexten. Daher sollte er zur Über-
ckeln ist nur eine von mehreren Möglich- sprechende Generatoren mit. sicht einen speziellen »main()«-Quelltext
keiten, Stubs oder Mocks in den realen Insgesamt lässt sich sagen, dass Unittests anlegen, der nur die zwei Zeilen für die
Code zu injizieren. Alle bringen Vor- und viele der Anforderungen an Tests gut ab- Hauptfunktion von Catch enthält.
Nachteile mit. Hier geht es darum, das decken (siehe auch Tabelle 1). Testfälle definiert Catch mit dem Makro
Prinzip zu zeigen. Wer sich etwa an der »TEST_CASE()«. Dem übergibt er zwei
Performance-Verschlechterung durch den Das Catch-Framework Argumente. Das erste beschreibt den
virtuellen Funktionsaufruf stört, könnte Testfall, wodurch sich der Entwickler
alternativ auf einen Template-Parameter Wie anfangs erwähnt, gibt es für C++ auch den Kommentar erspart. Das zweite
ausweichen. viele Unittest-Frameworks. Die wohl enthält in eckigen Klammern Tags, auf
Es gibt mehrere Vorteile, wenn Unittests bekanntesten sind Boost.Test [3] als Be- die er später beim Einsatz der Tests zu-
die komplette Umgebung simulieren. standteil der Boost-Bibliothek [4] und rückgreift (siehe Listing 3, Zeile 33). So
Zum Beispiel ist das Verhalten der Simu- Google Test [5]. Beide gibt es schon sehr führt er nur bestimmte Testfälle aus, die
lation genau definiert und bleibt kons- lange – mit den entsprechenden Vor- ein entsprechendes Tag kennzeichnet.
tant. Die Unittests sind reproduzierbar. und Nachteilen. Sie sind ausgereift und Das ist eine Hilfe, um Testzeiten zu mi-
In der Simulation lassen sich besondere bringen sehr viele Features mit. nimieren.
Situationen nachstellen, etwa das Um- Gerade Boost.Test bietet für fast jeden Der Rest sieht wie eine gewöhnliche
stellen von Uhren. Die Simulation macht Problemfall eine Lösung und hat sehr Funktion aus, die den Test beschreibt.
diese testbar und hilft, sie problemlos viele Steuerungsmöglichkeiten. Aber Das Makro »REQUIRE()« in Zeile 37 ent-
zu reproduzieren. Auch beliebige Fehler, beide sind entstanden, als es noch kein
etwa Exceptions oder Null-Pointer, simu- C++11, 14 oder 17 gab – daher wirkt ihr Tabelle 1: Übersicht der Anfor-
liert der Tester auf diesem Weg. API häufig etwas veraltet und ist nicht so derungen an Unittests
Zugleich führt dank der Unabhängigkeit einfach und elegant wie möglich. Kriterium Trifft zu
von jeglicher Umgebung jeder Entwick- Ein alternatives kleines und modernes Einfaches Erstellen ja
ler die Unittests auf jedem Rechner pro- Unittest-Framework für C++, das auch
Vollständigkeit der Testfälle ja
blemlos aus. Das bedeutet auch, dass Behaviour Driven Development (BDD)
Reproduzierbarkeit ja
ein Buildrechner die Tests nach einem unterstützt, ist Catch. Sehr angenehm
Unabhängigkeit ja
erfolgreichen Build automatisch direkt ist, dass die Catch-Bibliothek sich ein-
ausführen kann. Nicht zuletzt verlang- fach über »catch.hpp« inkludieren lässt. Einfaches Implementieren teilweise
samen Datenbanken oder eine Internet- Mittlerweile liegt Version 2 vor. Arbeitet Einfache Ausführung ja
anbindung einen Test in der Regel stark. der Entwickler mit einer älteren Version Automatische Ausführung ja
Simulationen sind meist einfach gestrickt als C++11, greift er auf die alte Version Schnelle Ausführung ja
und daher sehr performant – die Unittests 1 von Catch zurück. Versionierung ja
laufen also sehr schnell ab. Das steigert Jedes C++-Programm muss eine Spezielle Situationen ja
die Chance, dass Entwickler sie oft und »main()«-Funktion mitbringen. Catch Interne Dokumentation ja
gern laufen lassen. stellt sie zur Verfügung. Dafür muss der
Externe Dokumentation ja
Doch es gibt auch Wermutstropfen. Das Entwickler in seinem Test-Quelltext vor
Systemtests nein
Abkoppeln und Simulieren der Umge- der »#include«-Zeile für »catch.hpp« das
Spezielle Testaspekte teilweise
bung erweist sich als eine der Herausfor- Makro »CATCH_CONFIG_MAIN« defi-
07/2019
Titelthema

Die erste besteht im Idealfall sollte der Entwickler solchen


Zu testende testbaren Design, die Code nur noch deklarativ an den Rest
Klasse Stub
zweite im damit ver- des Programms anbinden.
C++

bundenen Aufwand. All diese Dinge zusammen ergeben ein


Test testbares Design. Ohne dies kann ein
Testbares Entwickler Unittests kaum umsetzen. Es
empfiehlt sich, Tests von Anfang an mit-
Design
32 zudenken und mitzuschreiben.
www.linux-magazin.de

Zu testende Mock Zunächst zum ersten Das funktioniert natürlich nur bei neu ge-
Klasse
Fehler, den Entwick- starteten Projekten. In den meisten Fällen
ler im Umgang mit existiert das Projekt aber bereits – dann
Test
Unittests machen: Sie leider oft ohne Unittests. Wer in dieser
wollen erst program- Situation trotzdem umsatteln möchte,
Abbildung 3: Stubs sind Simulationen, Mocks testen aktiv ihre Nutzung mit. mieren, später dann dem sei das Buch „Effektives Arbeiten
die Tests nachliefern. mit Legacy Code“ von Michael C. Fea-
hält schließlich die eigentliche Bedingung Das funktioniert aber, wie auch bei ande- thers empfohlen.
für den Test: ren Architekturthemen wie Performance
oder Multithreading, so gut wie nie. Und Der Aufwand
REQUIRE(fac(4) == 24);
wenn doch, ist es mit sehr viel Aufwand
Sehr elegant erscheint hier, dass es nur verbunden. Wer nicht von Anfang an Die vielleicht größte Herausforderung ist
dieses eine Testmakro »REQUIRE()« gibt, Unittests mitschreibt, entwickelt kein aber der mit dem Schreiben von Unit-
in das der Entwickler die komplette Be- testbares Design. tests verbundene zeitliche Aufwand.
dingung einfach hineinschreibt. Dennoch Eine testbare Unit muss der Entwickler Schon beim weiter oben beschriebenen
zeigt Catch im Fehlerfall die einzelnen halbwegs isoliert benutzen können, sie einfachen Fakultätsbeispiel zeigt der Ein-
Werte in der Ausgabe an (Abbildung 2). muss über eine klare Schnittstelle verfü- satz von Catch, dass der Unittest-Code
Andere Unittest-Frameworks benötigen gen. Schreibt der Entwickler von Anfang mehr Platz einnimmt als die eigentliche
an dieser Stelle eine ganze Batterie ver- an Unittests, erzwingt er ein solches De- Implementierung. Und das ändert sich
schiedener Makros. Zudem muss sich der sign und fördert damit nebenher auch häufig nicht. Tatsächlich hat der Autor
Entwickler merken, welche Reihenfolge noch die Wiederverwendbarkeit und in einigen Fällen mehr als zehnmal so
an Argumenten er einhalten muss. Modularität seines Codes. Erstreckt sich viel Testcode geschrieben wie Code für
Catch lässt sich dagegen viel einfacher ein Feature oder Algorithmus über ver- die eigentliche Implementierung. Zuge-
und intuitiver nutzen. Der Trick: Im Hin- schiedene Codepassagen oder gar über geben hat er auch einen Hang dazu, es
tergrund setzt Catch auf die Expression- mehrere Ebenen vom Userinterface bis mit Tests zu übertreiben.
Templates von C++. hin zur Persistence-Schicht, eignet er sich Doch selbst wenn es nur dieselbe Menge
nicht für Unittests. an Code ist, muss ein Programmierer
Vorteil: Catch Ein weiteres Problem besteht darin, die ihn schreiben. Und er muss sich vorher
äußeren Abhängigkeiten zu isolieren Gedanken über normale Testfälle, Grenz-
Andere Frameworks bieten häufig kom- und zu simulieren. Zieht der Entwick- fälle, Sonderfälle, Fehlerfälle und vieles
plizierte Mechanismen an, um Tests vor- ler diesen Schritt nicht von vornherein mehr machen. Das ist eine Menge trocke-
und nachzubereiten. Dazu zählen etwa mit in Betracht, lässt sich das hinterher ner Arbeit. Sicher spart der Entwickler
»setup()«- und »teardown()«-Funktionen, kaum noch integrieren. Eine Möglichkeit hinterher Aufwand beim manuellen Tes-
die den Testcode logisch und visuell hierfür demonstriert Listing 3. Es zeigt, ten, hat ständig alle Testfälle automatisch
auseinanderreißen. Catch verwendet wie der Entwickler ein Interface heraus- ausführbar und so weiter. Aber dennoch
lieber Sections, die der Programmierer zieht und eine testspezifische abgeleitete scheuen viele Entwickler vor Testcode
einfach in die Testfunktion integriert. Klasse implementiert. Dafür muss der zurück oder vergessen das Testen in der
Und wer auf BDD setzt, findet in Catch Code ein Interface oder Ähnliches vor- Zeitplanung.
eine alternative Teststrukturierung mit sehen und der Programmierer soll die Ein weiteres wichtiges Thema ist das
»SCENARIO()«, »GIVEN()«, »WHEN()« konkrete Implementierung von außen Mocking. Um die passende Umgebung
und »THEN()«. setzen können. In Listing 3 erledigt das zu simulieren, benötigt der Programmie-
Sicherlich bietet Catch nicht so viele Fea- der Konstruktor. rer Stellvertreter-Elemente in Form von
tures wie etwa Boost.Test. Es lässt sich Wichtig ist auch, die nicht testbaren Fakes, Stubs oder Mocks.
dafür einfacher erlernen und nutzen. Anteile (also die Abhängigkeiten von
Und es punktet mit einem sehr schlich- der Umwelt) möglichst gut zu isolieren Fakes
ten, aber eleganten API. und den entsprechenden Code möglichst
Auch wenn das alles recht einfach klingt: klein zu halten. GUI-Code lässt sich in Fakes sind Funktionen oder Klassen, um
Unittests zu schreiben hält auch zwei einem Unittest nicht überprüfen, da er die benötigte Schnittstelle zu adressieren,
besondere Herausforderungen bereit. eine Benutzerinteraktion erfordert. Im damit der Code übersetzt. Sie verfügen
07/2019
Titelthema
selbst über keine weitere Funktionalität Mocks nachzubilden und so gar keine rungs-Möglichkeiten, als das obige Bei-
und geben nur Standardwerte zurück. echten Tests mehr zu absolvieren. Es spiel zeigt. Der Artikel dient nur als eine
Reine Fakes kommen eigentlich nur sel- gibt auch fertige Frameworks, um Fakes, Art Appetithäppchen.

C++
ten zum Zug – in der Praxis finden sich Stubs und Mocks zu schreiben. Zu den
viel häufiger Stubs. bekanntesten zählen Google Mock [6] Code Coverage
und die Mocking-Elemente in Boost.Test.
Stubs Listing 4 demonstriert den Einsatz von Eine weitere sehr hilfreiche Technik für
Google Mock. Unittests besteht darin, ein Code-Co- 33

www.linux-magazin.de
Dabei handelt es sich um aktivere Wie Zeile 6 schön zeigt, vereinfacht es verage-Tool wie Gcov [7] zu verwenden.
Stellvertreter-Elemente. Sie geben zum Google Mock, eine Datenbanksimulation Mit einem Unittest- und einem Mock-
Beispiel spezielle Testwerte zurück, die zu erzeugen. Die besonderen Features fin- Framework bewaffnet schreibt der Ent-
sich auch mal von Aufruf zu Aufruf un- den sich aber in der Zeile 14. Das genaue wickler eine Menge guter Tests. Aber am
terscheiden. Auf diese Weise ließe sich Verhalten des »MockedDatabase«-Objekts Ende bleibt dennoch die Frage: Hat er
etwa ein Sensor simulieren, der sicher »m« richtet der Code erst im Testfall ein – wirklich alles getestet?
nicht immer Null zurückgibt. Oder sie die Klasse lässt sich also problemlos wie- Ein Code-Coverage-Tool liefert Antwort
reagieren zum Beispiel auf die überge- derverwenden. Zu den Konfigurationen darauf: Es zeigt, welche Codezeilen die
benen Parameter mit unterschiedlichen gehört der Rückgabewert der Funktion Tests durchlaufen haben und welche
Rückgaben oder werfen zum Beispiel in »getName()«. Im Gegensatz zu Listing 3 nicht. Gute Coverage-Tools gehen noch
manchen Situationen Exceptions. So ist liegen die Definition der Simulation und weiter und zeigen, ob die Tests alle Kom-
etwa die Elementfunktion »getName()« ihre Nutzung im Testfall im Quelltext binationen von booleschen Ausdrücken
im Listing 3 oben ein sehr einfacher räumlich eng beieinander. Zudem prüft abdecken, ob sie Schleifen mindestens n
Stub, da sie den testspezifischen Wert hier das Mock-Objekt, ob der Code die Mal durchlaufen haben.
»Albert Einstein« zurückliefert. Funktion »getName()« nur einmal auf- Natürlich beweist auch eine Code-Abde-
ruft. Im Destruktor führt der Code dann ckung von 100 Prozent nicht, dass Ent-
Mocks die Validierungen aus. wickler alles getestet haben – aber eine
Natürlich bieten Mock-Frameworks noch Abdeckung unter 100 Prozent versichert,
Schließlich gibt es noch Mocks. Die sind viel mehr Konfigurationen und Validie- dass dies nicht zutrifft. In der Praxis ist
im Prinzip auch Stubs, verifizieren aber
zusätzlich ihre Benutzung. Ruft also die Listing 4: Mocking mit Google Mock
zu testende Implementierung eine Daten- 01 struct IDatabase 11 TEST_CASE("Abfrage der Datenbank", "[db]")
bank mehrfach auf, obwohl ein Aufruf 02 { 12 {
ausreichend wäre, würde der Entwickler 03 virtual std::string getName() const = 0; 13 MockedInterface m;
dies bei einem Stub nicht bemerken. Ein 04 }; 14 EXPECT_CALL(m, getName()).WillOnce
Mock dagegen zählt die Anzahl der Auf- 05 (Return("Albert Einstein"s)));
rufe mit und validiert sie am Ende, wie es 06 struct MockedDatabase : Idatabase 15
Abbildung 3 und Listing 4 zeigen. Das
07 { 16 DatabaseStub db;
erlaubt auch indirekte Tests, die häufig
08 MOCK_METHOD0(getName, std::string()); 17 BusinessLogic bl(m);
ebenfalls wichtig sind.
09 }; 18 REQUIRE(bl.doit() == "<Albert Einstein>");
Der Entwickler muss nur darauf ach-
10 19 }
ten, eine Implementierung nicht in den
07/2019
Titelthema

zent. Zugleich führt er werden dann detailliert die einzelnen


Weiteren Test- stets alle Unittests aus, TDD-Schritte diskutiert. Solche Abende
fall schreiben
das Programm ist also machen viel Spaß und jeder lernt dazu.
C++

immer zu 100 Pro-


zent getestet. Hinzu Fazit
kommt, dass er nach
Testfälle zum jeder erfolgreichen Im- Unittests sind hilfreich und decken viele
TDD Laufen bringen
34 plementierung ein Re- Anforderungen an Tests ab. Sie sind kein
www.linux-magazin.de

factoring startet, was Allheilmittel. Entwickler brauchen wei-


den Code vereinfacht terhin andere Tests, etwa Systemtests.
und ordnet. Dennoch: Für die tägliche Entwicklung
Refactoring
Natürlich gibt es auch und Refactorings erweisen sie sich als
Kritikpunkte an TDD. eine Hilfe – und sind dank guter Frame-
Abbildung 4: Test-driven Development geht noch einen Schritt weiter und Geübte Programmie- works auch schnell geschrieben. Wichtig
denkt den Code von den Tests her. rer stören sich oft an ist, sie von Anfang an zu nutzen und sie
der Kleinschrittigkeit. vielleicht sogar vor der eigentlichen Im-
ein Wert über 90 Prozent sehr gut, 100 Die verlangt für jeden Testfall einen plementierung zu schreiben.
Prozent sind kaum zu erreichen. kompletten Durchlauf, obwohl der Pro- Erich Gamma, Ex-Chefentwickler der
Neben einem beruhigenden Gefühl ha- grammierer doch schon weiß, wohin die Eclipse-IDE und aktueller Chefentwick-
ben die Code-Coverage-Tools auch einen Reise geht. Vertreter von TDD sehen da- ler von Microsoft Visual Code sowie
lehrreichen Effekt. Immer wieder ist es rin gerade einen Vorteil, weil diese evo- Mitautor des bekannten Design-Pattern-
dem Autor passiert, dass er sicher war, lutionäre Methode häufig zu effizienteren Buches, sagte einmal: Er sei nur ein mit-
viele und gute Unittests geschrieben zu Algorithmen führe [9]. telmäßiger Entwickler, aber er habe gute
haben – um dann doch keine Coverage Neue Testfälle sorgen zudem mitunter Angewohnheiten. (kki) n
von 100 Prozent zu erreichen. dafür, dass große Teile der bisherigen
Die Analyse, warum er bestimmte Code- Lösung nicht mehr greifen und Code-
teile nicht oder nur teilweise getestet teile anzupassen sind. Kritiker monieren Infos
hatte, brachte ihm so manche Erkenntnis dann, dass die ersten Testfälle in die fal- [1] Liste der Unittest-Frameworks:
über den eigenen Code ein. Das führte sche Richtung führten. Die Entwickler [https://en.wikipedia.org/wiki/
zum Löschen von überflüssigem Code hätten vorher erkennen müssen, dass List_of_unit_testing_frameworks#C++]
oder zu einem tieferen Verständnis für diese Richtung keinen Sinn ergibt. [2] C++-Unittest-Framework Catch:
den verwendeten Algorithmus bis hin Positiv ist, dass dieses Schritt-für-Schritt- [https://github.com/catchorg/Catch2]
zum Finden von Fehlern. Vorgehen dabei hilft, Probleme zu lösen [3] Boost.Test: [https://www.boost.org/doc/
und Algorithmen zu entwickeln. Beim libs/1_70_0/libs/test/doc/html/index.html]
Test-driven Development Programmierer wächst ein gutes Ver- [4] Boost-Bibliothek: [https://www.boost.org]
ständnis des Codes, es entstehen extrem [5] Google Test:
Wer bis hierhin gelesen hat und mitt- nützliche Unittests, ein testbares Design [https://github.com/google/googletest]
lerweile überzeugt ist, dass Unittests ist vorhanden und der Code besitzt auf- [6] Google Mock:
durchaus Sinn ergeben, kann noch ei- grund des ständigen Refactoring eine [https://github.com/google/googlemock]
nen Schritt weiter gehen und Test-driven hohe Binnenqualität. [7] Gcov: [http://gcc.gnu.org/onlinedocs/gcc/
Development (TDD, [8]) ausprobieren. Wer sich für TDD interessiert, kann im Gcov.html]
Die Idee ist ganz einfach: Der Entwick- Internet ausprobieren, ob es tatsächlich [8] TTD: [https://de.wikipedia.org/wiki/
ler zerlegt sein Problem in viele kleine. eine Alternative zum bisherigen Program- Testgetriebene_Entwicklung]
Er implementiert diese, indem er erst mieren ist. Es gibt fertige Webseiten für [9] Robert C. Martin (Uncle Bob), „The Trans-
einen Testfall schreibt und ihn zum Lau- Code-Dojos (Code-Übungen), die häufig formation Priority Premise“:
fen bringt, bevor er sich an den nächs- TDD unterstützen. Die Lieblings-Web- [https://blog.cleancoder.com
ten Schritt wagt. Zudem schiebt er vor seite des Autors heißt Cyber-Dojo [10]. /uncle-bob/2013/05/27/
jedem neuen Testfall immer wieder eine Sie bietet für viele Programmiersprachen TheTransformationPriorityPremise.html]
Refactoring-Phase ein – dank vorhande- und Test-Frameworks vorgegebene oder [10] Cyber-Dojo: [https://www.cyber-dojo.org]
ner Unittests eine wahre Freude. eigene Aufgaben in TDD-Art an – für
Die Idee ist, dass sich der Code, angetrie- Einzelkämpfer, aber auch für Gruppen. Der Autor
ben durch die Testfälle, Schritt für Schritt Auch wer sich nicht für TDD begeistert, Detlef Wilkening programmiert seit über 20
entwickelt. Da der Entwickler immer zu- könnte Spaß an den Übungen in der ei- Jahren in C++ und hat in dieser Zeit in den ver-
erst die Testfälle schreibt, erzwingt er ein genen Sprache haben. schiedensten Anwendungsbereichen sowohl
testbares Design. Da er nur implemen- Der Autor selbst führt gern solche Dojos Desktop- als auch Serversysteme programmiert.
tiert, was die Testfälle von ihm fordern, in kleinen Gruppen von drei bis sechs Nebenher unterrichtet er C++ und Java an der
liegt die Testabdeckung stets bei 100 Pro- Leuten durch. Nach dem Grillen etwa Fachhochschule Aachen und hält Vorträge.
07/2019
Titelthema

Stresstests für IT-Infrastrukturen

Wunsch nach Chaos


Chaos Engineering
www.linux-magazin.de

36
Bevor es andere tun, können Admins in ihren Produktionssystemen – testweise – einfach selbst Chaos ver-
breiten. So bemerken sie im Optimalfall schon früh schwer kalkulierbare Stolpersteine. Kevin Peters

mitunter verursacht durch Naturkatas-


trophen, oft schlicht Folge von techni-
schem oder menschlichem Versagen.
Selbst Netzwerke mit verteilten Kompo-
nenten entwickeln gern ein Eigenleben
und verhalten sich leider nicht immer
deterministisch. Oder anders formuliert:
Jede produktiv eingesetzte IT ist anfällig
für Chaos.
Verteilte Systeme, Microservices, Contai-
ner: Was sich für Architekten und IT-In-
genieure heute wie eine bunte Spielwiese
anfühlt, entpuppt sich für die operative
IT dann als Hölle auf Erden. Im Worst
Case kippen die Planer einen Stapel frem-
der Technologien vor den Betrieblern aus.
© vicnt, 123RF

Denen fällt die ehrenvolle Aufgabe zu,


den Haufen zu ordnen. Denn auch in den
Zeiten von Devops existiert „die andere
Seite des Zauns“ noch immer. Nach wie
„Vertrauen ist gut, Kontrolle ist besser.“ der Anwendung häufig eine unsichtbare vor betreuen Entwickler ihr Produkt oft
Jeder kennt dieses Sprichwort und in den Gefahr, die in jeder komplexen Umge- nicht in der Produktion, was die Unsi-
meisten Situationen handeln Entwickler bung lauert: das Chaos. cherheit potenziert.
auch so. Programmieren sie eine neue Fällt das Wort in operativ tätigen IT-Ab- Selbst im positivsten Fall, wenn also Mit-
Applikation, legen sie Wert auf eine hohe teilungen – oder gar auf IT-Management- arbeiter ihre Software vom Reißbrett bis
Testabdeckung. Oft beschäftigen Unter- Ebene – zucken die Verantwortlichen in die Produktion begleiten, braucht in
nehmen unzählige Qualitätssicherer, schon mal nervös zusammen. Chaos will komplexen Umgebungen jemand einen
bevor sie ihr Produkt über die Ziellinie niemand, schon gar nicht in der aus kom-
schieben – im Fall einer Webanwendung plexen Prozessen komponierten EDV. Da- Gewolltes Chaos
in die Produktion. her sichern Dutzende Unittests einzelne
Chaos Engineering ist als Konzept nicht neu.
Doch dann – nach dem Releasetermin – Applikationskomponenten ab und liefern Obwohl viele Branchen ähnliche Tests und
scheinen alle Ängste vergessen. Zugleich Integrationstests Aufschluss über das Zu- Trainings absolvieren, hat die Videoplattform
übersehen und ignorieren die Betreiber sammenspiel der bekannten Bausteine. Netflix den Begriff und dazugehörige Tools
Ausgeklügelte Quality Gates und hoch beim Wechsel in die Cloud etabliert. Der Stre-
optimierte Releaseprozesse versprechen aming-Anbieter ließ 2011 seine Chaos Mon-
Der Autor volle Sicherheit beim anstehenden Gang keys, eine Armee aus Services, die beliebig
Kevin Peters arbeitet als in die Produktion. Eigentlich sollte nichts große Teile der Infrastruktur manipulieren,
Consultant bei der Code- mehr schiefgehen – oder? auf die eigenen Systeme los und testet sie
centric AG. Er hat sich auf seither mit gewollten Ausfällen.
den Einsatz des Spring Natürlich überwachen Admins diese Expe-
Chaos regiert rimente akribisch. Somit lernt der Content-
Framework und Hibernate
Riese viel über das Verhalten des eigenen
spezialisiert und legt in Doch selbst riesige Provider mit viel Er-
Produktionssystems und erkennt potenzielle
seinen Projekten großen Wert auf resilientes fahrung und starkem technischen Back-
Unstimmigkeiten frühzeitig.
Softwaredesign. ground erleben hier und da Ausfälle,
07/2019
Titelthema
Überblick über die Infrastruktur. Welche noch weniger verstan-

Chaos Engineering
Umsysteme gibt es und wie reagieren dene Systeme, laufen
diese? Wie sieht es mit der Verfügbar- seit dem Produktions-
keit aus? Wie sehr kann sich ein Admin gang stabil.
auf die SLAs von Drittanbieter-Systemen Die Admins könnten
verlassen? Stehen und fallen seine Ver- nun theoretisch durch-
sprechen gegenüber den Kunden bei- atmen. Insgeheim be-
spielsweise mit der Verlässlichkeit dieser schäftigt sie aber die

www.linux-magazin.de
37
Systeme, die er nicht unter Kontrolle hat? Frage, ob alle Services
Wer kann da noch ruhig schlafen? wie erwartet arbeiten

© Benjamin Wilms, Codecentric AG


und ob die Fallbacks
Die Welt der Microservices halten. Ist die Infra-
struktur wirklich si-
In aktuellen Architekturen stecken, an- cher? Sollte das nicht
ders als zu Bare-Metal-Zeiten, deutlich mal jemand praktisch
mehr Unwägbarkeiten. Die Applikatio- ausprobieren? Abbildung 1: Chaos findet nicht nur auf der technischen Ebene statt.
nen sollen weltweit laufen, Admins müs-
sen die Instanzen maßschneidern und Was wäre wenn? Konzept. Erst Recht kein mutwillig dest-
dabei die Kosteneffizienz beachten. Das ruktives, auch wenn der Begriff zunächst
versteckte Geflüster in den Netzen erhöht Solche „Was wäre wenn?“-Szenarien ein wenig so klingen mag. Denn der
die Komplexität weiter: Viele Services spielt das Chaos Engineering durch. Es Chaos Engineer möchte das Chaos, das
bedeutet auch, dass Komponenten viel orientiert sich an den Installationen mo- sich ihm in Produktionsumgebungen in
untereinander kommunizieren. derner Einsatz- und Rettungsteams aus den Weg stellt, möglichst im Zaum halten
Zudem fallen solche IT-Landschaften sel- der wirklichen Welt und erlaubt so etwas (Abbildung 1).
ten homogen aus. Es gibt nicht nur „die wie regelmäßige Katastrophenschutz- Das bedeutet zum Beispiel, das gesamte
eine“ Datenbank, sondern mehrere. Dazu übungen. Die Idee: Was sich für kritische System unter kontrollierten Bedingungen
kommt eine größere Palette an Diensten, Infrastrukturen der Gesellschaft bewährt, Stresstests zu unterziehen. Eine proble-
gern auch in exotischen Programmier- kann der IT nicht schaden. matische Alternative wäre es, zu warten,
sprachen. Es gibt Message Queues, Key Chaos Engineering ist kein im Elfenbein- bis die kauflustigen Kunden in der Weih-
Value Stores, Caches und Vaults. turm geborenes, womöglich esoterisches nachtszeit diesen Test außerhalb der ei-
Oft genug soll dann
ein einziger Admin
diesen komplexen
Flohzirkus unter Kon-
trolle halten. Weil die
Flöhe aber in vielen
Sprachen, über meh-
rere Dienste und welt-
weite Rechenzentren
hinweg miteinander
reden, entstehen un-
zählige potenzielle
Bruchstellen.

Auftritt Chaos
Engineering
Trotz dieser Hinder-
nisse schaffen es viele
Produkte am Ende
© Benjamin Wilms, Codecentric AG

doch irgendwie in
die Produktion. Die
Entwicklung hat gute
Arbeit geleistet und
sogar Fallbacks in das
ein oder andere Sys-
tem integriert. Andere, Abbildung 2: Der Chaos-Stifter richtet einen erweiterbaren Blast Radius ein, der die Folgen potenzieller Auswirkungen begrenzt.
07/2019
Titelthema

bindungen oder ge-


Chaos Engineering

nauer gesagt beim


Connection-Handling.
Meist gibt es dafür ei-
nen Fallback, weil der
Admin weiß, dass
eine Verbindung auch
mal instabil sein
www.linux-magazin.de

38
kann. Um dieses Sys-
tem zu testen, stellt er
etwa folgende Hypo-
these auf: „Der Kom-
mentar-Service über-
steht einen Neustart
der Datenbank und ist
Abbildung 3: Einfaches Chaos lässt sich bereits mit traditionellen Linux-Tools wie Stress anzetteln. danach in der Lage,
weiterhin Anfragen zu
genen Kontrolle selbst starten. Kontrolle einfach etwas länger, bleiben aber den- beantworten.“ Dies überprüft er dann in
ist in diesem Fall ein Schlüsselwort. Es noch auf der Plattform? Und welche Ver- einem Chaos-Experiment.
geht beim Chaos Engineering um kontrol- änderungen sind zu erwarten, wenn ein
lierte Experimente, um dem Chaos gezielt Besucheransturm erfolgt? Blast Radius
Grenzen zu stecken. Mit den so gewonne- Dazu müssen sie zunächst wissen, wie
nen Erfahrungen lassen sich dann resili- lange eine reguläre Bestellung überhaupt Vorher muss er aber die Sicherheitsnetze
ente Applikationen entwickeln. unter guten Performance-Bedingungen aufspannen, denn er möchte kontrollierte
dauert und wie sich das System regulär Tests anschieben, keine wilden Brand-
Echte Werte verhält. Das erfordert eine Bestandsauf- herde entfachen. Daher steckt er einen
nahme. Doch Statistiken im technischen Sicherheitsbereich ab und sorgt dafür,
Gute Metriken sind dabei kriegsentschei- Sinne helfen am Anfang kaum weiter. dass der Test auch nur jene Systeme be-
dend. Test- und Messergebnisse sollen Vielmehr geht es um Kriterien, die das einflusst, die Teil des Versuchs sind und
die Realität widerspiegeln, um reale Geschäft widerspiegeln und das Nutzer- unter seiner Kontrolle stehen. Erst wenn
Erkenntnisse zu gewinnen und daraus verhalten einbeziehen. das der Fall ist, kann er den so genannten
konkrete Handlungsschritte abzuleiten. Für einen Onlineshop zählen etwa abge- Blast Radius (Abbildung 2) im Laufe der
Daher zieht das Chaos Engineering nur schlossene Verkäufe pro Minute oder die Experimente Schritt für Schritt erweitern.
begrenzt Daten von Testsystemen heran. Anzahl der Beschwerden pro Tag. Diese Im konkreten Beispiel sollte er also si-
Die Admins wollen schließlich wissen, Business-Metriken im Verhältnis zu defi- chergehen, dass auch ein Misserfolg des
wie sich ein reales System unter realen nierten Rahmenbedingungen repräsentie- Experiments nur den Kommentarservice
Bedingungen verhält. Also nutzen sie das ren dann den Steady State, das normale betrifft und nicht noch weitere Applikati-
Monitoring des Produktivsystems für die Verhalten des Systems. onen mit in den Abgrund reißt.
Business-Metriken. Existiert ein solches Dazu zählen aber auch technische Me-
nicht, setzen sie es auf. Dann ermitteln triken. Dank dieser erkennen Admins Chaos-Experiment
sie den so genannten Steady State. frühzeitig Fehler, die sich nicht direkt im
Steady State niederschlagen. Womöglich Nun ist alles präpariert. Die Business-
Wo liegt das Problem? arbeitet das Auto-Scaling einiger Instan- Metriken, um die Hypothese zu testen,
zen ungewöhnlich stark. Oder die ersten stehen, der Steady State ist ermittelt. Im
Der Begriff Steady State gehört zur Requests laufen ständig in Netzwerk- nächsten Schritt startet der Admin die
Chaos-Engineering-Terminologie und Time-outs und nur die Fallbacks antwor- Datenbank neu, schiebt so den geplanten
lässt sich in ein paar Sätzen erklären. ten. Dies sollten sie beheben, bevor das Eingriff an und beobachtet das System
Angenommen, Admins prüfen ein System Problem zum Nutzer eskaliert. Kurzum: mit Hilfe des Monitoring. Der praktische
insbesondere unter den Gesichtspunkten Systemerfahrene Techniker erkennen an Teil des Chaos-Experiments besteht also
seiner Belastbarkeit und Ausfallsicher- kleinen Unregelmäßigkeiten Gefahren darin, die Hypothese am produktiven
heit. In diesem Fall müssen sie zunächst und handeln präventiv. System zu untersuchen.
klären, wie sich Last negativ auf das kon-
krete System auswirkt. Hypothese Untersuchen und anpassen
Wie machen sich die Lastspitzen aus
Business-Perspektive bemerkbar? Ver- Zeit für ein Beispiel. Mögliche Schwach- Danach gilt es, diese Ergebnisse auszu-
kauft das Unternehmen effektiv weniger stellen einer verteilten Anwendung ver- werten, um die Hypothese zu bestäti-
seiner Produkte? Oder warten die Nutzer bergen sich gern hinter Datenbankver- gen oder zu widerlegen. Antwortet der
Kommentar-Service erwartungsgemäß, Das Werkzeug Tc (Traffic Control, [2])
ist das Experiment gelungen. Weiter zur ist in der Lage, die Netzwerk-Kommuni-
nächsten Baustelle. Verweigert er die Ant- kation gezielt zu manipulieren:
wort, ist das Experiment gescheitert und
tc qdisc add dev lo root netem delay 100ms
ein neues Ticket wandert ins Backlog – tc qdisc del dev lo root
meist mit hoher Priorität.
Der erste Befehl baut in jedes über den
Game Day Netzwerkadapter gesendete Paket eine
Verzögerung von 100 Millisekunden ein
Chaos Engineering lässt sich also abstrakt (»delay 100ms«). Die zweite Zeile deakti-
mit dem Bild von produktionsnahen In- viert das Delay wieder.
tegrations- und Systemtests beschreiben. Bereits mit diesen beiden Werkzeugen
Speziell handelt es sich um Tests, die ein ruft ein Admin gezielt Beeinträchtigun-
System auf die Feuerprobe stellen. Die gen hervor und startet erste Chaos-Expe-
ersten Tests schiebt der Admin jedoch rimente auf kleiner Flamme.
bereits in der Theorie am Schreibtisch
an, beim so genannten Game Day. Fortgeschrittenes Chaos
Dabei stellen er und sein Team Hypothe-
sen auf und diskutieren sie. Welche Kata- Wer mit Docker arbeitet und die Resili-
strophen könnten das System gefährden, enz seines Systems prüfen möchte, kann
welche Ausfälle steckt es locker weg? zu Pumba [3] greifen, um Chaos-Expe-
Würden etwa alle Dienste einen Neustart rimente auf Container-Ebene zu starten.
der Datenbank überleben? Oder Schlim- Läuft Pumba auf dem Docker-Host, ist es
meres? Falls ja, Chapeau! Falls nicht, gilt leicht, das Verhalten eines oder mehrerer
es, die Services resilienter zu machen Container zu manipulieren. Die Unter-
und beim nächsten Mal weitere theore- brechung aller Prozesse für 10 Sekunden
tische Angriffe zu starten. lässt sich beispielsweise mit einem simp-
Sind auf dem Papier keine Schlachten len Kommando initiieren:
mehr zu gewinnen, lassen sich die Theo-
pumba pause --duration 10s
rien im Praxisexperiment der Produktion
testen oder – für eher Vorsichtige – in Dank der vorgestellten CLI-Befehle verur-
einem produktionsnahen Testsystem. Je sacht der Admin mit wenigen Handgrif-
weiter sich der Admin aber von der tat- fen schon ein ordentliches Maß an kon-
sächlichen Anwendung entfernt, desto trolliertem Chaos. So muss er nicht erst
unzuverlässiger sind die Testergebnisse. auf den unkontrollierten Nutzeransturm
um Weihnachten warten, bis die Systeme
Kleines Chaos in die Knie gehen.
Natürlich ist das Ausführen manueller
Wie aber mit dem Chaos Engineering be- Kommandos nur ein Hilfsmittel, um erste
ginnen? Als niedrig hängende Frucht und Erfahrungen mit kleinen, simplen Syste-
somit erster Angriffspunkt gilt immer die men zu sammeln. Nimmt die Komplexi-
Kommunikation zwischen Systemkom- tät der Systeme zu, gibt es also beispiels-
ponenten. Hier bekommt der Admin ein- weise viele heterogene Microservices,
fach einen Fuß in die Tür, wenn er die die in verteilten Container-Umgebungen
Hostsysteme unter Kontrolle hat. Er kann laufen, müssen Chaos-Stifter ein wenig
stupide einzelne Systeme herunterfahren, weiter ausholen.
aber auch mit Linux-Bordmitteln die Zum professionellen Testen großer Sys-
(Netzwerk-)Antwortzeiten eines Host- teme gibt es mittlerweile auch im Chaos-
rechners manipulieren, etwa mit so ge- Engineering-Bereich verschiedene PaaS-
nannten Fault Injections. Das klappt un- Lösungen. Zu nennen ist hier etwa die
ter anderem über das Tool Stress [1], das Chaos Platform von Chaos-IQ [4], sie
Last auf der CPU des Systems erzeugt: stellt Werkzeuge wie das Chaos Toolkit
[5] und das Chaos Hub bereit.
stress --cpu 2 --timeout 30s --verbose
Mit dem Chaos Toolkit gießt der Admin
In diesem Beispiel generiert Stress auf seine Experimente in Skripte und doku-
zwei Workern für 30 Sekunden Volllast mentiert sie auf diese Weise auch gleich.
(Abbildung 3). Für viele verbreitete Plattformen wie Ku-
07/2019
Titelthema

Da die Experimente
Chaos Engineering

auf produktiven Infra-


strukturen stattfin-
den, müssen die
Chaos-Stifter nach ei-
nem Experiment –
egal ob es erfolgreich
ausgegangen ist oder
www.linux-magazin.de

40
nicht – hinter sich
wieder aufräumen
(»rollbacks«). Das be-
deutet unter anderem,
die Pumba-Artefakte
nach dem Ende der
Experimente wieder
entfernen. Über Chaos
Toolkit startet der
Abbildung 4: Die Auswirkungen des Experiments finden sich auch in den Metriken wieder. Admin das Skript:

chaos Skriptname --org Organisation U


bernetes gibt es bereits Schnittstellen, die ration. Dieser Angriff lässt sich mit einem
--workspace Public
es erlauben, Systeme automatisiert mit geskripteten Chaos-Toolkit-Experiment
Fault Injections verschiedenster Art zu schließlich automatisiert und nachvoll- Es übernimmt die weitere Ausführung
unterwandern. Das Chaos Hub erweitert ziehbar dokumentiert im Chaos Hub und dokumentiert das Ergebnis im öf-
das Chaos Toolkit um Optionen zur Kol- ablegen. Das Chaos-Toolkit-Skript aus fentlichen Workspace eines Chaos-Hub-
laboration. Es erlaubt, die Arbeitsschritte Listing 2 repräsentiert am Ende das ge- Accounts.
rund um die Experimente sowie die Re- samte Experiment.
sultate mit anderen zu teilen. Im ersten Teil definiert das Skript Auf dem Schirm
Pumba-Angriffe lassen sich in Kombi- Metadaten zum Experiment (»version«,
nation mit Kubernetes problemlos über »tags« und so weiter), einen Soll-Zustand Detailliertes Monitoring ist für erfolg-
das Chaos Toolkit steuern. Um einen (»steady-state-hypothesis«, Zeile 10) und reiches Chaos Engineering ausschlagge-
Chaos-geladenen Container zu erzeugen, zuletzt Prüfroutinen, die diesen Zustand bend. Schließlich möchte der Admin gern
der mit Hilfe von Pumba alle anderen beschreiben (»probes«, Zeile 12). wissen, wie sich das System während der
Container, deren Namen den Teilstring Im Mittelteil (»method«, Zeile 25) befin- Experimente verhält.
»fashion-pod« tragen, mit einem Fünf-Se- den sich die spannenden Passagen. Sie Für diesen Job erweist sich das Experten-
kunden-Netzwerk-Delay infiziert, würde beschreiben unter anderem die Angriffe tool Instana [6] als perfekt geeignet. Es
bereits das Kubernetes-Skript aus Listing (»"type": "action"«, Zeile 40), hier findet überwacht verteilte Container-Umgebun-
1 reichen. auch das Deployment des Pumba-Con- gen effektiv und ohne großen Aufwand
Die Werteliste »args« des einzigen Con- tainers als Daemon Set statt (»"deploy_ zu erzeugen. Der Admin installiert den
tainers enthält hier die Pumba-Konfigu- pumba_as_daemon_set"«). Instana-Agenten auf dem Container-Host,

Listing 1: Fünf-Sekunden-Netzwerk-Delay
01 apiVersion: extensions/v1beta1 15 containers: 30 - "re2:.*fashion-pod*"

02 kind: DaemonSet 16 - image: gaiaadm/pumba:master 31 resources:

03 metadata: 17 imagePullPolicy: Always 32 requests:

04 name: pumba 18 name: pumba 33 cpu: 10m

05 namespace: shoppingdemo 19 args: 34 memory: 5M

06 spec: 20 - --interval 35 limits:

07 template: 21 - "15s" 36 cpu: 100m

08 metadata: 22 - netem 37 memory: 20M

09 labels: 23 - --tc-image 38 volumeMounts:

10 app: pumba 24 - gaiadocker/iproute2 39 - name: dockersocket

11 type: chaos-engineering-tool 25 - --duration 40 mountPath: /var/run/docker.sock

12 com.gaiaadm.pumba: "true" # prevent 26 - "5s" 41 volumes:

pumba from killing itself 27 - delay 42 - hostPath:

13 name: pumba 28 - --time 43 path: /var/run/docker.sock

14 spec: 29 - "5000" 44 name: dockersocket


07/2019
Titelthema
wo er auch alle laufenden Container in verfügbar und erläutern ausführlich die Experimente mit geringem Aufwand.

Chaos Engineering
der Umgebung analysiert. Art und Zu- Prinzipien des Chaos Engineering. Natürlich steigt der Testaufwand mit der
sammenspiel der einzelnen Anwendun- Systemgröße, die gesammelten Erfahrun-
gen erkennt er dabei automatisch und Fazit gen machen sich aber nachhaltig bezahlt.
visualisiert sie. So kann er die Kommu- Wichtig ist am Ende, die Experimente re-
nikation untereinander und die Metriken Entschließt sich eine IT-Abteilung, Chaos gelmäßig und automatisiert auszuführen,
der einzelnen Komponenten lückenlos Engineering einzuführen, ist dies sicher also das Chaos zu umarmen. (kki) n
überwachen. nicht frei von Aufwand. Auf der Nutzen-

www.linux-magazin.de
41
Das Experiment soll die angegriffenen seite findet sich aber nicht nur ein resili-
Services besonders genau im Auge be- entes System mit vorhersagbarem Verhal- Infos
halten. Das Verhalten zum Zeitpunkt ten, sondern auch das gute Gefühl, für [1] Stress: [https://linux.die.net/man/1/stress]
eines Angriffs lässt sich dann mit dem mehr Eventualitäten gewappnet zu sein. [2] Traffic Control:
Verhalten im Regulärbetrieb vergleichen. Und beides ist mitunter mehr wert als die [https://linux.die.net/man/8/tc]
Die im Experiment gestarteten Angriffe Implementierungskosten. [3] Pumba:
heben sich gegebenenfalls deutlich in Zusätzlich erzwingt Chaos Engineering [https://github.com/alexei-led/pumba]
den Metriken hervor. ein gut durchdachtes Monitoring, das [4] Chaos Platform:
Gehen die Metriken während des Expe- ohnehin eine wertvolle Investition ist. [https://chaosplatform.com]
riments allerdings zu stark in den Keller Einen detaillierten Überblick über sein [5] Chaos Toolkit: [https://chaostoolkit.org]
(Abbildung 4), sollte der Admin unbe- System zu haben, das ist in komplexen [6] Instana: [https://www.instana.com]
dingt rechtzeitig die Notbremse ziehen. Umgebungen oft fundamental. [7] Chaos-Engineering-Leitfaden „Principles of
Schließlich arbeitet er auf dem Produk- Chaos Engineering lässt sich aber auch Chaos Engineering“:
tionssystem. für kleine Applikationen sinnvoll anwen- [http://principlesofchaos.org]
Wer sich weiter in das Thema einlesen den. Die hier vorgestellten Tools erlauben [8] Casey Rosenthal et. al., „Chaos Enginee-
möchte, findet grundlegende Literatur manuelle Fault Injections zum Teil bereits ring“, O’Reilly: [https://www.oreilly.com/
unter [7] und [8]. Beide Werke sind frei ohne hohe Kosten. Das ermöglicht kleine ideas/chaos-engineering]

Listing 2: Chaos-Toolkit-Skript
01 { 29 "tolerance": true, 57 "provider": {
02 "version": "1.0.0", 30 "provider": { 58 "type": "process",
03 "title": "Inject latency in a fashion pod", 31 "type": "python", 59 "path": "ab",
04 "description": "Inject latency via Pumba 32 "module": "chaosk8s.probes", 60 "timeout": 60,
into a fashion pod", 61 "arguments": {
33 "func": "all_microservices_healthy",
05 "tags": [ 62 "-n": "500",
34 "arguments": {
06 "microservice", 63 "-c": "4",
35 "ns": "shoppingdemo"
07 "kubernetes", 64 "-s": "1",
36 }
08 "pumba"
65 "-g": "output.data",
37 }
09 ],
66 "https://host/startpage": ""
38 },
10 "steady-state-hypothesis": {
67 }
39 {
11 "title": "Services are all available and
68 }
healthy", 40 "type": "action",
69 }
12 "probes": [ 41 "name": "deploy_pumba_as_daemon_set",
70 ],
13 { 42 "provider": {
71 "rollbacks": [
14 "name": 43 "type": "process",
72 {
"api-gateway-must-still-respond", 44 "path": "kubectl",
73 "type": "action",
15 "provider": { 45 "arguments":{
74 "name": "delete_pumba_as_daemon_set",
16 "type": "http", 46 "apply":"",
75 "provider": {
17 "url": "http://host/startpage",
47 "-f":"../pumba-inject-latency-
76 "type": "process",
18 "timeout": [0.25, 0.50]
all-fashion-services.yaml"
77 "path": "kubectl",
19 },
48 }
78 "arguments":{
20 "tolerance": 200,
49 },
21 "type": "probe" 79 "delete":"",
50 "pauses": { 80 "-f":"../pumba-inject-latency-
22 }
51 "after": 15 all-fashion-services.yaml"
23 ]
52 } 81 }
24 },
25 "method": [ 53 }, 82 }

26 { 54 { 83 }

27 "type": "probe", 55 "type": "probe", 84 ]

28 "name": "all-services-are-healthy", 56 "name": "check-gateway-response", 85 }


07/2019
Titelthema

Javascript-Programme testen

Mit Karma entwickeln


Karma

42
www.linux-magazin.de

Wie testen Webentwickler immer komplexere Javascript-Anwendungen in vielen Browsern? Vor dieser Frage
standen die Entwickler des Angular.js-Framework und schufen fix eine Software namens Karma. Tim Schürmann

Karma registriert diesen Schritt im Hin-


tergrund und testet diese Browser auto-
matisch mit.
Der Webserver liefert eine speziell prä-
parierte Seite aus, die im Browser über
Websockets mit dem Webserver kom-
muniziert. Die Seite enthält ein I-Frame,
in das der Webserver eine weitere Un-
terseite injiziert. Sie enthält den zu tes-
tenden Code, die auszuführenden Tests
sowie weiteren Code, der die eigentliche
Testausführung steuert. Er ist Teil eines
so genannten Adapter-Plugins, das die
Tests an das zugehörige Test-Frame-
© vincentstthomas, 123RF

work weiterreicht. Entscheidet sich der


Webentwickler zum Beispiel für das
Framework Jasmine, sorgt der Jasmine-
Adapter dafür, dass diese Tests in den
Browsern ablaufen.
Mit Karma [1] soll die Test-getriebene dass der Code innerhalb des Browsers Die Testergebnisse fließen über den
Entwicklung „leicht, schnell und ver- Chrome startet. Websocket zurück zum Server. Dort
gnüglich“ sein. Das Tool startet eine in In der Regel spannen die Plugins für ihre fangen sie Reporter-Plugins ab, die alle
Javascript geschriebene Webanwendung. Aufgaben weitere Software ein. Auch Resultate aufbereiten und in der ge-
Es führt dann die vom Entwickler vorge- die eigentlichen Tests delegiert Karma wünschten Darstellung zurückliefern.
gebenen Tests automatisch in mehreren über passende Plugins an etablierte Im einfachsten Fall gibt sie der Reporter
Browsern zugleich aus und protokolliert Test-Frameworks wie Jasmine [2], Mo- »progress« als Meldung auf der Komman-
die Ergebnisse. Die Browser dürfen sogar cha [3] oder Qunit [4]. Webentwickler dozeile aus.
auf externen Geräten wie einem Smart- müssen folglich nicht umlernen, sondern
phone oder einem Tablet-PC laufen. So dürfen ihre vertraute Testumgebung nut- Rufbereitschaft
lässt sich der eigene Code schnell unter zen. Über selbst geschriebene Plugins
realen Bedingungen testen. binden sie auch selbst gestrickte Test- Die Entwickler empfehlen Karma und
Für erste Tests zündet Karma bei Bedarf Frameworks ein. Weitere Karma-Plugins alle nötigen Plugins in das jeweilige Pro-
den Code auch in einer ohne GUI lau- unterstützen nach dem gleichen Prinzip jektverzeichnis der zu testenden Weban-
fenden Phantom.js-Instanz (Headless- Continuous Integration via Jenkins [5], wendung zu installieren. Einzige Voraus-
Betrieb). Karma überwacht zudem den Travis [6] oder Semaphore [7]. setzung dazu sind Node.js und NPM. Die
Code und führt bei jeder Änderung au- Nach seinem Start lädt Karma zunächst folgenden zwei Befehle holen Karma in
tomatisch die hinterlegten Tests neu aus. alle Plugins und liest seine Konfigura- das aktuelle Projektverzeichnis:
tionsdatei ein. Dann startet es im Hin-
npm install karma --save-dev
Ausgeliefert tergrund einen Webserver, der die zu npm install karma-jasmine jasmine-core U
testende Webanwendung anbietet. An- karma-chrome-launcher --save-dev
Karma selbst besteht aus mehreren Plug- schließend startet Karma die Browser mit
ins, die jeweils eine ganz bestimmte Auf- der URL des Webservers. Der zweite Befehl lädt drei Plugins nach:
gabe lösen. So sorgt zum Beispiel das Bei Bedarf steuert der Webentwickler den Der Test-Adapter »karma-jasmine« er-
Plugin »karma-chrome-launcher« dafür, Webserver auch manuell per Browser an. laubt es, Jasmine als Test-Framework zu
07/2019
Titelthema
Karma
43

www.linux-magazin.de
Abbildung 1: In diesem Fall wird Karma das Jasmine-Framework verwenden, die Abbildung 2: Die Konfigurationsdatei nutzt Javascript-Code, den Karma bei sei-
Tests (nur) in Chrome ausführen, dabei alle Javascript-Dateien aus dem Ordner nem Start lädt. Sie listet zum Beispiel jene Dateien auf, die der Browser für
»js« einbinden und diese stetig auf Veränderungen überwachen. seine Tests später laden muss.

nutzen, »jasmine-core« holt das eigent- importiert sie einfach bei seinem Start Deren Bedeutung erläutern ausführli-
liche Jasmine-Framework auf die Platte und wertet die darin gesetzten Variablen che Kommentare. Im folgenden Beispiel
und »karma-chrome-launcher« sorgt noch aus. Alternativ lässt sich die Konfigura- würde Karma alle Javascript-Dateien aus
dafür, dass Karma selbstständig Chrome tion auch in Coffeescript oder Typescript den Ordnern »js« und »tests« einladen:
starten kann. Die Pakete landen schließ- notieren. Dazu erhält die Konfigurations-
files: [
lich innerhalb des Projektverzeichnisses datei einfach die Endung ».coffee« bezie- 'js/*.js',
im Unterordner »node_modules«. Nach hungsweise ».ts«. 'tests/*.js'
der Installation startet Karma über den In jedem Fall muss der Entwickler einem ],

Aufruf von: Assistenten ein paar Fragen zum Projekt


beantworten (Abbildung 1). Dazu zäh- »files« listet dabei alle Dateien auf, die
./node_modules/karma/bin/karma
len insbesondere das zu verwendende der Browser später laden muss. Dazu
Um Tipparbeit zu sparen, kann der Ent- Test-Framework und die zu nutzenden gehören auch sämtliche Tests. Platzhal-
wickler noch global das Paket »karma-cli« Browser. Den Speicherort der Quellcode- ter wie das Sternchen erschlagen gleich
installieren: Dateien trägt er bei Bedarf auch später mehrere Dateien.
manuell nach.
sudo npm install -g karma-cli
Innerhalb der Konfigurationsdatei zeigt Browserwahl
Es richtet das Kommandozeilen-Pro- »module.export« auf eine Funktion, die
gramm »karma« ein, das als Alias für den ein Konfigurationsobjekt entgegennimmt. Hinter »browsers« folgen alle Browser, in
obigen Bandwurmbefehl fungiert und Die Funktion setzt dann im Objekt die denen Karma den Code testen soll. Ta-
somit automatisch die aktuell verfügbare passenden Variablen (Abbildung 2). belle 1 verrät für die wichtigsten Browser,
Karma-Fassung aufruft.
Tabelle 1: Browser-Launcher
Fragwürdig Browser Eintrag in der Konfigurationsdatei Launcher für den Browser
Damit weilt Karma auf der Festplatte. Es Chrome »Chrome« »karma‑chrome‑launcher«
weiß aber noch nicht, was es wie und wo Firefox »Firefox« »karma‑firefox‑launcher«
testen soll. Genau dies verrät dem Tool Phantom.js »Phantom.js« »karma‑phantomjs‑launcher«
eine Konfigurationsdatei, die der Befehl Opera »Opera Classic« (bis Version 12), »karma‑opera‑launcher«
»karma init karma.conf.js« erzeugt. Den »Opera« (ab Version 15)
Namen der Konfigurationsdatei wählt der Edge »Edge« »karma‑edge‑launcher«
Entwickler nach Gusto. Internet Explorer »IE« »karma‑ie‑launcher«
Wie die Endung andeutet, handelt es sich
Safari »Safari« »karma‑safari‑launcher«
dabei um eine Javascript-Datei. Karma
07/2019
Titelthema

preprocessors: {
'js/*.js': 'coverage'
},
Karma

Damit die Ergebnisse von Istanbul nicht


sinnlos im Nirwana verschwinden, muss
ein Reporter sie noch aufbereiten:

reporters: ['progress', 'coverage'],


44
www.linux-magazin.de

Weitere Anpassungen an der Konfigura-


tionsdatei sind meist nicht nötig – mit ei-
ner Ausnahme: Der von Karma gezündete
Webserver lauscht später standardmäßig
an Port 9876. Sofern dieser bereits belegt
ist, passt der Tester ihn neben »port« ent-
sprechend an. Wer weitere Änderungen
Abbildung 3: Karma startet hier den Webserver, dann Firefox. Der führt den Test aus Listing 2 aus. vornehmen muss oder möchte, findet auf
der Karma-Website [11] eine ausführliche
welche Kürzel in die Konfigurationsdatei schneller Ergebnisse, die aber im Gegen- Referenz aller Variablen beziehungsweise
gehören. Für auf diese Weise ergänzte zug nicht mit denen von Chrome, Firefox Einstellungen.
Browser wartet in der Regel ein entspre- & Co. übereinstimmen müssen.
chender Launcher. Für diesen muss der Webentwickler starten zudem jeden be- Zündung!
Webentwickler zusätzlich noch das pas- liebigen anderen Browser, indem sie in
sende Plugin holen. der Konfigurationsdatei einfach den kom- Damit fehlen jetzt nur noch der zu tes-
Um beispielsweise den Code auch in pletten Pfad zu seiner Binärdatei ange- tende Code sowie die Testfälle. Für die
Firefox zu testen, ergänzt der Entwickler ben, etwa: ersten Schritte mit Karma bietet sich die
»browsers: ['Chrome', 'Firefox'],« in der einfache Addition aus Listing 1 an: Die
browsers: ['/usr/local/bin/ExotischerU
Konfigurationsdatei und installiert dann _Browser.sh'],
dortige Funktion addiert versehentlich
noch über die Kommandozeile den pas- immer nur dann die zwei Zahlen, wenn
senden Launcher via: Daneben besteht die Option, einfach mit sie gleich sind. Einen dazu passenden
einem Browser den von Karma gestar- Test für Jasmine zeigt Listing 2. Karma
npm install karma-firefox-launcher U
--save-dev
teten Webserver anzusteuern. Auf die- startet jetzt der Befehl:
sem Weg testet der Entwickler auch die
karma start karma.conf.js
Für welchen Browser welches Plugin Browser von Mobilgeräten, Tablet-PCs
notwendig ist, verrät ebenfalls Tabelle 1. und anderen Betriebssystemen. Der Name der Konfigurationsdatei darf
Viele weitere Launcher finden sich zu- Hinter »frameworks« folgen die zu ver- entfallen, sofern sie »karma.conf.js«,
dem unter [8]. Phantom.js eignet sich wendenden Test-Frameworks. Standard-
als Headless-Browser vor allem für erste mäßig ist dies nur »jasmine«, sämtliche
schnelle Tests während der Entwicklung: verfügbaren Frameworks finden sich Infos
Da er kein GUI startet, liefert er deutlich unter [9]. Dort erfahren Webentwickler [1] Karma: [https://karma‑runner.github.io/]
auch, welches passende Adapter-Plugin [2] Jasmine: [https://jasmine.github.io]
Listing 1: »js/add.js« sie noch mit »npm« auf die Festplatte ho- [3] Mocha: [https://mochajs.org]
01 function add(x, y) { len müssen. [4] Qunit: [https://qunitjs.com]
02 if (x === y) {
[5] Jenkins: [https://jenkins.io]
03 return x + y; Abgedeckt [6] Travis: [https://travis‑ci.org]
[7] Semaphore: [https://semaphoreci.com]
04 }
Den Javascript-Code kann Karma noch [8] Liste aller Launcher: [https://www.npmjs.
05 }
vor dem eigentlichen Testlauf durch org/browse/keyword/karma‑launcher]
Präprozessoren schicken. Auf diesem [9] Liste aller Adapter: [https://npmjs.org/
Listing 2: »tests/add.test.js« Weg lässt sich beispielsweise die Test- browse/keyword/karma‑adapter]
01 describe('Add-Funktion', function() { abdeckung über das Tool Istanbul [10] [10] Istanbul: [https://istanbul.js.org]
02 ermitteln. Ein passendes Plugin für Istan- [11] Referenz der Konfigurationsdatei:
03 it('addiert zwei ungerade zahlen', () => {
bul installiert zunächst der Befehl »npm [https://karma‑runner.github.io/3.0/
04 expect(add(2, 3)).toEqual(5);
install karma-coverage --save-dev«. An- config/configuration‑file.html]
schließend muss Karma noch wissen, [12] Vojtêch Jína: „Javascript Test Runner”
05 });
dass es Istanbul starten soll. (Master‑Arbeit):
06
Das erledigt in der Konfigurationsdatei [https://github.com/karma‑runner/karma/
07 });
die folgende Einstellung: raw/master/thesis.pdf]
07/2019
Titelthema
»karma.conf.coffee« oder »karma.conf.
ts« heißt. Karma startet im Anschluss
den Webserver, dann die entsprechenden

Karma
Browser und führt schließlich sämtliche
Tests aus.
Die Ergebnisse zeigt Karma dann in der
Konsole an, wobei der Test in Abbildung
3 offensichtlich fehlschlägt. Ist auch Is- 45

www.linux-magazin.de
tanbul eingebunden, landen die Informa-
tionen über die Testabdeckung zudem im
Projektverzeichnis im Unterordner »co-
verage« (Abbildung 4).
Um den gemeldeten Fehler zu beheben,
muss der Webentwickler in Listing 1 le-
diglich die Abfrage entfernen. Das lau- Abbildung 4: Wie Istanbul im Coverage-Report zeigt, ist die Testabdeckung aus Listing 2 noch nicht optimal.
fende Karma erkennt die Änderungen an
der entsprechenden Datei und führt den ihre eigenen Frameworks weiterhin nut- Webanwendungen entwickeln möchte,
Test umgehend erneut aus. zen und müssen nicht umlernen. sollte dem Test-Tool daher unbedingt eine
Das automatisierte Testen in mehreren Chance geben.
Fazit Browsern gleichzeitig und unter realen Nähere Informationen zur Funktions-
Bedingungen beschleunigt den gesamten weise von Karma finden sich in der
Karma automatisiert lediglich die Test- Testprozess drastisch. Karma ist zugleich Masterarbeit von Vojtêch Jína, die dem
ausführung mit etablierten Test-Frame- praxiserprobt, stabil und durch die Plug- Karma-Quellcode beiliegt [12], aber auch
works wie Jasmine. Entwickler dürfen ins einfach zu erweitern. Wer komplexe auf der Heft-DVD präsent ist. (kki) n
07/2019
Titelthema

Kernel- und Treiberprogrammierung mit dem Linux-Kernel – Folge 104

Kern-Technik
Kern-Technik
www.linux-magazin.de

46
Die Zahlen, wie viele bislang unerkannte Bugs eine Mammut-Software wie der Linux-Kernel enthält, machen
Angst. Linus Torvalds rückt mit Test-Robots, Testern aus Fleisch und Blut, ausgefeilten Werkzeugen und einer
strengen Organisation dem Schädlingsbefall in seinem Refugium zu Leibe. Erfolgreich. Eva-Katharina Kunst, Jürgen Quade

14 000 Patches ver- Darüber hinaus sind da noch die einzel-


passt, die fast 600 000 nen Anwender, die Linux auf die eine
neue Zeilen hinzufü- und eben auch andere Art und Weise be-
gen und gut 300 000 dienen. Die Treiber-Entwickler kämpfen
löschen. Das macht oft genug damit, sich nur eingeschränkt
statistisch alle zehn Informationen über Hardwarekomponen-
Wochen grob 300 ten beschaffen zu können.
neue Fehler. Noch Gerade im PC-Bereich schauen zudem

104
mal: Wow! viele Hersteller nur auf Windows und
Zum Glück weisen klammern die Linux-Welt aus. Darum
alle aktuelle Linux- stehen für die Linux-Entwickler Reverse-
Kernel eine über- Engineering sowie Trial and Error auf
durchschnittlich nied- praktisch jedem Wochenplan.
rige Fehlerdichte von Trotz aller Herausforderungen zeigt sich
0,47 auf. Dies stellt Linux im alltäglichen Betrieb robust und
die Linux-Community stabil. Diesen Kampf gewinnt jeden Tag
durch zwei Maßnah- aufs Neue eine Armee von Testern – unter
men sicher: Erstens menschlichen Open-Source-Anhängern
© psdesign1, Fotolia

durch einen struktu- rekrutierte, aber stromfressende Söldner


rierten, ausgefeilten machen auch mit – Testbots genannt.
Entwicklungsprozess,
der extensive, kriti- Roboter testen
„I just found the last Bug“, lautet ein sche Code-Reviews vorsieht, und zwei-
alter Informatikerwitz. Denn dass er tat- tens durch umfangreiche Tests. Die Webseite [https://elinux.org/Test_
sächlich gerade den letzten Fehler gefun- Systems] listet etwa 25 Testbots auf, von
den hat, kann höchstens der Entwickler Von Mammuts und Wanzen denen ein Handvoll aktiv betrieben und
eines Mini-Tools behaupten. Reale Soft- relevant sind: Kernelci.org, Syzbot, CKI,
ware dagegen ist nie fehlerfrei, zwei Bugs Dabei ist das Sicherstellen von weitest- Lava, Kerneltests, 0day-lkp. Die Roboter-
pro 1000 Codezeilen gelten schon als gu- gehender Fehlerfreiheit bei einer solchen Systeme laden sich selbstständig den ak-
ter Wert (Fehlerdichte 2,0). Mammut-Software selbst eine Mammut- tuellen Quellcode herunter, konfigurieren
Die Rechnung auf den Linux-Kernel mit Aufgabe. Die ergibt sich einerseits durch ihn auf die eine oder andere Weise und
seinen 24 Millionen Codezeilen ange- die große Codemenge, die trotz der ge- generieren dann den Kernel beziehungs-
wandt ergibt rund 48 000 Fehler. Wow! ringen Fehlerdichte bedeutet, dass sta- weise mehrere für diverse Hardwareplatt-
Jede neue Version bekommt um die tisch ermittelte 11 280 Wanzen (Bugs) formen. Sollten dabei Fehler oder Unklar-
in Kernel hausen, was bedrohlich klingt. heiten auftreten, entstehen automatisch
Andererseits stellen die Linux-Anwender Bugreports.
Die Autoren sehr hohe Anforderungen an Skalier- Ansonsten booten die Bots die frisch
Eva-Katharina Kunst ist seit den Anfängen von barkeit, Portabilität und Sicherheit. Der generierten Kernel, werten die Bootmel-
Linux Fan von Open Source. Jürgen Quade ist Kernel soll auf einem sicherheitskriti- dungen aus und – falls Auffälligkeiten
Professor an der Hochschule Niederrhein und schen, eingebetteten System genauso festzustellen sind – weisen auf diese hin.
führt auch für Unternehmen Schulungen zu den gut arbeiten wie auf einem Großrechner, Ist der Kernel aktiv, startet schließlich die
Themen Treiberprogrammierung und Embedded auf einem Desktop-PC oder wie auf den Testsoftware, die sowohl die generelle
Linux durch. ARM-Chips in Smartphones. Funktionalität als auch die Reaktion auf
07/2019
Titelthema
fehlerhafte Parametrierung von System-
calls und Ähnlichem testen. Die Robots

Kern-Technik
nehmen den Entwicklern damit erheblich
Arbeit ab. Sie unterscheiden sich vonein-
ander in ihren Testzielen und durch die
Sponsoren beziehungsweise Betreiber.

200 Bugs pro Monat

www.linux-magazin.de
47

Als äußerst erfolgreich beim Finden der


kleinen Wanzen hat sich bislang Syzbot
([1], Abbildung 1) erwiesen. Laut dem
Google-Projekt Syzkaller, dessen Auto-
mations-Bot Syzbot ist, findet der Robot
rund 200 Bugs (!) pro Monat [2]. Das
Projekt Kerneltests nutzt die Python-Soft-
ware »buildbot«, um mit deren Hilfe für
rund 40 unterschiedliche Hardwareplatt-
formen Kernel zu generieren und zu tes- Abbildung 1: Syzbot ist Linux’ Bugfinder Nummer 1.
ten. Die Projektseite [3] hält dazu um-
fangreiche Statistiken zur Einsicht bereit Den Zero Day Service [8], auch bekannt Feedback bezüglich möglicher Inkompa-
(Abbildung 2). als Linux Kernel Performance (LKP), tibilitäten oder Fehler.
Kernelci.org [4] ist ein relativ junges Pro- schließlich betreibt Intel. Er testet ver-
jekt, das sich auf Upstream-Kernel spezi- schiedenste Quellcode-Zweige in mehr Die Macht der Menge
alisiert hat. Es testet also neue Patches als 100 Konfigurationen bezüglich Gene-
in einem relativ frühen Stadium, bevor rierung, Booten, Funktion, Performance Neben den Bots sind viele Tester mit
diese an Linus Torvalds gehen, und de- und Stressfestigkeit. Sobald 0day-lkp biologischem Stoffwechsel aktiv. Linus
tektiert per »git bisect« die für Probleme Unstimmigkeiten identifiziert, bekom- setzt dabei auf Crowdtesting: Anstatt
verantwortlichen Patches. Die Option »bi- men die Entwickler direkt per E-Mail hinter verschlossenen Türen den Next-
sect« zum Sourcecode-Verwaltungstool Bescheid. Generation-Code nur eingeweihten Tes-
Git erlaubt auf bequeme Weise die Suche Der Zeitrahmen für einen Test liegt bei tern zu überlassen, hat beim offenen
nach einem Quellcode, der für eine Ver- lediglich rund einer Stunde. Wenn Prob- Entwicklungsmodell jeder jederzeit Zu-
schlechterung (Regression) verantwort- leme auftreten, versucht der Dienst, das griff auf die aktuelle Entwicklerversion.
lich ist. Dazu bekommt Git sowohl die verursachende Patch zu identifizieren. Das Herunterladen, Generieren und Ins-
letzte bekanntermaßen funktionierende Anders ausgedrückt: Checkt ein Ent- tallieren von eigenen Kerneln ist darum
Version und die nicht mehr funktionie- wickler ein Patch in sein Git ein, erhält auch für Nicht-Informatiker problemlos
rende Version übergeben. er bereits nach einer Stunde ein erstes möglich [9]. Die vielen Anwender der
Das von Red Hat geförderte Projekt Conti-
nuous Kernel Integration (CKI, [5]) folgt
einer ähnlichen Mission. Auch CKI fahn-
det in solchen Patches nach Bugs, die
es noch gar nicht bis zu Linus Torvalds
geschafft haben. Damit unterstützen die
hinter dem Projekt stehenden Kernel-Ent-
wickler und -Tester direkt die Maintainer
der Subsysteme und diejenigen, die Pat-
ches zuliefern. CKI kompiliert Kernel für
vier 64-Bit-Hardwareplattformen und tes-
tet sie nach jedem erfolgreichem Boot mit
Hilfe der Software des Linux Test Project
(LTP, [6]).
Die Software Lava [7] gießt einen Testro-
boter speziell für jene Plattformen, die
auf einem ARM-Prozessor der Architek-
tur-Varianten v7 und v8 ruhen. Linaro
betreibt diesen Bot, eine auf ARM-Hard-
ware spezialisierte Firma. Abbildung 2: Kerneltests.org testet Linux für 40 Plattformen.
07/2019
Titelthema

Im Kernel-Quellcodeverzeichnis findet
sich unterhalb von »tools/testing/« mit
Kern-Technik

»fault-injection«, »ktest«, »nvdimm«,


»radix-tree«, »scatterlist«, »selftest« und
»vsock« eine Batterie von Testkompo-
nenten. Einige der Namen deuten an,
um welches Subsystem sich das Werk-
zeug kümmert.
www.linux-magazin.de

48
»selftest« ist die Kernelkomponente, die
eine Umgebung für Runtime-Tests im
Kernel schafft. Einige Tests, wie für das
Hotplugging, sind implementiert. Ziel ist
es, diese Tests innerhalb von maximal 20
Minuten auszuführen, sodass der Tester
kurzfristig ein Feedback bekommt.
»ktest« ist ein Perl-Skript, um das Gene-
Abbildung 3: Bei der Kernelkonfiguration lassen sich diverse Linux-Selbsttests aktivieren. rieren und Booten des Kernels zu auto-
matisieren. Sollten Fehler auftreten, ver-
Crowd testen den Code regelmäßig auf Kernelkomponente, etwa eines Geräte- sucht es per »git bisect« das verantwort-
den unterschiedlichsten Plattformen und treibers. Viele solche Fehler treten erst liche Patch ausfindig zu machen.
mit vielerlei Konfigurationen. unter hoher Systemlast auf. Daher prak-
Menschliche Tester haben viele Mög- tizieren die Kernelentwickler Stresstests. In-Kernel-Unterstützung
lichkeiten, Fehler zu finden. Funktionale Die am häufigsten eingesetzten Lasttests
Probleme beispielsweise sind meist of- sind das Kompilieren des Linux-Kernels Als weitere eigene Maßnahme hat der
fensichtlich. Wenn mit dem neuen Kernel selbst und die bereits erwähnte Testsuite Kernel eine Reihe interner Testroutinen
das Touchpad nicht mehr geht oder eine vom Linux Test Project. implementiert (Abbildung 3). 34 unter-
Applikation, die mit anderen Kernelver- schiedliche In-Kernel-Runtime-Tests sind
sionen problemlos verwendbar war, jetzt Kernel-Testing-Tools es in Linux 5.1. Der Kernel testet auf
reproduzierbar abstürzt, dann ist ein feh- Wunsch die Implementierung diver-
lerhaftes Verhalten erkannt. Jenseits der Bots bietet der Linux-Kernel ser Datenstrukturen (verkettete Listen,
Die überwiegende Anzahl an Problemen auch selbst einiges auf, um zu guten Bäume), mehrerer Kernelfunktionen,
ist aber weniger offensichtlich. Hier blickt Tests zu kommen. Als wichtige Maß- beispielsweise »kprintf()«, sowie die
der Tester hinter die Kulissen und durch- nahme stattet er Testwillige mit speziel- Firewall oder das Live-Patching.
forstet die Kernellogs, insbesondere die len Testwerkzeugen aus – bei denen sich Darüber hinaus gibt es auf die einzelnen
Datei »/var/log/kern.log«. Er greift auch übrigens auch die Robots bedienen. Subsysteme zugeschnittene Tests, die der
direkt mit Hilfe des Programms »dmesg«
auf die Meldungen im Kernel zu. Verursacher
Fehler finden identifizieren Maintainer finden
Lässt er dabei über die Option »-t« den
Zeitstempel weg, kann er schnell Unter-
schiede in verschiedenen Kernelversio-
nen identifizieren. Dazu speichert er die
Ausgaben der nachfolgenden Aufrufe auf Checkliste Bugreport
Patch erstellen
abarbeiten
dem funktionierenden System und ver-
gleicht sie mit den Ausgaben des prob-
lembehafteten Systems. Dabei erscheint
es sinnvoll, die einzelnen Warnebenen Checkliste Submit-
Bug melden Patches abarbeiten
getrennt zu betrachten:

dmesg -t -l emerg
dmesg -t -l crit
dmesg -t -l alert
Patch weiterleiten
dmesg -t -l err
dmesg -t -l warn
dmesg -t -k
dmesg -t

Besondere Aufmerksamkeit verdienen die Bugzilla.kernel.org Linux Kernel Mailingliste Subsystem-Maintainer


so genannten Oops-Messages im Kernel-
log. Sie signalisieren den Absturz einer Abbildung 4: Wer einen Fehler findet, soll ihn beschreiben und an die richtige Stelle melden.
07/2019
Titelthema
Kernelbäcker auswählen darf. Bezüglich
Speicherverwaltung bemerkt der Kernel

Kern-Technik
Adress Sanitizer (Kasan, [10]) den (feh-
lerhaften) Zugriff auf bereits freigegebene
Speicherbereiche beziehungsweise den
Zugriff außerhalb der reservierten Gren-
zen. »kmemleak« findet Speicherlöcher,
also Speicher, den keiner mehr nutzt,

www.linux-magazin.de
49
aber auch niemand freigegeben hat. Die
Komponente meldet Fehler über »/sys/
kernel/debug/kmemleak«.
Die Komponente Code Coverage for
Fuzzing (Kcov, [11]) versucht heraus-
zufinden, welche Codeteile der Kernel
durchläuft und welche nicht. In der Pra-
xis kommt es üblicherweise zum Einsatz,
um Systemcalls zu testen. Seine Ergeb-
nisse exportiert Kcov über das Debug-
Filesystem.

Meldung machen
Abbildung 5: Die Kernelentwickler haben detailliert aufgeführt, wie Fehler zu melden sind.
Fehler finden ist aber nur die halbe Miete,
genau genommen sogar noch weniger. die Linux Kernel Mailingliste, über die möglich. Die Kernelentwickler haben da-
Denn für die ständigen Kernel-Entwick- Mailingliste des zum Fehlerbild gehö- her den Meldeprozess im Dokument »re-
ler und -Maintainer ist die Reproduzier- renden Subsystems oder über die Web- port-bugs« als Teil des Admin Guide de-
barkeit entscheidend. Ihnen ist es daher seite [https://bugzilla.kernel.org] (Ab- finiert (Abbildung 5, [12]). Erster Punkt:
wichtig, direkt die Ursache genannt zu bildung 4). Kennt der Entdecker die zum Sie nehmen keine Bugmeldungen entge-
bekommen, und am liebsten, sogar ein Fehlerbild führende Datei, kann er über gen für Kernel, die End of Life sind, also
Patch zu erhalten. Tester sollten darum das in den Kernelquellen liegende Perl- nicht mehr unterstützt sind. Zweitens
versuchen per »git bisect« der Ursache für Skript »scripts/get_maintainer.pl« unter muss der Meldende weitgehend sicher-
ein beobachtetes Fehlerbild auf die Spur Angabe des Dateinamens den zugehöri- stellen, dass niemand vor ihm bereits
zu kommen. gen Maintainer identifizieren. die Wanze gemeldet hat. Auch darf eine
Wer eine kleine Wanze findet, kann das In jedem Fall sollte er so viel Informa- Fehlermeldung nicht zwei unabhängige
auf drei Arten melden: Per E-Mail an tion zum Fehler liefern wie nur irgend Fehlerbeschreibungen enthalten.
07/2019
Titelthema

testet haben. Linus schnellen Reagieren auf Fehler, Spectre


selbst lässt dann je- und Meltdown beispielsweise, zeigt sich,
Kern-Technik

den Code noch acht dass offene Entwicklungsmodelle signifi-


Linus Mainline-Kernel
Torvalds
Wochen reifen. In kante Vorteile aufweisen. (jk) n

Patches dieser Zeit veröf-


fentlicht er diverse
Maintainer Upstream-Kernel Release-Kandidaten, Infos
die wiederum die [1] Syzkaller, Syzbot:
www.linux-magazin.de

50 Patches
Masse testet, der [https://github.com/google/syzkaller],
Entwickler Entwickler-Kernel Crowd. Erst wenn [https://syzkaller.appspot.com/upstream]
statistisch betrachtet [2] Dmitry Vyukov, „Syzbot and the tale of
Abbildung 6: Linux strukturiert Verantwortlichkeiten hierarchisch. die Masse der Kor- thousand kernel bugs“:
rekturen zum neuen [https://events.linuxfoundation.org/
Der Bugreport soll im Fall einer E-Mail Code auf ein akzeptables Maß gesunken wp-content/uploads/2017/11/
das Subject »PROBLEM: Einzeilige_Be- ist, steht die Kernelfreigabe an. Syzbot-and-the-Tale-of-Thousand-Ker-
schreibung« tragen. Die Nachricht selbst Torvalds hat zudem die Überprüfung von nel-Bugs-Dmitry-Vyukov-Google.pdf]
transportiert dann sämtliche Informatio- Standardfehlern automatisiert und hierzu [3] Kerneltests:
nen, so wie sie das Reporting-Bugs-Do- vor mehr als 15 Jahren das Werkzeug [https://www.kerneltests.org]
kument fordert. Sparse geschrieben. Es analysiert statisch [4] Kernelci.org: [https://kernelci.org]
Für Leute, die direkt ein Patch mitliefern den Code auf korrekte Kernel-spezifische [5] Continuous Kernel Integration:
können, gelten weitere Vorgaben, die de- Datentypen. So stellt Sparse beispiels- [https://cki-project.org]
nen für neuen Kernelcode ähneln. Weil weise fest, ob eine Userland-Adresse (Ap- [6] Linux Test Project:
die Fehlersuche und Beseitigung stets mit plikationsadresse) im Kernel dereferen- [https://linux-test-project.github.io]
erheblichem Aufwand verbunden sind, ziert ist. Um die Prüfung per »sparse« zu [7] Lava: [https://www.linaro.org/
ist es die beste Strategie, von vornherein aktivieren, setzt der Linuxer beim Aufruf engineering/projects/lava/]
auf eine hohe Codequalität zu setzen und von »make« die Variable »C« auf 1 oder [8] 0-Day Test Service (Intel):
Fehler zu vermeiden. 2, abhängig davon, ob er alle Quellcode- [https://01.org/lkp/documentation/
Dateien prüfen lassen will oder nur die 0-day-test-service]
Fehler vermeiden neu zu kompilierenden (»make C=1«). [9] Quade, Kunst, „Kern-Technik“ – Folge
103 über Kernel generieren 5.0:
Daher unterziehen die Kernelhacker alle Kammerjäger Linux-Magazin 05/19, S. 88
neuen Codezeilen einer aufwändigen [10] Kasan: [https://www.kernel.org/doc/
Code-Review. So gibt es ähnlich dem Wie man sieht, hält Linus trotz hohem html/v4.14/dev-tools/kasan.html]
Bugreport eine Submit-Checkliste [13], Entwicklungstempo die Wanzen-Kolonie [11] Kcov: [https://www.kernel.org/doc/html/
die jeder abzuarbeiten hat, der Code für gut in Schach. Genau genommen ist v4.15/dev-tools/kcov.html]
den Kernel beisteuert. Das stellt sicher, dies sogar seine Hauptbeschäftigung als [12] Kernelbugs melden:
dass neuer Code dem Coding Style folgt Chef-Controller. Fehler zu finden und zu [https://www.kernel.org/doc/html/v5.0/
und auf unterschiedlichen Plattformen beseitigen hat sich im Linux-Projekt evo- admin-guide/reporting-bugs.html]
und mit unterschiedlichen Kernelkonfi- lutionär entwickelt. Der Prozess ist zwar [13] Patches einreichen:
gurationen getestet ist. noch nicht vollkommen, weist aber eine [https://www.kernel.org/doc/html/v5.0/
Torvalds setzt bezüglich Code-Reviews erfreuliche Reife auf. Insbesondere beim process/submitting-patches.html]
auf ein hierarchisches Entwicklungsmo-
dell. Er selbst ist zwar für die letztendli- für ca. 2 Wochen
Merge
che Aufnahme von Code an der Spitze neue Funktionalitäten
der Pyramide zuständig, stützt sich dabei
aber auf die Integrationsarbeit von rund
100 Subsystem-Maintainern (Abbildung
6). Diese reviewen jeden neuen Code, für ca. 8 Wochen
bevor Torvalds ihn in der zwei Wochen Stabilize Release Candidate Corrections
dauernden Merge-Phase in den Kernel
übernimmt (Abbildung 7).
Die Maintainer schreiben einerseits selbst
Code, bekommen andererseits auch wel-
chen von den übrigen Entwicklern ge- Release Release
liefert, die damit am Fuße der Pyramide
Major-Release Minor-Release
stehen. Die Maintainer reichen Code erst
dann weiter, wenn sie ihn bereits gut ge- Abbildung 7: Torvalds lässt jede neue Major-Release rund acht Wochen lang intensiv testen.
07/2019
Software
In eigener Sache: DELUG-DVD

Fedora 30, Pop OS, Karma

Einführung
www.linux-magazin.de
51
Wer diesen Monat zu den glücklichen DELUG-Käufern gehört, bootet von Seite A der DVD das brandneue
Fedora 30 in der Workstation-Fassung. Auf der andere Seite findet er unter anderem das aktuelle Pop OS 19.04,
ein E-Book über das Testtool Karma, Videos mit den Keynotes der Susecon 2019 und vieles mehr. Tim Schürmann

Inhalt ker löst den Dbus-


Daemon ab, zudem
52 Bitparade folgt der Bootma-
Vier Benchmark-Programme für Massen-
nager jetzt der Boot
speicher im Test.
Loader Specification
60 Tooltipps der Systemd-Macher.
Werkzeuge im Kurztest: Ddgr 1.6, Mtag
Auch der flackerfreie
2.2.4, Uritool 1.0.0, Guider 3.9.5, LF r12,
Systemstart klappt
Termshark 1.0.0.
nun besser.

Neben einem normalen Linux-Magazin Pop OS und


ohne Datenträger gibt es die DELUG-Aus-
Susecon
gabe mit Monats-DVD. Auf die packt die
Redaktion Programme und Tools, welche Wer mit dem Browser Abbildung 1: Zum Lieferumfang des Livesystems von Fedora 30 gehören unter anderem auch
die jeweilige Magazin-Ausgabe testet und auf die Rückseite der Firefox 66 und Libre Office in Version 6.2.2.
bespricht. Zudem wartet dort nicht im DVD zugreift, stößt
Heft abgehandelte Software. auf weitere spannende Inhalte. Die vom beitsweise des nützlichen Testing-Werk-
Hardwarehersteller System76 gepflegte zeugs erklärt die Masterarbeit „Javascript
Seite A: Fedora 30 Distribution Pop OS (Abbildung 2) ba- Test Runner“ von Vojtêch Jína. Das 61
siert auf Ubuntu 19.04 und verwendet Seiten umfassende Werk stellt unter an-
Booten DVD-Käufer diese von der Seite A, einen 5er Kernel. Daneben warten neun derem das Design und die Implemen-
landen sie im Livesystem von Fedora 30 Videos mit den Keynotes von der Susecon tierung von Karma vor, die sich zudem
Workstation (Abbildung 1). Das nutzt als 2019, die im April in Nashville stattfand. direkt mit dem Quellcode der aktuellen
Desktop Gnome 3.32. Entwickler freuen Karma-Version 4.1.0 nachvollziehen
sich über GCC 9, die Bash 5.0 und PHP Karma und Chaos lässt, der auf der DVD wartet.
7.3. Dank besser gepackter Metadaten Im Rahmen des so genannten Chaos En-
arbeitet die Paketverwaltung via DNF Das Tool Karma testet Javascript-Code in gineering prüfen Administratoren, ob ein
etwas flotter. Der schnellere Dbus-Bro- mehreren Browsern gleichzeitig. Die Ar- produktiv eingesetztes System auch in
ungewöhnlichen und widrigen Situatio-
nen nicht gleich in die Knie geht. Dabei
hilft das Chaos Toolkit, dessen Inbetrieb-
nahme besonders schnell mit dem offi-
ziellen Docker-Container gelingt. Ergän-
zend wartet auf der DVD der Quellcode
zu Chaos Toolkit 1.2.0.
Wem das alles nicht reicht, der schreibt
seine Javascript-Programme mit der
Entwicklungsumgebung Eclipse Orion,
wirft einen Blick in den Quellcode des
Linux-Kernels 5.1, lässt vier verschiedene
Benchmark-Programme auf seine SSD-
oder HDD-Massenspeicher los oder ver-
Abbildung 2: Pop OS nutzt ein angepasstes Gnome 3.32, dessen Theme auf Wunsch im Slim-Modus die Titel- tieft sich in Software zu weiteren Artikeln
leisten der Fenster verkleinert und so den Fensterinhalten mehr Platz einräumt. dieses Heftes. (kki) n
07/2019
Software

Im Test: Benchmark-Tools für Massenspeicher unter Linux

Auf Herz und Nieren


Bitparade
www.linux-magazin.de

52
Benchmark-Werkzeuge helfen Linux-Admins dabei, Probleme mit Massenspeicher genauer und früher zu er-
kennen. Mit ihrer Hilfe diagnostizieren sie Engpässe und machen Systeme fit für bestimmte Einsatzbereiche.
Die aktuelle Bitparade schaut auf gängige Messtools, die HDDs und SSDs untersuchen. Erik Bärwaldt

verantwortlich, den der Controller der


Festplatte steuert. Zuverlässige Labor-
werte zum Leistungsverhalten erhält
der Messdiener nur bei ausgeschaltetem
Zwischenspeicher. Für praxisnahe Appli-
kations-Benchmarks empfehlen sich hin-
gegen eher Tests mit aktiviertem Cache,
um für spätere Anwendungsszenarien
realistischere Werte zu erhalten.
Auch die Belegung beeinflusst die Perfor-
mance von Festplatten. Das bedeutet: Die
Datentransferraten fallen bei rotierenden
Magnetplatten am äußeren Rand stets hö-
her aus als im inneren Bereich. Zugleich
schreiben die Systeme die Daten von au-
ßen nach innen auf die Magnetplatten.
© gajus, 123RF

Festplatten-Tester müssen daher auf eine


gleichmäßige Belegung achten.
Auch bei Festplatten automatisch losge-
tretene SMART-Tests verfälschen mitun-
Massenspeicher stecken in Desktop- Operations per Second, [1]). Die Tester ter die Messwerte: Daher sollten Tools
Systemen, Servern und HPC-Clustern. messen, wie viele Eingabe- und Ausgabe- in der Lage sein, alle SMART-Aktivitäten
Ihre Latenzen beim Datentransfer zu Operationen (I/O) der jeweilige Datenträ- während der Benchmarks abzuschalten.
minimieren spielt nicht nur im Cloud ger in einer Sekunde bewältigt. Je größer
Computing und Rechenzentrum, sondern der IOPS-Wert, desto performanter der SSDs ticken anders
auch in Heimnetzen eine zentrale Rolle. Massenspeicher. Insbesondere I/O-inten-
Benchmarks helfen dabei, Komponenten sive Applikationen wie Datenbanken und Bei SSDs bestimmen primär die ver-
auf ihre Leistungsfähigkeit in bestimmten Desktop-Virtualisierungen profitieren da- wendeten Controller das vorhandene
Szenarien zu überprüfen. her von optimierten Speichersystemen. Leistungsspektrum, wobei auch hier der
Gab es noch vor einigen Jahren kaum Cache Einfluss haben kann. Da SSDs in-
native Linux-Applikationen für das Einflussfaktoren tern meist Daten komprimieren, arbeiten
Benchmarking von Festplatten und SSDs, die Tester bei SSD-Benchmarks statt mit
tummeln sich inzwischen mehrere Pro- Die Performance zu messen ist komplex. »/dev/null«-Werten besser mit »/dev/
gramme auf dem Markt. Sie erleichtern Wer misst, misst oft Mist, weil diverse random«-Daten, um die Performance-
es Nutzern und Admins, die Leistungsfä- Faktoren die Messungen verfälschen. Bei Werte nicht zu verfälschen.
higkeit ihrer Massenspeicher-Subsysteme herkömmlichen Festplatten spielen vor Zudem bricht die Leistung von SSDs
zu untersuchen. allem die Umdrehungsgeschwindigkeit mitunter ein, wenn sie massive Read-
der Magnetplatten, aber auch der Cache Modify-Write-Vorgänge ausführen. Tester
Grundlagen und die Positioniergeschwindigkeit der sollten SSDs vor dem Benchmark besser
Köpfe eine Rolle. über den Trim-Befehl in einen nahezu
Als Vergleichseinheit für die Performance Fällt eine Festplatte durch außergewöhn- jungfräulichen Zustand versetzen.
von Massenspeichern gelten üblicher- lich hohe Performance-Werte auf, zeich- Daneben verfälscht auch hin und wieder
weise IOPS (Akronym für Input/Output net dafür meist der Zwischenspeicher das Betriebssystem durch seine I/O-Sche-
07/2019
Software
duler die Leistungs-
raten. Grundsätzlich

Bitparade
sollten Admins daher
vor dem Start eines
Benchmark besonders
I/O-intensive Anwen-
dungen, die das Sys-
temverhalten negativ

www.linux-magazin.de
53
beeinflussen, vorü-
bergehend deaktivie-
ren. Entsprechende
Kandidaten spüren
sie zum Beispiel über
das Programm Iotop
[2] auf. Es steckt bei
nahezu allen gängi-
gen Linux-Distributi-
onen in der Paketver- Abbildung 1: Die Messergebnisse von Bonnie++ wirken etwas unübersichtlich.
waltung.
Der Admin sollte seine Benchmarks zu- Auch in Storage-Clustern trägt die Bench- Die Software legt beim Start eine Da-
dem auf den gleichen Dateisystemen mark-Software bei applikationsspezifi- tei an, welche die doppelte Größe des
abfeuern. Dateisysteme wie etwa Btr-FS schen Tests unter definierten und doku- vorhandenen Arbeitsspeichers umfasst.
verfügen über spezielle Anpassungen mentierten Bedingungen dazu bei, das Insbesondere Betreiber kleinerer Appli-
für SSDs, die unter Umständen das Leis- Leistungsverhalten zu optimieren und kationsserver oder Desktoprechner mit
tungsverhalten beeinflussen. beispielsweise durch Storage-Tiering den großem Arbeitsspeicher sollten deshalb
Außerdem liefern Lese- und Schreibmodi Leistungsbedarf anwendungsspezifisch darauf achten, auf der jeweiligen Par-
der Benchmark-Programme womöglich sinnvoll zu steuern. tition des Massenspeichers genügend
abweichende Werte. Das kann passieren, freien Platz zu reservieren. Weil die Da-
wenn der Nutzer sie mit unterschiedli- E Bonnie++ tenkollektionen größer ausfallen als der
chen Parametern aufruft und etwa ein vorhandene Arbeitsspeicher, minimiert
Mal den Schreibcache aktiviert, dies ein Bonnie++ [6] heißt ein bekanntes und das den Einfluss des Datei-Cache auf die
anderes Mal aber vergisst. bereits seit 1999 entwickeltes freies Messergebnisse.
Grundsätzlich besitzen einzelne Bench- Benchmark-Werkzeug, das die Datei- Das Tool benötigt Administratorrechte
markwerte zudem nur eine beschränkte system-Performance misst. Dabei liest und die Angabe eines Users über den
Aussagekraft. Erst wenn der Tester die Bonnie++ die Lese- und Schreibzugriffe Parameter »-u« (Abbildung 1). Startet
Benchmark-Applikation wiederholt aus- des getesteten Systems aus und zeigt auf der Tester Bonnie++ ohne eigentliche
führt, erhält er zuverlässigere Werte. der Kommandozeile die entsprechenden Parameter, zeigt die Software ihre Ergeb-
Werte an. Zusätzlich ermittelt das Werk- nisse etwas unübersichtlich an. Über die
Nicht berücksichtigt zeug die Zahl der ausführbaren Such- passenden Parameter sorgt der Admin je-
Die Besprechung der Benchmark-Applikati- funktionen und die Zahl der Metadaten- doch dafür, dass Bonnie++ die Ausgabe
onen berücksichtigt weder »dd« noch »hd- Operationen pro Sekunde. Beides tut es, optisch ansprechender in einer Ergebnis-
parm«. Sie gehören in allen Linux-Distribu- indem es Dateien löscht und anlegt und liste als HTML-Datei sichert.
tionen zum festen Softwarebestand. Auch Metadaten ermittelt, zu denen beispiels- Um die zu erzeugen, benötigt der Admin
mit ihrer Hilfe nehmen Admins Performance- weise die Dateigröße oder der Datei-Ei- lediglich den Befehl:
Tests vor. gentümer gehören.
Das ursprünglich von Intel entwickelte Pro- echo "Letzte-Zeile-der-Bonnie-Ausgabe" | U
Die Software findet die Leistungswerte bon_csv2html > /Pfad_zur_HTML-Datei
gramm Iometer [3], das auf einer Client-
der gerade benutzten Partition des Mas-
Server-Architektur beruht und ein grafisches
senspeichers heraus. Ein Vorteil: Liegen In diesem besonderen Fall landen Para-
Frontend für Windows-Systeme bereitstellt,
die Home-Verzeichnisse mehrerer An- meter und Testergebnisse in einer Tabelle
fehlt im Artikel ebenso. Grund ist die seit
über vier Jahren ruhende Weiterentwicklung wender auf jeweils eigenen Partitionen, (Abbildung 2).
des Tools. Aus demselben Grund hat der Autor kann die Software die Geschwindigkeit
auch darauf verzichtet, das Kommandozeilen- dieser Dateisysteme vergleichen. Interpretation
Werkzeug Tiobench [4] zu testen. Bonnie++ wartet in den Software-Re-
Auch der Flexible File System Benchmark positories der gängigen Linux-Distribu- Die Tabelle fasst die Testergebnisse in
(FFSB, [5]) taucht im Test nicht auf, da er tionen und lässt sich bequem über die mehreren Spalten zum Schreib- und
lediglich das Leistungsverhalten von Datei- Paketverwaltungen in das jeweilige Be- Leseverhalten des Massenspeichers zu-
systemen misst. triebssystem integrieren. sammen. In den Spalten zu »Sequential
07/2019
Software
Bitparade
www.linux-magazin.de

54

Abbildung 2: Eine tabellarische Übersicht macht die Messergebnisse des Benchmarking-Tools Bonnie++ besser nachvollziehbar.

Output« listet das Werkzeug die Schreib- den Parameter »-n Wert« etwas heraufzu- Außerdem erweisen sich die Messwerte
geschwindigkeiten beim Aufruf einzelner setzen, um das Tool dann nochmals auf als umso zuverlässiger, je mehr Messrei-
Zeichen, Blöcke und beim Schreiben mo- den Test loszulassen. Sinnvoll erscheinen hen zur Verfügung stehen. Der Anwender
difizierter Blöcke auf. Der Bereich »Se- dabei Werte zwischen 64 und 128. Bon- sollte seine Tests daher in Zeitabständen
quential Input« zeigt dagegen die Werte nie++ benötigt dann zwar längere Zeit mehrfach wiederholen, um anhand der
beim Lesen einzelner Zeichen und ganzer bis zum Abschluss des Tests, dafür liefert Ergebnisse einen Durchschnittswert für
Blöcke an. Zusätzlich ergänzt Bonnie++ die Software aber auch meist nachvoll- das Leistungsvermögen der Massenspei-
diese Werte jeweils durch jene der auftre- ziehbare Werte. cher zu erhalten.
tenden CPU-Belastung. Mit Vorsicht sollten Tester die CPU-Be-
Die Spalte »Random Seeks« liefert Werte, lastungsangaben bewerten. Auf gängigen E Gnome Disks
die sich ursprünglich an Messungen bei Multiprozessor-Maschinen mit vielen
Massenspeichern mit mechanischen Kernen weisen hohe Auslastungswerte Das auf Udisks basierende grafische Front-
Komponenten orientieren. Sie geben an, der CPU nicht zwangsläufig auf eine er- end Gnome Disks [7] ist in den Gnome-
wie viele Spurwechsel der Schreib- und drückende Gesamtlast des Systems hin. Desktop integriert. Das Programm läuft
Lesekopf einer Festplatte in einer Se- Während sich die einzelnen Prozesse oft auch unabhängig von diesem und bie-
kunde ausführt. Systeme mit modernen auf mehrere Prozessorkerne verteilen, be- tet eine Fülle von Optionen, um den im
SSDs erzielen dabei naturgemäß signi- rücksichtigt die Anzeige lediglich einen System vorhandenen Massenspeicher zu
fikant höhere Werte als herkömmliche Kern. Das raubt diesen Werten die nötige verwalten und zu pflegen (Abbildung 3).
Festplatten. Aussagekraft. Dazu zählen auch Benchmark-Möglich-
Den Spalten »Sequential Create« und keiten. So darf der Admin über Gnome
»Random Create« lässt sich entnehmen, Störfeuer Disks nicht nur SMART-Werte einsehen
wie schnell die Festplatte Daten liest, und Selbsttests anschieben, sondern
schreibt oder löscht. Tauchen hier ver- Generell empfiehlt sich, dass die Tester auch Einstellungen des Massenspeichers
mehrt Plus-Symbole auf, arbeitet das Sys- ihre Messungen jeweils auf Maschinen ändern, um etwa den Cache zu aktivieren
tem zu schnell für das Benchmark-Pro- ausführen, auf denen möglichst wenig oder auszuschalten.
gramm. In einem solchen Fall empfiehlt weitere Prozesse aktiv sind, die Mess- Diese Einstellungen erreicht er über ei-
es sich, die Anzahl der Testdateien über ergebnisse potenziell beeinträchtigen. nen kleinen Button, der oben rechts in
der Titelleiste wartet. Dahinter versteckt
sich unter anderem die Option »Leis-
tungstest für Laufwerk«. Wählt er diese
aus, öffnet sich ein weiteres Fenster und
zeigt dem Admin in einer übersichtli-
chen Tabelle Schreib- und Leseraten des
aktiven Datenträgers sowie die entspre-
chenden Zugriffszeiten in Diagrammen
(Abbildung 4).
Die zugehörigen Tests laufen voreinge-
stellt mit einer bestimmten Zahl von Da-
tasets definierter Größe ab. Über den But-
ton »Leistungstest starten« unten links im
Fenster definiert der Nutzer zusätzlich
eigene Vorgaben und bestimmt, mit wel-
chen Messgrößen Gnome Disks die Tests
absolviert. Dabei steht im Vergleich zu
anderen Benchmark-Programmen nur
Abbildung 3: Gnome Disks bietet eine Fülle von Funktionen für das Datenträger-Management. eine eingeschränkte Zahl Optionen zur
07/2019
Software
Wahl. Auch verschiedene I/O-Engines kann es durchaus
zur Geschwindigkeitsmessung unter- zu Datenverlusten

Bitparade
stützt Gnome Disks nicht. kommen. Die Soft-
Im unteren Bereich der Leistungsanzeige ware-Autoren emp-
findet der Anwender zudem die gewon- fehlen daher, die
nenen Durchschnittswerte in absoluten vorhandenen Da-
Zahlen wieder. Zu beachten ist, dass tenbestände auf
Gnome Disk für eingehängte Datenträger dem Testlaufwerk

www.linux-magazin.de
55
nur Lesetests ausführt, da es exklusiven vor dem Ausführen
Zugriff auf die Testpartitionen benötigt. des Schreibtests zu
Aktiviert der Nutzer für ein eingehängtes sichern.
Laufwerk die Option »Schreib-Leistungs-
test ausführen« im erweiterten Dialog, Cache-
bricht die Routine mit einer Fehlermel-
Speicher
dung ab. Eingehängte Laufwerke darf der
Admin jedoch vor dem Start der Tests Gnome Disks er-
aushängen, sofern es sich nicht um eine laubt es, den Cache Abbildung 4: Die Leistungswerte stellt Gnome Disks plastisch dar.
benutzte Partition handelt. Das klappt zum Schreiben von
über den Auswurfbutton oben rechts in Mess-Samples über den Menüpunkt senspeicher verwaltet. Vielmehr betrifft
der Titelleiste. »Laufwerkseinstellungen« auszuschalten. es den vom Controller verwalteten Hard-
Der Schreibtest des Programms arbeitet Das meint nicht den im Arbeitsspeicher ware-Schreibcache des Massenspeichers.
mit den vorhandenen Dateien und nur vorhandenen Puffer für Schreibvorgänge, Er lässt sich per Auswahlfeld und Schie-
dann nicht destruktiv, wenn ihn der An- den das Betriebssystem für das zeitver- beregler deaktivieren. Auch hier kann
wender nicht unterbricht. Tut er es doch, setzte Schreiben von Daten auf den Mas- der Tester während des Benchmark den
07/2019
Software

Anders als bei Bon-


nie++ oder Gnome
Bitparade

Disks entscheidet der


Nutzer bei Fio, ob er
eine einzelne Datei
oder ein komplettes
Blockdevice testen
möchte. Dazu nutzt er
www.linux-magazin.de

56
den Parameter »--file-
name=Datei/Geräte-
name«. Dabei sollte er
aber beachten, dass
Fio Devices komplett
überschreibt!

Syntax
Die Fio-Syntax verste-
hen auch Einsteiger.
Sie ist leicht anzu-
wenden, fällt aber
aufgrund vieler Konfi-
gurationsoptionen aus
Abbildung 5: Auch Fio gibt bei größeren Tests zu viele Ergebnisse aus. Übersicht schaffen dann erst externe Tools. dem Rahmen und er-
fordert Vorkenntnisse.
Cache ausschalten, um die ungefilterten king von Input- und Output-Prozessen In größeren Infrastrukturen und Storage-
Messwerte zu erhalten. betreibt. Das unter GPL angebotene Pro- Umgebungen verwenden Admins Fio
gramm steckt in den Software-Archiven meist mit so genannten Jobdateien für
E Fio aller gängigen Linux-Distributionen und sehr komplexe Messungen. Diese Dateien
lässt sich daher bequem über die Paket- fassen die verschiedensten Parameter
Fio (Akronym für Flexible I/O-Tester, verwaltungen einspielen. Wer Fio manu- und Programmläufe in Form herkömmli-
[8]) ist ebenso wie Bonnie++ ein Kom- ell übersetzen will, findet den Quellcode cher Ini-Dateien zusammen. In die gehö-
mandozeilen-Werkzeug, das Benchmar- auf der obigen Webseite. ren die unterschiedlichen Parameter für
jeden einzelnen Testlauf.
Fio simuliert I/O-Prozesse dabei wesent-
lich tiefgründiger als Gnome Disks oder
Bonnie++. So darf der Nutzer in einer
Jobdatei nicht nur festlegen, welche Form
von Lese- und Schreibtests Fio absolvie-
ren soll und mit welchen Dateigrößen.
Er darf auch die Workload auf mehrere
Dateien verteilen oder die Testreihe für
mehrere Threads splitten.
Die Jobdatei startet mit einer Sektion
»[global]«, in die grundlegende Parame-
ter für alle folgenden Jobs gehören. Da-
runter folgen die einzelnen Jobs, die der
Admin nach eigenem Gusto benennt. Soll
Fio nur einen Job in der Datei ausführen,
kann er die Sektion »[global]« streichen.
Daneben darf er in den Jobdateien auch
Variablen eintragen, um komplexe Ein-
gaben zu vereinfach und damit auch die
Fehleranfälligkeit zu senken.
Übernimmt Fio nur gelegentlich einzelne
Jobs, gibt der Admin die Parameter di-
Abbildung 6: Das Programm Fio2gnuplot hilft dabei, die Messwerte grafisch aufzubereiten. rekt am Prompt ein, ohne eine gesonderte
07/2019
Software
Jobdatei zu erzeugen.
Die Dokumentation

Bitparade
[9] erläutert die Un-
terschiede zur Ein-
gabe über Jobdateien,
die der Admin beach-
ten muss.
Entscheidet er sich für

www.linux-magazin.de
57
eine Jobdatei, muss er
zudem berücksichti-
gen, dass Fio drei so
genannte Keywords
intern nutzt, die der
Admin nicht ohne
Weiteres in die Da-
tei schreiben darf.
Diese lauten »$pa-
gesize«, »$mb_me-
mory« und »ncpus«
und bezeichnen die
voreingestellte Page
Size des Systems, die
Arbeitsspeichergröße
und die Anzahl der Abbildung 7: Auch Iozone bietet eine enorme Informationsvielfalt im Terminal.
verfügbaren Prozes-
soren. Er darf diese Schlüsselbegriffe in Messwerte erleichtert das Verständnis der die Software schließlich im PNG-Format
Jobdateien verwenden, wenn er explizit Leistungsfähigkeit eines Massenspeichers an, so kann der Nutzer sie problemlos
die damit zusammenhängenden Werte wesentlich. Um sie zu erzeugen, eignet weiterverarbeiten.
modifizieren möchte. sich am besten das Programm Fio2gnup-
lot, das sich bereits im Lieferumfang von E Iozone
Vorgehensweise Fio befindet.
Will der Tester es nutzen, installiert er Das als Freeware angebotene Iozone [11]
Auch wenn er Fio ohne Jobdatei einsetzt, zusätzlich aus den Repositories das erlaubt ebenfalls zahlreiche unterschied-
kann der Nutzer aufgrund der detaillier- Werkzeug Gnuplot. Um Grafiken aus liche Performance-Messungen mit Mas-
ten Konfigurationsoptionen Lese- und den Testergebnissen von Fio zu gewin- senspeichern. Das Kommandozeilen-Pro-
Schreibtests gesondert oder kombiniert nen, muss das Tool diese Testläufe proto- gramm lässt sich aus den Standard-Repo-
starten. Beachten muss er, dass Fio für kollieren und Logdateien anlegen. Dabei sitories der meisten Linux-Distributionen
die benutzerdefinierten Tests entspre- gibt es drei Arten von Logdateien. Diese installieren, auf der Webseite wartet der
chende Dateien anlegt. Deren Größe be- merken sich jeweils die Werte für die Quellcode.
stimmt der Anwender wahlfrei. Schiebt Bandbreitenmessung, die IOPS und die Iozone kennt ebenfalls eine ganze Reihe
er kombinierte Lese- und Schreibtests mit Latenzen. Der Tester erzeugt sie über je von Parametern (Abbildung 7) und eig-
mehreren Datasets an, beansprucht ein eigene Parameter. net sich daher für zahlreiche Einsatz-
Testdurchlauf durchaus längere Zeit. Die Die Logdateien dienen dann als Grund- szenarien. Als Besonderheit spuckt das
Ergebnisse fallen entsprechend umfang- lage für Fio2gnuplot, das daraus meh- Programm seine Messergebnisse auch in
reich aus (Abbildung 5). rere Einzel- und
Der Tester darf das Testprotokoll auch Vergleichsgrafiken
in Dateien sichern. Dazu muss er einen generiert (Abbil-
entsprechenden Parameter und den zuge- dung 6). Weitere
hörigen Dateinamen angeben. Parameter beein-
flussen dann die
Grafisch grafischen Darstel-
lungen im Detail.
Fio liefert insbesondere bei kombinierten Mehr zu diesen
Tests sehr umfangreiche Details. Zugleich verrät die Doku-
ist die Syntax des Werkzeugs aufgrund mentation von
seiner zahlreichen Funktionen höchst Fio2gnuplot [10].
komplex. Eine grafische Ansicht der Die Grafiken legt Abbildung 8: Dank Libre Office punktet Iozone mit schönen Messungsgrafiken.
07/2019
Software

Form von XLS-Dateien aus, Microsofts speichers bei Datenbank-Anwendungen Festplatten und für SSDs in solchen meist
Excel-Dateiformat. Das erlaubt es nicht simuliert. Zudem bringt das Tool einen gemischten Umgebungen kennt, berück-
Bitparade

nur, die Werte in einer Tabellenkalkula- automatischen Modus mit, der alle Test- sichtigt es auch Hardware-spezifische
tion übersichtlich darzustellen. Dank der reihen durchläuft. Eigenheiten.
dort vorhandenen Grafikfunktionen er- Zu bemängeln sind die bei den Tools
zeugt der Tester auch im Handumdrehen Darstellung teils nur sehr rudimentär ausgeprägten
aussagekräftige Diagramme (Abbildung Fähigkeiten, die Messergebnisse grafisch
8). Alternativ gibt er einen Export-Datei- Dank der passenden Parameter am auszugeben. Die Programme liefern
www.linux-magazin.de

58
namen im ODS-Format an, dem nativen Prompt liefert Iozone zügig die ge- eine Fülle an Informationen, die schnell
Format von Open Office und Libre Office. wünschten Ergebnisse. Will der Admin unübersichtlich wird. Wünschenswert
eine Datei-Ausgabe im XLS- oder ODS- wären daher besser integrierte und leis-
Messverfahren Format, stellt das Terminal auch deren tungsfähigere Optionen, um die Mess-
Inhalt tabellarisch dar. Dabei gibt Iozone werte grafisch aufzubereiten. (kki) n
Iozone kennt insgesamt 13 unterschiedli- nicht nur die Messwerte wieder, sondern
che Verfahren, um die Lese- und Schreib- listet auch die Einstellparameter im Klar-
geschwindigkeit eines Massenspeichers text auf. So bemerkt der Nutzer Fehler Infos
zu ermitteln. Zudem misst die Software oder Versäumnisse leichter. [1] IOPS: [https://de.wikipedia.org/wiki/Input/
die CPU-Auslastung in Abhängigkeit von Output_operations_Per_Second]
den Geschwindigkeitstests. Die einzelnen Fazit [2] Iotop: [https://linux.die.net/man/1/iotop]
Schreib- und Lesetests darf der Tester [3] Iometer: [http://www.iometer.org]
außerdem nach Gutdünken miteinander Die vier behandelten Benchmark-Lösun- [4] Tiobench:
kombinieren. gen konzentrieren sich auf unterschied- [https://github.com/mkuoppal/tiobench]
Setzt er die einzelnen Parameter ge- liche Anwendungsszenarien: Während [5] FFSB:
schickt ein, simuliert der Anwender die Gnome Disks und auch Bonnie++ sich [https://sourceforge.net/projects/ffsb/]
für sein spezielles Anwendungsszenario eher für Desktopsysteme und kleinere [6] Bonnie++: [https://sourceforge.net/
wichtigen I/O-Prozesse und erhält indi- Server eignen, bespielt Iozone auch grö- projects/bonnie/]
viduell zugeschnittene Ergebnisse. Die ßere Infrastrukturen (Tabelle 1). [7] Gnome Disks:
dafür nötigen Testdateien legt Iozone vor- Fio lässt sich zwar auch auf Einzelplatz- [https://wiki.gnome.org/Apps/Disks]
eingestellt mit einer Größe zwischen 64 systemen oder exklusiven Datei- oder [8] Fio: [http://freshmeat.sourceforge.net/
KByte und 512 MByte an, was der Tester Applikationsservern einsetzen, fühlt sich projects/fio]
ändern kann. allerdings in Storage-Umgebungen am [9] Fio-Dokumentation:
Die Daten-Records erzeugt Iozone mit wohlsten. In Infrastrukturen mit Storage- [https://fio.readthedocs.io/en/latest/]
voreingestellten Größen zwischen 4 Tiering trägt die Software je nach Anfor- [10] Dokumentation zu Fio2gnuplot:
KByte und 16 MByte. Deren Umfang ist derungsprofil dazu bei, Performance- [https://www.systutorials.com/docs/linux/
adaptierbar, etwa für Szenarien, in denen Engpässe ausfindig zu machen. Da Fio man/1-fio2gnuplot/]
der Admin die Performance des Massen- spezielle Einstellungen für herkömmliche [11] Iozone: [http://www.iozone.org]

Tabelle 1: Benchmark-Programme für Massenspeicher


Bonnie++ Gnome Disks Fio Iozone
Lizenz GPL GPL GPL proprietär (Freeware)
Funktionen
Plattformübergreifend ja nein ja ja
Benchmark-Typ Dateisystem Dateisystem Storage, Dateisystem möglich Dateisystem, Storage möglich
I/O-Buffer-Typen direkt, gepuffert direkt, gepuffert direkt, gepuffert, atomar direkt, gepuffert
Testtypen read/write, random read/ read/write read/write, random read/write, read/write, random read/write,
write trim, trimwrite, randomtrim reread, rewrite, random mix
Automatisierter Ein- nein nein ja nein
satz mit Jobdatei
I/O-Engines keine keine Sync, Psync, Vsync, Libaio, Po- Mmap, Aio_read, Aio_write
sixaio, Solarisaio, Windowsaio,
Mmap, Splice, Syslet-rw, Sg,
Net, Netsplice, Cpuio, Guasi,
Rdma, Falloc, E4defrag, External
Destruktiv nein nein ja/nein nein
Grafische Ausgabe nein, nur HTML-Tabelle ja extern extern
Datenausgabe I/O in KByte/s I/O in MByte/s, Zugriffszeiten I/O max., min., avg., Latenz, I/O in MByte/s
IOPS
07/2019
Software

Werkzeuge im Kurztest

Tooltipps
Tooltipps
www.linux-magazin.de

60

Ddgr 1.6 Mtag 2.2.4 Uritool 1.0.0


Duckduckgo auf der Kommandozeile Metadaten von Audiofiles bearbeiten URIs auf der Shell auswerten
Quelle: [https://github.com/jarun/ddgr] Quelle: [https://github.com/psemiletov/ Quelle: [https://github.com/adrianrudnik/
Lizenz: GPLv3 mtag] uritool]
Alternativen: Surfraw, Googler Lizenz: Public Domain Lizenz: MIT
Alternativen: Id3tool, Beets Alternativen: keine

Für eine schnelle Onlinesuche müssen Anwender, die eine MP3-, Ogg-Vorbis-
Shellarbeiter die Kommandozeile nicht oder Flac-Sammlung pflegen und nach
verlassen. Zum beliebten Tool Googler einer Möglichkeit suchen, die Metadaten Wer aus kryptischen Adressen und Zei-
gesellt sich das Python-Programm Ddgr, der Audiodateien zu bearbeiten, sollten chenketten wie etwa »M%C3%BCnchen«
das die Suchmaschine Duckduckgo be- sich Mtag anschauen. Das Kommando- Informationen herausfischen möchte,
fragt. Fertige Pakete für viele Distribu- zeilentool kann viele Dateien gleichzeitig musste sich bislang mit regulären Aus-
tionen stehen unter Github bereit. Ddgr bearbeiten, deren Tags und Comments drücken plagen. Das in Go implemen-
benötigt Python 3.5 oder neuer. auslesen und neu setzen. tierte Uritool nimmt Anwendern einen
Anwender geben den Suchbegriff beim Das C++-Programm arbeitet mit Hilfe Teil der Arbeit ab. Fertige Pakete für alle
Aufruf an und sehen die Ergebnisse for- von Regeldateien, die es auf die Dateien gängigen Betriebssysteme und Plattfor-
matiert im Terminal. Jeder Treffer erhält im aktuellen Verzeichnis anwendet. Auf men stehen auf Github bereit.
eine eindeutige Ziffer in Türkis, der Sei- diese Weise können viele Anpassungen Die Steuerung erfolgt beim Aufruf; eine
tentitel ist grün hervorgehoben und die in einem Durchgang erfolgen. Die Re- Konfigurationsdatei hat das Tool nicht.
URL erscheint in roter Schrift. Der Schal- geln sind UTF-8-kodierte Textdateien, die Ohne Parameter gestartet liefert es eine
ter »- - nocolor« deaktiviert die Farbe, und Nutzer im Editor ihrer Wahl erstellen. Die rudimentäre Onlinehilfe mit einer Liste
hinter »- - colors« können Nutzer eigene Syntax ist einfach: Das Tool kennt die sie- aller Unterbefehle. Uritool kennt die
Nuancen definieren. In der Voreinstel- ben Tags »@artist«, »@title«, »@album«, Kommandos »parse«, »path« und »query«.
lung listet Ddgr zehn Treffer. Über »-n« »@genre«, »@comment«, »@year« und Jedes besitzt weitere Optionen, die der
passen Anwender die Anzahl an. »@track«. Schalter »- - help« einblendet.
Über die Eingabe der Indexnummer öff- Beim Aufruf geben Anwender einen der Die Befehle »path« und »query« wandeln
nen Nutzer einen Treffer im Standard- Parameter »apply«, »extract«, »rename« Steuerzeichen aus URIs in Zeichenket-
browser, den die Umgebungsvariable oder »list« an. Dahinter steht der Name ten um und vice versa. Das Kommando
»$BROWSER« festlegt. Eine Abkürzung der Regeldatei, gefolgt von einem der drei »parse« filtert bestimmte Informationen
bietet »-j« und öffnet immer den ersten Dateitypen »mp3«, »ogg« oder »flac«. Die heraus und schreibt diese im Json-Format
Eintrag im Browser. Duckduckgo durch- Github-Seite des Projekts zeigt Anwen- auf die Shell. Alternativ können Anwen-
sucht auch Websites selbst, die Nutzer dungsbeispiele zu allen Mtag-Funktio- der hinter »- - format« eigene Wünsche
hinter »-w« schreiben, »-r« beschränkt nen und erklärt auch, wie das Anzeigen definieren. Das Tool versteht die Go-Tem-
die Suche auf eine geografische Region, und Auslesen von Tags respektive das plates-Sprache.
»-p« verwendet einen Proxy, »-t« limitiert Umbenennen von Dateien anhand ihrer ★★★★★ Die Anwendungsbeispiele auf
eine Zeitspanne. Metadaten gelingt. der Github-Seite sollen den Funktions-
★★★★★ Ddgr arbeitet flott und eignet ★★★★★ Mtag macht eine gute Figur, umfang illustrieren. Die Dokumentation
sich gut zum Einbinden in eigene Skripte. auch beim Bearbeiten großer Sammlun- könnte nach Wunsch der Tester ausführ-
Die umfangreiche Dokumentation enthält gen. Einziger Kritikpunkt: Die Manpage licher sein, denn derzeit gilt oft „Probie-
anschauliche Beispiele. n könnte übersichtlicher sein. n ren geht über studieren“. n
07/2019
Software
Guider 3.9.5 LF r12 Termshark 1.0.0
Performance von Systemen untersuchen Einfacher Dateimanager für die Shell Netzwerkverkehr analysieren

Tooltipps
Quelle: [https://github.com/iipeace/guider] Quelle: [https://github.com/gokcehan/lf] Quelle: [https://termshark.io]
Lizenz: GPLv2 Lizenz: MIT Lizenz: MIT
Alternativen: Sysstat, Gnome System Monitor Alternativen: Ranger, Cfiles, Vifm Alternativen: Tshark, Wireshark

www.linux-magazin.de
61

Das Python-Tool Guider geht Anwendern An Dateimanagern herrscht unter Linux Den Datenverkehr im Netzwerk analy-
beim Erfassen der Systemauslastung zur sicherlich kein Mangel, auch für Kon- siert Wireshark – sofern eine grafische
Hand und fertigt zudem umfangreiche solenfans gibt es einige Möglichkeiten, Oberfläche vorhanden ist. Auf Servern
Berichte an – als Textausgabe oder Gra- komfortabel im Verzeichnisbaum zu na- empfiehlt sich Termshark als Ncurses-
phen. Es setzt Python 2.7 oder neuer vigieren, Dateien zu kopieren, umzube- basierte Alternative. Das in Go geschrie-
voraus. Guider greift unter anderem auf nennen, sie zu verschieben oder löschen. bene Tool benötigt Tshark (Version 1.10.2
die Ftrace-Funktionen des Linux-Kernels Mit dem in Go implementierten LF gesellt oder neuer), Tcell und Gowid.
zurück. Eine Übersicht über alle benötig- sich ein weiterer Vertreter für die Shell Um eine Pcap-Datei auszuwerten, geben
ten Kernelfunktionen listet die Github- hinzu. Die Entwickler ließen sich vom Nutzer diese hinter »-r« an, eine Netz-
Seite auf. Die meisten Module sind in Python-basierten Dateimanager Ranger werkschnittstelle hinter »-i«. Die Fens-
den Standardkernen der Distributionen inspirieren, bewerben ihr Projekt aber als teraufteilung hat das Tool von Wireshark
aktiviert. ressourcenschonender. Anwender finden übernommen, es unterstützt auch dessen
Der Schalter »- - help« gibt eine Übersicht Pakete unter Github. Anzeigefilter. Im Feld »Filter« am oberen
aller Befehle aus. Guider unterteilt die LF ist als Client-Server-Programm um- Rand tragen Nutzer Protokolle oder Ad-
Kommandos in die Bereiche »monitor«, gesetzt. Beim Start der ersten LF-Instanz ressen ein. Termshark blendet hilfsbereit
»profile«, »visual«, »util«, »run« und nimmt die Serverkomponente ihren eine Liste mit allen möglichen Filtern
»test«. In der Rubrik »monitor« kennt das Dienst auf, alle weiteren LF-Instanzen nach dem Eingeben der ersten Buch-
Tool 15 verschiedene Befehle, die unter- verbinden sich als Clients mit dem Ser- staben ein. Nach dem Bestätigen über
schiedliche Systemkomponenten beob- ver. So können Anwender Daten zwi- »Apply« passt das Tool seine Ausgabe
achten, darunter Prozesse, Speicher- und schen den verschiedenen LF-„Fenstern“ entsprechend an.
Netzwerkauslastung sowie System- und austauschen und etwa Dateien kopieren Anwender navigieren mit [Tab] durch die
Benutzer-Calls. und woanders einfügen. Die Tastenkürzel einzelnen Bereiche. Das Pipe-Zeichen än-
Abhängig von der Option gibt Guider ähneln denen von Vim. So startet »:« dert das Fensterlayout und [Esc] aktiviert
seine Ergebnisse als Statusmeldung oder den Befehlsmodus, [Y] kopiert, [P] fügt das Menü. Mit [+] und [-] passen Nutzer
als Bericht im Terminal aus. Über weitere ein. Eine vollständige Übersicht bietet die Größe des aktuellen Bereichs an. Eine
Schalter schreibt es sie in eine Datei oder das Handbuch. Übersicht über alle verfügbaren Tasten-
wendet Filter an. Die Befehle »cputest« Ohne Parameter aufgerufen öffnet LF kürzel liefert »?«.
und »alloctest« setzen das System unter eine dreigeteilte Ansicht: Die Mitte zeigt Genau wie Wireshark bietet Termshark
Last, was bei der Fehlersuche hilft. Um den Inhalt des aktuellen Verzeichnisses die Möglichkeit, Daten live mitzuschnei-
die grafische Aufbereitung kümmern sich an, links das übergeordnete Verzeichnis den, wenn Admins die zu überwachende
diverse »draw«-Anweisungen. und rechts eine Vorschau. Benutzer navi- Schnittstelle und gegebenenfalls das ge-
Wer die Analyse mit einem anderen gieren mit den Pfeiltasten (oder über [H], wünschte Protokoll angeben. Im Hinter-
Programm weiterverarbeiten möchte, [J], [K], [L]). In einer Konfigurationsdatei grund setzt das Tool dazu auf Tshark,
schreibt die Resultate mit »reptop« in eine (»~/.config/lf/lfrc«) können Anwender weshalb für diese Aufgabe Rootrechte
Json-Datei. Die Website bietet zahlreiche die Tastenbelegung anpassen. Die Doku- erforderlich sind.
Anwendungsbeispiele. mentation enthält eine Vorlage und gibt ★★★★★ Termshark ist ein praktischer
★★★★★ Guider ist leistungsfähig und Tipps zum Kombinieren von LF mit Fish Helfer für alle, die ohne grafische Ober-
nimmt Systeme genau unter die Lupe. oder Vim. fläche Pcap-Dateien auswerten oder
Die Beispiele auf der Projektseite sind ★★★★★ LF hält sein Versprechen und Netzwerkverkehr mitschneiden wollen.
inspirierend, aber aufgrund des großen arbeitet äußerst flott. Fans des Texteditors Wer Wireshark kennt, findet sich schnell
Funktionsumfangs wäre eine ausführli- Vim dürften sich über die bekannten Tas- zurecht. Alle anderen lesen die gute An-
che Dokumentation hilfreich. n tenkürzel freuen. n leitung. (U. Vollbracht/hej) n
07/2019
Sysadmin
Aus dem Alltag eines Sysadmin: Log2ram und Frontail

Fürs Protokoll

Einführung
www.linux-magazin.de
63
Bei wem zu Hause 25 Raspberry Pis laufen und noch einmal so viele andere IP-Devices wie bei Sysadmin-
Kolumnist Charly, darf sich wie dieser Gedanken über sein Log-Management machen. Rausgekommen sind
Atom-Technik und eine Logfile-Disk, die nicht dauergeflasht ist. Charly Kühnast

Inhalt
64 FAI
Ein effizienter Weg, um Server auto-
matisiert mit einem Betriebssystem
auszustatten.
69 Cloud Security
Wer wesentliche Teile seiner IT in die
Wolken schießt, muss gängige Sicher-
heitsmechanismen überdenken.

Ab und zu schaue ich mit »nmap -sP


10.0.0.1-254« nach, wie viele IP-Geräte
im Heimnetz gerade online sind. Es sind
inzwischen mehr als 50, die Hälfte davon
Raspberry Pis. Damit wächst so lang- Abbildung 1: Frontail macht in Sachen Log-Sammlung ein Web-Fass auf.
sam die Notwendigkeit für einen zen-
tralen Syslog-Server. Ein alter Mini-PC Allerdings erzeugen die eingehenden Jetzt habe ich noch einen weiteren
mit Intel Atom, den ich mit einer SSD Syslog-Meldungen eine Menge Schreib- Wunsch: Ich möchte mir die Logs nicht
nachgerüstet habe, soll den Dauerjob vorgänge und ich fürchte um die Lebens- nur per »tail -f« auf der Konsole des Log-
übernehmen. Den Syslog-Server gibt der dauer der SSD. Zur Rettung eilt Log2ram servers ansehen, sondern sie auch in eine
standardmäßig installierte Rsyslogd. In [1] herbei. Es legt eine RAM-Disk auf Webseite einblenden, falls mich unter-
dessen Konfigurationsdatei »/etc/rsyslog. »/var/log« an, in die der zentrale Rsys- wegs mal der Drang nach Akteneinsicht
conf« sorgen die folgenden Zeilen dafür, logd alle eingehenden Daten schreibt. ereilt. Ein kleines Tool namens Frontail
dass er von anderen Rechnern Syslog-Da- Einmal pro Stunde landet die Sammlung [2] ermöglicht genau dies. Es fußt auf
ten per UDP und TCP empfangen kann: in einem Rutsch auf der Platte. Node.js, also muss dessen Installer
»npm« installiert sein. Frontail installiere
$ModLoad imudp
$UDPServerRun 514 Seltsamer Hang zum Brief und starte ich danach mit:

npm i frontail -g
$ModLoad imtcp
Ich installiere Log2ram, indem ich auf frontail /var/log/syslog
$InputTCPServerRun 514
dem Logserver
Auf den anderen Maschinen füge ich den Damit startet ein kleiner Webserver
git clone https://github.com/azlux/log2ram
Eintrag »*.* @10.0.0.254« in die »rsyslog. auf Port 9001. Rufe ich die Seite per
conf« ein, sodass sie alle Logdaten in den ausführe, in das entstandene Verzeichnis Webbrowser auf, begrüßt mich das Sys-
Server 10.0.0.254 pumpen. wechsle und dort das Skript »install.sh« log (Abbildung 1). So bekomme ich mit
ausführe. Bei mir schlug die Installation wenigen Handgriffen den Durchblick und
zunächst fehl, weil das Paket Mailutils eine innerlich gechillte SSD. (jk) n
Der Autor fehlte. Log2ram besteht aber auf der
Charly Kühnast administriert Möglichkeit, bei Problemen Mails an den
Unix-Systeme im Rechenzen- Admin zu schicken. Infos
trum Niederrhein. Zu seinen Auch die Größe der RAM-Disk, per De- [1] Log2ram:
Aufgaben gehören Sicher- fault 40 MByte, war für meine Zwecke zu [https://github.com/azlux/log2ram]
heit und Verfügbarkeit der klein, aber das ist mit einem Handgriff in [2] Frontail: [https://github.com/mthenw/
Firewalls und der DMZ. der Konfigurationsdatei angepasst. frontail/blob/master/README.md]
07/2019
Sysadmin

FAI installiert Betriebssysteme schnell und einfach

Massenproduktion
FAI
www.linux-magazin.de

64
Heute entscheidet oft der Grad der Automation eines Setups über dessen Erfolg oder Misserfolg. FAI unter-
stützt den Admin dabei, Server automatisiert mit einem Betriebssystem auszustatten. Martin Loschwitz

ten spezifischen Mechanismen der Dis-


tributionen gibt. Gemischte Umgebungen
kommen gar nicht so oft vor – dass man
etwa Ubuntu und Red Hat in derselben
Umgebung vorfindet, ist eher die Aus-
nahme. Wer diese Frage stellt, unterliegt
jedoch einem Trugschluss. Denn korrekt
müsste die Frage lauten, wieso Red Hat,
Debian & Co. denn unbedingt ihr eigenes
Süppchen kochen mussten, obwohl FAI
doch bereits existierte.
© Kittipong Jirasukhanont, 123RF

FAI ist nämlich bereits 18 Jahre alt und


folglich zu einer Zeit entstanden, als die
IT beim Thema Automation noch in den
Kinderschuhen steckte. Dass man auch
mit Werkzeugen wie Puppet, Chef oder
Ansible Betriebssysteme automatisiert
auf die Festplatte eines Servers bringen
kann, ist eine viel jüngere Entwicklung,
als viele Admins schätzen.
Wer nicht mit der Zeit geht, muss mit virtuelle Maschinen hostet. Genauso be- Puppet etwa erschien erstmals 2005, da
der Zeit gehen. Dieser Kalauer gilt in der inhaltet Automation natürlich auch das hatte FAI bereits sechs Jahre auf dem Bu-
IT besonders im Hinblick auf Automa- Betriebssystem. Das händische Ausrollen ckel. Und 1999, als die Arbeit an FAI be-
tion. Denn wenn Firmen es schaffen, ihr einer Linux-Distribution – jeder Admin gann, hantierte man bei Debian noch mit
gesamtes Setup so gut wie möglich zu weiß das – ist heute zwar keine kompli- Boot-Floppies und mit einem Uralt-Instal-
automatisieren, ist das ein maßgeblicher zierte Aufgabe mehr, aber nach wie vor ler, bei dem von Preseeding und automa-
Wettbewerbsvorteil. eine langwierige. Die ist aber auch gut tischer Installation noch keine Rede war.
Zugleich ist Automation die Grundlage zu automatisieren, Kickstart von Red Hat Viel eher war froh, wer Debian 2.2 alias
für die Economy of Scale: Bei der geht es oder das Preseeding beim Debian Instal- Potato oder 3.0 alias Woody überhaupt
ja um Synergieeffekte, die überhaupt erst ler legen davon Zeugnis ab. irgendwie auf die Festplatte brachte. Der
durch Automation entstehen. Die anfäng- FAI ist eine separate Software, die mit Debian Installer, der die Boot-Floppies
liche Arbeit, die in die Automation einer dem Versprechen antritt, in kürzester Zeit
Plattform fließt, zahlt sich dann mit je- Betriebssysteme aufzuspielen. Dabei ist FAI.ME wird nachgeholt
dem neuen Knoten aus, der hinzukommt FAI auch nicht auf eine spezifische Dis-
Anders als in der letzten Ausgabe angekün-
und nicht stundenlanges Betätscheln tribution gemünzt, sondern unterstützt
digt, kann die Redaktion an dieser Stelle we-
durch den Admin erfordert. sowohl Debian als auch Ubuntu und
gen eines kleinen Missverständnisses noch
Automation umfasst dabei viele Ebenen. Centos sowie noch weitere, weniger be-
keinen Artikel über FAI.ME veröffentlichen.
Sie beginnt bei der Automation der Inf- kannte Varianten.
Stattdessen erscheint in dieser Ausgabe ein
rastruktur und umschließt etwa die au-
Beitrag über FAI, das die Betriebssystem-
tomatische Konfiguration von Switches Das Rad neu erfinden? Installation automatisiert.
oder das Ausrollen von Diensten und de-
Die Besprechung von FAI.ME, das Images bei-
ren Konfiguration, um aus einem Grund- Mancher Leser fragt sich angesichts von
spielsweise für Container erzeugt, erscheint
system einen funktionierenden Knoten FAI möglicherweise, wozu das denn gut
voraussichtlich in der Ausgabe 09/19.
zu machen, der etwa in einer Cloud sein soll – wo es doch die schon erwähn-
07/2019
Sysadmin
endlich in den Ruhestand schickte, er- mindestens eine verbaute Netzwerkkarte
schien erst 2005 zusammen mit Debian PXE unterstützen. Im Serverumfeld ist
GNU/Linux Sarge. das aber kein Problem mehr, hier finden

FAI
Für Thomas Lange (Abbildung 1) wäre sich Server ohne PXE-fähige Netzwerk-
das viel zu spät gewesen. Der arbeitete karten so gut wie gar nicht mehr.
1999 an der Universität zu Köln, die ge- Auch bei Endanwender-Systemen fehlt
rade einen schicken neuen Cluster beste- PXE meist nur, wenn man zu den aller-
hend aus 16 Servern angeschafft hatte. günstigsten Komponenten greift. Mittler-

www.linux-magazin.de
65
Der war nun irgendwie zu installieren weile ist sogar flächendeckender Support
– die Aufgabe fiel schließlich Thomas für UEFI per PXE gegeben, sodass ent-
Lange zu. Auf die nervige Hantiererei mit sprechende Systeme sich auch auf UEFI-
Debians Boot-Floppies hatte Lange aber Basis nach Maßgabe des Bios-Nachfol-
gar keine Lust. Und weil er zuvor lange gers booten lassen.
mit Solaris gearbeitet hatte und dessen
Jumpstart kannte, kam ihm die Idee, ein FAI: Netz ist Standard
ähnliches Installationssystem auch Linux Abbildung 1: Thomas Lange ist das Mastermind hin-
zu spendieren. ter FAI und zeichnete 1999 für den Entwicklungsbe- Die Fähigkeit, vom Netzwerk zu star-
Der Rest ist Geschichte: Der FAI, der ginn verantwortlich. ten, macht sich auch FAI zunutze. Der
Fully Automated Installer, erfreut sich Bootvorgang per PXE ist hier fester Pro-
seither einer großen Fangemeinde und kommt. Die erste und übliche Option ist grammbestandteil, auch wenn er sich
Lange wurde über den Umweg FAI sogar das Starten von einem lokalen Speicher- mittlerweile umgehen lässt – dazu spä-
offizieller Debian-Entwickler – bis heute medium – meist handelt es sich um die ter mehr. Um FAI zu nutzen, obliegt es
pflegt er die Pakete in Debian, die für FAI so genannte Systemfestplatte. Die enthält dem Admin deshalb zunächst, einen Host
benötigt werden. das reguläre Betriebssystem. Hat der Ser- zum FAI-Master zu ernennen und auf die-
ver mit dieser Platte erst einmal begon- sem einen DHCP-Server und einen TFTP-
Wie FAI funktioniert nen, geschieht der Rest des Bootvorgangs Server zu betreiben.
automatisch. Wer schon einen oder beide Dienste in
Der Artikel stellt FAI ganz praktisch vor Kommt er aber frisch aus dem Karton, seinem Netzwerk hat, kann diese recy-
und erklärt, wie das Programm funktio- hat er in der Regel noch kein Betriebs- celn – es ist aber darauf zu achten, dass
niert und an welchen Stellschrauben der system. Der Admin kann nun mit einem sich die FAI-Konfiguration und mögli-
Admin bei Bedarf dreht. Um Verständnis temporären lokalen Bootmedium – etwa cherweise bestehende Infrastruktur nicht
für das große Ganze zu schaffen, geht einem USB-Stick – dieses händisch ins- auf die Füße treten.
dem aber der Blick aus der Vogelperspek- tallieren. Aber das ist ja gerade das, was Aus Gründen der Einfachheit geht dieser
tive voraus: Welchen Konzepten folgt FAI er sich nicht wünscht. Oder er setzt auf Artikel im Folgenden davon aus, dass FAI
und wie erledigt es seine Arbeit grund- einen anderen Weg, um das System zu auf einem einzelnen Server zum Einsatz
sätzlich? Dass es nicht trivial ist, Hosts installieren: das Booten via Netzwerk. kommt, auf dem es für PXE samt DHCP
automatisiert mit einem Betriebssystem Ein Start von Netzwerkmedien ist keine und TFTP selbst verantwortlich ist. Das
zu versorgen, haben auch die Debian- neue Erfindung. Es spielen drei Proto- Grundsystem besteht aus Debian GNU/
Entwickler und die Red-Hat-Leute ge- kolle zusammen, die zu den Urgesteinen Linux, das Paket »fai-quickstart« aus dem
merkt, die dort an den heute gebräuchli- des Internets gehören: DHCP versorgt ei- FAI-Verzeichnis ist installiert. Wo der
chen Installern arbeiten. nen Server mit einer IP-Adresse, damit er Admin besondere Vorkehrungen treffen
Umso interessanter, dass FAI eine ähnli- TCP/IP und UDP sprechen kann. muss, falls FAI sich nicht exklusiv um
che Funktionalität bereits vor 20 Jahren Per TFTP lädt das System sich anschlie- den DHCP-Server kümmert, weist der
und mit den Werkzeugen bot, die damals ßend einen Bootloader herunter und boo- Artikel darauf gesondert hin.
eben zur Verfügung standen. Wobei ehr- tet ihn. Ab jetzt ist theoretisch alles mög- Wichtig: Im Idealfall definiert der Admin
licherweise auch festzustellen ist, dass lich, was beim Booten von einem lokalen zumindest ein Deployment-Netz ohne
sich die genutzten Protokolle seither gar Medium auch machbar wäre. Es ist zum VLAN-Tag, in dem alle betroffenen Netz-
nicht so radikal verändert haben – viele Beispiel kein Problem, das eigene Root- werkports automatisch Mitglied sind.
gehen ohnehin auf die Anfangszeit des Dateisystem auf einem Server im Netz Denn das Booten von VLAN-getaggten
Internets zurück. liegen zu haben und das System ohne Interfaces unterstützen die meisten
lokales Bootmedium zu betreiben – im Netzwerkkarten eben nicht. Selbst Intels
Alte Bekannte: DHCP, PXE, so genannten Diskless-Mode. Chips benötigen hierfür eine spezielle
Das Gespann aus DHCP und TFTP heißt, Firmware, die der Hersteller nur auf An-
TFTP
wenn es – wie im Artikel beschrieben – frage überhaupt herausrückt.
Startet ein Server kalt oder nach einem zum Einsatz kommt, übrigens „Preboot Das ist aber kein Problem: Nach der In-
Neustart, gibt es mehrere Optionen, wie Execution Environment“, abgekürzt PXE. stallation des Betriebssystems muss die-
er an ein lauffähiges Betriebssystem Will ein System per PXE starten, muss ses ja ohnehin noch konfiguriert werden,
07/2019
Sysadmin

Und das schon aus wichtigere Rolle: Sie entscheidet letztlich


einem ganz einfachen darüber, ob ein Server auf seine DHCP-
Grund – das Thema Frage überhaupt eine Antwort bekommt.
FAI

Locking fällt dabei Der Admin kann ja auch ein Interesse da-
komplett weg. ran haben, einen Server in eine PXE-Um-
Ist der NFS-Master gebung zu schicken, ohne ihm per FAI
dann installiert und gleich ein neues Betriebssystem überzu-
ausgerollt, kommt bügeln. Daher kümmert sich FAI ab Werk
www.linux-magazin.de

66
ihm eine wichtige Auf- nur um jene Server, die der Admin aus-
gabe zu: Er hostet die drücklich per CLI in die Datenbank des
© FAI

FAI-Konfigurationsda- DHCP-Servers übernommen hat.


Abbildung 2: FAI startet in ein Pxelinux, das in der Standardkonfiguration teien, also jene Da- Dem Standard-DHCP-Server in FAI fehlt
im Anschluss an einen Time-out automatisch in den Installer startet. teien, aus denen FAI also die Catch-all-Regel, die sich in
seine Arbeitsanwei- DHCP-Konfigurationen ansonsten übli-
eventuelle VLAN-Tags lassen sich bei der sungen bezieht. Hier liegen zum Beispiel cherweise findet. Der Befehl
Gelegenheit einrichten. Das System ins- auch die Basefiles, die FAI benötigt, um
dhcp-edit demohost 01:02:03:AB:CD:EF
talliert sein Betriebssystem also in einem ein Betriebssystem zu installieren.
ungetaggten Netz und hat schon beim demonstriert beispielhaft, wie sich ein
ersten Boot ins finale Betriebssystem die Schritt für Schritt: Was Host für die Nutzung im FAI-DHCP ak-
passende Konfiguration der Netzwerk- tivieren lässt.
passiert wann?
schnittstellen zur Hand. Ist die DHCP-Konfiguration gesichert,
Um sich die FAI-Funktionen zu verge- folgt ein weiterer wichtiger Schritt: Der
Die FAI-Konfiguration genwärtigen, ist es sinnvoll, sich die Admin hinterlegt auf dem TFTP-Server
einzelnen Arbeitsschritte vor Augen zu einen MAC-spezifischen Bootloader, da-
PXE sieht DHCP und TFTP für große führen. Sobald ein Server per PXE in mit der Client diesen beim Request findet
Aufgaben vor. Der Fokus liegt hier ein- eine Netzwerk-Bootumgebung startet, und nicht ins Leere greift. Der Befehl da-
zig und allein darauf, dem System einen bekommt er vom DHCP-Server zunächst für ist nicht kompliziert:
Bootloader zu vermitteln, alle anderen eine IP-Adresse und dann per »next«-
fai-chboot -IFv -u nfs://faiserver/srvU
benötigten Dateien muss dieser sich im Eintrag auch noch die Information, auf /fai/config demohost
Anschluss aus einer anderen Quelle zie- welchem Server er per TFTP nach Da-
hen. Hat der Admin das im Hinterkopf, teien suchen kann. Er setzt aber voraus, dass er auf dem-
erschließt sich das grundlegende Design Dabei ist wichtig, dass je nach genutzter selben Host aufgerufen wird, auf dem
hinter FAI sehr schnell. Bootloader-Art – Bios oder UEFI – der auch die DHCP-Konfiguration lagert,
Denn auf dem FAI-Master müssen mehr Client nach bestimmten Dateien auf dem denn über diese holt sich »fai-chboot« die
Dienste als nur DHCP und TFTP aktiv TFTP-Server sucht, die MAC-spezifisch MAC-Adresse von »demohost«.
sein. Ebenso braucht er in der Standard- sind. Im Namen der Datei ist also die
konfiguration einen NFS-Server. Der stellt MAC-Adresse der Netzwerkkarte, die die Boot in ein Mini-System
verschiedene von FAI benötigte Konfigu- Anfrage stellt, enthalten. Der PXE-Stan-
rationsdateien bereit, etwa die Konfigura- dard sieht das ausdrücklich vor. Sobald die passende PXE-Konfiguration
tion der FAI-Klassen, auf die der Artikel Doch ganz korrekt ist die vorangegan- hinterlegt ist, bekommt der Client beim
später noch im Detail eingeht. gene Darstellung nicht. Denn die MAC- Netzwerkboot einen Bootloader unterge-
NFS ist bei Admins möglicherweise Adresse der anfragenden Netzwerkkarte schoben – das allseits bekannte Pxelinux.
nicht das beliebteste Protokoll und heute spielt in FAI noch eine zweite und viel Das wiederum lädt dann einen ganz klas-
würden sie mögli-
cherweise auf andere
Protokolle setzen –
weil der größte Teil
der Arbeit der Clients
in lesendem Zugriff
besteht, ist das am
Ende aber ohnehin
kaum noch relevant.
Denn der lesende par-
allele Zugriff auf NFS
ist deutlich weniger
problematisch als der
schreibende Zugriff. Abbildung 3: Die Festplattenkonfiguration eines Systems definiert sich über die Klasse, zu der es gehört.
07/2019
Sysadmin
sischen Linux-Kernel samt Ramdisk. Es stimmten Zeitpunkten
handelt sich um ein auf Debian GNU/ externe Shellskripte
Linux basierendes System, das eigentlich aufrufen. Die legt der

FAI
nur eine Aufgabe hat: Die Installation ei- Admin im NFS-Ver-
nes lokalen Linux zu ermöglichen – falls zeichnis im Ordner
der Admin beim Bootvorgang nicht doch »scripts« ab, und zwar
noch den »rescue«-Parameter angibt. so, dass sie aufrufbar
Denn dann bootet FAI in dasselbe Mini- sind. Ihre Ausgabe

www.linux-magazin.de
67
Linux, es startet aber nicht automatisch interpretiert der FAI-
die Routine zur Installation eines Systems Installer dann als
(Abbildung 2). Klassen, zu denen die
jeweiligen Hosts ge-
Den Configuration Space hören. Findet sich im
»classes«-Ordner eine
verstehen
passende Klassende-
Läuft die oben beschriebene Installati- finition, wendet der
onsroutine erstmal, ist es aus der Sicht FAI-Installer die darin
des Admin sehr wichtig, die Struktur des festgelegten Parameter
Configuration Space auf dem zuvor ge- auf das jeweilige Sys-
schaffenen NFS-Server zu verstehen. Hier tem an.
finden sich diverse Ordner wie »classes«, Was theoretisch ziem-
»disk_config«, »basefiles«, »scripts« und lich kompliziert klingt, Abbildung 4: Basefiles für Distributionen pflegen die Leute von FAI selbst.
viele weitere. All jene Verzeichnisse ha- ist in der Praxis aber
ben im Rahmen der FAI-Abläufe eine simpel, wie ein einfaches Beispiel ver- große Festplatten hat, könnte es als Klas-
spezielle Rolle. Zu den wichtigsten gehört deutlicht. Angenommen FAI käme auf sendefinition »CEPH« ausgeben. In der
der »classes«-Ordner, denn auf Grundlage Workstations und Servern eines Unter- dazugehörenden CEPH-Klasse wäre dann
der Klassen weist FAI Servern Kategorien nehmens zum Einsatz. Im konkreten Fall vermutlich hinterlegt, dass die für Ceph
zu und versorgt sie mit einem vorher de- startet FAI auf einem Desktop-System benötigten Pakete automatisch den Weg
finierten Software-Mix. – der FAI-Installer weiß das aber noch auf das System finden und grundsätzlich
Zur Erinnerung: In jenem Augenblick, nicht, eben weil er bisher nur die MAC konfiguriert werden.
in dem ein Server in den Bootloader von des Systems kennt. Klar ist: Das Klassensystem in FAI ist
Pxelinux bootet, hat FAI über ihn noch Im ersten Schritt des Prozesses ruft der mächtig und trägt einen großen Teil dazu
keine andere Information als die MAC- FAI-Installer deshalb ein Skript auf, das bei, dass die Lösung so flexibel und dy-
Adresse, über die er den DHCP-Request die Hardware des Hosts einliest und in- namisch ist. Es sorgt zum Beispiel auch
abgeschickt hat. Das allein ist meist aber ventarisiert. Dabei stell sich heraus, dass dafür, dass ein Host eine passende Fest-
zu wenig, um FAI eine Entscheidung da- im jeweiligem System eine fette Grafik- plattenkonfiguration bekommt: Über Da-
rüber zu erlauben, welches Betriebssys- karte mit 3-D-Chipsatz verbaut ist. Die teien, deren Syntax der von »/etc/fstab«
tem der künftige Host haben soll, welche findet sich naturgemäß in Servern eher sehr ähnelt, definiert der Admin das Lay-
von der Standardinstallation abweichen- selten, sodass es sich wohl um einen out, das die Platten im Zielsystem haben
den Pakete zu installieren sind und ob Desktop handelt. sollen (Abbildung 3).
– und falls ja welche – Skripte nach der Das Skript zur Inventarisierung gibt des-
Installation laufen sollen. halb »KDEHOST« aus, und FAI weiß, dass Noch mehr Skripte
FAI behilft sich, indem es Server in Klas- das System zur Klasse »KDEHOST« ge-
sen einteilt und für die einzelnen Klassen hört. In der Definition jener »KDEHOST«- Zwischen Klassen und Skripten entsteht
die Parameter wie Betriebssystem oder Klasse ist zu lesen, dass neben der Basis- übrigens eine äußerst hilfreiche Wechsel-
Paketauswahl definiert. Die Entscheidung Installation auch das komplette KDE 5 wirkung. Denn steht auf Basis der Aus-
darüber, zu welcher Klasse ein Server ge- nebst den für die Nvidia-Grafikkarte be- gabe der Klassen-Skripte erstmal fest,
hört, fällt auf Basis mehrerer Parameter. nötigten proprietären Treibern zu instal- dass ein Host zu einer bestimmten Klasse
Ein Parameter kann etwa der Hostname lieren ist. Auf Servern mit weniger starker gehört, lassen sich für sie weitere Skripte
sein – das ist aber nicht sehr flexibel. Ab Grafikkarte könnte der Host automatisch definieren, die zu bestimmten Vorgängen
Werk gehören Server ohnehin mehreren in der Klasse »XFCE« landen, die auch während des Setups aufzurufen sind. Für
Standardklassen an, etwa »DEFAULT« zu einem grafischen Desktop führt, aber Admins bedeutet das nicht weniger als
und »LAST«. Wirklich flexibel ist die zu einem weniger Ressourcen-intensiven die Option, in das Setup und seine zent-
Klassenzuweisung dort, wo sie über den GUI als KDE. ralen Prozesse zu quasi jedem Zeitpunkt
Aufruf von Skripten passiert. Ähnliche Stunts sind selbst in Kombina- nach Belieben einzugreifen.
Das geht so: Während des Installations- tion mit neuester Technik denkbar: Merkt Die FAI-Dokumentation [1] listet die
vorgangs lassen sich über Hooks zu be- FAI etwa, dass ein System Dutzende möglichen Hooks sowie die Zeitpunkte
07/2019
Sysadmin

das zwar per »deb- den FAI-Entwicklern das durchaus klar


conf« und »cdebconf« ist. Ganz am Ende eines von FAI initi-
noch möglich, doch ierten Installationsvorgangs kopiert FAI
FAI

andere Distributionen nämlich die zehn zentralen Logdateien


haben schlicht kein des Mini-Debiansystems auf den FAI-Ser-
separates Werkzeug, ver, sodass sie dort für den Admin später
das sich um das Sys- zur Ansicht bereitliegen.
tem und dessen Basis- Dieselbe Funktion existiert auch, wenn
www.linux-magazin.de

68
Installation kümmern der Admin FAI nutzt, um seine Systeme
könnte. zentralisiert zu aktualisieren: In den Logs
Die FAI-Entwickler be- findet sich dann die durch diesen Arbeits-
schreiten deshalb ei- schritt produzierte Ausgabe. Die Power
nen besonderen Weg: von FAI bei zentralisierten Updates sollte
Sie liefern zusammen der Admin dabei nicht unterschätzen,
mit FAI Basefiles für mehrere Tests haben in der Vergangen-
diverse Distributionen heit gezeigt, dass das Grund-Update per
aus. Die enthalten ein FAI mit seinen Basefiles vergleichbar gut
möglichst reduzier- funktioniert wie ein Update über die Pa-
tes Basis-System, das ketmanager.
der FAI-Installer dann Übrigens: In Umgebungen, in denen PXE
einfach auf die Platte fehlt, muss der Admin nicht zwangsläu-
kopiert. fig auf FAI verzichten. Denn »fai-mirror«
Praktisch aus Admin- erlaubt es, eine ISO-Datei auf Basis eines
Sicht ist dabei auch, lokalen Setups zu erstellen, die sich da-
dass die FAI-Entwick- nach auf eine CD-ROM oder einen USB-
ler sich regelmäßig Stick bannen lässt und dann in den Ser-
um die Wartung die- vern als lokales Bootmedium fungiert. So
ser Basefiles küm- umgeht der Admin den gesamten Zirkus
mern. Allerdings geht rund um DHCP & Co., wenn auch um
Abbildung 5: Die Paketauswahl ist noch das Individuellste bei den einzelnen dafür viel Zeit drauf – den Preis, dass er die Konfiguration auf
Distributionen – der Rest ist großflächig recycelbar. wer sich also berufen dem NFS-Server nicht mal eben schnell
fühlt, den Entwicklern anpassen kann.
auf, zu denen diese jeweils greifen. Und bei dieser Mammutaufgabe unter die
falls der Admin bei der Lektüre jener Arme zu greifen, stößt sicher nicht auf Fazit
Dokumentation über den Begriff „Plan“ taube Ohren (Abbildung 4).
stolpert: Darunter versteht FAI gewisser- Ganz verheimlichen kann FAI seine Vor- Obwohl FAI bereits einige Lenze auf dem
maßen die Gesamtheit aller vorgenom- lieben übrigens doch nicht, denn zu- Buckel hat, zeigt sich das Tool auf der
menen Einstellungen, die so im Installa- mindest ein streng Debian-spezifisches Höhe der Zeit. Wer schnell und unkom-
tionsplan landen. Feature hat seinen Weg in FAI gefunden. pliziert viele Server ausrollen möchte,
Das Preseeding von »debconf« bietet die findet in FAI dafür einen verlässlichen
Basefiles für verschiedene Möglichkeit, über das Debconf-System Partner. Wollte man zunächst eine funk-
– Debians systemweites Framework zur tionierende Preseeding-Konfiguration für
Distributionen
Festlegung von Konfigurationsparame- Debian und dann ein laufendes Kickstart-
Eine der eher schrägen Eigenheiten von tern bei Paketen – viele Einstellungen Environment für Centos bauen, wäre das
FAI besteht in der Verwendung der so automatisiert vorzunehmen. Der Admin deutlich aufwändiger als der vergleich-
genannten Basefiles für die Installation hinterlegt dazu für eine Klasse einfach bare Aufwand in FAI.
verschiedener Distributionen. Der Ar- eine Debconf-Konfiguration. Installiert Der größte Unterschied zwischen den
tikel hat schon erwähnt, dass FAI eben FAI danach Pakete auf dem jeweiligen Systemen wären wohl noch die Namen
nicht nur für Debian und Ubuntu zur System, erben sie automatisch alle Deb- der Pakete, die auf den Listen mit Zusatz-
Verfügung steht, sondern dass sich auch conf-Einträge. paketen zu finden wären (Abbildung 5).
Centos und potenziell jedes andere Be- Deshalb gilt: FAI ist vielleicht ein Oldie,
triebssystem damit installieren lassen soll Logs sichern aber definitiv auch ein Goldie. (jcb) n
– solange es auf Linux basiert.
Eben weil das so ist, verbietet es sich Ein zentraler Faktor bei der Installation
allerdings von selbst, auf die von den von Systemen ist die Sicherung der Log- Infos
Distributionen angebotenen Installations- dateien, die im Rahmen dieses Vorgangs [1] FAI-Dokumentation:
mechanismen zu setzen. In Debian wäre entstehen. Die gute Nachricht ist, dass [https://fai-project.org/fai-guide/]
07/2019
Sysadmin
Wie wappnen sich Admins gegen Angriffe in AWS & Co.?

Sicher in den Wolken

Cloud Security
www.linux-magazin.de
69
Das Thema Sicherheit ist ein Evergreen in der IT – das gilt auch für die Cloud. Doch wie sichern Admins sich in der
Wolke effizient gegen Attacken ab? Das Linux-Magazin zeigt Wege und Lösungen. Martin Loschwitz

Wenn es ein IT-Thema mal in die Tages-


schau schafft, hat das selten Gutes zu
bedeuten: In der Regel geht es dann um
Angriffe auf Websites oder Institutionen,
um Passwortklau und ganz generell um
Skandale. Das zeigt, dass Sicherheit zu
den wichtigsten IT-Themen überhaupt
gehört. Geht etwas schief, wird aus dem
Admin im schlechtesten Fall ein Beschul-
digter, wenn man ihm grobe Fahrlässig-
keit nachweist.
Und verliert die eigene Klientel das Ver-
trauen in die Fähigkeit, ein System gut
und sicher zu betreiben, geht das mit
erheblichen finanziellen Einbußen ein-

© 06photo , 123RF
her, die gerade nach einem erfolgreichen
Großangriff potenziell tödlich für eine
Firma sein können.
Die Cloud ändert daran übrigens wenig.
Zugegeben, die Herausforderung liegt Admins darauf, dass Standards wie sinn- sich in diesem Beitrag in die Perspektive
hier anders als bei konventionellen Set- volle Netzwerksegmentierung, Software- eines Cloudkunden und geht eben diesen
ups nicht mehr alleine beim Anbieter. Defined Networking, Security Policy Fragen nach.
Früher verkaufte der dem Kunden ein Enforcement und andere Funktionen
schlüsselfertiges Setup, in das dieser implementiert sind und auch wie ge- Was ist das
höchstens noch seine Website einspielen wünscht funktionieren, um so auf Platt-
Bedrohungsszenario?
musste. Heute ist er eher ein Plattforman- formebene Sicherheit herbeizuführen.
bieter. Und der Kunde betreibt seine Inf- Beim Ausrollen der eigenen Applikation Wer sich mit Security im IT-Kontext be-
rastruktur auf solchen Plattformen wahl- in der Cloud achten dann Kunden und reits befasst hat, der weiß, dass die erste
weise selbst oder er beauftragt jemand externe Dienstleister ebenso darauf, dass relevante Frage immer die nach dem
anderen damit – der wiederum nicht sie die Best Practices in Sachen Security Bedrohungsszenario ist, dem man wi-
zwangsläufig zugleich der Plattform- einhalten. derstehen möchte. Daraus ergeben sich
anbieter sein muss. Doch was sind diese Best Practices im individuelle Sicherheitskonzepte, die im
Alle Beteiligten teilen sich also die Ver- Kontext der Cloud? Wie schützen Kunden schlechtesten Fall keine gemeinsamen
antwortung für die Security: Aus der und externe Dienstleister ihre virtuellen Komponenten aufweisen. Wer umfas-
Perspektive der Plattform achten deren Umgebungen vor der riesigen Fülle ver- sende Sicherheit will, kommt um diese
schiedener Angriffe, die denkbar sind? Arbeit nicht herum. Bedrohungsszena-
Und wie merken sie überhaupt, dass et- rien gibt es auch aus Sicht des Cloud-
Der Autor was nicht stimmt? Viele konventionelle kunden mehr als genug.
Martin Gerhard Loschwitz Lösungen aus der Vergangenheit funkti- Das geht bereits bei der Wahl der rich-
ist Senior Cloud Architect onieren in Clouds nicht mehr – da stellt tigen Plattform los. Wo hat die Firma,
bei Mirantis und beschäftigt sich die Frage: Welche Konzepte und der man die eigenen Daten anvertraut,
sich dort vorrangig mit The‑ Werkzeuge stehen zur Verfügung, um ihren Sitz, und wen muss sie qua Gesetz
men wie Open Stack, Ceph Ganoven von vornherein die lange Nase dort gegebenenfalls an ihre Kundendaten
und Kubernetes. zu zeigen? Das Linux-Magazin versetzt heranlassen? Folgt der Anbieter den gän-
07/2019
Sysadmin

gegen das Abschnorcheln von Daten


durch Dritte effektiv zu wehren. Denn es
Cloud Security

ist schwierig bis unmöglich, ein System


sinnvoll abzusichern, auf das ein po-
tenzieller Angreifer im Falle eines Falles
physischen Zugriff hat. Klar: Ein Werk-
zeug der Wahl sind verschlüsselte Volu-
mes, doch auch die helfen kaum. Denn
www.linux-magazin.de

70
solange sie aktiv und eingehängt sind,
kann jeder mit Zugriff auf die Hardware
sie auslesen, ohne dass der Kunde etwas
davon merkt.
Wer seine Daten in die Obhut von AWS
& Co. gibt, muss nach deren Regeln spie-
len. Zumindest für kritische Daten, etwa
Geschäftsgeheimnisse, verbietet sich da-
her deren Nutzung – es gibt hier schlicht
keinen Weg, sich effektiv zu schützen.

Woran erkennt man gute


Anbieter?
Abbildung 1: Zertifizierungen – hier SOC2 C5 vom BSI – bescheinigen keine Sicherheit, aber Standards, die Nun ist es zum Glück nicht so, dass AWS,
Sicherheit ermöglichen. Azure und Google die einzigen aktiven
Anbieter für Public Clouds sind. T-Sys-
gigen Best Practices auf der Hardware- das AWS, Azure und Googles Cloudplatt- tems mit seiner Open Telekom Cloud
ebene und kann er das nachweisen, etwa form. Wobei Azure und Google kaum ins betreibt diese ausschließlich in Deutsch-
in Form entsprechender Zertifikate? Und Gewicht fallen – das mit weitem Abstand land und unterliegt insofern auch nur
welche Cloudsoftware nutzt der Anbie- größte Stück des globalen Cloudkuchens deutschen Datenschutzrichtlinien. Auch
ter? Hält er sie aktuell? hält aktuell Amazon. noch weitere Anbieter buhlen um die
Hat sich der Kunde für einen Anbieter Aus nachvollziehbaren Gründen: Jeden Gunst der Nutzer. Stellt sich nur die
entschieden, ist die nächste Frage, wel- Tag erweitert der Anbieter sein Portfolio Frage: Woran erkennt ein Kunde eigent-
che Funktionen er in seiner Plattform um mehrere As-a-Service-Features. Kom- lich, dass seine Cloud gut gewartet wird?
bietet, um die Sicherheit zu erhöhen. ponenten wie Datenbanken oder Load Die etwas ernüchternde Antwort lautet
Gibt es etwa die Option, Firewallregeln Balancer betreiben Kunden in AWS schon allerdings: Ad hoc erst mal gar nicht.
auf Plattformebene zu installieren? Gibt seit Jahren nicht mehr selbst, sondern Doch gibt es Indikatoren, aus denen sich
es Features wie VPN as a Service oder als As-a-Service-Anwendung. AWS ist Rückschlüsse ziehen lassen.
andere mit Sicherheitsbezug? Ist es mög- bequem, AWS ist stabil und zuverlässig Wer selbst Kunde einer Cloudplattform
lich, Volumes zu verschlüsseln? und obendrein vergleichsweise günstig – ist, sollte auf die Zertifikate, die der An-
Dann gibt es noch eine Menge Software, damit ist, so möchte man meinen, ja im bieter vorweisen kann, penibel achten.
die der Admin direkt auf der Ebene seiner Grunde alles klar. Doch Vorsicht: Zertifikate sagen in der
virtuellen Maschinen installieren kann: Doch so leicht ist es dann doch nicht. Regel nichts darüber, ob eine Cloud tat-
Klassische Honeypots sind ein Beispiel. Amazon, Microsoft und Google sind ame- sächlich sicher ist. Sie dokumentieren
Schließlich kann auch eine andere Art rikanische Unternehmen, die vorrangig jedoch, inwieweit die Abläufe bei einem
der Bedrohung ein echtes Problem sein: US-amerikanischem Recht unterliegen. Anbieter standardisiert und dokumentiert
manipulierte Abrechnungsdaten. Wie Da helfen alle Beteuerungen nicht, dass sind und den Best Practices des jeweili-
misst ein Kunde also selber nach, was er man Daten auf Servern in anderen Län- gen Zertifizierers entsprechen.
verbraucht, um ein Mittel gegen offenbar dern nicht herausgibt: Klopfen FBI und ISO27001 ist ein Beispiel, das viele aus
falsche Abrechnungen zu haben?. CIA an die Türen der Firmen, werden sie eigener Erfahrung kennen dürften. Hinzu
wohl kooperieren (müssen). Das tun sie gesellt sich SOC2 C5 vom BSI, das eben-
So ein Blech schon, um nicht dauerhaft in den Fokus falls vor allem grundsätzliche Prozesse
der Behörden zu geraten. Microsoft ist nachweist. Deutlich umfangreicher ist
Eine entscheidende Frage auf dem Weg zudem in den USA etliche Male vor Ge- PCI-DSS, das entsprechend schwerer zu
in die Cloud ist die nach dem Anbieter richt baden gegangen und zur Koopera- bekommen ist.
des Vertrauens. Besonders bequem ist es, tion gezwungen worden. Es gilt wie üblich: Kann ein Anbieter et-
sich einfach bei einem der großen An- Mehr noch: Als Cloudkunde von AWS waige Zertifikate nachweisen, so bedeu-
bieter einzumieten – in Deutschland sind & Co. hat man quasi keine Chance, sich tet das in jedem Fall, dass er seine Platt-
07/2019
Sysadmin
Cloud Security
www.linux-magazin.de
71

Abbildung 2: Security Groups steuern in Clouds häufig, welche Pakete es bis zu den VMs schaffen – dazu legt der Admin erst eine Security Group an …

form entsprechend der jeweiligen Regeln Stelle der alten Instanz, was beinahe kann auch jeder Knoten einer Cloud ein
auf Herz und Nieren hat prüfen lassen ohne Downtime möglich ist, und der Netzwerkknoten sein – dass der Traffic
und er diese Prüfung bestanden hat. Auf Admin hantiert nicht mit einzelnen Sys- umgeleitet wird, ändert sich dadurch zu-
der Suche nach einem in Deutschland temen herum, deren Versionsstände er nächst nicht.
beheimateten Cloudanbieter, sind solche händisch nachhalten muss. Nun wäre es denkbar, seine Firewall-
Zertifikate ein Fingerzeig (Abbildung 1). Nützlich ist es auch, wenn sich ein Setup regeln direkt in den VMs zu hinterlegen,
in wenigen Minuten per Orchestrierung also quasi an der Cloud vorbei. Damit be-
Die Basics in der Cloud und Automation aus der Dose erneut raubt sich der Admin jedoch der Manage-
bauen lässt, sodass anschließend nur die mentwerkzeuge, die die meisten Clouds
Wer sich für einen Anbieter entschieden Daten – etwa in Form einer Datenbank API-gesteuert anbieten und die die ent-
hat, setzt im nächsten Schritt meist erst – wieder einzuspielen sind. Das ist ef- sprechenden Firewallregeln stattdessen
mal die grundsätzliche virtuelle Umge- fektive, gelebte Sicherheit auf der Höhe auf Plattform-Ebene etablieren.
bung auf, in der er seine Dienste betrei- der Zeit, die Probleme durch veraltete Im Fachjargon heißt das üblicherweise
ben möchte. Hier sind ein paar Basics zu Software auszuschließen hilft. Security Group: Jeder virtuelle Netzwerk-
beachten, die implizite Sicherheit ermög- port ist mit mindestens einer Security
lichen und auf der Annahme „Vorsicht ist Firewalls verwenden Group verbunden, und pro Gruppe legt
besser als Nachsicht“ beruhen. der Admin fest, welche Zugriffsregeln
Denn leider sieht man bis heute selbst Natürlich entbindet ein solches Setup gelten. Die Cloud setzt diese Regeln
Public-Cloud-Setups, die Admins einfach den Admin aber nicht davon, auch die dann in Netfilter-Anweisungen um und
und stur aus konventionellen Umgebun- Basics in Sachen Sicherheit im Fokus zu aktiviert sie an der richten Stelle im (phy-
gen in die Cloud kopiert haben. Das ist behalten. Wie auf physischen Systemen sischen) Underlay.
nicht verwerflich, lässt den größten Teil auch ist es in Clouds eine gute Idee, das Admins tun gut daran, einmal eine funk-
der Vorteile aber außen vor, die Nutzer eigene Setup vor Angreifern zu schützen, tionale Security-Group-Konfiguration für
beim Umstieg in die Cloud eigentlich mit- beispielsweise durch die Verwendung ihre virtuellen Umgebungen zu bauen
nehmen wollen. von Firewalls. Dazu sollte
Grundsätzlich gilt: Virtuelle Umgebun- sich der Admin allerdings vor
gen in der Cloud haben im Idealfall so Augen halten, dass Netzwerke
wenige persistente Daten wie nötig. Das in Clouds etwas anders funkti-
erreicht der Admin einerseits durch ei- onieren als in konventionellen
nen hohen Automationsgrad – bevorzugt Setups. Denn in Clouds sind
durch Orchestrierung, die jede moderne die VMs oder Container nie
Cloud anbietet. Und andererseits durch direkt an das Internet ange-
die konsequente Umsetzung einer funk- schlossen.
tionalen CI/CD-Umgebung, die virtuelle Um das Ziel zentraler Ver-
Maschinen oder Container völlig automa- waltbarkeit zu erreichen und
tisch erstellen kann. ressourcenschonend vorzu-
Konkret bedeutet das: Ist bei einer VM gehen, existieren in Clouds
oder einem Container in einer Cloud ein stattdessen die so genannten
Update durchzuführen, gibt es idealer- Network Nodes, über die
weise einen Automatismus, der gleich Netzwerkverkehr umgelei-
eine neue VM erzeugt oder einen neuen tet wird. Je nach Software- Abbildung 3: … und versorgt sie hinterher mit konkreten Regeln
Container baut. Der tritt dann an die Defined-Networking-Spielart im Hinblick auf die erlaubten Verbindungen.
07/2019
Sysadmin

verschiedene weitere Funktionen, die das


Steuern und Blockieren von Netzwerk-
Cloud Security

verkehr ermöglichen. Die Leistung von


Kaspersky besteht hier wohl eher in der
Bündelung verschiedener Komponenten
zu einem fertigen Produkt, das sich im
Stil einer Appliance schnell ausrollen und
nutzen lässt.
www.linux-magazin.de

72
Trotzdem ist bei solchen Angeboten Vor-
sicht geboten, denn oft unterscheidet
sich die Definition der Cloud bei solchen
Anbietern von der Definition, von der
etwa Amazon ausgeht. Bei Kaspersky
© Sensors Tech

etwa kommt Open Stack, die am weites-


ten verbreitete Open-Source-Lösung für
Abbildung 4: Kali Linux gilt als Hacker-Distribution, ist in Wahrheit aber ein effizientes Pen-Testing-Tool. Cloudumgebungen, gar nicht vor. Hier
ist die Annahme, dass die Private Cloud
und diese anschließend in einem Temp- ihres Cloudproviders angewiesen. Wenn des Kunden auf Produkten wie VMware
late für den Orchestrierer der jeweiligen der eine SDN-Lösung wie Open Contrail basiert und als Public Cloud AWS, Azure
Plattform abzubilden (Abbildungen 2 einsetzt, bietet sich unter Umständen die & Co. zum Einsatz kommen.
und 3). Denn so lassen sich die Regeln Möglichkeit, virtuelle Netzwerkfunkti- McAffee bietet mit seinem Public-Cloud-
jederzeit recyceln und sogar auch von onen (VNF) in der eigenen virtuellen Server Security immerhin die Möglich-
außen modifizieren. Umgebung zu verwenden. In der Praxis keit, sich per Connector-Modul in Open
Ein weiterer Vorteil: Schafft ein Angrei- hinterlegt der Nutzer dann ein Betriebs- Stack einzuklinken und dort Features wie
fer es doch – auf welchem Wege auch system-Abbild mit Suricata im Imagespei- Intrusion Detection anzubieten.
immer – in die virtuelle Umgebung ein- cher der Cloud und startet anschließend Allerdings: Wenn die Plattform VNF-
zubrechen, greifen die gesetzten Firewall- eine VNF-Instanz auf Basis eben jenes Features ab Werk beherrscht, lassen sich
regeln noch immer. Der Angreifer kann Suricata-Abbilds. jene eben auch händisch ohne den Um-
also nicht etwa den Port 22 nach au- Wie VNF konkret umgesetzt sind, un- weg einer proprietären Lösung nutzen.
ßen durch Löschen der entsprechenden terscheidet sich zwischen den einzelnen Ob der Kunde einem Hersteller letztlich
Netfilter-Regel öffnen, um sich per SSH SDN-Implementationen stark. Gemein- Geld dafür zahlen möchte, weniger Ar-
selbst ins System zu lassen. sam ist hingegen fast allen Umgebungen, beit bei der Implementierung der Cloud
Wie Security Groups sich in AWS nutzen dass der direkte Zugriff auf den virtuel- zu haben, entscheidet er für sich selbst.
lassen, erläutert [1]. Für Open Stack fin- len Router der Pakete nicht möglich ist. Eine technische Notwendigkeit dafür gibt
det sich eine Anleitung unter [2]. Bietet der Cloudprovider also keine VNF- es jedenfalls nicht.
Funktionalität, guckt der Kunde in die
Scherereien mit IDS sprichwörtliche Röhre. Verschlüsselte Volumes
Der eine oder andere Admin ist aus sei- Security Appliances Einen kleinen Beitrag zum Thema Daten-
nen konventionellen Setups womöglich sicherheit leisten immerhin die bereits
die Arbeit mit Intrusion Detection Sys- Vorsicht ist auch geboten, bevor der erwähnten verschlüsselten Volumes.
tems gewöhnt. Diese lassen sich aus Kunde eine Appliance für den Betrieb Snapshots von Volumes lassen sich in
den erwähnten Gründen in einer Cloud in der Cloud kauft, die Funktionen wie den meisten Cloudumgebungen ebenfalls
allerdings meist nicht ad hoc einsetzen. IDS angeblich out of the Box enthält. verschlüsseln, sodass die dort gelagerten
In einem Setup mit echtem Blech konfi- Prominent vertreten auf diesem Markt ist Daten gegen die Blicke oder Finger Drit-
gurieren Admins sie meist so, dass ein Kaspersky, das sein Hybrid-Cloud-Secu- ter geschützt sind.
Port am Switch den ganzen Traffic aller rity-Produkt gerne unters Volk bringen Beim tatsächlichen Volume, das gerade in
anderen Ports gespiegelt bekommt und möchte. Prinzipiell liest sich die Pro- Benutzung ist, ist das aus den beschrie-
ihn auswertet. Der Traffic geht also nicht duktbeschreibung gut: Wer ein hybrides benen Gründen nicht so leicht: Im laufen-
durch das IDS hindurch, bevor er die ei- Cloudkonzept verfolge, solle mit dem Pro- den Betrieb muss das Volume schließlich
gentlichen Zielsysteme erreicht. dukt in der Lage sein, die eigene Cloud in aller Regel beschreibbar in das Datei-
Ein solches Setup lässt sich in Clouds we- ebenso wie die eigenen Daten in einer system eingehängt sein, und das geht nur
gen der erwähnten Network Nodes nicht großen Public Cloud gut und zuverlässig entschlüsselt.
realisieren, denn auf jene haben die Nut- gegen Angriffe abzusichern. Übrigens: Wer Backups seiner Umgebung
zer im Regelfall keinen Zugriff. Möchten Dazu enthält das konkrete Kaspersky- in einem Objektspeicher ablegt, sei es
Nutzer trotzdem in einer Cloud ein IDS Produkt im Beispiel etwa ein IDS und ein Amazons S3 oder ein privater Speicher,
betreiben, sind sie auf die Kooperation IPS (Intrusion Prevention System) sowie etwa auf der Basis von Ceph, der tut
07/2019
Sysadmin
gut daran, die Verschlüsselungsfunktion
seiner Backup-Software zu nutzen. Fast

Cloud Security
jedes moderne Backup-Programm bietet
entsprechende Features, doch bisher sind
sich noch zu wenige Admins dieser Tat-
sache bewusst.

Vorsicht bei Pentests

www.linux-magazin.de
73

Wie bereits erwähnt, lassen sich bei ei-


ner Cloud mehrere Ebenen im Hinblick
auf Security unter die Lupe nehmen. Da
sind einerseits das blanke Blech und die
fest zur Cloud gehörenden APIs – hierfür
trägt der Anbieter die Verantwortung. Auf
dieser Infrastruktur laufen die virtuellen

© Giant Swarm
Maschinen der Kunden, für die jene zu-
ständig sind. Üblicherweise ist als Über-
gabepunkt die einzelne VM und dort im Abbildung 5: Mit Prometheus lassen sich Metrikdaten etwa von laufenden Kubernetes-Clustern aufzeichnen –
Detail deren Linux-Kernel definiert. so werden Rechnungsdaten prüfbar.
Wer sich ein Setup gebaut hat und es auf
Herz und Nieren testen oder nachsehen Ferner – aber das versteht sich fast von Die Antwort darauf ist so simpel wie frus-
will, wie es in Sachen Security um eine selbst – ist es natürlich untersagt, Kali trierend: Effektiv gelingt das nur, wenn
Cloud bestellt ist, der kann dafür grund- Linux zu anderen Zwecken einzusetzen, Leute ihre eigenen Messungen anstellen
sätzlich Kali Linux nutzen. Die Distribu- als für die eigene Umgebung einen Pe- und sie regelmäßig mit den Zahlen des
tion hat sich in den vergangenen Jahren netration Test durchzuführen. Nutzer tun Anbieters vergleichen. Leichte Unter-
einen Namen als auf Pentests speziali- gut daran, die Grundregeln der Cloudan- schiede werden sich nicht vermeiden
siertes System gemacht. bieter zu befolgen, denn im schlimmsten lassen, doch grobe Differenzen fallen
Wer Kali Linux auf Hardware betreiben Fall war es das ansonsten mit dem jewei- schnell auf und erlauben es, Rückfragen
möchte, braucht dafür in der Regel ein ligen Account in der Cloud (Abbildung beim Anbieter zu stellen.
eher potentes System, das er für die- 4). Es gilt aber trotzdem: Wer sich an Leider kann nur nachmessen, wer eine
sen Zweck abstellt. Das widerspricht die von dem Anbieter aufgestellten Re- Software wie Prometheus oder Influx
allerdings dem Konzept der Cloud, die geln hält, findet in Kali Linux ein poten- DB nutzt, die Zeitreihendaten verarbei-
insbesondere den Kunden ja von jeder tes Werkzeug. ten und für lange Zeit speichern kann.
Notwendigkeit befreien soll, Hardware Zusätzlich braucht es Software, die auf
vorzuhalten. Es hat sich deshalb in den Das leidige Thema den Zielsystemen jene Metrikdaten ein-
vergangenen Jahren als ein Konzept eta- sammelt – beides zusammen verursacht
Abrechnung
bliert, Penetration Tests in VMs in Clouds einigen administrativen Aufwand.
zu betreiben. Ein letztes Bedrohungsszenario in der Immerhin: Abbilder und Container mit
Phasenweise haben das jedoch so viele Cloud dreht sich weniger um eine kon- Prometheus & Co. existieren und lassen
Admins getan, dass die großen Public krete technische Bedrohung und eher um sich in allen Umgebungen schnell in Be-
Clouds beinahe wie Botnetze daher- eine kaufmännische: Wie verhindert der trieb nehmen. Das Ausrollen des Node
kamen – Kali Linux etwa fährt diverse Kunde einer Cloud, dass er bei der Ab- Exporter von Prometheus oder von Tele-
(schwere) Angriffe gegen die Infrastruk- rechnung über den Tisch gezogen wird? graf aus dem TICK-Stack geht ebenfalls
tur. Gerät eine Kali-Linux-Instanz in fal- Alle Anbieter versprechen schließlich die leicht von der Hand. Der Mühe Lohn ist
sche Hände, lässt sich damit, kombiniert „minutengenaue Abrechnung“ und die eine verlässliche Datenbasis, die Unge-
mit der Power virtueller Instanzen, in der Verrechnung ausschließlich der genutz- reimtheiten schnell aufzudecken erlaubt
Cloud einiger Unsinn anstellen. ten Ressourcen. (Abbildung 5). (jcb) n
Aus diesem Grund geben alle größeren Der Kunde ist zumindest in der Stan-
Public-Cloud-Anbieter strikt vor, ob und dardsituation allerdings darauf angewie-
unter welchen Umständen Kali Linux in sen, den auf der Rechnung angegebenen Infos
einer VM auf einer Plattform betrieben Zahlen zu glauben. Denn an die Systeme [1] Security Groups in AWS: [https://docs.
werden darf. Für AWS beispielsweise gilt, im Inneren der Cloud, die etwaige Nutz- aws.amazon.com/de_de/AWSEC2/latest/
dass der Passwort-basierte Login für VMs daten erheben, kommt er in aller Regel UserGuide/using‑network‑security.html]
mit Kali Linux ausgeschaltet sein muss, nicht heran. Wie schützt er sich an dieser [2] Security Groups in Open Stack:
sodass nur der Login per SSH-Schlüssel Stelle effektiv und effizient gegen Miss- [https://docs.openstack.org/nova/stein/
in eine VM möglich ist. brauch der Abrechnungshoheit? admin/security‑groups.html]
07/2019
Forum

Bundeskartellamt prüft Vergleichsportale

Vergleichsweise
Recht
www.linux-magazin.de

74
Das deutsche Bundeskartellamt hat über einen Zeitraum von 18 Monaten deutsche Vergleichsportale unter-
sucht. Der Präsident der Wettbewerbsbehörde, Andreas Mundt, warnt Verbraucher vor Tricks der Portale und
fordert mehr Rechte für sein Haus. Ulrich Bantle

Portalen sowie weiteren interessierten


Kreisen die Gelegenheit gegeben, Stel-
lung zu nehmen. Der vorliegende Bericht
der Sektoruntersuchung Vergleichspor-
tale [1] berücksichtigt diese insgesamt
33 Stellungnahmen.

Verflechtungen
Als Problemfelder nennt der Bericht die
Themenkomplexe Kooperationen, Ver-
flechtungen, Vorauswahl, Position 0,
Ranking, sonstige Beeinflussungsfakto-
ren und Nutzerbewertungen. So fielen
in allen Branchen zwischen den unter-
© Bundeskartellamt

suchten Portalen zahlreiche horizontale


Kooperationen und Verflechtungen auf.
Die bestanden laut dem Bericht etwa da-
rin, dass vermeintlich eigenständige Por-
Das Kartellamt hatte mit der Untersu- ten für derartige Probleme keine effektive tale tatsächlich auf die Datenbasis oder
chung der Vergleichsportale im Oktober Lösung.“ Dagegen, so Mundt, könnte das den Tarifrechner eines anderen Portals
2017 begonnen. Durch eine Erweiterung Bundeskartellamt mit punktuell erweiter- zurückgreifen. Für den Verbraucher sei
der Kompetenzen der Behörde auf ver- ten Kompetenzen das bereits geltende all- dies irreführend. Er sehe den bei einem
braucherrechtliche Themen sind solche gemeine Verbraucherrecht in konkreten Portal ermittelten Preis beim anderen be-
Untersuchungen legitimiert. Einzelfällen zügig durchsetzen. stätigt, ohne dass für ihn die Verbindung
Präsident Andreas Mundt mahnt zusam- zwischen den beiden erkennbar sei.
menfassend die Verbraucher trotz nicht Methode
von der Hand zu weisender Vorteile von Darstellung der Ergebnisse
Vergleichsportalen zur Vorsicht: „Wir Die Ermittlungen der Sektoruntersuchung
haben auch verbraucherunfreundliche erfolgten zunächst in zwei Stufen. Die Haupteinnahmequelle der befragten
Tricks mancher Portale aufgezeigt. Ver- erste bestand aus einer breit angelegten Vergleichsportale sind die von den An-
braucher sollten darauf achten, wie ein Strukturbefragung von Vergleichsportalen bietern für Vermittlungen gezahlten Pro-
Ranking tatsächlich zustande kommt oder und der Auswertung der Antworten von visionen, die – außer im Flugbereich –
ob in den Vergleich auch möglichst viele 129 Portalen. Darauf befragte das Amt die branchenübergreifend rund 90 Prozent
Angebote eingeflossen sind.“ Zudem, so für einzelne Branchen jeweils besonders der gesamten Einnahmen ausmachen.
Mundt, sollten Verbraucher sich nicht un- relevanten Portale umfassend und detail- Entsprechend naheliegend ist es, dass
ter Druck setzen lassen von angeblichen liert mit Hilfe acht branchenspezifischer zahlende Anbieter in der Darstellung der
Knappheiten oder Exklusivangeboten, die Fragebögen, die per Auskunftsbeschluss Ergebnisse bevorzugt sind. Es habe sich
es vielleicht nicht gäbe. von insgesamt 36 Vergleichsportalen zu bei den Ermittlungen gezeigt, dass ins-
Angesichts dieser teils festgestellten Män- beantworten waren. besondere im Bereich Energie beim Erst-
gel sähe Mundt gerne mehr rechtliche Die Erkenntnisse daraus hat das Amt ranking teilweise nur Angebote angezeigt
Kompetenzen auf Seiten seines Amtes: Ende 2018 in einem Konsultationspapier und damit vorausgewählt werden, für die
„Zivilklagen und Regulierung allein bie- zusammengefasst und den betroffenen das Portal Provisionen erhält, heißt es im
07/2019
Forum
Bericht. Der Verbraucher könne so an-
dere verfügbare und eventuell attraktive
Angebote zunächst nicht sehen.

Recht
Den Portalen sei zugutezuhalten, dass
die Vorauswahl teilweise auch Angebote
ausschließe, die für Verbraucher nachtei-
lig sein können. Der Bericht merkt an,
dass die Gründe für die Vorauswahl und

www.linux-magazin.de
75
die Möglichkeiten, sie aufzuheben, nicht
immer deutlich erkennbar seien.

© Bundeskartellamt
Auf einigen Portalen seien einzelne An-
gebote als „Position 0“ noch vor dem
Erstranking vorangestellt und hervorge-
hoben, hat die Untersuchung ergeben. Abbildung 1: Konzentrierter Markt bei den Enrgie-Portalen.
Diese Position sei erfolgversprechend:
Immerhin rund ein Viertel der Kunden, haben die Ermittlungen ergeben. Auch was sich in einer hohen Zahl von Visits
die hier einen Vertrag abschließen, ent- hier sei ein Graubereich erkennbar, weil und Vermittlungen niederschlage. Positiv
scheiden sich für ein solches Angebot, oft nicht deutlich sei, worin diese Exklu- hervorzuheben sei, dass trotz zahlreicher
heißt es im Bericht. sivität bestehe. Zudem fiel dem Amt auf, Verflechtungen zwischen den im Reisebe-
Das Erreichen der Position 0 variiere. dass eine vertragliche Vereinbarung auf reich tätigen Portalen die Konzentration
Während die Hervorhebung bei Flügen Exklusivität mit dem Anbieter fehle. dort tendenziell geringer sei als in ande-
und Versicherungen überwiegend auf ren Branchen. Im Hotelbereich seien be-
einer qualitativen Bewertung durch das Nutzerbewertungen sonders die Gruppen Booking, HRS und
Portal beruhe, erfolge sie in Branchen wie Expedia relevant, im Flugbereich Lastmi-
Energie und Telekommunikation über- Bei den Nutzerbewertungen konnten die nute.de, Opodo oder Fluege.de.
wiegend aufgrund eines zusätzlichen Vergleichsportale einen einigermaßen gu- Mit den Meta-Searchern, die Angebote
Entgelts der Anbieter. Bei einigen Porta- ten Eindruck hinterlassen. Die befragten verschiedener Reiseportale vergleichen,
len sei zu bemängeln gewesen, dass diese Portale verwendeten fast ausschließlich habe sich zudem seit einigen Jahren ein
Hervorhebungen nicht klar als Werbung geschlossene Bewertungssysteme, hat neues Geschäftsmodell entwickelt. Hier
gekennzeichnet waren. das Amt ermittelt. Damit seien nur echte seien Trivago (Expedia), Google, Tripad-
Kunden des Portals in der Lage, Bewer- visor, Check24 sowie die Booking-Gruppe
Beeinflussungsfaktoren tungen abzugeben. Das Risiko gefälsch- mit Kayak, Swoodo und Momondo von
ter oder manipulierter Bewertungen sei Bedeutung.
Neben dem Ranking setzen Portale wei- damit gering. Dennoch gäbe es auch hier
tere Mittel ein, um den Verbraucher zu Verzerrungen, weil etwa abgewiesene Rechtliche Einordnung
einer Buchung oder Bestellung zu veran- Kreditkunden im geschlossenen System
lassen. Besonders im Reisebereich seien keine Bewertungen abgeben können, ob- Von der rechtlichen Seite aus betrachtet
zahlreiche Hinweise auf eine begrenzte gleich diese für andere Nutzer auch von seien in einigen Verhaltensweisen der
Verfügbarkeit oder besonders große Interesse wären, merkt der Bericht an. untersuchten Portale Lauterkeits-Rechts-
Nachfrage für einzelne Hotels oder stei- verstöße aufgefallen, die zumeist in ei-
gende Preise bei Flügen typisch, berich- Konzentration nem Transparenzpflicht-Verstoß, in einer
tet das Kartellamt. Auch hier sei für den Irreführung oder in verdeckter Werbung
Verbraucher oft nicht erkennbar, ob sich Trotz der Vielzahl der in allen Branchen anzusiedeln seien, teilt das Amt mit. Dies
diese Hinweise tatsächlich auf seine kon- existierenden Portale hat das Bundes- betreffe den Einfluss der Provisionen auf
krete Suche beziehen und welche Bedeu- kartellamt insbesondere dort, wo Ver- das Ranking, gelte aber auch für unwahre
tung sie dafür hätten. gleichsportale schon lange tätig sind, oder täuschungsgeeignete Knappheits-
Zu den weiteren Beeinflussungsfaktoren, eine Konzentration des Marktes auf oder Exklusivitätshinweise. Das Ausmaß
die in vielen Branchen aufgefallen seien, wenige große Portale festgestellt (Abbil- falle je nach Branche und teils auch je
zähle die Zusage von Vorteilen wie ei- dung 1). In den Bereichen Energie und nach Portal sehr unterschiedlich aus. n
nem Cashback oder einem Bestpreis-Aus- Telekommunikation dominieren Check24
gleich. Das Bundeskartellamt mahnt da- und Verivox, im Bereich Versicherungen
bei zur Vorsicht, weil Verbraucher diese ist Check24 das führende Portal, heißt es Infos
Vorteile wegen der umfangreichen zu im Bericht. Bei Krediten spielten neben [1] Abschlussbericht der Sektoruntersuchung
erfüllenden Bedingungen dafür gar nicht Check24 auch Finanzcheck, Smava und Vergleichsportale: [https://www.bundes-
einlösen können oder wollen. Verivox eine relevante Rolle. kartellamt.de/SharedDocs/Publikation/DE/
Ein weiteres Mittel sei der Hinweise auf Im Reisebereich sei die Nutzung von Sektoruntersuchungen/Sektoruntersu-
die Exklusivität bestimmter Angebote, Vergleichsportalen besonders beliebt, chung_Vergleichsportale_Bericht.pdf]
07/2019
Forum

Ein Buch über Software Defined Networking und eines über neuronale Netze

Tux liest
Bücher
www.linux-magazin.de

76
Netzwerke aus verschiedener Perspektive – einmal als digitale Technik für Kommunikationsnetze, einmal als
Verfahren des maschinellen Lernens. Jens-Christoph Brendel

Als das Internetprotokoll IPv4 anno 1981 Es trennt die Schichten 1 bis 4 des OSI- Aktionen besprechen die Autoren im Text.
entstand, ahnte noch niemand etwas Modells nicht, sondern verarbeitet sie in So wird der Leser von einem sehr simplen
von Video- oder Audio-Streaming, von einem Rutsch und plant und optimiert Neuronen-Modell über einfache einlagige
Voice-over-IP, von Online-Games, von den Weg der Pakete durchs Netz nicht Netze hin zu mehrlagigen Netzen mit ver-
Industrie 4.0 oder auch von Big Data. All von Station zu Station, sondern steuert schiedenen Lernalgorithmen und weiter
diese neuen Anwendungen haben die sie zentral. beispielsweise zu Convolutional Neural
Ansprüche an das Internet hinsichtlich Das alles untersuchen die folgenden Networks geführt.
Performance, Verfügbarkeit, Qualität und Kapitel im Detail: Der Autor stellt das Die verschiedenen Lernverfahren greifen
Flexibilität enorm erhöht. Open-Flow-Protokoll vor, bespricht das die Autoren gegen Ende des Buches noch
Ein Ansatz, diesem ständig steigenden North Interface, den Zugang zum SDN- einmal explizit mit einem eigenen Kapitel
Erwartungsdruck zu begegnen, ist das Controller, erläutert, wie sich der Control- auf. Alle Erklärungen sind gut verständ-
Software Defined Networking, das als ler durch Topology Discovery ein Bild des lich und reich illustriert. Zudem verhelfen
Netzwerktechnik ebenso wie als Platt- kompletten Netzes verschafft, und geht die Codebeispiele, die auf einschlägige
form zur Bereitstellung von Diensten und auf die Abläufe im Controller ein. Bibliotheken von Num Py bis Tensorflow
für die Virtualisierung eine neue Netzar- Weitere Kapitel widmen sich der Virtuali- zurückgreifen, zu Aha-Effekten.
chitektur etabliert. Das Buch „SDN“ von sierung und Vernetzung im Cloud-Re- Ein eigenes Kapitel widmet sich dem
Gerd Siegmund erläutert einleitend die chenzentrum, der Network Function biologischen Vorbild der neuronalen
grundsätzlichen SDN-Funktionen wie Virtualization (NFV) als Ergänzung zu Netze, der Signalverarbeitung im zen-
die Trennung von Data und Control Plane SDN, dem Traffic Engineering oder Tera tralen Nervensystem und im Gehirn.
oder öffentliche und private Netze. Dann Stream, der vereinheitlichten IP-Trans- Detailliert schildern die Autoren die neu-
kommt kurz die Funktionsweise des portplattform der Telekom, dem Unter- rophysiologischen Grundlagen. Auch der
klassischen Internets zur Sprache, um bau vieler virtualisierter Dienste. Geschichte der neuronalen Netze, die
den Unterschied zu Software-definierten Alles im allen glückt dem Autor eine ver- bereits in den 1940er Jahren begann,
Netzen zu verdeutlichen. ständliche und umfassende Einführung gönnen sie ein eigenes Kapitel, das die
Dem dezentralen, sich selbst organisie- in das Thema SDN, die sich auch zum wichtigsten Meilensteine bis in unsere
renden Ansatz mit IP-Routing im WAN Nachschlagen eignet. Zeit skizziert. Daneben kommt die Ein-
und einem Layer-2-Transportnetz im bettung des maschinellen Lernens in den
LAN, wie ihn das klassische Internet Schritt für Schritt übergeordneten Data-Mining-Prozess in
verfolgt – das aber die Ressourcenaus- einem kurzen Kapitel zur Sprache.
lastung kaum optimieren kann, viele Viele IT-Bücher setzen ein erhebliches Insgesamt erhält der Leser eine rundum
unterschiedliche Protokolle braucht Vorwissen voraus oder schwellen zu gelungene, recht gründliche und gut ver-
und dessen Komponenten bei höheren 1000-Seiten-Wälzern an – den Autoren ständliche Einführung ins maschinelle
Übertragungsgeschwindigkeiten an die von „Neuronale Netze programmieren Lernen mit neuronalen Netzen, die durch
Grenzen ihrer Reaktionsfähigkeit stoßen mit Python“ gelingt ein guter Kompro- zahlreiche Codebeispiele immer nah an
–, steht das Design von SDN gegenüber. miss: Erste Schritte mit Python sollte der der Praxis bleibt. n
Leser hinter sich haben, ein wenig Mathe
Info aus Schulzeiten sollte reaktivierbar sein, Info
Gerd Siegmund: sonst sind nur wenige Vorbedingungen Roland Schwaiger, Joachim
SDN zu erfüllen. Steinwendner:
VDE-Verlag, 2018 Die Erklärung der Techniken für neuro- Neuronale Netze program-
480 Seiten nale Netze beginnt mit sehr einfachen Bei- mieren mit Python
50 Euro Rheinwerk, 2019
spielen. Die kleinen Python-Programme,
ISBN: 978-3-8007-4511-1 440 Seiten, 30 Euro
die jeden Erkenntnisschritt begleiten, sind ISBN: 978-3-8362-6142-5
ausreichend kommentiert. Kompliziertere
07/2019
Know-how
Schwachstellen bei der Inplementierung von E-Mail-Signaturen

Insecurity Bulletin
Unterschriftenfälscher

www.linux-magazin.de
77
Sicherheitsforscher finden alarmierende Schwächen bei der Auswertung von Signaturen durch E-Mail-Cli-
ents. Die Mehrzahl der Programme fällt bei ihrem Test durch. Mark Vogelsberger

Bis vor Kurzem ließen sich digitale Si- eine unsignierte E-Mail
gnaturen in vielen E-Mail-Programmen als signiert anzuzei-
ganz einfach fälschen. Das fanden Sicher- gen. Er schickt etwa
heitsforscher der Fachhochschule Müns- eine gefälschte E-Mail
ter und der Ruhr-Universität Bochum mit ungültiger Signatur
heraus, die verschiedene Schwachstellen zusammen mit einer
in den Implementierungen der weitver- zweiten mit gültiger
breiteten E-Mail-Verschlüsselungsstan- Signatur an sein Opfer.
dards S/MIME und Open PGP entdeckt Viele der getesteten E-
[1] haben. Mail-Programme zei-
S/MIME steht für Secure/Multipurpose gen dann die gefälschte
Internet Mail Extensions. Open PGP ist Nachricht an, prüfen
ein standardisiertes Datenformat für ver- aber die Signatur der
schlüsselte und digital signierte Daten ba- anderen Mail.
sierend auf PGP (Pretty Good Privacy). Hintergrund dieser At-
Die Forscher haben das Bundesamt für Si- tacke ist, dass sich bei

© gajus, 123RF
cherheit in der Informationstechnik (BSI) S/MIME-basierten Sig-
über die Schwachstellen im Rahmen ei- naturen der Inhalt ei-
nes Coordinated-Vulnerability-Disclosure- ner Nachricht auf zwei
Prozesses informiert [2]. Arten in die E-Mail ein-
Das von ihnen entdeckte Angriffsszenario fügen lässt: Direkt in der Cryptographic Unter Linux sind Evolution und Trojita
zielt auf S/MIME- wie auch PGP-basierte Message Syntax (CMS) als so genannter angreifbar. Android ist durch K-9 Mail
Signaturen von E-Mails ab. Die sollen E-Content oder als separater MIME-Teil. via Open Keychain, R2Mail2, Maildroid
eigentlich dem Empfänger garantieren, Die Forscher fanden nun heraus, dass mit Flipdog-Plugin und mit der App Nine
dass die Mail vom angegebenen Absen- viele E-Mail-Programme diese beiden Ar- verwundbar. Ebenso sind die Web-basier-
der kommt (Authentizitäts-Prüfung) und ten nicht korrekt umsetzen und so die ten E-Mail-Programme Roundcube (mit
nicht bei der Übertragung modifiziert beschriebene Attacke ermöglichen. Enigma oder RC_SMIME) und Mailpile
wurde (Integritätsprüfung). (mit GNU PG) angreifbar.
Doch die beschriebenen Attacken rühren Fehler auch bei PGP Ein Hauptgrund für die Schwachstellen
nicht etwa von einer Schwachstelle in liegt beim Einsatz von HTML in E-Mails.
den verwendeten kryptografischen Ver- Open-PGP-Systeme verwenden oftmals Daher empfiehlt das BSI unter anderem,
fahren her, sondern hängen vielmehr mit GNU PG, um den Open-PGP-Standard aktive Inhalte in E-Mail-Clients – dazu
der Implementation in diversen E-Mail- umzusetzen. Auch solche Systeme er- gehört HTML – zu deaktivieren. (jcb) n
Programmen zusammen. lauben es einem Angreifer, Signaturen
Die Sicherheitsforscher nutzen für die zu fälschen. Ist beispielsweise nur ein
Attacke verschiedene Angriffsmethoden Teil einer Open-PGP-Mail signiert, reicht Infos
aus. Von 22 getesteten S/MIME-E-Mail- das vielen Mailern schon aus. So kann [1] „Spoofing OpenPGP and S/MIME Signatures
Programmen konnten sie damit 15 erfolg- ein Angreifer eine eigentlich unsignierte in E-Mails“: [https://github.com/RUB-NDS/
reich angreifen. Bei den 20 PGP-Systemen Nachricht als signiert darstellen lassen. Johnny-You-Are-Fired/blob/master/paper/
ließ sich die Signaturschwachstelle bei 14 Via I-Frames lässt sich dieser eingebettete johnny-fired.pdf]
ausnutzen. Inhalt auch verbergen. [2] Meldung des BSI:
Ein Angriff gegen S/MIME-Systeme grün- Die Forscher haben eine ganze Reihe [https://www.bsi.bund.de/DE/Presse/
det auf dem Wiederverwenden von Sig- von E-Mail-Programmen gefunden, die Pressemitteilungen/Presse2019/
naturen. Damit gelingt es dem Angreifer, für diese Sicherheitslücken anfällig sind. Signaturfaelschungen-300419.html]
07/2019
Programmieren

Eclipse-IDE vom Orion-Server

Sternzeichen Entwickler
Eclipse Orion
www.linux-magazin.de

78
Die Entwicklungsumgebung Eclipse lässt an sich keine Wünsche offen. Leider ist das umfangreiche Werkzeug-
paket für Arbeitsgruppen nur recht schwer identisch auf jedem Rechner zu konfigurieren und zu installieren.
Das Server-basierte Eclipse Orion verspricht Abhilfe. Bernhard Bablok

weiteren Unterordner namens »orion«


und sollte damit beim Entpacken keinen
Schaden anrichten, aber es ist nie sinn-
voll, Installationen zu vermischen.
Die Downloadseite bietet neben dem
Serverpaket noch missverständlich be-
nannte »Client«-Komponenten. Zum
einen handelt es sich um eine Node.js-
basierte Serverversion. Die entspricht
funktional nicht der Java-basierten Vari-
ante, sie läuft standardmäßig zudem nur
im Single-User-Modus. Damit eignet sie
sich eher für die Installation auf einem
© Dennis van de Water, 123RF

Client, was den Namen erklärt.


Ebenfalls im Client-Bereich wartet der
Editor mit den Language-Tools, die meh-
rere Programmiersprachen unterstützen.
Diese Javascript-Komponenten kann der
Admin in eigene Webanwendungen ein-
Das Versprechen von Orion ist schlicht: Der Admin entpackt lediglich das Zip- betten, die dann aber nichts mehr mit
Ein Admin installiert es auf einem Fir- Archiv an geeigneter Stelle, etwa unter dem Orion-Server zu tun haben.
menserver, die Entwickler brauchen dann »/usr/local/lib« – das war’s. Der oberste
nur einen halbwegs aktuellen Browser, Ordner im Archiv heißt »eclipse«. Exis- Demo-Installation
um damit zu arbeiten. Wie der Admin tiert er bereits, sollte der Admin über ei-
Orion sinnvoll einrichtet, zeigen die fol- nen alternativen Pfad nachdenken. Der Wer für den ersten Test komplett auf eine
genden Abschnitte. »eclipse«-Ordner enthält zwar nur einen Orion-Installation verzichten möchte, fin-

Installation
Die Installation klappt auf einem beliebi-
gen Linux-Server. Voraussetzung ist eine
Java-Runtime ab Version 1.6. Wer Orion
nur ausprobieren möchte, darf das Paket
auch lokal installieren. Das dürfte die
bevorzugte Variante für Laptop-Nutzer
ohne stabilen Netzzugang sein.
Das Paket »eclipse-orion-19.0.0S1-linux.
gtk.x86_64.zip« wartet unter [1]. Zu Re-
daktionsschluss aktuell war die Version
19. Das Paket schlägt mit 69 MByte zu
Buche, entpackt sind es 73 MByte, was
den Angaben auf der Downloadseite („30
MByte“) widerspricht. Abbildung 1: Die Einstiegsseite des Orion-Demo-Servers.
07/2019
Programmieren
Eclipse Orion
www.linux-magazin.de
79

Abbildung 2: Die Git-Sicht auf ein Projekt: Auch Git ist nahtlos in die Eclipse-Oberfläche integriert.

det unter [2] eine voll funktionsfähige sollten also keine wichtigen oder gar ver- lation/eclipse/orion« ein. Dann steuert er
Demo-Installation (Abbildung 1). Über traulichen Daten dort ablegen. den Server via Konsole mit den üblichen
den Button »Try it Now« meldet der Nut- Den lokalen Orion-Server startet indes OSGI-Kommandos [3].
zer Interesse an, einloggen kann er sich das Kommando »orion«. Der Admin gibt Nach dem Start lauscht der Server
dann über »Sign In« (oben rechts). Tester es im Unterverzeichnis »Pfad_zur_Instal- schließlich auf dem Port 8080. Der lässt
07/2019
Programmieren

läuft die Site unter einer neuen Subdo-


main (bei einer lokalen Installation ist es
Eclipse Orion

[http://127.0.0.2:8080]). Das Anlegen


einer Site ergibt natürlich nur bei Web-
projekten Sinn.

Jenseits von Orion


www.linux-magazin.de

80
Weitere Details zu Orion liefert die Do-
kumentation unter [4]. Beim Lesen fällt
manchmal auf, dass sie veraltet ist, etwa
wenn sie Java 1.6 als zwingende Voraus-
setzung nennt. Das heißt aber nicht, dass
Orion ein veraltetes Projekt ist, im Gegen-
Abbildung 3: Die Blame-Sicht zeigt, wer wann welche Zeilen ergänzt hat. teil: Es wird aktiv entwickelt.
Unter der Obhut der Eclipse Foundation
sich bei Bedarf innerhalb der Datei erreicht der Entwickler über das Zahn- entsteht auch das Projekt Eclipse Che
»orion.ini« ändern, genau wie der Spei- radsymbol ganz links. [5]. Che verwendete zeitweise Orion
cherort der Nutzerdaten. Diese Daten als Editor. Es geht noch weiter, was die
landen standardmäßig im Unterordner Git-Integration Entwicklungsumgebung im Netz angeht.
»serverworkspace« des »orion«-Verzeich- Während Orion nur ein einfaches URL-
nisses. Verantwortungsvolle Admins Orion ist eng mit Git verzahnt. Das be- Mapping für Tests bietet, stellt Che den
trennen jedoch die Verzeichnisse zur trifft nicht nur den Import kompletter Teams eine komplette Umgebung für die
Software-Installation von denen mit Be- Projekte, sondern auch die tägliche Ar- Entwicklung bereit. Weil Che auf Docker
nutzerdaten – das vereinfacht nicht zu- beit. Dafür gibt es eine eigene Git-Sicht setzt, kann der Team-Administrator ge-
letzt die Datensicherung. (Abbildung 2). Dort sieht der Entwickler nau die Komponenten konfigurieren, die
nicht nur die Git-Historie, sondern auch er für das Projekt braucht.
Erste Schritte den Status der eigenen Dateien.
Aus dieser Sicht heraus prüft er seine Fazit
Das Einstiegsbild ist nach der Eigen- Änderungen gegenüber dem Repository,
Installation identisch mit dem in Abbil- aktualisiert Dateien, die Kollegen inzwi- Orion ist eine leistungsfähige Entwick-
dung 1. Nach dem Registrieren und ersten schen eingecheckt haben, und steuert lungsumgebung und in wenigen Minu-
Anmelden legt der Programmierer sofort Commits für seine eigenen Dateien bei. ten installiert. Sie macht die Pflege auf-
los. Die Icons ganz links verlinken dabei All das ist sehr übersichtlich und funk- wändiger lokaler Installationen auf den
auf die verschiedenen Ansichten: Editor, tioniert ohne detaillierte Kenntnisse der Rechnern der Entwickler überflüssig. Im
Git, Shell, Sites und Einstellungen. Davon dahinterliegenden Kommandos. Team mit Git erweitert Orion erfolgreich
abgesehen ist der Arbeitsbereich anfangs Im Editor wartet eine weitere hilfreiche den Horizont von Eclipse. (kki) n
noch leer. Ansicht. Die »Blame«-Ansicht (aus dem
Entwickler fangen also auf der grünen Englischen to blame: beschuldigen) er-
Wiese an oder importieren ein bereits reicht der Entwickler über den Menü- Infos
existierendes Projekt. Am einfachsten punkt »Tools«. Mit ihr sieht er genau, [1] Orion: [http://download.eclipse.org/orion/]
gelingt das über die ausgezeichnete Git- wer wann welche Zeile beigesteuert hat [2] Demo-Service: [https://orionhub.org]
Integration. Aber Orion bietet auch alter- (Abbildung 3), und kann dann mit er- [3] OSGI-Kommando-Übersicht:
native Wege. Zum Beispiel kann es den hobenem Zeigefinger auf den Schurken [https://www.vogella.com/tutorials/OSGi/
Inhalt einer Zip-Datei mit den Quellda- deuten. Per Klick verzweigt er auch in die article.html#using-the-osgi-console]
teien entpacken. Git-Sicht und sieht dort die Änderungen [4] Orion-Dokumentation:
Nach dem Import sieht der Entwickler im Kontext (Historie, Diffs). [https://wiki.eclipse.org/Orion]
im Arbeitsbereich links die Projekte und [5] Eclipse Che:
deren Dateien, die rechte Seite listet die Testumgebung [https://www.eclipse.org/che/]
aktuell ausgewählte Datei mit Syntax
Highlighting auf. Wer eine Webanwendung entwickelt, Der Autor
Der Editor selbst bietet alles, was Ent- startet im Reiter »Sites« (Weltkugelsym- Bernhard Bablok arbeitet bei der Allianz Techno-
wickler von einer IDE erwarten. Dazu bol in der Spalte ganz links) eine Testum- logy SE als SAP-HR-Entwickler. Wenn er nicht Mu-
zählen natürlich insbesondere Konfigu- gebung. Das gelingt in wenigen Klicks. sik hört, mit dem Radl oder zu Fuß unterwegs ist,
rationsoptionen, um das Tab-Verhalten Es genügt, wenn der Entwickler dazu ein beschäftigt er sich mit Themen rund um Linux,
oder die Tastenbelegungen und weitere Mapping zwischen einem Pfad im Projekt Programmierung und Kleincomputer. Er ist unter
Dinge einzustellen. Die Konfiguration und einem URL-Pfad erzeugt. Physisch [mail@bablokb.de] zu erreichen.
07/2019
Programmieren

Testsuite prüft Go-Code unter Simulation realer Bedingungen

Ohne Netz getestet


Snapshot
www.linux-magazin.de

82
Damit Go-Code zuverlässig arbeitet, kommen Entwickler um Unittests nicht herum. Mit Mocking und Depen-
dency Injection laufen diese auch ohne Internet oder Datenbankanschluss, wie Mike Schilli zeigt. Michael Schilli
© Sergey Nivens, 123RF

Code nicht laufend testen – das ist längst reibungslosen Ablauf eines Programms gen entgegen und liefern programmierte
keine Option mehr. Wer nicht testet, weiß garantieren, dazu muss eine Testsuite Antworten zurück.
nicht, ob neue Features tatsächlich funk- den Code realen Bedingungen unterwer-
tionieren oder ob eine Änderung neue fen und sehen, ob er sich auch zur Lauf- Was schiefgehen kann
Fehler einbaut oder gar alte Wunden wie- zeit erwartungsgemäß verhält.
der aufreißt. Zwar mault der Go-Compiler Damit die Entwickler nicht müde werden, Listing 1 zeigt eine kleine Library mit der
schneller bei Typfehlern, als Skriptspra- die Testsuite immer wieder anzuwerfen, Funktion »Webfetch()«, die zu Testzwe-
chen dies üblicherweise tun, und strenge muss sie idealerweise blitzschnell ablau- cken eine URL entgegennimmt und den
Typprüfung schließt ganze Batterien von fen. Und fällt im Bus zur Arbeit mal das Inhalt der sich dahinter verbergenden
Leichtsinnsfehlern von vornherein aus. Internet aus, sollte auch das für Unittests Seite zurückliefert. Was kann beim Ein-
Doch statisches Abklopfen kann nie den kein Hindernis sein. Bauen Tests eine holen einer Webseite alles falsch laufen?
Verbindung zu einem Webserver auf oder Zunächst könnte die angegebene URL
brauchen eine angeschlossene Daten- nicht dem standardisierten Format ent-
Der Autor bank, läuft das dem Gedanken schneller sprechen. Dann könnte es Probleme bei
Michael Schilli arbeitet als unabhängiger Tests zuwider. der Kontaktaufnahme mit dem Server
Software-Engineer in der Da aber kaum ein ernst zu nehmendes geben: Fehler bei der DNS-Auflösung,
San Francisco Bay Area in Projekt nur allein vor sich hin rödelt, Netzwerk-Time-outs, oder der Server
Kalifornien. In seiner seit gilt es also, Abhängigkeiten zu externen
1997 laufenden Kolumne Systemen abzufedern und diese durch Online PLUS
forscht er jeden Monat nach potemkinsche Dörfer zu ersetzen. Diese
Im Screencast demonstriert Michael
praktischen Anwendungen verschiedener Pro- „Mocks“ genannten Simulanten spielen
Schilli das Programmierbeispiel:
grammiersprachen. Unter [mschilli@perlmeister. für die Testsuite die Rolle echter Kom-
[http://www.linux-magazin.de/videos/]
com] beantwortet er gerne Fragen. munikationspartner, sie nehmen Anfra-
07/2019
Programmieren
lokaler Webserver zum tests, führen im Code eingangs »package
Einsatz, der nur statische webfetcher« an.

Snapshot
Seiten ausliefert oder nur Aus der konventionsgemäß definierten
Fehlercodes meldet. Funktion »TestWebfetchOk()« in Listing
Go kann dank seiner 2 wird so ein Teil der Testsuite, und aus
quasi gleichzeitig laufen- den Fehlerprüfungen in den If-Statements
den Go-Routinen sogar im der Zeilen 23 und 27 deren Testfälle. Zeile
selben Programm einen 23 verifiziert, dass der Server auch einen

www.linux-magazin.de
83
Server laufen lassen und Statuscode 200 geschickt hat, und Zeile
Abbildung 1: Die Testsuite prüft sowohl den Erfolgs- als auch den Feh- muss dazu keinen exter- 27 vergleicht den empfangenen String mit
lerfall der Webfetch-Bibliothek. nen Prozess starten. Das dem in Zeile 10 vorgegebenen (»Hello,
ist ungeheuer praktisch, client.«). In beiden Fällen schweigt die
nimmt sich gerade eine Auszeit. Viel- denn das ganze zeitaufwändige und Testsuite still, falls alles glattlief, und
leicht verweist die angegebene URL auch auch noch fehleranfällige Brimborium meldet nur auftretende Fehler.
auf kein gültiges Dokument des Servers zum ordnungsgemäßen Starten und vor
und dieser antwortet mit »404« oder er allem Stoppen externer Prozesse entfällt. Listing 1: »webfetch.go«
fordert zum Beispiel mit »301« einen Re- 01 package webfetcher
direct an. Konventionen 02
Alle diese möglichen Fehler prüft der 03 import (
Code in Listing 1 und gibt im Störungsfall Listing 2 prüft, ob die Funktion »Web- 04 "fmt"

jeweils einen Fehler des Typs »error« zu- fetch()« aus Listing 1 im Erfolgsfall, wenn 05 "io/ioutil"

rück. Zapft der Client ab Zeile 23 endlich der Server eine Textdatei ausliefert, wie 06 "net/http"

den Strom der eintrudelnden Bytes an, angepriesen funktioniert. Dazu definiert 07 )
08
kommt es vor, dass dieser plötzlich aus- es ab Zeile 18 die Funktion »TestWebfet-
09 func Webfetch(url string) (string, error) {
setzt, weil die Netzverbindung zusam- chOk()«, die als Parameter einen Pointer
10 resp, err := http.Get(url)
menbricht. All diese Fälle sollte ein guter auf eine Struktur vom Typ »testing.T« er-
11
Client abfangen und eine gute Testsuite hält, die es später nutzt, um der Testsuite
12 if err != nil {
sollte verifizieren, dass der Client dies auftretende Fehler zu melden.
13 return "", err
auch in allen Situationen tut. Zu beachten ist, dass Go viel auf Konven-
14 }
tionen hält und alles davon Abweichende 15

Ohne Brimborium störrisch ignoriert. So müssen die Namen 16 if resp.StatusCode != 200 {


aller Testdateien auf »_test.go« enden. 17 return "", fmt.Errorf(
Nun läuft die Testsuite eventuell auf Sys- Und es kann »webfetch_200_test.go« 18 "Status: %d", resp.StatusCode)
temen, die über keinen zuverlässigen nicht etwa »webfetch_test_200.go« hei- 19 }
Internetanschluss verfügen – nichts ist ßen, denn sonst findet das im Verzeich- 20

nerviger als ein Programm, das mal ord- nis aufgerufene Kommando »go test« auf 21 defer resp.Body.Close()

nungsgemäß Dienst tut und mal nicht. einmal keine Tests zum Ausführen mehr. 22

Um solche Abhängigkeiten zu entfernen, Die Namen der Testroutinen der Testsuite 23 body, err := ioutil.ReadAll(resp.Body)

ersetzen Testsuiten externe Systeme oft müssen mit »func TestXXX« beginnen, 24 if err != nil {
25 return "", fmt.Errorf(
durch Strohmänner. Beim so genannten sonst droht ein ähnliches Debakel.
26 "I/O Error: %s\n", err)
Mocking ahmen einfache Testgerüste Und schließlich gilt in Go die Regel „Ein
27 }
bestimmte Fähigkeiten externer Sys- Paket pro Verzeichnis“: Alle drei Go-
28 return string(body), nil
teme perfekt reproduzierbar nach. Dazu Programme, die Library »webfetch.go«
29 }
kommt zum Beispiel ein vereinfachter sowie die beiden Dateien mit den Unit-

Listing 2: »webfetch_200_test.go«
01 package webfetcher 11 21 content, err := Webfetch(srv.URL)

02 12 func Always200(w http.ResponseWriter, 22

03 import ( 13 r *http.Request) { 23 if err != nil {


24 t.Errorf("Error on 200")
04 "fmt" 14 w.WriteHeader(http.StatusOK)
25 }
05 "net/http" 15 fmt.Fprint(w, ContentString)
26
06 "net/http/httptest" 16 }
27 if content != ContentString {
07 "testing" 17
28 t.Errorf("Expected %s but got %s",
08 ) 18 func TestWebfetchOk(t *testing.T) { 29 ContentString, content)
09 19 srv := httptest.NewServer( 30 }
10 const ContentString = "Hello, client." 20 http.HandlerFunc(Always200)) 31 }
07/2019
Programmieren

Wer’s lieber etwas gesprächiger mag, mit »t.Errorf()« ausgeworfenen Fehler- Zeile 19 wirft den eigentlichen Webser-
kann mit »t.Logf()« jeweils vor dem meldungen zu Tage. ver aus dem Paket »httptest« an und gibt
Snapshot

Testfall eine Nachricht ausgeben und Das Verhalten des eingebauten Test- ihm den vorher definierten Handler als
im Erfolgsfall ebenfalls Meldung ma- Webservers definiert der Handler »Al- Funktion mit, die sie vorher in den Typ
chen lassen. So wie in Listing 2 imple- ways200()« ab der Zeile 12 in Listing 2. »http.HandlerFunc« konvertiert.
mentiert, druckt die mit »go test -v« im Egal wie der eingehende Request vom Auf welchem Host und Port der neue
Verbose-Modus aufgerufene Testsuite im Typ »*http.Request« aussieht, er gibt Server lauscht, gibt er im Attribut »URL«
Erfolgsfall einfach nichts über die ein- einfach den Status-Code »http.StatusOK« an, welches Zeile 21 an die zu testende
www.linux-magazin.de

84
zelnen Testfälle, sondern meldet nur die (also 200) im Header der HTTP-Antwort Client-Funktion »Webfetch()« als URL
ausgeführten Testfunktionen (Abbildung zurück und schickt den String »Hello, übergibt. Zurück kommen, wie erwartet,
1). Ginge aber etwas schief, kämen die client.« als Inhalt der Seite hinterher. ein Status-Code 200 und der vorher ein-
gestellte String, also bringt die Testsuite
Listing 3: »webfetch_404_test.go« keinen Fehler hoch.
01 package webfetcher 14 func TestWebfetch404(t *testing.T) {

02 15 srv := httptest.NewServer( Keine falschen Fehler


03 import ( 16 http.HandlerFunc(Always404))

04 "net/http" 17 content, err := Webfetch(srv.URL)


Aber auch Fehlerfälle sollte »Webfetch()«
05 "net/http/httptest" 18
ordnungsgemäß behandeln. Um dies zu
06 "testing" 19 if err == nil {
prüfen, definiert Listing 3 den Handler
07 ) 20 t.Errorf("No error on 404")
»Always404()«, der den Webserver an-
weist, auf jede Anfrage den Statuscode
08 21 }
»404« und eine Seite leeren Inhalts zum
09 func Always404(w http.ResponseWriter, 22
Client zu senden. Flugs in den neuen
10 r *http.Request) { 23 if len(content) != 0 {
Webserver ab Zeile 15 eingebaut, erhält
11 w.WriteHeader(http.StatusNotFound) 24 t.Error("Content not empty on 404")
»Webfetch()« nun „Nicht Gefunden“-
12 } 25 }
Meldungen vom Server und stellt dies
13 26 }
in den »If«-Bedingungen ab Zeile 19 in
Listing 3 sicher.
Listing 4: »main-wrong.go«
01 package main 06 Unabhängigkeit
02 07 func main() {
03 import ( 08 nstore := ns.NewStore() Doch nicht immer stehen elegante Inline-
04 ns "namestore" 09 nstore.Insert("foo")
Server mit konfigurierbaren Handlern zur
05 ) 10 }
Verfügung. Was ist zu tun, wenn zum
Beispiel ein System eine Datenbank vor-
Listing 5: »main.go« aussetzt? Hier ist unbedingt schon in der
01 package main 10 db, err := Designphase des Hauptprogramms dar-
02 11 sql.Open("sqlite3", "names.db") auf zu achten, dass dessen Abhängigkeit
03 import ( 12 if err != nil { von der Datenbank nicht festgebacken
04 "database/sql" 13 panic(err) irgendwo im Innern des Systems sitzt,
05 _ "github.com/mattn/go-sqlite3" 14 } sondern sich von außen einstellen lässt.
06 ns "namestore" 15
Das Verfahren heißt „Dependency Injec-
07 ) 16 nstore := ns.NewStore(ns.Config{Db: db})
tion“ und steckt neuen Objekten bei der
08 17 nstore.Insert("foo")
Konstruktion Strukturen zu, die externe
09 func main() { 18 }
Ziele definieren. Das kann bei größeren

Listing 6: »namestore.go«
01 package namestore 11 21 panic(err)
02 12 func NewStore(config Config) (*Config) { 22 }
03 import ( 13 return &config 23
04 "database/sql" 14 } 24 _, err = stmt.Exec(name)
05 _ "github.com/mattn/go-sqlite3" 15 25 if err != nil {
06 ) 16 func (config *Config) Insert( 26 panic(err)
07 17 name string) { 27 }
08 type Config struct { 18 stmt, err := config.Db.Prepare( 28
09 Db *sql.DB 19 "INSERT INTO names VALUES(?)") 29 return
10 } 20 if err != nil { 30 }
07/2019
Programmieren
Software-Architekturen zu wahren Irrgär- Das Ganze funktioniert, indem Go die
ten an Abhängigkeiten führen, weswegen Funktion »ExampleSayHello()« wegen

Snapshot
die Firmen Uber und Google schon Pa- des Präfixes »Example« in der Testdatei
kete zu deren Bewältigung geschrieben (Suffix »_test«) als dokumentationswür-
haben ([2], [3]). diges Anwendungsbeispiel erkennt und
die Webversion des »godoc«-Kommandos
Injektion: Gleich pikt’s sie dort aufnimmt. Den mit »// Output:«
eingeleiteten Kommentar in Zeile 5 der

www.linux-magazin.de
85
Um dem Endanwender einer Library Testdatei interpretiert Go per Konvention
möglichst wenig Kopfzerbrechen zu be- als erwartete Ausgabe, und »go test« führt
reiten, würden viele Entwickler im ersten tatsächlich »ExampleSayHello()« aus und
Ansatz versuchen möglichst viele Details prüft, ob dann auch »hello« auf der Stan-
zu verstecken. Ein Storage-Service für dardausgabe erscheint.
Namen, »namestore« mit angeschlosse- Zusammen mit der automatisch aus Code
ner Datenbank wie in Listing 4, würde und Kommentaren der Library-Datei in
zunächst gar nicht offenbaren, dass eine Listing 7 erstellten Dokumentation ergibt
Datenbank im Spiel ist, und sie hinter sich daraus die selbstprüfende Dokumen-
dem Vorhang einfach anlegen und ma- tation. Ein klarer Gewinn für Program-
nipulieren. mierer, die ungern Instruktionen lesen
Allerdings hat dies fatale Folgen für Unit- Abbildung 2: Dokumentation mit Beispiel. und gerne einfach draufloskopieren. Aber
tests, die über die Schnittstelle des Pakets auch Software-Maintainer profitieren, in-
»namestore« nun nichts mehr tricksen piert und flugs an die örtlichen Gegeben- dem sie sich so peinliche Fehler ersparen
können, um zum Beispiel statt einer auf- heiten anpasst. Diese stehen meist weiter können, dass gleich das erste Anwen-
wändig zu installierenden MySQL- eine unten in den Instruktionen, sodass viele dungsbeispiel der Dokumentation nicht
testfreundliche SQlite-Datenbank oder User erst mal ganz nach unten blättern. mehr funktioniert. (uba) n
gar einen Treiber für ein CSV-Format als Doch leider kommt es vor, dass diese
Backend zu nutzen. Anwendungsbeispiele gar nicht (mehr)
Besser ist es beim Design, die Abhän- funktionieren, weil der Entwickler den Infos
gigkeiten (wie zum Beispiel die verwen- Code geändert und vergessen hat, den [1] Listings zu diesem Artikel:
dete Datenbank) dem Konstruktor von entsprechenden Abschnitt auf der Manu- [http://www.linux-magazin.de/static/
der Nutzerseite her mitzugeben wie in alseite nachzuziehen. Abhilfe schafft Gos listings/magazin/2019/07/snapshot/]
Listing 5. Dort öffnet der Library-User automatische Manualseiten-Erstellung [2] „Dig: A reflection based dependency injec-
die Datenbank (in diesem Fall SQlite) und mit in die Unittest-Suite eingebetteten tion toolkit for Go“:
reicht das Datenbank-Handle dem Kons- Beispielen. [https://github.com/uber-go/dig]
truktor des »namestore«-Objekts, der es Abbildung 2 zeigt, dass der Anwender [3] „Compile-time Dependency Injection for
dann für Zugriffe nutzt. in der Webversion der Manualseite auto- Go“: [https://github.com/google/wire]
Die Implementierung einer solchen Unit- matisch generierte, getestete Beispiele zu
test-freundlichen Library zeigt Listing 6. Gesicht bekommt. Das Kommando Listing 7: »example.go«
Zeile 8 definiert die Struktur vom Typ 1 package myhello
godoc -http=:6060
»Config«, die der Konstruktor »NewStore()« 2
ab Zeile 12 entgegennimmt. Letzterer startet einen Webserver auf Port 6060, 3 import (
braucht nur einen Pointer darauf zurück- und wer einen Browser auf »http://local- 4 "fmt"
zugeben, denn die »Insert()«-Methode ab host:6060/pkg« ausrichtet, kann zur Ma-
5 )
Zeile 16 nutzt diese Datenstruktur als nualseite des Pakets manövrieren. Klickt
6
Receiver und erhält so Zugang auf die der User auf den abwärts zeigenden Pfeil
7 func SayHello() {
vom User eingestellte Datenbankverbin- neben dem Wort »Example«, öffnet sich
8 fmt.Println("hello")
dung über »config.Db«. ein Abschnitt, der sowohl den Beispiel-
9 }
Dank Unittest-freundlichem Design ist so code als auch das auf der Standardaus-
gewährleistet, dass Tests ohne zusätzli- gabe erwartete Ergebnis zeigt.
chen Installationsaufwand auskommen Der Clou ist nun dabei, dass dieses Bei- Listing 8: »example_test.go«
und blitzschnell durchlaufen. spiel automatisch aus dem Testcode des 1 package myhello
Pakets in Listing 8 generiert wurde und 2

Beispiele einbetten bei jedem Ablauf der Testsuite mit »go 3 func ExampleSayHello() {
test« die tatsächliche Ausgabe des Bei-
4 SayHello()
Wer liest schon Manualseiten?! Am inte- spielcodes mit der angegebenen vergli-
5 // Output: hello
ressantesten sind doch funktionierende chen wird – so bleibt die Dokumentation
6 }
Anwendungsbeispiele, die man direkt ko- immer auf dem aktuellen Stand!
07/2019

PROFI
Service

MARKT
IT-Profimarkt

Sie fragen sich, wo Sie maßgeschnei- Hardware, Software, Seminaranbieter,


derte Linux-Systeme und kompetente An- Systemhaus, Netzwerk/TK und Schu-
Informationen
sprechpartner zu Open-Source-Themen lung/Beratung. Der IT-Profimarkt-Eintrag fordern Sie bitte an bei:
finden? Der IT-Profimarkt weist Ihnen ist ein Service von Linux-Magazin und
Computec Media GmbH
als zuverlässiges Nachschlagewerk den LinuxUser.
Weg. Die hier gelisteten Unternehmen
Anzeigenabteilung
www.linux-magazin.de

86
beschäftigen Experten auf ihrem Gebiet Dr. Mack-Str. 83
Online-Suche
und bieten hochwertige Produkte und D-90762 Fürth
Leistungen. Besonders bequem finden Sie einen Li- Tel: +49 (0) 911 / 2872 - 251
Die exakten Angebote jeder Firma ent- nux-Anbieter in Ihrer Nähe über die neue Fax: +49 (0) 911 / 2872 - 241
nehmen Sie deren Homepage. Der ers- Online-Umkreis-Suche unter:
E-Mail: anzeigen@linux-magazin.de
ten Orientierung dienen die Kategorien [www.linux-magazin.de/it-profimarkt/]

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus


IT-Profimarkt – Liste sortiert nach Postleitzahl 4= Seminaranbieter
4= Fachliteratur 5 = Software
5 = Software 6 = Beratung
6 = Schulung/Beratung
Firma Anschrift Telefon Web 1 2 3 4 5 6
Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-802998-1 www.schlittermann.de 3 3 3 3

imunixx GmbH UNIX consultants 01468 Moritzburg, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de 3 3 3 3 3

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

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

PC-COLLEGE Training GmbH 10963 Berlin, Stresemannstraße 78 0800 5777 333 linux.pc-college.de 3 3

Compaso GmbH 13125 Berlin, Achillesstraße 61 030-3269330 www.compaso.de 3 3 3 3 3

mpex GmbH 12101 Berlin, Werner-Voß-Damm 62 030-780 97 180 www.mpex.de 3 3 3

verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de 3 3 3

Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de 3 3 3 3 3

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

Linux-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de 3 3 3 3 3

Linuxhotel GmbH 45279 Essen, Antonienallee 1 0201-8536-600 www.linuxhotel.de 3

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um Linux bieten. Alle Angaben ohne Gewähr.

Seminare
07/2019
Service
IT-Profimarkt – Liste sortiert nach Postleitzahl

IT-Profimarkt
etherTec Systems 47798 Krefeld, Südwall 74 02151-1521005 ethertec.net 3 3 3 3 3

dass IT GmbH 50674 Köln, Händelstr. 25-29 0221-35 65 666-0 www.dass-it.de 3 3 3 3 3

QWICS Enterprise Systems 60310 Frankfurt am Main, Taunustor 1 +49 (0)69-505060-4-630 www.qwics.de 3 3

LinuxHaus Stuttgart 70565 Stuttgart, Hessenwiesenstrasse 10 0711-2851905 www.linuxhaus.de 3 3 3 3 3

Manfred Heubach EDV und Kommunikation 73730 Esslingen, Hindenburgstr. 171 0711-4904930 www.heubach-edv.de 3 3 3 3

www.linux-magazin.de
87
in-put GbR - Das Linux-Systemhaus 75179 Pforzheim, Kurze Steig 31 07231-440785 -0 www.in-put.de 3 3 3 3 3 3

Tralios IT GmbH 76133 Karlsruhe, Douglasstr. 24-26 0721-94269664 www.tralios.de 3 3 3 3 3

Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de 3 3

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

B1 Systems GmbH 85088 Vohburg, Osterfeldstrasse 7 08457-931096 www.b1-systems.de 3 3 3 3 3

Tuxedo Computers GmbH 86343 Königsbrunn , Zeppelinstr. 3 08231-99 19 001 www.linux-onlineshop.de 3 3 3 3

OSTC Open Source Training and Consulting GmbH 90425 Nürnberg, Waldemar-Klink-Str. 10 0911-3474544 www.ostc.de 3 3 3 3 3 3

Dipl.-Ing. Christoph Stockmayer GmbH 91355 Hiltpoltstein, Am Wolfsgraben 26 09192-9943400 www.stockmayer.de 3 3 3

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

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

CATATEC CH-3013 Bern, Dammweg 43 +41-31-3302630 www.catatec.ch 3 3 3

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um Linux bieten. Alle Angaben ohne Gewähr.
07/2019

Inserentenverzeichnis

1&1 Internet AG http://www.einsundeins.de 11 Linuxhotel http://www.linuxhotel.de 7


Service

B1 Systems GmbH http://www.b1-systems.de 1, 92 LinuxUser http://www.linux-user.de 15, 49, 79

Blueend http://www.blueend.com 2 Netways GmbH http://www.netways.de 13

Computec IT-Academy http://www.computec-academy.de Raspberry Pi Geek http://www.raspberry-pi-geek.de 59


Inserenten

45, 62, 86, 87


TripleS Jahn Peter http://www.triples.at 86
Fernschule Weber GmbH http://www.fernschule-weber.de 86
Tuxedo Computers GmbH http://www.linux-onlineshop.de 91
Golem.de http://www.golem.de 17
Xentral ERP Software GmbH http://https://xentral.biz 9
www.linux-magazin.de

88 Heinlein Support GmbH http://www.heinlein-support.de 39


Einem Teil dieser Ausgabe liegen Beilagen der Firmen EUROstor GmbH (http://
Linux-Magazin http://www.linux-magazin.de 35, 81
www.eurostor.com) und HACKATTACK IT SECURITY GmbH (http://www.hackattack.

Linux-Magazin Online http://www.linux-magazin.de 19, 33, 55 com) bei. Wir bitten unsere Leser um freundliche Beachtung.

Autoren dieser Ausgabe


Bernhard Bablok Sternzeichen Entwickler 78 Kevin Peters Wunsch nach Chaos 36

Erik Bärwaldt Auf Herz und Nieren 52 Jürgen Quade Kern-Technik 46


Mike Schilli Ohne Netz getestet 82
Tobias Eggendorfer Arbeiten an der Quelle 22
Tim Schürmann Fedora 30, Pop OS, Karma 51
Eva-Katharina Kunst Kern-Technik 46
Tim Schürmann Mit Karma entwickeln 42
Charly Kühnast Fürs Protokoll 63
Jörg Thoma Hop-on, hop-off 18
Martin Loschwitz Massenproduktion 64 Uwe Vollbracht Tooltipps 60
Martin Loschwitz Sicher in den Wolken 69 Detlef Wilkening Gut gereift 28

Veranstaltungen
06.07.2019 07.-13.09.2019 24.-26.09.2019
Tübix Akademy 2019 Deutsche OpenStack Tage 2019
Wilhelm-Schickard-Institut für Informatik Berlin, Germany
University of Milano-Bicocca
Tübingen https://openstack-tage.de
Mailand/Italien
https://www.tuebix.org
Veranstalter: KDE e.V. 28.-30.10.2019
08.-14.07.2019 https://akademy.kde.org/2019 Open Source Summit + Embedded Linux Conference

Europython Europe

Basel / Schweiz Lyon, Frankreich


08.-10.09.2019
https://events.linuxfoundation.org/events/
Veranstalter: The Europython Society (EPS)
Linux Plumbers Conference open-source-summit-europe-2019/
https://ep2019.europython.eu
Lissabon, Portugal
https://linuxplumbersconf.org 04.-07.11.2019
15.-18.07.2019
Open Source Monitoring Conference (OSMC)
Open Source Software Conference
Nuremberg, Germany
Portland / USA 20.-22.09.2019 https://osmc.de
https://conferences.oreilly.com/oscon/oscon-or
All System Go!
Berlin 16.11.2019
21.-28.07.2019
Linux Presentation Day 2019
http://all-systems-go.io
Debconf 2019 Europaweit in zahlreichen Städten
Curitiba, Brazil http://l-p-d.org
https://wiki.debian.org/DebConf/19 23.-25.09.2019
Open Networking Summit Europe 2019 09.-12.12.2019
23.-28.08.2019 IT Tage 2019
Antwerpen, Belgien
Guadec 2019 KAP Europa, Kongresshaus der Messe Frankfurt
https://events.linuxfoundation.org/events/
Thessaloniki, Griechenland Frankfurt a. M.
https://2019.guadec.org open-networking-summit-europe-2019/ http://www.it-tage.org
07/2019
Abonnement Impressum
Preise Print Deutschland Österreich Ausland
Mini-Abo (3 Ausgaben)

Service
No Media-Ausgabe 4 13,90 4 13,90 4 13,90
DVD-Ausgabe 4 17,90 4 17,90 4 17,90
Jahresabo (12 Ausgaben)
No Media-Ausgabe 4 71,00 4 79,00 4 87,00
Ein Unternehmen der Marquard Media Group AG
DVD-Ausgabe 4 91,00 4 99,00 4 103,00 Verleger Jürg Marquard

Impressum
Jahres-DVD zum Abo 1 4 6,70 4 6,70 4 6,70
Preise Digital Deutschland Österreich Ausland Redaktion / Verlag Redaktionsanschrift: Verlagsanschrift:
Redaktion Linux-Magazin Computec Media GmbH
Heft-PDF Einzelausgabe 4 5,99 4 5,99 4 5,99 Putzbrunner Straße 71, D-81739 München Dr-Mack-Str. 83, D-90762 Fürth
Telefon: +49 911 - 2872-110 Telefon: +49 911 - 2872-100
Digtal-Abo (12 Ausgaben) 4 59,99 4 59,99 4 59,99
E-Mail: redaktion@linux-magazin.de
Kombi Digital + Print 4 83,00 4 91,00 4 99,00 http://www.linux-magazin.de
(No-Media-Ausgabe)

www.linux-magazin.de
Geschäftsführer Hans Ippisch, Rainer Rosenbusch, Christian Müller 89
(12 Ausgaben)
Kombi Digital + Print 4 103,00 4 111,00 4 115,00 Chefredakteur,
(DVD-Ausgabe) (12 Ausgaben) Brand/Editorial Director Jan Kleinert (V.i.S.d.P.), jkleinert@linux-magazin.de (jk)
stv. Chefredakteur Jens-Christoph Brendel, jcb@linux-magazin.de (jcb)
Redaktionsltg. Online Ulrich Bantle, ubantle@linux-magazin.de (uba)
1 Print- und Onlineredaktion
nur erhältlich in Verbindung mit einem Jahresabo Print
Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises Aktuell, Forum Ulrich Bantle, ubantle@linux-magazin.de (uba)
Software, Programmierung Kristian Kißling, kkissling@linux-magazin.de (kki)
oder einer aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei Sysadmin, Know-how Jens-Christoph Brendel, jcb@linux-magazin.de (jcb)
Verlängerung neu zu erbringen. Andere Abo-Formen, Ermäßigungen im Ausland etc. Ständige Mitarbeiter Heike Jurzik (hej), Charly Kühnast, Martin Loschwitz, Michael Schilli,
auf Anfrage. Adressänderungen bitte umgehend beim Kundenservice mitteilen, da Tim Schürmann, Mark Vogelsberger, Uwe Vollbracht
Schlussredaktion Jürgen Manthey
Nachsendeaufträge bei der Post nicht für Zeitschriften gelten.
DELUG-DVD Tim Schürmann, info@tim-schuermann.de
Grafik Judith Erb
(Rohmaterial Titel: Andrey Kiselev, 123RF)
Bildnachweis 123RF.com, Fotolia.de, Photocase.com, Pixelio.de, freeimages.com und andere
Krypto-Info
Marketing Jeanette Haag (Ltg.), Simon Schmid, marketing@computec.de
GnuPG-Schlüssel der Linux-Magazin-Redaktion: Produktion Martin Closmann, martin.closmann@computec.de
pub 1024D/44F0F2B3 2000-05-08 Redaktion Linux-Magazin
<redaktion@linux-magazin.de> Vertrieb, Abonnement Werner Spachmüller (Ltg), werner.spachmueller@computec.de
Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3
Anzeigen Print/Digital Es gilt die Anzeigenpreisliste Nummer 32
Public-Key der DFN-PCA:
Sales Director Jens-Ole Quiel, jens-ole.quiel@computec.de, Telefon: +49 911 - 2872-253
pub 2048R/7282B245 2007-12-12,
Mediaberatung D, A, CH Judith Gratias-Klamt, anzeigen@linux-magazin.de, Telefon: +49 911 - 2872-252
DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)
Mediaberatung USA Brian Osborn, bosborn@linuxnewmedia.com
<https://www.pki.dfn.de/pgp>
und weitere Länder
Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A
PGP-Zertifikat der DFN-User-CA: Internet http://www.linux-magazin.de
pub 2048R/6362BE8B (2007-12-12), Täglicher Newsletter http://www.linux-magazin.de/mc/subscribe
DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009) Heftarchiv http://www.linux-magazin.de/Ausgaben
Leserbriefe redaktion@linux-magazin.de
<https://www.pki.dfn.de/pgp> Fragen zu Heft-DVDs cdredaktion@linux-magazin.de
Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06 Allgemeine Anfragen info@linux-magazin.de
Root-Zertifikat der CAcert:
Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/ ISSN 1432 – 640 X
Email=support@cacert.org Abo:
SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33 Die Abwicklung (Rechnungsstellung, Zahlungsabwicklung und Versand) erfolgt über unser
Partnerunternehmen DPV Deutscher Pressevertrieb GmbH
MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B Postadresse Leserservice Computec
GPG-Schlüssel der CAcert: 20080 Hamburg
pub 1024D/65D0FD58 2003-07-11 [expires: 2033-07-03] Deutschland
Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58 Ansprechpartner für Reklamationen und Ersatzbestellungen ist Ihr Computec-Team
in Deutschland: E-Mail: computec@dpv.de
uid CA Cert Signing Authority (Root CA) <gpg@cacert.org>
Tel: 0911 – 993 990 98
Fax: 01805 – 861 8002*
Support: Montag 07:00 – 20:00 Uhr, Dienstag-Freitag: 07:30 – 20:00 Uhr,
Samstag 09:00 – 14:00 Uhr
Rechtliches (* 14 Cent/Min. aus dem dt. Festnetz, max. 42 Cent/Min. aus dem dt. Mobilfunk)
in Österreich, Schweiz und weiteren Ländern:
COMPUTEC MEDIA ist nicht verantwortlich für die inhaltliche Richtigkeit der Anzeigen E-Mail: computec@dpv.de
und übernimmt keinerlei Verantwortung für in Anzeigen dargestellte Produkte und Tel: +49 911 – 993 990 98
Fax: +49 1805 – 861 8002
Dienstleistungen. Die Veröffentlichung von Anzeigen setzt nicht die Billigung der
Support: Montag 07:00 – 20:00 Uhr, Dienstag-Freitag: 07:30 – 20:00 Uhr,
angebotenen Produkte und Service-Leistungen durch COMPUTEC MEDIA voraus. Samstag 09:00 – 14:00 Uhr
Sollten Sie Beschwerden zu einem unserer Anzeigenkunden, seinen Produkten oder Abo-Infoseite http://shop.computec.de
Dienstleistungen haben, möchten wir Sie bitten, uns dies schriftlich mitzuteilen. Schrei- Abo-Bestellung http://shop.linux-magazin.de

ben Sie unter Angabe des Magazins, in dem die Anzeige erschienen ist, inklusive der
Pressevertrieb DPV Deutscher Pressevertrieb GmbH • Am Sandtorkai 74 • 20457 Hamburg
Ausgabe und der Seitennummer an: CMS Media Services, Annett Heinze, Anschrift s. o. http://www.dpv.de
Druck Walstead Central Europe, Poland
Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung für die Unix-
ähnlichen Betriebssysteme verschiedener Hersteller benutzt. Linux ist eingetragenes
Markenzeichen von Linus Torvalds und wird in unserem Markennamen mit seiner
Erlaubnis verwendet.
Eine Haftung für die Richtigkeit von Veröffentlichungen kann trotz sorgfältiger Prüf-
Deutschland:
ung durch die Redaktion vom Verlag nicht übernommen werden. Mit der Einsendung
4PLAYERS, AREAMOBILE, BUFFED, GAMESWORLD, GAMESZONE, GOLEM, LINUX-COMMUNITY, LINUX-MAGAZIN,
von Manuskripten gibt der Verfasser seine Zustimmung zum Abdruck. Für unverlangt LINUXUSER, MAKING GAMES, N-ZONE, GAMES AKTUELL, PC GAMES, PC GAMES HARDWARE, PC GAMES MMORE, PLAY 4,
RASPBERRY PI GEEK, SFT, VIDEOGAMESZONE, WIDESCREEN
eingesandte Manuskripte kann keine Haftung übernommen werden. Das Exklusiv- und
Marquard Media Polska:
Verfügungsrecht für angenommene Manuskripte liegt beim Verlag. Es darf kein Teil
CKM, COSMOPOLITAN, ESQUIRE, HARPER'S BAZAAR, JOY, KOZACZEK, PAPILOT, PLAYBOY, ZEBERKA
des Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in irgendeiner Marquard Media Hungary:
Form vervielfältigt oder verbreitet werden. APA, ÉVA, GYEREKLÉLEK, INSTYLE, JOY, MEN`S HEALTH, PLAYBOY, RUNNER`S WORLD, SHAPE
Vorschau
07/2019

08/2019
Service

MAGAZIN
Vorschau 08/2019

Open Shift 4
Wenn öffentliche oder private Cloud-Rechenzentren mit vielen
Anwendungen in Containern hantieren, ist oft Open Shift nicht
weit. Was die anstehende Version 4 anders macht oder ob den
90 Red-Hat-Kunden der Wechsel über die Hutschnur gehen wird,
www.linux-magazin.de

evaluiert das nächste Magazin.

VPN-User
© solarseven, 123RF

Einst als Bollwerk gegen die Pest gegründet, setzt die Charité
in Berlin heute die freie Software Easy RSA ein, um ihre Open-
VPN-Zugänge zu verwalten. Die Admins des Klinkkomplexes
Endstation Klau-Sucht sezieren akribisch, wie ihre Public-Key-Infrastruktur für Tau-
sende User im Detail funktioniert.
Den Rekord hält Yahoo, wo sich Angreifer 2013 Zugang zu allen
drei Milliarden Nutzeraccounts verschafften. Letztes Jahr ka- Pen-Club
men einer Marriott-Tochter Daten von bis zu einer halben
Milliarde Hotelgästen abhanden. In den letzten Jahren gerieten Rund 300 Hilfsmittel, etwa John the Ripper, Aircrack oder Kis-
durchschnittlich fünf Millionen Datensätze in falsche Hände met, versammelt Kali Linux, um technisch versierten Linuxern
oder wurden anderweitig gefährdet – pro Tag! Gelegenheit zu geben, Anwendungen, Rechner oder ganze
Wenn der Schwerpunkt im nächsten Linux-Magazin sich also Netze zu Fall zu bringen. Für Laien mag das übel klingen, für
explizit mit dem Schutz wertvoller Daten befasst, stehen Rele- Pentester dagegen ist Kali kaum verzichtbar.
vanz und Dringlichkeit des Themas außer Frage. Es wird bei-
spielsweise um die Möglichkeiten und auch die Grenzen gehen,
Datenbank-Inhalte in der Cloud zu verschlüsseln. Ein anderer Die Ausgabe 08/2019
Beitrag wird testen, ob Admins durch Kryptographie das bei
Crackern beliebte Einfallstor Backupserver schließen können.
erscheint am 4. Juli 2019

Vorschau Aktuelle Distributionen


Fast alle Distributionen experimentieren aktuell mit neuen
auf 07/2019 Strukturen und Konzepten. Wir werfen einen Blick in die
Die nächste Ausgabe erscheint am 19. Juni Werkstätten der Entwickler und klären in einem großen Ver-
gleich, ob und wie die neuen Systeme mit den Anforderun-
gen der Praxis klarkommen. Außerdem untersuchen wir, wel-
che Außenseiter bei Systemdesign-Details der breiten Masse
gegenüber einen Vorsprung bieten.

Netzwerke verwalten
© Sebastian Duda, 123RF

Systemd verwaltet bei Bedarf auch Netzwerkzugänge. Dabei


erweist sich der gemeinhin als komplex geltende Daemon als
recht einfach in der Konfiguration: Schon wenige Zeilen genü-
gen oft für einen Zugang. Wir zeigen, wie das geht.

Winamp-Klon QMMP
Mit Musik geht die Arbeit am Rechner leichter von der Hand.
Mit QMMP haben Sie dabei stets den passenden Sound zur
Hand. Trotz umfangreicher Funktionen gibt sich die Anwen-
dung in Bezug auf das Futter genügsam: Von OGG bis WAV
frisst QMMP klaglos alle Formate.