FROM debian:12.10-slim AS freerdp-build ENV DEBIAN_FRONTEND=noninteractive RUN printf '%s\n' \ 'Types: deb-src' \ 'URIs: http://deb.debian.org/debian' \ 'Suites: bookworm bookworm-updates' \ 'Components: main' \ 'Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg' \ '' \ 'Types: deb-src' \ 'URIs: http://deb.debian.org/debian-security' \ 'Suites: bookworm-security' \ 'Components: main' \ 'Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg' \ >/etc/apt/sources.list.d/debian-src.sources RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ binutils \ ca-certificates \ cmake \ dpkg-dev \ git \ ninja-build \ pkg-config \ && apt-get build-dep -y freerdp2 \ && git clone --depth 1 --branch 2.11.7 https://github.com/FreeRDP/FreeRDP.git /tmp/freerdp-src \ && sed -i 's/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE/' /tmp/freerdp-src/channels/cliprdr/client/CMakeLists.txt \ && sed -i 's/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE/' /tmp/freerdp-src/channels/drdynvc/client/CMakeLists.txt \ && sed -i 's/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE/' /tmp/freerdp-src/channels/rdpdr/client/CMakeLists.txt \ && sed -i 's/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE/add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE/' /tmp/freerdp-src/channels/rdpsnd/client/CMakeLists.txt \ && sed -i 's/#define VirtualChannelEntryEx cliprdr_VirtualChannelEntryEx/#define VirtualChannelEntryEx FREERDP_API VirtualChannelEntryEx/' /tmp/freerdp-src/channels/cliprdr/client/cliprdr_main.c \ && sed -i 's/#define VirtualChannelEntryEx drdynvc_VirtualChannelEntryEx/#define VirtualChannelEntryEx FREERDP_API VirtualChannelEntryEx/' /tmp/freerdp-src/channels/drdynvc/client/drdynvc_main.c \ && sed -i 's/#define VirtualChannelEntryEx rdpdr_VirtualChannelEntryEx/#define VirtualChannelEntryEx FREERDP_API VirtualChannelEntryEx/' /tmp/freerdp-src/channels/rdpdr/client/rdpdr_main.c \ && sed -i 's/BOOL VCAPITYPE rdpsnd_VirtualChannelEntryEx/BOOL VCAPITYPE FREERDP_API VirtualChannelEntryEx/' /tmp/freerdp-src/channels/rdpsnd/client/rdpsnd_main.c \ && cmake -S /tmp/freerdp-src -B /tmp/freerdp-build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/opt/freerdp \ -DCMAKE_INSTALL_LIBDIR=lib \ -DWITH_CHANNELS=ON \ -DBUILTIN_CHANNELS=OFF \ -DWITH_CLIENT=ON \ -DWITH_CLIENT_COMMON=ON \ -DWITH_SERVER=OFF \ -DWITH_SHADOW=OFF \ -DWITH_X11=OFF \ -DWITH_WAYLAND=OFF \ && cmake --build /tmp/freerdp-build \ && cmake --install /tmp/freerdp-build \ && test -f /opt/freerdp/lib/freerdp2/libcliprdr-client.so \ && test -f /opt/freerdp/lib/freerdp2/libdrdynvc-client.so \ && test -f /opt/freerdp/lib/freerdp2/librdpgfx-client.so \ && test -f /opt/freerdp/lib/freerdp2/librdpdr-client.so \ && test -f /opt/freerdp/lib/freerdp2/librdpsnd-client.so \ && readelf --dyn-syms /opt/freerdp/lib/freerdp2/libcliprdr-client.so | grep VirtualChannelEntryEx \ && readelf --dyn-syms /opt/freerdp/lib/freerdp2/libdrdynvc-client.so | grep VirtualChannelEntryEx \ && readelf --dyn-syms /opt/freerdp/lib/freerdp2/librdpdr-client.so | grep VirtualChannelEntryEx \ && readelf --dyn-syms /opt/freerdp/lib/freerdp2/librdpsnd-client.so | grep VirtualChannelEntryEx \ && rm -rf /var/lib/apt/lists/* /tmp/freerdp-src /tmp/freerdp-build FROM debian:12.10-slim AS build ENV DEBIAN_FRONTEND=noninteractive ENV PKG_CONFIG_PATH=/opt/freerdp/lib/pkgconfig ENV LD_LIBRARY_PATH=/opt/freerdp/lib RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ cmake \ ninja-build \ pkg-config \ freerdp2-x11 \ freerdp2-dev \ libboost-dev \ libssl-dev \ libwinpr2-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /opt/rap-rdp-worker COPY --from=freerdp-build /opt/freerdp /opt/freerdp COPY . . RUN cmake --preset dev \ && cmake --build --preset dev \ && cmake --install build FROM debian:12.10-slim ENV DEBIAN_FRONTEND=noninteractive ENV FREERDP_PLUGIN_PATH=/opt/freerdp/lib/freerdp2 ENV LD_LIBRARY_PATH=/opt/freerdp/lib RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ freerdp2-x11 \ freerdp2-dev \ libssl3 \ libwinpr2-dev \ && rm -rf /var/lib/apt/lists/* COPY --from=freerdp-build /opt/freerdp /opt/freerdp COPY --from=build /usr/local/bin/rdp-worker /usr/local/bin/rdp-worker COPY --from=build /usr/local/bin/rdp-worker-dataplane-token-probe /usr/local/bin/rdp-worker-dataplane-token-probe COPY --from=build /usr/local/bin/rdp-worker-dataplane-bind-probe /usr/local/bin/rdp-worker-dataplane-bind-probe COPY --from=build /usr/local/bin/rdp-worker-graphics-adapter-probe /usr/local/bin/rdp-worker-graphics-adapter-probe COPY --from=build /usr/local/bin/rdp-worker-cursor-adapter-probe /usr/local/bin/rdp-worker-cursor-adapter-probe COPY --from=build /usr/local/bin/rdp-worker-service-adapter-protocol-probe /usr/local/bin/rdp-worker-service-adapter-protocol-probe CMD ["/usr/local/bin/rdp-worker"]