staging.inyokaproject.org

2023 Woche 31

4. August 2023

Auf vielfachen Wunsch hin, habe ich eine SpaceFun Rolling Variante mit dem GNOME Desktop entwickelt, welche für moderne Rechner gut geeignet ist.

Ursprünglich habe ich SpaceFun entwickelt um eine schlanke Distro für ältere Rechner anzubieten. Als Basis dient dazu Debian GNU/Linux wahlweise in der Stable oder Rolling (Sid) Variante. In der Zwischenzeit konnte sich bereits eine kleine nette Nutzergemeinde etablieren und dank SpaceFun konnten wir schon einer Vielzahl von Rechnern wieder ein neues Leben schenken.

Egal, ob 32 Bit EeePC oder ein älterer Core 2 Duo, SpaceFun läuft nahezu überall, und wenn es doch noch leichtgewichtiger sein soll, kommt die Moonlight Variante (oder TuxWiz für Linux Retro Gamer) mit dem IceWM Windowmanager zum Einsatz. Und selbst für die Kleinsten ist gesorgt.

Doch immer wieder wurde ich gefragt, ob es auch einen SpaceFun Spin für aktuelle Hardware geben wird, was mich dazu bewegt hat SpaceFun GNOME zu entwickeln.



Diese Version basiert auf Debian GNU/Linux Sid und steht ausschliesslich für x86_64 Prozessoren zur Verfügung. Wie üblich handelt es sich um ein Live-Image, welches sich mithilfe von Calamares auf die Festplatte bannen lässt.

SpaceFun GNOME startet im Live-Modus in englischer Sprache, nach der Installation wird allerdings die ausgewählte Sprache auf dem Zielsystem übernommen. Das Tastaturlayout lässt sich selbstverständlich auch im Live-Modus anpassen.

Die Softwareauswahl ist bewusst schlank gehalten, um eine gute Basis für ein System zu bieten, welches selbst nach den eigenen Wünschen erweitert werden kann.

Wer bereits eine Rolling-Release-Distribution nutzt, dem ist wahrscheinlich bekannt, dass täglich neue Updates bereitgestellt werden. Dies ist auch bei Debian GNU/Linux Sid der Fall. Standardmässig werden Updates über GNOME Software installiert. Beim Herunterfahren des Systems hat man die Möglichkeit zu wählen, vor dem Ausschalten die Aktualisierungen zu installieren. Dann startet der PC kurz neu, installiert die Updates und schaltet sich daraufhin aus.

Möchtest du hingegen lieber volle Kontrolle über Updates haben, kannst du die entsprechende Funktion in GNOME Software deaktivieren und das System auf der Kommandozeile mit Root-Rechten aktualisieren:

apt update && apt upgrade

Unter Sid kann es dabei vorkommen, das Pakete zurückgehalten werden. Diese Funktion ist sinnvoll und man könnte mittels apt full-upgrade auch diese Pakete installieren. Davon wird auf einem Rolling Sid allerdings explizit abgeraten.

Ich konnte selbst mit obigen Befehlen Sid-basierte Installationen über Jahre hinweg aktuell halten und auch wenn man längere Zeit keine Updates eingespielt hat, funktioniert es in der Regel problemlos.

Sollte es dennoch einmal zu Schwierigkeiten kommen, stehen wir über Telegram und neu auch über XMPP mit Rat und Tat zur Seite.

Wer auf der Suche nach einer modernen, schnellen Linux Distribution mit GNOME ist, sollte einen Blick auf SpaceFun GNOME werfen. Aktuelle Downloads findet man auf der SpaceFun Webseite, indem man auf den GNOME 64 Bit Button klickt.

https://spacefun.ch


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

2. August 2023

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

Neuerungen von Thunderbird 115.1

Mit dem Update auf Thunderbird 115.1 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, welche sich in den Release Notes (engl.) nachlesen lassen. Auch wurden diverse Sicherheitslücken geschlossen.

Updates von Thunderbird 102 und älter sind zu diesem Zeitpunkt noch nicht aktiv. Nutzer älterer Versionen können sich Thunderbird 115.1 aber über die offizielle Website herunterladen und über die bestehende Version installieren.

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

1. August 2023

Mozilla hat Firefox 116 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

Lautstärke im Bild-im-Bild-Modus ändern

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 und auch Untertitel werden auf vielen Plattformen unterstützt.

Firefox 116 bringt die nächste Funktion in den Bild-im-Bild-Modus. Ab sofort kann auch die Lautstärke direkt im losgelösten Fenster geändert werden, ohne dass man dazu zurück in den Tab muss, aus welchem das Video stammt.

