From 65f9571a591cf284331a7eac8501a221c6ebd29c Mon Sep 17 00:00:00 2001 From: Midas Wollinger Date: Thu, 20 Aug 2026 00:24:55 +0200 Subject: [PATCH] fix 7 --- ansible/roles/guacd/defaults/main.yml | 20 ++-- ansible/roles/guacd/tasks/main.yml | 130 +++++++++++++++----------- 2 files changed, 87 insertions(+), 63 deletions(-) diff --git a/ansible/roles/guacd/defaults/main.yml b/ansible/roles/guacd/defaults/main.yml index 1bd9fd2..da60036 100644 --- a/ansible/roles/guacd/defaults/main.yml +++ b/ansible/roles/guacd/defaults/main.yml @@ -1,16 +1,22 @@ --- -# guacamole-server-Version/-Quelle und FreeRDP-Dev-Paket fuer den -# Quellcode-Build (siehe tasks/main.yml). Leer lassen = automatische -# Erkennung anhand der Ziel-Distribution: +# Installationsweg wird in tasks/main.yml automatisch anhand von +# ansible_distribution bestimmt: Ubuntu -> apt-Paket (guacd liegt dort in +# "universe"), Debian -> Quellcode-Build (kein apt-Paket verfuegbar). +# +# Die folgenden Variablen wirken sich NUR auf den Debian-Quellcode-Pfad aus. +# Leer lassen = automatische Erkennung anhand der Debian-Version: # - Debian 12 (bookworm): FreeRDP2 (freerdp2-dev) + guacamole-server # 1.5.5 (offizieller Release-Tarball, Checksum-verifiziert). # - Debian 13 (trixie) oder neuer: FreeRDP3 (freerdp3-dev). Da der letzte # offizielle guacamole-server-Release (1.6.0) nicht gegen trixies # FreeRDP 3.15 baut, wird stattdessen der "main"-Branch (git) gebaut -# -- s. ausfuehrlicher Warnhinweis in tasks/main.yml. Sobald ein -# Guacamole-Release mit funktionierender FreeRDP-3.15-Unterstuetzung -# erscheint, hier guacd_version auf diesen Tag setzen, um wieder auf -# den stabilen Release-Tarball-Pfad zu wechseln (auch auf Debian 13). +# -- s. ausfuehrlicher Warnhinweis in tasks/main.yml. Getestet (Stand +# Aug 2026) baut auch "main" NICHT erfolgreich gegen FreeRDP 3.15; fuer +# produktive Debian-13-Hosts daher eher Ubuntu oder Debian 12 +# verwenden. Sobald ein Guacamole-Release mit funktionierender +# FreeRDP-3.15-Unterstuetzung erscheint, hier guacd_version auf diesen +# Tag setzen, um wieder auf den stabilen Release-Tarball-Pfad zu +# wechseln (auch auf Debian 13). guacd_version: "" guacd_freerdp_dev_package: "" diff --git a/ansible/roles/guacd/tasks/main.yml b/ansible/roles/guacd/tasks/main.yml index 120bea7..e0288c4 100644 --- a/ansible/roles/guacd/tasks/main.yml +++ b/ansible/roles/guacd/tasks/main.yml @@ -2,43 +2,50 @@ # guacd + FreeRDP als reine Protokoll-Engine fuer RDP (Konzept 3/4.3). # Laeuft ausschliesslich lokal gebunden, kein Netzwerkzugriff von aussen. # -# guacd gibt es fuer Debian (Bookworm und aelter) als apt-Paket bislang NICHT -# (nur Ubuntu paketiert es ueber die "universe"-Komponente). Daher wird guacd -# hier gemaess der offiziellen Apache-Guacamole-Doku -# ("Installing Guacamole natively") aus dem Quellcode gebaut. Nur das -# RDP-Plugin wird aktiviert (FreeRDP-Dev-Header vorhanden, kein VNC/Telnet), -# passend zum reinen RDP-Einsatzzweck dieses Jumphosts. +# Installationsweg haengt vom Ziel-OS ab: # -# FreeRDP-Paketname und Build-Quelle haengen vom Ziel-OS ab: +# - Ubuntu (22.04/24.04): hat ein fertiges apt-Paket ("guacd", +# "libguac-client-rdp0", ueber die "universe"-Komponente). Zwar mit +# veralteter Version (1.3.0), aber offiziell von Ubuntu gepflegt und +# bekommt automatisch Sicherheitsupdates ueber unattended-upgrades (da +# dynamisch gegen libfreerdp2 gelinkt). Daher hier bevorzugt. # -# - Debian 12 (bookworm): liefert nur FreeRDP2 (freerdp2-dev). Dafuer wird -# der offizielle guacamole-server-1.5.5-Release-Tarball gebaut (stabil, -# Checksum-verifiziert). +# - Debian: hat KEIN guacd-apt-Paket (weder bookworm noch trixie -- nur +# Ubuntu paketiert es ueber "universe"). Daher wird guacd hier gemaess der +# offiziellen Apache-Guacamole-Doku ("Installing Guacamole natively") aus +# dem Quellcode gebaut. Nur das RDP-Plugin wird aktiviert +# (FreeRDP-Dev-Header vorhanden, kein VNC/Telnet), passend zum reinen +# RDP-Einsatzzweck dieses Jumphosts. # -# - Debian 13 (trixie): liefert nur FreeRDP3 (freerdp3-dev), und zwar bereits -# Version 3.15 -- das ist NEUER als das, wogegen der letzte offizielle -# guacamole-server-Release (1.6.0) geschrieben wurde. Der 1.6.0-Tarball -# baut gegen trixies FreeRDP3 nicht (u.a. entfernter "->input"-Member auf -# rdpFreerdp, s. https://issues.apache.org/jira/browse/GUACAMOLE-2146 und -# diverse Debian-13-Install-Guides, die genau das bestaetigen). Es gibt -# noch KEIN Release mit funktionierender FreeRDP-3.15-Unterstuetzung. -# Daher wird hier stattdessen der guacamole-server-"main"-Branch (git, -# Standard-Branch des apache/guacamole-server-Repos) gebaut, in der -# Hoffnung/Annahme, dass dort bereits Anpassungen an neuere -# FreeRDP-3.x-APIs eingeflossen sind. +# FreeRDP-Paketname und Build-Quelle haengen dabei von der Debian-Version ab: # -# ACHTUNG: Das ist AUSDRUECKLICH KEIN von Apache Guacamole empfohlener Weg -# (Doku: "please not a non-release version from git") -- kein stabiler -# Versions-Tag, keine Checksum-Verifikation moeglich, kann durch Aenderungen -# an "main" jederzeit brechen oder unerwartetes Verhalten zeigen. Sobald -# ein Guacamole-Release mit getesteter FreeRDP-3.15-Unterstuetzung -# erscheint, sollte per group_vars auf einen festen Tag zurueckgestellt -# werden (guacd_version: "x.y.z" erzwingt den Release-Tarball-Pfad, auch -# auf Debian 13). guacd_git_ref erlaubt es, statt "main" einen anderen -# Branch/Tag/Commit zu bauen. +# - Debian 12 (bookworm): liefert nur FreeRDP2 (freerdp2-dev). Dafuer wird +# der offizielle guacamole-server-1.5.5-Release-Tarball gebaut (stabil, +# Checksum-verifiziert). +# +# - Debian 13 (trixie): liefert nur FreeRDP3 (freerdp3-dev), und zwar +# bereits Version 3.15 -- NEUER als das, wogegen der letzte offizielle +# guacamole-server-Release (1.6.0) geschrieben wurde. Sowohl der +# 1.6.0-Tarball als auch der aktuelle "main"-Branch (git, Stand: Aug 2026) +# bauen NICHT gegen trixies FreeRDP3 (u.a. entfernter "->input"-Member +# auf rdpFreerdp, s. https://issues.apache.org/jira/browse/GUACAMOLE-2146 +# und diverse Debian-13-Install-Guides, die genau das bestaetigen). +# Es gibt noch KEIN Release oder git-main-Stand mit funktionierender +# FreeRDP-3.15-Unterstuetzung. Der git-main-Pfad bleibt hier dennoch als +# Option bestehen (fuer den Fall, dass ein zukuenftiger Commit das +# behebt), ist aber AUSDRUECKLICH KEIN von Apache Guacamole empfohlener +# Weg (Doku: "please not a non-release version from git") und aktuell +# NICHT funktionsfaehig getestet. Fuer produktive Debian-13-Hosts also +# bis auf Weiteres eher Ubuntu oder Debian 12 als Zielsystem waehlen. +# Sobald ein Fix verfuegbar ist: guacd_git_ref auf den entsprechenden +# Commit/Branch setzen, oder bei einem echten Release guacd_version auf +# den Tag setzen (erzwingt den stabilen Release-Tarball-Pfad). -- name: FreeRDP-Paket, Build-Modus (Release-Tag vs. git-main) und Version anhand der Distribution bestimmen +- name: Installationsweg (apt vs. Quellcode) und ggf. FreeRDP-Paket/Version anhand der Distribution bestimmen ansible.builtin.set_fact: + _guacd_install_mode: "{{ 'apt' if ansible_distribution == 'Ubuntu' else 'source' }}" + _guacd_build_needed: false + _guacd_src_dir: "" _guacd_freerdp_pkg: >- {{ guacd_freerdp_dev_package if (guacd_freerdp_dev_package | default('', true) | length > 0) @@ -54,6 +61,19 @@ _guacd_version: "{{ guacd_version if (guacd_version | default('', true) | length > 0) else '1.5.5' }}" _guacd_git_ref: "{{ guacd_git_ref | default('main') }}" +# --- apt-Pfad (Ubuntu) ------------------------------------------------------ + +- name: guacd und FreeRDP-Plugin per apt installieren (Ubuntu: guacd liegt in "universe") + ansible.builtin.apt: + name: + - guacd + - libguac-client-rdp0 + state: present + update_cache: true + when: _guacd_install_mode == 'apt' + +# --- Quellcode-Pfad (Debian) ------------------------------------------------- + - name: Build-Abhaengigkeiten fuer guacd installieren ansible.builtin.apt: name: @@ -75,26 +95,19 @@ - libtool state: present update_cache: true + when: _guacd_install_mode == 'source' -- name: Dedizierten guacd-User anlegen (frueher vom Debian/Ubuntu-Paket erledigt) - ansible.builtin.user: - name: guacd - system: true - shell: /usr/sbin/nologin - create_home: false - -- name: Vorhandene guacd-Installation pruefen +- name: Vorhandene guacd-Quellcode-Installation pruefen ansible.builtin.stat: path: /usr/local/sbin/guacd register: _guacd_bin - -# --- Release-Tarball-Pfad (Debian 12 / expliziter Versions-Override) ------- + when: _guacd_install_mode == 'source' - name: Installierte guacd-Version ermitteln (Release-Pfad) ansible.builtin.command: /usr/local/sbin/guacd -v register: _guacd_installed_version changed_when: false - when: _guacd_bin.stat.exists and _guacd_build_mode == 'release' + when: _guacd_install_mode == 'source' and _guacd_bin.stat.exists and _guacd_build_mode == 'release' - name: guacamole-server Quellcode-Tarball herunterladen ansible.builtin.get_url: @@ -103,7 +116,7 @@ checksum: "sha256:https://archive.apache.org/dist/guacamole/{{ _guacd_version }}/source/guacamole-server-{{ _guacd_version }}.tar.gz.sha256" mode: "0644" when: >- - _guacd_build_mode == 'release' and + _guacd_install_mode == 'source' and _guacd_build_mode == 'release' and ((not _guacd_bin.stat.exists) or (_guacd_version not in (_guacd_installed_version.stdout | default('')))) - name: guacamole-server Tarball entpacken @@ -113,16 +126,14 @@ remote_src: true creates: "/usr/local/src/guacamole-server-{{ _guacd_version }}/configure" when: >- - _guacd_build_mode == 'release' and + _guacd_install_mode == 'source' and _guacd_build_mode == 'release' and ((not _guacd_bin.stat.exists) or (_guacd_version not in (_guacd_installed_version.stdout | default('')))) - name: Feststellen, ob (Neu-)Build noetig ist (Release-Pfad) ansible.builtin.set_fact: _guacd_build_needed: "{{ (not _guacd_bin.stat.exists) or (_guacd_version not in (_guacd_installed_version.stdout | default(''))) }}" _guacd_src_dir: "/usr/local/src/guacamole-server-{{ _guacd_version }}" - when: _guacd_build_mode == 'release' - -# --- git-main-Pfad (Debian 13, s. Warnhinweis oben) ------------------------- + when: _guacd_install_mode == 'source' and _guacd_build_mode == 'release' - name: guacamole-server-Quellcode (git {{ _guacd_git_ref }}) holen/aktualisieren ansible.builtin.git: @@ -131,21 +142,19 @@ version: "{{ _guacd_git_ref }}" force: true register: _guacd_git - when: _guacd_build_mode == 'git' + when: _guacd_install_mode == 'source' and _guacd_build_mode == 'git' - name: Feststellen, ob (Neu-)Build noetig ist (git-Pfad) ansible.builtin.set_fact: _guacd_build_needed: "{{ (not _guacd_bin.stat.exists) or _guacd_git.changed }}" _guacd_src_dir: /usr/local/src/guacamole-server-git - when: _guacd_build_mode == 'git' + when: _guacd_install_mode == 'source' and _guacd_build_mode == 'git' - name: Build-System aus configure.ac generieren (autoreconf, nur git-Pfad) ansible.builtin.command: cmd: autoreconf -fi chdir: "{{ _guacd_src_dir }}" - when: _guacd_build_mode == 'git' and _guacd_build_needed - -# --- Gemeinsame Build-Schritte (beide Pfade) -------------------------------- + when: _guacd_install_mode == 'source' and _guacd_build_mode == 'git' and _guacd_build_needed - name: guacamole-server konfigurieren (nur RDP-Plugin, kein VNC/Telnet/guacenc) ansible.builtin.command: @@ -153,29 +162,38 @@ ./configure --with-systemd-dir=/etc/systemd/system --disable-guacenc --disable-guaclog chdir: "{{ _guacd_src_dir }}" - when: _guacd_build_needed + when: _guacd_install_mode == 'source' and _guacd_build_needed - name: guacamole-server kompilieren ansible.builtin.command: cmd: "make -j{{ ansible_processor_vcpus | default(2) }}" chdir: "{{ _guacd_src_dir }}" - when: _guacd_build_needed + when: _guacd_install_mode == 'source' and _guacd_build_needed changed_when: true - name: guacamole-server installieren (make install) ansible.builtin.command: cmd: make install chdir: "{{ _guacd_src_dir }}" - when: _guacd_build_needed + when: _guacd_install_mode == 'source' and _guacd_build_needed notify: - reload systemd - restart guacd - name: Shared-Library-Cache aktualisieren (ldconfig) ansible.builtin.command: ldconfig - when: _guacd_build_needed + when: _guacd_install_mode == 'source' and _guacd_build_needed changed_when: false +# --- Gemeinsame Konfiguration (beide Pfade) --------------------------------- + +- name: Dedizierten guacd-User sicherstellen (apt-Paket legt ihn i.d.R. bereits an) + ansible.builtin.user: + name: guacd + system: true + shell: /usr/sbin/nologin + create_home: false + - name: guacd nur an localhost binden ansible.builtin.lineinfile: path: /etc/guacamole/guacd.conf