89 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 bda13b5b6f Home-Verschlüsselung: Fixes aus dem grafischen Test auf VM 107
- Bildschirmsperre: Hook läuft dort als Benutzer und ließ das Entsperren
  scheitern; ohne root beendet er sich jetzt ohne Fehler.
- Wiederherstellung: ein schon entsperrtes Home ließ jeden Schlüssel durch;
  der Hook sperrt jetzt vor der Prüfung.
- Anmeldebildschirm: kurze Meldungszeilen (slick-greeter schneidet ab);
  passwort-hinweis zeigt während der Wiederherstellung keinen QR-Code und
  startet den Anmeldebildschirm nicht neu, sonst wäre die Meldung weg.
- Dialog: "Später" passt jetzt zum Text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 07:14:59 +01:00
adminandClaude Opus 5.5 b26dfd4f96 Persönliche Konten: verschlüsseltes Home mit fscrypt und Wiederherstellungsschlüssel
Konten mit "verschluesseln" werden ohne Home angelegt; der PAM-Hook
home-verschluesselung verschlüsselt es bei der ersten Anmeldung mit dem
Passwort und einem zufälligen Wiederherstellungsschlüssel, den ein Dialog
nach der Anmeldung einmalig zeigt. Nach einem Passwort-Reset fragt der
Hook nach dem Schlüssel (Eingabe im Passwortfeld) und hängt das Home auf
das neue Passwort um. Sperren beim Abmelden über logind und user@.service.
fscrypt wird nur eingerichtet, wenn ein Konto es verlangt; nur ext4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 06:44:46 +01:00
adminandClaude Opus 5.5 98a3aa3bf9 Persönliche Homes 0700, auch bestehende Konten
useradd übernahm den Modus aus login.defs; je nach Distribution 0755,
dann las der Gast im unverschlüsselten Home mit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:21:24 +01:00
adminandClaude Opus 5.5 f950b47d69 Agent 33266b6: Bootstrap mit Fingerprint; Fingerprint-Datei nur für root
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:17:36 +01:00
adminandClaude Opus 5.5 35e2431afc Agent d1ebb9e: meldet Firmware-Stand (Prüfroutine Secure Boot)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 18:49:54 +01:00
adminandClaude Opus 5.5 86f1e81ff5 grundsystem: Startkette update-fest (GRUB_DISTRIBUTOR=Tuxflotte, veraltete Kette in EFI/tuxflotte erneuern)
Paket-Updates von shim/GRUB schrieben nach EFI/ubuntu bzw. EFI/debian,
die Firmware startet aber EFI/tuxflotte. Auf VM 107 (Mint, Secure Boot)
geprüft: veraltete Kette erneuert, zweiter Lauf ohne Änderung,
Paket-Neuinstallation schreibt nach EFI/tuxflotte und EFI/BOOT, Neustart
mit Secure Boot über den neuen Eintrag. roadmap/secure-boot-verschluesselung.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 18:05:43 +01:00
adminandClaude Opus 5.5 d1bd2bb581 Kiosk: SSH-Sitzungen blockieren keinen Neustart, Autostart ohne Abmelden und selbstheilend, Wrapper sofort weg
Gefunden beim Test auf VM 107 (Mint, 26.10.2026).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:40:27 +01:00
adminandClaude Opus 5.5 9070313731 Rolle kiosk: Vollbild-Browser mit Whitelist am Anmeldebildschirm, optional Autostart (roadmap/kiosk.md)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:52:14 +01:00
adminandClaude Opus 5.5 a778bf67a6 .deb-Rollen: Installation wiederholen, wenn dpkg gesperrt ist
Auf VM 107 (26.10.2026) lief der Agent parallel; dpkg -i wartet nicht
auf die Sperre. Bis zu 10 Versuche im Abstand von 30 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:39:20 +01:00
adminandClaude Opus 5.5 c68fd963da Elf neue App-Rollen, Mint-Systembericht abgeschaltet (26.10.2026)
Tipp10, Xournal++, Bluefish, Geany, Shutter (mit Editor) aus den
Distributionsquellen; VS Code und DBeaver aus den Hersteller-Repos;
Zoom per Flathub; BlueJ und Pulsar (statt des eingestellten Atom) als
fest gepinnte .deb mit Prüfsumme; Webex als .deb, nur wenn es fehlt.
grundsystem: Autostart von mintreport per dpkg-divert abgeschaltet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:25:02 +01:00
adminandClaude Opus 5.5 822cc89a42 Persönliche Konten speichern WLANs für das ganze Gerät (polkit, ADR-0041, 25.10.2026)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:30:41 +01:00
adminandClaude Opus 5.5 833210ac50 Sitzungsprüfung: abgemeldete Sitzungen (closing) zählen nicht; Hinweis holt Neustart nach (ADR-0041, 25.10.2026)
Auf Liebherr-84 blieb die Cinnamon-Sitzung nach dem Abmelden im Zustand
closing; der Hinweis wurde gesetzt, der Anmeldebildschirm aber nicht neu
gestartet. Gilt ebenso für persoenliche-konten.py und den Abbau.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:05:29 +01:00
adminandClaude Opus 5.5 189c01ae63 Passwort-Hinweis: Bild über AccountsService-D-Bus setzen statt [User] (ADR-0041, 25.10.2026)
Der Anmeldebildschirm liest BackgroundFile aus der LightDM-Erweiterung
(org.freedesktop.DisplayManager.AccountsService), auf Liebherr-84 blieb das
Bild deshalb aus. Weitere Fehleingabe zeigt den Hinweis neu, wenn er nicht
sichtbar ist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 10:55:18 +01:00
adminandClaude Opus 5.5 446c5612d7 Personalisierung: Hinweis mit QR-Code nach Fehleingabe, Gastkonto öffnet die Seite (ADR-0041, 25.10.2026)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 10:36:06 +01:00
adminandClaude Opus 5.5 f975938e3c Personalisierung: Kiosk abbauen, Anmeldebildschirm nach Kontoänderung neu (ADR-0041, 24.10.2026)
Rolle personalisierung baut bei present und absent Konto, Kiosk, PAM-Zeile,
Wächter und LightDM-Konfiguration ab; Wrapper erst nach Neustart von
LightDM. persoenliche-konten.py startet LightDM nach angelegtem,
gesperrtem, entsperrtem oder entferntem Konto neu (nur ohne
Benutzersitzung); Hilfsskript wird immer abgelegt, damit der Schnellweg
auch beim ersten Konto greift.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 11:15:14 +02:00
adminandClaude Opus 5.5 82b68dc64f Webapps standardmäßig nur im Menü, Desktop-Symbol per Häkchen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:01:53 +02:00
adminandClaude Opus 5.5 93a4786a44 Veyon: privater Schlüssel auch für persönliche Konten (eigene Gruppe statt gast)
Auf Lehrergeräten gehört der private Schlüssel der Gruppe
tuxflotte-veyon-master mit gast und allen regulären Konten (UID 1000-59999);
das Konten-Hilfsskript nimmt neue Konten gleich beim Anlegen auf. Ohne
Lehrerrolle und beim Abwählen wird die Gruppe entfernt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 11:27:00 +02:00
adminandClaude Opus 5.5 f6a41ebcb1 Rolle agent: Fassung von anode laden (ADR-0046 Schritt 3), Gitea als Rückfall
Secret aus agent.credentials im Header (no_log), Adresse aus agent.env.
Fehlschlag per ignore_errors sichtbar, damit der Rückfall greift.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:52:49 +02:00
adminandClaude Opus 5.5 28d1bf780c README: Ausführung über Archiv von anode (ADR-0046), ansible-pull als Rückfall
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:28:05 +02:00
adminandClaude Opus 5.5 297391b668 Agent-Fassung 54f76f1 (ADR-0046 Schritt 2: Stand als Archiv von anode, Git-Rückfall)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:01:12 +02:00
adminandClaude Opus 5.5 5fddb94850 Veyon-Rolle wiederherstellen (Revert des Freigabe-Reverts c219e3b)
Testorganisationen behalten die Veyon-Rolle aus 9e5bc1e; nur der
freigegebene Stand c219e3b ist ohne sie.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 17:44:39 +02:00
adminandClaude Opus 5.5 c219e3b846 Freigabe ohne Veyon: Rolle veyon auf den Stand von 586f17a zurücknehmen
Nur für die Freigabe nach ansible-content-stabil (18.10.2026): Kunden
bekommen Personalisierung und Agent ad09d81, die neue Veyon-Rolle
(9e5bc1e) noch nicht. Der folgende Commit stellt sie auf main wieder her.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 17:44:39 +02:00
adminandClaude Opus 5.5 b1d3638b40 personalisierung: versehentlich eingecheckte .pyc entfernen, __pycache__ ignorieren
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 17:44:39 +02:00
adminandClaude Opus 5.5 9e06982b52 personalisierung: Greeter-Neustart nach Fehleingabe einschalten (slick-greeter übernimmt neue Einträge nicht live)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:57:54 +02:00
admin ddfb38e18d Merge branch 'passwort-vergessen-nach-fehlversuch' 2026-10-18 16:48:43 +02:00
adminandClaude Opus 5.5 711587cb25 personalisierung: 'Passwort vergessen?' erst nach Fehleingabe (Journal-Wächter, 15 Min sichtbar, Greeter-Neustart als Rückfall)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:52:12 +02:00
adminandClaude Opus 5.5 7b6fdddc47 Merge branch 'agent-konten-sofort'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:39:50 +02:00
adminandClaude Opus 5.5 b3a19e85c2 agent: Fassung ad09d81 (persönliche Konten sofort nach dem Check-in)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:39:13 +02:00
adminandClaude Opus 5.5 e2a63922ba Merge branch 'passwort-vergessen'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:30:17 +02:00
adminandClaude Opus 5.5 6b3f7b5cf4 personalisierung: Eintrag 'Passwort vergessen?' nach der Einrichtung, Kiosk-Adresse je Modus; persoenliche-konten: Schlüsselbund beim Reset wegsichern
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:29:12 +02:00
adminandClaude Opus 5.5 1cd68ff4f9 Merge branch 'personalisierung-greeter'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:15:26 +02:00
adminandClaude Opus 5.5 10ff22ab81 personalisierung: Eintrag zusätzlich per AccountsService SystemAccount ausblenden (nologin allein reichte nicht)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:15:25 +02:00
adminandClaude Opus 5.5 424aeefe5c Merge branch 'gruener-hintergrund'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:03:22 +02:00
adminandClaude Opus 5.5 1156491712 persoenliche-konten: grüner Mint-Hintergrund als Vorgabe (Desktop + Anmeldebildschirm)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:03:22 +02:00
adminandClaude Opus 5.5 bfe78eb50b Merge branch 'passwort-reset'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:00:23 +02:00
adminandClaude Opus 5.5 c81d459b30 persoenliche-konten: Passwort-Reset der Verwaltung einmalig setzen, optional als abgelaufen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:57:55 +02:00
adminandClaude Opus 5.5 0ca6c70cc6 Merge branch 'personalisierung-ausblenden'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:35:58 +02:00
adminandClaude Opus 5.5 79def73019 personalisierung: Eintrag nach Einrichtung ausblenden, Freigabe erst mit aktivem Kiosk-Wrapper (ADR-0041, 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:32:51 +02:00
adminandClaude Opus 5.5 6be7905b8b Merge branch 'personalisierung-merkmal'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:02:34 +02:00
adminandClaude Opus 5.5 06cca0795a Rolle persoenliche-konten und Agent-Fassung 521b679 (ADR-0041, Schritt 3)
Legt bestätigte Konten an (Hash per chpasswd -e über stdin), sperrt
(abgelaufen, im Greeter ausgeblendet), entsperrt und entfernt nur Konten
mit eigenem Marker. Fehlende Konten in der Liste bleiben unberührt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:55:11 +02:00
adminandClaude Opus 5.5 fc894dca59 Rolle personalisierung: Kiosk öffnet das Formular der Kundenplattform
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:32:31 +02:00
admin b812e8ec19 Merge branch 'veyon-rolle' 2026-10-15 14:06:48 +02:00
adminandClaude Opus 5.5 586f17a2fb grundsystem: Datei-Capabilities wiederherstellen
Golden Image und Installer verloren security.capability (ping ohne
cap_net_raw auf Liebherr-83). Liste aus den setcap-Aufrufen der postinst-
Skripte der Images: ping, mtr-packet, gst-ptp-helper, snap-confine (aus
.caps), sssd-Helfer. Setzt nur bei Abweichung (setcap -v), im User-
Namespace getestet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 14:05:41 +02:00
adminandClaude Opus 5.5 9e5bc1e4f8 Rolle veyon: Einrichtung aus Server-Optionen (Schluessel je OE, Lehrer/Schueler, Raumliste, ufw, Dienst)
Bauplan Schritt 2 (platform-docs roadmap/veyon-schluesselverteilung-
diskussion-2026-10-14.md), stellt den Handtest vom 15.10.2026 nach:
Methode 1, Schluessel als Dateien (oeffentlich 444, privat 440 root:gast,
no_log), alte tuxflotte*-Schluessel weg, Raumliste nur auf Lehrern und nur
bei Aenderung (Pruefsumme), ufw 11100 Schueler / 11400 Lehrer, Konfigurator
immer und Master auf Schuelern ausgeblendet, veyon.service an. absent
raeumt nur dort auf, wo die Rolle eingerichtet hatte.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 14:00:02 +02:00
adminandClaude Opus 5.5 b902527962 fileserver: gemeinsame Ablage, standardmaessig schreibgeschuetzt
Nur noch SMB, per x-systemd.automount (eingehaengt beim Zugriff, nofail
statt Ansible-Fehler bei fehlendem Server) und x-gvfs-show mit Namen in der
Seitenleiste. Schreibzugriff fuer alle nur mit fileserver_schreibzugriff.
Option fileserver_home_freigabe heisst jetzt fileserver_freigabe, WebDAV
entfaellt (davfs2-Zugangsdaten wurden nie hinterlegt). Merkmal laut DB am
15.10.2026 nirgends zugewiesen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:57:50 +02:00
adminandClaude Opus 5.5 2aa8bbdb03 org-ressourcen: Dateimanager-Lesezeichen fuer SMB, WebDAV und Nextcloud
Ein Skript gleicht bei jeder Anmeldung (XDG-Autostart, auch Gastsitzung)
~/.config/gtk-3.0/bookmarks mit /etc/tuxflotte/org-ressourcen.json ab und
verwaltet nur selbst angelegte Eintraege. Nextcloud bekommt den WebDAV-
Zugang /remote.php/webdav. gvfs-backends nur nachinstalliert, wo es fehlt
und eine grafische Sitzung existiert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:47:58 +02:00
adminandClaude Opus 5.5 c077529edd Neue Rolle org-ressourcen: Org-Ressourcen nach /etc/tuxflotte/org-ressourcen.json
Kein Katalog-Merkmal, der Server schickt den Auftrag (vorerst nur an
Organisationen mit Ausrollstufe vorab). App-Rollen lesen die Liste im
selben Lauf aus tuxflotte_auftrag_optionen['org-ressourcen'].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:58:26 +02:00
adminandClaude Opus 5.5 111c9a44fc Rolle personalisierung: Konto „Personalisierung“ mit Kiosk am Anmeldebildschirm (ADR-0041)
LightDM-session-wrapper leitet nur dieses Konto in einen WebKit-Kiosk
(nur Herkunft anode, keine Downloads/Dateidialoge/neuen Fenster,
Leerlauf-Abmeldung). Eigene PAM-Freigabe und logind-Drop-in, unabhängig
von guest-session. GDM wird übersprungen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:41:34 +02:00
adminandClaude Opus 5.5 533fd1867b Neue Rolle org-wlan: systemweites WLAN-Profil fuer alle Benutzer
Template statt nmcli (PSK sonst per ps sichtbar), SSID als Byte-Liste,
PSK GKeyFile-escaped; eigene Datei tuxflotte-org-wlan.nmconnection, das
Installations-WLAN (tuxflotte-installations-wlan.nmconnection) bleibt
unberuehrt. Ungueltige Angaben werden uebersprungen statt den Lauf
scheitern zu lassen. Gegenstueck: provisioning-server Migration 0061,
kundenplattform optionen_felder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:33:54 +02:00
adminandClaude Opus 5.5 2f1076476a grundsystem: resolv.conf wieder auf den systemd-resolved-Stub verweisen lassen
Repariert Geraete, die mit dem Installer vor decc740 installiert wurden:
statische resolv.conf des Installationsnetzes, nach Ortswechsel keine
Namensaufloesung (Liebherr-83, 14.10.2026). Nur bei regulaerer Datei und
laufendem systemd-resolved; alte Datei bleibt als
/etc/resolv.conf.tuxflotte-statisch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:02:33 +02:00
adminandClaude Opus 5.5 788b4c9cd1 Agent-Fassung 9956e04: Zeitgrenze fuer ansible-pull, Abbruch der Prozessgruppe, dpkg-Reparatur
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:20:54 +02:00
adminandClaude Opus 5.5 2655ce6719 Agent-Fassung 17d7186: Extra-Vars per root-Datei statt Kommandozeile
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:05:36 +02:00
adminandClaude Opus 5.5 1476e0aaab Agent 982e4e2: meldet seine Prüfsumme beim Check-in
Erster echter Wechsel über die Rolle agent auf Testgeräten (Vorab),
danach am Server ablesbar. Für Kunden noch nicht freigegeben.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:46:18 +02:00
adminandClaude Opus 5.5 877cc72316 Neue Rolle agent: Agent auf die freigegebene Fassung bringen, mit Rueckfall
Der Agent wurde bei der Installation einmal geladen und nie erneuert. Die
Rolle (Tag always) laedt die in defaults festgelegte Fassung mit Pruefsumme
und laesst sie nach dem laufenden Durchgang von agent-wechsel.sh tauschen.
Checkt der neue Agent binnen 5 Minuten nicht ein, kommt die alte Fassung
zurueck; dieselbe Fassung wird fruehestens nach einem Tag erneut versucht.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 17:56:53 +02:00
adminandClaude Opus 5.5 d66850c6e8 Gestuftes Ausrollen: scripts/freigeben.sh, README
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:57:13 +02:00
adminandClaude Opus 5.5 86261387aa Abwaehlen aendert keine Voreinstellungen des Images mehr (Audit 13.10.2026)
- security-updates/auto-update: Das Ubuntu-Image bringt 20auto-upgrades und
  10periodic selbst mit. Abwaehlen loeschte sie und schaltete damit die
  automatischen Sicherheitsupdates der Distro ab. Jetzt wird dort der
  Auslieferungszustand wiederhergestellt; auf Mint/Debian wie bisher entfernt.
- zeitserver: Abwaehlen trug auf jedem Geraet pool.ntp.org ein, jetzt zurueck
  auf den auskommentierten Standard.
- guest-session: Konto gast nur entfernen, wenn es von der Rolle stammt.
- scripts/pruefe_absent.py: prueft die Abwaehl-Zweige gegen die Paketlisten
  der Golden Images (nach jedem neuen Image laufen lassen).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:28:14 +02:00
adminandClaude Opus 5.5 825977d374 Neue Rolle standardbrowser: Standardbrowser je Workspace systemweit setzen
Der Server schickt die Vorgabe der Workspace-Version als eigenen Auftrag
(present + Option browser, sonst absent). Die Rolle traegt die erste
vorhandene .desktop-Datei des Browsers in /etc/xdg/mimeapps.list ein und
nimmt bei absent nur zurueck, was sie selbst gesetzt hat. Die alte Option
standardbrowser der Rolle brave entfaellt (in Produktion nirgends gesetzt).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 15:10:30 +02:00
adminandClaude Opus 5.5 cadfab0731 hostname: Kommentar an serverseitige Standardvergabe angepasst
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:48:28 +02:00
adminandClaude Opus 5.5 524daa917d google-chrome: keine Suchvorschläge an Google (SuggestURL entfernt)
Mit der Vorschlags-Adresse gingen Eingaben in der Adresszeile schon beim
Tippen an Google. Auf Schulgeräten nicht gewollt (Entscheidung 13.10.2026).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:41:05 +02:00
adminandClaude Opus 5.5 edd622f5de google-chrome: Google als Suchmaschine vorgeben
Nimmt im normalen Browserfenster den Erststart-Schirm "Wähle deine
Suchmaschine" weg, der in der flüchtigen Gastsitzung bei jeder Anmeldung
wiederkam. Auf VM 107 geprüft: Fenster öffnet direkt den neuen Tab, Suche
über die Adresszeile geht an Google.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:36:21 +02:00
adminandClaude Opus 5.5 a6323000e4 google-chrome: Erststart-Dialoge per Richtlinie und initial_preferences abstellen
In der flüchtigen Gastsitzung zeigte Chrome bei jeder Anmeldung erst die
Zusatzbedingungen, dann "Willkommen bei Chrome" (Standardbrowser und
Nutzungsstatistiken vorangekreuzt). Die Richtlinie nimmt den zweiten Dialog
und im normalen Fenster "In Chrome anmelden" weg, require_eula=false in
initial_preferences den ersten. Auf VM 107 (Ubuntu 26.04, Chrome 155) in der
Gastsitzung geprüft, auch Abwählen und erneutes Anwählen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:12:08 +02:00
adminandClaude Opus 5.5 6852bab8b9 webapp-shortcuts: Starter unter GNOME freigeben, Gast-Home nach Erstlauf nachfuellen
Ubuntus Desktop-Icons-Erweiterung startet Starter nur mit
metadata::trusted. Ein Autostart-Skript (nur GNOME) setzt das Merkmal beim
Sitzungsstart auf die Tuxflotte-Starter im Desktop-Ordner.

Beim ersten Agent-Lauf legt guest-session das fluechtige Gast-Home an,
bevor /etc/skel/Desktop gefuellt ist. Die Rolle fuellt das Gast-Home
einmal neu, wenn ihm der Ordner Desktop fehlt und niemand als gast
angemeldet ist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:40:13 +02:00
adminandClaude Opus 5.5 77eb942454 webapp-shortcuts: entfernte Starter per Abgleich im Zielordner aufraeumen
Die Loeschliste entstand bisher nur in dem Lauf, in dem ein Starter aus
dem Anwendungsverzeichnis verschwand. War ein Home dann nicht erreichbar
(verschluesselt und gesperrt, ADR-0041) oder brach der Lauf ab, blieb der
Starter dauerhaft liegen. Jetzt gleicht jeder Lauf /etc/skel/Desktop und
die Nutzer-Desktop-Ordner gegen die Soll-Liste ab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 23:27:32 +02:00
adminandClaude Opus 5.5 018e5542bb Neue Rolle diagnosezugang-sperre: Diagnosezugang auf installierten Geraeten zuruecknehmen
present: root-Passwort sperren (passwd -l, umkehrbar), sshd-Drop-in
90-tuxflotte-diagnose.conf stilllegen, ssh.service aus; Merkdatei
haelt fest, was gesperrt wurde. absent nimmt nur zurueck, was diese
Rolle gesperrt hat (ADR-0010-Nachtrag). Auf Liebherr-35 geprueft:
sperren, idempotent, wiederherstellen, absent ohne Merkdatei = nichts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:44:04 +02:00
adminandClaude Opus 5.5 0320237bcd Grundsystem-Schutz: absent entfernt keine Golden-Image-Pakete mehr, Reparatur
Neue Rolle grundsystem (Tag always, laeuft zuerst): stellt die
Paketliste des jeweiligen Golden Image bereit (aus var/lib/dpkg/status der
Images auf anode) und installiert Grundsystem-Pakete wieder, die fruehere
absent-Laeufe laut apt-Historie entfernt haben (feste Liste der
betroffenen Pakete). barrierefreiheit, firewall, fileserver, ad-anbindung
und security-updates filtern ihre absent-Paketlisten gegen diese Liste.

Audit 09.10.2026: nur diese fuenf (plus wlan-firmware, 49b6f45) entfernten
Image-Pakete (orca, onboard, ufw/gufw, cifs-utils/casper,
samba-common-bin, sssd, unattended-upgrades). Auf Liebherr-35 verifiziert:
Reparatur stellt orca/onboard/samba-common-bin/cifs-utils/casper wieder
her, zweiter Lauf ohne Aenderung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:57:41 +02:00
adminandClaude Opus 5.5 49b6f4536a wlan-firmware: bei absent nie Firmware entfernen, entfernte Pakete reparieren
KRITISCH (E2E 09.10.2026): der Server schickt fuer jedes Katalog-Merkmal
ausserhalb des Workspace "absent" (ADR-0010). Die Rolle machte daraus
apt remove linux-firmware - auf jedem Geraet, inkl. Kernel-Metapakete.
WLAN-Firmware weg, sichtbar erst nach dem naechsten Neustart (betroffen:
VM 107, Liebherr-35, MS Gaissach). Jetzt: absent entfernt nichts mehr;
Pakete, die ein frueherer remove-Lauf laut apt-Historie entfernt hat,
werden wieder installiert. Auf Liebherr-35 verifiziert (Firmware + Kernel-
Metapakete zurueck, iwlwifi laedt Firmware 89, WLAN verbunden).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:51:48 +02:00
adminandClaude Opus 5.5 7d728faa03 guest-session: UserStopDelaySec=0, damit schnelle Neuanmeldung das Gast-Home zuruecksetzt
E2E-Test 09.10.2026: abmelden und nach wenigen Sekunden neu anmelden ->
alte Datei noch da. logind laesst user@ standardmaessig 10 s weiterlaufen,
bei Neuanmeldung in dieser Zeit endet er nie und ExecStopPost (Reset) laeuft
nicht. Auf VM 107 mit ~3 s Neuanmeldung verifiziert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:43:54 +02:00
adminandClaude Opus 5.5 3cd2dd1a48 guest-session: Gast-Home als System-tmpfs statt pam_namespace; Sitzungsauswahl, Konsolenwechsel-Sperre
Die Gastsitzung war nie fluechtig: das vierte Feld in namespace.conf
listet AUSGENOMMENE Benutzer, "root,gast" nahm gast aus. Auch "~gast"
reicht nicht, weil user@UID (gnome-keyring, dconf, Portale) ausserhalb des
Sitzungs-Namespace laeuft. Jetzt: tmpfs auf /home/gast im System-Namespace,
zurueckgesetzt beim Booten und nach jeder Gastsitzung, mit
unverschluesseltem login-Schluesselbund (Brave fragte sonst bei jedem Start).

Neu: Rolle sitzungsauswahl (LightDM nur Standardsitzung, Tag always) und
Merkmal konsolenwechsel-sperre (DontVTSwitch, mutter-Kuerzel, keine getty).
Siehe platform-docs ADR-0039. Auf VM 107 (Mint 22.3) verifiziert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 09:41:06 +02:00
adminandClaude Opus 5.5 13d35e97d6 guest-session: GDM (Ubuntu) - passwortlose Freigabe in gdm-password, leeres statt gesperrtes Passwort damit GDM gast listet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 12:54:53 +02:00
adminandClaude Sonnet 5 51d1e52aeb zeitserver: NTP-Konfiguration ueberspringen wenn systemd-timesyncd fehlt
Live gefunden (19.09.2026, erster QEMU-E2E-Testlauf mit dem Ubuntu-
Backend): "Destination /etc/systemd/timesyncd.conf does not exist!" fatal
- die Annahme "auf allen drei Ziel-Backends bereits Teil des
Basissystems" stimmte fuer dieses Golden Image nicht. Gleiches Muster wie
guest-session/firewall: EIN fataler Task riss den gesamten restlichen
ansible-pull-Lauf mit (failed=1 von 380 Tasks, aber alle 25
Auftragskatalog-Eintraege wurden als fehlgeschlagen gemeldet).

Stat-Guard vor beiden lineinfile-Tasks (present und absent).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DWKevK2QUK5tsGmqfSD6Yy
2026-09-19 20:27:52 +02:00
adminandClaude Sonnet 5 9aec1a6556 firewall: ufw-Deaktivierung ueberspringen statt fatal zu scheitern wenn nie installiert
Live gefunden (19.09.2026, gleicher Testlauf wie die guest-session/git/
flatpak-Funde): "Failed to find required executable 'ufw'" auf einem
Geraet, auf dem das firewall-Merkmal nie ausgewaehlt war - ufw wurde
dementsprechend nie installiert, und "deaktivieren" (das ohnehin nie aktiv
war) sollte ein reiner No-op sein statt fatal zu scheitern. Gleiches
Stat-Guard-Muster wie roles/guest-session/.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DWKevK2QUK5tsGmqfSD6Yy
2026-09-19 19:25:27 +02:00
adminandClaude Sonnet 5 c3d8b5a090 guest-session: PAM-Anpassungen ueberspringen statt fatal zu scheitern ohne Display-Manager
Live gefunden (19.09.2026, erster QEMU-E2E-Testlauf mit dem neuen
schlanken "debian-13-base"-Backend): lineinfile schlug fatal fehl
("Destination /etc/pam.d/lightdm does not exist!"), weil die Rolle nur
zwischen RedHat/GDM und "Debian-Familie => LightDM" unterschied - das neue
headless-schlanke Debian-Backend hat aber gar keinen Display-Manager
installiert. Ein fataler Task-Fehler bricht bei ansible-pull den GESAMTEN
restlichen Play ab, nicht nur diese Rolle - dadurch wurde auf dem
betroffenen Geraet ueberhaupt kein einziges Merkmal mehr angewendet.

Zwei stat-Tasks pruefen jetzt, ob die jeweilige PAM-Datei existiert; die
lineinfile-Tasks werden uebersprungen statt zu scheitern, wenn nicht. Ein
Gast-Sitzungs-Merkmal ist ohne Display-Manager ohnehin bedeutungslos (kein
grafischer Login-Bildschirm vorhanden).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DWKevK2QUK5tsGmqfSD6Yy
2026-09-19 19:12:37 +02:00
adminandClaude Sonnet 5 a241bbe398 Phase 4: Chromium/Microsoft-Edge-Rollen, Webapp-Kategorie/Kiosk-Templating
Neue Rollen chromium (nur Debian/Mint, echtes .deb-Paket - siehe
Rollenkommentar zum Ubuntu-Snap-Problem) und microsoft-edge (alle drei
Backends, Microsofts eigenes apt-Repo, gleiches Muster wie google-chrome).
Beide vor webapp-shortcuts in site.yml eingehängt.

webapp.desktop.j2: Categories= kommt jetzt aus item.categories (server-
seitig aus der gewählten App-Kategorie übersetzt, siehe
KATEGORIE_ZU_XDG_CATEGORIES in provisioning-server/app.py) statt fest
Network;WebBrowser; - und Exec= nutzt bei gesetztem item.kiosk_browser
("google-chrome"/"chromium") den jeweiligen --app=<url>-Kiosk-Start
statt xdg-open. Beide Werte werden bereits serverseitig aufgelöst, die
Rolle selbst trifft keine eigene Entscheidung.

Syntax-geprüft (ansible-playbook --syntax-check, Jinja2-Testrender mit
allen drei Exec-Varianten). Menü-Kategorisierung selbst (landet die
Webapp wirklich im erwarteten Cinnamon-Menüordner?) braucht noch einen
echten Boot-Test - siehe Rückmeldung im Chat.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-11 11:10:58 +02:00
adminandClaude Sonnet 5 685f136832 Fix: hostname-Rolle brach sudo durch Task-Reihenfolge + Live-Fact-Bug
Live gegen die golden-linux-mint VM gefunden: ansible.builtin.hostname
aktualisiert ansible_facts['hostname'] im laufenden Play automatisch nach
einer Änderung - die when:-Bedingung der /etc/hosts-Aktualisierung verglich
direkt gegen diesen (jetzt schon neuen) Fact und wurde faelschlich
uebersprungen. Der fehlende 127.0.1.1-Eintrag liess sudo im
Folge-Task mit "unable to resolve host" scheitern (privilege escalation
timeout).

Fix: Vorher-Hostname einmal per set_fact einfrieren statt live gegen
ansible_facts zu vergleichen, UND /etc/hosts vor dem eigentlichen
Hostnamenwechsel aktualisieren statt danach - kein Zwischenzustand mit
neuem Hostnamen aber altem /etc/hosts-Eintrag mehr moeglich.

Wechsel, Idempotenz und "keine Konvention konfiguriert" (leerer
tuxflotte_zielhostname) live gegen die VM verifiziert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 12:12:23 +02:00
adminandClaude Sonnet 5 97983dd292 Neue hostname-Rolle: setzt serverseitig vergebenen Hostnamen
Immer eingebundene Basis-Rolle (analog webapp-shortcuts, kein present/
absent-Merkmal) - setzt den Hostnamen nur, wenn tuxflotte_zielhostname
gesetzt UND vom aktuellen ansible_facts['hostname'] abweicht
(ansible.builtin.hostname, plattformübergreifend) + pflegt den
127.0.1.1-Eintrag in /etc/hosts nach.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 12:06:47 +02:00
adminandClaude Sonnet 5 2e2dbdf14c Härtung: terminal-sperre + netzwerkscanner-sperre Rollen
- terminal-sperre: blendet Terminal-Emulatoren per XDG-Hidden-Override in
  /usr/local/share/applications aus (weiche Variante, keine
  Ausführungssperre - Entscheidung 10.09.2026). Realer Bug live gefunden
  und gefixt: Zielverzeichnis existierte nicht, copy schlug fehl.
- netzwerkscanner-sperre: schlankes Cleanup (nmap/wireshark & Co.
  entfernen, falls vorinstalliert) - kein laufender Schutz nötig, da
  ADR-0026 Selbstinstallation durch den interaktiven Nutzer bereits
  verhindert. "absent" installiert bewusst nichts zurück.
- Beide Rollen präsent+idempotent+absent live gegen die golden-linux-mint
  VM (103) getestet.
- site.yml: beide Rollen eingebunden (53 -> 55 include_role-Blöcke).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 09:56:48 +02:00
adminandClaude Sonnet 5 c541be2916 Phase 2: AD-Anbindung, Fileserver, Update-Proxy (erste Version)
Drei neue Konfiguration-Merkmale mit echten Zugangsdaten in optionen,
Kategorie konfig-identitaet-netzwerk:

- ad-anbindung: Domaenen-Beitritt per realmd/sssd/adcli (Standard-
  Werkzeugkette, regulaere Pakete). realmd konfiguriert PAM beim Beitritt
  automatisch mit.
- fileserver: EINE Netzwerk-Freigabe per SMB oder WebDAV (cifs-utils/
  davfs2). Bewusst enger als die urspruengliche Anforderung ($HOME +
  beliebig viele Freigaben) - $HOME-Mount gehoert eher zur AD-Rolle
  (SSSD/autofs), "beliebig viele Freigaben" braeuchte einen listenbasierten
  Mechanismus wie webapp-shortcuts. Beides vorgemerkt, nicht umgesetzt.
- update-proxy: reiner apt-Proxy-Client (pragmatische Version aus der
  Diskussion vom 09.09. - fest benanntes Proxy-Geraet statt dynamischer
  Peer-Wahl). Das Proxy-Geraet selbst braucht apt-cacher-ng weiterhin
  manuell/serverseitig.

NICHT live gegen echte AD-/Fileserver-Infrastruktur getestet (Nutzer-
Entscheidung 10.09.2026: Testinfrastruktur erst nach dem Proxmox-
Hardware-Umzug, aktuelle pve-Hardware zu schwach fuer einen zusaetzlichen
Test-Dienst). Was getestet wurde: Rollen-Syntax, das "optionen nicht
gesetzt -> sauber ueberspringen"-Verhalten aller drei Rollen (echter
ansible-playbook-Lauf), und fuer update-proxy zusaetzlich der volle
Konfigurations-Pfad (reine Datei-Operation, kein Netzwerk-I/O, deshalb
gefahrlos lokal testbar).

