staging.inyokaproject.org

2024 Woche 34

25. August 2024

Eigentlich hiess der Titel Firefox Tab ImagePreview und Tab Info ausstellen. Aber das entwickelte sich wieder zu einer Odyssee. Legen wir das mal wieder ab in die Kategorie toxisch passiv-aggressiver Programmierer-Bullshit. Oder eventuell einfach nur nach Hanlons Rasiermesser.

Geh nicht von Böswilligkeit aus, wenn Dummheit genügt.

Was der Stein des Anstosses ist

Bei Firefox gab es ein neues Feature Tab Preview als Bild und Texttafel gleichzeitig. Und das wurde natürlich gleich mal standardmässig bei der Aktualisierung aktiviert. Da ich aber überhaupt kein Freund von alle Features default an bin, wer denkt sich eigentlich so einen kontraproduktiven Quatsch aus, wollte ich das gleich wieder ausschalten.

So ein unnötiges Blingbling, das für 20 Sekunden nett ist, aber dann nur noch Strom und CPU frisst und dann auch noch meistens im Weg ist, will ich einfach nicht haben. Skaliert man das mal auf alle Firefox-Installationen weltweit hoch, könnte mal jemand ausrechnen, wieviel Strom das verbraucht. Ja, auch Kleinvieh macht Mist. Zurück zum Thema.

Also im Netz gesucht und gefunden, dass ich per about:config die beiden folgenden Schlüssel auf false setzen muss.

Eigentlich hieß der Titel Firefox Tab ImagePreview und Tab Info ausstellen. Aber das entwickelte sich wieder zu einer Odyssee. Legen wir das mal wieder ab in die Kategorie toxisch passiv-aggressiver Programmierer Bullshit.

Oder eventuell einfach nur nach Hanlons Rasiermesser

„Geh nicht von Böswilligkeit aus, wenn Dummheit genügt“

Was ist der Stein des Anstoßes?

Bei Firefox gab es ein neues Feature Tab Preview als Bild und Texttafel … gleichzeitig. Und das wurde natürlich gleich mal standardmäßig bei der Aktualisierung aktiviert. Da ich aber überhaupt kein Freund von ALLE FEATURES DEFAULT AN bin … wer denkt sich eigentlich so einen kontraproduktiven Quatsch aus?! …. wollte ich das gleich wieder ausschalten.

RANT: So ein unnötiges Blingbling, das für 20 Sekunden nett ist, aber dann nur noch Strom und CPU frisst und dann auch noch meistens im Weg ist, will ich einfach nicht haben. Skaliert man das mal auf alle Firefox Installationen weltweit hoch, könnte mal jemand ausrechnen wieviel Strom das verbraucht. Ja, auch Kleinvieh macht Mist. Zurück zum Thema.

Also Im Netz gesucht und gefunden, dass ich per about:config die beiden folgenden Schlüssel auf false setzen muss.

browser.tabs.hoverPreview.enabled      false 
browser.tabs.hoverPreview.showThumbnails    false

Klickklicklick, Gesagt getan, nach einem Firefox Neustart war zwar das Vorschaubild weg, aber diese zusätzliche Texttafel war immer noch da. Nochmal per about:config die beiden Schlüssel angeschaut und gesehen, dass browser.tabs.hoverPreview.enabled wieder auf truestand.

„Long sorry sport“ oder auf norddeutsch „kurz gesagt“ :

Firefox muss es explizit verboten werden eine manuelle Änderung automatisch wieder zu ändern. Aber nur Bestimmte. Die nicht extra ausgewiesen sind. #ohrfeigendienstag

Das Ganze geht dann so

Die Datei /etc/firefox/syspref.js muss mit root Rechten mit einem Editor bearbeitet werden.

Und dann trägt man dort zusätzlich folgende zwei Zeilen, am besten ganz unten, wenn da schon was stehen sollte ein, speichert das und startet Firefox neu.

pref("browser.tabs.hoverPreview.enabled",false, locked);
pref("browser.tabs.hoverPreview.showThumbnails",false, locked);

Der Charme dieser Lösung ist, dass ich diese Datei einfach nur auf jeden Computer rüber kopieren muss, ohne nochmal Hand an Firefox selbst anzulegen.

Die Info bekam ich mit freundlicher Hilfe aus dem Fediverse und die Quelle ist askubuntu.com und funktionierte auf jeden Fall mit Firefox 129.

