staging.inyokaproject.org

2024 Woche 36

8. September 2024

Bash vi-Modus

Ich arbeite ja viel in der Bash und nutze auch vim für die Textbearbeitung. Irgendwann kam mir die Idee, die Bash selbst mit vi-Befehlen zu steuern. Das ist tatsächlich möglich und spart eine Menge Zeit, wenn man die Tastenkombinationen erst einmal verinnerlicht hat.

Konfiguration

Bash kann mit vi-Befehlen gesteuert werden. Dazu muss lediglich entweder im Benutzerverzeichnis in die Datei .bashrc oder systemweit in die /etc/bash.bashrc eine Zeile eingetragen werden.

# Aktivieren des VI Modus -> Energie !
set -o vi

Konfiguration aktivieren

In der nächsten Session, zum Beispiel bei einem neuen Login, oder durch das Ausführen des Befehls source ~/.bashrc oder source /etc/bash.bashrc wird diese neue Einstellung aktiv.

Alternativ kann statt dem Befehl source auch der Befehl exec benutzt werden. Dieser ersetzt die aktuelle Shell mit einer komplett neuen Shell. Die alte Shell bleibt dann solange im Hintergrund, bis die neue Shell beendet wurde. Wie so eine Matrjoschka-Puppe.

vi-Modus aktivieren

Der vi-Modus wird aktiv, indem die ESC-Taste gedrückt wird. Und raus geht es wieder, indem i für Insert gedrückt wird. Oder es passiert automatisch, je nachdem welcher Befehl benutzt wurde, der dann automatisch in den INSERT- oder den APPEND-Modus wechselt. Also zurück in die alte Bash.

Das war schon alles. Aber hier noch zusätzlich ein paar nützliche Tastenkombinationen bei aktiviertem vi-Modus mit ESC als Bonus.

Navigation

  • 0 oder ^^ springt an den Anfang der Zeile
  • $ springt an das Ende der Zeile
  • w springt zum nächsten Wort
  • b springt ein Wort zurück (back)
  • k geht einen Eintrag zurück in der Bash-History (analog die Pfeil-runter-Taste in der Bash)
  • l geht einen Eintrag vorwärts in der Bash-History (analog die Pfeil-hoch-Taste in der Bash)

Suche

  • f ZEICHEN sucht das nächste Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens)
  • F ZEICHEN sucht das vorherige Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens)
  • ; wiederholt die vorherige Suche, vorwärts oder eben auch rückwärts

Editieren

  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • I springt an den Anfang der Zeile und wechselt zum INSERT-Modus (und beendet den vi-Modus)
  • A springt an das Ende der Zeile und wechselt in den APPEND-Modus (und beendet den vi-Modus)
  • cc löscht die komplette Zeile und wechselt in den INSERT-Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT-Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT-Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT-Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT-Modus
  • ea springt zum Ende des aktuellen Wortes und wechselt in den APPEND-Modus
  • r ersetzt exakt nur das Zeichen über dem Cursor (bleibt im vi-Modus)
  • R wechselt in den Überschreibe-Modus
  • ~ schaltet die Gross- und Kleinschreibung des Zeichens über dem Cursor um
  • xp löscht das aktuelle Zeichen, rückt alle nachfolgenden Zeichen eines nach links und fügt das gelöschte Zeichen nach dem einen nachgerückten Zeichen wieder ein. Beispiel mit dem Cursor auf dem e wird aus heir wird hier

Löschen

  • dd oder D löscht die komplette Zeile
  • dw löscht ab der aktuellen Cursorposition bis zum Wortende
  • bdw springt an den Anfang des Wortes und löscht dann das ganze Wort
  • bd4w springt an den Anfang des Wortes und löscht dann 4 ganze Wörter (Leerzeichen zählen als Wörter)
  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • cc löscht die komplette Zeile und wechselt in den INSERT-Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT-Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT-Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT-Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT-Modus

Copy und Paste

  • y kopiert das aktuelle Wort unter dem Cursor
  • y3w kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • by3w springt an den Wortanfang und kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • Y kopiert alles von der aktuellen Position bis zum Zeilenende
  • p fügt das zuvor Kopierte ab der aktuellen Cursorposition ein
  • P fügt das zuvor Kopierte vor der aktuellen Cursorposition ein

Quellen

Die Bash und vim sind als Open-Source-Software verfügbar.

Konfiguration

Bash kann mit vi Befehlen gesteuert werden. dazu muss lediglich entweder im Benutzerverzeichnis in die Datei .bashrc oder systemweit in die /etc/bash.basrc eine Zeile eingetragen werden

# Aktivieren des VI Modus -> Energie !
set -o vi

Konfiguration akvtieren

In der nächsten Session (z.B. neuer Login) oder durch das Ausführen des Befehls source ~/.bashrc oder source /etc/bash.basrc wird diese neue Einstellung aktiv. Alternativ kann statt dem Befehl source auch der Befehl exec benutzt werden. Dieser ersetzt die aktuelle Shell mit einer komplett neuen Shell. Die “alte” Shell bleibt dann solange im Hintergrund, bis die neue Shell beendet wurde. Wie so eine Matrjoschka Puppe.

vi Modus Aktivieren

Der vi Modus wird aktiv, indem die ESC Taste gedrückt wird. Und “raus” geht es wieder, indem i für Insert (Einfügen) gedrückt wird. Oder passiert automatisch, je nachdem welcher Befehl benutzt wurde, der dann automatisch in den INSERT oder den APPEND Modus wechselt. Also zurück in die alte Bash.

Das war schon alles. Aber hier noch zusätzlich ein paar nützliche Tastenkombination bei aktiviertem vi Modus ESC als Bonus:

Navigation

  • 0 oder ^^ springe an den Anfang der Zeile
  • $ springe an das Ende der Zeile
  • w springe zum nächsten Wort
  • b springe ein Wort zurück (back)
  • k gehe einen Eintrag zurück in der Bash History (analog die Pfeil runter Taste in der Bash)
  • l gehe einen Eintrag vorwärts in der Bash History (analog die Pfeil hoch Taste in der Bash)

Suche

  • f ZEICHEN sucht das nächste Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens!)
  • F ZEICHEN sucht das vorherige Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens!)
  • ; wiederholt die vorherige Suche. Vorwärts oder eben auch Rückwärts.