Dabei echten Bug gefunden+behoben (betraf alle drei neuen Rollen
gleichermassen): `dict.get("fehlender_key")` liefert Python/Jinja None,
"and None" ist in aktuellen Ansible-Versionen (2.16+) kein gueltiges
when:-Ergebnis mehr - harter Fehler statt stiller Falsy-Umwandlung wie
frueher. Zusaetzlich: `| default('')` ersetzt standardmaessig NUR
undefinierte Werte, nicht explizites None - `| default('', true)` noetig,
um auch None abzufangen. Jede Rolle leitet jetzt einmal zu Beginn ein
echtes Boolean per set_fact ab statt .get() direkt in when: zu verwenden.

Voraussetzung: Migration 0035 (Verschluesselung + OE-/Gruppen-optionen-
Fix, admin/provisioning-server) muss vorher angewendet sein.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 09:37:53 +02:00
adminandClaude Sonnet 5 553117466b Phase 2: 10 neue Konfiguration/Härtung-Merkmale (erste Batch)
Konfiguration: multimedia-codecs, barrierefreiheit, wlan-firmware,
tastaturlayout, laender, zeitserver, auto-update.
Härtung: firewall, virenscanner, security-updates.

Vier Config-Value-Rollen (tastaturlayout/laender/zeitserver/auto-update)
nutzen tuxflotte_optionen fuer den eigentlichen Wert (Muster wie
brave/standardbrowser), nicht nur present/absent.

