Regarding *GUACAMOLE-1026: Add support for FreeRDP3. **#517*


After compiling the code with freerdp3, making a docker image out of it and
testing it out I am receiving the following error:

*guacd[94]: WARNING: Support for protocol "rdp" is not installed.*

[image: image]
<https://private-user-images.githubusercontent.com/22887638/427649271-30697823-2666-4b41-ade8-1739e0b176c9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDMwOTI4NzAsIm5iZiI6MTc0MzA5MjU3MCwicGF0aCI6Ii8yMjg4NzYzOC80Mjc2NDkyNzEtMzA2OTc4MjMtMjY2Ni00YjQxLWFkZTgtMTczOWUwYjE3NmM5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAzMjclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMzI3VDE2MjI1MFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUyZmIyOTg5ZTY5NGRjYjMwZDFkYmQ4NWVhMWViNGNmZTlmMjQzNDY2NGY1ODlhYWUzNzkzZWU1NWE0NDRhODcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.SxmS2OGUDre6aW0sAPI3SwuvyLGA4Ge3qpP1oUfa1uQ>

I am trying to get this to work because we need to disable NTLM in our
active directory. Starting FreeRDP v3, there are other protocols supported
rather than NTLM.

I was also receiving various errors with the current Dockerfile. This is my
current custom working Dockerfile:

#

# Licensed to the Apache Software Foundation (ASF) under one

# or more contributor license agreements.  See the NOTICE file

# distributed with this work for additional information

# regarding copyright ownership.  The ASF licenses this file

# to you under the Apache License, Version 2.0 (the

# "License"); you may not use this file except in compliance

# with the License.  You may obtain a copy of the License at

#

#   http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing,

# software distributed under the License is distributed on an

# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

# KIND, either express or implied.  See the License for the

# specific language governing permissions and limitations

# under the License.

#



#

# Dockerfile for guacamole-server

#



# The Alpine Linux image that should be used as the basis for the guacd
image

# NOTE: Using 3.18 because the required openssl1.1-compat-dev package was

# removed in more recent versions.

ARG ALPINE_BASE_IMAGE=3.18

FROM alpine:${ALPINE_BASE_IMAGE} AS builder



# FreeRDP version (default to version 3)

ARG FREERDP_VERSION=3



# Install build dependencies

RUN apk add --no-cache                \

        autoconf                      \

        automake                      \

        build-base                    \

        cairo-dev                     \

        cjson-dev                     \

        cmake                         \

        cunit-dev                     \

        git                           \

        grep                          \

        krb5-dev                      \

        libjpeg-turbo-dev             \

        libpng-dev                    \

        libtool                       \

        libwebp-dev                   \

        make                          \

        openssl1.1-compat-dev         \

        pango-dev                     \

        pulseaudio-dev                \

        sdl2-dev                      \

        sdl2_ttf-dev                  \

        util-linux-dev                \

        webkit2gtk-dev                \

                nasm                                         \

                cups-dev                                  \

                fuse3-dev                                \

                libusb-dev                               \

                ffmpeg-dev



# Copy source to container for sake of build

ARG BUILD_DIR=/tmp/guacamole-server

COPY . ${BUILD_DIR}



#

# Base directory for installed build artifacts.

#

# NOTE: Due to limitations of the Docker image build process, this value is

# duplicated in an ARG in the second stage of the build.

#

ARG PREFIX_DIR=/opt/guacamole



#

# Automatically select the latest versions of each core protocol support

# library (these can be overridden at build time if a specific version is

# needed)

#

ARG WITH_FREERDP="${FREERDP_VERSION}(\.\d+)+"

ARG WITH_LIBSSH2='libssh2-\d+(\.\d+)+'

ARG WITH_LIBTELNET='\d+(\.\d+)+'

ARG WITH_LIBVNCCLIENT='LibVNCServer-\d+(\.\d+)+'

ARG WITH_LIBWEBSOCKETS='v\d+(\.\d+)+'



#

# Default build options for each core protocol support library, as well as

# guacamole-server itself (these can be overridden at build time if
different

# options are needed)

#