Weitere hyperblog Artikel zum Thema

Firefox

Views: 34

Ich habe mir das neue Google Pixel 9 als Ersatz für mein Pixel 6 bestellt. GrapheneOS war bereits wenige Tage nach der Markteinführung für die 9er-Serie verfügbar. Im Gegensatz zum Pixel 6 habe ich diesmal den Web-Installer ausprobiert. Fazit: Es ist wirklich narrensicher!

Muss ich von Pixel 6 auf Pixel 9 aktualisieren? Nein, eigentlich nicht. Die technische Entwicklung ist überschaubar und ein Pixel 6 sollte für die meisten Anwendungsszenarien ausreichen. Meins war einfach in jeder Hinsicht „durch“. Für mich sind Smartphones Gebrauchsgegenstände und nach ein paar Jahren sehen sie leider auch so aus. Der Akku dann auch. Kurzum: Ich habe auf die neue Pixel-Generation gewartet. Das neue Design ist auch schön. Ansonsten aber fast gleich groß und gleich schwer. Nach der Einrichtung sieht das System logischerweise auch identisch aus. Wow-Effekt? Fehlanzeige!

Voraussetzung für den Web Installer ein aktuelles Betriebssystem. Bei Linux also keine ganz alten LTS-Systeme. Einige Systeme werden offiziell gelistet, aber z.B. openSUSE Tumbleweed funktioniert auch. Wichtig sind installierte Android-udev-Regeln, damit der Rechner ohne Root-Rechte mit dem Android-Smartphone kommunizieren kann. Als Browser muss ein aktueller Chromium oder Brave verwendet werden.

Danach ist der Prozess ganz einfach. Im Stock Android von Google die OEM-Optionen aktivieren, das Smartphone in den Bootloader schicken und dann die vier Buttons auf der Webseite in der vorgegebenen Reihenfolge anklicken:

  • Bootloader entsperren (muss auf dem Smartphone bestätigt werden)
  • Aktuelles GrapheneOS-Image herunterladen (dauert je nach Internetverbindung)
  • System flashen (dauert ein bisschen)
  • Bootloader sperren (muss auf dem Smartphone bestätigt werden)

Danach kann mit der Einrichtung des neuen Smartphones begonnen werden.

Bei dieser Gelegenheit habe ich auch die Wiederherstellung des Google Stock Android auf dem Pixel ausprobiert. Das funktioniert genauso einfach und zuverlässig.

Der Einsatz eines alternativen Betriebssystems wie GrapheneOS ist eigentlich nur eine Frage des Wollens und nicht des Könnens.

Firefox zeigt auf der Firefox-Startseite Content-Empfehlungen über seinen hauseigenen Dienst Pocket an. Ab Firefox 130 lässt sich die Themenauswahl optional personalisieren.

Die Standard-Startseite von Firefox, welche auch beim Öffnen eines neuen Tabs erscheint, zeigt standardmäßig Content-Empfehlungen an. Hierfür setzt Mozilla auf seinen eigenen Dienst Pocket. Die Artikel werden von menschlichen Pocket-Redakteuren „aus einer breiten und vielfältigen Palette von Publikationen ausgewählt, die sich durch sorgfältige, zuverlässige und vertrauenswürdige Berichterstattung auszeichnen“, wie Mozilla schreibt.

Ab Firefox 130 wird es für Nutzer möglich sein, die Kategorien auszuwählen, aus denen bevorzugt Artikel angezeigt werden sollen. Dabei stehen die folgenden Kategorien zur Auswahl: Geschäftliches, Unterhaltung, Essen, Gesundheit, Finanzen, Politik, Sport, Technik, Reisen, Wissenschaft sowie Life-Hacks.

Personalisierte Pocket-Empfehlungen in Firefox 130

Ein weiteres neues Feature ist die Anzeige von Icons mit einem Daumen nach oben respektive einem Daumen nach unten, die bei Herüberfahren mit der Maus über eine Artikel-Kachel erscheinen. Damit kann mitgeteilt werden, ob man mehr oder weniger Artikel dieser Art sehen möchte.

Personalisierte Pocket-Empfehlungen in Firefox 130

Firefox 130 erscheint am 3. September 2024. Die neuen Features werden schrittweise ausgerollt und stehen nicht sofort standardmäßig für alle Nutzer zur Verfügung.

