From 218f8d36b17320dd7c3d2e022493edcf75678a6a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 22 Dec 2020 20:53:06 -0800 Subject: [PATCH 1/2] GUACAMOLE-1241: Disable build against FreeRDP development snapshots unless *explicitly* overridden. --- configure.ac | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index e23003ff..88186211 100644 --- a/configure.ac +++ b/configure.ac @@ -627,7 +627,13 @@ fi # between releases, as the change in behavior may not (yet) be associated with # a corresponding change in version number and may not have any detectable # effect on the FreeRDP API -if test "x${have_freerdp2}" = "xyes" + +AC_ARG_ENABLE(allow_freerdp_snapshots, + [AS_HELP_STRING([--enable-allow-freerdp-snapshots], + [allow building against unknown development snapshots of FreeRDP]) + ],allow_freerdp_snapshots=yes) + +if test "x${have_freerdp2}" = "xyes" -a "x${allow_freerdp_snapshots}" != "xyes" then AC_MSG_CHECKING([whether FreeRDP appears to be a development version]) @@ -639,7 +645,7 @@ then ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([yes])] - [AC_MSG_WARN([ + [AC_MSG_ERROR([ -------------------------------------------- You are building against a development version of FreeRDP. Non-release versions of FreeRDP may have differences in behavior that are impossible to @@ -647,6 +653,9 @@ then behavior. *** PLEASE USE A RELEASED VERSION OF FREERDP IF POSSIBLE *** + + If you are ABSOLUTELY CERTAIN that building against this version of FreeRDP + is OK, rerun configure with the --enable-allow-freerdp-snapshots --------------------------------------------])]) fi From 9475c0b6facf2630d3302e94f3d756f48b00d12c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 24 Dec 2020 11:57:13 -0800 Subject: [PATCH 2/2] GUACAMOLE-1241: Build against Debian repository that has non-snapshot version of FreeRDP. Debian stable currently provides a FreeRDP package that is a snapshot of commit 2693389a103394e035edc2a01055ca2c9ccccb21, whereas stable-backports provides a FreeRDP package from release 2.2.0. Only a release or release candidate can be relied upon for consistent behavior. --- Dockerfile | 71 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index c911aae1..14f67695 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,13 +21,30 @@ # Dockerfile for guacamole-server # +# The Debian image that should be used as the basis for the guacd image +ARG DEBIAN_BASE_IMAGE=buster-slim # Use Debian as base for the build -ARG DEBIAN_VERSION=stable -FROM debian:${DEBIAN_VERSION} AS builder +FROM debian:${DEBIAN_BASE_IMAGE} AS builder +# +# The Debian repository that should be preferred for dependencies (this will be +# added to /etc/apt/sources.list if not already present) +# +# 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 DEBIAN_RELEASE=buster-backports + +# Add repository for specified Debian release if not already present in +# sources.list +RUN grep " ${DEBIAN_RELEASE} " /etc/apt/sources.list || echo >> /etc/apt/sources.list \ + "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} main contrib non-free" + +# # Base directory for installed build artifacts. -# Due to limitations of the Docker image build process, this value is +# +# 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=/usr/local/guacamole @@ -53,9 +70,12 @@ ARG BUILD_DEPENDENCIES=" \ libwebp-dev \ make" +# Do not require interaction during build +ARG DEBIAN_FRONTEND=noninteractive + # Bring build environment up to date and install build dependencies -RUN apt-get update && \ - apt-get install -y $BUILD_DEPENDENCIES && \ +RUN apt-get update && \ + apt-get install -t ${DEBIAN_RELEASE} -y $BUILD_DEPENDENCIES && \ rm -rf /var/lib/apt/lists/* # Add configuration scripts @@ -68,20 +88,36 @@ COPY . "$BUILD_DIR" RUN ${PREFIX_DIR}/bin/build-guacd.sh "$BUILD_DIR" "$PREFIX_DIR" # Record the packages of all runtime library dependencies -RUN ${PREFIX_DIR}/bin/list-dependencies.sh \ - ${PREFIX_DIR}/sbin/guacd \ - ${PREFIX_DIR}/lib/libguac-client-*.so \ - ${PREFIX_DIR}/lib/freerdp2/guac*.so \ +RUN ${PREFIX_DIR}/bin/list-dependencies.sh \ + ${PREFIX_DIR}/sbin/guacd \ + ${PREFIX_DIR}/lib/libguac-client-*.so \ + ${PREFIX_DIR}/lib/freerdp2/*guac*.so \ > ${PREFIX_DIR}/DEPENDENCIES # Use same Debian as the base for the runtime image -FROM debian:${DEBIAN_VERSION}-slim +FROM debian:${DEBIAN_BASE_IMAGE} -# Base directory for installed build artifacts. -# Due to limitations of the Docker image build process, this value is -# duplicated in an ARG in the first stage of the build. See also the +# +# The Debian repository that should be preferred for dependencies (this will be +# added to /etc/apt/sources.list if not already present) +# +# 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 DEBIAN_RELEASE=buster-backports + +# Add repository for specified Debian release if not already present in +# sources.list +RUN grep " ${DEBIAN_RELEASE} " /etc/apt/sources.list || echo >> /etc/apt/sources.list \ + "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} main contrib non-free" + +# +# 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=/usr/local/guacamole # Runtime environment @@ -97,13 +133,16 @@ ARG RUNTIME_DEPENDENCIES=" \ fonts-dejavu \ xfonts-terminus" +# Do not require interaction during build +ARG DEBIAN_FRONTEND=noninteractive + # Copy build artifacts into this stage COPY --from=builder ${PREFIX_DIR} ${PREFIX_DIR} # Bring runtime environment up to date and install runtime dependencies -RUN apt-get update && \ - apt-get install -y --no-install-recommends $RUNTIME_DEPENDENCIES && \ - apt-get install -y --no-install-recommends $(cat "${PREFIX_DIR}"/DEPENDENCIES) && \ +RUN apt-get update && \ + apt-get install -t ${DEBIAN_RELEASE} -y --no-install-recommends $RUNTIME_DEPENDENCIES && \ + apt-get install -t ${DEBIAN_RELEASE} -y --no-install-recommends $(cat "${PREFIX_DIR}"/DEPENDENCIES) && \ rm -rf /var/lib/apt/lists/* # Link FreeRDP plugins into proper path