From 2d154417c3c0e2f037f3511e2f548d0f7b15c11d Mon Sep 17 00:00:00 2001 From: Frank Carey Date: Fri, 30 Dec 2016 13:05:41 -0500 Subject: [PATCH] * Creates an Ubuntu 14.04, tightvnc, bazel image with all the dependencies for building and running lab. * Does an initial compile using 'bazel build :deepmind_lab.so --define headless=osmesa' * Run headless with 'bazel run :random_agent --define headless=osmesa' Issues: * OpenGL currently doesn't work properly for some reason, so running the non-headless version doesn't work. See https://ubuntuforums.org/archive/index.php/t-2257096.html --- .dockerignore | 2 ++ Dockerfile | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ vnc.sh | 6 ++++ 3 files changed, 89 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 vnc.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..acf05c7cf --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +docs +.git diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..080d463c4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,81 @@ +FROM kaixhin/vnc + +MAINTAINER fcarey@gmail.com + +RUN apt-get update && apt-get install -y \ + curl \ + zip \ + unzip \ + software-properties-common \ + python-software-properties && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# We need to add a custom PPA to pick up JDK8, since trusty doesn't +# have an openjdk8 backport. openjdk-r is maintained by a reliable contributor: +# Matthias Klose (https://launchpad.net/~doko). It will do until +# we either update the base image beyond 14.04 or openjdk-8 is +# finally backported to trusty; see e.g. +# https://bugs.launchpad.net/trusty-backports/+bug/1368094 +RUN add-apt-repository -y ppa:openjdk-r/ppa && \ + apt-get update && \ + apt-get install -y openjdk-8-jdk openjdk-8-jre-headless && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + which java && \ + java -version && \ + update-ca-certificates -f + +# Running bazel inside a `docker build` command causes trouble, cf: +# https://github.com/bazelbuild/bazel/issues/134 +# The easiest solution is to set up a bazelrc file forcing --batch. +# RUN echo "startup --batch" >>/root/.bazelrc +# Similarly, we need to workaround sandboxing issues: +# https://github.com/bazelbuild/bazel/issues/418 +# RUN echo "build --spawn_strategy=standalone --genrule_strategy=standalone" \ +# >>/root/.bazelrc +# ENV BAZELRC /root/.bazelrc +# Install the most recent bazel release. +ENV BAZEL_VERSION 0.4.3 +RUN mkdir /bazel && \ + cd /bazel && \ + curl -fSsL -O https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-installer-linux-x86_64.sh && \ + curl -fSsL -o /bazel/LICENSE.txt https://raw.githubusercontent.com/bazelbuild/bazel/master/LICENSE.txt && \ + chmod +x bazel-*.sh && \ + ./bazel-$BAZEL_VERSION-installer-linux-x86_64.sh && \ + cd / && \ + rm -f /bazel/bazel-$BAZEL_VERSION-installer-linux-x86_64.sh + +# Install deepmind-lab dependencies +RUN apt-get update && apt-get install -y \ + lua5.1 \ + liblua5.1-0-dev \ + libffi-dev \ + gettext \ + freeglut3-dev \ + libsdl2-dev \ + libosmesa6-dev \ + python-dev \ + python-numpy \ + realpath \ + build-essential + +#Enable RANDR option for vnc server. +COPY ./vnc.sh /opt/vnc.sh + +# Set the default X11 Display. +ENV DISPLAY :1 + +ENV lab_dir /lab +RUN mkdir /$lab_dir +COPY . /$lab_dir +WORKDIR $lab_dir + +RUN bazel build :deepmind_lab.so --define headless=osmesa + +# RUN bazel run :python_module_test --define headless=osmesa + +#RUN bazel run :random_agent --define headless=false + + + diff --git a/vnc.sh b/vnc.sh new file mode 100644 index 000000000..24841692a --- /dev/null +++ b/vnc.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Remove VNC lock (if process already killed) +rm /tmp/.X1-lock /tmp/.X11-unix/X1 +# Run VNC server with tail in the foreground +vncserver :1 -randr -geometry 1280x800 -depth 24 && tail -F /root/.vnc/*.log