#
# 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
#


# Use CentOS as base for the build
ARG CENTOS_VERSION=centos7
FROM centos:${CENTOS_VERSION} AS builder

# Base directory for installed build artifacts.
# 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

# Build arguments
ARG BUILD_DIR=/tmp/guacd-docker-BUILD
ARG BUILD_DEPENDENCIES="              \
        autoconf                      \
        automake                      \
        cairo-devel                   \
        freerdp-devel                 \
        gcc                           \
        libjpeg-turbo-devel           \
        libssh2-devel                 \
        libtool                       \
        libtelnet-devel               \
        libvorbis-devel               \
        libvncserver-devel            \
        libwebp-devel                 \
        make                          \
        pango-devel                   \
        pulseaudio-libs-devel         \
        uuid-devel"

# Build time environment
ENV LC_ALL=en_US.UTF-8

# Bring build environment up to date and install build dependencies
RUN yum -y update                        && \
    yum -y install epel-release          && \
    yum -y install $BUILD_DEPENDENCIES   && \
    yum clean all

# Add configuration scripts
COPY src/guacd-docker/bin /opt/guacd/bin/

# Copy source to container for sake of build
COPY . "$BUILD_DIR"

# Build guacamole-server from local source
RUN /opt/guacd/bin/build-guacd.sh "$BUILD_DIR" "$PREFIX_DIR"

# Use same CentOS as the base for the runtime image
FROM centos:${CENTOS_VERSION}

# 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
# CMD directive at the end of this build stage.
#
ARG PREFIX_DIR=/usr/local/guacamole

# Runtime environment
ENV LC_ALL=en_US.UTF-8

ARG RUNTIME_DEPENDENCIES="            \
        cairo                         \
        dejavu-sans-mono-fonts        \
        freerdp                       \
        freerdp-plugins               \
        ghostscript                   \
        libjpeg-turbo                 \
        libssh2                       \
        liberation-mono-fonts         \
        libtelnet                     \
        libvorbis                     \
        libvncserver                  \
        libwebp                       \
        pango                         \
        pulseaudio-libs               \
        terminus-fonts                \
        uuid"

# Bring runtime environment up to date and install runtime dependencies
RUN yum -y update                          && \
    yum -y install epel-release            && \
    yum -y install $RUNTIME_DEPENDENCIES   && \
    yum clean all                          && \
    rm -rf /var/cache/yum

# Copy build artifacts into this stage
COPY --from=builder ${PREFIX_DIR} ${PREFIX_DIR}

# Link FreeRDP plugins into proper path
RUN FREERDP_DIR=$(dirname \
        $(rpm -ql freerdp-libs | grep 'libfreerdp.*\.so' | head -n1)) && \
    FREERDP_PLUGIN_DIR="${FREERDP_DIR}/freerdp" && \
    mkdir -p "$FREERDP_PLUGIN_DIR" && \
    ln -s "$PREFIX_DIR"/lib/freerdp/*.so "$FREERDP_PLUGIN_DIR"

# 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 [ "/usr/local/guacamole/sbin/guacd", "-b", "0.0.0.0", "-f" ]

