From 15c79ca04fceaa03dd4e995531904dfdedc29ee6 Mon Sep 17 00:00:00 2001 From: Fiorilla Angelo Emanuele Date: Fri, 24 Nov 2023 09:06:13 +0100 Subject: [PATCH 1/2] Dockerfile upgrade --- .dockerignore | 5 ++ Dockerfile | 162 +++++++++++++++++++++++++++++++++++++++------ docker-compose.yml | 34 ++++++++++ 3 files changed, 180 insertions(+), 21 deletions(-) create mode 100644 .dockerignore create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..e5075fbe84 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +.github +.dockerignore +Dockerfile +docker-compose.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 719830dd92..f2aaa43fb9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,141 @@ -FROM ubuntu:16.04 - -RUN apt-get update && apt-get install -y curl openssl \ - && curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | apt-key add - \ - && echo "deb http://dl.bintray.com/jasonbeverage/pelicanmapping xenial main" | tee -a /etc/apt/sources.list \ - && apt-get update -qq \ - && apt-get install -y python-software-properties software-properties-common \ - && add-apt-repository ppa:ubuntugis/ppa --yes \ - && apt-get update -qq \ - && apt-get install -y \ - cmake \ - openscenegraph=3.6.3 \ - gdal-bin \ - libgdal-dev \ - libgeos-dev \ - libsqlite3-dev \ - protobuf-compiler \ - libprotobuf-dev \ - libpoco-dev -COPY . /code -RUN cd /code && cmake -DCMAKE_BUILD_TYPE=Release . && make -j2 && make install && ldconfig \ No newline at end of file +# Build a Docker image to compile and build openscenegraph and osgearth with GL3 + +ARG UID=1000 +ARG GID=1000 +ARG HOME=/home/user + +FROM ubuntu:focal AS devel + +ARG DEBIAN_FRONTEND=noninteractive +ARG HOME + +# Install Dependencies +RUN sed -i '/deb-src/s/^# //' /etc/apt/sources.list + +RUN apt update && apt upgrade -y && \ + apt -y install software-properties-common apt-transport-https + +RUN add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" && \ + apt update && apt upgrade -y + +RUN apt install -y wget build-essential autoconf locate apt-file libspdlog-dev \ + git-all fuse libgl1-mesa-dev psmisc libpq-dev libssl-dev openssl libffi-dev \ + zlib1g-dev libdbus-1-3 desktop-file-utils \ + libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libilmbase-dev \ + libxcb-render-util0 libxcb-xinerama0 libxcb-composite0 libxcb-cursor0 \ + libxcb-damage0 libxcb-dpms0 libxcb-dri2-0 libxcb-dri3-0 libxcb-ewmh2 \ + libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-record0 libxcb-render0 \ + libxcb-res0 libxcb-screensaver0 libxcb-shape0 libxcb-shm0 libxcb-sync1 \ + libxcb-util1 libfontconfig libfontconfig1 libxcb-xkb1 libxkbcommon-x11-0 \ + libegl1-mesa-dev unixodbc-dev curl unzip tar libnss3 libxcomposite1 \ + libxcursor-dev libxtst-dev libxrandr-dev libgtk3.0-cil-dev libcurl4-openssl-dev \ + libomp-dev libstdc++6 ninja-build libboost-all-dev gdal-bin gdal-data \ + libgdal-dev libgeos-dev libgeos++-dev librocksdb-dev freeglut3-dev libglu1-mesa-dev \ + libx11-xcb-dev '^libxcb.*-dev' libxrender-dev libxi-dev libxkbcommon-dev \ + libxkbcommon-x11-dev libxinerama1 libxrandr2 protobuf-compiler libprotobuf-dev \ + ffmpeg libavformat-dev libavdevice-dev libavcodec-dev libavutil-dev libswscale-dev \ + libsdl1.2-dev libsdl2-dev libgtkgl2.0-dev libgtkglext1-dev libjasper-dev libasio-dev \ + dcmtk libvncserver-dev xfonts-scalable libocct-data-exchange-dev libocct-draw-dev \ + libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev \ + libocct-ocaf-dev libocct-visualization-dev libzip-dev libblosc-dev libpoco-dev \ + libgl-dev libsqlite3-dev nano libgstreamer1.0-0 gstreamer1.0-plugins-base \ + libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \ + gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \ + gstreamer1.0-libav gstreamer1.0-x gstreamer1.0-tools gstreamer1.0-gl gstreamer1.0-gtk3 \ + libgomp1 --fix-missing + +# Update gcc for correct c++17 support +ARG GCC=9 +RUN echo "Install GCC ${GCC}" && \ + apt -y install g++-${GCC} && \ + update-alternatives \ + --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC} 60 \ + --slave /usr/bin/g++ g++ /usr/bin/g++-${GCC} \ + --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${GCC} \ + --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${GCC} \ + --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${GCC} && \ + update-alternatives --config gcc + +# Update cmake +ARG CMAKE=3.26.3 +RUN wget -c -nv https://github.com/Kitware/CMake/releases/download/v${CMAKE}/cmake-${CMAKE}-Linux-x86_64.sh && \ + sh cmake-${CMAKE}-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir && \ + rm cmake-${CMAKE}-Linux-x86_64.sh + +ENV LD_LIBRARY_PATH /usr/local/lib/:${LD_LIBRARY_PATH} + +# Install Autodesk FBX +RUN mkdir -p ${HOME}/Downloads && cd ${HOME}/Downloads && \ + wget -q --user-agent="Mozilla" https://damassets.autodesk.net/content/dam/autodesk/www/adn/fbx/2020-0-1/fbx202001_fbxsdk_linux.tar.gz && \ + tar xzvf fbx202001_fbxsdk_linux.tar.gz && \ + chmod a+x fbx202001_fbxsdk_linux + +RUN mkdir -p /usr/fbx202001_fbxsdk_linux && \ + sh -c '/bin/echo -e "yes\nn" | ${HOME}/Downloads/fbx202001_fbxsdk_linux /usr/fbx202001_fbxsdk_linux' && \ + rm -rf ${HOME}/Downloads + +ARG fbx_include="/usr/fbx202001_fbxsdk_linux/include" +ARG fbx_lib_release="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/release/libfbxsdk.a" +ARG fbx_lib_debug="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/debug/libfbxsdk.a" +ARG fbx_xml_lib=libxml2.so +ARG fbx_zlib_lib=libz.so + +# Install OpenSceneGraph dependancies +RUN apt update && apt upgrade -y && apt build-dep -y openscenegraph + +ARG OSG_DIR=/opt/OpenSceneGraph +ARG OSG_TAG=OpenSceneGraph-3.6.5 +WORKDIR ${HOME}/gitrepo +RUN git clone -b ${OSG_TAG} https://github.com/openscenegraph/OpenSceneGraph.git && \ + mkdir OpenSceneGraph/build && cd OpenSceneGraph/build && \ + cmake -DOSG_GL3_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF \ + -DOSG_GLES1_AVAILABLE=OFF -DOSG_GLES2_AVAILABLE=OFF -DOSG_GLES3_AVAILABLE=OFF \ + -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF \ + -DOSG_GL_MATRICES_AVAILABLE=OFF -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF \ + -DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF -DOPENGL_PROFILE=GL3 \ + -DFBX_INCLUDE_DIR="$fbx_include" -DFBX_LIBRARY="$fbx_lib_release" \ + -DFBX_LIBRARY_DEBUG="$fbx_lib_debug" -DFBX_XML2_LIBRARY="$fbx_xml_lib" \ + -DFBX_ZLIB_LIBRARY="$fbx_zlib_lib" \ + -DCMAKE_INSTALL_PREFIX=${OSG_DIR} -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --parallel 4 --target install +ENV LD_LIBRARY_PATH /opt/OpenSceneGraph/lib:$LD_LIBRARY_PATH + +ARG OSGEARTH_DIR=/opt/osgearth +COPY . ${HOME}/gitrepo/osgearth +WORKDIR ${HOME}/gitrepo +RUN sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_imgui/CMakeLists.txt && \ + sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_pick/CMakeLists.txt && \ + sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_collecttriangles/CMakeLists.txt + +RUN mkdir -p ${HOME}/gitrepo/osgearth/build && cd ${HOME}/gitrepo/osgearth/build && \ + cmake -DOSG_DIR=${OSG_DIR} -DOpenGL_GL_PREFERENCE=GLVND \ + -DCMAKE_INSTALL_PREFIX=${OSGEARTH_DIR} -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --parallel 4 --target install + +ENV OSG_DIR ${OSG_DIR} +ENV OSGEARTH_DIR ${OSGEARTH_DIR} + +# Delete all source files +# RUN rm -rf ${HOME}/gitrepo + +# Clean apt cache +RUN apt clean && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* + +# Create user +ARG UID +ARG GID +RUN groupadd -g "${GID}" user && \ + useradd --create-home --home-dir ${HOME} --no-log-init -u "${UID}" -g "${GID}" user &&\ + chown -R user:user ${HOME} + +# Switch to user +USER user + +RUN mkdir -p ${HOME}/xdg +ENV XDG_RUNTIME_DIR=${HOME}/xdg +ENV __NV_PRIME_RENDER_OFFLOAD 1 +ENV __GLX_VENDOR_LIBRARY_NAME nvidia +ENV LD_LIBRARY_PATH /usr/local/lib64:/opt/OpenSceneGraph/lib:/opt/osgearth/lib64:$LD_LIBRARY_PATH +ENV PATH /usr/local/lib64:/opt/OpenSceneGraph/bin:/opt/osgearth/bin:$PATH + +WORKDIR ${HOME} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..38bf8c2358 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,34 @@ +services: + OpenSceneGraph: + image: 'osgearth:latest' + container_name: osgearth + runtime: nvidia + cap_add: + - SYS_ADMIN + - SYS_RAWIO + devices: + - /dev/fuse:/dev/fuse + security_opt: + - apparmor:unconfined + privileged: true + volumes: + - /tmp/.X11-unix:/tmp/.X11-unix + environment: + DISPLAY: $DISPLAY + NVIDIA_DRIVER_CAPABILITIES: all + HOSTNAME: osgearth + stdin_open: true + tty: true + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + build: + context: . + dockerfile: Dockerfile + args: + - "UID=1000" + - "GID=1000" From 2f3dae461b5dc407bef7b07b1436d09dff19253d Mon Sep 17 00:00:00 2001 From: Fiorilla Angelo Emanuele Date: Sun, 26 Nov 2023 20:35:08 +0100 Subject: [PATCH 2/2] GLEW and Draco added to Dockerfile --- Dockerfile | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index f2aaa43fb9..034ed353f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ RUN apt install -y wget build-essential autoconf locate apt-file libspdlog-dev libxcursor-dev libxtst-dev libxrandr-dev libgtk3.0-cil-dev libcurl4-openssl-dev \ libomp-dev libstdc++6 ninja-build libboost-all-dev gdal-bin gdal-data \ libgdal-dev libgeos-dev libgeos++-dev librocksdb-dev freeglut3-dev libglu1-mesa-dev \ - libx11-xcb-dev '^libxcb.*-dev' libxrender-dev libxi-dev libxkbcommon-dev \ + libx11-xcb-dev '^libxcb.*-dev' libxrender-dev libxi-dev libxkbcommon-dev libglew-dev \ libxkbcommon-x11-dev libxinerama1 libxrandr2 protobuf-compiler libprotobuf-dev \ ffmpeg libavformat-dev libavdevice-dev libavcodec-dev libavutil-dev libswscale-dev \ libsdl1.2-dev libsdl2-dev libgtkgl2.0-dev libgtkglext1-dev libjasper-dev libasio-dev \ @@ -84,15 +84,15 @@ ARG fbx_zlib_lib=libz.so RUN apt update && apt upgrade -y && apt build-dep -y openscenegraph ARG OSG_DIR=/opt/OpenSceneGraph -ARG OSG_TAG=OpenSceneGraph-3.6.5 WORKDIR ${HOME}/gitrepo -RUN git clone -b ${OSG_TAG} https://github.com/openscenegraph/OpenSceneGraph.git && \ +RUN git clone https://github.com/openscenegraph/OpenSceneGraph.git && \ mkdir OpenSceneGraph/build && cd OpenSceneGraph/build && \ cmake -DOSG_GL3_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF \ -DOSG_GLES1_AVAILABLE=OFF -DOSG_GLES2_AVAILABLE=OFF -DOSG_GLES3_AVAILABLE=OFF \ -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF \ -DOSG_GL_MATRICES_AVAILABLE=OFF -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF \ -DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF -DOPENGL_PROFILE=GL3 \ + -DOSG_GL_CONTEXT_VERSION=4.6 \ -DFBX_INCLUDE_DIR="$fbx_include" -DFBX_LIBRARY="$fbx_lib_release" \ -DFBX_LIBRARY_DEBUG="$fbx_lib_debug" -DFBX_XML2_LIBRARY="$fbx_xml_lib" \ -DFBX_ZLIB_LIBRARY="$fbx_zlib_lib" \ @@ -100,6 +100,16 @@ RUN git clone -b ${OSG_TAG} https://github.com/openscenegraph/OpenSceneGraph.git cmake --build . --parallel 4 --target install ENV LD_LIBRARY_PATH /opt/OpenSceneGraph/lib:$LD_LIBRARY_PATH +# Install Draco +ARG DRACO_DIR=/opt/Draco +WORKDIR ${HOME}/gitrepo +RUN git clone https://github.com/google/draco.git && \ + mkdir draco/build && cd draco/build && \ + cmake -DCMAKE_INSTALL_PREFIX=${DRACO_DIR} -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --parallel 4 --target install +ENV LD_LIBRARY_PATH ${DRACO_DIR}/lib:$LD_LIBRARY_PATH + +# Install OsgEarth ARG OSGEARTH_DIR=/opt/osgearth COPY . ${HOME}/gitrepo/osgearth WORKDIR ${HOME}/gitrepo