Normale Ansicht

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

OPNsense 22.7 erschienen

30. Juli 2022 um 19:47

Kurz notiert: das freie Routerbetriebssystem OPNsense ist am 28. Juli 2022 in Version 22.7 mit dem Codenamen „Powerful Panther“ erschienen. Ähnlich wie bei Ubuntu erscheinen hier zwei Major-Releases pro Kalenderjahr – Version 22.1 wurde dementsprechend im Januar diesen Jahres veröffentlicht.

Folgende Neuigkeiten bringt der Release mit:

  • Das zugrundeliegende FreeBSD wird von Version 13 auf 13.1 aktualisiert.
  • PHP, worauf große Teile der Nutzeroberfläche basieren, ist nun in Version 8.0, das PHP-MVC-Framework Phalcon in Version 5 verfügbar.
  • Stacked VLANs (QinQ) nach IEEE 802.1ad (Wikipedia (en)) werden nun von OPNsense unterstützt.
  • Unterstützung für Intel QuickAssist (QAT), ein Hardwarebeschleuniger, wird ermöglicht.
  • Die Firewall erhält einen DDoS-Schutz, der auf SYN-Cookies (Wikipedia, D. J. Bernstein) zurückgreift.

Darüber hinaus wird die Abkehr von LibreSSL vorbereitet: so wird dies der letzte Release sein, der den OpenSSL-Fork alternativ anbietet. Im nächsten Großrelease wird ausschließlich OpenSSL unterstützt, Plugins müssen dementsprechend angepasst werden.

Die ausführliche Änderungsübersicht samt Prüfsummen und Mirroradressen ist hier verfügbar, die aktuelle Roadmap hier.

Vim 9 erschienen

30. Juni 2022 um 21:00

Kurz notiert: Vim hat diese Woche die Veröffentlichung eines neuen Major-Releases angekündigt. Die größte Änderung ist die Einführung von Vim 9 Script.

Bei Vim 9 Script handelt es sich um eine neue Skriptsprache für den bekannten textbaiserten Editor. Als Motivation geben die Entwickler zwei große Ziele an:

  • Performance: Die Sprache wird kompiliert in Befehle, die effizient ausgeführt werden können und eine 10- bis 100-fach verkürzte Ausführungszeit ermöglichen.
  • Syntax: Vim 9 Script orientiert sich syntaktisch an aktuellen, weit verbreiteten Programmiersprachen wie JavaScript, TypeScript und Java.

Insbesondere die Performanceziele haben den Weg für die Abwärtskompatibilität versperrt. Dabei wurde der Kompromiss gefunden, einerseits Vim 9 Script und andererseits „Legacy-Script“ (sprich: <= Vim 8) parallel zu unterstützen.

Weitere Hinweise zu Vim 9 Script sind unter :help vim9 verfügbar. Darüber hinaus wurden zahlreiche Bugs und Sicherheitslücken gefixt sowie die interne Testabdeckung erhöht. Letzteres soll zur Qualitätssicherung beitragen und die Robustheit erhöhen. Weitere Hinweise zu Neuerungen sind unter :help new-9 zu finden.

rename: mehrere Dateien nach einem Muster umbenennen

31. Mai 2022 um 19:15

Im heutigen Artikel möchte ich euch kurz ein Werkzeug vorstellen, das immer dann sinnvoll ist, wenn mehrere Dateien auf einmal nach einem bestimmten Muster umbenannt werden sollen. Das Werkzeug heißt rename (man prename) und kann unter Debian/Ubuntu als solches aus den Repositories bezogen werden. Bei anderen Distributionen muss man darauf achten, dass man die Perl-Variante nimmt (teils auch als prename bekannt) und nicht auf die util-linux-Variante zurückgreift, die zwar simple Ersetzungen beherrscht, aber kein Regex/Perl-Expression beherrscht und nur den ersten Treffer im Dateinamen ersetzt.

Das Kommando ist relativ einfach aufgebaut:

rename OPTIONS perlexpr [ files ]

Die wichtigste Option, das möchte ich vorab schon sagen, ist -n, da hiermit ein "Trockenlauf" durchgeführt und somit überprüft werden kann, ob das Muster auch passt. Darüber hinaus halte ich -v für die zweitwichtigste Option, da man im "scharfen" Lauf dann überwachen kann, was konkret umbenannt wurde. Das Muster selber wird als Perl-Expression übergeben, die in vielen Fallen an die Syntax vom Kommandozeilenwerkzeug sed für die Ersetzung von Text erinnert.

Das Kommando kann dann zum Beispiel so eingesetzt werden:

