summary refs log tree commit diff
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2019-08-16 15:37:46 -0700
committerCommit Bot <commit-bot@chromium.org>2019-08-28 22:59:34 +0000
commit971589f7ec1af2904cd5a5b828e9008df9c0bba1 (patch)
tree995c753c1fda239824a5c4651c2dc6d84b4497b3
parent373673c43ae7ea7166d50ab2abb776c8e7f41e4e (diff)
downloadcrosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.tar
crosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.tar.gz
crosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.tar.bz2
crosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.tar.lz
crosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.tar.xz
crosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.tar.zst
crosvm-971589f7ec1af2904cd5a5b828e9008df9c0bba1.zip
docker: make using X11 gpu display easier with docker
This change makes using docker a bit easier when displaying on the hosts
X11 server. The biggest change was that build_crosvm.sh will install the
hosts NVIDIA proprietary driver if needed.

TEST=docker/build_crosvm.sh
     docker/crosvm_wrapper.sh
BUG=None

Change-Id: If64074715b0ad3a06727a4cc764d3ac06c4dfece
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1759139
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Zach Reizner <zachr@chromium.org>
Commit-Queue: Zach Reizner <zachr@chromium.org>
-rw-r--r--docker/Dockerfile5
-rw-r--r--docker/Dockerfile.crosvm12
-rwxr-xr-xdocker/build_crosvm.sh5
-rwxr-xr-xdocker/crosvm_wrapper.sh9
4 files changed, 26 insertions, 5 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index b48506f..b934a24 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -10,14 +10,15 @@ RUN apt-get update && apt-get install -y \
     autoconf \
     automake \
     curl \
-    gcc \
     g++ \
+    gcc \
     git \
+    kmod \
     libcap-dev \
     libdbus-1-dev \
     libdrm-dev \
-    libfdt-dev \
     libegl1-mesa-dev \
+    libfdt-dev \
     libgl1-mesa-dev \
     libgles1-mesa-dev \
     libgles2-mesa-dev \
diff --git a/docker/Dockerfile.crosvm b/docker/Dockerfile.crosvm
index 3a7f293..77ede70 100644
--- a/docker/Dockerfile.crosvm
+++ b/docker/Dockerfile.crosvm
@@ -2,7 +2,7 @@ FROM crosvm-base
 
 COPY . /platform/crosvm
 
-RUN cargo install --features 'default-no-sandbox wl-dmabuf gpu' --path . --root /usr
+RUN cargo install --features 'default-no-sandbox wl-dmabuf gpu x' --path . --root /usr
 
 ARG UID=1000
 ARG GID=1000
@@ -13,4 +13,14 @@ RUN export uid=$UID gid=$GID && \
     echo "chronos:x:${uid}:" >> /etc/group && \
     chown ${uid}:${gid} -R /home/chronos
 
+# Install nvidia proprietary drivers if requested.
+ARG NVIDIA_VERSION=
+RUN if [ -n NVIDIA_VERSION ]; then \
+        nvidia_url=http://us.download.nvidia.com/XFree86/Linux-x86_64 && \
+        nvidia_binary=NVIDIA-Linux-x86_64-"${NVIDIA_VERSION}".run && \
+        curl -LO "${nvidia_url}"/"${NVIDIA_VERSION}"/"${nvidia_binary}" && \
+        chmod +x ./"${nvidia_binary}" && \
+        ./"${nvidia_binary}" --accept-license --silent --no-kernel-module; \
+    fi
+
 ENTRYPOINT ["crosvm"]
diff --git a/docker/build_crosvm.sh b/docker/build_crosvm.sh
index e0d697b..1fb8b79 100755
--- a/docker/build_crosvm.sh
+++ b/docker/build_crosvm.sh
@@ -6,11 +6,16 @@
 set -ex
 cd "${0%/*}"
 
+if command -v nvidia-smi >/dev/null 2>&1; then
+    export NVIDIA_VERSION="$(nvidia-smi -q | grep "Driver Version" | cut -d':' -f 2 | xargs)"
+fi
+
 src_root="$(realpath ..)"
 
 docker build -t crosvm \
     -f Dockerfile.crosvm \
     --build-arg UID \
     --build-arg GID \
+    --build-arg NVIDIA_VERSION \
     "$@" \
     "${src_root}"
diff --git a/docker/crosvm_wrapper.sh b/docker/crosvm_wrapper.sh
index 33891d6..ca68dc7 100755
--- a/docker/crosvm_wrapper.sh
+++ b/docker/crosvm_wrapper.sh
@@ -4,14 +4,19 @@
 # found in the LICENSE file.
 
 set -ex
+
+# grab the pwd before changing it to this script's directory
+pwd="${PWD}"
+
 cd "${0%/*}"
 
 exec docker run -it --rm \
     --privileged \
+    --ipc=host \
     -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
     -v /dev/log:/dev/log \
-    -v /tmp/.X11-unix:/tmp/.X11-unix \
-    --volume "$PWD":/wd \
+    -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
+    --volume "$pwd":/wd \
     --workdir /wd \
     crosvm \
     "$@"