ARG FREERDP_OPTS="\

    -DBUILTIN_CHANNELS=OFF \

    -DCHANNEL_URBDRC=OFF \

    -DWITH_ALSA=OFF \

    -DWITH_CAIRO=ON \

    -DWITH_CHANNELS=ON \

    -DWITH_CLIENT=ON \

    -DWITH_CUPS=OFF \

    -DWITH_DIRECTFB=OFF \

    -DWITH_FFMPEG=OFF \

    -DWITH_FUSE=OFF \

    -DWITH_GSM=OFF \

    -DWITH_GSSAPI=OFF \

    -DWITH_IPP=OFF \

    -DWITH_JPEG=ON \

    -DWITH_KRB5=ON \

    -DWITH_LIBSYSTEMD=OFF \

    -DWITH_MANPAGES=OFF \

    -DWITH_OPENH264=OFF \

    -DWITH_OPENSSL=ON \

    -DWITH_OSS=OFF \

    -DWITH_PCSC=OFF \

    -DWITH_PKCS11=OFF \

    -DWITH_PULSE=OFF \

    -DWITH_SERVER=OFF \

    -DWITH_SERVER_INTERFACE=OFF \

    -DWITH_SHADOW_MAC=OFF \

    -DWITH_SHADOW_X11=OFF \

    -DWITH_SSE2=ON \

    -DWITH_SWSCALE=OFF \

    -DWITH_WAYLAND=OFF \

    -DWITH_X11=OFF \

    -DWITH_X264=OFF \

    -DWITH_XCURSOR=ON \

    -DWITH_XEXT=ON \

    -DWITH_XI=OFF \

    -DWITH_XINERAMA=OFF \

    -DWITH_XKBFILE=ON \

    -DWITH_XRENDER=OFF \

    -DWITH_XTEST=OFF \

    -DWITH_XV=OFF \

    -DWITH_ZLIB=ON"



ARG GUACAMOLE_SERVER_OPTS="\

    --disable-guaclog"



ARG LIBSSH2_OPTS="\

    -DBUILD_EXAMPLES=OFF \

    -DBUILD_SHARED_LIBS=ON"



ARG LIBTELNET_OPTS="\

    --disable-static \

    --disable-util"



ARG LIBVNCCLIENT_OPTS=""



ARG LIBWEBSOCKETS_OPTS="\

    -DDISABLE_WERROR=ON \

    -DLWS_WITHOUT_SERVER=ON \

    -DLWS_WITHOUT_TESTAPPS=ON \

    -DLWS_WITHOUT_TEST_CLIENT=ON \

    -DLWS_WITHOUT_TEST_PING=ON \

    -DLWS_WITHOUT_TEST_SERVER=ON \

    -DLWS_WITHOUT_TEST_SERVER_EXTPOLL=ON \

    -DLWS_WITH_STATIC=OFF"



# Build guacamole-server and its core protocol library dependencies

# Build FreeRDP

RUN git clone https://github.com/FreeRDP/FreeRDP.git /tmp/FreeRDP

WORKDIR /tmp/FreeRDP

RUN git checkout 3.8.0

RUN mkdir /tmp/FreeRDP/build

WORKDIR /tmp/FreeRDP/build

RUN cmake ..

RUN cmake --build .

RUN cmake --install .



RUN ${BUILD_DIR}/src/guacd-docker/bin/build-all.sh #I ve commented out the
FreeRDP installation because of errors.



# Determine location of the FREERDP library based on the version.

ARG FREERDP_LIB_PATH=${PREFIX_DIR}/lib/freerdp${FREERDP_VERSION}



# Record the packages of all runtime library dependencies

RUN ${BUILD_DIR}/src/guacd-docker/bin/list-dependencies.sh \

        ${PREFIX_DIR}/sbin/guacd               \

        ${PREFIX_DIR}/lib/libguac-client-*.so  \

        ${FREERDP_LIB_PATH}/*guac*.so   \

        > ${PREFIX_DIR}/DEPENDENCIES



# Use same Alpine version as the base for the runtime image

FROM alpine:${ALPINE_BASE_IMAGE}



#

# Base directory for installed build artifacts. See also the

# CMD directive at the end of this build stage.

#

# NOTE: Due to limitations of the Docker image build process, this value is

# duplicated in an ARG in the first stage of the build.

#

ARG PREFIX_DIR=/opt/guacamole



# Runtime environment

ENV LC_ALL=C.UTF-8

ENV LD_LIBRARY_PATH=${PREFIX_DIR}/lib

ENV GUACD_LOG_LEVEL=info



# Copy build artifacts into this stage

COPY --from=builder ${PREFIX_DIR} ${PREFIX_DIR}



# Bring runtime environment up to date and install runtime dependencies

RUN apk add --no-cache                \

        ca-certificates               \

        font-noto-cjk                 \

        ghostscript                   \

        netcat-openbsd                \

        shadow                        \

        terminus-font                 \

        ttf-dejavu                    \

        ttf-liberation                \

        util-linux-login && \

    xargs apk add --no-cache < ${PREFIX_DIR}/DEPENDENCIES



# Checks the operating status every 5 minutes with a timeout of 5 seconds

HEALTHCHECK --interval=5m --timeout=5s CMD nc -z 127.0.0.1 4822 || exit 1



# Create a new user guacd

ARG UID=1000

ARG GID=1000

RUN groupadd --gid $GID guacd

RUN useradd --system --create-home --shell /sbin/nologin --uid $UID --gid
$GID guacd



# Run with user guacd

USER guacd



# Expose the default listener port

EXPOSE 4822



# Start guacd, listening on port 0.0.0.0:4822

#

# Note the path here MUST correspond to the value specified in the

# PREFIX_DIR build argument.

#

CMD /opt/guacamole/sbin/guacd -b 0.0.0.0 -L $GUACD_LOG_LEVEL -f

Reply via email to