rename 's/TEst/Test/g' *.txt

Hier sollen alle Stellen mit "TEst" in den Dateinamen, die auf .txt enden, durch "Test" ersetzt werden. Mit einem klassischen mv ließe sich das nicht ohne weiteres umsetzen, da dieses Werkzeug nicht kontextbezogen ersetzen/umbenennen kann.

Natürlich können auch komplexere (Regex)-Muster umgesetzt werden: soll z. B. die Dateiendung aller Dateien, die auf ".htm" enden, in ".html" umbenannt werden, geht das mit folgendem Kommando:

rename 's/\.htm$/\.html/' .htm

Weitere Beispiele und Bedienungshinweise können aus dem Ubuntuusers-Wiki bezogen werden. Meiner Erfahrung nach spart das Werkzeug besonders viel Zeit bei Umbennungsaufgaben und ersetzt somit ggfs. eigene Skripte mit find-mv-Konstruktionen.

SHA-256 visualisiert

30. April 2022 um 19:52

Kryptographische Hashfunktionen sind ein wichtiger Grundpfeiler in der Kryptographie. Sie sind ein Spezialfall der normalen Hashfunktionen bzw. Streuwertfunktionen und ermöglichen die Erhaltung der Integrität von Informationen, insbesondere im Einsatz als Prüfsumme (engl. checksum). Die Kunst bei der Entwicklung einer kryptographischen Hashfunktion ist es, einerseits eine beliebig große Eingabemenge auf eine kleinere Zielmenge, bei der in der Regel die Elemente die gleiche Länge besitzen, abzubilden und andererseits darauf zu achten, dass es besonders schwer ist, zu einem beliebigen oder gegebenen Hashwert einen zweiten Eingabewert zu finden.

SHA-256 ist ein wichtiger Vertreter der modernen kryptographischen Hashfunktionen. Standardisiert wurde die Funktion u. a. in RFC 6234. Mein heutiger Webtipp sha256algorithm.com dreht sich um die Funktionsweise von SHA-256. Auf der Seite wird anschaulich dargelegt, wie eine Eingabe in die Ausgabe, den „Hash“ bzw. „Hashwert“ verwandelt wird. Dabei wird deutlich, dass die Funktionsweise mitunter deutlich komplexer erscheint, als angenommen – der Algorithmus aber trotzdem recht einfach ist und in knapp 160 Zeilen C-Code (hier ein Beispiel ohne Gewähr auf Standardkonformität) untergebracht werden kann.

Mir gefällt besonders die Interaktivität der Webseite. Eigene Eingaben können im ASCII/UTF-8-, Binär- oder Hexadezimalformat eingeben sowie verarbeitet und der Algorithmus Schritt für Schritt durchlaufen werden. Ebenfalls wird auf der Seite deutlich, dass die Zwischenwerte zum Erlangen des Hashwertes teilweise sehr durchmischt werden. Es lässt sich darüber hinaus erkennen, wie selbst eine „leere“ Eingabe so verarbeitet wird, dass ihre Ausgabe, der Hashwert, wenig Aufschluss über Wert und Beschaffenheit der zugrundeliegenden Eingabe bietet.

Wer genauere Details zu den verschiedenen SHA-Algorithmen sucht, kann im Anschluss im o. g. RFC-Dokument weiter fündig werden. Die Webseite hinter dem heutigen Webtipp wurde von Domingo Martin entwickelt, ihr Quelltext steht auf GitHub bereit.

Downloaddialog in Firefox 98 wieder anzeigen

20. März 2022 um 19:00

Nahezu jeden Monat erscheint ein neuer Release von Firefox, bei dem die Hauptversionsnummer inkrementiert wird. Meist betreffen die Änderungen interne Komponenten oder das Design, manchmal ändern sie aber auch die Verhaltensweise.

Letzteres ist mir in Firefox 98 aufgefallen. Das Changelog berichtet von einer Änderung im Downloadverhalten:

Firefox has a new optimized download flow. Instead of prompting every time, files will download automatically. However, they can still be opened from the downloads panel with just one click.

Hintergrund

Offenbar soll das Verhalten dem Chrome angepasst werden. Downloads werden also sofort abgespeichert, eine Option für einen "temporären Download" in ein Verzeichnis, das nach Beendigung des Browsers auch bereinigt wird, entfällt vordergründig.

In meinen Augen ist dies aus zwei Gründen ein Rückschritt:

  • Ich möchte bei einem Download vorher benachrichtigt werden, ob ich diesen weiterhin fortführen will. (Ja, ich weiß, intern lief der Download bereits, als dieser Dialog gezeigt wurde.)
  • Nicht jede Datei möchte ich final abspeichern, viele PDFs sollen lediglich nur in der Sitzung angezeigt werden. Die Integration von pdf.js war hier sehr charmant gelöst.