Text-Anmerkungen in PDF-Dateien bearbeiten

Firefox erlaubt bereits seit einiger Zeit, Text-Anmerkungen auf PDF-Dateien zu hinterlassen. Bestehende Anmerkungen konnten aber, wenn eine PDF-Datei mit Text-Anmerkungen geöffnet wurde, nicht bearbeitet werden. Das ist ab Firefox 116 möglich.

Sonstige Endnutzer-Neuerungen von Firefox 116

Mittels Strg + Shift + T (Mac: Cmd + Shift + T) war es bereits möglich, einen oder mehrere zuletzt geschlossene Tabs zu öffnen. Geschlossene Fenster werden darüber jetzt ebenso geöffnet. Gibt es weder Tabs noch Fenster zum Wiederherstellen, wird die letzte Sitzung wiederhergestellt.

Sind sogenannte Tab-Umgebungen aktiv (beispielsweise über eine Erweiterung) wird die entsprechende Umgebungs-Farbe jetzt auch in dem Menü angezeigt, welches nach Klick auf das Pfeil-Symbol am Ende der Tableiste erscheint und alle geöffneten Tabs beinhaltet.

Für Nutzer mit vielen Tabs wurde die Performance des gleichzeitigen Schließens mehrerer Tabs verbessert.

Die Synchronisation der Zugangsdaten wurde verbessert und arbeitet jetzt intern mehr wie andere Sync-Engines (beispielsweise für die Lesezeichen), was die Zuverlässigkeit erhöhen soll. Außerdem wurde behoben, dass Zugangsdaten, die via CSV-Datei importiert worden sind, nicht synchronisiert worden sind. Der CSV-Import von Zugangsdaten musste bisher manuell via about:config aktiviert werden, ist jetzt aber standardmäßig möglich.

Beim Speichern eines Lesezeichens über den Stern in der Adressleiste erscheint im entsprechenden Dialog nicht länger ein Screenshot der Seite, welcher darüber hinaus ohnehin an keiner anderen Stelle in Firefox verwendet worden war.

Das Auswahlfeld, welches in einer geöffneten Sidebar den Wechsel zu einer anderen Sidebar oder die Änderung der Position erlaubt, kann jetzt auch über die Tastatur benutzt werden.

Die interne Seite about:performance wurde entfernt und leitet auf about:processes weiter.

Bei Nutzung einer englischsprachigen Version von Firefox beinhaltet der Dialog, der erscheint, wenn ein Update verfügbar ist, jetzt einen Link zu den Release Notes der neuen Version.

Seit Version 115 unterstützt Firefox einen neuen Mechanismus, über welchen die Ausführung von Erweiterungen auf bestimmten Websites durch Mozilla, beispielsweise aus Sicherheitsgründen, standardmäßig verhindert werden kann. Firefox 116 ergänzt in den Einstellungen des jeweiligen Add-ons eine Option, womit dieser Sicherheits-Mechanismus pro Erweiterung ein- oder ausgeschaltet werden kann.

Mehr Sicherheit für Firefox-Nutzer

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

Verbesserungen der Entwicklerwerkzeuge

Mit benutzerdefinierten Formatierern können Websites festlegen, wie bestimmte JavaScript-Objekte und -Funktionen in der Konsole angezeigt werden sollen. Diese Funktion ist standardmäßig deaktiviert und kann über die Einstellungen der Entwicklerwerkzeuge aktiviert werden.

Der Inspektor zeigt jetzt ein entsprechendes Badge an, wenn Container Queries für ein Element aktiv sind, und das Netzwerkanalyse-Werkzeug zeigt an, wenn eine Anfrage via DNS over HTTPS aufgelöst worden ist.

Weitere Neuerungen der Entwicklerwerkzeuge werden im DevTools-Newsletter für Firefox 116 beschrieben.

Verbesserungen der Webplattform

Firefox unterstützt nun wie andere Browser auch auf Websites das Einfügen von Dateien, welche vom Betriebssystem aus in die Zwischenablage kopiert worden sind.

Die Intl.NumberFormat API unterstützt diverse neue Parameter sowie die formatRange- und formatRangeToParts()-Methoden.

Die Audio Output Devices API ermöglicht es Websites, Audio von Medienelementen zu zugelassenen Ausgabegeräten umzuleiten, welche nicht Systemstandard sind. So könnte beispielsweise eine Anwendung für Webkonferenzen das Audio-Signal entweder an die Lautsprecher in einem Headset oder externe Lautsprecher umleiten.

