[Fixed] Guacamole Server module - Issue with linker

Hello,

I’m trying to get Guacamole Server working as a NixOS module. The work is being done in an external flake, but the idea is to backport this in nixpkgs as soon as it’s completely done.

Find the current work in progress branch at: https://github.com/drupol/guacamole-nixos/blob/switch-to-flake-parts/overlay.nix#L4

We currently have a runtime issue (WARNING: Support for protocol "rdp" is not installed) with the Guacamole server preventing us from moving forward. As I couldn’t find the reason by myself, I’ve sent a message to the mailing list, you can find the message here: https://lists.apache.org/thread/dzvf4jvhd2vhtd19n1rp7n48rcbxtbsn

In the reply, I’m told to run ldconfig but I know that in NixOS, there is no ld cache, so things needs to be done in a different way.

When I run the guacd daemon with LD_DEBUG=libs (complete log here), I get:

guacd[606271]: INFO:    Creating new client for protocol "rdp"
guacd[606271]: INFO:    Connection ID is "$1832a1ef-63ac-4f07-944b-cbce3f7b310b"
    606273:     find library=libguac-client-rdp.so [0]; searching
    606273:      search path=/nix/store/vl3a3sc6yx3jvlqhgb7mg8s0nj3l3qgp-cairo-1.16.0/lib:/nix/store/9df67sa27z2bmmi51jkwhdgf5crjm4pp-libjpeg-turbo-2.1.5.1/lib:/nix/store/hm7qi1y054xh74hbdls0nimnrdkmsbx3-libpng-apng-1.6.39/lib:/nix/store/8dxriyfzj2nycr6wlmk5zs0xpczbz7an-openssl-3.0.8/lib:/nix/store/ljknlg2320vva6mk1j63jrz8qvdsslgx-libossp-uuid-1.6.2/lib:/nix/store/mrc9q37wmsp5bcf675a4af9bsdqcshpq-libogg-1.3.5/lib:/nix/store/my5jn6b9bvd10fjd08n1zqrzz8iycr9b-libvorbis-1.3.7/lib:/nix/store/qaghh6kiw1w9rfgj54f4zy3w9j2byxc3-libwebp-1.3.0/lib            (RUNPATH from file /nix/store/hc8qkkvdvjm464221yqcj1m045x09fvk-guacamole-1.5.2/bin/guacd)
    606273:       trying file=/nix/store/vl3a3sc6yx3jvlqhgb7mg8s0nj3l3qgp-cairo-1.16.0/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/9df67sa27z2bmmi51jkwhdgf5crjm4pp-libjpeg-turbo-2.1.5.1/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/hm7qi1y054xh74hbdls0nimnrdkmsbx3-libpng-apng-1.6.39/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/8dxriyfzj2nycr6wlmk5zs0xpczbz7an-openssl-3.0.8/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/ljknlg2320vva6mk1j63jrz8qvdsslgx-libossp-uuid-1.6.2/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/mrc9q37wmsp5bcf675a4af9bsdqcshpq-libogg-1.3.5/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/my5jn6b9bvd10fjd08n1zqrzz8iycr9b-libvorbis-1.3.7/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/qaghh6kiw1w9rfgj54f4zy3w9j2byxc3-libwebp-1.3.0/lib/libguac-client-rdp.so
    606273:      search cache=/nix/store/x33pcmpsiimxhip52mwxbb5y77dhmb21-glibc-2.37-8/etc/ld.so.cache
    606273:      search path=/nix/store/x33pcmpsiimxhip52mwxbb5y77dhmb21-glibc-2.37-8/lib:/nix/store/05cd846a6pbhdijq28ga5piyk6d5mzvb-xgcc-12.2.0-libgcc/lib/glibc-hwcaps/x86-64-v3:/nix/store/05cd846a6pbhdijq28ga5piyk6d5mzvb-xgcc-12.2.0-libgcc/lib/glibc-hwcaps/x86-64-v2:/nix/store/05cd846a6pbhdijq28ga5piyk6d5mzvb-xgcc-12.2.0-libgcc/lib             (system search path)
    606273:       trying file=/nix/store/x33pcmpsiimxhip52mwxbb5y77dhmb21-glibc-2.37-8/lib/libguac-client-rdp.so
    606273:       trying file=/nix/store/05cd846a6pbhdijq28ga5piyk6d5mzvb-xgcc-12.2.0-libgcc/lib/glibc-hwcaps/x86-64-v3/libguac-client-rdp.so
    606273:       trying file=/nix/store/05cd846a6pbhdijq28ga5piyk6d5mzvb-xgcc-12.2.0-libgcc/lib/glibc-hwcaps/x86-64-v2/libguac-client-rdp.so
    606273:       trying file=/nix/store/05cd846a6pbhdijq28ga5piyk6d5mzvb-xgcc-12.2.0-libgcc/lib/libguac-client-rdp.so
    606273:
guacd[606273]: WARNING: Support for protocol "rdp" is not installed
    606273:
    606273:     calling fini:  [0]

We can notice that libguac-client-rdp.so is being searched and the first directory being tried is: /nix/store/vl3a3sc6yx3jvlqhgb7mg8s0nj3l3qgp-cairo-1.16.0/lib/

However, when I do:

nix build github:drupol/guacamole-nixos/switch-to-flake-parts#guacamole-server

And then:

patchelf --print-rpath result/bin/guacd

I get:

/nix/store/hc8qkkvdvjm464221yqcj1m045x09fvk-guacamole-1.5.2/lib:/nix/store/vl3a3sc6yx3jvlqhgb7mg8s0nj3l3qgp-cairo-1.16.0/lib:/nix/store/9df67sa27z2bmmi51jkwhdgf5crjm4pp-libjpeg-turbo-2.1.5.1/lib:/nix/store/hm7qi1y054xh74hbdls0nimnrdkmsbx3-libpng-apng-1.6.39/lib:/nix/store/8dxriyfzj2nycr6wlmk5zs0xpczbz7an-openssl-3.0.8/lib:/nix/store/ljknlg2320vva6mk1j63jrz8qvdsslgx-libossp-uuid-1.6.2/lib:/nix/store/mrc9q37wmsp5bcf675a4af9bsdqcshpq-libogg-1.3.5/lib:/nix/store/my5jn6b9bvd10fjd08n1zqrzz8iycr9b-libvorbis-1.3.7/lib:/nix/store/qaghh6kiw1w9rfgj54f4zy3w9j2byxc3-libwebp-1.3.0/lib

At this point, I’m running out of ideas… I simply don’t know what to do to unblock the situation.

Do you have any clue that might help?

2 Likes

Issue has been solved. Please ignore this post now.

Find a working flake for Guacamole at GitHub - jbuchermn/guacamole-nixos: Nix flake for Apache guacamole

1 Like