Eine manuelle Aktivierung der Kategorie-Auswahl ist möglich, indem über about:config der Schalter browser.newtabpage.activity-stream.discoverystream.topicSelection.enabled per Doppelklick auf true gesetzt wird.

Die andere neue Funktion wird über die Option browser.newtabpage.activity-stream.discoverystream.thumbsUpDown.enabled gesteuert.

Der Beitrag Firefox 130 erlaubt Personalisierung der Pocket-Empfehlungen erschien zuerst auf soeren-hentzschel.at.

24. August 2024

Mit Thunderbird Appointment wird die MZLA Technologies Corporation einen neuen Online-Dienst starten, welcher die Terminplanung vereinfachen soll. Nun können sich Nutzer auf die Warteliste für den Beta-Start setzen lassen.

Bereits im Mai hatte ich die Pläne der MZLA Technologies Corporation enthüllt, mit Thunderbird Appointment einen neuen Dienst zur Terminplanung online zu bringen.

Wann Thunderbird Appointment offiziell an den Start gehen wird, ist noch nicht bekannt. Allerdings ist es ab sofort möglich, sich über die Website auf eine Warteliste für den Beta-Start setzen zu lassen.

Der Beitrag Beta-Warteliste für Thunderbird Appointment öffnet erschien zuerst auf soeren-hentzschel.at.

Seit ein paar Wochen habe ich mich mit einem kleinen, aber nervigen Problem herumgeschlagen.

Es war nichts Kritisches, aber es störte doch: Manche Benachrichtigungen erschienen in einem dunklen Stil, der den Text nicht lesbar machte.

Oft konnte ich das Symbol der Applikation noch erkennen, aber bei Meldungen ohne Symbol war es reines Rätselraten, was dort stand.

Nach einiger Suche habe ich das Problem mit einem einfachen Befehl nachgestellt:

notify-send "$(inxi -s)"

Damit konnte ich gezielt Benachrichtigungen auslösen und in den Gnome-Einstellungen, genauer gesagt in den "Optimierungen" (gnome-tweaks) unter dem Punkt "Erscheinungsbild", nach einer Lösung suchen.

Es stellte sich heraus, dass mein aktuelles Theme "Marble" die neue Gnome-Version nicht vollständig unterstützt.

Nachdem ich auf das Standard-Theme "Adwaita" umgestellt habe, sind die Benachrichtigungen wieder gut lesbar und das Problem für mich gelöst. Die Welt ist wieder in Ordnung! Siehe dazu auch die Screenshots.

 

 

So kann man das auch wieder lesen!

Update im erweiterten Teil unbedingt lesen

 

... und wenn wir schon dabei sind: Die Extension just-perfection

ist sehr nützlich.

Damit kann man z.B. das Panel in der Größe anpassen.

Sehr gut, jetzt bin ich zufrieden.

 

 

 

 

Update im erweiterten Teil unbedingt lesen

"Gnome 46 merkwürdige dunkle Nachrichten" vollständig lesen

Jede Distribution hat ihre eigene Paketverwaltung. Bei openSUSE ist es Zypper, das die Abhängigkeiten etc. der Pakete im RPM-Format auflöst. Zypper ist mächtig und sehr flexibel. Drei Befehle und eine Einstellung helfen, ein Tumbleweed-System aufgeräumt zu halten.

Standardmäßig installiert openSUSE obligatorische und empfohlene Abhängigkeiten. Letztere sind für einige Komponenten einer Software nützlich, aber nicht zwingend notwendig. Wenn man ein wenig Ahnung hat oder bereit ist, sich diese anzueignen, sollte man die automatische Installation der empfohlenen Abhängigkeiten deaktivieren. Diese ziehen nämlich oft viel unnötigen Ballast mit sich, den man nur für ganz marginale Funktionen mancher Software benötigt.

Das geschieht über eine Anpassung der Konfigurationsdatei /etc/zypp/zypp.conf:

##
## Whether only required packages are installed.
##
## Recommended packages, will not be regarded.
##
## Valid values: boolean
## Default value: false
##
solver.onlyRequires = true

Hier muss das Auskommentierungszeichen # entfernt und der Wert auf true gesetzt werden.

Möchte man Anwendungen deinstallieren, ist es hilfreich, auch alle Abhängigkeiten zu entfernen. Dies geschieht mit folgender Option:

# zypper rm --clean-deps <Paketname>

Trotzdem kann es bei RR-Systemen immer mal wieder Überbleibsel geben. Diese können mit folgenden Kommandos gefunden werden:

Zunächst können nicht mehr benötigte Abhängigkeiten identifiziert werden.

# zypper packages --unneeded 

Die Ausgabe kann wie folgt aussehen:

# zypper packages --unneeded 
Repository-Daten werden geladen...
Installierte Pakete werden gelesen...
S  | Repository             | Name        | Version  | Arch
---+------------------------+-------------+----------+-------
i  | Haupt-Repository (OSS) | dialog-lang | 1.3-12.1 | noarch

Intellektuell sollte man natürlich prüfen, ob die Angabe stimmig ist. Das Language-Pack im Beispiel möchte ich z.B. behalten. Nicht mehr benötigte Pakete können anschließend auf dem üblichen Weg entfernt werden.

Es kann auch immer mal sein, dass Pakete aus den Paketquellen entfernt werden. Solche Pakete können mit folgendem Befehl identifiziert werden:

# zypper packages --orphaned

Die Ausgabe kann wie folgt aussehen:

# zypper packages --orphaned 
Repository-Daten werden geladen...
Installierte Pakete werden gelesen...
S  | Repository | Name           | Version     | Arch
---+------------+----------------+-------------+-------
i+ | @System    | synology-drive | 7.5.0-16085 | x86_64

Wie im Beispiel zu sehen ist, betrifft das auch Pakete, die der Anwender bewusst an der Pakrtverwaltung vorbei installiert hat. Deshalb auch hier nicht kopflos einfach alles entfernen.

23. August 2024

Die traditionsreiche Distribution openSUSE kommt einfach nicht zur Ruhe. Der geneigte Anwender wundert sich, dass in den letzten Jahren überhaupt so gute Produkte und Releases veröffentlicht werden konnten. Jüngste Episode der Dauerkrise ist der Versuch des Mutterkonzerns SUSE, seine Markenautonomie gegenüber der Community-Variante zu stärken.

Langjährige Leserinnen und Leser wissen, dass ich openSUSE sehr zugetan bin. Warum, weiß ich nicht so genau. Wahrscheinlich, weil ich damit bei Linux 2007 angefangen habe und nie wirklich enttäuscht wurde. Ausflüge in andere Distributionen führten mich immer wieder zu einer SUSE-Variante zurück. Umso besorgter verfolge ich das aktuelle Chaos.

Im Prinzip begann das Chaos 2015, als das openSUSE-Projekt seine letzte klassische Version 13.2 veröffentlichte. openSUSE verabschiedete sich danach aus verschiedenen Gründen von diesem Modell. Mangel an Entwicklern oder zu viele Mitwirkende – die Nachrichten waren widersprüchlich. Auf jeden Fall war das klassische Modell mit einem Release alle 9-12 Monate veraltet und wurde auch von SUSE nicht mehr als Basis für SLE benötigt.

Parallel dazu hat openSUSE eine eigene Rolling-Release-Distribution namens Tumbleweed veröffentlicht. Diese ist meiner Meinung nach der größte Erfolg des Projekts. Tumbleweed hat Leute zu openSUSE gebracht, die diese Distribution vorher gemieden haben und hat den Markt der RR-Distributionen sinnvoll ergänzt. RR in Kombination mit Btrfs-Snapshots und einem ausgeklügelten QA-System war in vielerlei Hinsicht wegweisend für spätere Entwicklungen.

Parallel zu Tumbleweed wurde das Projekt Leap gestartet. Beide Produkte waren als Ergänzung gedacht. Tumbleweed als RR-Variante erfreut sich bis heute großer Beliebtheit, aber stabile Setups sind eine wichtige Zielgruppe für openSUSE, wie die Statistiken zeigen. Leap basierte auf der Idee, openSUSE und SLE näher zusammenzubringen, Synergien zu heben und leichtere Migrationen von openSUSE Leap zu SLE zu ermöglichen. Die Idee hatte etwas für sich, krankte aber an vielen Problemen. Drei Probleme waren aus meiner Sicht zentral:

  1. Das Konzept erwies sich als problematischer als erwartet. SLE ist eine Enterprise-Distribution und speziell auf diese Bedürfnisse zugeschnitten. In den letzten Jahren hat sich bei jedem Release gezeigt, dass es nicht so einfach ist, die Community-Komponenten darauf aufzusetzen.
  2. Die meisten Community-Entwickler beteiligen sich an der Tumbleweed-Entwicklung. Leap spielte nur eine untergeordnete Rolle. Dies wirkte sich auf die Qualität aus.
  3. Ständige Konzeptänderungen (z.B. Tick-Tock-Versionssprünge, Repo-Umstrukturierungen, Versionierung etc.) waren für den normalen Anwender nicht transparent und oft nur durch die erratische Politik von SUSE zu erklären.