ECHT auf golden-linux-mint getestet (ansible-core dort, Live-VM ueber
SSH), nicht nur Syntax-Check - dabei drei reale Bugs gefunden+behoben:

1. wlan-firmware: Paketname ist NICHT distributionsunabhaengig wie
   angenommen - Debian "firmware-linux-nonfree", Ubuntu/Mint
   "linux-firmware". Per ansible_facts[distribution] verzweigt (dabei
   zusaetzlich gelernt: Mint meldet sich als "Linux Mint" mit
   Leerzeichen, nicht "Linuxmint").
2. auto-update: Jinja-Dict-Lookup in set_fact lieferte einen String
   statt int zurueck, dadurch spaeterer Vergleich mit TypeError
   abgestuerzt UND zwei stille Gleichheitsvergleiche immer falsch
   (waeren nie aufgefallen ohne den einen lauten Fehler an anderer
   Stelle). Mit explizitem int-Filter behoben.
3. firewall/security-updates: Auftrag-abgewaehlt deaktivierte nur die
   Funktion (ufw disable / Config-Datei loeschen), liess aber das Paket
   installiert - inkonsistent zum Rest des Katalogs, wo absent immer
   vollstaendige Rueckabwicklung bedeutet. Ergaenzt.

Nebenbefund beim Testen: clamav-daemon startet bewusst nicht sofort nach
der Installation (echte systemd-Condition auf die noch fehlende
Signaturdatenbank) - kein Bug, aber clamav-freshclam war standardmaessig
nicht dauerhaft aktiviert, das nachgezogen.

