Guacamole est divisé en deux parties :
guacd est le démon proxy qui s’exécute sur le serveur Guacamole :
guacd est un exécutable appelé GUACD qui peut être exécuté manuellement ou automatiquement quand votre ordinateur démarre.
La construction de guacamole-server nécessite un compilateur C (comme gcc) et des bibliothèques dont dépend guacamole-server. Certaines dépendances sont absolument obligatoire, tandis que d’autres sont optionnels. La présence de dépendances optionnelles permet des fonctionnalités supplémentaires.
De nombreuses distributions Linux séparent les paquets de bibliothèques en binaires et des paquets « développement » ; Vous devrez installer les packages de développement. Celles-ci se terminent généralement par un suffixe « -dev » ou « -dev ».
Pour construire guacamole-server, il faut disposer de :
apt install -y libcairo2-dev libjpeg62-turbo-dev libtool-bin
Les dépendances optionnelles de Guacamole dictent quelles parties de guacamole-server seront construites. Cela inclut la prise en charge de divers protocoles de bureau à distance, ainsi que toutes les fonctionnalités supplémentaires de ces protocoles :
apt install -y freerdp2-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libwebsockets-dev libssl-dev libwebp-dev libpulse-dev libvorbis-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libtelnet-dev
Debian 13 ne contient que le dépôt freerdp3 alors que Guacamole nécessite freerdp2. Il est nécessaire de compiler freerdp2 en activant le redimensionnement d’images (-DWITH_SWSCALE=ON).
sudo apt install -y libwayland-dev wayland-protocols libxkbcommon-dev
sudo apt install -y libasound2-dev
sudo apt install -y libcups2-dev
sudo apt install -y libpcsclite-dev
sudo apt install -y libxkbfile-dev
sudo apt install -y libxinerama-dev
sudo apt install -y libxcursor-dev
sudo apt install -y libxv-dev
sudo apt install -y libxi-dev
sudo apt install -y libxrandr-dev
sudo apt install -y libxfixes-dev
sudo apt install -y docbook-xsl docbook-xml xsltproc
sudo apt install cmake libsystemd-dev clang-format
sudo apt install -y libusb-1.0-0-dev libudev-dev pkg-config
git clone --branch 2.11.7 https://github.com/FreeRDP/FreeRDP.git
cd FreeRDP
?? git submodule update --init --recursive
mkdir build && cd build
# nettoyer le cache CMake
rm -f CMakeCache.txt
rm -rf CMakeFiles/
rm -rf build
# lancer la configuration
cmake -DCMAKE_INSTALL_PREFIX=/usr/local \
-DWITH_CAIRO=ON \
-DWITH_SWSCALE=ON \
-DWITH_MANPAGES=ON \
-DWITH_ALSA=ON \
-DWITH_CUPS=ON \
-DWITH_PCSC=ON \
-DWITH_XKBFILE=ON \
-DWITH_XINERAMA=ON \
-DWITH_XCURSOR=ON \
-DWITH_XV=ON \
-DWITH_XI=ON \
-DWITH_XRANDR=ON \
-DWITH_XFIXES=ON \
-DWITH_WAYLAND=ON \
-Wno-dev \
..
make -j$(nproc)
sudo make install
sudo ldconfig
Vérifier :
/usr/local/bin/xfreerdp --version
apt install sudo adduser guacamole usermod -aG sudo guacamole
wget https://dlcdn.apache.org/guacamole/1.6.0/source/guacamole-server-1.6.0.tar.gz tar -xzf guacamole-server-1.6.0.tar.gz cd guacamole-server-1.6.0
sudo apt install -y build-essential make pkg-config
./configure --with-systemd-dir=/etc/systemd/system/
...
------------------------------------------------
guacamole-server version 1.6.0
------------------------------------------------
Library status:
freerdp ............. yes (3.x)
pango ............... yes
libavcodec .......... yes
libavformat ......... yes
libavutil ........... yes
libssh2 ............. yes
libssl .............. yes
libswscale .......... yes
libtelnet ........... yes
libVNCServer ........ yes
libvorbis ........... yes
libpulse ............ yes
libwebsockets ....... yes
libwebp ............. yes
wsock32 ............. no
Protocol support:
Kubernetes .... yes
RDP ........... yes
SSH ........... yes
Telnet ........ yes
VNC ........... yes
Services / tools:
guacd ...... yes
guacenc .... yes
guaclog .... yes
FreeRDP plugins: /usr/lib/x86_64-linux-gnu/pkgconfig/../../../lib/x86_64-linux-gnu/freerdp3
Init scripts: no
Systemd units: /etc/systemd/system/
Type "make" to compile guacamole-server.
configure: WARNING:
--------------------------------------------
Support for FreeRDP 3.x is currently experimental. Some features, like
RemoteApp, have known issues. If not testing, consider using FreeRDP 2.x.
--------------------------------------------
./configure --with-systemd-dir=/etc/systemd/system/
...
------------------------------------------------
guacamole-server version 1.6.0
------------------------------------------------
Library status:
freerdp ............. yes (2.x)
pango ............... yes
libavcodec .......... yes
libavformat ......... yes
libavutil ........... yes
libssh2 ............. yes
libssl .............. yes
libswscale .......... yes
libtelnet ........... yes
libVNCServer ........ yes
libvorbis ........... yes
libpulse ............ yes
libwebsockets ....... yes
libwebp ............. yes
wsock32 ............. no
Protocol support:
Kubernetes .... yes
RDP ........... yes
SSH ........... yes
Telnet ........ yes
VNC ........... yes
Services / tools:
guacd ...... yes
guacenc .... yes
guaclog .... yes
FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2
Init scripts: no
Systemd units: /etc/systemd/system/
Type "make" to compile guacamole-server.
make make all-recursive make[1]: Entering directory '/home/guacamole/guacamole-server-1.6.0' Making all in src/libguac ... make[2]: Leaving directory '/home/guacamole/guacamole-server-1.6.0/src/guaclog' make[2]: Entering directory '/home/guacamole/guacamole-server-1.6.0' make[2]: Leaving directory '/home/guacamole/guacamole-server-1.6.0' make[1]: Leaving directory '/home/guacamole/guacamole-server-1.6.0'
* commande **sudo make install** pour installer les composants qui ont été créés.
$ sudo make install
Making install in src/libguac
make[1]: Entering directory '/home/guacamole/guacamole-server-1.6.0/src/libguac'
Making install in .
...
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
...
make[2]: Leaving directory '/home/guacamole/guacamole-server-1.6.0/src/guaclog'
make[1]: Leaving directory '/home/guacamole/guacamole-server-1.6.0/src/guaclog'
make[1]: Entering directory '/home/guacamole/guacamole-server-1.6.0'
make[2]: Entering directory '/home/guacamole/guacamole-server-1.6.0'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/guacamole/guacamole-server-1.6.0'
make[1]: Leaving directory '/home/guacamole/guacamole-server-1.6.0'
sudo ldconfig
Pour démarrer le service guacd correspondant à Guacamole et activer son démarrage automatique (La première commande sert à prendre en compte le nouveau service) :
sudo systemctl daemon-reload sudo systemctl enable --now guacd
sudo systemctl status guacd
Création de l'arborescence pour la configuration d'Apache Guacamole. Cela va donner le répertoire etc/guacamole avec les sous-répertoires extensions et lib, nécessaire pour mettre en place ensuite le stockage des données dans une base de données MariaDB / MySQL.
sudo mkdir -p /etc/guacamole/{extensions,lib}
La Web App (guacamole client) est la partie cliente qui nécessite un serveur Apache Tomcat 9. Cependant les dépôts de Debin 12 installent Tomcat 10. Il faut installer le dépôt de Debian 11 sur le serveur Debian 12 afin de pouvoir télécharger les paquets correspondants à Tomcat 9.
sudo nano /etc/apt/sources.list.d/bullseye.list
deb http://deb.debian.org/debian/ bullseye main
sudo apt update
sudo apt install -y tomcat9 tomcat9-admin tomcat9-common tomcat9-user
wget https://dlcdn.apache.org/guacamole/1.6.0/binary/guacamole-1.6.0.war
sudo mv guacamole-1.6.0.war /var/lib/tomcat9/webapps/guacamole.war
sudo systemctl restart tomcat9 guacd
systemctl enable tomcat9 systemctl enable guacd
Utilisation d'une base de données pour stocker toutes les informations de l'application.
sudo apt install -y mariadb-server
sudo mysql_secure_installation
mysql -u root -p >CREATE DATABASE guacamole_db; >CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'P@$$w0rd2025Secure'; >GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost'; >FLUSH PRIVILEGES; >EXIT;
wget https://dlcdn.apache.org/guacamole/1.6.0/binary/guacamole-auth-jdbc-1.6.0.tar.gz tar -xzf guacamole-auth-jdbc-1.6.0.tar.gz sudo mv guacamole-auth-jdbc-1.6.0/mysql/guacamole-auth-jdbc-mysql-1.6.0.jar /etc/guacamole/extensions/
wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-9.5.0.tar.gz
* Décompression de l'archive Puis, puis déplacement du fichier .jar du connecteur vers le répertoire **lib** d'Apache Guacamole :
tar -xzf mysql-connector-j-9.5.0.tar.gz sudo cp mysql-connector-j-9.5.0/mysql-connector-j-9.5.0.jar /etc/guacamole/lib/
cd guacamole-auth-jdbc-1.6.0/mysql/schema/ cat *.sql | mysql -u root -p guacamole_db
sudo nano /etc/guacamole/guacamole.properties
# MySQL mysql-hostname: 127.0.0.1 mysql-port: 3306 mysql-database: guacamole_db mysql-username: guacamole_user mysql-password: P@$$w0rd2025Secure
sudo nano /etc/guacamole/guacd.conf
[server] bind_host = 0.0.0.0 bind_port = 4822
sudo systemctl restart tomcat9 guacd mariadb
Le compte utilisateur daemon utilisé par défaut pour exécuter le service guacd n'a pas les permissions suffisantes sur les données d'Apache Guacamole. Cela empêche les connexions.
Vérification :
sudo ps aux | grep -v grep| grep guacd daemon 33197 0.0 0.6 247992 13896 ? Ss 15:29 0:00 /usr/local/sbin/guacd -f
sudo useradd -M -d /var/lib/guacd_user/ -r -s /sbin/nologin -c "Guacd User" guacd_user sudo mkdir /var/lib/guacd_user sudo chown -R guacd_user: /var/lib/guacd_user sudo sed -i 's/daemon/guacd_user/' /etc/systemd/system/guacd.service sudo systemctl daemon-reload sudo systemctl restart guacd
sudo systemctl status guacd