Daneben hat die Community eigene Spielfelder entwickelt. MicroOS mit seinen Desktop-Derivaten, zuletzt Slowroll als stabilere Variante von Tumblweed. Im Hintergrund droht immer SUSE ALP, von dem aber nichts wirklich nach außen dringt.

Als es also ums Eingemachte ging, gab es zunächst eine merkwürdige Umbenennungsaktion der einzelnen MicroOS-Varianten, bei der selbst SUSE-affine Leute wie ich am Ende kaum noch durchblickten. Gefolgt von einem ebenso merkwürdigen Logo-Wettbewerb, dessen Sinn sich vielen nicht so recht erschloss. Vorläufiger Höhepunkt dieser Entwicklung war die Aufforderung von SUSE, die Community-Distribution umzubenennen, um eine bessere Abgrenzung zur Enterprise-Variante zu erreichen. Also genau das Gegenteil von dem, was in den letzten Jahren mit Leap gemacht wurde.

Ich hoffe sehr, dass das Ganze eine gute Entwicklung nimmt. Denn unter der Haube dieser Rebrandings und Umstrukturierungen laufen technisch sehr interessante Entwicklungen, die wegweisend für andere Distributionen sein können.

22. August 2024

Die MZLA Technologies Corporation hat mit Thunderbird 128.1.1 ein Update für seinen Open Source E-Mail-Client veröffentlicht.

Neuerungen von Thunderbird 128.1.1

Mit dem Update auf Thunderbird 128.1.1 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht. Das Update bringt mehrere Korrekturen für die Versionsreihe 128, welche sich in den Release Notes (engl.) nachlesen lassen.

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

20. August 2024

Mozilla hat Firefox 129.0.2 veröffentlicht und behebt damit mehrere Probleme der Vorgängerversion.

Download Mozilla Firefox 129.0.2

Es wurden mehrere Korrekturen und Anpassungen in Vorbereitung auf ein kommendes Update für das Widevine-Plugin vorgenommen, welches zur Wiedergabe DRM-geschützter Videos auf Streaming-Plattformen benötigt wird.

Ebenfalls mehrere Verbesserungen gab es für die Übersetzungsfunktion von Firefox, um sicherzustellen, dass wenn neue Versionen von Übersetzungs-Modellen verfügbar sind, diese korrekt aktualisiert werden und Updates der verfügbaren Sprachen auch ohne Neustart von Firefox funktionieren. Auch nach einer Änderung der Browsersprache ist nicht länger ein Neustart von Firefox notwendig, damit die Übersetzungsfunktion korrekt darauf reagiert.

Bei Verwendung des canvas-Elements konnte es für Nutzer bestimmter Grafikchips zu einem unerwarteten Flackern kommen.

In den Einstellungen zum Schutz vor Aktivitätenverfolgung war bei Bedienung mit der Tastatur nicht ersichtlich, welche Option fokussiert war.

Ein Problem für Nutzer von Screenreadern in Zusammenhang mit der neuen Tab-Vorschau von Firefox 129 wurde behoben.

Ebenfalls behoben wurden ein Problem mit Drag-and-Drop-Operationen in Browser-Erweiterungen sowie eine mögliche Absturzursache unter macOS.

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

19. August 2024

Dies ist ein Erfahrungsbericht zur Migration meiner Ansible-Rolle „Nextcloud im Container“ in eine Ansible Collection. Er umfasst die Migration der bestehenden Rolle und die Ergänzung der neuen Collection um eine weitere Rolle, welche sich um die Aufgaben Backup und Restore kümmert.

Wer es ganz eilig hat, kann direkt zur Zusammenfassung springen. Allen anderen wünsche ich viel Spaß bei der Lektüre.

Für grundlegende Informationen zu Ansible Collections siehe:

Randnotiz: Dass ihr zu meiner ersten Ansible Collection hier im Blog nicht fündig werdet, liegt darin begründet, dass meine Arbeit daran eingeschlafen ist.

Die Entwicklung der hier beschriebenen Collection könnt ihr auf Codeberg.org verfolgen. Die Repo-URL lautet: https://codeberg.org/Tronde/nextcloud

Motivation

Für mein Wochenendprojekt „Nextcloud im Container“ habe ich eine Ansible-Rolle entwickelt und auf Github veröffentlicht, die dem Zweck dient, Nextcloud mit einer MariaDB in einer rootless Podman-Umgebung zu installieren.

Wie ihr in Teil 5 der Artikel-Serie nachlesen könnt, war ich mit der Lösung für Backup und Restore nicht ganz zufrieden. Ich möchte dieses Thema erneut angehen und mithilfe einer Ansible-Rolle lösen.

Backup und Restore beschreiben jedoch andere Anwendungsfälle als die Bereitstellung, weswegen ich den dafür notwendigen Quelltext nicht mit in die bestehende Rolle pressen möchte. Da Backup und Restore für mich jedoch zum Betrieb dazugehören, möchte ich alle Ansible-Rollen, die ich zum Betrieb meines Nextcloud-Setups benötige, in einer Collection zusammenfassen.

Migration der bestehenden Rolle in eine Collection

Ich orientiere mich hierzu an der englischsprachigen Dokumentation „Migrating a role to a collection“. Da ich bereits einen Galaxy Namespace besitze, nutze ich diesen auch für die Erstellung der Collection. Der folgende Codeblock zeigt die verwendeten Befehle.

]$ ansible-galaxy collection init tronde.nextcloud
- Collection tronde.nextcloud was created successfully

]$ mkdir tronde/nextcloud/roles/deploy_nextcloud_with_mariadb_pod && rsync -a ../roles/ansible_role_deploy_nextcloud_with_mariadb_pod/ tronde/nextcloud/roles/deploy_nextcloud_with_mariadb_pod/

]$ tree -L 3 tronde/nextcloud/
tronde/nextcloud/
├── docs
├── galaxy.yml
├── meta
│   └── runtime.yml
├── plugins
│   └── README.md
├── README.md
└── roles
    └── deploy_nextcloud_with_mariadb_pod
        ├── defaults
        ├── meta
        ├── README.md
        ├── tasks
        ├── tests
        └── vars

]$ rm -rf tronde/nextcloud/roles/deploy_nextcloud_with_mariadb_pod/.git

Im letzten Schritt entferne ich das .git-Verzeichnis, da ich die Collection als Ganzes in einem Repository verwalten möchte, statt alle Rollen einzeln zu versionieren und dann in die Collection einzufügen.

Anschließend aktualisiere ich die Dateien galaxy.yml und README.md. In der Rolle habe ich ein Playbook zum Testen verwendet, welches im Pfad deploy_nextcloud_with_mariadb_pod/tests/test.yml liegt. Um konform mit der Struktur einer Ansible Collection zu sein, erstelle ich im Wurzelverzeichnis meiner Collection das Verzeichnis playbooks und kopiere das Test-Playbook hier hinein:

]$ tree playbooks/
playbooks/
└── deploy_nextcloud_with_mariadb_pod.yml

An dieser Stelle halte ich zunächst inne und überlege mir, welche Tools ich noch benötige, um meine Collection entwickeln und testen zu können.

Ansible Development Tools

Ansible Development Tools (ADT) ist ein Projekt mit dem Ziel, einen Werkzeugkasten mit allen wichtigen Werkzeugen zur Entwicklung von Ansible Content zu bieten. Genau so etwas habe ich gesucht. Das probiere ich gleich aus.

Um mir mein System nicht zu verhunzen, installiere ich die ADT in ein Python Virtual Environment und lasse mir anzeigen, welche Werkzeuge ADT mitbringt:

]$ python -m venv adt
]$ . adt/bin/activate
(adt) ]$ pip install --upgrade pip
(adt) ]$ pip install ansible-dev-tools
(adt) ]$ pip install molecule-podman
(adt) ]$ adt --version
ansible-builder                          3.1.0
ansible-core                             2.17.1
ansible-creator                          24.7.0
ansible-dev-environment                  24.7.0
ansible-dev-tools                        24.7.1
ansible-lint                             24.7.0
ansible-navigator                        24.7.0
ansible-sign                             0.1.1
molecule                                 24.7.0
pytest-ansible                           24.7.0
tox-ansible                              24.7.0

