-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* After much debugging, it seems xvfb (virtual frame buffer) needed to be implemented to get opengl working properly. * Switched to using our own from-stratch Dockerfile based on Ubuntu 14.04 * Switched to x11vnc instead of tightvnc since tightvnc didn't seem to work, but not sure if that's still an issue or not. * Added lots of documentation around the various settings used. * Using fluxbox instead of lxdm because it was lighter weight.
- Loading branch information
Frank Carey
committed
Feb 9, 2017
1 parent
82dd0d7
commit f25f642
Showing
3 changed files
with
86 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#!/bin/bash | ||
|
||
# Remove VNC lock (if process already killed) | ||
rm -f /tmp/.X1-lock /tmp/.X11-unix/X1 | ||
|
||
# Set the DISPLAY that will be used by default. Makes lab show up in our xvfb display | ||
export DISPLAY=:1 | ||
|
||
# Start the X virtual frame buffer which uses memory instead of an actual device. | ||
# Allows lab to be run headless. | ||
Xvfb "$DISPLAY" -screen 0 "$XVFB_RESOLUTION" & | ||
|
||
# Run a lightweight Window Manager (fluxbox is smaller than lxdm, gnome, unity, kde, etc) | ||
# (pretty sure this is required.) | ||
fluxbox & | ||
|
||
# Run the x11vnc server | ||
# Explanation of options: | ||
# -display : This needs to match the xvfb display number | ||
# -passwd : Use the password from an ENV var here instead of using ~/.vnc/passwd | ||
# -o : Specifies where to send the log output. | ||
# -noipv6 : Skip trying to serve vnc on ipv6 (avoids warnings) | ||
# -bg : Run in the background | ||
# -forever : Don't die when the first user disconnects from vnc (which is the default) | ||
# -N : Makes it use port 5900+N where N is the display.. so 5901. (default is 5900) | ||
x11vnc \ | ||
-display "$DISPLAY" \ | ||
-passwd "$VNC_PASSWORD" \ | ||
-o /dev/stderr \ | ||
-noipv6 \ | ||
-bg \ | ||
-forever \ | ||
-N |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,29 @@ | ||
FROM kaixhin/vnc | ||
FROM ubuntu:14.04 | ||
|
||
MAINTAINER [email protected] | ||
|
||
# Temporarily shut up warnings. | ||
ENV DISPLAY :0 | ||
ENV TERM xterm | ||
|
||
# Basic Dependencies | ||
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/* | ||
apt-get clean && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
# Dependencies for vnc setup. | ||
RUN apt-get update && apt-get install -y \ | ||
xvfb \ | ||
fluxbox \ | ||
x11vnc && \ | ||
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: | ||
|
@@ -18,13 +32,14 @@ RUN apt-get update && apt-get install -y \ | |
# 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 | ||
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 | ||
|
@@ -48,34 +63,44 @@ RUN mkdir /bazel && \ | |
|
||
# 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 | ||
lua5.1 \ | ||
liblua5.1-0-dev \ | ||
libffi-dev \ | ||
gettext \ | ||
freeglut3-dev \ | ||
libsdl2-dev \ | ||
libosmesa6-dev \ | ||
python-dev \ | ||
python-numpy \ | ||
realpath \ | ||
build-essential && \ | ||
apt-get clean && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
#Enable RANDR option for vnc server. | ||
COPY ./vnc.sh /opt/vnc.sh | ||
|
||
# Set the default X11 Display. | ||
ENV DISPLAY :1 | ||
ENV VNC_PASSWORD=password | ||
ENV XVFB_RESOLUTION=800x600x16 | ||
|
||
# Set up deepmind-lab folder and copy in the code. | ||
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 | ||
# Run an actual (headless) build since this should make subsequent builds much faster. | ||
# Alternative commands based on the Documentation: | ||
# RUN bazel run :random_agent --define headless=false | ||
# RUN bazel build :deepmind_lab.so --define headless=osmesa | ||
RUN bazel run :python_module_test --define headless=osmesa | ||
|
||
# This port is the default for connecting to VNC display :1 | ||
EXPOSE 5901 | ||
|
||
# Copy VNC script that handles restarts and make it executable. | ||
COPY ./.docker/startup.sh /opt/ | ||
RUN chmod u+x /opt/startup.sh | ||
|
||
# Finally, start VNC using our script. | ||
CMD ["/opt/startup.sh"] |