Besonders bei PDFs fällt mir das neue Verhalten negativ auf, da man nicht im Vorhinein sehen kann, ob ein Content-Disposition-Header mitgesendet wird. Mit diesem HTTP-Header kann nämlich serverseitig empfohlen werden, ob ein Inhalt wie z. B. ein Bild oder PDF lediglich dargestellt oder zum Download angeboten werden soll.

Altes Verhalten wiederherstellen

Leider hat sich Mozilla dazu entschieden, nicht dem klassischem Nutzer zu überlassen, wie Downloads stattfinden sollen, da eine Einstellungsoption für die Verhaltensweise (d. h. ob neu oder alt) fehlt. Glücklicherweise gibt es für versierte Anwender mittels about:config trotzdem (noch) die Möglichkeit, das alte Verhalten wiederherzustellen. Maßgeblich hierfür ist der Schlüssel browser.download.improvements_to_download_panel, dessen Wert standardmäßig true ist. Ändert man diesen in false, wird der Downloaddialog wieder angezeigt. Unabhängig von der Namenswahl, die leider viele Änderungen unter dem Begriff "improvements" zusammenfasst, muss man selbstverständlich wissen, dass diese Änderung (und somit das alte Verhalten) nicht mehr unterstützt ist und somit zukünftig auch entfernt werden könnte.

Einschätzung

Momentan lässt sich am Firefox der Trend beobachten, dass sich in vielen Funktionalitäten am Chrome/Chromium-Browser orientiert wird. Leider kommen dabei viele Besonderheiten unter die Räder, die die Personalisierbarkeit des Browsers erst ausgemacht haben. Zwar kann man grundsätzlich das permanente Downloadziel weiterhin einstellen, eine weitere Einstellungsmöglichkeit für temporäre Downloads würde einigen Anwendern aber entgegenkommen. Glücklicherweise lässt sich das Verhalten auch weiterhin intern einstellen, es ist aber fraglich, ob diese Option langfristig erhalten bleibt.

Weiterführende Links

Arch Linux wird 20 Jahre alt

11. März 2022 um 22:45

Kurz notiert: Arch Linux, die Linux-Distribution, die besonders durch ihr KISS-Prinzip bekannt geworden ist, feiert heute ihren 20. Geburtstag. Sie erblickte die Welt am 11. März 2002 mit dem Release der Version 0.1. Klassische (Major-)Releases gibt es bei Arch Linux nicht, da das Rolling-Release-Modell genutzt wird. Die "Versionen" fungieren dabei eher als Einstiegspunkt. Als Paketverwaltung kommt das eigene System pacman zum Einsatz. Bei Arch Linux stehen die Prinzipen der Einfachheit, Modernität, Benutzerorientierung, Vielseitigkeit und des Pragmatismus im Mittelpunkt. (siehe Wiki)

Wer mehr zur Geschichte von Arch Linux lernen will, kann einen Blick in das Arch Wiki sowie die heutigen Artikel auf Heise und LinuxNews werfen.

Ich selber habe Arch vor knapp 10 Jahren das erste Mal ausprobiert, damals noch mit initscripts und knapp vor der systemd-Umstellung – und bin bis heute der Distribution treu geblieben. Es wirkt, als würde die Zeit zu rasen beginnen, wenn man bedenkt, dass bei vielen, einschließlich mir, der Arch-Einstieg zeitlich näher am ersten Release zurückliegt, als am heutigen Tage.

In diesem Sinne: Happy Birthday, Arch Linux!

Debian/Ubuntu-Repositories von GitLab haben neuen Key

06. März 2022 um 16:05

Kurz angemerkt: beim Update eines GitLab-Servers per APT trat folgende Fehlermeldung auf:

The following signatures were invalid: EXPKEYSIG 3F01618A51312F3F GitLab B.V. (package repository signing key) <packages@gitlab.com>

Der Hintergrund ist recht einfach und wird auch auf der entsprechenden Hilfeseite erklärt:

This key’s expiration was extended from 2022-03-02 to 2024-03-01. If you encounter a complaint of expiration on 2022-03-02, perform the steps in Update keys after expiry extension to incorporate the updated public key content.

So lief tatsächlich der Repository Key in der Mitte der Woche regulär aus und muss nun erneuert bzw. aktualisiert werden, da seine Laufzeit erweitert wurde. Die Anleitung, wie man den Key aktualisieren kann, wird auf besagter Hilfeseite ebenfalls zur Verfügung gestellt. Danach verläuft das Upgrade wieder wie gehabt.

