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
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
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
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
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>
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>
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>
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>
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>
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>
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>
Ein Platzhalter je Merkmal aus der Schulcomputer-Bereitstellungsvorlage (guest-session, brave-fedora, onlyoffice-fedora), zum Beweis der ansible-pull-Pipeline des Provisioning Agent.