Das dirname-Attribut wird in input- und textarea-Feldern unterstützt, ebenso externe Hashes in der Content Security Policy. In SVG-Grafiken wird die Längeneinheit q unterstützt.

Für Entwickler von Browser-Erweiterungen sei action.getUserSettings() erwähnt, worüber eine Erweiterung feststellen kann, ob ihre Schaltfläche an die Symbolleiste angeheftet oder im Erweiterungsmenü ist. Die tabs API wurde um die autoDiscardable-Eigenschaft erweitert.

Weitere Neuerungen für Entwickler von Websites und Browser-Erweiterungen lassen sich in den MDN Web Docs nachlesen.

Windows 7/8 sowie macOS 10.12/10.13/10.14 werden nicht länger unterstützt

Bereits am 14. Januar 2020 hatte Microsoft die Unterstützung seines Betriebssystems Windows 7 offiziell eingestellt, die Einstellung der Unterstützung von Windows 8.1 folgte am 10. Januar 2023. Seitens Apple gibt es keine offiziellen Daten für Support-Enden, das letzte Update für macOS 10.14 erschien allerdings im Juli 2021. Dies ist für Nutzer insofern relevant, als dass es für diese Betriebssysteme keine Sicherheits-Updates mehr gibt. Nutzer sollten daher unbedingt auf ein aktuelles Betriebssystem umsteigen, falls noch nicht geschehen.

Firefox 115 war das letzte große Update für diese veralteten Betriebssyssteme. Entsprechende Nutzer werden auf Firefox ESR 115 umgestellt und erhalten dann darüber noch bis September 2024 Sicherheits-Updates für Firefox. Neue Funktionen oder die Unterstützung für neue Webstandards gibt es allerdings keine mehr. Firefox 116 kann auf entsprechenden Systemen nicht mehr installiert werden.

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

31. Juli 2023

Paperless-NGX ist ein bekanntes und beliebtes Open Source Dokumenten-Management-System (DMS). Auch ich möchte zukünftig meinen „Papierkram“ darin verwalten.

In diesem Artikel halte ich meine Gedanken fest, wie ich plane, paperless-ngx in meiner Umgebung aufzusetzen und zu betreiben.

Dies hilft mir, zu prüfen, ob ich auch an alles Wichtige gedacht habe. Falls euch das Konzept gefällt, dürft ihr es selbstverständlich gerne nachahmen. Und wenn ihr schwerwiegende Fehler darin entdeckt, freue ich mich über einen Hinweis.

Es ist kein Tutorial und keine Schritt-für-Schritt-Anleitung. Zwar mag dieser Text dazu dienen, sich eine eigene Umgebung aufzubauen, Mitdenken ist dabei jedoch zwingend erforderlich.

Ziele

  • Betrieb von Paperless-NGX als rootless-Podman-Container
  • Consumption-Ordner als Samba-Share freigegeben, um via Netzwerk Dateien hineinkopieren zu können
  • Getrennte Benutzerkonten für meine Frau und mich
  • Freigabe gewisser Dokumente für weitere Benutzer(gruppen)
  • Erfolgreicher Restore-Test

Infrastruktur

In meinem Heimnetzwerk betreibe ich einen Desktop-/Server-PC. Auf diesem läuft aktuell RHEL 9 als KVM/QEMU-Hypervisor. Er dient mir ebenfalls als Ansible Control Node. Hierauf betreibe ich eine RHEL-9-VM mit einer rootless-Podman-Installation. Diese VM wird auch meine Paperless-NGX-Instanz hosten.

In der VM wird das EPEL-Repository aktiviert, um daraus die Pakete podman-compose und python3-pexpect installieren zu können.

Falls ich mal nicht mehr weiß, wie dieses Setup aufgebaut wird, finden sich dazu Hinweise in folgenden Links:

Installation mit Ansible

Für die Installation der Anwendung wird die Container Route verwendet. Die Installation wird dabei unter Nutzung der Ansible-Rolle tronde.paperless_ngx_with_rootless_podman automatisiert.

Das Playbook deploy_paperless_ngx.yml, welches auf meiner Synology Diskstation abgelegt ist, führt die Installation und Konfiguration der Anwendung durch. Es installiert und konfiguriert zudem Samba und die Datei-Freigabe des Consumption-Verzeichnisses.

In dem Playbook werden folgende Rollen verwendet:

Die Rollen sind mit dem Playbook in meinem Ansible-Projekt-Verzeichnis auf meiner Synology Diskstation installiert.