[GitLab.com Issue]

Rust 1.59 erschienen

28. Februar 2022 um 20:00

Kurz notiert: Rust ist in Version 1.59 erschienen. Die spannendste Neuerung ist hierbei aus meiner Sicht die Unterstützung für Inline-Assembly-Instructions. Dabei lassen sich innerhalb von Rust-Quellcodedateien Assembly-Instructions übergeben, die so in das Kompilat übernommen werden können. Dies ist immer dann nötig, wenn bestimmte Spezialbefehle benötigt werden, welche der Compiler nicht standardmäßig ausgibt.

Manuelle Assembler-Programmierung wird bei den meisten Programmen nicht benötigt. Beispiele sind eher vor allem in der Embedded-Programmierung zu finden, wo meist direkt Interrupts konfiguriert werden, die wiederum in vielen Architekturen über spezielle Operationen eingestellt werden können. Aber auch der Einsatz von SIMD benötigt spezielle Befehle. Dies ist besonders für Bibliotheken hilfreich, die Daten parallel verarbeiten.

Klassischerweise können die Assembler-Module in .S-Dateien geschrieben werden, welche dann, ähnlich wie C-Dateien, zu .o-Objektdateien assembliert resp. übersetzt werden. Verschiedene Objektdateien, welche auch aus unterschiedlichen Programmiersprachen stammen können, lassen sich dann zu einem Programm linken. Die Option von Assembler-Sektionen innerhalb einer höheren Programmiersprache vereinfacht den Umgang allerdings deutlich. So bietet auch GNU GCC für C ein spezielles asm-Keyword an, mit dem direkt Assembler-Befehle übergeben werden können. Mehr Informationen diesbezüglich bietet die GCC-Doku.

Das Rust By Example-Handbuch bietet eine eigenen neue Sektion zur Inline Assembly mit Beispielen an. Es lässt sich erkennen, dass es einige Parallelen zum C-Äquivalent gibt, obgleich die Syntax Unterschiede aufweist. Es ist möglich, ähnlich wie bei format-Strings, Zusatzinformationen zu Variablen und Registern zu übergeben. Dabei sollte jedoch bedacht werden, dass für den asm-Code natürlich keine strenge Typsicherheit gelten kann und der Einsatz nur innerhalb von unsafe-Blöcken möglich ist.

Weitere Änderungen in der neuen Rust-Version beziehen sich auf destructuring assignments und const generics-Standards und Verschachtelungen. Die destructuring assignments können bei der Lesbarkeit helfen, da mehrere Werte auf der rechten Seite mehreren Variablen auf der linken Seite in einem Statement zugewiesen werden können. Ähnliches ist man auch schon im Python mit dem Unpacking gewohnt.

Alles in allem aus meiner Sicht ein sehr spannender Release, der besonders die Entwickler von Bibliotheken freuen wird, da weitere Optimierungsmöglichkeiten komfortabler zur Verfügung stehen.

Wie funktioniert eigentlich... GPS?

31. Januar 2022 um 22:05

Zum Ende des Monats möchte ich euch diesen Webtipp nicht vorenthalten. Es gibt viele Webseiten, die Dinge gut und anschaulich erklären. Mitte des Monats bin ich jedoch auf einen Artikel gestoßen, der das richtig gut umsetzt: GPS von Bartosz Ciechanowski. Er hat eine interaktive Webseite gebaut, auf der die Funktionalität vom Global Positioning System (Wikipedia) erklärt wird. Von der Funktionsweise ist sie zwischen einer Physiksimulation und einem Spiel einzuordnen. Verständlich, anschaulich und „clean“ – das findet man heutzutage selten. Technisch ist das Ganze dabei offenbar in WebGL geschrieben.

Wer schon immer mal wissen wollte, wie Satellitennavigation funktioniert, findet auf der Webseite eine wunderschöne Erläuterung. Sicherlich einen Besuch wert.

Jahresrückblick 2021 und Ausblick

31. Dezember 2021 um 22:30

In wenigen Minuten endet 2021. Wagen wir deshalb einen kurzen Blick zurück und schauen, was uns erwartet.

