Commit Graph
12 Commits
Author SHA1 Message Date
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