diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4496a8d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,11 @@ +services: + - docker + +before_install: + - git clone https://github.com/oznu/docker-arm-ci.git ~/docker-arm-ci + +before_script: + - export TARGET_IMAGE_TAG=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then if [ "$TRAVIS_BRANCH" = "master" ]; then echo "armhf"; else echo "$TRAVIS_BRANCH-armhf"; fi; else echo ""; fi) + +script: + - ~/docker-arm-ci/run.sh diff --git a/Dockerfile b/Dockerfile index 7b06d6c..b8d674c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,19 @@ -FROM tomcat:7-jre8 +FROM library/tomcat:7-jre8 -ENV GUAC_VER=0.9.13-incubating \ - GUACAMOLE_HOME=/app/guacamole - -ENV PG_MAJOR=9.6 \ +ENV ARCH=amd64 \ + GUAC_VER=0.9.13-incubating \ + GUACAMOLE_HOME=/app/guacamole \ + PG_MAJOR=9.6 \ PGDATA=/config/postgres \ POSTGRES_USER=guacamole \ POSTGRES_DB=guacamole_db # Apply the s6-overlay -RUN curl -SLO "https://github.com/just-containers/s6-overlay/releases/download/v1.20.0.0/s6-overlay-amd64.tar.gz" \ - && tar -xzf s6-overlay-amd64.tar.gz -C / \ - && tar -xzf s6-overlay-amd64.tar.gz -C /usr ./bin \ - && rm -rf s6-overlay-amd64.tar.gz \ +RUN curl -SLO "https://github.com/just-containers/s6-overlay/releases/download/v1.20.0.0/s6-overlay-${ARCH}.tar.gz" \ + && tar -xzf s6-overlay-${ARCH}.tar.gz -C / \ + && tar -xzf s6-overlay-${ARCH}.tar.gz -C /usr ./bin \ + && rm -rf s6-overlay-${ARCH}.tar.gz \ && mkdir -p ${GUACAMOLE_HOME} \ ${GUACAMOLE_HOME}/lib \ ${GUACAMOLE_HOME}/extensions @@ -31,14 +31,15 @@ RUN apt-get update && apt-get install -y \ && rm -rf /var/lib/apt/lists/* # Link FreeRDP to where guac expects it to be -RUN ln -s /usr/local/lib/freerdp /usr/lib/x86_64-linux-gnu/freerdp +RUN [ "$ARCH" = "armhf" ] && ln -s /usr/local/lib/freerdp /usr/lib/arm-linux-gnueabihf/freerdp || exit 0 +RUN [ "$ARCH" = "amd64" ] && ln -s /usr/local/lib/freerdp /usr/lib/x86_64-linux-gnu/freerdp || exit 0 # Install guacamole-server RUN curl -SLO "https://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-${GUAC_VER}.tar.gz" \ && tar -xzf guacamole-server-${GUAC_VER}.tar.gz \ && cd guacamole-server-${GUAC_VER} \ && ./configure \ - && make \ + && make -j$(getconf _NPROCESSORS_ONLN) \ && make install \ && cd .. \ && rm -rf guacamole-server-${GUAC_VER}.tar.gz guacamole-server-${GUAC_VER} \ diff --git a/Dockerfile.raspberrypi2 b/Dockerfile.raspberrypi2 new file mode 100644 index 0000000..22aaf76 --- /dev/null +++ b/Dockerfile.raspberrypi2 @@ -0,0 +1,75 @@ +FROM arm32v7/tomcat:7-jre8 + +ENV ARCH=armhf \ + GUAC_VER=0.9.13-incubating \ + GUACAMOLE_HOME=/app/guacamole \ + PG_MAJOR=9.6 \ + PGDATA=/config/postgres \ + POSTGRES_USER=guacamole \ + POSTGRES_DB=guacamole_db + +# Apply the s6-overlay + +RUN curl -SLO "https://github.com/just-containers/s6-overlay/releases/download/v1.20.0.0/s6-overlay-${ARCH}.tar.gz" \ + && tar -xzf s6-overlay-${ARCH}.tar.gz -C / \ + && tar -xzf s6-overlay-${ARCH}.tar.gz -C /usr ./bin \ + && rm -rf s6-overlay-${ARCH}.tar.gz \ + && mkdir -p ${GUACAMOLE_HOME} \ + ${GUACAMOLE_HOME}/lib \ + ${GUACAMOLE_HOME}/extensions + +WORKDIR ${GUACAMOLE_HOME} + +# Install dependencies +RUN apt-get update && apt-get install -y \ + libcairo2-dev libjpeg62-turbo-dev libpng-dev \ + libossp-uuid-dev libavcodec-dev libavutil-dev \ + libswscale-dev libfreerdp-dev libpango1.0-dev \ + libssh2-1-dev libtelnet-dev libvncserver-dev \ + libpulse-dev libssl-dev libvorbis-dev libwebp-dev \ + ghostscript postgresql-${PG_MAJOR} \ + && rm -rf /var/lib/apt/lists/* + +# Link FreeRDP to where guac expects it to be +RUN [ "$ARCH" = "armhf" ] && ln -s /usr/local/lib/freerdp /usr/lib/arm-linux-gnueabihf/freerdp || exit 0 +RUN [ "$ARCH" = "amd64" ] && ln -s /usr/local/lib/freerdp /usr/lib/x86_64-linux-gnu/freerdp || exit 0 + +# Install guacamole-server +RUN curl -SLO "https://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-${GUAC_VER}.tar.gz" \ + && tar -xzf guacamole-server-${GUAC_VER}.tar.gz \ + && cd guacamole-server-${GUAC_VER} \ + && ./configure \ + && make -j$(getconf _NPROCESSORS_ONLN) \ + && make install \ + && cd .. \ + && rm -rf guacamole-server-${GUAC_VER}.tar.gz guacamole-server-${GUAC_VER} \ + && ldconfig + +# Install guacamole-client and postgres auth adapter +RUN rm -rf ${CATALINA_HOME}/webapps/ROOT \ + && curl -SLo ${CATALINA_HOME}/webapps/ROOT.war "https://sourceforge.net/projects/guacamole/files/current/binary/guacamole-${GUAC_VER}.war" \ + && curl -SLo ${GUACAMOLE_HOME}/lib/postgresql-42.1.4.jar "https://jdbc.postgresql.org/download/postgresql-42.1.4.jar" \ + && curl -SLO https://sourceforge.net/projects/guacamole/files/current/extensions/guacamole-auth-jdbc-${GUAC_VER}.tar.gz \ + && tar -xzf guacamole-auth-jdbc-${GUAC_VER}.tar.gz \ + && cp -R guacamole-auth-jdbc-${GUAC_VER}/postgresql/guacamole-auth-jdbc-postgresql-0.9.13-incubating.jar ${GUACAMOLE_HOME}/extensions/ \ + && cp -R guacamole-auth-jdbc-${GUAC_VER}/postgresql/schema ${GUACAMOLE_HOME}/ \ + && rm -rf guacamole-auth-jdbc-${GUAC_VER} guacamole-auth-jdbc-${GUAC_VER}.tar.gz + +# Add optional extensions +RUN mkdir ${GUACAMOLE_HOME}/extensions-available \ + && for i in auth-ldap auth-duo auth-header auth-noauth auth-cas; do \ + echo "https://sourceforge.net/projects/guacamole/files/current/extensions/guacamole-${i}-${GUAC_VER}.tar.gz" \ + && curl -SLO "https://sourceforge.net/projects/guacamole/files/current/extensions/guacamole-${i}-${GUAC_VER}.tar.gz" \ + && tar -xzf guacamole-${i}-${GUAC_VER}.tar.gz \ + && cp guacamole-${i}-${GUAC_VER}/guacamole-${i}-${GUAC_VER}.jar ${GUACAMOLE_HOME}/extensions-available/ \ + && rm -rf guacamole-${i}-${GUAC_VER} guacamole-${i}-${GUAC_VER}.tar.gz \ + ;done + +ENV PATH=/usr/lib/postgresql/${PG_MAJOR}/bin:$PATH +ENV GUACAMOLE_HOME=/config/guacamole + +WORKDIR /config + +COPY root / + +ENTRYPOINT [ "/init" ] diff --git a/README.md b/README.md index d938b58..c2e4555 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ +[![Docker Build Status](https://img.shields.io/docker/build/oznu/guacamole.svg?label=x64%20build&style=for-the-badge)](https://hub.docker.com/r/oznu/guacamole/) [![Travis](https://img.shields.io/travis/oznu/docker-guacamole.svg?label=arm%20build&style=for-the-badge)](https://travis-ci.org/oznu/docker-guacamole) [![Docker Pulls](https://img.shields.io/docker/pulls/oznu/guacamole.svg?style=for-the-badge)](https://hub.docker.com/r/oznu/guacamole/) + # Docker Guacamole -A Docker Container for [Apache Guacamole](https://guacamole.incubator.apache.org/), a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH over HTML5. +A Docker Container for [Apache Guacamole](https://guacamole.incubator.apache.org/), a client-less remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH over HTML5. + +This image will run on most platforms that support Docker including Docker for Mac, Docker for Windows, Synology DSM and Raspberry Pi 2/3 boards. [![IMAGE ALT TEXT](http://img.youtube.com/vi/esgaHNRxdhY/0.jpg)](http://www.youtube.com/watch?v=esgaHNRxdhY "Video Title") @@ -15,6 +19,19 @@ docker run \ oznu/guacamole ``` +## Raspberry Pi 2+ / ARMv7 + +This image will also allow you to run [Apache Guacamole](https://guacamole.incubator.apache.org/) on a Raspberry Pi 2/3 or other Docker-enabled ARMv7/8 devices by using the `armhf` tag. + +```shell +docker run \ + -p 8080:8080 \ + -v :/config \ + oznu/guacamole:armhf +``` + +*This image will not run on ARMv6 devices such as the original Raspberry Pi 1 or the Raspberry Pi Zero.* + ## Parameters The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side.