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
This commit is contained in:
adminandClaude Sonnet 5 committed 2026-09-09 14:44:38 +02:00
1 parent 572a8039bd
commit 0f452c44ec
13 files changed
+412

No files matched your search

+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+65
View File
@@ -0,0 +1,65 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# AnyDesk gibt es nicht im Debian/Ubuntu-Repo (proprietär) - AnyDesks
# eigenes apt-Repo ist distributionsunabhängig gepflegt (Debian+Ubuntu,
# verifiziert 09.09.2026), ein einziger Rollencode für alle drei Backends.
- name: Verzeichnis /etc/apt/keyrings anlegen (falls noch nicht vorhanden)
ansible.builtin.file:
path: /etc/apt/keyrings
state: directory
mode: "0755"
when: tuxflotte_state == "present"
- name: GPG-Schlüssel für AnyDesks apt-Repo herunterladen und importieren
ansible.builtin.shell: |
set -euo pipefail
wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | gpg --dearmor -o /etc/apt/keyrings/anydesk.gpg
args:
creates: /etc/apt/keyrings/anydesk.gpg
executable: /bin/bash
when: tuxflotte_state == "present"
- name: AnyDesks apt-Repo eintragen
ansible.builtin.apt_repository:
repo: "deb [signed-by=/etc/apt/keyrings/anydesk.gpg] http://deb.anydesk.com/ all main"
filename: anydesk-stable
state: present
update_cache: true
when: tuxflotte_state == "present"
- name: AnyDesk installieren
ansible.builtin.apt:
name: anydesk
state: present
when: tuxflotte_state == "present"
- name: Record that the anydesk role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/anydesk.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: AnyDesk entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: anydesk
state: absent
when: tuxflotte_state == "absent"
- name: AnyDesks apt-Repo entfernen (Auftrag abgewählt)
ansible.builtin.apt_repository:
repo: "deb [signed-by=/etc/apt/keyrings/anydesk.gpg] http://deb.anydesk.com/ all main"
filename: anydesk-stable
state: absent
when: tuxflotte_state == "absent"
- name: anydesk-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/anydesk.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+45
View File
@@ -0,0 +1,45 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# GDevelop hat kein reguläres Debian/Ubuntu-Paket, Flathub-ID per
# Web-Recherche bestätigt (09.09.2026) - Flatpak-Fallback wie bei
# brave/libreoffice/onlyoffice (Migration 0009/0010/0013).
- name: Ensure flathub remote is configured
community.general.flatpak_remote:
name: flathub
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
state: present
method: system
when: tuxflotte_state == "present"
- name: Install GDevelop via Flatpak
community.general.flatpak:
name: io.gdevelop.ide
remote: flathub
state: present
method: system
when: tuxflotte_state == "present"
- name: Record that the gdevelop role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/gdevelop.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Remove GDevelop (Auftrag abgewählt)
community.general.flatpak:
name: io.gdevelop.ide
state: absent
method: system
when: tuxflotte_state == "absent"
- name: Remove gdevelop marker (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/gdevelop.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+59
View File
@@ -0,0 +1,59 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Google Chrome gibt es nicht im Debian/Ubuntu-Repo (proprietär) - Googles
# eigenes apt-Repo ist aber distributionsunabhängig gepflegt (funktioniert
# gleichermaßen für Debian und Ubuntu, verifiziert 09.09.2026), deshalb ein
# einziger Rollencode für alle drei Backends, kein os_family-Zweig nötig.
- name: GPG-Schlüssel für Googles apt-Repo herunterladen und importieren
ansible.builtin.shell: |
set -euo pipefail
wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg
args:
creates: /usr/share/keyrings/google-chrome.gpg
executable: /bin/bash
when: tuxflotte_state == "present"
- name: Googles apt-Repo eintragen
ansible.builtin.apt_repository:
repo: "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main"
filename: google-chrome
state: present
update_cache: true
when: tuxflotte_state == "present"
- name: Google Chrome installieren
ansible.builtin.apt:
name: google-chrome-stable
state: present
when: tuxflotte_state == "present"
- name: Record that the google-chrome role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/google-chrome.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Google Chrome entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: google-chrome-stable
state: absent
when: tuxflotte_state == "absent"
- name: Googles apt-Repo entfernen (Auftrag abgewählt)
ansible.builtin.apt_repository:
repo: "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main"
filename: google-chrome
state: absent
when: tuxflotte_state == "absent"
- name: google-chrome-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/google-chrome.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+67
View File
@@ -0,0 +1,67 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Kolibri (Learning Equality, Offline-Lernplattform) - nutzt das neuere,
# distributionsunabhängige apt-Repo (GitHub Pages, Suite "stable" statt
# eines distro-codename-gebundenen Repos wie die ältere Launchpad-PPA),
# offiziell für Debian 13+ dokumentiert (09.09.2026). NICHT live auf Mint/
# Ubuntu getestet, ob dieses Repo dort ebenfalls funktioniert - falls nicht,
# müsste auf die ältere codename-gebundene Launchpad-PPA ausgewichen werden.
# Vor breitem Rollout auf einer echten Mint-/Ubuntu-Maschine gegenprüfen.
- name: Verzeichnis /etc/apt/keyrings anlegen (falls noch nicht vorhanden)
ansible.builtin.file:
path: /etc/apt/keyrings
state: directory
mode: "0755"
when: tuxflotte_state == "present"
- name: GPG-Schlüssel für Kolibris apt-Repo herunterladen
ansible.builtin.get_url:
url: https://learningequality.github.io/kolibri-installer-debian/pubkey.asc
dest: /etc/apt/keyrings/kolibri.asc
mode: "0644"
when: tuxflotte_state == "present"
- name: Kolibris apt-Repo eintragen
ansible.builtin.apt_repository:
repo: "deb [signed-by=/etc/apt/keyrings/kolibri.asc] https://learningequality.github.io/kolibri-installer-debian/ stable main"
filename: kolibri
state: present
update_cache: true
when: tuxflotte_state == "present"
- name: Kolibri installieren
ansible.builtin.apt:
name: kolibri
state: present
when: tuxflotte_state == "present"
- name: Record that the kolibri role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/kolibri.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Kolibri entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: kolibri
state: absent
when: tuxflotte_state == "absent"
- name: Kolibris apt-Repo entfernen (Auftrag abgewählt)
ansible.builtin.apt_repository:
repo: "deb [signed-by=/etc/apt/keyrings/kolibri.asc] https://learningequality.github.io/kolibri-installer-debian/ stable main"
filename: kolibri
state: absent
when: tuxflotte_state == "absent"
- name: kolibri-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/kolibri.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+45
View File
@@ -0,0 +1,45 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# TurboWarp hat kein reguläres Debian/Ubuntu-Paket, Flathub-ID per
# Web-Recherche bestätigt (09.09.2026) - Flatpak-Fallback wie bei
# brave/libreoffice/onlyoffice (Migration 0009/0010/0013).
- name: Ensure flathub remote is configured
community.general.flatpak_remote:
name: flathub
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
state: present
method: system
when: tuxflotte_state == "present"
- name: Install TurboWarp via Flatpak
community.general.flatpak:
name: org.turbowarp.TurboWarp
remote: flathub
state: present
method: system
when: tuxflotte_state == "present"
- name: Record that the turbowarp role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/turbowarp.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Remove TurboWarp (Auftrag abgewählt)
community.general.flatpak:
name: org.turbowarp.TurboWarp
state: absent
method: system
when: tuxflotte_state == "absent"
- name: Remove turbowarp marker (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/turbowarp.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+71
View File
@@ -0,0 +1,71 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Veyon (Klassenraum-Management) - kein distributionsunabhängiges apt-Repo
# verfügbar, offizielle Downloads sind pro Distro/Version fest gebaute .deb-
# Dateien (github.com/veyon/veyon/releases, Version 4.11.2, Stand
# 09.09.2026). Zuordnung Backend -> Distro-Codename:
# - debian-image (Debian 13/trixie) -> debian.13
# - mint-image (Linux Mint 22.3, basiert auf Ubuntu 24.04/noble) -> ubuntu.24.04
# - ubuntu-image (Ubuntu 26.04/resolute) -> ubuntu.26.04
# Codename-Erkennung über /etc/os-release: UBUNTU_CODENAME ist bei Ubuntu
# UND bei Mint gesetzt (Mint trägt den Ubuntu-Codename der Basis ein), bei
# reinem Debian fehlt es, dort zählt VERSION_CODENAME. NICHT live auf allen
# drei Golden-VMs gegengeprüft (nur Debian/trixie an dieser Stelle real
# bestätigt, siehe Session-Notizen) - vor breitem Rollout nachholen.
- name: Distro-Codename ermitteln (UBUNTU_CODENAME bevorzugt, sonst VERSION_CODENAME)
ansible.builtin.shell: |
set -euo pipefail
. /etc/os-release
echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}"
args:
executable: /bin/bash
register: tuxflotte_veyon_codename
changed_when: false
when: tuxflotte_state == "present" or tuxflotte_state == "absent"
- name: Veyon-.deb-Dateiname je Codename festlegen
ansible.builtin.set_fact:
tuxflotte_veyon_deb: >-
{{
{
'trixie': 'veyon_4.11.2.0-debian.13_amd64.deb',
'noble': 'veyon_4.11.2.0-ubuntu.24.04_amd64.deb',
'resolute': 'veyon_4.11.2.0-ubuntu.26.04_amd64.deb'
}[tuxflotte_veyon_codename.stdout | trim]
}}
when: tuxflotte_state == "present" and (tuxflotte_veyon_codename.stdout | trim) in ['trixie', 'noble', 'resolute']
- name: Veyon installieren
ansible.builtin.apt:
deb: "https://github.com/veyon/veyon/releases/download/v4.11.2/{{ tuxflotte_veyon_deb }}"
when: tuxflotte_state == "present" and tuxflotte_veyon_deb is defined
- name: Warnung falls Codename unbekannt (kein passendes Veyon-Paket)
ansible.builtin.debug:
msg: >-
Veyon: Distro-Codename '{{ tuxflotte_veyon_codename.stdout | trim }}' nicht in der
bekannten Zuordnung - Installation übersprungen, bitte Rolle aktualisieren.
when: tuxflotte_state == "present" and tuxflotte_veyon_deb is not defined
- name: Record that the veyon role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/veyon.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present" and tuxflotte_veyon_deb is defined
- name: Veyon entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: veyon
state: absent
when: tuxflotte_state == "absent"
- name: veyon-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/veyon.marker
state: absent
when: tuxflotte_state == "absent"
+54
View File
@@ -308,3 +308,57 @@
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('marble', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('marble', {}) }}"
tags: marble
- include_role:
name: google-chrome
apply:
tags: google-chrome
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('google-chrome', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('google-chrome', {}) }}"
tags: google-chrome
- include_role:
name: anydesk
apply:
tags: anydesk
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('anydesk', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('anydesk', {}) }}"
tags: anydesk
- include_role:
name: kolibri
apply:
tags: kolibri
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('kolibri', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('kolibri', {}) }}"
tags: kolibri
- include_role:
name: veyon
apply:
tags: veyon
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('veyon', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('veyon', {}) }}"
tags: veyon
- include_role:
name: gdevelop
apply:
tags: gdevelop
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('gdevelop', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('gdevelop', {}) }}"
tags: gdevelop
- include_role:
name: turbowarp
apply:
tags: turbowarp
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('turbowarp', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('turbowarp', {}) }}"
tags: turbowarp