This commit is contained in:
2026-08-20 00:03:42 +02:00
parent 66df8fa47f
commit a8dfd9387b
2 changed files with 99 additions and 33 deletions

View File

@ -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"

View File

@ -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