Editieren

  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • I springt an den Anfang der Zeile und wechselt zum INSERT Modus (und beendet den vi Modus)
  • A springt an das Ende der Zeile und wechselt in den APPEND Modus (und beendet den vi Modus)
  • cc löscht die komplette Zeile und wechselt in den INSERT Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT Modus
  • ea springt zum Ende des aktuellen Wortes und wechselt in den APPEND Modus
  • r ersetzt exakt nur das Zeichen über dem Cursor (bleibt im vi Modus)
  • R wechselt in den Überschreibe Modus
  • ~ schaltet die Groß/Kleinschreibung des Zeichens über dem Cursor um
  • xp löscht das aktuelle Zeichen, rückt alle nachfolgenden Zeichen eines nach links und fügt das gelöschte Zeichen nach dem einen nachgerückten Zeichen wieder ein. Beispiel mit dem Cursor auf dem e wird aus heir wird hier

Löschen

  • dd oder D löscht die komplette Zeile
  • dw löscht ab der aktuellen Cursorpostion bis zum Wortende
  • bdw springt an den Anfang des Wortes und löscht dann das ganze Wort
  • bd4w springt an den Anfang des Wortes und löscht dann 4 ganze Wörter (Leerzeichen zählen als Wörter)
  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • cc löscht die komplette Zeile und wechselt in den INSERT Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT Modus

Copy N Paste

  • y kopiert das aktuelle Wort unter dem Cursor
  • y3w kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • by3w springt an den Wortanfang und kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • Y kopiert alles von der aktuellen Position bis zum Zeilenende
  • p fügt das zuvor Kopierte ab der aktuellen Cursorposition ein
  • P fügt das zuvor Kopierte vor der aktuellen Cursorposition ein

Weitere Artikel hier zu vim

Konfiguration

Bash kann mit vi Befehlen gesteuert werden. dazu muss lediglich entweder im Benutzerverzeichnis in die Datei .bashrc oder systemweit in die /etc/bash.basrc eine Zeile eingetragen werden

# Aktivieren des VI Modus -> Energie !
set -o vi

Konfiguration akvtieren

In der nächsten Session (z.B. neuer Login) oder durch das Ausführen des Befehls source ~/.bashrc oder source /etc/bash.basrc wird diese neue Einstellung aktiv. Alternativ kann statt dem Befehl source auch der Befehl exec benutzt werden. Dieser ersetzt die aktuelle Shell mit einer komplett neuen Shell. Die „alte“ Shell bleibt dann solange im Hintergrund, bis die neue Shell beendet wurde. Wie so eine Matrjoschka Puppe.

vi Modus Aktivieren

Der vi Modus wird aktiv, indem die ESC Taste gedrückt wird. Und „raus“ geht es wieder, indem i für Insert (Einfügen) gedrückt wird. Oder passiert automatisch, je nachdem welcher Befehl benutzt wurde, der dann automatisch in den INSERT oder den APPEND Modus wechselt. Also zurück in die alte Bash.

Das war schon alles. Aber hier noch zusätzlich ein paar nützliche Tastenkombination bei aktiviertem vi Modus ESC als Bonus:

Navigation

  • 0 oder ^^ springe an den Anfang der Zeile
  • $ springe an das Ende der Zeile
  • w springe zum nächsten Wort
  • b springe ein Wort zurück (back)
  • k gehe einen Eintrag zurück in der Bash History (analog die Pfeil runter Taste in der Bash)
  • l gehe einen Eintrag vorwärts in der Bash History (analog die Pfeil hoch Taste in der Bash)

Suche

  • f ZEICHEN sucht das nächste Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens!)
  • F ZEICHEN sucht das vorherige Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens!)
  • ; wiederholt die vorherige Suche. Vorwärts oder eben auch Rückwärts.

Editieren

  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • I springt an den Anfang der Zeile und wechselt zum INSERT Modus (und beendet den vi Modus)
  • A springt an das Ende der Zeile und wechselt in den APPEND Modus (und beendet den vi Modus)
  • cc löscht die komplette Zeile und wechselt in den INSERT Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT Modus
  • ea springt zum Ende des aktuellen Wortes und wechselt in den APPEND Modus
  • r ersetzt exakt nur das Zeichen über dem Cursor (bleibt im vi Modus)
  • R wechselt in den Überschreibe Modus
  • ~ schaltet die Groß/Kleinschreibung des Zeichens über dem Cursor um
  • xp löscht das aktuelle Zeichen, rückt alle nachfolgenden Zeichen eines nach links und fügt das gelöschte Zeichen nach dem einen nachgerückten Zeichen wieder ein. Beispiel mit dem Cursor auf dem e wird aus heir wird hier

Löschen

  • dd oder D löscht die komplette Zeile
  • dw löscht ab der aktuellen Cursorpostion bis zum Wortende
  • bdw springt an den Anfang des Wortes und löscht dann das ganze Wort
  • bd4w springt an den Anfang des Wortes und löscht dann 4 ganze Wörter (Leerzeichen zählen als Wörter)
  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • cc löscht die komplette Zeile und wechselt in den INSERT Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT Modus

Copy N Paste

  • y kopiert das aktuelle Wort unter dem Cursor
  • y3w kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • by3w springt an den Wortanfang und kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • Y kopiert alles von der aktuellen Position bis zum Zeilenende
  • p fügt das zuvor Kopierte ab der aktuellen Cursorposition ein
  • P fügt das zuvor Kopierte vor der aktuellen Cursorposition ein

Weitere hyperblog Artikel zum Thema

vim

bash

Views: 86

Damit die Befehle verschiedener Terminal Sessions in der .bash_history gespeichert werden, muss Folgendes entweder in der user .bashrc (benutzerspezifisch) oder in der /etc/bash.bashrc(systemweit) eingetragen werden.

# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups

# big big history
export HISTSIZE=100000
export HISTFILESIZE=100000

# append history entries..
shopt -s histappend

# After each command, save and reload history
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Weitere hyperblog Artikel zum Thema

bash

tmux

Views: 112

Ich arbeite ja viel mit tmux und öffne dabei mehrere Terminal-Sessions gleichzeitig. Das Problem dabei ist, dass die Bash-History standardmässig nur die Befehle der zuletzt geschlossenen Session speichert. Alle anderen Befehle gehen verloren. Das ist ärgerlich, wenn man später nachvollziehen möchte, was man in welcher Session gemacht hat.

Damit die Befehle verschiedener Terminal-Sessions in der .bash_history gespeichert werden, muss Folgendes entweder in der Benutzer-.bashrc (benutzerspezifisch) oder in der /etc/bash.bashrc (systemweit) eingetragen werden.

# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups

# big big history
export HISTSIZE=100000
export HISTFILESIZE=100000

# append history entries..
shopt -s histappend

# After each command, save and reload history
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Was die Einstellungen bewirken

Die Zeile HISTCONTROL=ignoredups:erasedups sorgt dafür, dass doppelte Einträge vermieden werden. ignoredups ignoriert direkt aufeinanderfolgende Duplikate. erasedups entfernt alle früheren Duplikate, wenn ein Befehl erneut ausgeführt wird.

Mit HISTSIZE und HISTFILESIZE legst du fest, wie viele Befehle im Speicher und in der History-Datei gehalten werden. 100.000 Einträge sind grosszügig bemessen und reichen für die meisten Anwendungsfälle.

Der Befehl shopt -s histappend sorgt dafür, dass neue Einträge an die History-Datei angehängt werden, statt sie zu überschreiben.

Und der PROMPT_COMMAND ist das Herzstück. Nach jedem Befehl wird die History gespeichert, der Speicher geleert und die Datei neu eingelesen. Dadurch sind die Befehle aus allen Sessions sofort verfügbar.

Fazit

Mit diesen Einstellungen gehört der Verlust von Befehlen aus verschiedenen Terminal-Sessions der Vergangenheit an. Besonders bei tmux ist das eine enorme Erleichterung, weil man dort häufig mehrere Sessions parallel laufen hat.

Quellen

Die Bash ist als Open-Source-Software verfügbar.

Als mein Tuxedo AURA 15 Gen2 mit AMD Ryzen 7 5700U  Prozessor ein mechanisches Problem bekam und ich es zur Reparatur schicken musste, stand ich vor einem Dilemma: Was mache ich ohne mein gewohntes System?

Glücklicherweise habe ich die SSD M.2 aus dem Tuxedo ausgebaut und bin auf die Idee gekommen, diese am deutlich älteren Lenovo T480 mit WQHD-Display anzuschließen, das ich als Ersatzgerät nutze.

 

 

 

 

Von lewing@isc.tamu.edu Larry Ewing and The GIMP, Attribution, https://commons.wikimedia.org/w/index.php?curid=80930

 

 

Der große Test: Kann ich einfach die SSD über den USB3-Port an den Lenovo anschließen und booten? Immerhin sind die Unterschiede der Hardware nicht zu übersehen:

  • Der Tuxedo hat einen AMD Ryzen 7 5700U Prozessor, während der Lenovo mit einem Intel Core i5-8350U läuft.
  • Die Grafikkarten, die WiFi-Module und auch die Sound-Architektur sind unterschiedlich.

Und es funktioniert!

Trotz dieser Hardwareunterschiede bootete mein Debian Trixie auf dem Lenovo T480 ohne Probleme. Es war so, als ob das Betriebssystem gar nicht bemerkt hätte, dass es sich plötzlich in einer komplett anderen Umgebung befindet. WLAN, Grafik, Sound – alles funktionierte sofort und ohne zusätzliche Treiberinstallation oder Anpassungen.

Natürlich verstehe ich, dass das Konzept der Distribution hauptverantwortlich ist, denn die notwendigen Module sind immer mit an Bord, wenn man nicht selbst eingreift ...

Warum ich Linux (noch mehr) liebe

Dieser Moment hat mir erneut gezeigt, warum ich Linux und freie Open-Source-Software so liebe:

Sie ist flexibel, anpassungsfähig und läuft auf verschiedenster Hardware zuverlässig. Wo bei anderen Betriebssystemen oft lange Treiberinstallationen und nervige Konfigurationen nötig sind, geht bei Linux einfach alles reibungslos.

Ich bin begeistert und noch mehr davon überzeugt, dass Freie Software der richtige Weg ist. Sie bietet mir nicht nur die Freiheit, mein System so anzupassen, wie ich es will, sondern auch die Zuverlässigkeit, die man sich von einem Betriebssystem wünscht.

Siehe https://zockertown.de/s9y/index.php?/archives/1465-Warum-ich-Linux-und-Open-Source-so-liebe-Freie-Software.html

 

7. September 2024

Der Enterprise Policy Generator richtet sich an Administratoren von Unternehmen und Organisationen, welche Firefox konfigurieren wollen. Mit dem Enterprise Policy Generator 6.1 ist nun ein Update erschienen.

Enterprise Policy Generator

Download Enterprise Policy Generator für Firefox

Die Enterprise Policy Engine erlaubt es Administratoren, Firefox über eine Konfigurationsdatei zu konfigurieren. Der Vorteil dieser Konfigurationsdatei gegenüber Group Policy Objects (GPO) ist, dass diese Methode nicht nur auf Windows, sondern plattformübergreifend auf Windows, Apple macOS sowie Linux funktioniert.

Der Enterprise Policy Generator hilft bei der Zusammenstellung der sogenannten Enterprise Policies, sodass kein tiefergehendes Studium der Dokumentation und aller möglichen Optionen notwendig ist und sich Administratoren die gewünschten Enterprise Policies einfach zusammenklicken können.

Neuerungen vom Enterprise Policy Generator 6.1

Technische Verbesserungen der Erweiterung

Der Enterprise Policy Generator verfolgt einen selbst generierenden Ansatz, bei dem sich der Aufbau der Oberfläche, das Generieren der Datei policies.json, das Speichern und Laden sowie das Exportieren und Importieren von Konfigurationen vollständig automatisiert aus einer einzelnen internen Konfigurationsdatei ableitet. Zur Unterstützung neuer Unternehmensrichtlinien, welche sich bisher nicht abbilden ließen, wurde die Unterstützung für mehrere zusätzliche Richtlinien-Typen ergänzt.

