From 971589f7ec1af2904cd5a5b828e9008df9c0bba1 Mon Sep 17 00:00:00 2001 From: Zach Reizner Date: Fri, 16 Aug 2019 15:37:46 -0700 Subject: [PATCH] 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 Tested-by: kokoro Tested-by: Zach Reizner Commit-Queue: Zach Reizner --- docker/Dockerfile | 5 +++-- docker/Dockerfile.crosvm | 12 +++++++++++- docker/build_crosvm.sh | 5 +++++ docker/crosvm_wrapper.sh | 9 +++++++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index b48506f8a1..b934a24dd0 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 3a7f293010..77ede70dc3 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 e0d697b69d..1fb8b79545 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 33891d6716..ca68dc79b1 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 \ "$@"