Firewall-Rolle laesst SSH bewusst offen (sonst waere Fernwartung
ausgesperrt - fast selbst beim Testen passiert). Bekannte offene Luecke
klar kommentiert: andere Merkmale mit Eingehend-Bedarf (z.B. veyon)
muessen ihre eigene ufw-Freigabe mitbringen, diese Rolle kennt andere
Merkmale nicht (Konflikt-/Gruppen-Handling insgesamt noch offen, siehe
Roadmap).

Gehoert zusammen mit admin/provisioning-server-Migration 0035 (live auf
anode angewendet+verifiziert: 10 Merkmale, 30 Blueprint-Zeilen) und den
3 neuen Kategorien aus Migration 0034.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 09:07:37 +02:00
adminandClaude Sonnet 5 e4edcf1011 Webapp-Mechanismus (Phase 2): neue Rolle webapp-shortcuts
Kundeneigene URLs (workspace_webapps, siehe admin/provisioning-server)
werden als .desktop-Menueintrag (/usr/share/applications) UND
best-effort als Desktop-Icon ausgeliefert - kein present/absent pro
Eintrag wie sonst im Katalog, sondern ein echter ABGLEICH: die Rolle
bekommt bei jedem Lauf die komplette aktuelle Liste und sorgt dafuer,
dass GENAU diese Eintraege existieren (Datei-Identifikation ueber die
stabile DB-UUID, keine Namens-Slugifizierung noetig). Laeuft deshalb
IMMER (site.yml-Play-Var tuxflotte_webapps, agent.py haengt sie immer
in --tags ein, siehe admin/provisioning-agent), nicht nur bei
Aenderungen.