Für URL-Felder wurde die Option hinzugefügt, eine sichere Verbindung (https://) zu erfordern, außerdem können Infolinks jetzt an weiteren Stellen ergänzt werden. Für Felder mit mehreren möglichen Werten, die per Plus-Symbol hinzugefügt werden können, ist es nun möglich, auch den letzten Wert wieder zu entfernen.

Neue und erweiterte Unternehmensrichtlinien

Neu ist die Unterstützung für die ManagedBookmarks-Richtlinie, um Lesezeichen zu konfigurieren, welche im Gegensatz zur bereits bestehenden Bookmarks-Richtlinie vom Benutzer weder verändert noch gelöscht werden können. Die Unterstützung für Lesezeichen-Ordner folgt mit einem zukünftigen Update.

Ebenfalls neu ist die Unterstützung für die AllowedDomainsForApps-Richtlinie, um Domains festzulegen, welche auf Google Workspace zugreifen dürfen, sowie für die AutoLaunchProtocolsFromOrigins-Richtlinie, um eine Liste externer Protokolle festzulegen, die von aufgelisteten Quellen aus verwendet werden können, ohne dass der Benutzer dazu aufgefordert wird.

Die OverrideFirstRunPage-Richtlinie wurde aktualisiert, um mehrere URLs zu erlauben. Bestehende Konfigurationen wurden automatisch auf die neue Version migriert.

Die Beschreibung der install_sources-Eigenschaft der ExtensionSettings-Richtlinie wurde überarbeitet und ein Infolink ergänzt, um klar zu machen, dass sogenannte Match Patterns in URLs erlaubt sind.

Optionen, welche noch den alten Weg nutzten, Einstellungen für about:config zu verändern, verwenden jetzt die neue Syntax der Preferences-Richtlinie, sodass hier keine Mischung aus alter und neuer Richtlinie mehr stattfindet.

Fehlerbehebungen

Ein großer Schwerpunkt lag auf der Behebung von Problemen in Zusammenhang mit der Handlers-Richtlinie, insbesondere dann, wenn diese in einer Konfiguration gespeichert und dann wieder aus der Konfiguration heraus geladen worden ist.

Außerdem war es bei der Preferences-Richtlinie trotz Validierung möglich, Optionen mit nicht erlaubtem Optionsnamen in einer Konfiguration zu speichern. Wurde eine solche Konfiguration dann geladen, wurde der ungültige Optionsname nicht beanstandet, obwohl Firefox die entsprechende Option nicht unterstützt.

Ausblick

Damit ist die Unterstützung aller Unternehmensrichtlinien bis einschließlich Firefox 78 komplett. Einzige Ausnahme ist die Ordner-Unterstützung für die MangedBookmarks-Richtlinie, welche nachgereicht werden wird. Schon bald wird der Enterprise Policy Generator 6.2.0 erscheinen, welcher die Unterstützung für alle neuen Richtlinien ergänzen wird, welche während der Lebenszeit von Firefox 91 dazugekommen sind. Danach folgen Enterprise Policy Generator 6.3.0 (Firefox 102) und Enterprise Policy Generator 6.4.0 (Firefox 115), ehe schließlich der Enterprise Policy Generator 7.0.0 Firefox 128 oder höher voraussetzen wird.

Entwicklung unterstützen

Wer die Entwicklung des Add-ons unterstützen möchte, kann dies tun, indem er der Welt vom Enterprise Policy Generator erzählt und die Erweiterung auf addons.mozilla.org bewertet. Auch würde ich mich sehr über eine kleine Spende freuen, welche es mir ermöglicht, weitere Zeit in die Entwicklung des Add-on zu investieren, um zusätzliche Features zu implementieren.

Der Beitrag Firefox: Enterprise Policy Generator 6.1 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

5. September 2024

Es gab mal eine Zeit, da waren URL shortener wie bit.ly und Ähnliche eine technische Notwendigkeit, weil Netzwerke wie Twitter eine sehr begrenzte Zeichenbegrenzung hatten.

Da ich hauptsächlich im Fediverse mit Friendica unterwegs bin, war eine Zeichenbegrenzung nie ein Thema. Auch wenn ich Lust hätte in einem Post die Bibel mehrfach abzutippen und zu kommentieren (Jesus likes this).

Also: warum nutze ich seit einiger Zeit wieder einen URL Shortener wie yourls ?

Drei Gründe:

  1. Im Internet gibt es das Recht auf Vergessen. Das wird dann aber nicht wirklich von vielen respektiert.
  2. Ich teile oft tolle Podcast und Videobeiträge der Öffentlich Rechtlichen, die leider nur eine sehr begrenzte Zeit online sein dürfen, bevor sie dann wieder gelöscht werden müssen. Depublizierungspflicht
  3. Ich lösche die meisten meiner Beiträge nach 90 Tagen. Danach liest das sowieso kein Mensch mehr, sondern nur noch irgendwelche Bots und andere Crawler.

Durch die Nutzung eines selbst gehosteten URL Shorteners habe ich selbst das Recht auf Vergessen in der Hand, denn die URLs verfallen auch nach einer von mir gewählten Zeit, also sind dann nicht mehr gültig und laufen ins Leere, bzw auf eine 404 Meldung.

PS: Das Plugin „expiry“ sorgt dafür, dass Einträge wieder entfernt werden. Hier ist die maximal Dauer auf 100 Tage gedeckelt. Wer eine längere Zeitdauer haben möchte, muss die Dauer in der Datei plugin.php direkt ändern.

Views: 15

4. September 2024

Die MZLA Technologies Corporation hat mit Thunderbird 128.2 ein planmäßiges Update für seinen Open Source E-Mail-Client veröffentlicht.

Neuerungen von Thunderbird 128.2

Mit dem Update auf Thunderbird 128.2 hat die MZLA Technologies Corporation ein planmäßiges Update für seinen Open Source E-Mail-Client veröffentlicht. Das Update bringt diverse Fehlerbehebungen und Verbesserungen unter der Haube, welche sich in den Release Notes (engl.) nachlesen lassen. Auch wurden diverse Sicherheitslücken geschlossen.

Der Beitrag Thunderbird 128.2 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

3. September 2024

Mozilla hat Firefox 130 für Windows, Apple macOS und Linux veröffentlicht. Dieser Artikel fasst die wichtigsten Neuerungen zusammen – wie immer auf diesem Blog weit ausführlicher als auf anderen Websites.

Download Mozilla Firefox für Microsoft Windows, Apple macOS und Linux

Verbesserungen der Übersetzungsfunktion

Firefox besitzt eine Übersetzungsfunktion für Websites, welche im Gegensatz zu Cloud-Übersetzern wie Google Translate lokal arbeitet, die eingegebenen Texte also nicht an einen fremden Server sendet. Dabei können wahlweise komplette Websites oder nur markierter Text übersetzt werden. Die Übersetzung von markiertem Text steht ab sofort auch unmittelbar nach einer vollständigen Website-Übersetzung zur Verfügung.

Firefox 130

Neben title und placebolder werden jetzt noch eine ganze Reihe weiterer HTML-Attribute übersetzt. Außerdem wurde die Übersetzungsqualität beim Vorkommen sogenannter bedingter Trennstriche verbessert.

Leichterer Vorab-Zugang zu kommenden Features

Im neuen Abschnitt „Firefox Labs“ der Firefox-Einstellungen lassen sich verschiedene Browser-Funktionen und Plattform-Features vorab aktivieren, an denen Mozilla arbeitet und deren standardmäßige Aktivierung für einen späteren Zeitpunkt geplant ist. Auf diese Weise kann Mozilla zusätzliches Feedback einholen, bevor neue Funktionen fertig sind und flächendeckend ausgerollt werden. Zwar gibt es mit about:config bereits einen Mechanismus zur Vorab-Aktivierung neuer Features, allerdings müssen die entsprechenden Optionsnamen dafür bekannt sein. Die Seite „Firefox Labs“ macht bestimmte Funktionen besser sichtbar und gibt dem Nutzer zusätzlich eine Beschreibung, teilweise auch mit erklärenden Links.

Firefox 130

KI-Chatbots

Eines der experimentellen neuen Features ist eine Chatbot-Integration. Dabei stehen Google Gemini, ChatGPT, HuggingChat, Anthropic Claude sowie Le Chat Mistral zur Verfügung. Die Chatbots können direkt über die Sidebar genutzt werden.

Über das Kontextmenü oder, falls über eine weitere Option aktiviert, eine Schaltfläche nach dem Markieren von Text können auch direkt Funktionen zur Zusammenfassung des markierten Inhalts, zur Vereinfachung der Sprache sowie zu einem Abfragen des Inhalts ausgewählt werden.

Firefox 130

Automatischer Bild-im-Bild-Modus bei Tabwechsel

Der sogenannte Bild-im-Bild-Modus erlaubt es, Videos von der Website loszulösen und über andere Tabs und sogar Anwendungen zu legen. Innerhalb des losgelösten Video-Fensters kann die Wiedergabe pausiert und wieder gestartet werden, man sieht den Wiedergabe-Fortschritt und kann an eine andere Stelle des Videos springen, ein Wechsel in den Vollbildmodus ist möglich, der Ton kann aus- und wieder eingeschaltet werden, die Lautstärke kann geändert werden und auch Untertitel werden auf vielen Plattformen unterstützt.

Über die „Firefox Labs“ kann eine neue Funktion aktiviert werden. Wird ein Video auf einer Website wiedergegeben, startet Firefox damit automatisch den Bild-im-Bild-Modus, wenn der Tab gewechselt wird. Sobald man wieder in den ursprünglichen Tab zurückkehrt, wird der Bild-im-Bild-Modus ebenso automatisch wieder beendet.

Automatischer Bild-im-Bild-Modus für Videos, Firefox 130

Lokale KI generiert Alternativtexte für Bilder in PDF-Dateien

PDF-Dateien betrachten ist in jedem Browser möglich. Firefox gehört zu den wenigen Browsern mit einem PDF-Editor. So kann auf PDF-Dateien gezeichnet werden, es können aber auch Texte und Bilder eingefügt werden.

Dabei besitzt Firefox bereits die Möglichkeit, einen Alternativtext für eingefügte Bilder zu hinterlegen. Dies ist aus Gründen der Barrierefreiheit wichtig, damit die Bildinformation auch für Menschen mit eingeschränkten Sehfähigkeiten bis hin zur Blindheit zugänglich bleibt.

Eine lokale KI kann den Anwender ab Firefox 130 dabei unterstützen. Damit schlägt Firefox basierend auf dem Bildinhalt automatisch einen Beschreibungstext für das hinterlegte Bild vor. Lokale KI bedeutet, dass sich Firefox das entsprechende KI-Modell bei der ersten Verwendung des Features herunterlädt und die Arbeit dann auf dem Gerät des Anwenders geschieht. Die eingefügten Bilder werden also zu keinem Zeitpunkt an Mozilla oder eine Drittanbieter-Cloud gesendet.

Firefox 130

Diese Neuerung wird schrittweise im Laufe der kommenden Wochen für alle Nutzer ausgerollt werden.

Zur manuellen Aktivierung müssen drei Schalter per about:config auf true gesetzt werden: browser.ml.enable, pdfjs.enableAltText und pdfjs.enableUpdatedAddImage. Die Vorschläge werden derzeit noch in englischer Sprache generiert.

Wetter und Hintergründe für Firefox-Startseite

Die Firefox-Startseite lässt sich jetzt auf Wunsch mit einem Hintergrundbild oder einer Hintergrundfarbe nutzen.

Für Nutzer in den USA und Kanada wird auf der Firefox-Startseite standardmäßig das Wetter angezeigt. Aber auch alle anderen können dieses Feature via about:config aktivieren, indem der Schalter browser.newtabpage.activity-stream.system.showWeather per Doppelklick auf true gesetzt wird.

Firefox 130

Personalisierung der Pocket-Empfehlungen auf Firefox-Startseite

Ein weiteres neues Feature für die Firefox-Startseite ist die optionale Personalisierung der Pocket-Empfehlungen. Dabei stehen die folgenden Kategorien zur Auswahl: Geschäftliches, Unterhaltung, Essen, Gesundheit, Finanzen, Politik, Sport, Technik, Reisen, Wissenschaft sowie Life-Hacks.

Firefox 130

Diese Neuerung wird schrittweise im Laufe der kommenden Wochen für alle Nutzer ausgerollt werden.

Nutzer in den USA, Kanada und Großbritannien erhalten dieses Feature zuerst. Aber auch alle anderen können dieses Feature via about:config aktivieren, indem der Schalter browser.newtabpage.activity-stream.discoverystream.topicSelection.enabled per Doppelklick auf true gesetzt wird.

Sonstige Endnutzer-Neuerungen von Firefox 130

Der sogenannte Overscroll-Effekt, der in Firefox auf Windows und macOS bereits seit langer Zeit aktiviert ist, ist nun auch auf Linux standardmäßig aktiviert. Dieser Effekt beschreibt das Verhalten, welches zu beobachten ist, wenn man über den Seitenanfang respektive das Seitenende hinaus scrollt.

Das bereits lange bestehende Problem, dass der Eintrag „Kopieren“ im Kontextmenü unter bestimmten Umständen manchmal ausgegraut war, wurde behoben.

Erweiterungen lösen nicht länger auf Websites den Berechtigungs-Indikator (blauer Punkt) in der Schaltfläche für das Erweiterungs-Menü aus, wenn die entsprechende Host-Berechtigung als optional deklariert ist.

Die Schaltfläche für die Aktivierung des Bild-im-Bild-Modus wurde für Hulu anders positioniert, um nicht hinter anderen Elementen des Videoplayers verdeckt zu sein.

Die Wiedergabe von AV1-Videos auf Windows-Systemen mit ARM-CPU wurde aktiviert.

Die Funktion zur Aufnahme eines Bildschirmfotos kann jetzt auch Elemente auswählen, welche sich innerhalb des sogenannten Shadow DOMs einer Website befinden.

Die Texte der Einstellungen für den Nur-HTTPS-Modus wurden vereinfacht und stellen nun klar, dass Firefox auch bei abgeschaltetem Nur-HTTPS-Modus zunächst eine Verbindung via HTTPS versucht.

Mehr Sicherheit für Firefox-Nutzer

Auch in Firefox 130 wurden wieder mehrere Sicherheitslücken geschlossen. Alleine aus Gründen der Sicherheit ist ein Update auf Firefox 130 daher für alle Nutzer dringend empfohlen.

Verbesserungen der Entwicklerwerkzeuge

Im Responsive Design Modus werden nicht länger automatisch der User-Agent und die Touch-Simulation zurückgesetzt, wenn man die Fenstergröße ändert.

Bei geöffneten Entwicklerwerkzeugen zeigt Firefox während des Veränderns der Fenstergröße die aktuelle Fenstergröße in der oberen rechten Ecke an.

Per Doppelklick auf ein Element im Inspektor lassen sich dort jetzt auch zusätzliche Attribute ergänzen.

Verbesserungen der Webplattform

Das name-Attribut des <details>-Elements erlaubt die Gruppierung von Elementen, bei denen nur ein Element einer Gruppe gleichzeitig offen sein kann. Ein Anwendungsfall hierfür sind Akkordeons, ohne dass dafür JavaScript benötigt wird.

Die hyphens-Eigenschaft in CSS funktioniert nun auch für Tschechisch und Slowakisch korrekt.

Firefox 130 unterstützt außerdem die WebCodecs API.

Dies war nur eine kleine Auswahl der Verbesserungen der Webplattform. Eine vollständige Auflistung lassen sich in den MDN Web Docs nachlesen.

Der Beitrag Mozilla veröffentlicht Firefox 130 erschien zuerst auf soeren-hentzschel.at.

2. September 2024

In diesem Beitrag erkläre ich kurz, was Ansible Lint ist und demonstriere dessen Anwendung am Beispiel meiner Ansible Collection tronde/nextcloud.

Er richtet sich primär an Personen, die mit Ansible Lint noch nicht vertraut sind. Linting-Profis werden vermutlich keine neuen Erkenntnisse gewinnen.

Was ist Ansible Lint und wofür ist es gut?

Lint (englisch für „Fussel“) ist eine Software zur statischen Code-Analyse. Davon abgeleitet hat sich das Verb linten (englisch to lint) für das Durchführen der statischen Code-Analyse etabliert.

https://de.wikipedia.org/wiki/Lint_(Programmierwerkzeug)

Dem obigen Zitat und der Projektdokumentation folgend, ist Ansible Lint dementsprechend ein Werkzeug zur statischen Code-Analyse von Ansible Playbooks, Roles und Collections. Mit der Anwendung dieses Werkzeugs auf die eigenen Ansible-Inhalte kann sichergestellt werden, dass diese gängigen Konventionen und Standards entsprechen.

Wie wird Ansible Lint installiert?

Die Dokumentation beschreibt verschiedene Installationsverfahren. Ich habe ansible-lint als Bestandteil der Ansible Development Tools (ADT) installiert. Dies ist ein Werkzeugkasten mit weiteren Programmen wie z.B. `ansible-core` und Ansible Molecule, welche ich für die Entwicklung meiner Ansible Collection nutze.

Auf meiner Fedora Workstation habe ich die ADT wie folgt installiert:

~]$ mkdir venv
~]$ cd venv
venv]$ ]$ python -m venv adt
venv]$ source adt/bin/activate
(adt) venv]$ pip install pip --upgrade
Requirement already satisfied: pip in ./adt/lib64/python3.12/site-packages (23.3.2)
Collecting pip
  Using cached pip-24.2-py3-none-any.whl.metadata (3.6 kB)