Bei molecule-podman handelt es sich um einen Molecule-Treiber, welcher benötigt wird um Molecule-Tests in Podman-Containern ausführen zu können. Ich habe dieses Paket mitinstalliert, da ich mir vorstellen kann, dies in naher Zukunft zu nutzen.

ansible-lint

Ansible Lint ist das erste Werkzeug aus der ADT-Sammlung, welches ich verwende, um den Quelltext meiner Collection zu prüfen. Dazu wird das Kommando einfach im Wurzelverzeichnis der Collection ausgeführt. Anschließend können die gefundenen Fehler behoben werden.

Da es den Rahmen dieses Artikels sprengen würde, werde ich dem Thema einen eigenen Text widmen.

molecule

Ansible Molecule eignet sich zum Testen von Ansible-Rollen und Collections. Ich nutze meine Ansible Collection, um mich mit diesem Werkzeug vertraut zu machen.

Zwar gibt es auch hier erst eine Lernkurve, doch wird mir eine durchdachte Test-Konfiguration bei der weiteren Entwicklung sicher zugutekommen. Ich orientiere mich zu Beginn am Ansible Molecule Getting Started Guide.

Zu Beginn möchte ich meine in die Collection migrierte Rolle testen. Dazu bearbeite ich die Datei tronde/nextcloud/extensions/molecule/default/converge.yml. Sie enthält schließlich folgenden Inhalt:

extensions]$ cat molecule/default/converge.yml 
---
- name: Converge
  hosts: localhost
  gather_facts: false
  tasks:
    - name: Test collection role deploy_nextcloud_with_mariadb_pod
      ansible.builtin.import_role:
        name: tronde.nextcloud.deploy_nextcloud_with_mariadb_pod

Und mit folgendem Befehl teste ich, ob meine Nextcloud-Instanz erfolgreich deployt wird:

extensions]$ molecule converge
…
PLAY RECAP *********************************************************************
localhost                  : ok=10   changed=9    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

extensions]$ podman ps
CONTAINER ID  IMAGE                                    COMMAND               CREATED             STATUS             PORTS                    NAMES
48438d1bd884  quay.io/centos/centos:stream8            bash -c while tru...  7 minutes ago       Up 7 minutes                                instance
104c525a6b50  localhost/podman-pause:5.1.1-1717459200                        About a minute ago  Up About a minute  127.0.0.1:40671->80/tcp  e34ddf4d4203-infra
f27842b12d56  docker.io/library/mariadb:10.11.2        mariadbd              About a minute ago  Up About a minute  127.0.0.1:40671->80/tcp  nc_mariadb
9ee391a57fbd  docker.io/library/nextcloud:25-apache    apache2-foregroun...  13 seconds ago      Up 13 seconds      127.0.0.1:40671->80/tcp  nextcloud

Das Ergebnis ist positiv und kann durch Aufruf von http://127.0.0.1:40671 im Webbrowser überprüft werden. Ein Login mit den Default-Werten aus tronde/nextcloud/roles/deploy_nextcloud_with_mariadb_pod/defaults/main.yml bestätigt das erfolgreiche Deployment.

Es handelt sich hierbei noch nicht um ein adäquates Test-Setup; doch für den Moment ist es ausreichend. Ich werde mich noch weiter einarbeiten müssen, um das Test-Setup verbessern zu können. Vermutlich wird auch dazu dann ein weiterer Artikel folgen.

Falls sich jemand wundert, es ist durchaus Absicht, dass die Nextcloud nur via 127.0.0.1 und per HTTP erreichbar ist. Ich betreibe diese hinter einem Reverse-Proxy. Details können in Nextcloud im Container — Teil 3: Mit Reverse-Proxy nachgelesen werden.

Backup und Restore für die Nextcloud

Um die Konfiguration und die in der Nextcloud gespeicherten Daten sichern und wiederherstellen zu können, werde ich eine Offline-Sicherung der verwendeten Podman Volumes durchführen. Der Ablauf für die Sicherung sieht wie folgt aus:

  1. Den Pod ˋnc_podˋ inkl. aller darin enthaltenen Container stoppen
  2. Alle zum Setup gehörenden Podman Volumes in Tarballs exportieren
  3. Diese Tarballs vom managed Node auf den Control Node sichern
  4. Den ˋnc_podˋ wieder starten

