Lese-Ansicht

MZLA veröffentlicht Finanzbericht 2024 für Thunderbird

Die MZLA Technologies Corporation hat ihren Finanzbericht für Thunderbird für das Jahr 2024 veröffentlicht. Dieser gibt Einblick in die finanzielle Entwicklung des Projekts.

Wie bereits in den vorherigen Jahren hat MZLA auch im Jahr 2024 die Einnahmen durch Spenden steigern können – und das wieder deutlich. Nach knapp 2,8 Millionen USD im Jahr 2021, über 6,4 Millionen USD im Jahr 2022 und 8,6 Millionen USD im Jahr 2023 wurde im Jahr 2024 mit 10,3 Millionen USD erstmals ein zweistelliger Millionenbetrag erreicht.

Deutlicher Spitzenreiter im Ländervergleich ist im Übrigen Deutschland, woher 33 Prozent der Spenden-Einnahmen stammen. Im Vorjahr lag diese Zahl bei 29 Prozent. Vier Prozent der Spenden-Einnahmen stammen aus der Schweiz, drei Prozent aus Österreich.

Was die Ausgaben betrifft, hat MZLA auf die Offenlegung der Zahlen verzichtet und lediglich kommuniziert, in welche Bereiche prozentual wie viel Geld gegangen ist. Personalkosten machen mit 69 Prozent den Großteil aus, gefolgt von elf Prozent Infrastruktur & Operative Dienste, zehn Prozent Spendenbearbeitungsgebühren, sechs Prozent Allgemeines & Verwaltung, zwei Prozent Marketing & Community sowie zwei Prozent Reisen & Meetings.

Im Laufe des Jahres wurden 14 neue Mitarbeiter eingestellt, womit MZLA zu Jahresende 2024 auf eine Gesamtzahl von 43 Vollzeit-Mitarbeitern kam.

Während die Spenden-Einnahmen zu mehr oder weniger 100 Prozent auch dem Gesamt-Umsatz von MZLA entsprechen, was sich auch im Jahr 2025 nicht mehr grundlegend ändern wird, wird MZLA spätestens 2026 mit Thunderbird Pro eine zusätzliche Einnahmequelle haben. Neben dem Start der neuen Online-Angebote, einschließlich mit Thundermail einem eigenen E-Mail-Dienst, und natürlich der Weiterentwicklung von Thunderbird für Windows, macOS und Linux sowie Thunderbird für Android ist bald auch eine erste testbare Version von Thunderbird für iOS zu erwarten.

Der Beitrag MZLA veröffentlicht Finanzbericht 2024 für Thunderbird erschien zuerst auf soeren-hentzschel.at.

  •  

Tipp: Probleme mit Raspberry-Pi-Boot-Reihenfolge beheben

Mein Raspberry Pi 5 ist mit einem SSD-Hat ausgestattet (Pimoroni, siehe Blog). Auf der SSD ist Raspberry Pi OS Bookworm installiert. Jetzt möchte ich aber Raspberry Pi OS Trixie ausprobieren. Das System habe ich mit dem Raspberry Pi Imager auf eine SD-Card geschrieben. Sowohl SSD als auch SD-Karte sind angeschlossen, die Boot-Reihenfolge ist auf SD-Card first eingestellt.

Boot-Reihenfolge einstellen