Using cached pip-24.2-py3-none-any.whl (1.8 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.3.2
    Uninstalling pip-23.3.2:
      Successfully uninstalled pip-23.3.2
Successfully installed pip-24.2
(adt) venv]$  pip install ansible-dev-tools
Collecting ansible-dev-tools
  Using cached ansible_dev_tools-24.7.2-py3-none-any.whl.metadata (11 kB)
… Ausgabe gekürzt
(adt) venv]$ adt --version
ansible-builder                          3.1.0
ansible-core                             2.17.3
ansible-creator                          24.7.1
ansible-dev-environment                  24.7.0
ansible-dev-tools                        24.7.2
ansible-lint                             24.7.0
ansible-navigator                        24.8.0
ansible-sign                             0.1.1
molecule                                 24.8.0
pytest-ansible                           24.8.0
tox-ansible                              24.8.0

Ansible Lint liefert eine ganze Reihe von Profilen mit, welche Autoren unterstützen, die Code-Qualität schrittweise zu verbessern. Der Befehl ansible-lint --list-profiles gibt die verfügbaren Profile mit einer Beschreibung aus.

Ich werde im Folgenden mit dem Profil shared arbeiten, welches für Autoren gedacht ist, die ihre Collection auf https://galaxy.ansible.com veröffentlichen möchten.

