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:
1 parent
572a8039bd
commit
0f452c44ec
13 files changed
+412
No files matched your search
@@ -0,0 +1 @@
|
||||
tuxflotte_state: present
|
||||
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
tuxflotte_state: present
|
||||
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
tuxflotte_state: present
|
||||
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
tuxflotte_state: present
|
||||
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
tuxflotte_state: present
|
||||
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
tuxflotte_state: present
|
||||
@@ -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"
|
||||
@@ -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
|
||||
Reference in new issue
Block a user