raspi-config verändert die Variable BOOT_ORDER, die im EEPROM gespeichert wird. Die Variable kann mit `rpi-eeprom-config´ gelesen werden:

rpi-eeprom-config

  [all]
  BOOT_UART=0
  WAKE_ON_GPIO=0
  POWER_OFF_ON_HALT=1
  BOOT_ORDER=0xf461

0xf461 bedeutet (die Auswertung erfolgt mit den niedrigsten Bits zuerst, also von rechts nach links):

1 - Try SD card
6 - Try NVMe
4 - Try USB mass storage
f - RESTART (loop back to the beginning)

Die Einstellung ist also korrekt, trotzdem bootet der Pi hartnäckig von der SSD und ignoriert die SD-Card. Warum?

Analyse

Schuld sind die Partition-UUIDs! Die SSD habe ich vor eineinhalb Jahren mit dem SD Card Copier geklont. Die Option New Partition UUIDs habe ich nicht verwendet, ich sah keinen Grund dazu. Jetzt liegt folgendes Problem vor: Die SSD und die vom Rasbperry Pi Imager erzeugte SD-Card haben die gleichen Partition-UUIDs!

lsblk -o NAME,PARTUUID,UUID,MOUNTPOINT

  NAME          PARTUUID     UUID                                   MOUNTPOINT
  mmcblk0                                                            
  ├─mmcblk0p1   8a676486-01  1E1E-DAB6                              /boot/firmware
  └─mmcblk0p2   8a676486-02  b8316dab-786b-45e8-815c-3d4bbf198d98    

  nvme0n1                                                            
  ├─nvme0n1p1   8a676486-01  1E1E-DAB6                               
  ├─nvme0n1p2   8a676486-02  b8316dab-786b-45e8-815c-3d4bbf198d98   /
  └─nvme0n1p3   8a676486-03  293896b6-33ee-43de-87d4-56944456cec6 

Deswegen sind die UUIDs in /etc/fstab und in /boot/firmware/cmdline.txt nicht eindeutig:

cat /etc/fstab

  proc                  /proc           proc    defaults          0       0
  PARTUUID=8a676486-01  /boot/firmware  vfat    defaults          0       2
  PARTUUID=8a676486-02  /               ext4    defaults,noatime  0       1


cat /boot/firmware/cmdline.txt

  console=serial0,115200 console=tty1 root=PARTUUID=8a676486-02 rootfstype=ext4 \
    fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=AT

Solange beide Datenträger verbunden sind, ist nicht vorhersehbar, welche Partitionen tatsächlich genutzt werden. Am einfachsten wäre es natürlich, das Kabel zur SSD vorübergehend zu trennen; das ist aber nicht empfehlenswert, weil es hierfür keinen richtigen Stecker gibt, sondern nur eine sehr filigrane Kabelpressverbindungen, die möglichst nicht anrührt werden sollte.

Lösung

Ich habe den Pi ohne SD-Karte neu gebootet und dann

  • die Filesystem-UUIDs geändert,
  • /etc/fstab angepasst und
  • /boot/firmware/cmdline.txt ebenfalls angepasst.

Im Detail: Da die ursprüngliche Partitionierung der SSD von der SD-Karte übernommen wurde, liegt eine MBR-Partitionstabelle vor. In diesem Fall ergeben sich die Partition-UUIDs aus der Disk-ID plus Partitionsnummer. Die Disk-ID (Hex-Code mit 8 Stellen) kann mit fdisk geändert werden:

fdisk /dev/nvme0n1

  Welcome to fdisk (util-linux 2.38.1).
  Command (m for help): x.                   <-- aktiviert den Expertenmodus
  Expert command (m for help): i             <-- ID ändern
  Enter the new disk identifier: 0x1234fedc. <-- neue ID als Hex-Code
  Disk identifier changed from 0x8a676486 to 0x1234fedc.
  Expert command (m for help): r             <-- zurück ins Hauptmenü (return)
  Command (m for help): w                    <-- Änderungen speichern (write)

  The partition table has been altered.
  Syncing disks.

Mit fdisk -l vergewissern Sie sich, dass die Änderung wirklich funktioniert hat:

fdisk -l /dev/nvme0n1

  ...
  Disk identifier: 0x1234fedc

Weil der Datenträger in Verwendung ist, zeigt fdisk -l /dev/nvme0n1 weiter die alte UUID an. Sie müssen glauben, dass es funktioniert hat :-(

Bevor Sie einen Reboot machen, müssen Sie nun mit einem Editor auch /etc/fstab und /boot/firmware/cmdline.txt anpassen. In meinem Fall sehen die Dateien jetzt so aus:

cat /etc/fstab

  proc                  /proc           proc    defaults          0       0
  PARTUUID=1234fedc-01  /boot/firmware  vfat    defaults          0       2
  PARTUUID=1234fedc-02  /               ext4    defaults,noatime  0       1

cat /boot/firmware/cmdline.txt

  console=serial0,115200 console=tty1 root=PARTUUID=1234fedc-02 rootfstype=ext4 \
    fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=AT

Jetzt ist ein Reboot fällig, um zu testen, ob alles funktioniert. (Bei mir hat es im ersten Versuch NICHT funktioniert, weil ich bei fdisk das write-Kommando vergessen habe. Dann muss die SSD ausgebaut, ein USB-Gehäuse mit einem Computer verbunden und der Vorgang wiederholt werden.)

Ab jetzt sind die Partitions-UUIDs von SD-Karte und SSD voneinander unterscheidbar. Die Umschaltung des Boot-Systems mit raspi-config funktioniert, wie sie soll.

Quellen/Links

  •  

Verbesserte Qualität der Website-Übersetzungen in Firefox

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. Die Qualität der Übersetzungen sollte nun auf einem verbesserten Niveau sein.

Firefox wird seit Version 118 standardmäßig mit einer lokalen Funktion zur maschinellen Übersetzung von Websites für den Browser ausgeliefert. Das bedeutet, dass die Übersetzung vollständig im Browser geschieht und keine zu übersetzenden Inhalte an einen Datenriesen wie Google oder Microsoft übermittelt werden müssen.

Kleinere Verbesserungen der Übersetzungsqualitativ erfolgten im Laufe der Zeit bereits durch Anpassungen innerhalb von Firefox. Die zugrundeliegenden Sprachmodelle für die deutsche Sprache waren bisher allerdings unverändert und beinhalteten noch nicht die zahlreichen Verbesserungen der Trainings-Pipeline, an denen Mozilla in der Zwischenzeit gearbeitet hat. Nun hat Mozilla für diverse Sprachen, darunter auch Deutsch, neu trainierte Sprachmodelle veröffentlicht, welche für bessere Übersetzungen sorgen sollten.

Da die Sprachmodelle über die Remote-Einstellungen von Firefox bereitgestellt werden, ist die Aktualisierung der Sprachmodelle an kein Firefox-Update gebunden und erfolgt unabhängig von der verwendeten Firefox-Version.

Der Beitrag Verbesserte Qualität der Website-Übersetzungen in Firefox erschien zuerst auf soeren-hentzschel.at.

  •  

Linux Q&A - Hauke und Jean beantworten Eure Fragen! - Live

💾

Heute Abend klären wieder Hauke und Jean Deine Fragen live!
Wenn Du das Video unterstützen willst, dann gib bitte eine Bewertung ab, und schreibe einen Kommentar. Vielen Dank!

--------------------

Links:

Frage stellen: https://ask.linuxguides.de

Forum: https://forum.linuxguides.de/
Haukes Webseite: https://goos-habermann.de/index.php
Nicht der Weisheit letzter Schluß: youtube.com/@nichtderweisheit
Linux Guides Admin: https://www.youtube.com/@LinuxGuidesAdmin

Professioneller Linux Support*: https://www.linuxguides.de/linux-support/
Linux Mint Kurs für Anwender*: https://www.linuxguides.de/kurs-linux-mint-fur-anwender/
Ubuntu Kurs für Anwender*: https://www.linuxguides.de/ubuntu-kurs-fuer-anwender/
Linux für Fortgeschrittene*: https://www.linuxguides.de/linux-kurs-fuer-fortgeschrittene/
Offizielle Webseite: https://www.linuxguides.de
Tux Tage: https://www.tux-tage.de/
Forum: https://forum.linuxguides.de/
Unterstützen: http://unterstuetzen.linuxguides.de
Twitter: https://twitter.com/LinuxGuides
Mastodon: https://mastodon.social/@LinuxGuides
Matrix: https://matrix.to/#/+linuxguides:matrix.org
Discord: https://www.linuxguides.de/discord/
Kontakt: https://www.linuxguides.de/kontakt/
BTC-Spende: 1Lg22tnM7j56cGEKB5AczR4V89sbSXqzwN


Haftungsausschluss:
-------------------------------------
Das Video dient lediglich zu Informationszwecken. Wir übernehmen keinerlei Haftung für in diesem Video gezeigte und / oder erklärte Handlungen. Es entsteht in keinem Moment Anspruch auf Schadensersatz oder ähnliches.

*): Werbung
  •  

Mozilla veröffentlicht Firefox 143.0.4

Mozilla hat Firefox 143.0.4 veröffentlicht und behebt damit Verbindungsprobleme auf Google-Websites.

Download Mozilla Firefox 143.0.4

Mozilla hat Firefox 143.0.4 für Windows, macOS und Linux veröffentlicht und damit das Fallback-Verhalten von HTTP/3 auf HTTP/2 verbessert, nachdem es für einige Nutzer mit bestimmter Drittanbieter-Software sporadisch zu langsamen oder fehlgeschlagenen Ladevorgängen auf manchen Google-Websites kommen konnte.

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

  •  

openSUSE Leap 16

Mit Version 16 springt openSUSE gewissermaßen in ein neues Zeitalter. Eine Weile war unklar, in welcher Form und auf welcher Basis openSUSE (überhaupt) weitergeführt wird. Letztlich haben sich die Entwickler zu einem pragmatischen Ansatz entschieden: Auch mit Version 16 bleibt openSUSE Leap eine »normale« Distribution mit Paket-Updates (kein Immutable System mit atomaren Updates) — so wie der große Enterprise-Bruder SLES 16. Für diesen Artikel habe ich einen ersten Blick auf die Distribution geworfen.

openSUSE Leap 16 mit KDE Desktop

Installation

openSUSE verwendet das neue, HTML-basiertes Installationsprogramm agama, dessen Minimalismus Parallelen zu Fedora zeigt. Das Programm läuft unter Gnome im Webbrowser Firefox im Full-Screen-Modus. Es ist mir zwar gelungen, den Voll-Screen-Modus zu beenden, ich konnte aber keine anderen Programme starten, d.h. es liegt kein vollwertiges Live-System vor.

Tipp 1: Mit [Strg]+[+] bzw. [Strg]+[-] können Sie den Zoomfaktor verändern. Per Kontextmenüs können Sie Screenshots erstellen. Je nach (erkannter) Bildschirmauflösung wird das seitliche Menü nicht dauerhaft angezeigt, kann aber über den Menü-Button eingeblendet werden.

Tipp 2: Es ist möglich, das Installationsprogramm von einem externen Rechner aus zu bedienen. Dazu wechseln Sie mit Strg+Alt+F1 in eine Konsole. Dort wird die URL (https://agama.local) und das Passwort angezeigt. Jetzt können Sie im Webbrowser die URL oder IP-Adresse angeben, müssen die unsichere Verbindung (selbst signiertes Zertifikat) akzeptieren und sich einloggen. Eigentlich cool!

Die Installation läuft im Webbrowser, der aber normalerweise nicht sichtbar ist (Fullscreen-Modus)
Ein Wechseln in die Textkonsole offenbart einen Login-Link zur Weboberfläche des Installers

Im ersten Schritt stellen Sie rechts oben Sprache und Tastaturlayout für das Installationsprogramm ein und entscheiden Sie sich zwischen Leap 16 und Leap Micro 6.2. (Ich habe nur ersteres ausprobiert.)

Einstellung der Sprache des Setup-Programms (rechts oben) und Auswahl des Grundsystems

Jetzt beginnt die eigentliche Installation. Wenn Sie einen statischen Hostnamen wünschen, geben Sie den gewünschten Namen an. Unter Lokalisierung stellen Sie nochmals (!) Sprache, Tastatur und Zeitzone ein — dieses Mal für das zu installierende System. Eleganter wäre, wenn der Installer die bereits durchgeführten Einstellungen einfach übernehmen würde, aber sei’s drum.

Neuerliche Spracheinstellung, jetzt für das Zielsystem

Im Punkt Netzwerk können Sie eine WLAN-Konfiguration durchnehmen. Ethernet-Verbindungen mit DHCP werden automatisch hergestellt.

Damit kommen wir zur Partitionierung und zum Einrichten der Dateisystemeim Punkt Speicherung. Der Installer schlägt vor, drei Partitionen einzurichten: /boot/efi, eine Swap-Partition und eine Systempartition mit btrfs-Dateisystem und neu Subvolumes (/boot, /var, /root, /home usw.). Optional können Sie das Setup auf LVM umstellen (was im Zusammenspiel mit btrfs aber selten große Vorteile mit sich bringt) und eine Verschlüsselung aktivieren. Für Installationen in eine virtuelle Maschine oder auf einen Rechner, wo Sie einfach die gesamte SSD nutzen möchten, ist das Layout OK.

Wenig Auswahl bei der Partitionierung und Einrichtung der Dateisysteme

Auf »echter« Hardware schlägt das Setup-Programm vor, alle vorhandenen Partitionen des Datenträgers zu löschen und dann openSUSE zu installieren. VORSICHT!! Das Setup-Programm bietet die Möglichkeit, auf die Partitionierung Einfluss zu nehmen, die Menüs sind aber nicht ganz leicht zu erkennen (siehe die folgenden fünf Screenshots).

Vorsicht: Per Default löscht der Installer alle vorhandenen Betriebssysteme
Eine manuelle Partitionierung ist möglich, aber die Optionen sind gut versteckt
Wenn Sie einzelne Partitionen oder Dateisysteme ändern wollen, ist hier das entscheidende Menü
Der Editor für eine Partition / ein Dateisystem
Parallel-Installation von openSUSE zu diversen anderen Linux-Distributionen

Aufpassen müssen Sie auch beim Punkt Software: Standardmäßig wird nur eine Minimalinstallation ohne Desktop-System durchgeführt! Sie müssen die Auswahl ändern und haben dann die Wahl zwischen Gnome, KDE und XFCE.

Bei der Software-Auswahl muss ein Desktop-System ausgewählt werden!

Zuletzt richten Sie einen Benutzer ein, der automatisch sudo-Rechte erhält. Installieren startet nun die Installation.

Jetzt läuft die Installation

Ich habe mehrere Installationen in VMs durchgeführt, eine »echte« auf meinen Mini-PC. Echte Fehler sind keine aufgetreten, aber intuitiv ist die Bedienung des neuen Installers wirklich nicht. Warum muss das Rad ununterbrochen neu erfunden werden, wenn soviele andere Linux-Probleme einer Lösung harren?

Software-Versionen und Paketverwaltung

Die Versionsnummern wichtiger Basispakete stimmen zum größten Teil mit jenen von Debian 13 überein.

Basis               Programmierung     Server
---------------     --------------     ---------------
Kernel     6.12     bash       5.2     Apache      2.4
glibc      2.40     gcc       15.1     CUPS        2.4
Wayland    1.24     git       2.51     MariaDB    11.8
GRUB       2.12     Java     17/21     OpenSSH    10.0
Mesa       24.3     PHP        8.4     PostgreSQL   17
Systemd     257     Podman     5.4     Postfix    3.10
NetworkMan 1.52     Python    3.13     qemu/KVM   10.0
Gnome        48                        Samba      4.22
KDE Plasma  6.4

Generell ist das Angebot in Leap 16 im Vergleich zu den Vorgängerversionen 15.n aber geschrumpft, worauf LinuxUser hinweist (32.400 Pakete im Vergleich zu 44.700). Für Desktop-Programme ist Flatpak die beste Alternative. Darüberhinaus wird sich weisen, wie groß das Angebot von Paketen sein wird, die in externen Repositories angeboten werden.

Für Multimedia-Pakete war in der Vergangenheit Packman zuständig. Es ist zu erwarten, dass es dort in Zukunft ein Leap-16-Repository geben wird. Aktuell ist das aber noch nicht der Fall.

Am Fundament der Paketverwaltung hat sich wenig geändert — dafür sind weiterhin rpm (Low-Level) und zypper (High-level) zuständig. Desktop-Programme können wahlweise mit Software (Gnome) oder Discover (KDE) installiert werden. Das allumfassende Paketverwaltungs-Modul innerhalb von YaST gibt es nicht mehr.

Standardmäßig sind nur die Repos repo-oss und repo-openh264 aktiv:

zypper repos

  Repository priorities are without effect. All enabled repositories share the same priority.

  # | Alias                       | Name                      | Enabled | GPG Check | Refresh
  --+-----------------------------+---------------------------+---------+-----------+--------
  1 | Leap                        | Leap 16.0                 | No      | ----      | ----
  2 | openSUSE:repo-non-oss       | repo-non-oss (16.0)       | No      | ----      | ----
  3 | openSUSE:repo-non-oss-debug | repo-non-oss-debug (16.0) | No      | ----      | ----
  4 | openSUSE:repo-openh264      | repo-openh264 (16.0)      | Yes     | (r ) Yes  | Yes
  5 | openSUSE:repo-oss           | repo-oss (16.0)           | Yes     | (r ) Yes  | Yes
  6 | openSUSE:repo-oss-debug     | repo-oss-debug (16.0)     | No      | ----      | ----
  7 | openSUSE:repo-oss-source    | repo-oss-source (16.0)    | No      | ----      | ----

Für Verwirrung — auch in Software und Discover — kann das inaktive Repo Leap 16.0 sorgen. Es bezieht sich aber nur auf das Installationsmedium und wird im weiteren Betrieb tatsächlich nicht mehr gebraucht.

Das non-oss-Repo enthält diverse proprietäre Programme:

zypper modifyrepo --enable openSUSE:repo-non-oss

AdobeICCProfiles
bladeRF-fpga-firmware
bladeRF-fx3-firmware
bpg-fonts
discord
iozone
iozone-doc
ivtv-firmware
john-wordlists
Leap-Addon-NonOss
Leap-Addon-NonOss-release
libunrar-devel
libunrar7_1_10
libunrar7_1_10-x86-64-v3
ncat
ndiff
netperf
nmap
non_oss
nping
opera
patterns-non_oss
patterns-non_oss_opt
perlref
Reaction
Reaction-data
steamcmd
stream
unrar
wine-mono
xv
xv-doc
zenmap

Erste Schritte unter KDE

Ich habe openSUSE sowohl mit Gnome als auch mit KDE installiert, aber die weiteren Tests dann in einem KDE-System durchgeführt. KDE verwendet sowohl in virtuellen Maschinen als auch auf echter Hardware X11. Das ist ein wenig enttäuschend, Fedora 42 läuft per default mit Wayland (Fedora 43 beta natürlich auch), und meine Erfahrungen damit waren ausgezeichnet.

Der Versuch, die Auflösung meines 4k-Monitors auf 1920×1080 zu reduzieren, scheiterte. Der Bildschirminhalt wird komplett falsch skaliert, oben und unter im Monitor bleibt ein schwarzer Streifen. Bei 2560×1600 kam gar kein Bild zustande. Diese Probleme hatte ich noch nie. Ich bin dann bei der 4k-Auflösung geblieben und habe die Skalierung verändert. Das funktioniert unter KDE glücklicherweise wunderbar.

Zur Paketverwaltung ist Discover vorgesehen. Prinzipiell funktioniert das Programm zufriedenstellend. Irritierend ist auch hier die (korrekt!) inaktive Paketquelle Leap 16.

Paketverwaltung mit Discover. Es irritiert, dass »Leap 16« nicht aktiv ist — aber diese Paketquelle ist nur für die Installation relevant, danach nicht mehr.

Bei der Systemadministration sind Sie auf die Module der KDE-Systemeinstellungen angewiesen. YaST steht nicht mehr zur Verfügung.

Wie schon erwähnt, entscheidet sich der Installer, wenn Sie nicht andere Optionen einstellen, für ein btrfs-Dateisystem mit vielen Subvolumes aber ohne Komprimierung.

cat /etc/fstab 

UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /                       btrfs  defaults                      0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /var                    btrfs  subvol=/@/var                 0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /usr/local              btrfs  subvol=/@/usr/local           0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /srv                    btrfs  subvol=/@/srv                 0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /root                   btrfs  subvol=/@/root                0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /opt                    btrfs  subvol=/@/opt                 0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /home                   btrfs  subvol=/@/home                0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /boot/grub2/x86_64-efi  btrfs  subvol=/@/boot/grub2/x86_64-efi  0  0
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /boot/grub2/i386-pc     btrfs  subvol=/@/boot/grub2/i386-pc  0  0
UUID=EC5D-8DB9                             /boot/efi               vfat   utf8                          0  2
UUID=c3b4e719-0afe-4ad0-aea0-ad6a8c5c81e1  /.snapshots             btrfs  subvol=/@/.snapshots          0  0

lsblk

nvme1n1     259:6    0   1.8T  0 disk 
├─nvme1n1p1 259:7    0 372.5G  0 part 
├─nvme1n1p2 259:8    0     1G  0 part /boot/efi
├─nvme1n1p3 259:9    0   400G  0 part 
├─nvme1n1p4 259:10   0   100G  0 part 
├─nvme1n1p5 259:11   0   200G  0 part 
├─nvme1n1p6 259:12   0 279.4G  0 part 
├─nvme1n1p7 259:13   0 244.1G  0 part 
└─nvme1n1p8 259:14   0   100G  0 part /var
                                      /usr/local
                                      /srv
                                      /root
                                      /opt
                                      /home
                                      /boot/grub2/i386-pc
                                      /boot/grub2/x86_64-efi
                                      /.snapshots
                                      /

Neuerungen

Hinter den Kulissen gibt es eine Menge Neuerungen im Vergleich zu Version 15.n (siehe die Release Notes). Ganz kurz die wichtigsten Details:

  • Wie schon erwähnt: YaST gibt es nicht mehr. openSUSE empfiehlt, Cockpit zur Administration zu verwenden.
  • Per Default kommt SELinux zum Einsatz, AppArmor ist immerhin noch als Option verfügbar.

  • openSUSE 16 ist year-2038-safe.

  • openSUSE 16 soll bis 2031 jährlich mit neuen Versionen gepflegt werden. (Das wäre dann Version 16.6.) openSUSE 17 soll dann 2032 erscheinen. Warten wir ab, ob es dabei bleibt.

  • openSUSE 16 setzt bei x86-CPUs den V2-Level voraus. Konkret bedeutet das, dass die CPUs nicht älter als gut 15 Jahre sein dürfen (Details). 32-Bit-CPUs werden nicht mehr unterstützt.

  • Auf Rechnern mit NVIDIA-GPU werden die entsprechenden Paketquellen automatisch aktiviert und die proprietären Treiber installiert. Solche Systeme sollte jetzt out-of-the-box funktionieren. (Habe ich aber nicht getestet, mein Testrechner hat eine AMD-CPU/GPU.)

  • PulseAudio wurde durch PipeWire ersetzt.

  • Per Default darf root sich nicht via SSH anmelden. Verwenden Sie einen Account mit sudo-Rechten, oder ändern Sie ggfs. /etc/ssh/sshd_config.

  • libvirt + Docker: Wenn Sie Docker und libvirt (Qemu/KVM) einsetzen, funktioniert in den virtuellen Maschinen das Networking nicht mehr. Schuld ist Docker, das nicht in der Lage ist, sein Firewall-System auf nft umzustellen :-( Die Lösung ist gleich wie unter Fedora: Sie müssen das libvirt-Firewall-Backend zurück auf iptables setzen (Details).

  • nmap: Das populäre nmap-Tool hat die Lizenz geändert. openSUSE enthält die letzte Version unter der alten Lizenz.

Migrationstool

Es gibt ein neues Migrationstool, mit dem Sie einerseits openSUSE 15.6 auf Version 16.0 upgraden und andererseits einen Wechsel zwischen verschiedenen SUSE-Varianten (Leap, Tumblewheed, Slowroll, Enterprise) durchführen können. Ich habe das Programm allerdings nicht ausprobiert.

Das neue opensuse-migration-tool

SSH-Server und Firewall

Der SSH-Server wird standardmäßig installiert, läuft aber nicht. Abhilfe:

systemctl enable --now sshd

Als Firewall läuft standardmäßig das von Fedora und RHEL bekannte Programm firewalld. Standardmäßig sind nur die Ports für SSH und den DHCP-Client offen:

firewall-cmd --list-services

  dhcpv6-client ssh

Qemu/KVM-Zwischenablage

Wenn Sie openSUSE 16 in einer virtuellen Maschine mit Qemu ausführen, funktioniert die Zwischenablage nicht. Abhilfe: zypper install spice-vdagent, unter Gnome (Wayland!) zusätzlich zypper install wl-clipboard.

Fazit

In openSUSE 16 ist viel Zeit, Mühe und Liebe geflossen — und das Ergebnis kann sich wirklich sehen lassen. Die Frage ist allerdings, ob das reicht. Das Angebot am Distributionsmarkt ist überwältigend groß, und mir fällt es ehrlich schwer, eine klare Zielgruppe für openSUSE zu erkennen.

  • Den Mainstream decken Debian, Fedora und Ubuntu ab. Meine Empfehlung an Linux-Desktop-Einsteiger geht ganz stark in diese Richtung.
  • Server-seitig wieder Debian und Ubuntu plus RHEL und Klone.
  • Wer gerne immer Up-to-date ist: Arch Linux (oder ein Derivat).
  • CachyOS kitzelt maximale Performance aus dem Rechner, verbunden mit den Arch-Linux-Vorteilen und aktuell einem Hype-Faktor.
  • Linux Mint vielleicht für Einsteiger. (Ich war allerdings nie ein riesiger Mint-Fan und sehe wenig Vorteile im Vergleich zu Debian/Fedora/Ubuntu.)
  • Pop!_OS als Distribution für system76-Kunden. Und falls der COSMIC-Desktop je fertig + stabil wird, könnte die Distribution ein interessantes Angebot für technisch orientierte Anwender werden (Entwickler/Admins/Freaks).

Im Vergleich zu Debian/Fedora/Ubuntu ist in Leap 16 das Software-Angebot geringer. Die Aktualität vieler Pakete kann wiederum mit Fedora und Ubuntu nicht mithalten. Als ausgesprochen einsteigerfreundlich empfinde ich Leap auch nicht (schon gar nicht die Installation). YaST als Argument fällt weg. (Das Konfigurations-Tool wurde schon in den letzten Jahren nur noch sehr halbherzig gepflegt.) Der Dateisystem-Editor von openSUSE während der Installation war Weltklasse, aus meiner Sicht besser als bei allen anderen Distributionen. Er ist dem neuen Installationsprogramm zum Opfer gefallen.

Wer sollte sich also für openSUSE entscheiden, und warum? openSUSE 16 ist natürlich eine super Trainings-Umgebung für SLES 16. Aber ist das genug? Selbst innerhalb der SUSE-Welt empfand ich Tumblewheel (oder Slowroll) in den letzten Jahren deutlich spannender als Leap.

Quellen/Links

  •  

📚 Java-Grundkurs (5. Aufl.)

Ganz frisch zu Java 25 erscheint diese Woche die fünfte Auflage meines Java-Grundkurses. Das Buch richtet sich an Schüler, Studentinnen und alle, die gerade Java lernen oder von einer anderen Programmiersprache auf Java umsteigen möchten. Im handlichen Taschenbuchformat fasst das Buch die Syntax von Java in seiner aktuellen Form zusammen. Das Buch berücksichtigt dabei die vielen in Java 25 endlich verfügbaren Vereinfachungen, die gerade Einsteigern sehr entgegenkommen.

100 Beispiele und Übungen (inkl. Lösungen!) führen von der Theorie in die Praxis. Alle Beispieldateien liegen in zwei Versionen vor, einmal aktuell zu Java 25 und einmal für ältere Java-Installationen, wie sie gerade im Schulbetrieb leider üblich sind.

  •  

Neues von Linux: 6.17 veröffentlicht sowie anstehende bcachefs-Entfernung

Kurz notiert: in den letzten beiden Tagen gab es einige Nachrichten vom Linux-Kernel.

Zuallererst wurde der Kernel in Version 6.17 veröffentlicht. Die Änderungen führen einerseits bessere Steueroption zur Auswahl von Prozessormitigationen, Live-Patching auf 64-Bit Arm sowie einige Verbesserungen an Dateisystemen wie ext4 und Btrfs ein. Die historische Sonderbehandlung von Einprozessorsystemen (ohne SMP) wird rückgebaut. Wer an allen Änderungen im Detail interessiert ist, kann einen Blick in die entsprechenden LWN Artikel oder bei LinuxNews werfen.

Apropos Dateisysteme: das jüngst aufgenommene bcachefs, um das sich vor und während seines Aufenthaltes im Mainline-Zweig viele kontroverse Diskussionen ergaben, wird Mainline im nächsten Release (6.18) voraussichtlich wieder verlassen. Torvalds kündigte im Commit zur Entfernung an, dass es als DKMS-Paket ausgeliefert werden soll.

Damit endet allerdings sicherlich auch die Maßgabe, dass die Module, von denen bcachefs abhängig ist, auf das Dateisystem abgestimmt werden. Hier gab es genau Streit, weil die Änderungen, die Kent Overstreet erwartet hatte, von den zuständigen Maintainern äußerst kritisch aufgenommen wurden. Ob die Änderungen in den anderen Modulen nun wieder zurückgesetzt werden, bleibt abzusehen.

  •  

Mozilla veröffentlicht Sicherheits-Update Firefox 143.0.3

Mozilla hat Firefox 143.0.3 veröffentlicht und behebt damit mehrere Probleme der Vorgängerversion. Auch mehrere Sicherheitslücken wurden behoben.

Download Mozilla Firefox 143.0.3

Mozilla hat Firefox 143.0.3 für Windows, macOS und Linux veröffentlicht. Firefox 143.0.2 wurde für diese Plattformen übersprungen, da diese Versionsnummer einem Android-Update vorbehalten war.

Mit dem Update auf Firefox 143.0.3 behebt Mozilla zwei Sicherheitslücken.

Die Verzögerung, um einen Tab per Drag and Drop an den linken Rand der Tableiste anzuheften, wurde standardmäßig von 350 auf 500 ms erhöht, um die Wahrscheinlichkeit für versehentliches Anheften zu reduzieren, und kann außerdem ab sofort via about:config angepasst werden (browser.tabs.dragDrop.pinInteractionCue.delayMS).

Die Option dom.webgpu.enabled in about:config kann jetzt auch in finalen Firefox-Versionen aktiviert werden, um den WebGPU-Standard zu aktivieren. Die Implementierung ist zwar noch nicht vollständig, aber durch die kürzliche Aktivierung in Safari ist ein erhöhter Bedarf für Entwickler entstanden, das Feature auch in Firefox testen zu können.

Das Aktualisieren mancher Erweiterungen via about:addons war nicht mehr möglich. Außerdem konnte das Öffnen der Einstellungen einer Erweiterung über den Dialog, der nach dessen Installation erschien, dazu führen, dass manche Browser-Funktionen wie beispielsweise Tastatur-Befehle bis zum Neustart des Browsers nicht mehr im gleichen Fenster funktionierten. Ebenfalls in Zusammenhang mit Erweiterungen steht die Korrektur eines Problems, bei dem die gespeicherten Daten einer Erweiterung einen Firefox-Absturz bei Programmstart verursachen konnten.

Ein Performance-Problem beim Laden mancher Websites wurde behoben, welches auftreten konnte, wenn man mit einem Netzwerk verbunden ist, welches UDP-Verbindungen blockiert.

Auf dem Bildschirm Firefox View war es nicht länger möglich, einzelne Bereiche einzuklappen.

Bereits in Firefox 143.0.1 wurde eine injizierte DLL-Datei der Sicherheits-Software von Trend Micro in einer bestimmten Version blockiert, weil diese Firefox-Abstürze verursachte. Aufgrund fehlender Rückmeldung von Trend Micro wurden jetzt auch alle zukünftigen Versionen blockiert. Außerdem wurde eine DLL-Datei der Meta Quest Link App blockiert, weil diese Abstürze bei der Verwendung von WebRTC verursachte.

Dazu kommen eine Korrektur für Nutzer vertikaler Tabs, Korrekturen für vier weitere potenzielle Absturzursachen sowie mehrere Verbesserungen, die in Zusammenhang mit einem geplanten VPN-Experiment stehen und eine Verbesserung für ein geplantes Experiment für einen verbesserten Algorithmus der Adressleisten-Vorschläge.

Der Beitrag Mozilla veröffentlicht Sicherheits-Update Firefox 143.0.3 erschien zuerst auf soeren-hentzschel.at.

  •  

Das Kielux Rätsel 2025 - Mit Auflösung - Livestream mit Claus und Jean

💾

Kieler Linux-Tage: https://kielux.de/

Dowload des Quiz: https://cloud.linuxguides.de/s/6NjwqD4zczWsje2

Informationen zur Kieler R-Gruppe (https://rkiel.de)
Diese Gruppe ist für Alle, die sich in Kiel und Umgebung mit der Statistik-Programmiersprache R beschäftigen... weil ihr es könnt oder weil ihr es müsst. Bücher, Text-Websites, Onlineforen und Videotutorials über R gibt es reichlich. Wenn ihr eure Begeisterung oder euren Frust über R zur Abwechslung mal im Real Life teilen wollt, ist dies der richtige Rahmen für euch Kieler R-er - also für alle Kieler, die sich mit R beschäftigen.

Wenn Du das Video unterstützen willst, dann gib bitte eine Bewertung ab, und schreibe einen Kommentar. Vielen Dank!

--------------------

Links:

Forum: https://forum.linuxguides.de/
Haukes Webseite: https://goos-habermann.de/index.php
Nicht der Weisheit letzter Schluß: youtube.com/@nichtderweisheit
Linux Guides Admin: https://www.youtube.com/@LinuxGuidesAdmin

Offizielle Webseite: https://www.linuxguides.de
Tux Tage: https://www.tux-tage.de/
Forum: https://forum.linuxguides.de/
Unterstützen: http://unterstuetzen.linuxguides.de
Twitter: https://twitter.com/LinuxGuides
Mastodon: https://mastodon.social/@LinuxGuides
Matrix: https://matrix.to/#/+linuxguides:matrix.org
Discord: https://www.linuxguides.de/discord/
Kontakt: https://www.linuxguides.de/kontakt/


Haftungsausschluss:
-------------------------------------
Das Video dient lediglich zu Informationszwecken. Wir übernehmen keinerlei Haftung für in diesem Video gezeigte und / oder erklärte Handlungen. Es entsteht in keinem Moment Anspruch auf Schadensersatz oder ähnliches.

*): Werbung
  •  

Wenn ansible.builtin.ping kein pong zurückgibt,…

…dann können keine Ansible-Playbooks auf dem Zielsystem ausgeführt werden, Sysadmins lassen vom Schreiben der Playbooks ab und wenden sich der Fehleranalyse zu. Genau das mache ich nämlich gerade.

Und damit ihr auch etwas davon habt, halte ich das Ganze in diesen Beitrag fest. Die Gründe dafür sind vielfältig:

  • Unerfahrene Sysadmins können lernen, wie man bei einer Fehleranalyse vorgehen kann, um nach endlich vielen Schritten zu einem Ergebnis zu kommen
  • Falls ich meine Arbeit unterbrechen muss, kann ich mich mithilfe dieses Textes besser erinnern, was ich schon getestet habe und meine Arbeit fortsetzen
  • Falls ich Expertenrat einholen muss, kann ich zeigen, was ich schon alles versucht habe

Die erfahrenen Supporter und Sysadmins unter euch sind gerne eingeladen, in den Kommentaren zu ergänzen, wie ihr bei so einem Problem vorgeht und was ich hätte besser machen können. So lernen wir alle etwas dabei.

Die Methode

Bei einer Fehleranalyse stochert man nicht einfach im Heuhaufen herum, in der Hoffnung eine Nadel zu finden. Ich gehe während der Fehleranalyse in folgender Schleife (Pseudocode) vor:

Solange das Problem besteht:
  Sichte und bewerte die vorhandenen Informationen;
  Forumuliere eine Hypothese zur Ursache des Problems;
  Überprüfe die Hypothese;
  Hast du damit das Problem gefunden, stelle es ab und höre auf;
  Hast du das Problem damit noch nicht gefunden, nimm die gewonnenen Erkenntnisse und iteriere;

Das Problem

$ ansible -i hosts host.example.com -m ping
host.example.com | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.9"
    },
    "changed": false,
    "module_stderr": "Shared connection to host.example.com closed.\r\n",
    "module_stdout": "/usr/bin/python3.9: can't open file '/home/tronde/.ansible/tmp/ansible-tmp-1757269581.9965136-5304-74956742819711/AnsiballZ_ping.py': [Errno 1] Operation not permitted\r\n",
    "msg": "MODULE FAILURE: No start of json char found\nSee stdout/stderr for the exact error",
    "rc": 2
}

Der obige Code-Block zeigt das fehlgeschlagene Ansible-Ad-hoc-Kommando. Das Kommando führt das Module ansible.builtin.ping aus, welches prüft, ob eine Verbindung zum Zielsystem hergestellt werden kann und eine nutzbare Python-Umgebung gefunden wird. Wenn dies erfolgreich ist, sieht die Ausgabe wie im folgenden Code-Block aus:

$ ansible -i hosts host2.example.com -m ping
host2.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.9"
    },
    "changed": false,
    "ping": "pong"
}

Die Ausgangslage

Bevor ich mit der Fehleranalyse beginne, schreibe ich auf, was ich über meinen Ansible Control Node und meine beiden Managed Nodes weiß.

Ansible Control Node

  • Fedora release 42 (Adams)
  • ansible [core 2.18.6]
    • config file = /etc/ansible/ansible.cfg
    • ansible python module location = /usr/lib/python3.13/site-packages/ansible
    • executable location = /usr/bin/ansible
    • python version = 3.13.7 (main, Aug 14 2025, 00:00:00) GCC 15.2.1 20250808 (Red Hat 15.2.1-1)
    • jinja version = 3.1.6
    • libyaml = True

Ansible Managed Nodes

Über host.example.com und host2.example.com ist bekannt, dass es:

  • sich um Red Hat Enterprise Linux release 9.6 (Plow) handelt
  • Ich mich mit dem User tronde und SSH-Private-Key einloggen kann
    • Bei tronde handelt es sich um einen unprivilegierten Benutzer
    • Dieser darf sudo nutzen, um seine Rechte auszuweiten; dazu muss ein Passwort eingegeben werden
  • SELinux auf Enforcing steht

Die Fehlermeldung

Und ich habe natürlich eine Fehlermeldung:

"module_stdout": "/usr/bin/python3.9: can't open file '/home/tronde/.ansible/tmp/ansible-tmp-1757269581.9965136-5304-74956742819711/AnsiballZ_ping.py': [Errno 1] Operation not permitted\r\n",

Python meldet, dass die Ausführung von AnsiballZ_ping.py nicht zugelassen ist.

Hypothese 1: Es liegt nicht an AnsiballZ_ping.py

Wenn dieses Python-Skript nicht ausgeführt werden kann, kann ein anderes Python-Skript ebenfalls nicht ausgeführt weden. Um diese Hypothese zur überprüfen, versuche ich, die UID des Benutzers mit dem Modul ansible.builtin.command abzufragen:

$ ansible -i hosts host.example.com -m command -a 'id'
host.example.com | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.9"
    },
    "changed": false,
    "module_stderr": "Shared connection to host.example.com closed.\r\n",
    "module_stdout": "/usr/bin/python3.9: can't open file '/home/tronde/.ansible/tmp/ansible-tmp-1757271016.543905-6189-111082369101490/AnsiballZ_command.py': [Errno 1] Operation not permitted\r\n",
    "msg": "MODULE FAILURE: No start of json char found\nSee stdout/stderr for the exact error",
    "rc": 2
}

Damit ist bewiesen, dass die Fehlerursache nicht allein im Skript AnsiballZ_ping.py liegt.

Hypothese 2: Es ist ein Problem mit Berechtigungen

Die Meldung [Errno 1] Operation not permitted deutet an, dass fehlende Berechtigungen die Ursache sein können. Also führe ich das Kommando auf dem betroffenen Managed Node einmal als root aus.

$ ansible -i hosts host.example.com -m ping -b -K
BECOME password: 
host.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.9"
    },
    "changed": false,
    "ping": "pong"
}

Root darf also, was tronde nicht darf, denn mit erweiterten Berechtigungen kann das Kommando erfolgreich ausgeführt werden. Die Python-Skripte, die tronde nicht ausführen darf, liegen im Pfad /home/tronde/.ansible/tmp/<von-Ansible-temporär-erstelltes-Verzeichnis>/AnsiballZ_{command,ping}.py.

Hypothese 3: tronde darf keine Python-Skripte ausführen

Genauer gesagt, tronde darf keine Python-Skripte ausführen, welche unterhalb von /home/tronde/.ansible/tmp/ abgelegt sind. Auch diese These wird direkt geprüft. Dazu logge ich mich per SSH als User tronde auf dem Zielsystem ein, erstelle ein einfaches Python-Skript und versuche dieses auszuführen:

$ mkdir /home/tronde/.ansible/tmp/test
$ cat << EOF > /home/tronde/.ansible/tmp/test/hello.py
> #!/usr/bin/env python3.9
> print("Hello World")
> EOF
$ chmod u+x /home/tronde/.ansible/tmp/test/hello.py
$ /usr/bin/python3.9 /home/tronde/.ansible/tmp/test/hello.py
/usr/bin/python3.9: can't open file '/home/tronde/.ansible/tmp/test/hello.py': [Errno 1] Operation not permitted

Durch diesen Test habe die Hypothese verifiziert und zusätzlich folgendes gelernt: Meine Ansible-Konfiguration auf meinem Ansible Control Node hat nichts mit dem Problem zu tun, da das Problem auftritt, wenn Ansible gar nicht beteiligt ist.

Hypothese 4: Falsche Datei-Berechigungen verhindern die Ausführung der Datei

Ich schaue mir die Datei-Berechtigungen bis zur Datei hello.py mit dem Programm namei(1) an:

$ namei -mo /home/tronde/.ansible/tmp/test/hello.py
f: /home/tronde/.ansible/tmp/test/hello.py
 dr-xr-xr-x root      root      /
 drwxr-xr-x root      root      home
 drwxr-x--- tronde tronde tronde
 drwxrwxr-x tronde tronde .ansible
 drwx------ tronde tronde tmp
 drwxr-xr-x tronde tronde test
 -rwxr--r-- tronde tronde hello.py

Das sieht auf den ersten Blick nicht verkehrt aus. Ich wechsel in das Verzeichnis und lasse mir die Attribute der Datei mit verschiedenen Programmen anzeigen.

$ cd .ansible/tmp/test/
$ stat hello.py
  File: hello.py
  Size: 46        	Blocks: 8          IO Block: 4096   regular file
Device: fd06h/64774d	Inode: 51511298    Links: 1
Access: (0744/-rwxr--r--)  Uid: ( 1000/tronde)   Gid: ( 1000/tronde)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2025-09-07 21:21:08.201875001 +0200
Modify: 2025-09-07 21:23:04.564787755 +0200
Change: 2025-09-07 21:23:25.642771941 +0200
 Birth: 2025-09-07 21:21:08.201875001 +0200

$ getfacl hello.py
# file: hello.py
# owner: tronde
# group: tronde
user::rwx
group::r--
other::r--

$ file hello.py 
hello.py: writable, executable, regular file, no read permission

Datei-Berechtigungen und Linux-ACL bescheinigen dem User tronde Lesezugriff auf die Datei hello.py. Das file-Kommando bescheinigt jedoch no read permission.

Hypothese 5: Das chmod u+x verursacht das Problem

Nach der Erstellung des Skripts habe ich dieses mit chmod u+x ausführbar gemacht. Vielleicht verursacht erst dieser Befehl das Problem. Also schaue ich mir die Informationen zum Dateityp vor und nach dem Kommando an. Dazu erstelle ich ein neues Skript.

$ cat <<EOF >hello2.py
> #!/usr/bin/env python3.9
> print("Hello Sysadmin.")
> EOF
$ file hello2.py 
hello2.py: writable, regular file, no read permission

Damit kann ich chmod ebenfalls als Fehlerquelle ausschließen.

Hypothese 6: Shebang verursacht das Problem

Die Shebang #! sorgt dafür, dass das folgende Kommando mit dem Dateinamen als Argument ausgeführt wird. Gleichzeitig gibt die Shebang auch dem Programm file einen Hinweis darauf, um welchen Dateityp es sich handelt.

Zur Überprüfung dieser Hypothese erhebe ich zuerst die Antworten zu folgenden Fragen.

Kann das Skript ohne Shebang ausgeführt werden?

Bei der Überprüfung von Hypothese 2 habe ich verifiziert, dass root die Dateien wie gewohnt ausführen kann. Nun editiere ich die Datei hello2.py mit root-Rechten und entferne die Shebang. Anschließend versuche ich als User tronde, die Datei mit Hilfe des Python3.9-Interpreters auszuführen.

$ file hello2.py 
hello2.py: ASCII text
$ cat hello2.py 
print("Hello Sysadmin.")
$ /usr/bin/python3.9 hello2.py 
Hello Sysadmin.

Ohne Shebang kann ich das Skript ausführen. Füge ich die Shebang wieder ein, ist der Fehler zurück. Ich kann die Datei noch nicht mal mehr lesen:

$ cat hello2.py 
cat: hello2.py: Operation not permitted

$ sudo !!
sudo cat hello2.py 
#!/usr/bin/python3.9
print("Hello Sysadmin.")

Zeigen Bash-Skripte mit Shebang das gleiche Verhalten?

$ cat <<EOF >world.sh
> #!/usr/bin/env bash
> echo "Hello world."
> EOF

$ file world.sh 
world.sh: Bourne-Again shell script, ASCII text executable

$ cat world.sh 
#!/usr/bin/env bash
echo "Hello world."

$ bash world.sh 
Hello world.

$ chmod u+x world.sh

$ ./world.sh 
Hello world.

Hier ist das Verhalten wie erwartet. Damit ist zwar noch nicht sicher bewiesen, dass das Shebang-Problem mit dem Python-Interpreter zusammenhängt, es gibt aber einen ersten Hinweis.

Wie sieht die Ausgabe von file auf einem Referenzsystem aus?

Mit host2 habe ich ja ein System, das Python-Skripte ohne Fehler ausführt. Ich erstelle auch hier das hello.py-Skript inkl. Shebang und lasse mir die Ausgabe von file anzeigen:

$ cat <<EOF >hello.py
> #!/usr/bin/env python3.9
> print("Hello, world.")
> EOF

$ file hello.py 
hello.py: Python script, ASCII text executable

Hier findet sich kein Hinweis auf no read permission.

Hypothese 7: Es ist nur der User tronde betroffen

Um diese Hypothese zu prüfen, erstelle ich einen neuen Benutzer test, ein Python-Skript und prüfe, ob das Problem auftritt:

# useradd test
# su - test
$ pwd
/home/test
$ cat <<EOF >hello.py
> #!/usr/bin/env python3
> print("Hello, world.")
> EOF
$ cat hello.py 
cat: hello.py: Operation not permitted

Das Problem ist nicht auf den User tronde beschränkt. Es scheint alle nicht privilegierten User zu betreffen.

Zwischenfazit

  • Das Problem scheint Host-spezifisch zu sein, da es auf einem Referenzsystem nicht auftritt
  • Das Problem tritt nur auf, wenn nicht privilegierte User ein Python-Skript ausführen, welches eine Shebang enthält
    • Diese Skripte können jedoch mit root-Rechten ausgeführt werden
    • Ohne die Shebang können die Skripte mittels /usr/bin/python3 <scriptname> ausgeführt werden
  • Ist eine Shebang enthalten, die einen Python-Interpreter enthält, verlieren unprivilegierte User den Lesezugriff auf die Datei (cat, less, etc. sind dann ebenfalls betroffen)
  • Trage ich eine andere Shebang z.B. #!/usr/bin/bash ein, kann ich das Skript als unprivilegierter User mittels `python3 <scriptname>` korrekt ausführen

Für mich bedeutet das leider, dass ich mir nun Hilfe suchen muss, da mir die Ideen ausgehen. Also beginne ich mit einer Internetsuche nach „troubleshooting shebang in python3″… und frage anschließend eine Kollegin um Rat. Vielen lieben Dank Michi für deine Zeit und Ideen!

Die Ursache

Michi und ich haben uns in einer Videokonferenz zusammengefunden und das Problem gemeinsam untersucht. Dabei sind wir nach obigen Muster vorgegangen:

  1. Genau eine Sache überprüfen
  2. Ergebnis auswerten
  3. Eine weitere Vermutung prüfen
  4. Ergebnis auswerten usw.

Dabei haben wir uns SELinux, das Audit-Log, die Linux-ACLs, das Environment, alias, locale und die Ausgabe diverser strace-Kommandos angeschaut. Die Details spare ich an dieser Stelle ein und komme zum Wesentlichen. Michi fand diesen Foreneintrag: Non-root users unable to read perl scripts. Darin wird fapolicyd als Fehlerquelle identifiziert. Und das ist tatsächlich auch in meinem Fall der Übeltäter.

Stoppe ich fapolicyd.service, kann ich die Python-Skripte mit Shebang wieder ausführen. Starte ich den Dienst erneut, ist auch das Problem zurück. Die Ursache ist identifiziert.

Moment, was ist fapolicyd?

Das Software-Framework fapolicyd steuert die Ausführung von Anwendungen basierend auf einer benutzerdefinierten Richtlinie. Dies ist eine der effizientesten Methoden, um die Ausführung nicht vertrauenswürdiger und potenziell bösartiger Anwendungen auf dem System zu verhindern.

Übersetzung aus Introduction to fapolicyd

Die von Ansible generierten und die von mir zum Test erstellten Python-Skripte wurden in der Ausführung blockiert, da diese als nicht vertrauenswürdig eingestuft wurden.

Allerdings fällt das in diesem Fall in die Kategorie „Gut gemeint ist nicht gleich gut gemacht“. Denn während zwar der Zugriff auf Python-Skripte mit Shebang für nicht-privilegierte User blockiert wird, können Skripte ohne entsprechende Shebang weiterhin ausgeführt werden. Wirkliche Sicherheit bietet dies nicht. Ich mache mir dazu mal eine Notiz, um das beobachtete Verhalten im Nachgang mit den Entwicklern zu diskutieren. Vielleicht habe ich das Design und Konzept von fapolicyd noch nicht ganz verstanden.

Warum ich da nicht früher drauf gekommen bin

  • Keine Ausgabe gab einen Hinweis darauf, dass fapolicyd die Ausführung blockiert
  • Ich habe fapolicyd vor langer Zeit zum Test auf diesem Host installiert und vergessen, dass es läuft
  • Durch fehlende Konfiguration gab es keine Einträge im Audit-Log, die auf die Ursache hätten hinweisen können

Wie findet man die Ursache, wenn man weiß, dass fapolicyd läuft?

Erstmal muss man wissen bzw. sich in meinem Fall daran erinnern, dass fapolicyd läuft. Dann kann man für einen schnellen Test fapolicyd.service stoppen und prüfen, ob das Problem noch besteht.

Um nun herauszufinden, warum fapolicyd die Ausführung von Python-Skripten mit Shebang blockiert, folge ich der Dokumentation in Kapitel 12.6. Troubleshooting problems related to fapolicyd. Ich stoppe fapolicyd.service und starte den Dienst mit dem Befehl fapolicyd --debug-deny. Damit werden nur Einträge ausgegeben, die blockierte Zugriffe zeigen. In diesem Modus führe ich den ursprünglichen Ansible-Ad-hoc-Befehl ansible -i hosts host.example.com -m ping aus, der wie erwartet fehlschlägt. In der Ausgabe auf host.example.com sehe ich nun:

09/08/2025 20:39:07 [ DEBUG ]: Rule number API supported yes                                            
09/08/2025 20:39:08 [ DEBUG ]: rule=11 dec=deny_audit perm=open auid=1000 pid=693342 exe=/usr/bin/python3.9 : path=/home/tronde/.ansible/tmp/ansible-tmp-1757356747.8650832-23284-14960045792104/AnsiballZ_ping.py ftype=text/x-python trust=0
09/08/2025 20:39:08 [ DEBUG ]: rule=11 dec=deny_audit perm=open auid=1000 pid=693342 exe=/usr/bin/python3.9 : path=/home/tronde/.ansible/tmp/ansible-tmp-1757356747.8650832-23284-14960045792104/AnsiballZ_ping.py ftype=text/x-python trust=0

Die Lösung

Damit ich host.example.com mit Ansible verwalten kann, muss ich die Ausführung von Python-Skripten unterhalb von /home/tronde/.ansible/tmp/ erlauben. Das dazu erforderliche Vorgehen ist in der Dokumentation in Kapitel 12.4. Adding custom allow and deny rules for fapolicyd beschrieben. Für meinen konkreten Fall sehen die einzelnen Schritte wie folgt aus:

Nach obiger Ausgabe habe ich Regel 11 (rule=11) getriggert. Also schaue ich mir zuerst an, was in Regel 11 steht und anschließend, in welcher Datei unterhalb von /etc/fapolicyd/rules.d diese Regel steht:

~]# fapolicyd-cli --list | grep 11
11. deny_audit perm=any all : ftype=%languages

~]# grep 'deny_audit perm=any all : ftype=%languages' /etc/fapolicyd/rules.d/*
/etc/fapolicyd/rules.d/70-trusted-lang.rules:deny_audit perm=any all : ftype=%languages

Anschließend erstelle ich eine Allow-Regel, in einer neuen Datei. Diese muss lexikalisch vor obiger Datei mit der Deny-Regel liegen:

~]# cat <<EOF >/etc/fapolicyd/rules.d/69-trusted-ansible-scripts.rules
> allow perm=any exe=/usr/bin/python3.9 trust=1 : dir=/home/tronde/.ansible/tmp/ trust=0
> EOF

~]# fagenrules --check
/sbin/fagenrules: Rules have changed and should be updated

~]# fagenrules --load
~]#

Anschließend führe ich zum Test folgende Kommandos aus:

  1. Auf host.example.com: fapolicy --debug-deny
  2. Auf meinem Ansible Control Node: $ ansible -i inventory host.example.com -m ping

Ich bestaune das gewünschte Ergebnis:

host.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Nun beende ich den Debug-Modus und starte fapolicyd.service. Fehleranalyse und Entstörung sind damit beendet.

Für welche Anwendungsfälle diese Lösung funktioniert

Die obige Lösung sorgt dafür, dass Python-Skripte unterhalb des Verzeichnisses /home/tronde/.ansible/tmp/, welche eine Python-Shebang beinhalten, mit dem Python-Interpreter /usr/bin/python3.9 ausgeführt werden können.

Diese Lösung funktioniert nicht

  • Für andere unprivilegierte User außer tronde
  • Für andere Python-Interpreter wie z.B. /usr/bin/python3 oder /usr/bin/python3.11

Hinterher ist man immer schlauer

Jetzt, wo ich weiß, wonach ich suchen muss, finde ich auch direkt mehrere Treffer in den Red Hat Solutions:

Dokumentation findet sich neben der Manpage fapolicyd(8) z.B. auch im RHEL 9 Security Hardening Guide ab Kapitel 12. Mit RHELDOCS-20981 – Improve section „Deploying fapolicyd“ in RHEL Security Hardening Guide – habe ich zudem einen Verbesserungsvorschlag eingereicht.

Fazit

Dieser Text hat an einem konkreten Beispiel gezeigt, wie eine strukturierte Fehleranalyse durchgeführt wird. Diese führt über die Problembeschreibung sowie das Formulieren von Hypothesen und deren Falsifizierung/Verifizierung nach endlich vielen Schritten zu einer Lösung.

Die Länge des Textes zeigt, wie aufwändig eine Fehleranalyse werden kann. Wenn man keinen direkten Zugriff auf das betroffene System hat und mit jemandem ausschließlich über ein Ticket-System kommunizieren kann, wird schnell klar, dass sich ein Fall über mehrere Tage und Wochen hinziehen kann.

Ich war irgendwann geistig erschöpft und hatte keine Lust mehr allein weiterzumachen, da mir die Ideen ausgingen. In diesem Fall hilft es, sich einen frischen Geist zur Unterstützung zu holen. Gemeinsam mit meiner Kollegin Michi konnte die Ursache (fapolicyd) identifiziert werden.

Mit Hilfe der Dokumentation war ich dann auch in der Lage, das Problem zu lösen. Ich kann nun Ansible-Playbooks auf dem Zielsystem ausführen.

Der Dienst fapolicyd überzeugt mich nicht. Meine Gedanken dazu werde ich in einem Folgeartikel mit euch teilen.

In einem weiteren Folgeartikel werde ich darüber schreiben, was Hilfesuchende und Supporter tun können, damit beide Seiten eine möglichst gute Support-Erfahrung haben.

Ich freue mich nun über ein gelöstes Problem und schreibe an meinem Ansible-Playbook weiter.

  •  

Mozilla VPN 2.31 veröffentlicht, jetzt auch via Flathub verfügbar

Mozilla hat Version 2.31 seiner VPN-Clients für das Mozilla VPN veröffentlicht. Außerdem steht das Mozilla VPN für Linux-Nutzer mittlerweile auch als Flatpak-Version via Flathub zur Verfügung.

Mit dem Mozilla VPN bietet Mozilla in Zusammenarbeit mit Mullvad sein eigenes Virtual Private Network an und verspricht neben einer sehr einfachen Bedienung eine durch das moderne und schlanke WireGuard-Protokoll schnelle Performance, Sicherheit sowie Privatsphäre: Weder werden Nutzungsdaten geloggt noch mit einer externen Analysefirma zusammengearbeitet, um Nutzungsprofile zu erstellen.

Jetzt Mozilla VPN nutzen

Die Neuerungen vom Mozilla VPN 2.31

In den Einstellungen für ausgeschlossene Apps gibt es jetzt eine Checkbox, um System-Apps anzuzeigen. Ansonsten bringt das Update auf das Mozilla VPN 2.31 vor allem Fehlerbehebungen und Verbesserungen unter der Haube.

Mozilla VPN über Flathub erhältlich

Linux-Nutzer können das Mozilla VPN mittlerweile auch als Flatpak-Version über Flathub installieren.

Der Beitrag Mozilla VPN 2.31 veröffentlicht, jetzt auch via Flathub verfügbar erschien zuerst auf soeren-hentzschel.at.

  •  

HTML und CSS: Das umfassende Handbuch

HTML und CSS: Das umfassende Handbuch“ von Jürgen Wolf ist 2023 in der 5., aktualisierten und überarbeiteten Auflage im Rheinwerk Verlag erschienen und umfasst 1124 Seiten.

Das Buch „HTML und CSS: Das umfassende Handbuch“ vermittelt in insgesamt 26 Kapiteln sowohl Grundlagen als auch vertiefendes Wissen, kann aber aufgrund der Komplexität des Themas nicht jeden Bereich in Gänze beleuchten und auf manches auch gar nicht eingehen. Dennoch deckt es eine große Bandbreite an Themen ab und ist als Nachschlagewerk bestens geeignet.

Kapitel 1 – Einführung in das HTML-Universum geht zunächst darauf ein, was den Leser erwartet. Angesprochen werden sämtliche Zielgruppen: vom Einsteiger über den Entwickler bis hin zum Programmierer oder Blogger.

Kapitel 2 – Grundlegender Aufbau von HTML(-Dokumenten) befasst sich mit der grundlegenden Syntax und dem Aufbau von HTML als Auszeichnungssprache. Außerdem geht es um die einzelnen Bestandteile, aus denen ein klassisches HTML-Dokument besteht.

Kapitel 3 – Die Kopfdaten eines HTML-Dokuments konzentriert sich auf den Bereich zwischen <head> und </head>, in dem alle wichtigen Informationen und Daten über ein HTML-Dokument enthalten sind, die von Webbrowsern oder Suchmaschinen verwendet werden.

Kapitel 4 – Der sichtbare Bereich eines HTML-Dokuments thematisiert die darstellbaren HTML-Elemente, die zwischen <body> und </body> verwendet werden können. Der Leser lernt, dass das Gestalten von Webseiten nicht über HTML, sondern über CSS geschieht.

Kapitel 5 – Tabellen und Hyperlinks stellt weitere HTML-Elemente vor. Der Leser erfährt, wie er Tabellen und Hyperlinks erstellen und verwenden kann.

Kapitel 6 – Grafiken und Multimedia beschäftigt sich mit der Frage, wie dem HTML-Dokument Grafiken, Videos und andere multimediale Inhalte hinzugefügt werden können.

Kapitel 7 – HTML-Formulare und interaktive Elemente widmet sich dem Thema Web-Formulare. Als Beispiele nennt der Autor u. a. Umfrage-Formulare, in denen aus einer Liste von bestimmten Einträgen etwas ausgewählt werden kann.

Kapitel 8 – Einführung in Cascading Stylesheets (CSS) erläutert, was CSS genau ist, und stellt anhand von einfachen Beispielen dessen Anwendungsprinzip vor.

Kapitel 9 – Die Selektoren von CSS gibt Tipps für den praktischen Einsatz einer Vielzahl von Selektoren.

Kapitel 10 – Die Vererbung und die Kaskade beschäftigt sich mit einer Technik, die es ermöglicht, verschiedene CSS-Eigenschaften wie Farben, Schriftart und Schriftgröße einmalig an einer zentralen Stelle zu definieren, anstatt jedem einzelnen Element immer wieder dieselben Eigenschaften zuweisen zu müssen.

Kapitel 11 – Das Box-Modell von CSS widmet sich dem Positionieren von Elementen sowie dem Erstellen von Layouts, was beides mittels Box-Modell, auch Kastenmodell genannt, umsetzbar ist. Neben dem klassischen Box-Modell lernt der Leser auch das neue und intuitivere Box-Modell von CSS kennen.

Kapitel 12 – CSS-Positionierung vermittelt, wie man HTML-Elemente bzw. die Boxen mit CSS positionieren kann.

Kapitel 13 – Flexboxen richtet sich an Entwickler, die flexiblere und dynamischere Website-Layouts erstellen wollen, die auf verschiedenen Bildschirmgrößen und Geräten funktionieren. Elemente können innerhalb eines Container-Elements in einer einzigen Dimension angeordnet werden – entweder horizontal oder vertikal.

Kapitel 14 – Responsives Webdesign und Media Queries beschäftigt sich mit einer Gestaltungstechnik für Websites, bei der sich das Layout und die Inhalte automatisch an verschiedene Bildschirmgrößen und Geräte anpassen.

Kapitel 15 – CSS Grid befasst sich mit einer Technologie zur Erstellung komplexer und flexibler Designs, die auf verschiedene Bildschirmgrößen reagieren. Inhalte können in Raster- oder Gitterstrukturen platziert und Elemente präzise positioniert werden.

Kapitel 16 – Stylen mit CSS klärt die Frage, wie Texte, Listen, Tabellen und Bilder schöner oder lesbarer gemacht werden können, und knüpft an die Grundlagen wie die Selektoren, das Box-Modell, die Positionierung, die Flexboxen, die Media Queries und CSS Grid an.

Kapitel 17 – Der CSS-Präprozessor Sass und SCSS erklärt, wie immer wiederkehrende CSS-Schreibarbeiten vermieden werden können, und stellt Sass als CSS-Präprozessor näher vor.

Kapitel 18 – Eine kurze Einführung in JavaScript stellt die Programmiersprache JavaScript näher vor und thematisiert, dass sie im Zusammenhang mit der Webentwicklung häufig in einem Atemzug mit Ajax, Angular und React genannt wird.

Kapitel 19Arrays, Funktionen und Objekte in JavaScript beschäftigt sich mit Objekten, welche die Hauptdatentypen in JavaScript sind, sowie der objektorientierten Programmierung.

Kapitel 20Webseiten dynamisch ändern thematisiert DOM und die DOM-Manipulation (DOM = Document Object Model). Zusammen mit JavaScript lässt sich HTML damit dynamisch erzeugen.

Kapitel 21Einführung in die Web-APIs (Browser-APIs) erklärt, dass es eine Vielzahl von Browser-APIs gibt: für die Manipulation des DOM, für Netzwerkanfragen, für die Verwaltung des clientseitigen Speichers, für das Steuern von Audio oder Video und vieles mehr.

Kapitel 22Eine Einführung in Ajax und die Fetch-API beleuchtet das Konzept der asynchronen Datenübertragung mittels Ajax.

Kapitel 23Das Bootstrap-Framework einsetzen gibt einen kleinen und zugleich praktischen Einblick in die Verwendung des beliebten Frameworks.

Kapitel 24Einführung in die grundlegenden Konzepte von React setzt Kenntnisse in HTML, CSS und JavaScript voraus und stellt die JavaScript-Bibliothek React vor.

Kapitel 25Einführung in die grundlegenden Konzepte von Angular widmet sich dem Framework Angular, das für die Entwicklung von Web-Applikationen für den Desktop sowie den mobilen Bereich entwickelt wurde.

Kapitel 26Beispielprojekt erstellen, testen und optimieren demonstriert anhand eines einfachen Beispielprojekts, wie der Arbeitsablauf von der Idee bis hin zur eigenen Web-Präsenz aussehen könnte und wie sich die Website testen und optimieren lässt.

Beispiel-Code 1 (HTML): Textrichtung ändern

Manchmal ist es erforderlich, die Textrichtung zu ändern – etwa wenn Text von rechts nach links geschrieben werden soll (z. B. bei Hebräisch oder Arabisch). Das lässt sich mit dem bdo-Element umsetzen (bdo = bidirectional override).

Der folgende Code-Ausschnitt zeigt ein Palindrom, eingebettet zwischen <bdo> und </bdo>. Zunächst wird das globale HTML-Attribut dir verwendet. Anschließend wird die Textausrichtung mit dem Attributwert rtl (right to left) so geändert, dass der Text von rechts nach links verlaufen soll (ltr = left to right würde Text von links nach rechts schreiben).

<p><bdo dir="rtl">Ein Esel lese nie</bdo></p>

In der visuellen Ansicht sieht das dann wie folgt aus:

ein esel lesE niE

Beispiel-Code 2 (HTML mit CSS): Typselektoren

Das folgende Beispiel demonstriert, wie man HTML-Elemente mit dem Typselektor auswählt und mit CSS formatiert.

Folgende Zeilen zeigen den Typselektor im Einsatz in einer separaten CSS-Datei:

section { 
    width: 100%; 
    display: flex; 
    flex-direction: row; 
} 
article { 
    box-shadow: 0 4px 8px 0 
    rgba(0, 0, 0, 0.2);
    width: 30%; 
    margin: 10px; 
    padding: 5px; 
    font-size: 
    2.5vw; 
    text-align: 
    center; 
} 
img { 
    width: 100%; 
}

Zunächst wird definiert, dass sich ein section-Element um 100 Prozent ausbreiten darf. Die darin enthaltenen HTML-Elemente werden in eine Flexbox gepackt, in der die Elemente horizontal in der Reihe ausgerichtet sind.

Um das article-Element soll ein Rahmen in Form eines Schattens gezogen werden. Die einzelnen Artikel-Elemente dürfen sich innerhalb ihres übergeordneten Elements um 30 Prozent ausbreiten. Der Abstand zu den nächsten Elementen beträgt 10px, der innere Abstand 5px. Die Schriftgröße soll stets 2,5vw betragen und ist von der Breite des Viewports abhängig. Der Inhalt soll zentriert formatiert werden.

Mit dem img-Element wird angegeben, dass sich der Inhalt um 100 Prozent ausbreiten darf.

Anschließend wird diese CSS-Datei style.css per link-Element im Kopf des HTML-Dokuments hinzugefügt:

...
  <head>
  ...
   <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <section>
        <article>
            <img src="./bilder/avatar.svg" alt="Avatar">
            <h4><b>Max Mustermann</b></h4>
            <p>Autor & Fotograf</p>
        </article>
        <article>
            <img src="./bilder/avatar-2.svg" alt="Avatar">
            <h4><b>Elisa Mustermann</b></h4>
            <p>Fullstack-Entwicklerin</p>
        </article>
    </section>
  </body>
...

Gemäß den CSS-Regeln werden die einzelnen HTML-Elemente mithilfe des entsprechenden Typselektors ausgewählt und nach den Deklarationen der Regel formatiert. Das Ergebnis sind im beschriebenen Beispielfall einfache Cards, also Karten, die in der visuellen Ansicht dann wie folgt aussehen:

Weiterführende Informationen

Fazit

HTML und CSS: Das umfassende Handbuch“ von Jürgen Wolf ist das ideale Nachschlagewerk für alle, die (wieder) in das Thema HTML und CSS einsteigen, mehr über den Aufbau von Websites lernen sowie Quellcode lesen und verstehen wollen. Die Tatsache, dass HTML einerseits die Basissprache für die Website-Entwicklung ist und der Autor andererseits bei null anfängt, macht das Buch gerade für Anfänger interessant. Aber auch Wiedereinsteiger der „alten HTML-Schule“ werden angesprochen und können Neues zum aktuellen HTML5 lernen. Es wird auf die Abgrenzung zwischen HTML und CSS eingegangen und auch JavaScript als Web-Programmiersprache kommt nicht zu kurz. Als besonderes Highlight darf man sich auf viele praktische Code-Beispiele im Buch sowie auf der Verlagswebsite freuen.

Wichtig zu erwähnen ist, dass sich das Buch gezielt auf den Frontend-Bereich von Websites konzentriert. Wer sich also umfangreiches Wissen zum Backend und zur dafür benötigten Web-Programmiersprache PHP (oder Python, Rust, Java o. Ä.) erhofft, für den ist dieses Buch nicht geeignet, da PHP lediglich am Rande Thema ist.

Der Beitrag HTML und CSS: Das umfassende Handbuch erschien zuerst auf intux.de.

  •  

Taskleiste, Dateimanager und Personalisierung in Linux Mint - Bye Windows 10! Teil 4/5

💾

In diesem Video zeigt Jean, wie man Linux Mint personalisiert, richtig mit USB-Sticks umgeht, zip-Dateien entpacken kann und vieles mehr. So gelingt der Umstieg von Windows 10 spielend einfach.
Wenn Du das Video unterstützen willst, dann gib bitte eine Bewertung ab, und schreibe einen Kommentar. Vielen Dank!

Links:
-------------------------------------
- Umsteiger Playlist: https://www.youtube.com/playlist?list=PLhvaM7uJr1PBANfWBIr38ny2UE-7Mzd02
- Screenshots https://youtube.com/shorts/PvExJOeU0RE
- Linux Mint Designs: https://www.youtube.com/playlist?list=PLhvaM7uJr1PDVnYKfQe2Q3PW1Zj2UD9XT

- Linux-Guides Merch*: https://linux-guides.myspreadshop.de/
- Professioneller Linux Support*: https://www.linuxguides.de/linux-support/
- Linux-Arbeitsplatz für KMU & Einzelpersonen*: https://www.linuxguides.de/linux-arbeitsplatz/
- Linux Mint Kurs für Anwender*: https://www.linuxguides.de/kurs-linux-mint-fur-anwender/
- Offizielle Webseite: https://www.linuxguides.de
- Forum: https://forum.linuxguides.de/
- Unterstützen: http://unterstuetzen.linuxguides.de
- Mastodon: https://mastodon.social/@LinuxGuides
- X: https://twitter.com/LinuxGuides
- Instagram: https://www.instagram.com/linuxguides/
- Kontakt: https://www.linuxguides.de/kontakt/

Inhaltsverzeichnis:
-------------------------------------
00:00 Begrüßung
01:53 Programme zur Taskleiste hinzufügen
03:35 Dateimanager (Datei-Explorer)
10:14 USB-Sticks
13:10 zip-Dateien entpacken
15:15 Personalisierung
25:13 Soundeinstellungen
27:10 Anwendungen deinstallieren

Haftungsausschluss:
-------------------------------------
Das Video dient lediglich zu Informationszwecken. Wir übernehmen keinerlei Haftung für in diesem Video gezeigte und / oder erklärte Handlungen. Es entsteht in keinem Moment Anspruch auf Schadensersatz oder ähnliches.

*) Werbung


#linuxguides #linuxmint #linuxforbeginners #opensource #tutorial
  •  

Programmiersprache: Rust 1.90 steht bereit

Kurz notiert: Die Programmiersprache Rust steht ab sofort in Version 1.90 bereit.

Die Programmiersprache Rust wurde planmäßig in Version 1.90 veröffentlicht. Wer sich für alle Highlights der neuen Version interessiert, findet wie immer in der offiziellen Release-Ankündigung weitere Informationen.

Der Beitrag Programmiersprache: Rust 1.90 steht bereit erschien zuerst auf soeren-hentzschel.at.

  •  

Kiosk-Anzeigesystem auf dem Raspberry Pi

Auf Anfrage einer Bildungseinrichtung, die ein Anzeigesystem für aktuell laufende Kurse auf ihrer Webseite realisieren möchte, habe ich nach einer Möglichkeit gesucht, ein stabiles, kostengünstiges und quelloffenes System umzusetzen.

Hardware-Auswahl

Bei der Hardware fiel die Entscheidung nicht schwer: Ein Raspberry Pi ist für diesen Einsatzzweck bestens geeignet. Als Gehäuse empfiehlt sich ein passiv gekühltes Modell aus Aluminium, um einen lautlosen und langlebigen Betrieb zu gewährleisten.

Installation

Bereits vor einigen Jahren habe ich ein ähnliches System für eine Fahrschule realisiert, das seit nunmehr fast fünf Jahren zuverlässig als „Schaufensterwerbung“ im Dauerbetrieb läuft.

Als Grundlage für das aktuelle Projekt diente mir die Anleitung „Fullscreen-Browser nach Boot auf Raspberry Pi – Kiosk-Mode“ von Easy Tec. Ich setze voraus, dass auf dem Raspberry Pi bereits Raspberry Pi OS installiert ist und ein SSH-Zugang besteht.

Benötigte Pakete installieren

sudo apt install xdotool unclutter

Mit xdotool kann der Chromium-Browser automatisiert gesteuert werden. unclutter blendet den Mauszeiger nach kurzer Inaktivität aus.

Kiosk-Skript erstellen

Nun wird das Skript kiosk.sh erstellt. Wichtig: Den Benutzernamen intux ggf. durch den tatsächlich verwendeten Benutzer ersetzen. Für einen ersten Testlauf greife ich meine eigene Website intux.de ab.

sudo nano /home/intux/kiosk.sh

Inhalt von kiosk.sh:

#!/bin/bash

xset s noblank
xset s off
xset -dpms

unclutter -idle 0.5 -root &

sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/intux/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/intux/.config/chromium/Default/Preferences

/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk https://intux.de

while true; do
   xdotool keydown ctrl+Tab; xdotool keyup ctrl+Tab;
   sleep 10
done

Systemd-Dienst einrichten

Um sicherzustellen, dass Chromium nach jedem Neustart automatisch im Kiosk-Modus gestartet wird, wird ein systemd-Dienst eingerichtet:

sudo nano /lib/systemd/system/kiosk.service

Inhalt von kiosk.service:

[Unit]
Description=Chromium Kiosk
Wants=graphical.target
After=graphical.target

[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/intux/.Xauthority
Type=simple
ExecStart=/bin/bash /home/intux/kiosk.sh
Restart=on-abort
User=intux
Group=intux

[Install]
WantedBy=graphical.target

Anschließend wird der Dienst aktiviert und gestartet:

sudo systemctl enable kiosk.service
sudo systemctl start kiosk.service

Ein Neustart schließt die Einrichtung ab:

sudo reboot

Auflösung anpassen

Ich habe mich für eine Bildschirmauflösung von 1280 × 720 Pixel (16:9) entschieden. Diese lässt sich bequem über die grafische Oberfläche des Raspberry Pi OS einstellen.

Raspberry Pi – Auflösung
Raspberry Pi – Auflösung
Raspberry Pi – Auflösung 1920 x 1080
Raspberry Pi – Auflösung 1920 x 1080
Raspberry Pi – Auflösung 1280 x 720
Raspberry Pi – Auflösung 1280 x 720

Erster Testlauf

Raspberry Pi – Kiosk-Webseitendarstellung
Raspberry Pi – Kiosk-Webseitendarstellung

System duplizieren

Da das System nun wie gewünscht funktioniert, habe ich es auf weitere Geräte dupliziert – eines für jede Etage des Gebäudes. Um die einzelnen Systeme im Netzwerk unterscheiden zu können, erhielten sie unterschiedliche Hostnamen:

  • Uranus
  • Venus
  • Mars
  • Pluto

Der Hostname lässt sich über raspi-config anpassen:

sudo raspi-config

Nach dem Klonen stellte ich jedoch fest, dass der Kiosk-Dienst auf den neuen Systemen nicht wie erwartet startete. Die Ursache war die Datei SingletonLock von Chromium. Diese muss gelöscht werden:

rm -rf /home/intux/.config/chromium/SingletonLock

Fazit

Mit überschaubarem Aufwand und etwas Recherche ließ sich ein praktikables Open-Source-Projekt umsetzen, das nun im Realbetrieb zeigen kann, wie zuverlässig es funktioniert.

Der Beitrag Kiosk-Anzeigesystem auf dem Raspberry Pi erschien zuerst auf intux.de.

  •  

Thunderbird 143.0.1 veröffentlicht

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

Neuerungen von Thunderbird 143.0.1

Mit Thunderbird 143.0.1 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht und behebt damit eine mögliche Absturzursache bei Programmstart.

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

  •  

Enterprise Policy Generator 7.1 ermöglicht Deaktivierung von KI-Funktionen in Firefox

Der Enterprise Policy Generator richtet sich an Administratoren von Unternehmen und Organisationen, welche Firefox konfigurieren wollen. Mit dem Enterprise Policy Generator 7.1 ist nun ein Update erschienen, welches die Deaktivierung von KI-Funktionen in Firefox ermöglicht.

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 7.1

Der Enterprise Policy Generator 7.1 bringt Unterstützung für zwei neue Unternehmensrichtlinien, die ab Firefox 144 und höher unterstützt werden.

Die GenerativeAI-Richtlinie erlaubt die Aktivierung respektive Deaktivierung der LLM-Chatbots wie ChatGPT, Google Gemini und Microsoft Copilot, der KI-Zusammenfassung für die Link-Vorschau sowie von Vorschlägen für Tab-Gruppen, worunter sowohl Vorschläge für den Namen der Gruppe als auch weitere Tabs fallen. Eine weitere Option gilt als Sammeleinstellung für sämtliche KI-Features, welche von dieser Richtlinie unterstützt werden. Es ist davon auszugehen, dass in Zukunft weitere KI-Features Teil dieser Richtlinie werden.

Über die VisualSearchEnabled-Richtlinie ist es möglich, die inverse Bildersuche über Google Lens zu aktivieren oder zu deaktivieren.

KI-Features in Firefox mit dem Enterprise Policy Generator von Sören Hentzschel deaktivieren

Für Linux-Nutzer wurde außerdem die Erklärung dahingehend erweitert, dass es auch möglich ist, die Datei policies.json für systemweit geltende Richtlinien in /etc/firefox/policies zu platzieren.

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 Enterprise Policy Generator 7.1 ermöglicht Deaktivierung von KI-Funktionen in Firefox erschien zuerst auf soeren-hentzschel.at.

  •  

Mozilla veröffentlicht Firefox Klar 143 für Apple iOS

Firefox Klar ist ein spezialisierter Privatsphäre-Browser von Mozilla. Mit Firefox Klar 143 für Apple iOS steht nun ein Update bereit.

Download Mozilla Firefox Klar für Apple iOS

Die Neuerungen von Firefox Klar 143 für Apple iOS

Mozilla hat Firefox Klar 143 (internationaler Name: Firefox Focus 143) für Apple iOS veröffentlicht. Bei Firefox Klar 143 für Apple iOS handelt es sich um ein Wartungs-Update, welches ausschließlich Verbesserungen unter der Haube bringt. Außerdem wurde eine Sicherheitslücke behoben.

Der Beitrag Mozilla veröffentlicht Firefox Klar 143 für Apple iOS erschien zuerst auf soeren-hentzschel.at.

  •  

Bilder unter Linux effizient per Kommandozeile skalieren

Wer regelmäßig Webprojekte betreut, kennt das Problem: Große Bilddateien können die Ladezeiten einer Website deutlich beeinträchtigen und wirken sich negativ auf die Suchmaschinenoptimierung (SEO) aus. Besonders dann, wenn eine größere Anzahl von Fotos verarbeitet werden muss, ist eine manuelle Bearbeitung mit grafischen Programmen nicht nur zeitraubend, sondern auch ineffizient.

In einem aktuellen Fall erhielt ich rund 120 Fotos eines Fotografen, die für eine Galerie auf einer Webseite vorgesehen waren. Die Bilddateien lagen jedoch in einer Größe vor, die weder performant für das Web war noch den SEO-Richtlinien entsprach.

Da ich für meine Projekte eine maximale Bildbreite von 1024 Pixeln definiert habe, griff ich – wie bereits im Artikel „Bilder per Batch skalieren“ beschrieben – auf ein bewährtes Werkzeug aus dem Open-Source-Bereich zurück: ImageMagick.

Mit einem einfachen Befehl ließ sich die gesamte Bildersammlung direkt über das Terminal verarbeiten:

mogrify -resize 1024x1024 *.jpg

Dieser Befehl skaliert alle .jpg-Dateien im aktuellen Verzeichnis auf eine maximale Kantenlänge von 1024 Pixeln – unter Beibehaltung des Seitenverhältnisses. Innerhalb weniger Sekunden war der gesamte Stapel an Bildern webgerecht optimiert.

Solche kleinen, aber wirkungsvollen Tools aus der Open-Source-Welt sind nicht nur ressourcenschonend, sondern tragen auch dazu bei, Arbeitsabläufe deutlich zu beschleunigen – ganz ohne aufwendige GUI-Programme oder proprietäre Softwarelösungen.

Der Beitrag Bilder unter Linux effizient per Kommandozeile skalieren erschien zuerst auf intux.de.

  •  

Mozilla veröffentlicht Firefox 143 für Apple iOS

Mozilla hat Firefox 143 für Apple iOS veröffentlicht. Dieser Artikel beschreibt die Neuerungen von Firefox 143.

Die Neuerungen von Firefox 143 für iOS

Mozilla hat Firefox 143 für das iPhone, iPad sowie iPod touch veröffentlicht. Die neue Version steht im Apple App Store zum Download bereit.

Mit dem Update aktiviert Mozilla den sogenannten Liquid Glass Effekt für die Oberfläche von Firefox, wenn iOS in Version 26 oder höher genutzt wird.

Bereits vor Veröffentlichung von Firefox 143 hat Mozilla mit der Ausrollung eines neuen Features begonnen und dieses nun für alle Nutzer eines englischsprachigen Firefox in den USA aktiviert, um mit Hilfe Künstlicher Intelligenz (KI) eine Zusammenfassung der aktiven Website zu generieren. Um die KI-Zusammenfassung zu aktivieren, gibt es drei Wege: über ein Blitz-Symbol in der Adressleiste, über das Menü – oder durch ein kurzes Schütteln des Gerätes.

Für Nutzer mit einem iPhone 15 Pro oder neuer sowie iOS 26 oder höher findet die Zusammenhang via Apple Intelligence lokal auf dem Gerät des Anwenders statt. Auf anderen Geräten sowie mit früheren Versionen von iOS wird der Inhalt verschlüsselt an Mozillas cloudbasierte KI gesendet und die Zusammenfassung zurück auf das Gerät geschickt. Selbstverständlich lässt sich das Feature in den Einstellungen auch vollständig abschalten.

Die Zusammenfassung funktioniert auf allen Websites, welche auch die Leseansicht unterstützen, für Texte bis zu einer Länge von 5.000 Wörtern.

Dazu kommen wie immer Detail-Verbesserungen, Fehlerbehebungen sowie Optimierungen unter der Haube.

Der Beitrag Mozilla veröffentlicht Firefox 143 für Apple iOS erschien zuerst auf soeren-hentzschel.at.

  •  

Jetzt Linux Mint aktualisieren! - Update auf LM 22.2 "Zara" | Tutorial

💾

In diesem Video zeigt Jean, wie man Linux Mint auf die neueste Version 22.2 "Zara" aktualisieren kann. Die Neuerungen der Version findest du hier: https://youtu.be/XAFaKL4nR9Y
Wenn Du das Video unterstützen willst, dann gib bitte eine Bewertung ab, und schreibe einen Kommentar. Vielen Dank!

Links:
-------------------------------------
- Update auf Linux Mint 22.1 https://youtu.be/T3qh6P_RAZM
- Was kann Timeshift? https://youtu.be/3cTeIIyNk_s
- Neuerungen von Linux Mint 22.2 https://youtu.be/XAFaKL4nR9Y

- Linux-Guides Merch*: https://linux-guides.myspreadshop.de/
- Professioneller Linux Support*: https://www.linuxguides.de/linux-support/
- Linux-Arbeitsplatz für KMU & Einzelpersonen*: https://www.linuxguides.de/linux-arbeitsplatz/
- Linux Mint Kurs für Anwender*: https://www.linuxguides.de/kurs-linux-mint-fur-anwender/
- Offizielle Webseite: https://www.linuxguides.de
- Forum: https://forum.linuxguides.de/
- Unterstützen: http://unterstuetzen.linuxguides.de
- Mastodon: https://mastodon.social/@LinuxGuides
- X: https://twitter.com/LinuxGuides
- Instagram: https://www.instagram.com/linuxguides/
- Kontakt: https://www.linuxguides.de/kontakt/

Inhaltsverzeichnis:
-------------------------------------
00:00 Begrüßung
01:02 Systemschnappschuss erstellen
03:10 Aktualisierungsverwaltung
04:11 Update auf 22.2

Haftungsausschluss:
-------------------------------------
Das Video dient lediglich zu Informationszwecken. Wir übernehmen keinerlei Haftung für in diesem Video gezeigte und / oder erklärte Handlungen. Es entsteht in keinem Moment Anspruch auf Schadensersatz oder ähnliches.

*) Werbung
  •  

Mozilla veröffentlicht Firefox Klar 143 für Android – letzte Version für sehr alte Geräte

Firefox Klar ist ein spezialisierter Privatsphäre-Browser. Nun hat Mozilla Firefox Klar 143 für Android veröffentlicht.

Download Mozilla Firefox Klar für Google Android

Mozilla hat Firefox Klar 143 (internationaler Name: Firefox Focus 143) für Android veröffentlicht.

Die Neuerungen von Firefox Klar 143 für Android

Bei Firefox Klar 143 handelt es sich um ein Wartungs-Update, bei welchem der Fokus auf Fehlerbehebungen und Verbesserungen unter der Haube lag. Dazu kommen wie immer neue Plattform-Features der aktuellen GeckoView-Engine sowie geschlossene Sicherheitslücken.

Letzte Version für sehr alte Geräte

Firefox Klar 143 ist die letzte Firefox-Version, welche noch auf Geräten mit Android 5 bis Android 7 als Betriebssystem oder einer 32-Bit x86-CPU läuft.

Der Beitrag Mozilla veröffentlicht Firefox Klar 143 für Android – letzte Version für sehr alte Geräte erschien zuerst auf soeren-hentzschel.at.

  •  

Firefox 143.0.1 behebt durch Trend Micro verursachten Absturz

Mozilla hat Firefox 143.0.1 veröffentlicht und umgeht damit einen durch die Sicherheits-Software von Trend Micro verursachten Absturz.

Download Mozilla Firefox 143.0.1

Die von Trend Micro entwickelte Sicherheits-Software löste durch sogenannte DLL-Injection für Nutzer von Firefox 143 einen Absturz von Tabs aus. Mozilla hat ein Update auf Firefox 143.0.1 veröffentlicht, womit deren DLL-Dateien für die Ausführung in Firefox blockiert werden, damit Firefox für betroffene Nutzer nicht länger abstürzt.

Der Beitrag Firefox 143.0.1 behebt durch Trend Micro verursachten Absturz erschien zuerst auf soeren-hentzschel.at.

  •  

Mozilla veröffentlicht Firefox 143 für Android – letzte Version für sehr alte Geräte

Mozilla hat Firefox 143 für Android veröffentlicht. Dieser Artikel beschreibt die Neuerungen von Firefox 143 für Android.

Download Firefox für Android im Google Play Store

Verbesserter Downloads-Bildschirm für laufende Downloads

Der Downloads-Bildschirm wurde erweitert, um auch den Fortschritt laufender Downloads verfolgen und diese verwalten zu können.

DNS über HTTPS (DoH)

Firefox unterstützt nun auch auf Android offiziell die Privatsphäre-Funktion DNS over HTTPS (DoH). Die Funktion kann in den Einstellungen von Firefox aktiviert werden.

Sonstige Neuerungen von Firefox 143 für Android

Der Startbildschirm zeigt bis zu acht Verknüpfungen zu den meistbesuchten oder manuell hinzugefügten Websites an. Per Wischgeste können weitere acht Verknüpfungen angezeigt werden. Diese Möglichkeit wird mit Firefox 144 entfernt werden. Dafür gibt es ab sofort neben der Überschrift „Verknüpfungen“ einen Link „Alle anzeigen“, worüber bis zu 16 Verknüpfungen auf einem Bildschirm angezeigt werden können.

Für Nutzer, die zwecks Synchronisation angemeldet sind, erscheint nun das persönliche Avatar anstelle eines generischen Icons im Menü. Auf dem Startbildschirm zeigt das Menü außerdem nicht länger die Navigationsleiste mit den Schaltflächen Zurück, Vorwärts, Teilen und Aktualisieren an.

Firefox unterstützt jetzt den xHE-AAC Audio-Codec, wenn Android 9 oder neuer genutzt wird.

Dazu kommen weitere neue Plattform-Features der aktuellen GeckoView-Engine, diverse Fehlerbehebungen, geschlossene Sicherheitslücken sowie Verbesserungen unter der Haube.

Letzte Version für sehr alte Geräte

Firefox 143 ist die letzte Firefox-Version, welche noch auf Geräten mit Android 5 bis Android 7 als Betriebssystem oder einer 32-Bit x86-CPU läuft.

Der Beitrag Mozilla veröffentlicht Firefox 143 für Android – letzte Version für sehr alte Geräte erschien zuerst auf soeren-hentzschel.at.

  •