Eine Collection linten

Bevor es zur Sache geht, wechsel ich in das Projektverzeichnis meiner Ansible Collection und erstelle einen neuen Branch, mit dem Befehl git checkout -b lint. Die in meinem Repo vorhandene Datei .ansible-lint-ignore lösche ich, da ich im folgenden alle Fehler und Regelverstöße sehen möchte. Zu Beginn stellt sich mein Arbeitsverzeichnis wie folgt dar:

(adt) nextcloud]$ git status
On branch lint
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    .ansible-lint-ignore

no changes added to commit (use "git add" and/or "git commit -a")

Das Programm ansible-lint besitzt mit der Option --fix die Fähigkeit, Fehler automatisch zu korrigieren und auch YAML-Dateien neu zu formatieren. Der folgende Code-Block umfasst die gekürzte Ausgabe, wenn das Kommando ansible-lint --profile=shared --fix im Arbeitsverzeichnis ausgeführt wird.

(adt) nextcloud]$ ansible-lint --profile=shared --fix
WARNING  Listing 37 violation(s) that are fatal
galaxy[no-changelog]: No changelog found. Please add a changelog file. Refer to the galaxy.md file for more info.
galaxy.yml:1

var-naming[pattern]: Variables names should match ^[a-z_][a-z0-9_]*$ regex. (NC_HTML) (vars: NC_HTML)
roles/backup_restore_nextcloud/defaults/main.yml:4