Alle Playbooks und Rollen werden mit Git versioniert. Die Repositories werden auf entfernte Rechner synchronisiert.

Vorbereitung

Die Dateien docker-compose.postgres-tika.yml, docker-compose.env und .env werden aus dem Projekt-Repository in das Rollen-Verzeichnis files meiner Ansible-Rolle heruntergeladen. Die Datei docker-compose.postgres-tika.yml wird dabei zu docker-compose.yml umbenannt und bearbeitet.

Um Datenverlust vorzubeugen, wird die Ansible-Rolle mit den angepassten Dateien in die regelmäßige Datensicherung aufgenommen.

Folgende Variablen werden in meinem Ansible-Vault hinterlegt:

# Paperless-ngx with podman-compose
pnwrp_podman_user: alice
pnwrp_podman_group: alice
pnwrp_compose_dir: /home/{{ pnwrp_podman_user }}/paperless-ngx
pnwrp_paperless_superuser: alice
pnwrp_paperless_superuser_email: alice@example.com
pnwrp_paperless_superuser_password: ImWunderland
## Username and password for document scanner
brother_scanner_user: scanner
brother_scanner_pass: ImWunderland

Die Werte der Variablen werden selbstverständlich angepasst.

Das Playbook

Folgender Code-Block zeigt das fertige Playbook mit Beispielwerten:

---
- hosts: host.example.com
  remote_user: alice
  debugger: never
  vars_files:
    - files/alice.vault
  tasks:
    - name: Setup Paperless-NGX with podman-compose in rootless Podman
      include_role:
        name: ansible_role_paperless-ngx_with_rootless_podman

    - name: Enable Port 8000/tcp in host firewall
      ansible.posix.firewalld:
        port: 8000/tcp
        immediate: true
        permanent: true
        state: enabled
      become: true

    - name: >-
        Create and add {{ brother_scanner_user }} to
        {{ pnwrp_podman_group }}
      ansible.builtin.user:
        name: "{{ brother_scanner_user }}"
        comment: "Brother Dokumenten-Scanner"
        create_home: false
        groups: "{{ pnwrp_podman_group }}"
        append: true
        shell: /usr/sbin/nologin
        state: present
        system: true
      become: true

    - name: Include role vladgh.samba.server
      include_role:
        name: vladgh.samba.server
      vars:
        ansible_become: true
        samba_users:
          - name: "{{ pnwrp_podman_user }}"
            password: "{{ alice_password }}"
          - name: "{{ brother_scanner_user }}"
            password: "{{ brother_scanner_pass }}"
        samba_shares:
          - name: consumption
            comment: 'paperless consumption directory'
            path: "{{ pnwrp_compose_dir }}/consume"
            read_only: false
            guest_ok: false
            browseable: true
            owner: "{{ pnwrp_podman_user }}"
            group: "{{ pnwrp_podman_group }}"
            write_list: +{{ pnwrp_podman_group }}

    - name: Enable samba in host firewall
      ansible.posix.firewalld:
        service: samba
        immediate: true
        permanent: true
        state: enabled
      become: true

Das Playbook gewinnt sicher keinen Schönheitswettbewerb, doch arbeitet es bisher robust und tut, was es soll. In Tests habe ich meine Wunschumgebung damit mehrmals provisioniert.

Backup & Restore

Wie es sich gehört, wird erst ein Backup erstellt, dann die Anwendung inkl. aller Daten gelöscht und wiederhergestellt.

Backup

Für das Backup verwende ich ein Ansible-Playbook, welches sich zum Podman-Host verbindet und dort folgende Aufgaben ausführt:

  1. Stelle sicher, dass das Backup-Verzeichnis auf dem Remote-Host existiert
  2. Stoppe alle Paperless-NGX-Container
  3. Exportiere Podman-Volumes in TAR-Archive; hänge das aktuelle Datum an die Dateinamen an
  4. Archiviere und komprimiere paperless-ngx-Verzeichnis auf Remote-Host; hänge das aktuelle Datum an die Dateinamen an
  5. Starte alle Paperless-NGX-Container
  6. Komprimiere die Exporte der Podman-Volumes
  7. Synchronisiere das Backup-Verzeichnis auf dem Remote-Host mit einem Verzeichnis auf meiner Diskstation
  8. Synchronisiere das Diskstation-Verzeichnis mit einem verschlüsselten S3-Bucket