Desktop-Icon-Ablage bewusst pragmatisch: /etc/skel/Desktop (kuenftige
Nutzer) + bestehende /home/*/Desktop-Ordner, falls schon vorhanden -
kein erzwungenes Anlegen. Haengt an der noch offenen ADR-0026
(kein final festgelegter primaerer interaktiver Nutzer-Account) - deckt
ab, was heute real existiert (z.B. den 'gast'-Account aus
guest-session), ohne auf die endgueltige Klaerung zu warten.

ECHT END-ZU-ENDE GETESTET (nicht nur Syntax-Check): echter
ansible-playbook-Lauf gegen localhost mit Mock-Daten - Anlegen
(mit+ohne Favicon), Aktualisieren, vollstaendiges Entfernen bei leerer
Liste, Idempotenz. Favicon-Download-Pfad mit echter URL verifiziert.
ansible-core dafuer neu installiert (vorher nicht vorhanden).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-09 14:59:09 +02:00
adminandClaude Sonnet 5 0f452c44ec Phase 2: 6 Sonderfall-App-Rollen (kein reguläres Debian-Paket)
google-chrome, anydesk: distributionsunabhängige Hersteller-apt-Repos
(Repo-URL+GPG-Key real recherchiert und verifiziert, 09.09.2026).

kolibri: neueres, distributionsunabhängiges GitHub-Pages-Repo von
Learning Equality (offiziell nur für Debian 13+ dokumentiert - NICHT
live auf Mint/Ubuntu bestätigt, siehe Rollenkommentar).

veyon: kein universelles Repo verfügbar, offizielle .deb-Downloads sind
pro Distro/Version fest gebaut - Codename-Erkennung über
/etc/os-release (UBUNTU_CODENAME bei Mint/Ubuntu, VERSION_CODENAME bei
Debian) mit expliziter Zuordnungstabelle (trixie/noble/resolute). Nur
der Debian-Fall bisher real bestätigt, siehe Rollenkommentar - vor
breitem Rollout auf allen drei Golden-VMs live gegenprüfen.

gdevelop, turbowarp: kein Debian-Paket, Flathub-IDs real bestätigt
(io.gdevelop.ide, org.turbowarp.TurboWarp) - Flatpak-Fallback wie bei
brave/libreoffice/onlyoffice.

Vectr bewusst NICHT als native Rolle - hat kein Debian-Paket, nur Snap
(passt nicht zu Mints Snap-Abstinenz) oder Web-App - wird stattdessen
ein Default-Eintrag im neuen Webapp-Mechanismus.

Gehört zusammen mit admin/provisioning-server-Migration 0031 (live auf
anode angewendet+verifiziert: 6 Merkmale, 18 Blueprint-Zeilen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-09 14:44:38 +02:00
adminandClaude Sonnet 5 572a8039bd Phase 2: 28 neue App-Store-Merkmale (regulaere apt-Pakete)
Erste Batch des Merkmal-Ausbaus (siehe Roadmap-Plan, Memory
project_phase2_app_store_merkmale): 28 Ansible-Rollen fuer Apps mit
regulaerem Debian/Ubuntu-Paket (per apt-cache auf einer echten
Debian-trixie-Quelle verifiziert, nicht aus dem Gedaechtnis geraten).

apt/deb bewusst statt Flatpak (Nutzer-Entscheidung 09.09.2026, kehrt
die bisherige brave/libreoffice/onlyoffice-Praxis fuer alle NEUEN
Rollen um). Kein os_family-Zweig noetig - alle drei Ziel-Backends
(mint-image/debian-image/ubuntu-image) sind Debian-Familie, Fedora
bewusst ausgeklammert.

Rollen: gimp, inkscape, scribus, librecad (Kreativ/Grafik); audacity,
musescore, metronome, minuet (Musik/Audio); stellarium, octave,
kalgebra, kalzium, kbruch, step, tuxmath, filius, gcompris (Bildung
Mathe/Naturwissenschaft); ktouch, kwordquiz, kanagram, tuxtype,
foliate (Bildung Sprache/Schreiben); evolution (Buero); kturtle,
fritzing (Programmieren/Making); remmina (Internet); geogebra, marble
(Unterrichtswerkzeuge).

Jede Rolle folgt dem bestehenden Muster (Marker-Datei unter
/run/tuxflotte/agent/applied/, present/absent-Verzweigung auf
tuxflotte_state) - alle 33 site.yml-Bloecke + alle Rollen-tasks als
YAML geparst verifiziert.

Gehoert zusammen mit admin/provisioning-server-Migration 0030 (Merkmal-
+Blueprint-DB-Eintraege, live auf anode angewendet+verifiziert).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-09 13:24:00 +02:00
adminandClaude Sonnet 5 78397251e5 feat: Google-Earth-Rolle als Katalog-Option
Kein Flatpak verfügbar (Google vertreibt nur eigene .deb/.rpm-Pakete),
daher wie guest-session eine einzige Rolle mit interner
os_family-Verzweigung statt Flatpak-Installation. apt (Debian/Mint)
installiert direkt per deb-URL, dnf (Fedora) per rpm-URL.

Syntax-geprüft (ansible-playbook --syntax-check); die tatsächliche
Paketinstallation (Netzwerk, Abhängigkeitsauflösung) ist im Gegensatz
zu den bisherigen Flatpak-Rollen noch nicht auf echter Hardware
verifiziert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 09:21:11 +02:00
adminandClaude Sonnet 5 dc1cb25da0 feat: LibreOffice-Rolle als weitere Office-Suite
Neben OnlyOffice als zusätzliche Katalog-Option, distro-unabhängig
über Flatpak (org.libreoffice.LibreOffice), gleiches present/absent-
Muster wie die onlyoffice-Rolle.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 08:45:04 +02:00
adminandClaude Sonnet 5 97220bfecc refactor: brave-fedora/onlyoffice-fedora auf distro-unabhängige Namen umbenennen
Fedora-Installer wurde zurückgestellt (Installationsprobleme), Fokus liegt
jetzt auf Mint, später weitere Distros. Beide Rollen sind über Flatpak
implementiert und damit schon jetzt distributionsunabhängig - die
"-fedora"-Benennung war irreführend. Konvention: kein Suffix = bewusst
distro-unabhängig (wie schon guest-session), "-mint"/"-fedora"-Suffix nur
für tatsächlich distro-spezifische Logik.

roles/brave-fedora -> roles/brave, roles/onlyoffice-fedora -> roles/onlyoffice,
Marker-Dateinamen und Task-Namen angepasst, site.yml und README aktualisiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 16:19:46 +02:00
adminandClaude Sonnet 5 8cd3f13dac fix: nopasswdlogin-PAM-Zeile nicht duplizieren (Debian-Familie)
lineinfile matchte bisher nur exakten Text - Debian/LightDM liefert eine
Zeile mit identischer Wirkung, aber anderer Formatierung mit, wurde also
nicht erkannt und stattdessen dupliziert. regexp behebt das für den
present-Task; der absent-Task bleibt bewusst beim exakten String-Match,
damit er nie die von der Distribution mitgelieferte Zeile entfernt.

Gefunden bei der E2E-Verifikation auf der QEMU-Test-VM.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 15:48:52 +02:00
adminandClaude Sonnet 5 770c3a6c95 feat: echte Rolleninhalte für guest-session/brave-fedora/onlyoffice-fedora
Ersetzt die reinen Marker-Datei-Platzhalter durch echte Anforderungen des
Schulcomputer-Workspace:

- guest-session: flüchtige Gastsitzung über lokalen gast-User +
  pam_namespace-tmpfs-Polyinstantiation, nopasswdlogin-Login. PAM-Layout
  wird über ansible_facts os_family erkannt (RedHat vs. Debian), da der
  Rollenname für beide Backends geteilt wird.
- brave-fedora: Installation via Flatpak/Flathub, neue optionale
  standardbrowser-Option (tuxflotte_optionen) setzt/entfernt den
  System-Default in /etc/xdg/mimeapps.list, mit Firefox-Fallback.
- onlyoffice-fedora: Installation via Flatpak/Flathub.

site.yml reicht zusätzlich zu tuxflotte_auftrag_states auch
tuxflotte_auftrag_optionen pro Rolle durch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 15:28:57 +02:00
adminandClaude Sonnet 5 28e6c067a1 feat: add present/absent branching for Auftragskatalog roles
Adds a tuxflotte_state variable, threaded from a new
tuxflotte_auftrag_states dict in site.yml (role name -> present/absent,
populated by the agent from the checkin response's "auftraege" list,
see ADR-0010) down into each role via include_role vars. Roles not
present in that dict default to "present" via .get(), so today's
purely workspace-composed, additive-only behavior is unchanged.

Retrofits all three existing placeholder roles with the present/absent
branch as the reference implementation of the convention, and
documents it in the README for future catalog-eligible roles. This is
what makes deselecting an Auftrag actually revert something instead of
just stopping future re-application.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 09:34:05 +02:00
adminandClaude Sonnet 5 ddcdeccab4 Fix tag propagation from include_role to role tasks in site.yml
Tags on include_role only apply to the include statement itself, not
the role's inner tasks, unless passed via apply. Without this,
ansible-pull --tags <role> silently skipped every role task, so no
marker files were ever written during the QEMU agent test.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 19:50:53 +02:00
admin a998949081 feat: initial ansible-content repo with placeholder roles for agent verification
Ein Platzhalter je Merkmal aus der Schulcomputer-Bereitstellungsvorlage (guest-session, brave-fedora, onlyoffice-fedora), zum Beweis der ansible-pull-Pipeline des Provisioning Agent.
2026-08-01 15:35:21 +02:00