…

risky-file-permissions: File permissions unset or incorrect.
roles/backup_restore_nextcloud/tasks/main.yml:18 Task/Handler: Copy backup files to container host

no-changed-when: Commands should not change things if nothing needs doing.
roles/backup_restore_nextcloud/tasks/main.yml:40 Task/Handler: Import tarball contents into an existing podman volume

no-changed-when: Commands should not change things if nothing needs doing.
roles/backup_restore_nextcloud/tasks/main.yml:54 Task/Handler: Export podman volumes to tarballs

var-naming[pattern]: Variables names should match ^[a-z_][a-z0-9_]*$ regex. (MYSQL_DATABASE) (vars: MYSQL_DATABASE)
roles/deploy_nextcloud_with_mariadb_pod/defaults/main.yml:13

…

Read documentation for instructions on how to ignore specific rule violations.

Modified 6 files.
                     Rule Violation Summary                      
 count tag                    profile rule associated tags       
    33 var-naming[pattern]    basic   idiom                      
     1 risky-file-permissions safety  unpredictability           
     1 galaxy[no-changelog]   shared  metadata                   
     2 no-changed-when        shared  command-shell, idempotency 

Failed: 37 failure(s), 0 warning(s) on 25 files. Profile 'shared' was required, but 'min' profile passed.

Obige Ausgabe:

  • Benennt Funde mit Pfadangabe und Zeilennummer
  • Führt 37 Fehler auf, inkl. der Regeln, die nicht eingehalten werden; Beispiele
    • galaxy[no-changelog]: No changelog found. Please add a changelog file. Refer to the galaxy.md file for more info.
    • risky-file-permissions: File permissions unset or incorrect.
    • no-changed-when: Commands should not change things if nothing needs doing.
    • var-naming[pattern]: Variables names should match ^[a-z_][a-z0-9_]*$ regex.
  • Informiert, dass ansible-lint Änderungen an 6 Dateien vorgenommen hat

Mit git diff verschaffe ich mir einen Überblick, welche Änderungen ansible-lint vorgenommen hat. Dies sind in meinem Fall:

  • Quoting von Strings
  • Einrückung von Kommentaren

Als Nächstes sehe ich mir die übrigen Fehler der Reihe nach an. Die Dokumentation beinhaltet eine Übersicht mit Beschreibungen der einzelnen Regeln. Dies ist nützlich, wenn der kurze Text in der Ausgabe von ansible-lint nicht ausreichend ist.

galaxy[no-changelog]: No changelog found. Please add a changelog file.

Unter Galaxy: Changelog Details finden sich Hinweise, wie dieser Fehler zu beheben ist. Ich erstelle die leere Datei CHANGELOG.md im Wurzelverzeichnis meiner Collection und der Fehler ist abgestellt.

Natürlich werde ich diese Datei zukünftig nutzen, um die wichtigsten Änderungen zu dokumentieren. ;-)

risky-file-permissions: File permissions unset or incorrect.

Auch hier habe ich kurz in der Dokumentation unter risky-file-permissions nachgesehen. Den Fehler habe ich abgestellt, indem ich den Parameter mode: 0600 zum Task hinzugefügt habe.

Dies war ein Flüchtigkeitsfehler, wie er häufig passieren kann, wenn man seinen Code nicht konsequent überprüft. Ohne den Dateimode explizit zu setzen, kann dies zu unvorhersehbaren bzw. überraschenden Verhalten führen.

no-changed-when: Commands should not change things if nothing needs doing.

An zwei Stellen bin ich leider nicht herumgekommen, das ansible.builtin.command Modul zu verwenden, da kein natives Modul für diese Aufgabe existiert. Betrachtet man sich die beiden Tasks fällt auf, dass diese jedes Mal Daten verarbeiten werden. Sie sind nicht idempotent. Im Ergebnis können sie erfolgreich sein oder fehlschlagen, aber sie werden immer Daten verarbeiten und dadurch ändern.

 41     - name: Import tarball contents into an existing podman volume
 42       ansible.builtin.command:
 43         cmd: |
 44           podman volume import
 45           {{ item }} {{ backup_restore_nextcloud_import_path }}/{{ item }}.tar
 46       loop:
 47         - "{{ NC_HTML }}"
 48         - "{{ NC_APPS }}"
 49         - "{{ NC_CONFIG }}"
 50         - "{{ NC_DATA }}"
 51         - "{{ MYSQL_DATA }}"
 52            
 53 # I need to use the command module as the volume module lacks the functionality
 54 # to export podman volumes.
 55 - name: Export podman volumes to tarballs
 56   ansible.builtin.command:
 57     cmd: podman volume export {{ item }} --output {{ backup_restore_nextcloud_export_path }}/{{ item }}.tar
 58   loop:    
 59     - "{{ NC_HTML }}"
 60     - "{{ NC_APPS }}"
 61     - "{{ NC_CONFIG }}"
 62     - "{{ NC_DATA }}"
 63     - "{{ MYSQL_DATA }}"
 64   tags:    
 65     - never
 66     - backup

