diff --git a/ansible/roles/guacd/defaults/main.yml b/ansible/roles/guacd/defaults/main.yml index e11f41a..616ac24 100644 --- a/ansible/roles/guacd/defaults/main.yml +++ b/ansible/roles/guacd/defaults/main.yml @@ -1,8 +1,19 @@ --- -# guacamole-server-Version und FreeRDP-Dev-Paket fuer den Quellcode-Build -# (siehe tasks/main.yml). Leer lassen = automatische Erkennung anhand der -# Ziel-Distribution (Debian 12/bookworm -> FreeRDP2 + guacamole-server 1.5.5; -# Debian 13/trixie -> FreeRDP3 + guacamole-server 1.6.0). Hier oder in -# group_vars ueberschreiben, um eine bestimmte Kombination zu erzwingen. +# guacamole-server-Version/-Quelle und FreeRDP-Dev-Paket fuer den +# Quellcode-Build (siehe tasks/main.yml). Leer lassen = automatische +# Erkennung anhand der Ziel-Distribution: +# - 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 "master"-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). guacd_version: "" guacd_freerdp_dev_package: "" + +# Nur relevant im git-Build-Pfad (s.o.): welcher Branch/Tag/Commit gebaut +# wird. Default "master". +guacd_git_ref: "master" diff --git a/ansible/roles/guacd/tasks/main.yml b/ansible/roles/guacd/tasks/main.yml index 1506779..773b878 100644 --- a/ansible/roles/guacd/tasks/main.yml +++ b/ansible/roles/guacd/tasks/main.yml @@ -5,21 +5,38 @@ # 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-Tarball gebaut. Nur das +# ("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. # -# FreeRDP-Paketname und guacamole-server-Version haengen vom Ziel-OS ab: -# Debian 12 (bookworm) liefert nur FreeRDP2 (freerdp2-dev) -- dafuer reicht -# guacamole-server 1.5.x. Debian 13 (trixie) liefert nur FreeRDP3 -# (freerdp3-dev, freerdp2-dev existiert dort nicht mehr) -- dafuer wird -# mindestens guacamole-server 1.6.0 benoetigt, dessen configure-Skript -# FreeRDP2 *und* FreeRDP3 per pkg-config automatisch erkennt (kein -# zusaetzliches Configure-Flag noetig, s. configure.ac PKG_CHECK_MODULES). -# Per group_vars ueberschreibbar (guacd_version / guacd_freerdp_dev_package), -# falls eine andere Kombination erzwungen werden soll. +# FreeRDP-Paketname und Build-Quelle haengen vom Ziel-OS ab: +# +# - 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 -- 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-"master"-Branch (git) +# gebaut, in der Hoffnung/Annahme, dass dort bereits Anpassungen an +# neuere FreeRDP-3.x-APIs eingeflossen sind. +# +# 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 "master" 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 "master" einen anderen +# Branch/Tag/Commit zu bauen. -- name: FreeRDP-Paket und guacamole-server-Version anhand der Distribution bestimmen +- name: FreeRDP-Paket, Build-Modus (Release-Tag vs. git-master) und Version anhand der Distribution bestimmen ansible.builtin.set_fact: _guacd_freerdp_pkg: >- {{ guacd_freerdp_dev_package @@ -27,12 +44,14 @@ else ('freerdp3-dev' if (ansible_distribution == 'Debian' and ansible_distribution_major_version | int >= 13) else 'freerdp2-dev') }} - _guacd_version: >- - {{ guacd_version + _guacd_build_mode: >- + {{ 'release' if (guacd_version | default('', true) | length > 0) - else ('1.6.0' + else ('git' if (ansible_distribution == 'Debian' and ansible_distribution_major_version | int >= 13) - else '1.5.5') }} + else 'release') }} + _guacd_version: "{{ guacd_version if (guacd_version | default('', true) | length > 0) else '1.5.5' }}" + _guacd_git_ref: "{{ guacd_git_ref | default('master') }}" - name: Build-Abhaengigkeiten fuer guacd installieren ansible.builtin.apt: @@ -49,6 +68,10 @@ - pkg-config - wget - ca-certificates + - git + - autoconf + - automake + - libtool state: present update_cache: true @@ -59,20 +82,18 @@ shell: /usr/sbin/nologin create_home: false -- name: Vorhandene guacd-Installation (falls Quellcode-Build) pruefen +- name: Vorhandene guacd-Installation pruefen ansible.builtin.stat: path: /usr/local/sbin/guacd register: _guacd_bin -- name: Installierte guacd-Version ermitteln +# --- Release-Tarball-Pfad (Debian 12 / expliziter Versions-Override) ------- + +- 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 - -- name: Feststellen, ob (Neu-)Build noetig ist - ansible.builtin.set_fact: - _guacd_build_needed: "{{ (not _guacd_bin.stat.exists) or (_guacd_version not in (_guacd_installed_version.stdout | default(''))) }}" + when: _guacd_bin.stat.exists and _guacd_build_mode == 'release' - name: guacamole-server Quellcode-Tarball herunterladen ansible.builtin.get_url: @@ -80,7 +101,9 @@ dest: "/usr/local/src/guacamole-server-{{ _guacd_version }}.tar.gz" checksum: "sha256:https://archive.apache.org/dist/guacamole/{{ _guacd_version }}/source/guacamole-server-{{ _guacd_version }}.tar.gz.sha256" mode: "0644" - when: _guacd_build_needed + when: >- + _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 ansible.builtin.unarchive: @@ -88,28 +111,60 @@ dest: /usr/local/src remote_src: true creates: "/usr/local/src/guacamole-server-{{ _guacd_version }}/configure" - when: _guacd_build_needed + when: >- + _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-master-Pfad (Debian 13, s. Warnhinweis oben) ---------------------- + +- name: guacamole-server-Quellcode (git {{ _guacd_git_ref }}) holen/aktualisieren + ansible.builtin.git: + repo: https://github.com/apache/guacamole-server.git + dest: /usr/local/src/guacamole-server-git + version: "{{ _guacd_git_ref }}" + force: true + register: _guacd_git + when: _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' + +- 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) -------------------------------- - name: guacamole-server konfigurieren (nur RDP-Plugin, kein VNC/Telnet/guacenc) ansible.builtin.command: cmd: >- ./configure --with-systemd-dir=/etc/systemd/system --disable-guacenc --disable-guaclog - chdir: "/usr/local/src/guacamole-server-{{ _guacd_version }}" - creates: "/usr/local/src/guacamole-server-{{ _guacd_version }}/Makefile" + chdir: "{{ _guacd_src_dir }}" when: _guacd_build_needed - name: guacamole-server kompilieren ansible.builtin.command: cmd: "make -j{{ ansible_processor_vcpus | default(2) }}" - chdir: "/usr/local/src/guacamole-server-{{ _guacd_version }}" + chdir: "{{ _guacd_src_dir }}" when: _guacd_build_needed changed_when: true - name: guacamole-server installieren (make install) ansible.builtin.command: cmd: make install - chdir: "/usr/local/src/guacamole-server-{{ _guacd_version }}" + chdir: "{{ _guacd_src_dir }}" when: _guacd_build_needed notify: - reload systemd