Die Wiederherstellung läuft sinngemäß andersherum ab:

  1. Die Tarballs werden vom Control Node auf den Managed Node kopiert
  2. Der Pod ˋnc_podˋ inkl. aller darin enthaltenen Container wird gestoppt
  3. Die Podman Volumes aus Schritt 1 werden importiert
  4. Der nc_pod wird wieder gestartet
  5. Die zur Wiederherstellung auf den Managed Node kopierten Tarballs werden wieder entfernt

Um diese neue Rolle der Collection hinzuzufügen, navigiere ich in das Rollenverzeichnis tronde/nextcloud/roles/ und erstelle dort das Grundgerüst für die Rolle: ansible-galaxy role init backup_nextcloud

Die Struktur sieht bei mir wie folgt aus, wobei nicht benötigte Verzeichnisse noch nicht entfernt wurden:

ansible_collections]$ tree -L 2 tronde/nextcloud/roles/backup_restore_nextcloud/
tronde/nextcloud/roles/backup_restore_nextcloud/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

9 directories, 8 files

Den aktuellen Entwicklungsstand könnt ihr unter dieser URL einsehen: https://codeberg.org/Tronde/nextcloud/src/branch/main/roles/backup_restore_nextcloud

Das dortige README.md enthält wie bei dedizierten Rollen die Dokumentation zu dieser Rolle. Um doppelte Texte zu vermeiden, verweise ich im Collection-README auf die jeweiligen README-Dateien in den einzelnen Rollen.

Getestet wird diese Rolle ebenfalls mit Molecule. Zu den Tests mit Molecule werde ich noch mehr schreiben, sobald ich dies etwas verfeinert habe.

Fallen mir noch weitere Anwendungsfälle ein, können diese nun einfach als weitere Rollen der Collection hinzugefügt werden.

Ansible-Variablen definieren

Jede Rolle in dieser Collection ist für sich alleine nutzbar. Somit definiert jede Rolle die Eingangs-Variablen in der defaults/main.yml der jeweiligen Rolle.

Bei der Entwicklung achte ich darauf, dass Variablen, die z.B. den Namen eines Podman Volumes enthalten, in allen Rollen gleich geschrieben werden. Damit ist es möglich, diese Variablen an anderer Stelle zu definieren und in den verschiedenen Rollen nutzbar zu machen. So können an individuelle Deployments angepasste Variablen in Playbooks, group_vars, host_vars, etc. definiert werden.

Wo Variablen definiert werden können und welche Präzedenz diese besitzen, kann in der offiziellen Doku nachgelesen werden: Variable precedence: Where should I put a variable?

Zusammenfassung

Eine Ansible-Rolle ohne Plug-ins in eine Ansible Collection zu überführen, ist mit dem kurzen Abschnitt aus der Dokumentation schnell erledigt.

Weitere Rollen können der Collection hinzugefügt werden, indem man sie im Verzeichnis roles der Collection-Verzeichnisstruktur wie gewohnt mit ansible-galaxy role init <Rollenname> erstellt und mit Leben füllt. Sorgfalt ist und bleibt bei der Benennung von Variablen und deren Präzedenz geboten, um nicht wahnsinnig zu werden. Dies ist nicht wirklich schwierig, doch muss ich fast jedes Mal in der Dokumentation nachschlagen, um sicher zu sein.

Die Ansible Development Tools (ADT) sind eine praktische Sammlung von Werkzeugen zur Entwicklung von Rollen und Collections für Ansible. Für mich sind aktuell Ansible Lint und Ansible Molecule die wichtigsten Werkzeuge aus dieser Sammlung. Wobei gerade die Dokumentation von Molecule auf dem Weg zu meinem Ziel, nämlich meine Collections in verschiedenen rootless Podman Containern mit nested Podman und Ansible zu testen, leider viele Fragen offen lässt. Grundsätzlich lassen sich Testpläne damit realisieren und vereinfachen mein bisheriges Testsetup bestehend aus diversen Skripts und virtuellen Maschinen. Und sie bieten Stoff für weitere Einträge in diesem Blog.

Die weitere Entwicklung meiner Nextcloud Collection findet auf Codeberg statt. Ihr findet sie dort unter der URL: https://codeberg.org/Tronde/nextcloud