Dieses Jahr habe ich im Blog 20 Artikel verfasst, bei denen ich überwiegend dem Open-Source-Schwerpunkt treu geblieben bin. Es gibt darüber hinaus eine komplett neue Kategorie „Wirtschaft“, die ich erstmals im Mai diesen Jahres ausprobiert habe. Hier soll es mehr um aktuelle Entwicklungen in der Wirtschaft, speziell bei Kryptowährungen und Smart Contracts, gehen. Bitcoin, Ethereum & Co. haben sowieso dieses Jahr dominiert und mehrfach neue Höchststände erreicht. Auch hier schreitet die Entwicklung schnell voran und wird uns in den nächsten Jahren begleiten.

Hier schließt nahtlos das Jahr 2022 an. Ich möchte diesen Blog kontinuierlich fortführen und weiterentwickeln. Selbstverständlich könnt ihr auch im kommenden Jahr spannende Artikel erwarten. Der Microblog wurde bereits in diesem Jahr tiefer in den Blog integriert, sodass die kürzeren Beiträge einfacher erreichbar werden. So sich die Gelegenheit bietet, wird der Microblog auch stärker ausgebaut.

Ich wünsche euch jedenfalls jetzt einen guten Rutsch und vor allem viel Gesundheit und Freude im Jahr 2022!

Bash-Kommandos erklären lassen

31. Dezember 2021 um 17:08

Wer Linux intensiv nutzt, wird um die Kommandozeile nicht herumkommen. Hier läuft meist eine Shell, die kompatibel zur Bash ist oder bei der es sich direkt um die Bash handelt.

Interessant bei Bash (und vielen anderen Shells) ist die Leistungsfähigkeit. So beschränkt sich die Kommandozeile nicht auf einfache Programmaufrufe, sondern bietet einige Ausdrücke, die in Verbindung mit kleinen Hilfsprogrammen unter anderem bedingte Anweisungen oder Schleifen ermöglichen. Leider ist die Syntax im Gegensatz zu anderen Skriptsprachen manchmal ungewohnt, weswegen unregelmäßige Anwender öfter mal in der Dokumentation nachlesen müssen.

Eine interessante Unterstützung bietet hierbei explainshell.com. Hier kann man einen Bash-Ausdruck eingeben und ihn sich von der Seite erklären lassen. Dabei werden nicht nur die Manpages der verwendeten Kommandos wie find, grep oder git, sondern auch die passenden Auszüge der bash-Manpage selber eingebunden. Dies wird zusätzlich anschaulich visualisiert.

Der Quellcode von explainshell.com ist GPL-3-lizenziert und auf GitHub verfügbar.

ssh-rsa bei OpenSSH 8.8 explizit aktivieren

30. November 2021 um 09:14

Im Februar 2020 wurde schon angekündigt, dass OpenSSH die Unterstützung von ssh-rsa auslaufen lässt. Umgesetzt wurde dies in Version 8.8, die vor gut einem Monat veröffentlicht wurde.

Leider unterstützt nicht jedes System moderne HostKeyAlgorithms. Ein solches Beispiel konnte ich die Tage z. B. bei einem Switch beobachten konnte. Hier erscheint folgender Fehler:

Unable to negotiate with 192.168.1.1 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

In so einem Fall kann man ausnahmsweise doch noch ssh-rsa erlauben und das geht entweder per Option im ssh-Aufruf:

ssh -o HostKeyAlgorithms=+ssh-rsa 192.168.1.1

oder man trägt es in die ~/.ssh/config dauerhaft ein:

Host XYZ
    HostName 192.168.1.1
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

realpath zeigt absolute Pfade an

31. Oktober 2021 um 17:42

Kurz notiert: es gibt Situationen, in denen man Pfade auflösen, also relative Pfade in absolute umwandeln möchte. Für Anwender, die dabei Konstruktionen mit pwd und kompliziertes Parsing umgehen wollen, bietet sich realpath aus den GNU Coreutils an.

Die Bedienung ist denkbar einfach: realpath nimmt beliebig viele Pfade als Argumente auf und gibt die absoluten Pfade zeilenweise aus. Dabei werden standardmäßig auch Symlinks aufgelöst, sodass der „wahre“ Pfad, im Programmkontext auch physischer Pfad genannt, angezeigt wird.

Mit einigen Zusatzoptionen, die sich in der Manpage realpath(1) finden lassen, kann weiterhin das Verhalten angepasst werden. Hier sei zum Beispiel -e erwähnt, das einen strikteren Modus aktiviert und überprüft, ob das letzte Element im Pfad überhaupt existiert – stanardmäßig ist dies nicht der Fall. Mit -s kann die bereits beschriebene Auflösung von Symlinks deaktiviert werden.

Alles in allem, ein hilfreiches Werkzeug, besonders für Shellscripte. Der Quelltext von realpath ist auch überschaubar und beispielsweise auf GitHub zu finden.

❌
❌