Um herauszufinden, wie ich ansible-lint zufriedenstellen kann, schaue ich wieder in der Doku unter no-changed-when nach. Nach der dortigen Beschreibung ist mein Fehler, dass ich den Rückgabewert des Kommandos nicht behandel. Daher registriere ich nun eine Variable je Task, die die Task-Ausgabe aufnimmt und prüfe den Rückgabewert. Ist der Rückgabewert gleich 0 wird der Task-Status auf changed gesetzt, ist der Rückgabewert ungleich 0 wird der Status entsprechend auf failed gesetzt. Das ganze sieht nun wie folgt aus:

 41     - name: Import tarball contents into an existing podman volume
 42       ansible.builtin.command:
 43         cmd: |
 44           podman volume import
 45           {{ item }} {{ backup_restore_nextcloud_import_path }}/{{ item }}.tar
 46       register: __import_tar_output
 47       changed_when: __import_tar_output.rc == 0
 48       failed_when: __import_tar_output.rc != 0
 49       loop:
 50         - "{{ NC_HTML }}"
 51         - "{{ NC_APPS }}"
 52         - "{{ NC_CONFIG }}"
 53         - "{{ NC_DATA }}"
 54         - "{{ MYSQL_DATA }}"
 55  
 56 # I need to use the command module as the volume module lacks the functionality
 57 # to export podman volumes.
 58 - name: Export podman volumes to tarballs
 59   ansible.builtin.command:
 60     cmd: podman volume export {{ item }} --output {{ backup_restore_nextcloud_export_path }}/{{ item }}.tar
 61   register: __import_tar_output
 62   changed_when: __import_tar_output.rc == 0
 63   failed_when: __import_tar_output.rc != 0
 64   loop:
 65     - "{{ NC_HTML }}"
 66     - "{{ NC_APPS }}"
 67     - "{{ NC_CONFIG }}"
 68     - "{{ NC_DATA }}"
 69     - "{{ MYSQL_DATA }}"
 70   tags:
 71     - never
 72     - backup

Collection-intern verwendete Variablen leite ich mit zwei Unterstrichen (‚_‘) ein, um mir zu verdeutlichen, dass diese nicht durch den Nutzer gesetzt werden und daher auch nicht im README.md oder defaults/main.yml dokumentiert sind.

var-naming[pattern]: Variables names should match ^[a-z_][a-z0-9_]*$ regex.

Hier brauche ich nicht weiter nachzuschlagen. Ich verstoße gegen diese Regel, da ich meine Variablen-Namen großgeschrieben habe. Die Ausgabe von ansible-lint zeigt dies deutlich:

var-naming[pattern]: Variables names should match ^[a-z_][a-z0-9_]*$ regex. (NC_HTML) (vars: NC_HTML)
roles/backup_restore_nextcloud/defaults/main.yml:4

Diese Meldungen lassen sich mit folgendem Bash-Einzeiler abstellen:

$ for text in $(cut -d':' -f 1 roles/deploy_nextcloud_with_mariadb_pod/defaults/main.yml | grep -v '^$\|^#\|---'); do find roles -type f -iname "*.yml" | xargs sed -i -e "s/$text/\L&/g"; done

Aus verschiedenen Gründen hebe ich mir die Überarbeitung für später auf und nutze die Meldung, um zu demonstrieren, wie man ansible-lint dazu bringt, bestimmte Fehler zu ignorieren.

Um Regeln für ausgewählte Dateien zu ignorieren, spezifiziert man den jeweiligen Dateinamen und den Namen der Regel in der Datei .ansible-lint-ignore, welche im Wurzelverzeichnis der Collection erstellt wird:

nextcloud]$ cat .ansible-lint-ignore 
roles/deploy_nextcloud_with_mariadb_pod/defaults/main.yml var-naming[pattern]
roles/backup_restore_nextcloud/defaults/main.yml var-naming[pattern]

Zweiter Durchgang mit ansible-lint

Damit habe ich alle Probleme, die im ersten Durchlauf von ansible-lint gefunden wurden, adressiert. Ein zweiter Durchlauf zeigt das Ergebnis meiner Arbeit:

(adt) nextcloud]$ ansible-lint --profile=shared
WARNING  Listing 33 violation(s) marked as ignored, likely already known
var-naming[pattern]: Variables names should match ^[a-z_][a-z0-9_]*$ regex. (NC_HTML) (vars: NC_HTML) (warning) # ignored
roles/backup_restore_nextcloud/defaults/main.yml:4

…Ausgabe gekürzt

WARNING  Listing 1 violation(s) that are fatal
yaml[octal-values]: Forbidden implicit octal value "0600"
roles/backup_restore_nextcloud/tasks/main.yml:22

Read documentation for instructions on how to ignore specific rule violations.

                Rule Violation Summary                 
 count tag                profile rule associated tags 
     1 yaml[octal-values] basic   formatting, yaml     

Failed: 1 failure(s), 33 warning(s) on 27 files. Profile 'shared' was required, but 'min' profile passed.

Die ignorierten Regelverstöße werden als Warnung weiterhin ausgegeben, nehmen jedoch keinen Einfluss auf die abschließende Bewertung. Dafür habe ich einen neuen Fehler (yaml[octal-values]) eingebaut. Nach dem aktuellen Regelwerk erfordern oktale Werte ein explizites Quoting, um als Strings verarbeitet zu werden.

Nachdem ich das Problem mit mode: '0600' behoben habe, endet ein weiterer Lauf von ansible-lint schlussendlich mit:

Passed: 0 failure(s), 33 warning(s) on 27 files. Profile 'shared' was required, but 'production' profile passed.

Damit erfüllt meine Collection aktuell sogar die Anforderungen des nächst höheren Profils production; allerdings nur, weil ich einige Regeln bewusst ignoriere. Daher ist aktuell noch nicht sichergestellt, dass meine Collection tatsächlich bei einem Import auf Ansible Galaxy akzeptiert wird.

Zusammenfassung

  • Ansible Lint ist ein Werkzeug zur statischen Analyse von Ansible Playbooks, Roles und Collections
  • Das Werkzeug unterstützt Autoren dabei, gängige Konventionen und Standards einzuhalten und die Qualität des eigenen Codes auf einem Mindest-Niveau zu halten
  • Ansible Lint bietet mehrere Profile für verschiedene Anwendungsfälle
  • Regeln können bei Bedarf ignoriert werden, was zwar das Ergebnis des Linting beeinflusst, die Qualität jedoch nicht steigert
  • Linting sollte fester Bestandteil des eigenen Entwicklungsworkflows sein und stets nach Änderungen durchgeführt werden

Ich persönlich führe ansible-lint gern in einem eigenständigen Schritt aus. Es besteht jedoch auch die Möglichkeit, dies in den verwendeten Editor, die genutzte IDE oder Molecule zu integrieren und bei Änderungen automatisch laufen zu lassen.

Ich freue mich, wenn euch dieser Artikel gefallen hat.

Quellen und weiterführende Links