Files
rdp-proxy/workers/rdp-worker/Dockerfile
T
2026-04-28 22:29:50 +03:00

118 lines
5.6 KiB
Docker

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