Es fehlt die Aufgabe, alte Backups aufzuräumen. Darum werde ich mich kümmern, wenn 70% des verfügbaren Speicherplatzes belegt sind.

Der folgende Code-Block zeigt ein Muster des verwendeten Playbooks:

---
- name: Backup podman volumes
  hosts: host.example.com
  gather_facts: true
  vars:
    paperless_ngx_dir: /home/alice/paperless-ngx
    docker_compose_file: docker-compose.yml
    remote_backup_dir: /home/alice/backups
    diskstation_backup_dir: /home/alice/diskstation/home/backups/host.example.com

  tasks:
    - name: Ensure backup directory exists
      ansible.builtin.file:
        path: "{{ remote_backup_dir }}"
        state: directory
        owner: alice
        group: alice
        mode: 0777

    - name: Stop paperless-ngx containers
      ansible.builtin.command: >
        podman-compose -f {{ paperless_ngx_dir }}/{{ docker_compose_file }} stop

    - name: List podman volumes
      ansible.builtin.command: podman volume ls --quiet
      register: __podman_volumes
      tags:
        - volumes

    - name: Output __podman_volumes
      ansible.builtin.debug:
        msg: "{{ item }}"
      loop: "{{ __podman_volumes['stdout_lines'] }}"
      tags:
        - volumes

    - name: Export podman volumes
      ansible.builtin.command: >
        podman volume export {{ item }} --output {{ remote_backup_dir }}/{{ item }}_{{ ansible_facts['date_time']['date'] }}.tar
      loop: "{{ __podman_volumes['stdout_lines'] }}"

    - name: Compact {{ paperless_ngx_dir }}
      community.general.archive:
        path: "{{ paperless_ngx_dir }}"
        dest: "{{ remote_backup_dir }}/paperless-ngx_{{ ansible_facts['date_time']['date'] }}.tar.gz"
        format: gz

    - name: Start paperless-ngx containers
      ansible.builtin.command: >
        podman-compose -f {{ paperless_ngx_dir }}/{{ docker_compose_file }} start

    - name: Compress volume exports
      community.general.archive:
        path: "{{ remote_backup_dir }}/{{ item }}_{{ ansible_facts['date_time']['date'] }}.tar"
        format: gz
        remove: true
      loop: "{{ __podman_volumes['stdout_lines'] }}"
      tags:
        - compress

    - name: Sync backups to diskstation
      ansible.posix.synchronize:
        archive: true
        compress: false
        delete: false
        dest: "{{ diskstation_backup_dir }}"
        mode: pull
        private_key: /home/alice/.ssh/ansible_id_rsa
        src: "{{ remote_backup_dir }}/"
      delegate_to: localhost
      tags:
        - rsync

    - name: Sync backups from diskstation to contabo S3
      ansible.builtin.command: rclone sync -P ../backups/ secure:backups
      delegate_to: localhost
      tags:
        - rsync

Das Playbook wird einmal wöchentlich ausgeführt. Ob ich für die geplante Ausführung cron oder systemd timer units verwende, habe ich noch nicht entschieden. Ich tendiere aus Neugier zu letzterem.

Um ein Offsite-Backup zu haben, werden die Dateien von der Diskstation einmal wöchentlich verschlüsselt und in einen S3-Speicher synchronisiert. Ich nutze dafür das Programm rclone und S3-kompatiblen Speicher von Contabo. Die folgenden Links bieten weiterführende Informationen dazu:

Restore

Der Ablaufplan für die Wiederherstellung der Anwendung mit ihren Daten sieht wie folgt aus:

  1. Eine rootless-Podman-Umgebung bereitstellen
  2. podman-compose bereitstellen
  3. TAR-Archive auf Zielsystem übertragen
  4. Paperless-NGX mit Playbook installieren
  5. Alle Container stoppen
  6. Inhalt der TAR-Archive in die Podman-Volumes importieren (siehe podman-volume-import(1)): gunzip -c hello.tar.gz | podman volume import myvol -
  7. Alle Container starten

Fazit

Bereitstellung, Sicherung und Wiederherstellung funktionieren wie beschrieben. Damit kann ich nun beginnen und die Anwendung konfigurieren und mit meinem Papierkram füttern.

Die Samba-Freigabe habe ich ebenfalls getestet. Sie funktioniert wie erwartet. PDF-Dateien mit dem Befehl find Documents -type f -iname "*.pdf" -exec cp {} /consume \; hineinzukopieren ist übrigens besonders dann eine gute Idee, wenn man sehen möchte, welche Dateien so in den Tiefen des eigenen Dateisystems schlummern.